// source --> https://www.feldenkrais-praxis.de/wp-content/plugins/woocommerce/assets/js/frontend/checkout.min.js?ver=10.8.1 
jQuery(function(e){if("undefined"==typeof wc_checkout_params)return!1;function t(){var t=wc.customPlaceOrderButton.__getForm();return{validate:function(){return new Promise(function(o){var r=!1,i=t.find('input[name="terms"]:visible');if(i.length&&i.closest(".form-row").removeClass("woocommerce-invalid"),t.find(".input-text, select, input:checkbox").trigger("validate"),t.find(".woocommerce-invalid").length>0&&(r=!0),t.find(".validate-required:visible").each(function(){var t=e(this),o=t.find("input.input-text, select, input:checkbox");0!==o.length&&((o.is(":checkbox")?!o.is(":checked"):""===o.val()||null===o.val())&&(r=!0,t.addClass("woocommerce-invalid woocommerce-invalid-required-field")))}),i.length&&!i.is(":checked")&&(r=!0,i.closest(".form-row").addClass("woocommerce-invalid")),r){var c=t.find(".woocommerce-invalid").first();c.length&&e("html, body").animate({scrollTop:c.offset().top-100},500)}o({hasError:r})})},submit:function(){t.trigger("submit")}}}e.blockUI.defaults.overlayCSS.cursor="default",e(document.body).on("update_checkout",function(){wc.customPlaceOrderButton.__cleanup()}),e(document.body).on("wc_custom_place_order_button_registered",function(e,o){wc.customPlaceOrderButton.__maybeShow(o,t())});var o={updateTimer:!1,dirtyInput:!1,selectedPaymentMethod:!1,xhr:!1,$order_review:e("#order_review"),$checkout_form:e("form.checkout"),init:function(){if(e(document.body).on("update_checkout",this.update_checkout),e(document.body).on("init_checkout",this.init_checkout),this.$checkout_form.on("click",'input[name="payment_method"]',this.payment_method_selected),e(document.body).hasClass("woocommerce-order-pay")){this.$order_review.on("click",'input[name="payment_method"]',this.payment_method_selected),this.$order_review.on("submit",this.submitOrder),this.$order_review.attr("novalidate","novalidate");var t=this.$order_review.find('input[name="payment_method"]:checked');t.length&&(wc.customPlaceOrderButton.__maybeHideDefaultButtonOnInit(t.val()),t.trigger("click"))}this.$checkout_form.attr("novalidate","novalidate"),this.$checkout_form.on("submit",this.submit),this.$checkout_form.on("input validate change focusout",".input-text, select, input:checkbox",this.validate_field),this.$checkout_form.on("update",this.trigger_update_checkout),this.$checkout_form.on("change",'select.shipping_method, input[name^="shipping_method"], #ship-to-different-address input, .update_totals_on_change select, .update_totals_on_change input[type="radio"], .update_totals_on_change input[type="checkbox"]',this.trigger_update_checkout),this.$checkout_form.on("change",".address-field select",this.input_changed),this.$checkout_form.on("change",".address-field input.input-text, .update_totals_on_change input.input-text",this.maybe_input_changed),this.$checkout_form.on("keydown",".address-field input.input-text, .update_totals_on_change input.input-text",this.queue_update_checkout),this.$checkout_form.on("blur","#billing_address_1, #shipping_address_1",this.address_field_blur),this.$checkout_form.on("change","#ship-to-different-address input",this.ship_to_different_address),this.$checkout_form.find("#ship-to-different-address input").trigger("change"),this.init_payment_methods(),"1"===wc_checkout_params.is_checkout&&e(document.body).trigger("init_checkout"),"yes"===wc_checkout_params.option_guest_checkout&&e("input#createaccount").on("change",this.toggle_create_account).trigger("change")},init_payment_methods:function(){var t=e(".woocommerce-checkout").find('input[name="payment_method"]');1===t.length&&t.eq(0).hide(),o.selectedPaymentMethod&&e("#"+o.selectedPaymentMethod).prop("checked",!0),0===t.filter(":checked").length&&t.eq(0).prop("checked",!0);var r=t.filter(":checked").eq(0).prop("id");t.length>1&&e('div.payment_box:not(".'+r+'")').filter(":visible").slideUp(0);var i=t.filter(":checked").eq(0);i.length&&wc.customPlaceOrderButton.__maybeHideDefaultButtonOnInit(i.val()),t.filter(":checked").eq(0).trigger("click")},get_payment_method:function(){return o.$checkout_form.find('input[name="payment_method"]:checked').val()},payment_method_selected:function(r){if(r.stopPropagation(),e(".payment_methods input.input-radio").length>1){var i=e("div.payment_box."+e(this).attr("ID")),c=e(this).is(":checked");c&&!i.is(":visible")&&(e("div.payment_box").filter(":visible").slideUp(230),c&&i.slideDown(230))}else e("div.payment_box").show();e(this).data("order_button_text")?e("#place_order").text(e(this).data("order_button_text")):e("#place_order").text(e("#place_order").data("value"));var n=e('.woocommerce-checkout input[name="payment_method"]:checked').attr("id");n!==o.selectedPaymentMethod&&e(document.body).trigger("payment_method_selected");var a=e(this).val();wc.customPlaceOrderButton.__maybeShow(a,t()),o.selectedPaymentMethod=n},toggle_create_account:function(){e("div.create-account").hide(),e(this).is(":checked")&&(e("#account_password").val(""),e("div.create-account").slideDown())},init_checkout:function(){e(document.body).trigger("update_checkout")},should_skip_address_update:function(e){var t=e.target||e.srcElement;if(t&&("billing_address_1"===t.id||"shipping_address_1"===t.id)){if("true"===t.getAttribute("data-autocomplete-manipulating"))return!0;var o=t.id.replace("_address_1","");if(window.wc&&window.wc.addressAutocomplete&&window.wc.addressAutocomplete.activeProvider&&window.wc.addressAutocomplete.activeProvider[o])return!0}return!1},should_trigger_address_blur_update:function(e){var t=e.target||e.srcElement;if(t&&("billing_address_1"===t.id||"shipping_address_1"===t.id)){if("true"===t.getAttribute("data-autocomplete-manipulating"))return!1;var o=t.id.replace("_address_1","");if(window.wc&&window.wc.addressAutocomplete&&window.wc.addressAutocomplete.activeProvider&&window.wc.addressAutocomplete.activeProvider[o])return!0}return!1},maybe_input_changed:function(e){o.should_skip_address_update(e)||o.dirtyInput&&o.input_changed(e)},input_changed:function(e){o.should_skip_address_update(e)||(o.dirtyInput=e.target,o.maybe_update_checkout())},address_field_blur:function(e){o.should_trigger_address_blur_update(e)&&(o.dirtyInput=e.target,o.maybe_update_checkout())},queue_update_checkout:function(e){if(9===(e.keyCode||e.which||0))return!0;var t=e.target||e.srcElement;if(t&&("billing_address_1"===t.id||"shipping_address_1"===t.id)){var r=t.id.replace("_address_1","");if(window.wc&&window.wc.addressAutocomplete&&window.wc.addressAutocomplete.activeProvider&&window.wc.addressAutocomplete.activeProvider[r])return!0}o.dirtyInput=this,o.reset_update_checkout_timer(),o.updateTimer=setTimeout(o.maybe_update_checkout,"1000")},trigger_update_checkout:function(t){o.reset_update_checkout_timer(),o.dirtyInput=!1,e(document.body).trigger("update_checkout",{current_target:t?t.currentTarget:null})},maybe_update_checkout:function(){var t=!0;if(e(o.dirtyInput).length){var r=e(o.dirtyInput).closest("div").find(".address-field.validate-required");r.length&&r.each(function(){""===e(this).find("input.input-text").val()&&(t=!1)})}t&&o.trigger_update_checkout()},ship_to_different_address:function(){e("div.shipping_address").hide(),e(this).is(":checked")&&e("div.shipping_address").slideDown()},reset_update_checkout_timer:function(){clearTimeout(o.updateTimer)},is_valid_json:function(e){try{var t=JSON.parse(e);return t&&"object"==typeof t}catch(o){return!1}},validate_field:function(t){var o=e(this),r=o.closest(".form-row"),i=!0,c=r.is(".validate-required"),n=r.is(".validate-email"),a=r.is(".validate-phone"),d="",s=t.type;"input"===s&&(o.removeAttr("aria-invalid").removeAttr("aria-describedby"),r.find(".checkout-inline-error-message").remove(),r.removeClass("woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone woocommerce-validated")),"validate"!==s&&"change"!==s&&"focusout"!==s||(c&&("checkbox"===o.attr("type")&&!o.is(":checked")||""===o.val())&&(o.attr("aria-invalid","true"),r.removeClass("woocommerce-validated").addClass("woocommerce-invalid woocommerce-invalid-required-field"),i=!1),n&&o.val()&&((d=new RegExp(/^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i)).test(o.val())||(o.attr("aria-invalid","true"),r.removeClass("woocommerce-validated").addClass("woocommerce-invalid woocommerce-invalid-email"),i=!1)),a&&(d=new RegExp(/[\s\#0-9_\-\+\/\(\)\.]/g),0<o.val().replace(d,"").length&&(o.attr("aria-invalid","true"),r.removeClass("woocommerce-validated").addClass("woocommerce-invalid woocommerce-invalid-phone"),i=!1)),i&&(o.removeAttr("aria-invalid").removeAttr("aria-describedby"),r.find(".checkout-inline-error-message").remove(),r.removeClass("woocommerce-invalid woocommerce-invalid-required-field woocommerce-invalid-email woocommerce-invalid-phone").addClass("woocommerce-validated")))},update_checkout:function(e,t){o.reset_update_checkout_timer(),o.updateTimer=setTimeout(o.update_checkout_action,"5",t)},update_checkout_action:function(t){if(o.xhr&&o.xhr.abort(),0!==e("form.checkout").length){t=void 0!==t?t:{update_shipping_method:!0};var r=e("#billing_country").val(),i=e("#billing_state").val(),c=e(":input#billing_postcode").val(),n=e("#billing_city").val(),a=e(":input#billing_address_1").val(),d=e(":input#billing_address_2").val(),s=r,u=i,l=c,m=n,p=a,_=d,h=e(o.$checkout_form).find(".address-field.validate-required:visible"),f=!0;h.length&&h.each(function(){""===e(this).find(":input").val()&&(f=!1)}),e("#ship-to-different-address").find("input").is(":checked")&&(s=e("#shipping_country").val(),u=e("#shipping_state").val(),l=e(":input#shipping_postcode").val(),m=e("#shipping_city").val(),p=e(":input#shipping_address_1").val(),_=e(":input#shipping_address_2").val());var v={security:wc_checkout_params.update_order_review_nonce,payment_method:o.get_payment_method(),country:r,state:i,postcode:c,city:n,address:a,address_2:d,s_country:s,s_state:u,s_postcode:l,s_city:m,s_address:p,s_address_2:_,has_full_address:f,post_data:e("form.checkout").serialize()};if(!1!==t.update_shipping_method){var g={};e('select.shipping_method, input[name^="shipping_method"][type="radio"]:checked, input[name^="shipping_method"][type="hidden"]').each(function(){g[e(this).data("index")]=e(this).val()}),v.shipping_method=g}e(".woocommerce-checkout-payment, .woocommerce-checkout-review-order-table").block({message:null,overlayCSS:{background:"#fff",opacity:.6}}),o.xhr=e.ajax({type:"POST",url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","update_order_review"),data:v,success:function(r){if(r&&!0===r.reload)window.location.reload();else{e(".woocommerce-NoticeGroup-updateOrderReview").remove();var i=e("#terms").prop("checked"),c={};if(e(".payment_box :input").each(function(){var t=e(this).attr("id");t&&(-1!==e.inArray(e(this).attr("type"),["checkbox","radio"])?c[t]=e(this).prop("checked"):c[t]=e(this).val())}),r&&r.fragments&&(e.each(r.fragments,function(t,r){o.fragments&&o.fragments[t]===r||e(t).replaceWith(r),e(t).unblock()}),o.fragments=r.fragments),i&&e("#terms").prop("checked",!0),e.isEmptyObject(c)||e(".payment_box :input").each(function(){var t=e(this).attr("id");t&&(-1!==e.inArray(e(this).attr("type"),["checkbox","radio"])?e(this).prop("checked",c[t]).trigger("change"):-1!==e.inArray(e(this).attr("type"),["select"])?e(this).val(c[t]).trigger("change"):null!==e(this).val()&&0===e(this).val().length&&e(this).val(c[t]).trigger("change"))}),r&&"failure"===r.result){var n=e("form.checkout");e(".woocommerce-error, .woocommerce-message, .is-error, .is-success").remove(),r.messages?n.prepend('<div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-updateOrderReview">'+r.messages+"</div>"):n.prepend(r),n.find(".input-text, select, input:checkbox").trigger("validate").trigger("blur"),o.scroll_to_notices()}o.init_payment_methods(),r&&"success"===r.result&&t.current_target&&-1!==t.current_target.id.indexOf("shipping_method")&&document.getElementById(t.current_target.id).focus(),e(document.body).trigger("updated_checkout",[r])}}})}},handleUnloadEvent:function(e){return-1===navigator.userAgent.indexOf("MSIE")&&!document.documentMode||(e.preventDefault(),undefined)},attachUnloadEventsOnSubmit:function(){e(window).on("beforeunload",this.handleUnloadEvent)},detachUnloadEventsOnSubmit:function(){e(window).off("beforeunload",this.handleUnloadEvent)},blockOnSubmit:function(e){1!==e.data("blockUI.isBlocked")&&e.block({message:null,overlayCSS:{background:"#fff",opacity:.6}})},submitOrder:function(){o.blockOnSubmit(e(this))},submit:function(){o.reset_update_checkout_timer();var t=e(this);return!t.is(".processing")&&(!1!==t.triggerHandler("checkout_place_order",[o])&&!1!==t.triggerHandler("checkout_place_order_"+o.get_payment_method(),[o])&&(t.addClass("processing"),o.blockOnSubmit(t),o.attachUnloadEventsOnSubmit(),e.ajaxSetup({dataFilter:function(e,t){if("json"!==t)return e;if(o.is_valid_json(e))return e;var r=e.match(/{"result.*}/);return null===r?console.log("Unable to fix malformed JSON #1"):o.is_valid_json(r[0])?(console.log("Fixed malformed JSON. Original:"),console.log(e),e=r[0]):console.log("Unable to fix malformed JSON #2"),e}}),e.ajax({type:"POST",url:wc_checkout_params.checkout_url,data:t.serialize(),dataType:"json",success:function(r){o.detachUnloadEventsOnSubmit(),e(".checkout-inline-error-message").remove();try{if("success"!==r.result||!1===t.triggerHandler("checkout_place_order_success",[r,o]))throw"failure"===r.result?"Result failure":"Invalid response";-1===r.redirect.indexOf("https://")||-1===r.redirect.indexOf("http://")?window.location=r.redirect:window.location=decodeURI(r.redirect)}catch(a){if(!0===r.reload)return void window.location.reload();if(!0===r.refresh&&e(document.body).trigger("update_checkout"),r.messages){var i=e(r.messages).removeAttr("role").attr("tabindex","-1"),c=o.wrapMessagesInsideLink(i),n=e('<div role="alert"></div>').append(c);o.submit_error(n.prop("outerHTML")),o.show_inline_errors(i)}else o.submit_error('<div class="woocommerce-error">'+wc_checkout_params.i18n_checkout_error+"</div>")}},error:function(e,t,r){o.detachUnloadEventsOnSubmit();var i=r;"object"==typeof wc_checkout_params&&null!==wc_checkout_params&&wc_checkout_params.hasOwnProperty("i18n_checkout_error")&&"string"==typeof wc_checkout_params.i18n_checkout_error&&""!==wc_checkout_params.i18n_checkout_error.trim()&&(i=wc_checkout_params.i18n_checkout_error),o.submit_error('<div class="woocommerce-error">'+i+"</div>")}})),!1)},submit_error:function(t){e(".woocommerce-NoticeGroup-checkout, .woocommerce-error, .woocommerce-message, .is-error, .is-success").remove(),o.$checkout_form.prepend('<div class="woocommerce-NoticeGroup woocommerce-NoticeGroup-checkout">'+t+"</div>"),o.$checkout_form.removeClass("processing").unblock(),o.$checkout_form.find(".input-text, select, input:checkbox").trigger("validate").trigger("blur"),o.scroll_to_notices(),o.$checkout_form.find('.woocommerce-error[tabindex="-1"], .wc-block-components-notice-banner.is-error[tabindex="-1"]').focus(),e(document.body).trigger("checkout_error",[t])},wrapMessagesInsideLink:function(t){return t.find("li[data-id]").each(function(){const t=e(this),o=t.attr("data-id");if(o){const r=e("<a>",{href:"#"+o,html:t.html()});t.empty().append(r)}}),t},show_inline_errors:function(t){t.find("li[data-id]").each(function(){const t=e(this),o=t.attr("data-id"),r=e("#"+o);if(1===r.length){const e=o+"_description",i=t.text().trim(),c=r.closest(".form-row"),n=document.createElement("p");n.id=e,n.className="checkout-inline-error-message",n.textContent=i,c&&n.textContent.length>0&&c.append(n),r.attr("aria-describedby",e),r.attr("aria-invalid","true")}})},scroll_to_notices:function(){var t=e(".woocommerce-NoticeGroup-updateOrderReview, .woocommerce-NoticeGroup-checkout");t.length||(t=e("form.checkout")),e.scroll_to_notices(t)}},r={init:function(){e(document.body).on("click","a.showcoupon",this.show_coupon_form),e(document.body).on("click",".woocommerce-remove-coupon",this.remove_coupon),e(document.body).on("keydown",".woocommerce-remove-coupon",this.on_keydown_remove_coupon),e(document.body).on("change input","#coupon_code",this.remove_coupon_error),e("form.checkout_coupon").hide().on("submit",this.submit.bind(this))},show_coupon_form:function(){var t=e(this);return e(".checkout_coupon").slideToggle(400,function(){var o=e(this);o.is(":visible")?(t.attr("aria-expanded","true"),o.find(":input:eq(0)").trigger("focus")):t.attr("aria-expanded","false")}),!1},show_coupon_error:function(t,o){if(0!==o.length){this.remove_coupon_error();var r=e(e.parseHTML(t)).text().trim();""!==r&&(o.find("#coupon_code").focus().addClass("has-error").attr("aria-invalid","true").attr("aria-describedby","coupon-error-notice"),e("<span>",{"class":"coupon-error-notice",id:"coupon-error-notice",role:"alert",text:r}).appendTo(o))}},remove_coupon_error:function(){var t=e("#coupon_code");0!==t.length&&t.removeClass("has-error").removeAttr("aria-invalid").removeAttr("aria-describedby").next(".coupon-error-notice").remove()},clear_coupon_input:function(){e("#coupon_code").val("").removeClass("has-error").removeAttr("aria-invalid").removeAttr("aria-describedby").next(".coupon-error-notice").remove()},submit:function(t){var r=e(t.currentTarget),i=r.find("#coupon_code"),c=this;if(c.remove_coupon_error(),r.is(".processing"))return!1;r.addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}});var n={security:wc_checkout_params.apply_coupon_nonce,coupon_code:r.find('input[name="coupon_code"]').val(),billing_email:o.$checkout_form.find('input[name="billing_email"]').val()};return e.ajax({type:"POST",url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","apply_coupon"),data:n,success:function(t){e(".woocommerce-error, .woocommerce-message, .is-error, .is-success, .checkout-inline-error-message").remove(),r.removeClass("processing").unblock(),t&&(-1===t.indexOf("woocommerce-error")&&-1===t.indexOf("is-error")?(r.slideUp(400,function(){e("a.showcoupon").attr("aria-expanded","false"),r.before(t)}),c.clear_coupon_input()):c.show_coupon_error(t,i.parent()),e(document.body).trigger("applied_coupon_in_checkout",[n.coupon_code]),e(document.body).trigger("update_checkout",{update_shipping_method:!1}))},dataType:"html"}),!1},remove_coupon:function(t){t.preventDefault();var o=e(this).parents(".woocommerce-checkout-review-order"),i=e(this).data("coupon");o.addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}});var c={security:wc_checkout_params.remove_coupon_nonce,coupon:i};e.ajax({type:"POST",url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","remove_coupon"),data:c,success:function(t){e(".woocommerce-error, .woocommerce-message, .is-error, .is-success").remove(),o.removeClass("processing").unblock(),t&&(e("form.woocommerce-checkout").before(t),e(document.body).trigger("removed_coupon_in_checkout",[c.coupon]),e(document.body).trigger("update_checkout",{update_shipping_method:!1}),r.clear_coupon_input(),e("form.checkout_coupon").slideUp(400,function(){e("a.showcoupon").attr("aria-expanded","false")}))},error:function(e){wc_checkout_params.debug_mode&&console.log(e.responseText)},dataType:"html"})},on_keydown_remove_coupon:function(t){" "===t.key&&(t.preventDefault(),e(this).trigger("click"))}},i={init:function(){e(document.body).on("click","a.showlogin",this.show_login_form)},show_login_form:function(){var t=e("form.login, form.woocommerce-form--login");return t.is(":visible")?t.slideToggle({duration:400}):t.slideToggle({duration:400,complete:function(){t.is(":visible")&&e("html, body").animate({scrollTop:t.offset().top-50},300)}}),!1}},c={init:function(){e(document.body).on("click","a.woocommerce-terms-and-conditions-link",this.toggle_terms)},toggle_terms:function(){if(e(".woocommerce-terms-and-conditions").length)return e(".woocommerce-terms-and-conditions").slideToggle(function(){var t=e(".woocommerce-terms-and-conditions-link");e(".woocommerce-terms-and-conditions").is(":visible")?(t.addClass("woocommerce-terms-and-conditions-link--open"),t.removeClass("woocommerce-terms-and-conditions-link--closed")):(t.removeClass("woocommerce-terms-and-conditions-link--open"),t.addClass("woocommerce-terms-and-conditions-link--closed"))}),!1}};o.init(),r.init(),i.init(),c.init()});
// source --> https://www.feldenkrais-praxis.de/wp-content/plugins/woocommerce-germanized/build/static/iban.js?ver=4.0.4 
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 260:
/***/ ((__unused_webpack_module, exports) => {

/**
The MIT License (MIT)
Copyright (c) 2013-2015 ARHS Developments SA
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
(function (exports) {
  // Array.prototype.map polyfill
  // code from https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map
  if (!Array.prototype.map) {
    Array.prototype.map = function (fun /*, thisArg */) {
      "use strict";

      if (this === void 0 || this === null) throw new TypeError();
      var t = Object(this);
      var len = t.length >>> 0;
      if (typeof fun !== "function") throw new TypeError();
      var res = new Array(len);
      var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
      for (var i = 0; i < len; i++) {
        // NOTE: Absolute correctness would demand Object.defineProperty
        //       be used.  But this method is fairly new, and failure is
        //       possible only if Object.prototype or Array.prototype
        //       has a property |i| (very unlikely), so use a less-correct
        //       but more portable alternative.
        if (i in t) res[i] = fun.call(thisArg, t[i], i, t);
      }
      return res;
    };
  }
  var A = 'A'.charCodeAt(0),
    Z = 'Z'.charCodeAt(0);

  /**
   * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
   * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
   *
   * @param {string} iban the IBAN
   * @returns {string} the prepared IBAN
   */
  function iso13616Prepare(iban) {
    iban = iban.toUpperCase();
    iban = iban.substr(4) + iban.substr(0, 4);
    return iban.split('').map(function (n) {
      var code = n.charCodeAt(0);
      if (code >= A && code <= Z) {
        // A = 10, B = 11, ... Z = 35
        return code - A + 10;
      } else {
        return n;
      }
    }).join('');
  }

  /**
   * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
   *
   * @param iban
   * @returns {number}
   */
  function iso7064Mod97_10(iban) {
    var remainder = iban,
      block;
    while (remainder.length > 2) {
      block = remainder.slice(0, 9);
      remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
    }
    return parseInt(remainder, 10) % 97;
  }

  /**
   * Parse the BBAN structure used to configure each IBAN Specification and returns a matching regular expression.
   * A structure is composed of blocks of 3 characters (one letter and 2 digits). Each block represents
   * a logical group in the typical representation of the BBAN. For each group, the letter indicates which characters
   * are allowed in this group and the following 2-digits number tells the length of the group.
   *
   * @param {string} structure the structure to parse
   * @returns {RegExp}
   */
  function parseStructure(structure) {
    // split in blocks of 3 chars
    var regex = structure.match(/(.{3})/g).map(function (block) {
      // parse each structure block (1-char + 2-digits)
      var format,
        pattern = block.slice(0, 1),
        repeats = parseInt(block.slice(1), 10);
      switch (pattern) {
        case "A":
          format = "0-9A-Za-z";
          break;
        case "B":
          format = "0-9A-Z";
          break;
        case "C":
          format = "A-Za-z";
          break;
        case "F":
          format = "0-9";
          break;
        case "L":
          format = "a-z";
          break;
        case "U":
          format = "A-Z";
          break;
        case "W":
          format = "0-9a-z";
          break;
      }
      return '([' + format + ']{' + repeats + '})';
    });
    return new RegExp('^' + regex.join('') + '$');
  }

  /**
   * Create a new Specification for a valid IBAN number.
   *
   * @param countryCode the code of the country
   * @param length the length of the IBAN
   * @param structure the structure of the undernying BBAN (for validation and formatting)
   * @param example an example valid IBAN
   * @constructor
   */
  function Specification(countryCode, length, structure, example) {
    this.countryCode = countryCode;
    this.length = length;
    this.structure = structure;
    this.example = example;
  }

  /**
   * Lazy-loaded regex (parse the structure and construct the regular expression the first time we need it for validation)
   */
  Specification.prototype._regex = function () {
    return this._cachedRegex || (this._cachedRegex = parseStructure(this.structure));
  };

  /**
   * Check if the passed iban is valid according to this specification.
   *
   * @param {String} iban the iban to validate
   * @returns {boolean} true if valid, false otherwise
   */
  Specification.prototype.isValid = function (iban) {
    return this.length == iban.length && this.countryCode === iban.slice(0, 2) && this._regex().test(iban.slice(4)) && iso7064Mod97_10(iso13616Prepare(iban)) == 1;
  };

  /**
   * Convert the passed IBAN to a country-specific BBAN.
   *
   * @param iban the IBAN to convert
   * @param separator the separator to use between BBAN blocks
   * @returns {string} the BBAN
   */
  Specification.prototype.toBBAN = function (iban, separator) {
    return this._regex().exec(iban.slice(4)).slice(1).join(separator);
  };

  /**
   * Convert the passed BBAN to an IBAN for this country specification.
   * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
   * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
   *
   * @param bban the BBAN to convert to IBAN
   * @returns {string} the IBAN
   */
  Specification.prototype.fromBBAN = function (bban) {
    if (!this.isValidBBAN(bban)) {
      throw new Error('Invalid BBAN');
    }
    var remainder = iso7064Mod97_10(iso13616Prepare(this.countryCode + '00' + bban)),
      checkDigit = ('0' + (98 - remainder)).slice(-2);
    return this.countryCode + checkDigit + bban;
  };

  /**
   * Check of the passed BBAN is valid.
   * This function only checks the format of the BBAN (length and matching the letetr/number specs) but does not
   * verify the check digit.
   *
   * @param bban the BBAN to validate
   * @returns {boolean} true if the passed bban is a valid BBAN according to this specification, false otherwise
   */
  Specification.prototype.isValidBBAN = function (bban) {
    return this.length - 4 == bban.length && this._regex().test(bban);
  };
  var countries = {};
  function addSpecification(IBAN) {
    countries[IBAN.countryCode] = IBAN;
  }
  addSpecification(new Specification("AD", 24, "F04F04A12", "AD1200012030200359100100"));
  addSpecification(new Specification("AE", 23, "F03F16", "AE070331234567890123456"));
  addSpecification(new Specification("AL", 28, "F08A16", "AL47212110090000000235698741"));
  addSpecification(new Specification("AT", 20, "F05F11", "AT611904300234573201"));
  addSpecification(new Specification("AZ", 28, "U04A20", "AZ21NABZ00000000137010001944"));
  addSpecification(new Specification("BA", 20, "F03F03F08F02", "BA391290079401028494"));
  addSpecification(new Specification("BE", 16, "F03F07F02", "BE68539007547034"));
  addSpecification(new Specification("BG", 22, "U04F04F02A08", "BG80BNBG96611020345678"));
  addSpecification(new Specification("BH", 22, "U04A14", "BH67BMAG00001299123456"));
  addSpecification(new Specification("BR", 29, "F08F05F10U01A01", "BR9700360305000010009795493P1"));
  addSpecification(new Specification("CH", 21, "F05A12", "CH9300762011623852957"));
  addSpecification(new Specification("CR", 21, "F03F14", "CR0515202001026284066"));
  addSpecification(new Specification("CY", 28, "F03F05A16", "CY17002001280000001200527600"));
  addSpecification(new Specification("CZ", 24, "F04F06F10", "CZ6508000000192000145399"));
  addSpecification(new Specification("DE", 22, "F08F10", "DE89370400440532013000"));
  addSpecification(new Specification("DK", 18, "F04F09F01", "DK5000400440116243"));
  addSpecification(new Specification("DO", 28, "U04F20", "DO28BAGR00000001212453611324"));
  addSpecification(new Specification("EE", 20, "F02F02F11F01", "EE382200221020145685"));
  addSpecification(new Specification("ES", 24, "F04F04F01F01F10", "ES9121000418450200051332"));
  addSpecification(new Specification("FI", 18, "F06F07F01", "FI2112345600000785"));
  addSpecification(new Specification("FO", 18, "F04F09F01", "FO6264600001631634"));
  addSpecification(new Specification("FR", 27, "F05F05A11F02", "FR1420041010050500013M02606"));
  addSpecification(new Specification("GB", 22, "U04F06F08", "GB29NWBK60161331926819"));
  addSpecification(new Specification("GE", 22, "U02F16", "GE29NB0000000101904917"));
  addSpecification(new Specification("GI", 23, "U04A15", "GI75NWBK000000007099453"));
  addSpecification(new Specification("GL", 18, "F04F09F01", "GL8964710001000206"));
  addSpecification(new Specification("GR", 27, "F03F04A16", "GR1601101250000000012300695"));
  addSpecification(new Specification("GT", 28, "A04A20", "GT82TRAJ01020000001210029690"));
  addSpecification(new Specification("HR", 21, "F07F10", "HR1210010051863000160"));
  addSpecification(new Specification("HU", 28, "F03F04F01F15F01", "HU42117730161111101800000000"));
  addSpecification(new Specification("IE", 22, "U04F06F08", "IE29AIBK93115212345678"));
  addSpecification(new Specification("IL", 23, "F03F03F13", "IL620108000000099999999"));
  addSpecification(new Specification("IS", 26, "F04F02F06F10", "IS140159260076545510730339"));
  addSpecification(new Specification("IT", 27, "U01F05F05A12", "IT60X0542811101000000123456"));
  addSpecification(new Specification("KW", 30, "U04A22", "KW81CBKU0000000000001234560101"));
  addSpecification(new Specification("KZ", 20, "F03A13", "KZ86125KZT5004100100"));
  addSpecification(new Specification("LB", 28, "F04A20", "LB62099900000001001901229114"));
  addSpecification(new Specification("LI", 21, "F05A12", "LI21088100002324013AA"));
  addSpecification(new Specification("LT", 20, "F05F11", "LT121000011101001000"));
  addSpecification(new Specification("LU", 20, "F03A13", "LU280019400644750000"));
  addSpecification(new Specification("LV", 21, "U04A13", "LV80BANK0000435195001"));
  addSpecification(new Specification("MC", 27, "F05F05A11F02", "MC5811222000010123456789030"));
  addSpecification(new Specification("MD", 24, "U02F18", "MD24AG000225100013104168"));
  addSpecification(new Specification("ME", 22, "F03F13F02", "ME25505000012345678951"));
  addSpecification(new Specification("MK", 19, "F03A10F02", "MK07250120000058984"));
  addSpecification(new Specification("MR", 27, "F05F05F11F02", "MR1300020001010000123456753"));
  addSpecification(new Specification("MT", 31, "U04F05A18", "MT84MALT011000012345MTLCAST001S"));
  addSpecification(new Specification("MU", 30, "U04F02F02F12F03U03", "MU17BOMM0101101030300200000MUR"));
  addSpecification(new Specification("NL", 18, "U04F10", "NL91ABNA0417164300"));
  addSpecification(new Specification("NO", 15, "F04F06F01", "NO9386011117947"));
  addSpecification(new Specification("PK", 24, "U04A16", "PK36SCBL0000001123456702"));
  addSpecification(new Specification("PL", 28, "F08F16", "PL61109010140000071219812874"));
  addSpecification(new Specification("PS", 29, "U04A21", "PS92PALS000000000400123456702"));
  addSpecification(new Specification("PT", 25, "F04F04F11F02", "PT50000201231234567890154"));
  addSpecification(new Specification("RO", 24, "U04A16", "RO49AAAA1B31007593840000"));
  addSpecification(new Specification("RS", 22, "F03F13F02", "RS35260005601001611379"));
  addSpecification(new Specification("SA", 24, "F02A18", "SA0380000000608010167519"));
  addSpecification(new Specification("SE", 24, "F03F16F01", "SE4550000000058398257466"));
  addSpecification(new Specification("SI", 19, "F05F08F02", "SI56263300012039086"));
  addSpecification(new Specification("SK", 24, "F04F06F10", "SK3112000000198742637541"));
  addSpecification(new Specification("SM", 27, "U01F05F05A12", "SM86U0322509800000000270100"));
  addSpecification(new Specification("TN", 24, "F02F03F13F02", "TN5910006035183598478831"));
  addSpecification(new Specification("TR", 26, "F05A01A16", "TR330006100519786457841326"));
  addSpecification(new Specification("VG", 24, "U04F16", "VG96VPVG0000012345678901"));

  // Angola
  addSpecification(new Specification("AO", 25, "F21", "AO69123456789012345678901"));
  // Burkina
  addSpecification(new Specification("BF", 27, "F23", "BF2312345678901234567890123"));
  // Burundi
  addSpecification(new Specification("BI", 16, "F12", "BI41123456789012"));
  // Benin
  addSpecification(new Specification("BJ", 28, "F24", "BJ39123456789012345678901234"));
  // Ivory
  addSpecification(new Specification("CI", 28, "U01F23", "CI17A12345678901234567890123"));
  // Cameron
  addSpecification(new Specification("CM", 27, "F23", "CM9012345678901234567890123"));
  // Cape Verde
  addSpecification(new Specification("CV", 25, "F21", "CV30123456789012345678901"));
  // Algeria
  addSpecification(new Specification("DZ", 24, "F20", "DZ8612345678901234567890"));
  // Iran
  addSpecification(new Specification("IR", 26, "F22", "IR861234568790123456789012"));
  // Jordan
  addSpecification(new Specification("JO", 30, "A04F22", "JO15AAAA1234567890123456789012"));
  // Madagascar
  addSpecification(new Specification("MG", 27, "F23", "MG1812345678901234567890123"));
  // Mali
  addSpecification(new Specification("ML", 28, "U01F23", "ML15A12345678901234567890123"));
  // Mozambique
  addSpecification(new Specification("MZ", 25, "F21", "MZ25123456789012345678901"));
  // Quatar
  addSpecification(new Specification("QA", 29, "U04A21", "QA30AAAA123456789012345678901"));
  // Senegal
  addSpecification(new Specification("SN", 28, "U01F23", "SN52A12345678901234567890123"));
  // Ukraine
  addSpecification(new Specification("UA", 29, "F25", "UA511234567890123456789012345"));
  var NON_ALPHANUM = /[^a-zA-Z0-9]/g,
    EVERY_FOUR_CHARS = /(.{4})(?!$)/g;

  /**
   * Utility function to check if a variable is a String.
   *
   * @param v
   * @returns {boolean} true if the passed variable is a String, false otherwise.
   */
  function isString(v) {
    return typeof v == 'string' || v instanceof String;
  }

  /**
   * Check if an IBAN is valid.
   *
   * @param {String} iban the IBAN to validate.
   * @returns {boolean} true if the passed IBAN is valid, false otherwise
   */
  exports.isValid = function (iban) {
    if (!isString(iban)) {
      return false;
    }
    iban = this.electronicFormat(iban);
    var countryStructure = countries[iban.slice(0, 2)];
    return !!countryStructure && countryStructure.isValid(iban);
  };

  /**
   * Convert an IBAN to a BBAN.
   *
   * @param iban
   * @param {String} [separator] the separator to use between the blocks of the BBAN, defaults to ' '
   * @returns {string|*}
   */
  exports.toBBAN = function (iban, separator) {
    if (typeof separator == 'undefined') {
      separator = ' ';
    }
    iban = this.electronicFormat(iban);
    var countryStructure = countries[iban.slice(0, 2)];
    if (!countryStructure) {
      throw new Error('No country with code ' + iban.slice(0, 2));
    }
    return countryStructure.toBBAN(iban, separator);
  };

  /**
   * Convert the passed BBAN to an IBAN for this country specification.
   * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
   * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
   *
   * @param countryCode the country of the BBAN
   * @param bban the BBAN to convert to IBAN
   * @returns {string} the IBAN
   */
  exports.fromBBAN = function (countryCode, bban) {
    var countryStructure = countries[countryCode];
    if (!countryStructure) {
      throw new Error('No country with code ' + countryCode);
    }
    return countryStructure.fromBBAN(this.electronicFormat(bban));
  };

  /**
   * Check the validity of the passed BBAN.
   *
   * @param countryCode the country of the BBAN
   * @param bban the BBAN to check the validity of
   */
  exports.isValidBBAN = function (countryCode, bban) {
    if (!isString(bban)) {
      return false;
    }
    var countryStructure = countries[countryCode];
    return countryStructure && countryStructure.isValidBBAN(this.electronicFormat(bban));
  };

  /**
   *
   * @param iban
   * @param separator
   * @returns {string}
   */
  exports.printFormat = function (iban, separator) {
    if (typeof separator == 'undefined') {
      separator = ' ';
    }
    return this.electronicFormat(iban).replace(EVERY_FOUR_CHARS, "$1" + separator);
  };

  /**
   *
   * @param iban
   * @returns {string}
   */
  exports.electronicFormat = function (iban) {
    return iban.replace(NON_ALPHANUM, '').toUpperCase();
  };

  /**
   * An object containing all the known IBAN specifications.
   */
  exports.countries = countries;
})( false ? 0 : exports);

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module is referenced by other modules so it can't be inlined
/******/ 	var __webpack_exports__ = {};
/******/ 	__webpack_modules__[260](0, __webpack_exports__);
/******/ 	((window.germanized = window.germanized || {})["static"] = window.germanized["static"] || {}).iban = __webpack_exports__;
/******/ 	
/******/ })()
;