Free indicative mortgage capacity estimate
A quick, anonymous indication of borrowing capacity for mediation. No name or identifying details are needed to see your figure.
Nothing you enter here is stored. This calculator runs entirely in your own browser — we never see or keep these figures. If you choose to request a copy at the end, only that copy is produced from them; they are not retained afterwards.
See my estimate
Important: this is a rough indication only. If there is any adverse credit, or your circumstances are about to change, the real figure could be very different. It is for mediation discussion only and is not a Mortgage Capacity Report.
CiAgKGZ1bmN0aW9uKCl7CiAgICB2YXIgV0VCSE9PS19VUkwgPSAiaHR0cHM6Ly9ob29rLmV1MS5tYWtlLmNvbS9rc2MycnYzZG5xZTdnOGlsczdoNWY0aWplbGRpeGI5cSI7CgogICAgLy8gLS0tLSBUdW5lIHRoZSBtb2RlbCBoZXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBDRkcgPSB7CiAgICAgIE1VTFRfQkFTRTo0LjUsIE1VTFRfTUlEOjUuMCwgTVVMVF9ISUdIOjUuNSwKICAgICAgVElFUl9NSUQ6NTAwMDAsIFRJRVJfSElHSDo3NTAwMCwKICAgICAgQURESVRJT05BTF9IQUlSQ1VUOjAuNSwKICAgICAgU09GVF9NVUxUOjIuNSwKICAgICAgQ09NTUlUX01VTFQ6NC41LAogICAgICBERVBfQ09TVDoyNTAwLAogICAgICBTRV9IQUlSQ1VUOjAuOSwKICAgICAgQUdFX1NUQVJUOjUwLCBBR0VfU1RFUDowLjA0LCBBR0VfRkxPT1I6MC4yNSwKICAgICAgUkFOR0VfUENUOjAuMDUsCiAgICAgIENSRURJVDp7IGhpZ2g6MS4wLCBuZWFyOjEuMCwgZ29vZDoxLjAsIHNvbGlkOjEuMCwgYnVpbGRpbmc6MS4wLCBzdGFydGluZzoxLjAsIHVua25vd246MS4wIH0gIC8vIHNjb3JlIGlzIGluZm9ybWF0aW9uYWwgb25seSwgbm8gZWZmZWN0IG9uIHRoZSBmaWd1cmUKICAgIH07CiAgICB2YXIgVEFJTCA9ICcgRm9yIGEgbW9yZSBhY2N1cmF0ZSwgdGFpbG9yZWQgcmVwb3J0LCBhIGZ1bGwgTW9ydGdhZ2UgQ2FwYWNpdHkgUmVwb3J0IHdpbGwgYmUgcmVxdWlyZWQuJzsKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgdmFyICQgPSBmdW5jdGlvbihpZCl7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7IH07CiAgICB2YXIgbnVtID0gZnVuY3Rpb24oaWQpeyB2YXIgdiA9IHBhcnNlRmxvYXQoJChpZCkudmFsdWUpOyByZXR1cm4gaXNGaW5pdGUodikgJiYgdiA+IDAgPyB2IDogMDsgfTsKICAgIHZhciBnYnAgPSBmdW5jdGlvbihuKXsgcmV0dXJuICfCoycgKyBNYXRoLnJvdW5kKG4pLnRvTG9jYWxlU3RyaW5nKCdlbi1HQicpOyB9OwogICAgdmFyIHJvdW5kMTAwID0gZnVuY3Rpb24obil7IHJldHVybiBNYXRoLnJvdW5kKG4vMTAwKSoxMDA7IH07CiAgICB2YXIgZm10RGF0ZSA9IGZ1bmN0aW9uKGQpewogICAgICBpZighZCkgcmV0dXJuICcnOwogICAgICB2YXIgbT1bJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddOwogICAgICB2YXIgZHQ9KGQgaW5zdGFuY2VvZiBEYXRlKT9kOm5ldyBEYXRlKGQrJ1QwMDowMDowMCcpOwogICAgICBpZihpc05hTihkdC5nZXRUaW1lKCkpKSByZXR1cm4gZDsKICAgICAgcmV0dXJuICgnMCcrZHQuZ2V0RGF0ZSgpKS5zbGljZSgtMikrJyAnK21bZHQuZ2V0TW9udGgoKV0rJyAnK2R0LmdldEZ1bGxZZWFyKCk7CiAgICB9OwoKICAgIGZ1bmN0aW9uIGV2YWxXYXJuaW5ncygpewogICAgICB2YXIgb3V0PVtdOwogICAgICB2YXIgZWFybmVkPW51bSgnZS1lYXJuZWQnKTsKICAgICAgdmFyIHNvZnQ9bnVtKCdlLWNoaWxkJykrbnVtKCdlLW90aGVyJykrbnVtKCdlLW1haW50aW4nKTsKICAgICAgdmFyIGVtcD0kKCdlLWVtcCcpLnZhbHVlOwogICAgICB2YXIgY3JlZGl0PSQoJ2UtY3JlZGl0JykudmFsdWU7CiAgICAgIGlmKGVtcD09PSdTZWxmLWVtcGxveWVkJykKICAgICAgICBvdXQucHVzaCh7a2V5OidzZScsIHRleHQ6J1lvdSBhcmUgc2VsZi1lbXBsb3llZC4gTGVuZGVycyBhc3Nlc3Mgc2VsZi1lbXBsb3llZCBpbmNvbWUgb24gdHdvIG9yIG1vcmUgeWVhcnMgb2YgYWNjb3VudHMuIElmIHlvdSBoYXZlIGJlZW4gc2VsZi1lbXBsb3llZCBmb3IgbGVzcyB0aGFuIGFib3V0IHR3byB5ZWFycywgdGhpcyBmaWd1cmUgaXMgdW5saWtlbHkgdG8gYmUgYWNjdXJhdGUuJ30pOwogICAgICBpZihlYXJuZWQ9PT0wKQogICAgICAgIG91dC5wdXNoKHtrZXk6J25vZWFybicsIHRleHQ6J1dpdGggbm8gZWFybmVkIGluY29tZSBlbnRlcmVkLCBtb3N0IGxlbmRlcnMgd2lsbCBvZmZlciBsaXR0bGUgb3Igbm90aGluZyByZWdhcmRsZXNzIG9mIG90aGVyIGluY29tZSwgc28gdGhpcyBmaWd1cmUgaXMgbGlrZWx5IHRvIG92ZXJzdGF0ZSB3aGF0IGlzIHJlYWxpc3RpY2FsbHkgYXZhaWxhYmxlLid9KTsKICAgICAgZWxzZSBpZihzb2Z0PmVhcm5lZCkKICAgICAgICBvdXQucHVzaCh7a2V5Oidzb2Z0JywgdGV4dDonWW91ciBiZW5lZml0IGFuZCBtYWludGVuYW5jZSBpbmNvbWUgaXMgaGlnaGVyIHRoYW4geW91ciBlYXJuZWQgaW5jb21lLiBNb3N0IGxlbmRlcnMgY291bnQgdGhhdCBpbmNvbWUgb25seSBpbiBwYXJ0LCBvciBub3QgYXQgYWxsLCBzbyB0aGlzIGZpZ3VyZSBpcyBsaWtlbHkgdG8gYmUgb3B0aW1pc3RpYy4nfSk7CiAgICAgIHJldHVybiBvdXQ7CiAgICB9CgogICAgdmFyIGRpc21pc3NlZD17fTsKICAgIGZ1bmN0aW9uIHJlbmRlckxpdmVXYXJuaW5ncygpewogICAgICB2YXIgYm94PSQoJ2UtbGl2ZXdhcm4nKTsgaWYoIWJveCkgcmV0dXJuOwogICAgICB2YXIgd3M9ZXZhbFdhcm5pbmdzKCkuZmlsdGVyKGZ1bmN0aW9uKHcpe3JldHVybiAhZGlzbWlzc2VkW3cua2V5XTt9KTsKICAgICAgaWYoIXdzLmxlbmd0aCl7IGJveC5zdHlsZS5kaXNwbGF5PSdub25lJzsgYm94LmlubmVySFRNTD0nJzsgcmV0dXJuOyB9CiAgICAgIGJveC5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgICAgIGJveC5pbm5lckhUTUwgPSB3cy5tYXAoZnVuY3Rpb24odyl7CiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJjeC13YXJuIj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImN4LXdhcm4teCIgZGF0YS1rZXk9Iicrdy5rZXkrJyIgYXJpYS1sYWJlbD0iRGlzbWlzcyI+XHUwMGQ3PC9idXR0b24+PGI+XHUyNmEwIFBsZWFzZSBub3RlOjwvYj4gJyt3LnRleHQrVEFJTCsnPC9kaXY+JzsKICAgICAgfSkuam9pbignJyk7CiAgICAgIHZhciBidG5zPWJveC5xdWVyeVNlbGVjdG9yQWxsKCcuY3gtd2Fybi14Jyk7CiAgICAgIGZvcih2YXIgaT0wO2k8YnRucy5sZW5ndGg7aSsrKXsKICAgICAgICBidG5zW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZGlzbWlzc2VkW3RoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWtleScpXT10cnVlOyByZW5kZXJMaXZlV2FybmluZ3MoKTsgfSk7CiAgICAgIH0KICAgIH0KICAgIFsnZS1lbXAnLCdlLWVhcm5lZCcsJ2UtYWRkaXRpb25hbCcsJ2UtY2hpbGQnLCdlLW90aGVyJywnZS1tYWludGluJywnZS1jcmVkaXQnXS5mb3JFYWNoKGZ1bmN0aW9uKGlkKXsKICAgICAgdmFyIGVsPSQoaWQpOyBpZihlbCl7IGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgcmVuZGVyTGl2ZVdhcm5pbmdzKTsgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgcmVuZGVyTGl2ZVdhcm5pbmdzKTsgfQogICAgfSk7CgogICAgLy8gb25lLXRpbWUgcG9wdXAgZm9yIHRoZSB0d28gbG93ZXN0IGNyZWRpdCBiYW5kcwogICAgdmFyIGNyZWRpdEFsZXJ0ZWQ9e307CiAgICB2YXIgY1NlbD0kKCdlLWNyZWRpdCcpOwogICAgaWYoY1NlbCl7IGNTZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKXsKICAgICAgdmFyIHY9Y1NlbC52YWx1ZTsKICAgICAgaWYoKHY9PT0nYnVpbGRpbmcnIHx8IHY9PT0nc3RhcnRpbmcnKSAmJiAhY3JlZGl0QWxlcnRlZFt2XSl7CiAgICAgICAgY3JlZGl0QWxlcnRlZFt2XT10cnVlOwogICAgICAgIHZhciBtMT0nQSBmdWxsIE1vcnRnYWdlIENhcGFjaXR5IFJlcG9ydCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4nOwogICAgICAgIHZhciBtMj0nV2l0aCBhIHNjb3JlIGluIHRoaXMgcmFuZ2UsIHRoZSBudW1iZXIgb2YgbGVuZGVycyBvcGVuIHRvIHlvdSBpcyBsaW1pdGVkLCBidXQgdGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSByZWR1Y2UgaG93IG11Y2ggeW91IGNvdWxkIGJvcnJvdy4gQSBmdWxsIHJlcG9ydCBhc3Nlc3NlcyB3aGljaCBsZW5kZXJzIHdvdWxkIGFjdHVhbGx5IGNvbnNpZGVyIHlvdSBhbmQgd2hhdCB0aGV5IHdvdWxkIG9mZmVyLCB3aGljaCB0aGlzIHF1aWNrIGVzdGltYXRlIGNhbm5vdC4nOwogICAgICAgIGFsZXJ0KG0xICsgU3RyaW5nLmZyb21DaGFyQ29kZSgxMCwxMCkgKyBtMik7CiAgICAgIH0KICAgIH0pOyB9CgogICAgdmFyIGxhc3RDYWxjID0gbnVsbDsKCiAgICAkKCdlLWNhbGMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoJCgnZS1ieWVhcicpLnZhbHVlLDEwKTsKICAgICAgaWYoIXllYXIgfHwgeWVhciA8IDE5MzAgfHwgeWVhciA+IDIwMDgpeyBhbGVydCgnUGxlYXNlIGVudGVyIGEgdmFsaWQgeWVhciBvZiBiaXJ0aC4nKTsgJCgnZS1ieWVhcicpLmZvY3VzKCk7IHJldHVybjsgfQogICAgICB2YXIgbW9udGggPSBwYXJzZUludCgkKCdlLWJtb250aCcpLnZhbHVlLDEwKSB8fCAxOwogICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgdmFyIGFnZSA9IG5vdy5nZXRGdWxsWWVhcigpIC0geWVhcjsKICAgICAgaWYoKG1vbnRoLTEpID4gbm93LmdldE1vbnRoKCkpIGFnZSAtPSAxOwoKICAgICAgdmFyIGVhcm5lZD1udW0oJ2UtZWFybmVkJyksIGFkZGl0aW9uYWw9bnVtKCdlLWFkZGl0aW9uYWwnKSwgZW1wPSQoJ2UtZW1wJykudmFsdWU7CiAgICAgIHZhciBjaGlsZHJlbj1udW0oJ2UtZGVwcycpOwogICAgICB2YXIgY3JlZGl0PSQoJ2UtY3JlZGl0JykudmFsdWU7CgogICAgICB2YXIgbXVsdCA9IGVhcm5lZD49Q0ZHLlRJRVJfSElHSCA/IENGRy5NVUxUX0hJR0ggOiAoZWFybmVkPj1DRkcuVElFUl9NSUQgPyBDRkcuTVVMVF9NSUQgOiBDRkcuTVVMVF9CQVNFKTsKICAgICAgdmFyIGluY29tZUNhcCA9IG11bHQgKiAoZWFybmVkICsgQ0ZHLkFERElUSU9OQUxfSEFJUkNVVCphZGRpdGlvbmFsKTsKICAgICAgdmFyIHNvZnRDYXAgPSBDRkcuU09GVF9NVUxUICogKG51bSgnZS1jaGlsZCcpICsgbnVtKCdlLW90aGVyJykgKyBudW0oJ2UtbWFpbnRpbicpKTsKICAgICAgdmFyIGNvbW1pdCA9IENGRy5DT01NSVRfTVVMVCAqIChudW0oJ2UtZGVidCcpKjEyICsgbnVtKCdlLW1haW50b3V0JykgKyBDRkcuREVQX0NPU1QqY2hpbGRyZW4pOwoKICAgICAgdmFyIHN1YnRvdGFsID0gaW5jb21lQ2FwICsgc29mdENhcCAtIGNvbW1pdDsKICAgICAgdmFyIGFnZUZhY3RvciA9IE1hdGgubWF4KENGRy5BR0VfRkxPT1IsIDEgLSBDRkcuQUdFX1NURVAqTWF0aC5tYXgoMCwgYWdlLUNGRy5BR0VfU1RBUlQpKTsKICAgICAgdmFyIGNhcGFjaXR5ID0gc3VidG90YWwgKiBhZ2VGYWN0b3I7CiAgICAgIGlmKGVtcD09PSdTZWxmLWVtcGxveWVkJykgY2FwYWNpdHkgKj0gQ0ZHLlNFX0hBSVJDVVQ7CiAgICAgIGNhcGFjaXR5ICo9IChDRkcuQ1JFRElUW2NyZWRpdF0hPW51bGwgPyBDRkcuQ1JFRElUW2NyZWRpdF0gOiAxKTsKICAgICAgY2FwYWNpdHkgPSBNYXRoLm1heCgwLCBjYXBhY2l0eSk7CgogICAgICB2YXIgbG93ID0gcm91bmQxMDAoY2FwYWNpdHkqKDEtQ0ZHLlJBTkdFX1BDVCkpOwogICAgICB2YXIgaGlnaCA9IHJvdW5kMTAwKGNhcGFjaXR5KigxK0NGRy5SQU5HRV9QQ1QpKTsKICAgICAgJCgnZS1hbW91bnQnKS50ZXh0Q29udGVudCA9IGNhcGFjaXR5PD0wID8gJ8KjMCcgOiAoZ2JwKGxvdykrJyBcdTIwMTMgJytnYnAoaGlnaCkpOwoKICAgICAgdmFyIHdzPWV2YWxXYXJuaW5ncygpOwogICAgICB2YXIgd2FybmluZ3NUZXh0ID0gd3MubGVuZ3RoID8gd3MubWFwKGZ1bmN0aW9uKHcpe3JldHVybiB3LnRleHQrVEFJTDt9KS5qb2luKCdcblxuJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdObyBzcGVjaWZpYyBhY2N1cmFjeSBmbGFncyB3ZXJlIHJhaXNlZCBieSB0aGUgZmlndXJlcyBwcm92aWRlZC4gVGhpcyByZW1haW5zIGFuIGluZGljYXRpdmUgZXN0aW1hdGUgb25seS4nOwogICAgICAkKCdlLXJlc3VsdHdhcm4nKS5pbm5lckhUTUwgPSB3cy5sZW5ndGggPyB3cy5tYXAoZnVuY3Rpb24odyl7CiAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJjeC13YXJuIiBzdHlsZT0icGFkZGluZy1yaWdodDoxcmVtOyI+PGI+XHUyNmEwIFBsZWFzZSBub3RlOjwvYj4gJyt3LnRleHQrVEFJTCsnPC9kaXY+JzsKICAgICAgfSkuam9pbignJykgOiAnJzsKICAgICAgcmVuZGVyTGl2ZVdhcm5pbmdzKCk7CgogICAgICBsYXN0Q2FsYyA9IHsKICAgICAgICBhZ2U6IGFnZSwgZW1wbG95bWVudDogZW1wLCBkZXBlbmRhbnRzOiBTdHJpbmcoY2hpbGRyZW4pLAogICAgICAgIGNyZWRpdFNjb3JlOiAkKCdlLWNyZWRpdCcpLm9wdGlvbnNbJCgnZS1jcmVkaXQnKS5zZWxlY3RlZEluZGV4XS50ZXh0LAogICAgICAgIGVhcm5lZEluY29tZTogZ2JwKG51bSgnZS1lYXJuZWQnKSksIGFkZGl0aW9uYWxJbmNvbWU6IGdicChudW0oJ2UtYWRkaXRpb25hbCcpKSwKICAgICAgICBjaGlsZEJlbmVmaXQ6IGdicChudW0oJ2UtY2hpbGQnKSksIG90aGVyQmVuZWZpdHM6IGdicChudW0oJ2Utb3RoZXInKSksCiAgICAgICAgbWFpbnRlbmFuY2VJbjogZ2JwKG51bSgnZS1tYWludGluJykpLCBtYWludGVuYW5jZU91dDogZ2JwKG51bSgnZS1tYWludG91dCcpKSwKICAgICAgICBtb250aGx5RGVidDogZ2JwKG51bSgnZS1kZWJ0JykpLAogICAgICAgIHdhcm5pbmdzOiB3YXJuaW5nc1RleHQsCiAgICAgICAgcmFuZ2U6IChjYXBhY2l0eTw9MCA/IGdicCgwKSA6IGdicChsb3cpKycgXHUyMDEzICcrZ2JwKGhpZ2gpKQogICAgICB9OwoKICAgICAgJCgnZS1yZXN1bHQnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgJCgnZS1jb3B5Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICQoJ2UtcmVzdWx0Jykuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnLCBibG9jazonc3RhcnQnfSk7CiAgICB9KTsKCiAgICAkKCdlLXNlbmQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgIHZhciBtc2cgPSAkKCdlLW1zZycpOwogICAgICB2YXIgc2hvdyA9IGZ1bmN0aW9uKHQpeyBtc2cudGV4dENvbnRlbnQgPSB0OyBtc2cuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH07CiAgICAgIHZhciBmaXJzdCA9ICQoJ2UtZmlyc3QnKS52YWx1ZS50cmltKCksIGxhc3QgPSAkKCdlLWxhc3QnKS52YWx1ZS50cmltKCk7CiAgICAgIHZhciBlbWFpbCA9ICQoJ2UtZW1haWwnKS52YWx1ZS50cmltKCksIGNvdXJ0ID0gJCgnZS1jb3VydCcpLnZhbHVlOwogICAgICB2YXIgaG4gPSAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0iZS1obiJdOmNoZWNrZWQnKXx8e30pLnZhbHVlOwoKICAgICAgaWYoIWZpcnN0IHx8ICFsYXN0KXsgc2hvdygnUGxlYXNlIGFkZCB5b3VyIGZpcnN0IGFuZCBsYXN0IG5hbWUuJyk7IHJldHVybjsgfQogICAgICBpZighZW1haWwgfHwgZW1haWwuaW5kZXhPZignQCcpIDwgMCl7IHNob3coJ1BsZWFzZSBhZGQgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLicpOyByZXR1cm47IH0KICAgICAgaWYoIWNvdXJ0KXsgc2hvdygnUGxlYXNlIGFkZCB5b3VyIGV4cGVjdGVkIGNvdXJ0IGRhdGUuJyk7IHJldHVybjsgfQogICAgICBpZighaG4peyBzaG93KCdQbGVhc2UgY2hvb3NlIG9uZSBvZiB0aGUgdHdvIG9wdGlvbnMgYWJvdmUuJyk7IHJldHVybjsgfQogICAgICBpZighJCgnZS1kMScpLmNoZWNrZWQgfHwgISQoJ2UtZDInKS5jaGVja2VkKXsgc2hvdygnUGxlYXNlIHRpY2sgYm90aCBkZWNsYXJhdGlvbnMgYmVmb3JlIHNlbmRpbmcuJyk7IHJldHVybjsgfQogICAgICBpZighbGFzdENhbGMpeyBzaG93KCdQbGVhc2UgY2FsY3VsYXRlIHlvdXIgZXN0aW1hdGUgZmlyc3QuJyk7IHJldHVybjsgfQoKICAgICAgdmFyIHBheWxvYWQgPSBPYmplY3QuYXNzaWduKHsKICAgICAgICBmaXJzdE5hbWU6Zmlyc3QsIGxhc3ROYW1lOmxhc3QsIGVtYWlsOmVtYWlsLAogICAgICAgIGNvdXJ0RGF0ZTpmbXREYXRlKGNvdXJ0KSwgZGF0ZTpmbXREYXRlKG5ldyBEYXRlKCkpLCBoZWxwTmV0d29yazpobgogICAgICB9LCBsYXN0Q2FsYyk7CgogICAgICAkKCdlLXNlbmQnKS5kaXNhYmxlZCA9IHRydWU7IHNob3coJ1NlbmRpbmcgeW91ciBjb3B54oCmJyk7CiAgICAgIGZldGNoKFdFQkhPT0tfVVJMLCB7bWV0aG9kOidQT1NUJywgaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSwgYm9keTpKU09OLnN0cmluZ2lmeShwYXlsb2FkKX0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICBpZighci5vaykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcmVzcG9uc2UnKTsKICAgICAgICAgICQoJ2UtY29weScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAkKCdlLWRvbmUnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICQoJ2UtZG9uZScpLmlubmVySFRNTCA9ICdUaGFuayB5b3Ug4oCUIHlvdXIgb25lLXBhZ2Ugc3VtbWFyeSBpcyBvbiBpdHMgd2F5IHRvIDxiPicrZW1haWwucmVwbGFjZSgvPC9nLCcmbHQ7JykrJzwvYj4uIFBsZWFzZSBjaGVjayB5b3VyIGluYm94IChhbmQgc3BhbSBmb2xkZXIpLiBOb3RoaW5nIHlvdSBlbnRlcmVkIGhhcyBiZWVuIHN0b3JlZC4nOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7ICQoJ2Utc2VuZCcpLmRpc2FibGVkID0gZmFsc2U7IHNob3coJ1NvcnJ5LCBzb21ldGhpbmcgd2VudCB3cm9uZyBzZW5kaW5nIHlvdXIgY29weS4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIG1vbWVudC4nKTsgfSk7CiAgICB9KTsKICB9KSgpOwogIA==