From 9293859e27d82f72bfcd28a0381802056a8bcb0d Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Thu, 7 Nov 2024 15:38:15 +0000 Subject: [PATCH] Add embedded payment form (#7143) * Add some scaffolding Make js pack more robust Add checkout element WIP Update things for prices Add return js for confirmed page Add correct endpoint Sort things out Use stripe publishable-key's meta tag as a key Add meta tag * Continue to add stuff * Copy * Update final copy * Break out partial * Break out partial * Update pricing data * Update the user status when payment is completed * Pay Responsive tweaks (#7144) * Basics * Refine layout * Make more things look cool --------- Co-authored-by: Aron Demeter <66035744+dem4ron@users.noreply.github.com> --- app/controllers/bootcamp_controller.rb | 47 +- app/css/packs/bootcamp.css | 126 +++- app/images/graphics/guarantee.svg | 1 + app/images/icons/checkmark-neon.svg | 1 + .../annotate-intersection-animations.js | 2 +- app/javascript/bootcamp/checkout.js | 41 ++ .../bootcamp/confetti-at-footer-animation.js | 2 +- .../bootcamp/nav-intersection-animations.js | 8 +- app/javascript/bootcamp/return.js | 26 + app/javascript/packs/bootcamp.tsx | 2 + app/models/user/bootcamp_data.rb | 21 +- app/views/bootcamp/_pay_copy.html.haml | 55 ++ app/views/bootcamp/confirmed.html.haml | 21 + .../bootcamp/enrollment_confirmed.html.haml | 24 - app/views/bootcamp/pay.html.haml | 19 + app/views/bootcamp/start_enrolling.html.haml | 5 +- app/views/layouts/bootcamp.haml | 1 + bin/dev | 1 + config/bootcamp.json | 660 +++++++++++++----- config/environments/development.rb | 1 + config/routes.rb | 5 +- 21 files changed, 848 insertions(+), 221 deletions(-) create mode 100644 app/images/graphics/guarantee.svg create mode 100644 app/images/icons/checkmark-neon.svg create mode 100644 app/javascript/bootcamp/checkout.js create mode 100644 app/javascript/bootcamp/return.js create mode 100644 app/views/bootcamp/_pay_copy.html.haml create mode 100644 app/views/bootcamp/confirmed.html.haml delete mode 100644 app/views/bootcamp/enrollment_confirmed.html.haml create mode 100644 app/views/bootcamp/pay.html.haml diff --git a/app/controllers/bootcamp_controller.rb b/app/controllers/bootcamp_controller.rb index ea84f4be26..690fb97d4a 100644 --- a/app/controllers/bootcamp_controller.rb +++ b/app/controllers/bootcamp_controller.rb @@ -1,5 +1,5 @@ class BootcampController < ApplicationController - layout "bootcamp" + layout 'bootcamp' skip_before_action :authenticate_user! before_action :use_user_bootcamp_data! @@ -46,13 +46,52 @@ def do_enrollment ppp_country: @country_code_2 ) - redirect_to action: :enrollment_confirmed, package: params[:package] + redirect_to action: :pay end - def enrollment_confirmed - @price = params[:package] == "complete" ? @complete_price : @part_1_price + def pay; end + + def stripe_create_checkout_session + # Sample for you to use. This will work with Stripe's test cards. + if Rails.env.production? + stripe_price = @bootcamp_data.stripe_price_id + else + stripe_price = "price_1QCjUFEoOT0Jqx0UJOkhigru" + end + + session = Stripe::Checkout::Session.create({ + ui_mode: 'embedded', + customer_email: @bootcamp_data.email, + line_items: [{ + price: stripe_price, + quantity: 1 + }], + mode: 'payment', + allow_promotion_codes: true, + return_url: "#{bootcamp_confirmed_url}?session_id={CHECKOUT_SESSION_ID}" + }) + + render json: { clientSecret: session.client_secret } end + def stripe_session_status + session = Stripe::Checkout::Session.retrieve(params[:session_id]) + + if session.status == 'complete' + @bootcamp_data.update!( + paid_at: Time.current, + payment_intent_id: session.id + ) + end + + render json: { + status: session.status, + customer_email: session.customer_details.email + } + end + + def confirmed; end + private def use_user_bootcamp_data! user_id = cookies.signed[:_exercism_user_id] diff --git a/app/css/packs/bootcamp.css b/app/css/packs/bootcamp.css index f5143c263a..b6bb26443a 100644 --- a/app/css/packs/bootcamp.css +++ b/app/css/packs/bootcamp.css @@ -337,7 +337,7 @@ section#bootcamp { @apply text-[12px] font-semibold; @apply uppercase text-[#7029f5]; @apply mb-16; - @apply mx-auto py-4 px-12 rounded-[12px]; + @apply mx-auto py-4 px-12 rounded-[12px]; @apply bg-[#7029f522]; } h2 { @@ -992,7 +992,9 @@ section#legals { } } -section#enroll { +section#enroll, +section#payment, +section#confirmation { @apply min-h-[100vh]; @apply pt-64 pb-80; background-color: #7029f5; @@ -1021,12 +1023,17 @@ section#enroll { } } + hr { + @apply border-b-1 border-[#eee] my-20; + width: 100%; + } + .container { border: 1px solid #eee; box-shadow: 0 0 30px rgba(0, 0, 0, 0.4); background: white; @apply md:pt-32 md:pb-32 pt-16 pb-8 md:px-48 px-24 rounded-[8px]; - @apply flex flex-col items-center; + @apply flex flex-col; } .tag { @@ -1043,6 +1050,12 @@ section#enroll { @apply font-semibold; } } + p.intro { + @apply md:text-22 text-18 font-light text-left; + strong { + @apply font-semibold; + } + } p.info { @apply md:text-18 text-16 font-light; @@ -1053,19 +1066,15 @@ section#enroll { @apply font-medium; } } +} - .intro { - @apply md:text-22 text-18 font-light; - text-align: center; - text-wrap: balance; - @apply max-w-[750px] mx-auto; - strong { - @apply font-semibold; - } +section#enroll { + .container { + @apply items-center; } - hr { - @apply border-b-1 border-[#eee] my-20; - width: 100%; + + p.intro { + @apply mx-auto text-center; } form { @@ -1215,6 +1224,95 @@ section#enroll { color: rgb(255 255 255); } } +section#payment { + .lg-container { + @apply md:px-[3%] px-8; + .container { + align-items: center; + @apply lg:items-start items-center; + @apply flex lg:flex-row flex-col gap-40; + @apply md:p-24 py-16 px-12; + } + } + .tag { + @apply mx-0; + } + + .lhs { + @apply flex flex-col items-start; + @apply pt-20 mt-[-20px]; + @apply lg:sticky top-0; + h3 { + @apply text-22 mb-8; + } + } + li { + background-image: url("icons/checkmark-neon.svg"); + background-size: 14px; + @apply bg-no-repeat; + @apply pl-20 mb-6; + background-position: 0px 4px; + strong { + @apply font-semibold; + } + } + p.intro { + @apply lg:text-20 md:text-18; + @apply text-pretty; + } + p.info { + @apply text-left text-pretty; + } + + .rhs { + @apply lg:w-[410px] w-[100%] flex-shrink-0; + #checkout { + @apply w-fill; + background: rgb(96, 79, 205); + @apply p-12 rounded-8; + box-shadow: 0 0 10px rgba(96, 79, 205, 0.5); + } + } + .guarantee { + @apply border-1 rounded-8; + @apply py-4 px-4; + @apply sm:mt-20 mt-32; + border-color: rgb(63, 203, 134); + background-color: rgb(244, 255, 250); + h3 { + @apply text-18; + color: rgb(0, 120, 50); + } + p { + color: rgb(0, 120, 50); + } + } +} + +section#confirmation { + .container { + @apply items-start; + @apply flex flex-col; + } + .tag { + @apply mx-0 mb-2; + } + p.intro { + @apply text-pretty; + } + p.info { + @apply text-left text-pretty; + } + p.info + p.info { + @apply mt-12; + } + .spinner { + height: 100px; + width: 100px; + opacity: 0.2; + animation: spin 3s linear infinite; + } +} @keyframes color-change { 0% { diff --git a/app/images/graphics/guarantee.svg b/app/images/graphics/guarantee.svg new file mode 100644 index 0000000000..a6850f4f07 --- /dev/null +++ b/app/images/graphics/guarantee.svg @@ -0,0 +1 @@ +User Secure Streamline Illustration: https://streamlinehq.com \ No newline at end of file diff --git a/app/images/icons/checkmark-neon.svg b/app/images/icons/checkmark-neon.svg new file mode 100644 index 0000000000..8a3a284d62 --- /dev/null +++ b/app/images/icons/checkmark-neon.svg @@ -0,0 +1 @@ +Check Thick Streamline Icon: https://streamlinehq.com \ No newline at end of file diff --git a/app/javascript/bootcamp/annotate-intersection-animations.js b/app/javascript/bootcamp/annotate-intersection-animations.js index 2f25711111..5b1f3267a3 100644 --- a/app/javascript/bootcamp/annotate-intersection-animations.js +++ b/app/javascript/bootcamp/annotate-intersection-animations.js @@ -51,7 +51,7 @@ const roughUnderlineElements = document.querySelectorAll('.rough-underline') const roughHighlightElements = document.querySelectorAll('.rough-highlight') const wavingElement = document.querySelector('.waving-hand') -wavingObserver.observe(wavingElement) +if (wavingElement) wavingObserver.observe(wavingElement) roughUnderlineElements.forEach((element) => { roughUnderlineObserver.observe(element) diff --git a/app/javascript/bootcamp/checkout.js b/app/javascript/bootcamp/checkout.js new file mode 100644 index 0000000000..bb3cf7e8bb --- /dev/null +++ b/app/javascript/bootcamp/checkout.js @@ -0,0 +1,41 @@ +import { loadStripe } from '@stripe/stripe-js' + +if (window.location.pathname === '/bootcamp/pay') { + initialize() +} + +async function initialize() { + const stripeMetaTag = 'meta[name="stripe-publishable-key"]' + const publishableKey = document.querySelector(stripeMetaTag) + + if (!publishableKey) { + console.log(`%cCouldn't find ${stripeMetaTag}`, 'color: yellow') + return + } + + const stripe = await loadStripe(publishableKey.content) + + const fetchClientSecret = async () => { + const response = await fetch('/bootcamp/stripe/create-checkout-session', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]') + .content, + }, + }) + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`) + } + + const data = await response.json() + return data.clientSecret + } + + const checkout = await stripe.initEmbeddedCheckout({ + fetchClientSecret, + }) + + checkout.mount('#checkout') +} diff --git a/app/javascript/bootcamp/confetti-at-footer-animation.js b/app/javascript/bootcamp/confetti-at-footer-animation.js index 7085723563..e0a47fc662 100644 --- a/app/javascript/bootcamp/confetti-at-footer-animation.js +++ b/app/javascript/bootcamp/confetti-at-footer-animation.js @@ -9,7 +9,7 @@ const observer = new IntersectionObserver(([linkedin], observer) => { } }) -observer.observe(linkedin) +if (linkedin) observer.observe(linkedin) /* ========================= helpers & setup ========================= */ function createCanvas() { diff --git a/app/javascript/bootcamp/nav-intersection-animations.js b/app/javascript/bootcamp/nav-intersection-animations.js index 992aa34c61..08c0c49419 100644 --- a/app/javascript/bootcamp/nav-intersection-animations.js +++ b/app/javascript/bootcamp/nav-intersection-animations.js @@ -47,10 +47,10 @@ const bootcampObserver = new IntersectionObserver(bootcampObserverCb, { }) const navObserver = new IntersectionObserver(intersectionCallback) -navObserver.observe(rockSolid) -navObserver.observe(tagline) -navObserver.observe(videoContainer) -bootcampObserver.observe(bootcamp) +if (rockSolid) navObserver.observe(rockSolid) +if (tagline) navObserver.observe(tagline) +if (videoContainer) navObserver.observe(videoContainer) +if (bootcamp) bootcampObserver.observe(bootcamp) /* helper fns */ function smoothOpacityChange(opacity) { diff --git a/app/javascript/bootcamp/return.js b/app/javascript/bootcamp/return.js new file mode 100644 index 0000000000..5107fdd12a --- /dev/null +++ b/app/javascript/bootcamp/return.js @@ -0,0 +1,26 @@ +if (window.location.pathname === '/bootcamp/confirmed') { + initialize() +} + +async function initialize() { + const queryString = window.location.search + const urlParams = new URLSearchParams(queryString) + const sessionId = urlParams.get('session_id') + if (!sessionId) { + // window.location.replace('/bootcamp/pay') + return + } + const response = await fetch( + `/bootcamp/stripe/session-status?session_id=${sessionId}` + ) + const session = await response.json() + + if (session.status == 'open') { + window.location.replace('/bootcamp/pay') + } else if (session.status == 'complete') { + document.getElementById('pending').classList.add('hidden') + document.getElementById('success').classList.remove('hidden') + document.getElementById('customer-email').textContent = + session.customer_email + } +} diff --git a/app/javascript/packs/bootcamp.tsx b/app/javascript/packs/bootcamp.tsx index 007aeb97be..a7e9b5507b 100644 --- a/app/javascript/packs/bootcamp.tsx +++ b/app/javascript/packs/bootcamp.tsx @@ -2,3 +2,5 @@ import '../bootcamp/nav-intersection-animations' import '../bootcamp/annotate-intersection-animations' import '../bootcamp/confetti-at-footer-animation' import '../bootcamp/arrow-animation' +import '../bootcamp/checkout' +import '../bootcamp/return' diff --git a/app/models/user/bootcamp_data.rb b/app/models/user/bootcamp_data.rb index 10f4d53c74..1b4f0f9e55 100644 --- a/app/models/user/bootcamp_data.rb +++ b/app/models/user/bootcamp_data.rb @@ -25,8 +25,8 @@ def price case package when 'complete' country_data ? country_data[2].to_f : COMPLETE_PRICE - when 'part_1' then DATA['part_1_price'] - country_data ? country_data[3].to_f : PART_1_PRICE + when 'part_1' + country_data ? country_data[3].to_f : PART_1_PRICE end end @@ -36,8 +36,19 @@ def payment_url case package when 'complete' country_data ? country_data[4] : FULL_PAYMENT_URL - when 'part_1' then DATA['part_1_price'] - country_data ? country_data[5] : PART_1_PAYMENT_URL + when 'part_1' + country_data ? country_data[5] : PART_1_PAYMENT_URL + end + end + + def stripe_price_id + return unless package + + case package + when 'complete' + country_data ? country_data[6] : FULL_STRIPE_PRICE_ID + when 'part_1' + country_data ? country_data[7] : PART_1_STRIPE_PRICE_ID end end @@ -60,6 +71,8 @@ def discount_percentage DATA = JSON.parse(File.read(Rails.root / 'config' / 'bootcamp.json')).freeze COMPLETE_PRICE = 149.99 PART_1_PRICE = 99.99 + FULL_STRIPE_PRICE_ID = "price_1QD0E7EoOT0Jqx0U9o3IND2o".freeze + PART_1_STRIPE_PRICE_ID = "price_1QD0D3EoOT0Jqx0Uj2UvJ76j".freeze FULL_PAYMENT_URL = "https://buy.stripe.com/14k9BE4FBcyBeDmf0f".freeze PART_1_PAYMENT_URL = "https://buy.stripe.com/6oE4hk9ZVfKNeDm7xO".freeze diff --git a/app/views/bootcamp/_pay_copy.html.haml b/app/views/bootcamp/_pay_copy.html.haml new file mode 100644 index 0000000000..7364d41976 --- /dev/null +++ b/app/views/bootcamp/_pay_copy.html.haml @@ -0,0 +1,55 @@ +%hr + +%p.info.mb-8 +%h3 Here's a reminder of what's included: +- if bootcamp_data.package == "part_1" + %ul + %li + Over 35 hours of + %strong live teaching + (that you can watch back forever). + %li + Weekly sessions to + %strong answer your questions. + %li + Hundreds of hours of + %strong exercises and projects, + in a specially designed interface for beginners. + %li + A + %strong dedicated community + Discord server. + %li + An + %strong official certificate + of completion to put on your resume. + +- else + %ul + %li + Over 70 hours of + %strong live teaching + (that you can watch back forever). + %li + Weekly sessions to + %strong answer your questions. + %li + Hundreds of hours of + %strong exercises and projects, + teaching you both code and web development. + %li + A + %strong dedicated community + Discord server. + %li + An + %strong official certificate + of completion to put on your resume. + +.guarantee + .flex.sm:flex-row.items-center.sm:gap-20.relative + .sm:py-8.pl-12.pt-32 + %h3.mb-2 Learn to Code Guarantee + %p + You're protected by our 100% Learn to Code Guarantee. If you take part, watch the videos, try the projects, and can't code at the end, we'll give you your money back! + = graphical_icon "guarantee", category: :graphics, css_class: "sm:w-[140px] sm:h-[140px] w-[80px] h-[80px] sm:static absolute top-0 sm:left-0 sm:translate-x-0 sm:translate-y-0 left-[50%] -translate-x-1/2 -translate-y-1/2" diff --git a/app/views/bootcamp/confirmed.html.haml b/app/views/bootcamp/confirmed.html.haml new file mode 100644 index 0000000000..5ee2b0e714 --- /dev/null +++ b/app/views/bootcamp/confirmed.html.haml @@ -0,0 +1,21 @@ +%section#confirmation + .xs-container + #pending + .container + .flex.flex-col.items-center.w-fill + = icon "spinner", "Processing", css_class: "spinner" + #success.hidden + .container + .tag Let's get you coding! + %h2 + %strong Congratulations! 🥳 + %p.intro + Your payment has been successfully processed and you're all set! + %hr + + %p.info + We're so excited to have you on board! 💙 + %p.info + You should shortly receive an email welcoming you to the Bootcamp, and asking you to say hello. Please do take a few minutes to tell us your story - it's both incredibly motivating for us to hear about who's taking the Bootcamp, and also means we can better tailor what we're making! + %p.info + Thanks for trusting us with your learning 🙂 diff --git a/app/views/bootcamp/enrollment_confirmed.html.haml b/app/views/bootcamp/enrollment_confirmed.html.haml deleted file mode 100644 index 8ef8fb7e9d..0000000000 --- a/app/views/bootcamp/enrollment_confirmed.html.haml +++ /dev/null @@ -1,24 +0,0 @@ -%section#enroll - .xs-container - .container - .tag Let's get you coding! - %h2 - %strong Congratulations! 🥳 - %p.intro - - if @package == 'part_1' - We've reserved a slot on - %span.whitespace-nowrap Part 1 - of the Bootcamp for you! - - else - We've reserved a slot on the Complete Bootcamp for you! - %hr - - %p.info - %strong Please complete your payment - of $#{@price} using the link below to confirm your enrollment 👇 - - .mt-24.w-fill - - if @package == 'part_1' - = link_to "Complete Payment", @part_1_payment_url, class: "button" - - else - = link_to "Complete Payment", @full_payment_url, class: "button" diff --git a/app/views/bootcamp/pay.html.haml b/app/views/bootcamp/pay.html.haml new file mode 100644 index 0000000000..4cdf9ac407 --- /dev/null +++ b/app/views/bootcamp/pay.html.haml @@ -0,0 +1,19 @@ +%section#payment + .lg-container + .container + .lhs + .tag Let's get you coding! + %h2 + %strong You're almost set up! + %p.intro + We've reserved a space for you on the Bootcamp! + %strong Please add your payment details to finish enrolling 👉 + + %div{ class: "hidden lg:block" } + = render partial: "pay_copy", locals: { bootcamp_data: @bootcamp_data } + + .rhs + #checkout + + %div{ class: "lg:hidden" } + = render partial: "pay_copy", locals: { bootcamp_data: @bootcamp_data } diff --git a/app/views/bootcamp/start_enrolling.html.haml b/app/views/bootcamp/start_enrolling.html.haml index b2ba5b47bf..2a60fff93f 100644 --- a/app/views/bootcamp/start_enrolling.html.haml +++ b/app/views/bootcamp/start_enrolling.html.haml @@ -12,7 +12,6 @@ %hr = form_with url: bootcamp_create_enrollment_path do |f| - .field = f.label :name, "Name" = f.text_field :name, placeholder: 'Your name', value: @name, required: true @@ -26,7 +25,7 @@ .label.mt-24 Choose your course .part-selector.flex.flex-col.gap-12 = f.label "package_part_1" do - = f.radio_button :package, "part_1", checked: true, class: "hidden" + = f.radio_button :package, "part_1", checked: @bootcamp_data.package != "complete", class: "hidden" .package = image_tag "bootcamp/enroll-check.svg", class: 'checkmark' = image_tag "bootcamp/exercism-face-dark.svg", class: "face" @@ -40,7 +39,7 @@ %p Build rock solid coding fundamentals, applicable to every speciality. = f.label "package_complete" do - = f.radio_button :package, "complete", checked: true, class: "hidden" + = f.radio_button :package, "complete", checked: @bootcamp_data.package == "complete", class: "hidden" .package = image_tag "bootcamp/enroll-check.svg", class: 'checkmark' = image_tag "bootcamp/exercism-face-dark.svg", class: "face" diff --git a/app/views/layouts/bootcamp.haml b/app/views/layouts/bootcamp.haml index aff4a94c4b..3d4b00a904 100644 --- a/app/views/layouts/bootcamp.haml +++ b/app/views/layouts/bootcamp.haml @@ -49,6 +49,7 @@ %title= content_for(:title) || "Bootcamp" %meta{ content: "width=device-width,initial-scale=1", name: "viewport" }/ %meta{ content: "yes", name: "apple-mobile-web-app-capable" }/ + %meta{ name: "stripe-publishable-key", content: Exercism.secrets.stripe_publishable_key } = csrf_meta_tags = csp_meta_tag diff --git a/bin/dev b/bin/dev index 0d3634619d..9d4a1d201c 100755 --- a/bin/dev +++ b/bin/dev @@ -4,4 +4,5 @@ rm -rf .built-assets docker run -dp 3042:8080 -p 3040:4566 -p 3041:4566 $(jq -r '.localstack' .dockerimages.json) docker run -dp 9200:9200 -e "discovery.type=single-node" $(jq -r '.opensearch' .dockerimages.json) +yarn install hivemind Procfile.dev diff --git a/config/bootcamp.json b/config/bootcamp.json index a759bfb4c6..2687471da0 100644 --- a/config/bootcamp.json +++ b/config/bootcamp.json @@ -5,7 +5,9 @@ "29.99", "19.99", "https://buy.stripe.com/9AQ5lob3ZeGJdzibIK", - "https://buy.stripe.com/eVa29cgoj8ilfHq6or" + "https://buy.stripe.com/eVa29cgoj8ilfHq6or", + "price_1QD0HHEoOT0Jqx0U6D1SIp4Y", + "price_1QD0HIEoOT0Jqx0UKMDemRly" ], "UZ": [ "Uzbekistan", @@ -13,14 +15,18 @@ "29.99", "19.99", "https://buy.stripe.com/dR66ps6NJ2Y12UEaEI", - "https://buy.stripe.com/aEU6psgoj4258eY6ot" + "https://buy.stripe.com/aEU6psgoj4258eY6ot", + "price_1QD0HJEoOT0Jqx0Ucyzuw9Ig", + "price_1QD0HJEoOT0Jqx0UQSHd2GRn" ], "VE": [ "Venezuela", "Hola", "29.99", "19.99", - "https://buy.stripe.com/cN24hkfkf4250MweV0" + "https://buy.stripe.com/cN24hkfkf4250MweV0", + null, + "price_1QD0HKEoOT0Jqx0UpCpCccOe" ], "LB": [ "Lebanon", @@ -28,7 +34,9 @@ "29.99", "19.99", "https://buy.stripe.com/fZe158dc7dCF1QA007", - "https://buy.stripe.com/8wMeVY0pl0PTfHq5ks" + "https://buy.stripe.com/8wMeVY0pl0PTfHq5ks", + "price_1QD0HMEoOT0Jqx0UVt7dQXD6", + "price_1QD0HMEoOT0Jqx0U4PCVQwoq" ], "EG": [ "Egypt", @@ -36,7 +44,9 @@ "29.99", "19.99", "https://buy.stripe.com/00g1585JFaqtcveaEN", - "https://buy.stripe.com/aEU5lo2xt9mp0Mw14e" + "https://buy.stripe.com/aEU5lo2xt9mp0Mw14e", + "price_1QD0HNEoOT0Jqx0UJLForzZX", + "price_1QD0HOEoOT0Jqx0UEOvYJ9WF" ], "PS": [ "Palestine", @@ -44,7 +54,9 @@ "29.99", "19.99", "https://buy.stripe.com/6oE8xAfkfeGJfHq9AL", - "https://buy.stripe.com/aEUbJMegbaqtdzi9AM" + "https://buy.stripe.com/aEUbJMegbaqtdzi9AM", + "price_1QD0HPEoOT0Jqx0UDpBPHf9J", + "price_1QD0HQEoOT0Jqx0UpW7px54c" ], "NG": [ "Nigeria", @@ -52,7 +64,9 @@ "29.99", "19.99", "https://buy.stripe.com/3cs4hk0pl425fHq3cp", - "https://buy.stripe.com/eVa7twgojgOR9j28wK" + "https://buy.stripe.com/eVa7twgojgOR9j28wK", + "price_1QD0HREoOT0Jqx0UL0O7I3rK", + "price_1QD0HREoOT0Jqx0UneEHcB3c" ], "NE": [ "Niger", @@ -60,7 +74,9 @@ "29.99", "19.99", "https://buy.stripe.com/dR6cNQ7RN0PTgLubIX", - "https://buy.stripe.com/3cs8xAgojbuxgLu00g" + "https://buy.stripe.com/3cs8xAgojbuxgLu00g", + "price_1QD0HSEoOT0Jqx0Up2wqNZnt", + "price_1QD0HTEoOT0Jqx0UeLDkjt3d" ], "MM": [ "Myanmar", @@ -68,7 +84,9 @@ "29.99", "19.99", "https://buy.stripe.com/8wM7tw0pl2Y18eYeVb", - "https://buy.stripe.com/3csg02b3Z569gLu14m" + "https://buy.stripe.com/3csg02b3Z569gLu14m", + "price_1QD0HUEoOT0Jqx0UVatDg0lW", + "price_1QD0HVEoOT0Jqx0U2MZkDbmO" ], "AR": [ "Argentina", @@ -76,7 +94,9 @@ "29.99", "19.99", "https://buy.stripe.com/00g4hk6NJ9mp2UE6oH", - "https://buy.stripe.com/7sIbJM5JFdCFdzi5kE" + "https://buy.stripe.com/7sIbJM5JFdCFdzi5kE", + "price_1QD0HVEoOT0Jqx0UEWzT8zbY", + "price_1QD0HWEoOT0Jqx0UGNCoobj1" ], "LA": [ "Lao", @@ -84,7 +104,9 @@ "29.99", "19.99", "https://buy.stripe.com/eVabJMb3Z2Y12UEeVf", - "https://buy.stripe.com/eVa9BEdc7dCF1QA4gC" + "https://buy.stripe.com/eVa9BEdc7dCF1QA4gC", + "price_1QD0HXEoOT0Jqx0UKSl2Gy0B", + "price_1QD0HYEoOT0Jqx0UAqcncJ83" ], "ET": [ "Ethiopia", @@ -92,7 +114,9 @@ "29.99", "19.99", "https://buy.stripe.com/9AQ5lo9ZV5698eYfZl", - "https://buy.stripe.com/4gwbJM1tp9mp7aU28w" + "https://buy.stripe.com/4gwbJM1tp9mp7aU28w", + "price_1QD0HYEoOT0Jqx0Uul039R5L", + "price_1QD0HZEoOT0Jqx0U3Nzrciy9" ], "LK": [ "Sri Lanka", @@ -100,7 +124,9 @@ "29.99", "19.99", "https://buy.stripe.com/dR6aFI7RNdCFfHq9AZ", - "https://buy.stripe.com/eVa3dg1tp4257aU00q" + "https://buy.stripe.com/eVa3dg1tp4257aU00q", + "price_1QD0HaEoOT0Jqx0Uzqhhgs60", + "price_1QD0HbEoOT0Jqx0U1HcszA8u" ], "PK": [ "Pakistan", @@ -108,7 +134,9 @@ "29.99", "19.99", "https://buy.stripe.com/28o0141tpfKNdzi9B1", - "https://buy.stripe.com/8wMdRUb3ZcyB8eY8wY" + "https://buy.stripe.com/8wMdRUb3ZcyB8eY8wY", + "price_1QD0HbEoOT0Jqx0UQAWJr347", + "price_1QD0HcEoOT0Jqx0UsyNQ1Gp7" ], "TR": [ "Türkiye", @@ -116,7 +144,9 @@ "29.99", "19.99", "https://buy.stripe.com/8wM8xA2xt2Y11QAeVn", - "https://buy.stripe.com/cN2eVY3BxdCF52MfZs" + "https://buy.stripe.com/cN2eVY3BxdCF52MfZs", + "price_1QD0HdEoOT0Jqx0UAKXl3aAD", + "price_1QD0HeEoOT0Jqx0UZ3Df4RpU" ], "GH": [ "Ghana", @@ -124,7 +154,9 @@ "29.99", "19.99", "https://buy.stripe.com/cN2aFI1tp5691QA14z", - "https://buy.stripe.com/aEU7tw7RN8il66Q9B6" + "https://buy.stripe.com/aEU7tw7RN8il66Q9B6", + "price_1QD0HfEoOT0Jqx0UiVYyyLQQ", + "price_1QD0HgEoOT0Jqx0UxsSEY1V0" ], "AF": [ "Afghanistan", @@ -132,7 +164,9 @@ "29.99", "24.99", "https://buy.stripe.com/6oEg023Bx6ad0MweVr", - "https://buy.stripe.com/8wMaFI1tp8ilan6dRo" + "https://buy.stripe.com/8wMaFI1tp8ilan6dRo", + "price_1QD0HhEoOT0Jqx0UJhA4D3QK", + "price_1QD0HiEoOT0Jqx0UouVId42Y" ], "PY": [ "Paraguay", @@ -140,7 +174,9 @@ "34.99", "24.99", "https://buy.stripe.com/4gwcNQ2xteGJ0Mw6oX", - "https://buy.stripe.com/eVag028VR7ehfHq7t2" + "https://buy.stripe.com/eVag028VR7ehfHq7t2", + "price_1QD0HjEoOT0Jqx0U6HTdCyoB", + "price_1QD0HjEoOT0Jqx0Upx5CJbQP" ], "ZM": [ "Zambia", @@ -148,7 +184,9 @@ "34.99", "24.99", "https://buy.stripe.com/cN2bJM6NJ569gLudRr", - "https://buy.stripe.com/4gwcNQ0pl8ildzi8x8" + "https://buy.stripe.com/4gwcNQ0pl8ildzi8x8", + "price_1QD0HkEoOT0Jqx0UGzBbUxjx", + "price_1QD0HlEoOT0Jqx0UJ0kxIZuM" ], "AO": [ "Angola", @@ -156,7 +194,9 @@ "34.99", "24.99", "https://buy.stripe.com/dR66psgojbux66QcNp", - "https://buy.stripe.com/00g7tw7RNgORan67t6" + "https://buy.stripe.com/00g7tw7RNgORan67t6", + "price_1QD0HlEoOT0Jqx0UjjJ23f87", + "price_1QD0HmEoOT0Jqx0UxJpfNXWd" ], "BT": [ "Bhutan", @@ -164,7 +204,9 @@ "34.99", "24.99", "https://buy.stripe.com/bIY7tw0plfKNcvefZD", - "https://buy.stripe.com/aEUdRU2xt6adan614K" + "https://buy.stripe.com/aEUdRU2xt6adan614K", + "price_1QD0HnEoOT0Jqx0UXlZ06TtK", + "price_1QD0HoEoOT0Jqx0Uwu70OmMa" ], "GM": [ "Gambia", @@ -172,7 +214,9 @@ "34.99", "24.99", "https://buy.stripe.com/dR65lo9ZV1TX1QAfZF", - "https://buy.stripe.com/9AQg028VR7eheDm3cU" + "https://buy.stripe.com/9AQg028VR7eheDm3cU", + "price_1QD0HoEoOT0Jqx0UzSY0294C", + "price_1QD0HpEoOT0Jqx0UiSBxHtog" ], "BY": [ "Belarus", @@ -180,7 +224,9 @@ "34.99", "24.99", "https://buy.stripe.com/5kAeVYfkf9mpeDm3cV", - "https://buy.stripe.com/6oEdRUfkf425bra3cW" + "https://buy.stripe.com/6oEdRUfkf425bra3cW", + "price_1QD0HqEoOT0Jqx0UofW0j32M", + "price_1QD0HqEoOT0Jqx0U5UjSj5Mv" ], "BD": [ "Bangladesh", @@ -188,7 +234,9 @@ "34.99", "24.99", "https://buy.stripe.com/bIYcNQ9ZVaqtan68xh", - "https://buy.stripe.com/dR6bJMc83bux9j228U" + "https://buy.stripe.com/dR6bJMc83bux9j228U", + "price_1QD0HrEoOT0Jqx0U8wm4HssF", + "price_1QD0HsEoOT0Jqx0Ud0OuXj7b" ], "KG": [ "Kyrgyzstan", @@ -196,7 +244,9 @@ "34.99", "24.99", "https://buy.stripe.com/8wMbJM6NJ0PTcve5l7", - "https://buy.stripe.com/28og02egbaqt1QA14S" + "https://buy.stripe.com/28og02egbaqt1QA14S", + "price_1QD0HtEoOT0Jqx0U3MgjqxVZ", + "price_1QD0HuEoOT0Jqx0Uz2IovkV0" ], "IN": [ "India", @@ -204,7 +254,9 @@ "34.99", "24.99", "https://buy.stripe.com/9AQ3dg0plcyBgLu14T", - "https://buy.stripe.com/4gwaFI4FBbux52M8xm" + "https://buy.stripe.com/4gwaFI4FBbux52M8xm", + "price_1QD0HvEoOT0Jqx0UfNOBFxLT", + "price_1QD0HvEoOT0Jqx0Un1arkwRQ" ], "NP": [ "Nepal", @@ -212,7 +264,9 @@ "39.99", "24.99", "https://buy.stripe.com/3cs0145JFaqteDm6pf", - "https://buy.stripe.com/dR67tw2xt4258eY00S" + "https://buy.stripe.com/dR67tw2xt4258eY00S", + "price_1QD0HwEoOT0Jqx0UhPd1mKg6", + "price_1QD0HxEoOT0Jqx0U5p7QLDTm" ], "BI": [ "Burundi", @@ -220,7 +274,9 @@ "39.99", "24.99", "https://buy.stripe.com/00geVYc837eh3YI9Bt", - "https://buy.stripe.com/aEU0141tp7ehan6cNG" + "https://buy.stripe.com/aEU0141tp7ehan6cNG", + "price_1QD0HyEoOT0Jqx0U62UHivIV", + "price_1QD0HyEoOT0Jqx0U9ktEssQp" ], "UA": [ "Ukraine", @@ -228,7 +284,9 @@ "39.99", "24.99", "https://buy.stripe.com/7sIdRUegbbuxdzi14Z", - "https://buy.stripe.com/3csbJM0pl6adbrabJE" + "https://buy.stripe.com/3csbJM0pl6adbrabJE", + "price_1QD0HzEoOT0Jqx0Uk8Rzr9FN", + "price_1QD0I0EoOT0Jqx0URie5rYVD" ], "RW": [ "Rwanda", @@ -236,7 +294,9 @@ "39.99", "24.99", "https://buy.stripe.com/cN23dggojdCF3YIcNJ", - "https://buy.stripe.com/5kAaFI0pl7eh9j24he" + "https://buy.stripe.com/5kAaFI0pl7eh9j24he", + "price_1QD0I1EoOT0Jqx0UnlN1ux3W", + "price_1QD0I1EoOT0Jqx0UpzCfsqlJ" ], "TZ": [ "Tanzania", @@ -244,7 +304,9 @@ "39.99", "24.99", "https://buy.stripe.com/cN2cNQegb9mp9j2fZX", - "https://buy.stripe.com/eVa9BEc83cyB8eY4hg" + "https://buy.stripe.com/eVa9BEc83cyB8eY4hg", + "price_1QD0I2EoOT0Jqx0Um57Msci0", + "price_1QD0I3EoOT0Jqx0UKmipVpk2" ], "RU": [null, "Здравствуйте"], "TN": [ @@ -253,7 +315,9 @@ "39.99", "29.99", "https://buy.stripe.com/9AQ4hk4FB5698eY5ll", - "https://buy.stripe.com/bIYg02gojeGJ1QAcNO" + "https://buy.stripe.com/bIYg02gojeGJ1QAcNO", + "price_1QD0I4EoOT0Jqx0Uj71WcpdO", + "price_1QD0I5EoOT0Jqx0UNWjqhMkB" ], "MR": [ "Mauritania", @@ -261,7 +325,9 @@ "39.99", "29.99", "https://buy.stripe.com/dR6eVY0pl8ildzicNP", - "https://buy.stripe.com/fZeaFIegb7ehgLu4hk" + "https://buy.stripe.com/fZeaFIegb7ehgLu4hk", + "price_1QD0I5EoOT0Jqx0UTvqQ30lj", + "price_1QD0I6EoOT0Jqx0UuJaVwdoc" ], "ID": [ "Indonesia", @@ -269,7 +335,9 @@ "44.99", "29.99", "https://buy.stripe.com/28o4hk0pldCFgLu015", - "https://buy.stripe.com/7sI3dgdc7eGJan65lq" + "https://buy.stripe.com/7sI3dgdc7eGJan65lq", + "price_1QD0I7EoOT0Jqx0URwqg6koL", + "price_1QD0I8EoOT0Jqx0UKHqz3iMf" ], "NI": [ "Nicaragua", @@ -277,7 +345,9 @@ "44.99", "29.99", "https://buy.stripe.com/cN2cNQ9ZV7ehcvebJP", - "https://buy.stripe.com/28o9BE8VR6addzi3dk" + "https://buy.stripe.com/28o9BE8VR6addzi3dk", + "price_1QD0I8EoOT0Jqx0UY7XGrLeZ", + "price_1QD0I9EoOT0Jqx0UI7VkouYj" ], "KZ": [ "Kazakhstan", @@ -285,7 +355,9 @@ "44.99", "29.99", "https://buy.stripe.com/5kAdRU8VRdCF7aU15d", - "https://buy.stripe.com/5kAeVY9ZVgOR7aUbJS" + "https://buy.stripe.com/5kAeVY9ZVgOR7aUbJS", + "price_1QD0IAEoOT0Jqx0UuGxcu5Px", + "price_1QD0IBEoOT0Jqx0UwiyJQJPA" ], "CM": [ "Cameroon", @@ -293,7 +365,9 @@ "44.99", "29.99", "https://buy.stripe.com/9AQ1585JFbux0Mw01b", - "https://buy.stripe.com/14kbJM8VRdCFcve4hs" + "https://buy.stripe.com/14kbJM8VRdCFcve4hs", + "price_1QD0IBEoOT0Jqx0Urrtwh1w7", + "price_1QD0ICEoOT0Jqx0UEawEeExT" ], "DZ": [ "Algeria", @@ -301,7 +375,9 @@ "44.99", "29.99", "https://buy.stripe.com/aEU4hkegbgOR7aU01d", - "https://buy.stripe.com/9AQ8xA4FB6ad3YIg0c" + "https://buy.stripe.com/9AQ8xA4FB6ad3YIg0c", + "price_1QD0IDEoOT0Jqx0UWEnFbSx8", + "price_1QD0IEEoOT0Jqx0U08y6pdJC" ], "GE": [ "Georgia", @@ -309,7 +385,9 @@ "49.99", "29.99", "https://buy.stripe.com/aEUeVY3Bx0PT0Mw7tH", - "https://buy.stripe.com/3cs6ps9ZVgOR0MwcO2" + "https://buy.stripe.com/3cs6ps9ZVgOR0MwcO2", + "price_1QD0IFEoOT0Jqx0UDJibqV79", + "price_1QD0IFEoOT0Jqx0UykGHYmyZ" ], "TH": [ "Thailand", @@ -317,7 +395,9 @@ "49.99", "29.99", "https://buy.stripe.com/bIYdRU8VRcyBgLubJZ", - "https://buy.stripe.com/14keVY3BxcyB66Q4hy" + "https://buy.stripe.com/14keVY3BxcyB66Q4hy", + "price_1QD0IGEoOT0Jqx0UQOcShV8X", + "price_1QD0IHEoOT0Jqx0UkK0ZOX4D" ], "TL": [ "Timor-Leste", @@ -325,7 +405,9 @@ "49.99", "29.99", "https://buy.stripe.com/7sI1584FBcyB1QA8xP", - "https://buy.stripe.com/8wM1580plgOR2UEg0i" + "https://buy.stripe.com/8wM1580plgOR2UEg0i", + "price_1QD0IHEoOT0Jqx0U9Ncscqwq", + "price_1QD0IIEoOT0Jqx0U2sle0H0k" ], "MN": [ "Mongolia", @@ -333,7 +415,9 @@ "49.99", "29.99", "https://buy.stripe.com/5kAdRU1tpdCFgLug0j", - "https://buy.stripe.com/00g29c6NJ425fHq3dy" + "https://buy.stripe.com/00g29c6NJ425fHq3dy", + "price_1QD0IJEoOT0Jqx0UOFPaGVD1", + "price_1QD0IKEoOT0Jqx0UMqGR38Ot" ], "CO": [ "Colombia", @@ -341,7 +425,9 @@ "49.99", "29.99", "https://buy.stripe.com/eVaaFI2xt1TXfHq15r", - "https://buy.stripe.com/aEUaFI5JF1TX9j229w" + "https://buy.stripe.com/aEUaFI5JF1TX9j229w", + "price_1QD0ILEoOT0Jqx0U8yUXhAG5", + "price_1QD0ILEoOT0Jqx0Uzx0osmoQ" ], "MK": [ "North Macedonia", @@ -349,7 +435,9 @@ "49.99", "29.99", "https://buy.stripe.com/14k6ps7RN4257aU6pN", - "https://buy.stripe.com/14k014egbgORan615u" + "https://buy.stripe.com/14k014egbgORan615u", + "price_1QD0IMEoOT0Jqx0U7BOHZ9Zt", + "price_1QD0INEoOT0Jqx0UbIt1vNwU" ], "LS": [ "Lesotho", @@ -357,7 +445,9 @@ "49.99", "34.99", "https://buy.stripe.com/9AQ7tw8VR8ilbracOd", - "https://buy.stripe.com/bIYaFIegbaqteDm01s" + "https://buy.stripe.com/bIYaFIegbaqteDm01s", + "price_1QD0INEoOT0Jqx0U58d3e8gy", + "price_1QD0IOEoOT0Jqx0UM3iNrkFh" ], "ML": [ "Mali", @@ -365,7 +455,9 @@ "49.99", "34.99", "https://buy.stripe.com/cN20144FB0PTbra01t", - "https://buy.stripe.com/5kAdRU8VR1TXan66pS" + "https://buy.stripe.com/5kAdRU8VR1TXan66pS", + "price_1QD0IPEoOT0Jqx0Upl1QjJq2", + "price_1QD0IQEoOT0Jqx0Uvr5Ixb0t" ], "MY": [ "Malaysia", @@ -373,7 +465,9 @@ "49.99", "34.99", "https://buy.stripe.com/14kg029ZVgOR52MeWp", - "https://buy.stripe.com/eVa8xAdc7eGJ2UE5lQ" + "https://buy.stripe.com/eVa8xAdc7eGJ2UE5lQ", + "price_1QD0IQEoOT0Jqx0U6VT1JxC7", + "price_1QD0IREoOT0Jqx0UYCblaF4w" ], "CD": [ "Congo", @@ -381,7 +475,9 @@ "49.99", "34.99", "https://buy.stripe.com/3cs29c4FBbuxdzicOj", - "https://buy.stripe.com/8wM1583Bx7eh0Mw8y4" + "https://buy.stripe.com/8wM1583Bx7eh0Mw8y4", + "price_1QD0ISEoOT0Jqx0UvNotW2pt", + "price_1QD0ITEoOT0Jqx0UA1bYHbcx" ], "PH": [ "Philippines", @@ -389,7 +485,9 @@ "49.99", "34.99", "https://buy.stripe.com/8wM8xA4FBfKN1QAaGd", - "https://buy.stripe.com/14kbJM0pl8ilcveaGe" + "https://buy.stripe.com/14kbJM0pl8ilcveaGe", + "price_1QD0ITEoOT0Jqx0Uya73emE4", + "price_1QD0IUEoOT0Jqx0UxibZKugO" ], "UG": [ "Uganda", @@ -397,7 +495,9 @@ "49.99", "34.99", "https://buy.stripe.com/aEUdRUdc78il7aUcOn", - "https://buy.stripe.com/9AQcNQ6NJbux7aUeWw" + "https://buy.stripe.com/9AQcNQ6NJbux7aUeWw", + "price_1QD0IVEoOT0Jqx0URcxC88wa", + "price_1QD0IVEoOT0Jqx0U6eHKnosT" ], "SZ": [ "Eswatini", @@ -405,7 +505,9 @@ "49.99", "34.99", "https://buy.stripe.com/fZeaFIdc7fKNcve29L", - "https://buy.stripe.com/3csbJMegbeGJ3YI15I" + "https://buy.stripe.com/3csbJMegbeGJ3YI15I", + "price_1QD0IWEoOT0Jqx0UmndPznr1", + "price_1QD0IXEoOT0Jqx0Uxyu1RJmV" ], "KH": [ "Cambodia", @@ -413,7 +515,9 @@ "49.99", "34.99", "https://buy.stripe.com/4gw6ps3BxcyB9j28yb", - "https://buy.stripe.com/6oE29cb3Z9mpcve15K" + "https://buy.stripe.com/6oE29cb3Z9mpcve15K", + "price_1QD0IYEoOT0Jqx0UYueS1OHB", + "price_1QD0IYEoOT0Jqx0U5DAXanPj" ], "BJ": [ "Benin", @@ -421,7 +525,9 @@ "49.99", "34.99", "https://buy.stripe.com/00g7tw6NJ9mp8eY9Ch", - "https://buy.stripe.com/eVa0144FBbuxfHq8ye" + "https://buy.stripe.com/eVa0144FBbuxfHq8ye", + "price_1QD0IZEoOT0Jqx0UR3pfT5jG", + "price_1QD0IaEoOT0Jqx0UmEnPqmkr" ], "AZ": [ "Azerbaijan", @@ -429,7 +535,9 @@ "49.99", "34.99", "https://buy.stripe.com/6oE6ps1tp9mpbrag0H", - "https://buy.stripe.com/3cs6ps3Bx2Y1bra29S" + "https://buy.stripe.com/3cs6ps3Bx2Y1bra29S", + "price_1QD0IaEoOT0Jqx0UQDUukcuw", + "price_1QD0IbEoOT0Jqx0UOSsTqAdJ" ], "VN": [ "Viet Nam", @@ -437,7 +545,9 @@ "49.99", "34.99", "https://buy.stripe.com/7sIbJM4FBcyB0Mw3dX", - "https://buy.stripe.com/dR65lo6NJ4250MwcOy" + "https://buy.stripe.com/dR65lo6NJ4250MwcOy", + "price_1QD0IcEoOT0Jqx0U9X5t7f9g", + "price_1QD0IdEoOT0Jqx0UXDth0R38" ], "CI": [ "Côte d'Ivoire", @@ -445,7 +555,9 @@ "49.99", "34.99", "https://buy.stripe.com/cN2bJMegb8il2UEaGr", - "https://buy.stripe.com/9AQ014c830PT3YI8yk" + "https://buy.stripe.com/9AQ014c830PT3YI8yk", + "price_1QD0IdEoOT0Jqx0UCQsIUpD1", + "price_1QD0IeEoOT0Jqx0Uq6Mc0QhL" ], "MU": [ "Mauritius", @@ -453,7 +565,9 @@ "49.99", "34.99", "https://buy.stripe.com/fZedRUdc79mpfHqbKx", - "https://buy.stripe.com/7sIdRU0pl9mp66Q5ma" + "https://buy.stripe.com/7sIdRU0pl9mp66Q5ma", + "price_1QD0IfEoOT0Jqx0U6XZoOQgw", + "price_1QD0IgEoOT0Jqx0UuiRBjUWz" ], "SN": [ "Senegal", @@ -461,7 +575,9 @@ "54.99", "34.99", "https://buy.stripe.com/6oEaFIegbfKN52MbKz", - "https://buy.stripe.com/dR6bJM0plbux2UEg0Q" + "https://buy.stripe.com/dR6bJM0plbux2UEg0Q", + "price_1QD0IgEoOT0Jqx0U6tKfuU49", + "price_1QD0IhEoOT0Jqx0UEcf7GiTb" ], "CG": [ "Congo", @@ -469,7 +585,9 @@ "54.99", "34.99", "https://buy.stripe.com/28oaFIgoj0PTeDm7ul", - "https://buy.stripe.com/7sIbJM3Bx9mpdzi6qi" + "https://buy.stripe.com/7sIbJM3Bx9mpdzi6qi", + "price_1QD0IiEoOT0Jqx0U2mofdiac", + "price_1QD0IjEoOT0Jqx0UcGzLdLXH" ], "MZ": [ "Mozambique", @@ -477,7 +595,9 @@ "54.99", "34.99", "https://buy.stripe.com/aEU3dg9ZVbux3YI01V", - "https://buy.stripe.com/00gg02fkf2Y166Q6qk" + "https://buy.stripe.com/00gg02fkf2Y166Q6qk", + "price_1QD0IkEoOT0Jqx0UENFBz3uk", + "price_1QD0IkEoOT0Jqx0UCZoczA0U" ], "TD": [ "Chad", @@ -485,7 +605,9 @@ "54.99", "34.99", "https://buy.stripe.com/5kAcNQ6NJ0PT3YIeWR", - "https://buy.stripe.com/4gwcNQ1tpaqteDm7uq" + "https://buy.stripe.com/4gwcNQ1tpaqteDm7uq", + "price_1QD0IlEoOT0Jqx0UgVsKQHbg", + "price_1QD0ImEoOT0Jqx0UNsqnbWKQ" ], "BA": [ "Bosnia and Herzegovina", @@ -493,7 +615,9 @@ "54.99", "34.99", "https://buy.stripe.com/dR6eVY7RNgOR1QA5mj", - "https://buy.stripe.com/dR6158egb569cveaGE" + "https://buy.stripe.com/dR6158egb569cveaGE", + "price_1QD0InEoOT0Jqx0UacpHTizL", + "price_1QD0IoEoOT0Jqx0Uu0IDuRMj" ], "GY": [ "Guyana", @@ -501,7 +625,9 @@ "54.99", "34.99", "https://buy.stripe.com/00g4hk3Bx0PT8eY6qp", - "https://buy.stripe.com/5kA9BEfkf8ilcve2aa" + "https://buy.stripe.com/5kA9BEfkf8ilcve2aa", + "price_1QD0IoEoOT0Jqx0UyoAxB21Y", + "price_1QD0IpEoOT0Jqx0U2HCsZ17P" ], "SR": [ "Suriname", @@ -509,7 +635,9 @@ "54.99", "36.86", "https://buy.stripe.com/4gwg02goj569an6bKL", - "https://buy.stripe.com/28o3dg2xteGJ0Mw9CE" + "https://buy.stripe.com/28o3dg2xteGJ0Mw9CE", + "price_1QD0IqEoOT0Jqx0Uhkw2xCgW", + "price_1QD0IrEoOT0Jqx0UDogCc0cg" ], "LY": [ "Libya", @@ -517,7 +645,9 @@ "54.99", "37.06", "https://buy.stripe.com/eVa7twc832Y1an65mp", - "https://buy.stripe.com/28o5lo5JFfKN1QAg14" + "https://buy.stripe.com/28o5lo5JFfKN1QAg14", + "price_1QD0IrEoOT0Jqx0U9va727Pk", + "price_1QD0IsEoOT0Jqx0Ug61e2Of3" ], "GQ": [ "Equatorial Guinea", @@ -525,7 +655,9 @@ "54.99", "37.55", "https://buy.stripe.com/fZe9BE1tpeGJ1QA2af", - "https://buy.stripe.com/dR68xA5JF2Y1fHqg16" + "https://buy.stripe.com/dR68xA5JF2Y1fHqg16", + "price_1QD0ItEoOT0Jqx0Ub9CjHmfH", + "price_1QD0ItEoOT0Jqx0UfwI8upiO" ], "BW": [ "Botswana", @@ -533,7 +665,9 @@ "54.99", "37.63", "https://buy.stripe.com/eVabJM4FBaqtgLubKR", - "https://buy.stripe.com/7sI29c1tp1TXfHq2ai" + "https://buy.stripe.com/7sI29c1tp1TXfHq2ai", + "price_1QD0IuEoOT0Jqx0UzMdiz5DJ", + "price_1QD0IvEoOT0Jqx0UVhrQxrNh" ], "AM": [ "Armenia", @@ -541,7 +675,9 @@ "54.99", "34.99", "https://buy.stripe.com/cN2158b3Z1TXeDmbKT", - "https://buy.stripe.com/5kAcNQb3ZdCF0MwbKU" + "https://buy.stripe.com/5kAcNQb3ZdCF0MwbKU", + "price_1QD0IwEoOT0Jqx0UaQABbKMp", + "price_1QD0IwEoOT0Jqx0UZN4TsgSd" ], "RO": [ "Romania", @@ -549,7 +685,9 @@ "59.99", "39.99", "https://buy.stripe.com/28oaFIdc7569bra7uF", - "https://buy.stripe.com/aEUdRUfkffKNbra7uG" + "https://buy.stripe.com/aEUdRUfkffKNbra7uG", + "price_1QD0IxEoOT0Jqx0UN3Lgo3lO", + "price_1QD0IyEoOT0Jqx0U95iqM9PV" ], "GN": [ "Guinea", @@ -557,7 +695,9 @@ "59.99", "39.99", "https://buy.stripe.com/dR66ps1tp1TX0Mw2an", - "https://buy.stripe.com/5kAdRU6NJ7eheDmg1e" + "https://buy.stripe.com/5kAdRU6NJ7eheDmg1e", + "price_1QD0IzEoOT0Jqx0UeoOGehjN", + "price_1QD0J0EoOT0Jqx0UjNEwEQgQ" ], "ME": [ "Montenegro", @@ -565,7 +705,9 @@ "59.99", "39.99", "https://buy.stripe.com/cN21588VR6adfHq9CR", - "https://buy.stripe.com/cN229c8VRaqt3YI3eu" + "https://buy.stripe.com/cN229c8VRaqt3YI3eu", + "price_1QD0J1EoOT0Jqx0UyEmWHqKN", + "price_1QD0J2EoOT0Jqx0UTewt7UDa" ], "MA": [ "Morocco", @@ -573,7 +715,9 @@ "59.99", "39.99", "https://buy.stripe.com/5kAdRU2xtbux9j2aGX", - "https://buy.stripe.com/5kA4hkb3ZfKNbrabL2" + "https://buy.stripe.com/5kA4hkb3ZfKNbrabL2", + "price_1QD0J2EoOT0Jqx0USROcAiSk", + "price_1QD0J3EoOT0Jqx0UgZFDGqsf" ], "DO": [ "Dominican Republic", @@ -581,7 +725,9 @@ "59.99", "39.99", "https://buy.stripe.com/3csg021tp9mp52M16p", - "https://buy.stripe.com/bIY4hkdc75699j2bL4" + "https://buy.stripe.com/bIY4hkdc75699j2bL4", + "price_1QD0J4EoOT0Jqx0Uzy0iyF5d", + "price_1QD0J5EoOT0Jqx0UxIWNAU3Z" ], "MD": [ "Moldova", @@ -589,7 +735,9 @@ "59.99", "39.99", "https://buy.stripe.com/eVa29c4FBaqtbrabL5", - "https://buy.stripe.com/dR6eVY3BxeGJ66Q9CY" + "https://buy.stripe.com/dR6eVY3BxeGJ66Q9CY", + "price_1QD0J5EoOT0Jqx0U2jO1pp7x", + "price_1QD0J6EoOT0Jqx0UInKpTACM" ], "BN": [ "Brunei Darussalam", @@ -597,7 +745,9 @@ "59.99", "39.99", "https://buy.stripe.com/dR629c5JF6ad3YI16t", - "https://buy.stripe.com/eVag028VRbux9j27uS" + "https://buy.stripe.com/eVag028VRbux9j27uS", + "price_1QD0J7EoOT0Jqx0U9IKCyKV0", + "price_1QD0J8EoOT0Jqx0Uv9ONjkdh" ], "FJ": [ "Fiji", @@ -605,7 +755,9 @@ "59.99", "39.99", "https://buy.stripe.com/7sIbJMgojfKN52McPd", - "https://buy.stripe.com/eVa1580pl7eh52M9D2" + "https://buy.stripe.com/eVa1580pl7eh52M9D2", + "price_1QD0J9EoOT0Jqx0U7yrV6aeH", + "price_1QD0J9EoOT0Jqx0UcfosHjfH" ], "CF": [ "Central African Republic", @@ -613,7 +765,9 @@ "59.99", "39.99", "https://buy.stripe.com/7sI5loegb9mpcve3eF", - "https://buy.stripe.com/28obJM4FBaqt2UEdTk" + "https://buy.stripe.com/28obJM4FBaqt2UEdTk", + "price_1QD0JAEoOT0Jqx0UO0bue6HA", + "price_1QD0JBEoOT0Jqx0UtvNdSZGf" ], "RS": [ "Serbia", @@ -621,7 +775,9 @@ "59.99", "39.99", "https://buy.stripe.com/bIYdRU4FB1TXan67uX", - "https://buy.stripe.com/00gaFIfkfbux0Mw9D6" + "https://buy.stripe.com/00gaFIfkfbux0Mw9D6", + "price_1QD0JBEoOT0Jqx0UQo4xLgso", + "price_1QD0JCEoOT0Jqx0UMEdHwNpR" ], "EC": [ "Ecuador", @@ -629,7 +785,9 @@ "59.99", "39.99", "https://buy.stripe.com/4gw4hk7RN2Y166Q6qV", - "https://buy.stripe.com/00gdRU3BxfKN7aUaHc" + "https://buy.stripe.com/00gdRU3BxfKN7aUaHc", + "price_1QD0JDEoOT0Jqx0UrP3unanW", + "price_1QD0JEEoOT0Jqx0UhxGhJGzw" ], "BG": [ "Bulgaria", @@ -637,7 +795,9 @@ "59.99", "39.99", "https://buy.stripe.com/14keVY1tp2Y1an602z", - "https://buy.stripe.com/7sI4hk6NJ9mp0MwbLi" + "https://buy.stripe.com/7sI4hk6NJ9mp0MwbLi", + "price_1QD0JFEoOT0Jqx0UpJspqtsl", + "price_1QD0JFEoOT0Jqx0UvW2o4LEh" ], "NA": [ "Namibia", @@ -645,7 +805,9 @@ "59.99", "39.99", "https://buy.stripe.com/28o3dggojaqt7aUeXv", - "https://buy.stripe.com/14kbJMgojfKNgLu3eO" + "https://buy.stripe.com/14kbJMgojfKNgLu3eO", + "price_1QD0JGEoOT0Jqx0U6rhxnlNA", + "price_1QD0JHEoOT0Jqx0UJS4TSSWw" ], "KM": [ "Comoros", @@ -653,7 +815,9 @@ "59.99", "39.99", "https://buy.stripe.com/bIY3dg5JFbux66Q16H", - "https://buy.stripe.com/4gw3dgb3ZdCF8eYeXy" + "https://buy.stripe.com/4gw3dgb3ZdCF8eYeXy", + "price_1QD0JHEoOT0Jqx0Ug8ujvIQK", + "price_1QD0JIEoOT0Jqx0UsteK1QfY" ], "ZA": [ "South Africa", @@ -661,7 +825,9 @@ "59.99", "39.99", "https://buy.stripe.com/28og021tp2Y18eYdTv", - "https://buy.stripe.com/eVa29cdc7dCF7aUaHk" + "https://buy.stripe.com/eVa29cdc7dCF7aUaHk", + "price_1QD0JJEoOT0Jqx0UqgmqHcAl", + "price_1QD0JKEoOT0Jqx0UxthNx7Rx" ], "GT": [ "Guatemala", @@ -669,7 +835,9 @@ "59.99", "39.99", "https://buy.stripe.com/00gbJM4FB4259j2bLp", - "https://buy.stripe.com/bIY1587RN4251QAaHm" + "https://buy.stripe.com/bIY1587RN4251QAaHm", + "price_1QD0JLEoOT0Jqx0UUqdJFhNT", + "price_1QD0JMEoOT0Jqx0UUvzG0j0q" ], "SV": [ "El Salvador", @@ -677,7 +845,9 @@ "59.99", "39.99", "https://buy.stripe.com/5kA6ps8VRaqtcvedTz", - "https://buy.stripe.com/8wM4hkfkf425cve2aS" + "https://buy.stripe.com/8wM4hkfkf425cve2aS", + "price_1QD0JNEoOT0Jqx0UEPahlqS6", + "price_1QD0JOEoOT0Jqx0Uo07uZ98y" ], "JO": [ "Jordan", @@ -685,7 +855,9 @@ "64.99", "39.99", "https://buy.stripe.com/3csaFIc83fKNeDm8zh", - "https://buy.stripe.com/3cs3dg8VR1TX2UE16Q" + "https://buy.stripe.com/3cs3dg8VR1TX2UE16Q", + "price_1QD0JPEoOT0Jqx0U2K7cNdmG", + "price_1QD0JQEoOT0Jqx0UD2W78imA" ], "BR": [ "Brazil", @@ -693,7 +865,9 @@ "64.99", "39.99", "https://buy.stripe.com/6oE4hk0plgORfHqdTD", - "https://buy.stripe.com/14kbJM4FB4252UE9Do" + "https://buy.stripe.com/14kbJM4FB4252UE9Do", + "price_1QD0JREoOT0Jqx0UjyHifaFg", + "price_1QD0JSEoOT0Jqx0UTH0Qg8jQ" ], "HN": [ "Honduras", @@ -701,7 +875,9 @@ "64.99", "39.99", "https://buy.stripe.com/14k5lob3ZgOR7aUbLx", - "https://buy.stripe.com/3cs5lo9ZVcyB3YI4j6" + "https://buy.stripe.com/3cs5lo9ZVcyB3YI4j6", + "price_1QD0JTEoOT0Jqx0UaivNEh50", + "price_1QD0JUEoOT0Jqx0UqiOE0dlu" ], "AL": [ "Albania", @@ -709,7 +885,9 @@ "64.99", "39.99", "https://buy.stripe.com/14kaFI7RN9mpdziaHv", - "https://buy.stripe.com/8wM4hkfkf0PT8eY8zo" + "https://buy.stripe.com/8wM4hkfkf0PT8eY8zo", + "price_1QD0JUEoOT0Jqx0UHqkt6BqL", + "price_1QD0JVEoOT0Jqx0UOmfapEhQ" ], "BO": [ "Bolivia", @@ -717,7 +895,9 @@ "64.99", "39.99", "https://buy.stripe.com/bIY8xA3Bx1TXfHq7vl", - "https://buy.stripe.com/28og024FB0PTcve8zq" + "https://buy.stripe.com/28og024FB0PTcve8zq", + "price_1QD0JWEoOT0Jqx0Ue9jg4dIV", + "price_1QD0JXEoOT0Jqx0UHW4nrTjf" ], "CR": [ "Costa Rica", @@ -725,7 +905,9 @@ "64.99", "39.99", "https://buy.stripe.com/4gwg027RN2Y1dzicPH", - "https://buy.stripe.com/00g5loc83eGJ9j2170" + "https://buy.stripe.com/00g5loc83eGJ9j2170", + "price_1QD0JXEoOT0Jqx0Uqzy6cN34", + "price_1QD0JYEoOT0Jqx0UPn5SLrIu" ], "IQ": [ "Iraq", @@ -733,7 +915,9 @@ "64.99", "44.99", "https://buy.stripe.com/28obJM4FBgORan6aHB", - "https://buy.stripe.com/4gw1588VR7eh0Mw7vq" + "https://buy.stripe.com/4gw1588VR7eh0Mw7vq", + "price_1QD0JZEoOT0Jqx0UdwtSpXam", + "price_1QD0JaEoOT0Jqx0UCCn7LLQM" ], "KE": [ "Kenya", @@ -741,7 +925,9 @@ "64.99", "44.99", "https://buy.stripe.com/8wM29c2xtfKNgLubLH", - "https://buy.stripe.com/eVa158goj4252UE4jg" + "https://buy.stripe.com/eVa158goj4252UE4jg", + "price_1QD0JaEoOT0Jqx0U8o0mWk2B", + "price_1QD0JbEoOT0Jqx0UZ2S6Xijm" ], "OM": [ "Oman", @@ -749,7 +935,9 @@ "64.99", "44.99", "https://buy.stripe.com/dR65lo5JF42566Q3fd", - "https://buy.stripe.com/3cseVY6NJbuxbra7vu" + "https://buy.stripe.com/3cseVY6NJbuxbra7vu", + "price_1QD0JcEoOT0Jqx0UrRqZxZac", + "price_1QD0JcEoOT0Jqx0U161EhtDK" ], "CL": [ "Chile", @@ -757,7 +945,9 @@ "69.99", "44.99", "https://buy.stripe.com/eVaeVY4FB6ad3YIaHH", - "https://buy.stripe.com/7sI8xA5JF8il8eY7vw" + "https://buy.stripe.com/7sI8xA5JF8il8eY7vw", + "price_1QD0JdEoOT0Jqx0U0Db0LvcB", + "price_1QD0JeEoOT0Jqx0Urnhy3AhF" ], "PA": [ "Panama", @@ -765,7 +955,9 @@ "69.99", "44.99", "https://buy.stripe.com/3cs9BE2xteGJ3YIcPR", - "https://buy.stripe.com/3cs6ps1tpbux8eY8zC" + "https://buy.stripe.com/3cs6ps1tpbux8eY8zC", + "price_1QD0JfEoOT0Jqx0UJ98HJhY2", + "price_1QD0JfEoOT0Jqx0UBiEYuRPq" ], "HU": [ "Hungary", @@ -773,7 +965,9 @@ "69.99", "44.99", "https://buy.stripe.com/6oEcNQ6NJ2Y18eY2bf", - "https://buy.stripe.com/aEU8xA3BxeGJ0Mw17c" + "https://buy.stripe.com/aEU8xA3BxeGJ0Mw17c", + "price_1QD0JgEoOT0Jqx0UO4qnguWH", + "price_1QD0JhEoOT0Jqx0UBugiGDtU" ], "BH": [ "Bahrain", @@ -781,7 +975,9 @@ "69.99", "44.99", "https://buy.stripe.com/aEU7tw5JFfKN8eY7vB", - "https://buy.stripe.com/dR6bJMb3Z1TXbradU0" + "https://buy.stripe.com/dR6bJMb3Z1TXbradU0", + "price_1QD0JiEoOT0Jqx0UJfuzgvLN", + "price_1QD0JiEoOT0Jqx0U8vcpTrqT" ], "HR": [ "Croatia", @@ -789,7 +985,9 @@ "69.99", "44.99", "https://buy.stripe.com/6oE7tw3Bx2Y1dzi7vD", - "https://buy.stripe.com/cN28xAfkf4253YI4js" + "https://buy.stripe.com/cN28xAfkf4253YI4js", + "price_1QD0JjEoOT0Jqx0U1z3Lv8df", + "price_1QD0JkEoOT0Jqx0UwmIyaUlO" ], "PL": [ "Poland", @@ -797,7 +995,9 @@ "69.99", "44.99", "https://buy.stripe.com/eVa3dgegb1TXgLu2bl", - "https://buy.stripe.com/cN2158goj4257aU2bm" + "https://buy.stripe.com/cN2158goj4257aU2bm", + "price_1QD0JlEoOT0Jqx0UGb4KmmHS", + "price_1QD0JlEoOT0Jqx0U3t09at8I" ], "CV": [ "Cabo Verde", @@ -805,7 +1005,9 @@ "69.99", "49.99", "https://buy.stripe.com/28og024FB425bra3fr", - "https://buy.stripe.com/fZe6ps5JFcyB1QAaHU" + "https://buy.stripe.com/fZe6ps5JFcyB1QAaHU", + "price_1QD0JmEoOT0Jqx0U6p5aa1mW", + "price_1QD0JnEoOT0Jqx0UCTWbYtb2" ], "SA": [ "Saudi Arabia", @@ -813,7 +1015,9 @@ "69.99", "49.99", "https://buy.stripe.com/14k29c7RN2Y11QAeYb", - "https://buy.stripe.com/cN20143Bx7eh7aU3fu" + "https://buy.stripe.com/cN20143Bx7eh7aU3fu", + "price_1QD0JnEoOT0Jqx0UYyYFDcWJ", + "price_1QD0JoEoOT0Jqx0UqzI40qIQ" ], "MX": [ "Mexico", @@ -821,7 +1025,9 @@ "69.99", "49.99", "https://buy.stripe.com/eVa5lofkfdCF0Mw7vL", - "https://buy.stripe.com/eVa9BE5JFbux7aUaHY" + "https://buy.stripe.com/eVa9BE5JFbux7aUaHY", + "price_1QD0JpEoOT0Jqx0UGvkOti0z", + "price_1QD0JqEoOT0Jqx0UnXdl7eqg" ], "DJ": [ "Djibouti", @@ -829,7 +1035,9 @@ "74.99", "49.99", "https://buy.stripe.com/7sIcNQ8VRgOR2UE8zR", - "https://buy.stripe.com/bIY158egb5693YI3fy" + "https://buy.stripe.com/bIY158egb5693YI3fy", + "price_1QD0JqEoOT0Jqx0UGasqWZ4R", + "price_1QD0JrEoOT0Jqx0U0XsyMGQM" ], "PE": [ "Peru", @@ -837,7 +1045,9 @@ "74.99", "49.99", "https://buy.stripe.com/aEU29c4FB8il7aU03n", - "https://buy.stripe.com/5kA9BE6NJ425an6eYi" + "https://buy.stripe.com/5kA9BE6NJ425an6eYi", + "price_1QD0JsEoOT0Jqx0UGgHUxu07", + "price_1QD0JtEoOT0Jqx0Ut1LPngTR" ], "DM": [ "Dominica", @@ -845,7 +1055,9 @@ "74.99", "49.99", "https://buy.stripe.com/6oE29c5JFaqteDm4jF", - "https://buy.stripe.com/8wMdRU3BxeGJ0MwcQc" + "https://buy.stripe.com/8wMdRU3BxeGJ0MwcQc", + "price_1QD0JtEoOT0Jqx0UHBla48xn", + "price_1QD0JuEoOT0Jqx0U97OM1y2I" ], "CN": [ "China", @@ -853,7 +1065,9 @@ "74.99", "49.99", "https://buy.stripe.com/4gw9BEc83buxeDm2bz", - "https://buy.stripe.com/6oE4hk0plaqtbra6rQ" + "https://buy.stripe.com/6oE4hk0plaqtbra6rQ", + "price_1QD0JvEoOT0Jqx0U7fbwVDZv", + "price_1QD0JwEoOT0Jqx0UK5iILpx5" ], "MV": [ "Maldives", @@ -861,7 +1075,9 @@ "74.99", "49.99", "https://buy.stripe.com/00gbJMc83bux1QAeYn", - "https://buy.stripe.com/9AQ1586NJdCF7aUbMc" + "https://buy.stripe.com/9AQ1586NJdCF7aUbMc", + "price_1QD0JwEoOT0Jqx0UvWFGIBhq", + "price_1QD0JxEoOT0Jqx0UkS8jJhY1" ], "VC": [ "Saint Vincent and the Grenadines", @@ -869,7 +1085,9 @@ "74.99", "49.99", "https://buy.stripe.com/eVa5lodc70PT66Q4jL", - "https://buy.stripe.com/eVa3dg5JFbuxfHqbMe" + "https://buy.stripe.com/eVa3dg5JFbuxfHqbMe", + "price_1QD0JyEoOT0Jqx0UNses32bW", + "price_1QD0JzEoOT0Jqx0UaKX5HG4o" ], "LT": [ "Lithuania", @@ -877,7 +1095,9 @@ "79.99", "49.99", "https://buy.stripe.com/bIY29cgoj5693YI7vZ", - "https://buy.stripe.com/7sIbJMfkffKN0Mw7w0" + "https://buy.stripe.com/7sIbJMfkffKN0Mw7w0", + "price_1QD0JzEoOT0Jqx0Uq7YuBDUU", + "price_1QD0K0EoOT0Jqx0UK2ThuVZM" ], "CZ": [ "Czechia", @@ -885,7 +1105,9 @@ "79.99", "49.99", "https://buy.stripe.com/dR6bJMegb6ad3YI7w1", - "https://buy.stripe.com/aEU9BE3BxcyB8eYdUq" + "https://buy.stripe.com/aEU9BE3BxcyB8eYdUq", + "price_1QD0K1EoOT0Jqx0UR5tjt9GO", + "price_1QD0K2EoOT0Jqx0Uk7Baf5G1" ], "SC": [ "Seychelles", @@ -893,7 +1115,9 @@ "79.99", "54.99", "https://buy.stripe.com/fZedRU1tpfKN66QcQn", - "https://buy.stripe.com/cN2bJM9ZVgORfHq6s0" + "https://buy.stripe.com/cN2bJM9ZVgORfHq6s0", + "price_1QD0K2EoOT0Jqx0UaFyQmwKp", + "price_1QD0K3EoOT0Jqx0UXotgab4r" ], "LV": [ "Latvia", @@ -901,7 +1125,9 @@ "79.99", "54.99", "https://buy.stripe.com/00g3dg5JF425dzi8A9", - "https://buy.stripe.com/fZe7tw4FBeGJ0Mw03E" + "https://buy.stripe.com/fZe7tw4FBeGJ0Mw03E", + "price_1QD0K4EoOT0Jqx0UXNTi9VVt", + "price_1QD0K5EoOT0Jqx0UM4WNPFVF" ], "AE": [ "United Arab Emirates", @@ -909,7 +1135,9 @@ "79.99", "54.99", "https://buy.stripe.com/dR65lo8VR6addziaIj", - "https://buy.stripe.com/5kA5loc832Y1an67w8" + "https://buy.stripe.com/5kA5loc832Y1an67w8", + "price_1QD0K5EoOT0Jqx0UVNgsQeBl", + "price_1QD0K6EoOT0Jqx0UhHyh4A4u" ], "SK": [ "Slovakia", @@ -917,7 +1145,9 @@ "79.99", "54.99", "https://buy.stripe.com/dR61581tpfKN1QA6s5", - "https://buy.stripe.com/28oeVYc83gORfHq2bQ" + "https://buy.stripe.com/28oeVYc83gORfHq2bQ", + "price_1QD0K7EoOT0Jqx0UXdLezrto", + "price_1QD0K8EoOT0Jqx0U9wzKqGGY" ], "HT": [ "Haiti", @@ -925,7 +1155,9 @@ "79.99", "54.99", "https://buy.stripe.com/eVacNQ0pl0PT8eYcQv", - "https://buy.stripe.com/14kbJM3Bx425eDmbMs" + "https://buy.stripe.com/14kbJM3Bx425eDmbMs", + "price_1QD0K8EoOT0Jqx0UMIVZEkJk", + "price_1QD0K9EoOT0Jqx0UUBVknacg" ], "TT": [ "Trinidad and Tobago", @@ -933,7 +1165,9 @@ "84.99", "54.99", "https://buy.stripe.com/eVaaFIdc78il0Mw4k1", - "https://buy.stripe.com/6oE29c0plcyB9j27we" + "https://buy.stripe.com/6oE29c0plcyB9j27we", + "price_1QD0KAEoOT0Jqx0UBGmExDdQ", + "price_1QD0KBEoOT0Jqx0UXhUiRXIv" ], "PT": [ "Portugal", @@ -941,7 +1175,9 @@ "84.99", "54.99", "https://buy.stripe.com/aEUg02dc7fKN52M4k3", - "https://buy.stripe.com/fZe29c5JF1TXgLu03O" + "https://buy.stripe.com/fZe29c5JF1TXgLu03O", + "price_1QD0KBEoOT0Jqx0UEfTU2BsJ", + "price_1QD0KCEoOT0Jqx0UAhr0SsNw" ], "JM": [ "Jamaica", @@ -949,7 +1185,9 @@ "84.99", "54.99", "https://buy.stripe.com/8wMaFI9ZVgOR7aU9Ep", - "https://buy.stripe.com/dR629c1tpaqt0Mw8Am" + "https://buy.stripe.com/dR629c1tpaqt0Mw8Am", + "price_1QD0KDEoOT0Jqx0UMsONGi5f", + "price_1QD0KEEoOT0Jqx0UgdY7E4qt" ], "KR": [ "Korea", @@ -957,7 +1195,9 @@ "89.99", "59.99", "https://buy.stripe.com/00gcNQ9ZV0PTgLudUH", - "https://buy.stripe.com/6oEbJM6NJbuxcve17W" + "https://buy.stripe.com/6oEbJM6NJbuxcve17W", + "price_1QD0KEEoOT0Jqx0UXA3VoNyS", + "price_1QD0KFEoOT0Jqx0Ud1jj64qo" ], "GR": [ "Greece", @@ -965,7 +1205,9 @@ "89.99", "59.99", "https://buy.stripe.com/dR64hk0pl8il8eYaIx", - "https://buy.stripe.com/14k9BE9ZV569bra17Y" + "https://buy.stripe.com/14k9BE9ZV569bra17Y", + "price_1QD0KGEoOT0Jqx0U1hWwPRSC", + "price_1QD0KHEoOT0Jqx0UlkYfxcaY" ], "SI": [ "Slovenia", @@ -973,7 +1215,9 @@ "89.99", "59.99", "https://buy.stripe.com/cN23dg8VRcyBgLu6sj", - "https://buy.stripe.com/4gwbJM9ZV2Y11QA03W" + "https://buy.stripe.com/4gwbJM9ZV2Y11QA03W", + "price_1QD0KHEoOT0Jqx0UcejiS495", + "price_1QD0KIEoOT0Jqx0UUWATk3kf" ], "MO": [ "Macao", @@ -981,7 +1225,9 @@ "89.99", "59.99", "https://buy.stripe.com/14kaFI7RN0PTeDm3g9", - "https://buy.stripe.com/cN24hkgoj569dzi9Ey" + "https://buy.stripe.com/cN24hkgoj569dzi9Ey", + "price_1QD0KJEoOT0Jqx0UPuTcr1Lm", + "price_1QD0KJEoOT0Jqx0UiMAZ01gZ" ], "PG": [ "Papua New Guinea", @@ -989,7 +1235,9 @@ "89.99", "59.99", "https://buy.stripe.com/14k9BE2xtbuxdzi183", - "https://buy.stripe.com/5kA014c83gOReDm4kg" + "https://buy.stripe.com/5kA014c83gOReDm4kg", + "price_1QD0KKEoOT0Jqx0UFiK1zR04", + "price_1QD0KLEoOT0Jqx0UPynaohcJ" ], "KI": [ "Kiribati", @@ -997,7 +1245,9 @@ "89.99", "59.99", "https://buy.stripe.com/dR629cegb569fHq185", - "https://buy.stripe.com/00g29c8VR6ad0Mw4ki" + "https://buy.stripe.com/00g29c8VR6ad0Mw4ki", + "price_1QD0KMEoOT0Jqx0UeuVJiOxo", + "price_1QD0KNEoOT0Jqx0UaaDFBNoq" ], "CY": [ "Cyprus", @@ -1005,7 +1255,9 @@ "89.99", "59.99", "https://buy.stripe.com/4gw29c5JF1TX52M2cb", - "https://buy.stripe.com/28o3dggoj425gLu6ss" + "https://buy.stripe.com/28o3dggoj425gLu6ss", + "price_1QD0KNEoOT0Jqx0UU4TYIfIT", + "price_1QD0KOEoOT0Jqx0Ufct5tA06" ], "EE": [ "Estonia", @@ -1013,7 +1265,9 @@ "89.99", "59.99", "https://buy.stripe.com/fZe4hk9ZV9mp9j23gh", - "https://buy.stripe.com/14k4hkc83dCF2UE4km" + "https://buy.stripe.com/14k4hkc83dCF2UE4km", + "price_1QD0KPEoOT0Jqx0UEtVaAIwj", + "price_1QD0KQEoOT0Jqx0UeN8KbDEJ" ], "MT": [ "Malta", @@ -1021,7 +1275,9 @@ "89.99", "59.99", "https://buy.stripe.com/6oE0140plfKN52M6sv", - "https://buy.stripe.com/eVa158c83dCF9j28AE" + "https://buy.stripe.com/eVa158c83dCF9j28AE", + "price_1QD0KREoOT0Jqx0UjWAMWI19", + "price_1QD0KREoOT0Jqx0UP5FTev4n" ], "SG": [ "Singapore", @@ -1029,7 +1285,9 @@ "89.99", "59.99", "https://buy.stripe.com/14k3dg7RN1TX2UEeZ3", - "https://buy.stripe.com/5kA5lo5JF6ad3YI7wC" + "https://buy.stripe.com/5kA5lo5JF6ad3YI7wC", + "price_1QD0KSEoOT0Jqx0UBFsqFVqX", + "price_1QD0KTEoOT0Jqx0UpM3AtyOf" ], "JP": [ "Japan", @@ -1037,7 +1295,9 @@ "94.99", "59.99", "https://buy.stripe.com/fZeg021tpbuxeDmcQX", - "https://buy.stripe.com/9AQg028VR8il1QAg3a" + "https://buy.stripe.com/9AQg028VR8il1QAg3a", + "price_1QD0KUEoOT0Jqx0USpQaj1Su", + "price_1QD0KVEoOT0Jqx0U6adHL9Ru" ], "TO": [ "Tonga", @@ -1045,7 +1305,9 @@ "94.99", "64.99", "https://buy.stripe.com/8wM29c9ZV56966Q9EN", - "https://buy.stripe.com/fZe6psc83cyB7aU18i" + "https://buy.stripe.com/fZe6psc83cyB7aU18i", + "price_1QD0KVEoOT0Jqx0Un5hRUo2t", + "price_1QD0KWEoOT0Jqx0UpsCjDlUg" ], "KW": [ "Kuwait", @@ -1053,7 +1315,9 @@ "94.99", "64.99", "https://buy.stripe.com/8wM29cegb2Y1gLug3d", - "https://buy.stripe.com/7sI29c8VR425an6cR2" + "https://buy.stripe.com/7sI29c8VR425an6cR2", + "price_1QD0KXEoOT0Jqx0U8focQR7c", + "price_1QD0KYEoOT0Jqx0UgpKOJjAu" ], "AG": [ "Antigua and Barbuda", @@ -1061,7 +1325,9 @@ "99.99", "64.99", "https://buy.stripe.com/9AQ29c4FB6ad0Mw04h", - "https://buy.stripe.com/3cs014c83dCF7aUeZc" + "https://buy.stripe.com/3cs014c83dCF7aUeZc", + "price_1QD0KYEoOT0Jqx0UzafkJgC6", + "price_1QD0KZEoOT0Jqx0UpXsLazjL" ], "ES": [ "Spain", @@ -1069,7 +1335,9 @@ "99.99", "69.99", "https://buy.stripe.com/8wMdRUgoj1TXfHqdV9", - "https://buy.stripe.com/eVacNQb3ZgORgLueZe" + "https://buy.stripe.com/eVacNQb3ZgORgLueZe", + "price_1QD0KaEoOT0Jqx0UZ8fmp23f", + "price_1QD0KbEoOT0Jqx0UwsRHMWJ6" ], "CW": [ "Curaçao", @@ -1077,7 +1345,9 @@ "99.99", "69.99", "https://buy.stripe.com/eVa3dg2xt6ad7aU04l", - "https://buy.stripe.com/6oEeVY7RN1TX1QAeZg" + "https://buy.stripe.com/6oEeVY7RN1TX1QAeZg", + "price_1QD0KbEoOT0Jqx0UkwiRSaSk", + "price_1QD0KcEoOT0Jqx0U0xk7gKFh" ], "IT": [ "Italy", @@ -1085,7 +1355,9 @@ "99.99", "69.99", "https://buy.stripe.com/eVaaFIdc76adeDmaJ1", - "https://buy.stripe.com/eVa9BEb3Z0PTeDmeZi" + "https://buy.stripe.com/eVa9BEb3Z0PTeDmeZi", + "price_1QD0KdEoOT0Jqx0UVnNCDrdJ", + "price_1QD0KeEoOT0Jqx0UUEv7bHzf" ], "HK": [ "Hong Kong", @@ -1093,7 +1365,9 @@ "99.99", "69.99", "https://buy.stripe.com/7sIdRU2xt6adan6aJ3", - "https://buy.stripe.com/aEU4hkb3ZbuxdzibN8" + "https://buy.stripe.com/aEU4hkb3ZbuxdzibN8", + "price_1QD0KfEoOT0Jqx0U4Ckd0xy2", + "price_1QD0KgEoOT0Jqx0UqqgAcXlK" ], "UY": [ "Uruguay", @@ -1101,7 +1375,9 @@ "99.99", "69.99", "https://buy.stripe.com/dR629c2xtaqt1QAaJ5", - "https://buy.stripe.com/fZeg025JFdCFcvecRe" + "https://buy.stripe.com/fZeg025JFdCFcvecRe", + "price_1QD0KgEoOT0Jqx0UZ3X1LnLY", + "price_1QD0KhEoOT0Jqx0Uo8ZEzJFb" ], "QA": [ "Qatar", @@ -1109,7 +1385,9 @@ "99.99", "69.99", "https://buy.stripe.com/6oE7tw8VR8il1QAcRf", - "https://buy.stripe.com/cN2014goj56966Q04u" + "https://buy.stripe.com/cN2014goj56966Q04u", + "price_1QD0KiEoOT0Jqx0ULAEtKyfX", + "price_1QD0KjEoOT0Jqx0Ui989cLcm" ], "SB": [ "Solomon Islands", @@ -1117,7 +1395,9 @@ "99.99", "69.99", "https://buy.stripe.com/7sI9BEdc7569fHq3gH", - "https://buy.stripe.com/4gw7tw0pl569dzi3gI" + "https://buy.stripe.com/4gw7tw0pl569dzi3gI", + "price_1QD0KkEoOT0Jqx0Uxgj2bIKW", + "price_1QD0KlEoOT0Jqx0UbkveVLHS" ], "AW": [ "Aruba", @@ -1125,7 +1405,9 @@ "99.99", "69.99", "https://buy.stripe.com/4gw29cc83425an618B", - "https://buy.stripe.com/cN2eVY5JFaqt3YI18C" + "https://buy.stripe.com/cN2eVY5JFaqt3YI18C", + "price_1QD0KmEoOT0Jqx0UnboBhZLr", + "price_1QD0KnEoOT0Jqx0UQsDCzEZU" ], "AI": [ "Anguilla", @@ -1133,7 +1415,9 @@ "99.99", "69.99", "https://buy.stripe.com/7sI4hkb3Z5698eY8B5", - "https://buy.stripe.com/5kAeVY8VReGJgLu4kQ" + "https://buy.stripe.com/5kAeVY8VReGJgLu4kQ", + "price_1QD0KnEoOT0Jqx0UuVkrZbv5", + "price_1QD0KoEoOT0Jqx0UfXIj9nhk" ], "KY": [ "Cayman Islands", @@ -1141,7 +1425,9 @@ "99.99", "69.99", "https://buy.stripe.com/cN23dg7RNdCF52MdVr", - "https://buy.stripe.com/6oEaFI1tpaqtcvecRo" + "https://buy.stripe.com/6oEaFI1tpaqtcvecRo", + "price_1QD0KpEoOT0Jqx0UViHXHnJY", + "price_1QD0KqEoOT0Jqx0UIH9Eephn" ], "CU": [ "Cuba", @@ -1149,7 +1435,9 @@ "99.99", "69.99", "https://buy.stripe.com/cN28xA5JF569dzi04D", - "https://buy.stripe.com/4gwcNQ2xt8il3YI6t2" + "https://buy.stripe.com/4gwcNQ2xt8il3YI6t2", + "price_1QD0KqEoOT0Jqx0ULEQoaJDz", + "price_1QD0KrEoOT0Jqx0UsvBELlN5" ], "GD": [ "Grenada", @@ -1157,7 +1445,9 @@ "99.99", "69.99", "https://buy.stripe.com/14k1587RNdCF9j28Bb", - "https://buy.stripe.com/aEUdRU6NJdCF66Q6t4" + "https://buy.stripe.com/aEUdRU6NJdCF66Q6t4", + "price_1QD0KsEoOT0Jqx0UWhle0V4k", + "price_1QD0KsEoOT0Jqx0Uy6pAZoBL" ], "GP": [ "Guadeloupe", @@ -1165,7 +1455,9 @@ "99.99", "69.99", "https://buy.stripe.com/00gdRU0plcyBdzicRt", - "https://buy.stripe.com/8wM8xA9ZV6ad2UE04I" + "https://buy.stripe.com/8wM8xA9ZV6ad2UE04I", + "price_1QD0KtEoOT0Jqx0UBbdQeu66", + "price_1QD0KuEoOT0Jqx0UlJWQmR7d" ], "MQ": [ "Martinique", @@ -1173,7 +1465,9 @@ "99.99", "69.99", "https://buy.stripe.com/5kA7tw4FB8ilcvedVz", - "https://buy.stripe.com/4gw8xA9ZV1TX2UEaJo" + "https://buy.stripe.com/4gw8xA9ZV1TX2UEaJo", + "price_1QD0KvEoOT0Jqx0UCi1k19Tr", + "price_1QD0KvEoOT0Jqx0UKCpX07rE" ], "MS": [ "Montserrat", @@ -1181,7 +1475,9 @@ "99.99", "69.99", "https://buy.stripe.com/dR64hk8VR6addzig3J", - "https://buy.stripe.com/14keVY8VR569an6eZG" + "https://buy.stripe.com/14keVY8VR569an6eZG", + "price_1QD0KwEoOT0Jqx0UNsD5o2Ff", + "price_1QD0KxEoOT0Jqx0UP9bCdz3k" ], "BL": [ "Saint Barthélemy", @@ -1189,7 +1485,9 @@ "99.99", "69.99", "https://buy.stripe.com/9AQcNQ9ZVeGJ9j2dVD", - "https://buy.stripe.com/bIYaFIb3Z9mp66QdVE" + "https://buy.stripe.com/bIYaFIb3Z9mp66QdVE", + "price_1QD0KyEoOT0Jqx0U30Fk2zyT", + "price_1QD0KyEoOT0Jqx0UegRfTia7" ], "KN": [ "Saint Kitts and Nevis", @@ -1197,7 +1495,9 @@ "99.99", "69.99", "https://buy.stripe.com/cN229cegb5698eYcRB", - "https://buy.stripe.com/4gw6ps5JF8ilbra9Fq" + "https://buy.stripe.com/4gw6ps5JF8ilbra9Fq", + "price_1QD0KzEoOT0Jqx0UoZfYZ0tn", + "price_1QD0L0EoOT0Jqx0UIN25nRsX" ], "LC": [ "Saint Lucia", @@ -1205,7 +1505,9 @@ "99.99", "69.99", "https://buy.stripe.com/8wM0149ZVcyB3YIcRD", - "https://buy.stripe.com/6oE1586NJ7eh7aUcRE" + "https://buy.stripe.com/6oE1586NJ7eh7aUcRE", + "price_1QD0L1EoOT0Jqx0U9XgSMII5", + "price_1QD0L2EoOT0Jqx0Uc5Bw5a0U" ], "MF": [ "Saint Martin (French part)", @@ -1213,7 +1515,9 @@ "99.99", "69.99", "https://buy.stripe.com/9AQg027RN7eh3YI9Ft", - "https://buy.stripe.com/fZe29c1tpgORan68Bq" + "https://buy.stripe.com/fZe29c1tpgORan68Bq", + "price_1QD0L2EoOT0Jqx0UjHdtpsOx", + "price_1QD0L4EoOT0Jqx0UMxIrpZOj" ], "SX": [ "Sint Maarten (Dutch part)", @@ -1221,7 +1525,9 @@ "99.99", "69.99", "https://buy.stripe.com/00g29cegb6ad0MwcRH", - "https://buy.stripe.com/00g9BE3Bx2Y166Q8Bs" + "https://buy.stripe.com/00g9BE3Bx2Y166Q8Bs", + "price_1QD0L4EoOT0Jqx0UGYVJdc3e", + "price_1QD0L5EoOT0Jqx0UPPHuClTU" ], "GS": [ "South Georgia and the South Sandwich Islands", @@ -1229,7 +1535,9 @@ "99.99", "69.99", "https://buy.stripe.com/28oaFI6NJbuxgLu191", - "https://buy.stripe.com/6oE3dg9ZVeGJ8eYbNG" + "https://buy.stripe.com/6oE3dg9ZVeGJ8eYbNG", + "price_1QD0L6EoOT0Jqx0UwAXnXkrp", + "price_1QD0L7EoOT0Jqx0UiQuKyaxO" ], "PR": [ "Puerto Rico", @@ -1237,7 +1545,9 @@ "114.99", "79.99", "https://buy.stripe.com/dR6eVYb3ZdCFcve5pj", - "https://buy.stripe.com/fZe4hkdc72Y152M3hc" + "https://buy.stripe.com/fZe4hkdc72Y152M3hc", + "price_1QD0L7EoOT0Jqx0UzTXln0Y0", + "price_1QD0L8EoOT0Jqx0UZUWtzmEJ" ], "AS": [ "American Samoa", @@ -1245,7 +1555,9 @@ "119.99", "79.99", "https://buy.stripe.com/00geVY4FBcyBcvecRN", - "https://buy.stripe.com/9AQaFI4FBcyBdziaJG" + "https://buy.stripe.com/9AQaFI4FBcyBdziaJG", + "price_1QD0L9EoOT0Jqx0U8x5eZ7Ne", + "price_1QD0LAEoOT0Jqx0UfA31VJRI" ], "CK": [ "Cook Islands", @@ -1253,7 +1565,9 @@ "119.99", "79.99", "https://buy.stripe.com/eVaeVYfkfaqtgLuaJH", - "https://buy.stripe.com/5kA1585JF1TX9j25po" + "https://buy.stripe.com/5kA1585JF1TX9j25po", + "price_1QD0LBEoOT0Jqx0UXoHUdnuO", + "price_1QD0LCEoOT0Jqx0UTuoJL1Wo" ], "PF": [ "French Polynesia", @@ -1261,7 +1575,9 @@ "119.99", "79.99", "https://buy.stripe.com/eVa3dg2xt1TX1QA4ll", - "https://buy.stripe.com/dR6g02c831TX1QA3hi" + "https://buy.stripe.com/dR6g02c831TX1QA3hi", + "price_1QD0LDEoOT0Jqx0U2XKLV5Ms", + "price_1QD0LFEoOT0Jqx0U1VKav3fd" ], "NU": [ "Niue", @@ -1269,7 +1585,9 @@ "119.99", "79.99", "https://buy.stripe.com/00g3dg1tp8il66Q8BD", - "https://buy.stripe.com/3csdRU9ZVaqtbra3hk" + "https://buy.stripe.com/3csdRU9ZVaqtbra3hk", + "price_1QD0LFEoOT0Jqx0Uh3ntrde8", + "price_1QD0LGEoOT0Jqx0UdTc8i7sM" ], "PN": [ "Pitcairn", @@ -1277,7 +1595,9 @@ "119.99", "79.99", "https://buy.stripe.com/fZe5lofkf425cve7xB", - "https://buy.stripe.com/eVag026NJ2Y17aU9FK" + "https://buy.stripe.com/eVag026NJ2Y17aU9FK", + "price_1QD0LHEoOT0Jqx0U1q5h2X8v", + "price_1QD0LIEoOT0Jqx0U2edyMNMB" ], "WS": [ "Samoa", @@ -1285,7 +1605,9 @@ "119.99", "79.99", "https://buy.stripe.com/7sI29cegbeGJan619f", - "https://buy.stripe.com/28o4hk6NJcyBdzi2dk" + "https://buy.stripe.com/28o4hk6NJcyBdzi2dk", + "price_1QD0LJEoOT0Jqx0UcRzcv24s", + "price_1QD0LKEoOT0Jqx0UdzgDO8Qo" ], "TK": [ "Tokelau", @@ -1293,7 +1615,9 @@ "119.99", "79.99", "https://buy.stripe.com/9AQaFI4FBgORcve8BJ", - "https://buy.stripe.com/28o6psfkfdCF66Q5py" + "https://buy.stripe.com/28o6psfkfdCF66Q5py", + "price_1QD0LKEoOT0Jqx0Un21xYDQJ", + "price_1QD0LLEoOT0Jqx0UpfB9hLtS" ], "WF": [ "Wallis and Futuna", @@ -1301,7 +1625,9 @@ "119.99", "79.99", "https://buy.stripe.com/5kAg02dc71TX9j22dn", - "https://buy.stripe.com/eVa7twegbdCFbra9FQ" + "https://buy.stripe.com/eVa7twegbdCFbra9FQ", + "price_1QD0LMEoOT0Jqx0UgQNm1PNg", + "price_1QD0LMEoOT0Jqx0ULU59PEX4" ], "BS": [ "Bahamas", @@ -1309,7 +1635,9 @@ "124.99", "79.99", "https://buy.stripe.com/00gaFIb3ZdCF3YIg4f", - "https://buy.stripe.com/cN229c6NJ425fHqdW8" + "https://buy.stripe.com/cN229c6NJ425fHqdW8", + "price_1QD0LNEoOT0Jqx0UD4wCPlBt", + "price_1QD0LOEoOT0Jqx0Ut2NNKX90" ], "PW": [ "Palau", @@ -1317,6 +1645,8 @@ "124.99", "79.99", "https://buy.stripe.com/cN20141tpgORfHq7xL", - "https://buy.stripe.com/fZe014dc7569eDm9FU" + "https://buy.stripe.com/fZe014dc7569eDm9FU", + "price_1QD0LPEoOT0Jqx0UDhpjT9WE", + "price_1QD0LPEoOT0Jqx0UMDYhrl2T" ] } diff --git a/config/environments/development.rb b/config/environments/development.rb index a1d979ad71..1744e38296 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -86,6 +86,7 @@ config.hosts << "local.exercism.io" config.hosts << "website" if ENV['EXERCISM_DOCKER'] config.hosts << /.*.ngrok.io/ + config.hosts << /.*.ngrok.dev/ config.hosts << /.*.ngrok-free.app/ config.hosts << "host.docker.internal" end diff --git a/config/routes.rb b/config/routes.rb index bbadbe3ade..8a97695051 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -480,5 +480,8 @@ get "/bootcamp" => "bootcamp#index" get "/bootcamp/enroll" => "bootcamp#start_enrolling", as: :bootcamp_enroll post "/bootcamp/enroll" => "bootcamp#do_enrollment", as: :bootcamp_create_enrollment - get "/bootcamp/enroll/confirmation" => "bootcamp#enrollment_confirmed", as: :bootcamp_enrollment_confirmed + get "/bootcamp/pay" => "bootcamp#pay", as: :bootcamp_pay + post "/bootcamp/stripe/create-checkout-session" => "bootcamp#stripe_create_checkout_session", as: :bootcamp_ + get "/bootcamp/stripe/session-status" => "bootcamp#stripe_session_status", as: :bootcamp_stripe_session_status + get "/bootcamp/confirmed" => "bootcamp#confirmed", as: :bootcamp_confirmed end