diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 537e143..b35ea71 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2001,7 +2001,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_messagebox); // toaster, refer to modules/toaster.js - duk_peval_string_noresult(ctx, "addModule('toaster', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOwoKaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQp7CiAgICBmdW5jdGlvbiBmaW5kUGF0aChhcHApCiAgICB7CiAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICAgICAgewogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzICIgKyBhcHAgKyAiXG5leGl0XG4iKTsKICAgICAgICB9CiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7CiAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyID09ICcnID8gbnVsbCA6IGNoaWxkLnN0ZG91dC5zdHIpOwogICAgfQp9CgpmdW5jdGlvbiBUb2FzdGVyKCkKewogICAgdGhpcy5fT2JqZWN0SUQgPSAndG9hc3Rlcic7CiAgICB0aGlzLlRvYXN0ID0gZnVuY3Rpb24gVG9hc3QodGl0bGUsIGNhcHRpb24pCiAgICB7CiAgICAgICAgdmFyIHJldFZhbCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgcmV0VmFsLnRpdGxlID0gdGl0bGU7CiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOwoKICAgICAgICBzd2l0Y2ggKHByb2Nlc3MucGxhdGZvcm0pCiAgICAgICAgewogICAgICAgICAgICBjYXNlICd3aW4zMic6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOwogICAgICAgICAgICAgICAgICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2Vzc0lkVG9TZXNzaW9uSWQnKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcHNpZCA9IEdNLkNyZWF0ZVZhcmlhYmxlKDQpOwogICAgICAgICAgICAgICAgICAgIHZhciBjb25zb2xlVWlkID0gMDsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVVaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdDYW5ub3QgZGlzcGxheSB1c2VyIG5vdGlmaWNhdGlvbiB3aGVuIGEgdXNlciBpcyBub3QgbG9nZ2VkIGluJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGtlcm5lbDMyLlByb2Nlc3NJZFRvU2Vzc2lvbklkKHByb2Nlc3MucGlkLCBwc2lkKS5WYWwgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdpbnRlcm5hbCBlcnJvcicpOyByZXR1cm4gKHJldFZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZVVpZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcnVubmluZyBvbiB0aGUgcGh5c2ljYWwgY29uc29sZQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKHsgcHJvY2Vzc0lzb2xhdGlvbjogdHJ1ZSB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBzbyBzcGF3biB0aGUgU2NyaXB0Q29udGFpbmVyIGludG8gdGhlIGNvcnJlY3Qgc2Vzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKHsgcHJvY2Vzc0lzb2xhdGlvbjogdHJ1ZSwgc2Vzc2lvbklkOiBjb25zb2xlVWlkIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLnBhcmVudCA9IHJldFZhbDsKICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7IH0pOwogICAgICAgICAgICAgICAgICAgIHJldFZhbC5fY2hpbGQuYWRkTW9kdWxlKCd3aW4tY29uc29sZScsIGdldEpTTW9kdWxlKCd3aW4tY29uc29sZScpKTsKICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLmFkZE1vZHVsZSgnd2luLW1lc3NhZ2UtcHVtcCcsIGdldEpTTW9kdWxlKCd3aW4tbWVzc2FnZS1wdW1wJykpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9hc3QgPSByZXF1aXJlKCd3aW4tY29uc29sZScpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWxsb29uID0gdG9hc3QuU2V0VHJheUljb24oeyBzekluZm86ICciICsgY2FwdGlvbiArICInLCBzekluZm9UaXRsZTogJyIgKyB0aXRsZSArICInLCBiYWxsb29uT25seTogdHJ1ZSB9KTtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWxsb29uLm9uKCdUb2FzdERpc21pc3NlZCcsIGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KCk7fSk7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAge1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKGUpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZCgnZG9uZScpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9jaGlsZC5FeGVjdXRlU3RyaW5nKHN0cik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgkgICAgY2FzZSAnZnJlZWJzZCc6CiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jb25zb2xlVWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8ocmV0VmFsLmNvbnNvbGVVaWQpOwoJCQlyZXRWYWwudXNlcm5hbWUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0VXNlcm5hbWUocmV0VmFsLmNvbnNvbGVVaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoeHhlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooeHhlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2YXIgdXRpbCA9IGZpbmRQYXRoKCd6ZW5pdHknKTsKICAgICAgICAgICAgICAgICAgICBpZiAodXRpbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBaRU5JVFkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHV0aWwsIFsnemVuaXR5JywgJy0tbm90aWZpY2F0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5wYXJlbnQgPSByZXRWYWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgdGhpcy5wYXJlbnQua2lsbCgpOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZGVyci5zdHIudHJpbSgpICE9ICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodXRpbCA9IGZpbmRQYXRoKCdub3RpZnktc2VuZCcpKSAmJiB0aGlzLnN0ZGVyci5zdHIuc3BsaXQoJ0dMaWItQ1JJVElDQUwnKS5sZW5ndGggPiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJ1ZyBpbiB6ZW5pdHksIHNvIHdlIHNob3VsZCB0cnkgbm90aWZ5LXNlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydESVNQTEFZJ10pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERJU1BMQVkgaXMgc2V0LCBzbyB3ZSBnb29kIHRvIGdvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh1dGlsLCBbJ25vdGlmeS1zZW5kJywgdGhpcy5wYXJlbnQudGl0bGUsIHRoaXMucGFyZW50LmNhcHRpb25dKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoaWxkLnBhcmVudCA9IHRoaXMucGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaW5kIHRoZSBESVNQTEFZIHRvIHVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKGNvbnNvbGVVaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQucGFyZW50ID0gdGhpcy5wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC5zdGRpbi53cml0ZSgnc3UgLSAnICsgdXNlcm5hbWUgKyAnIC1jICJESVNQTEFZPScgKyBkaXNwbGF5ICsgJyBub3RpZnktc2VuZCBcJycgKyB0aGlzLnBhcmVudC50aXRsZSArICdcJyBcJycgKyB0aGlzLnBhcmVudC5jYXB0aW9uICsgJ1wnIlxuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC5zdGRpbi53cml0ZSgnZXhpdFxuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9USUZZLVNFTkQgaGFzIGEgYnVnIHdoZXJlIHRpbWVvdXRzIGRvbid0IHdvcmssIHNvIHRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25GYWtlRGlzbWlzc2VkKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9yZXMoJ0RJU01JU1NFRCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwMCwgdGhpcy5wYXJlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFrZSBhIHRvYXN0IHVzaW5nIHplbml0eSAtLWluZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbCA9IGZpbmRQYXRoKCd6ZW5pdHknKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodXRpbCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHRoaXMucGFyZW50LnRpdGxlLCAnLS10ZXh0PScgKyB0aGlzLnBhcmVudC5jYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHRoaXMucGFyZW50LmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiB0aGlzLnBhcmVudC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiB0aGlzLnBhcmVudC54aW5mby5kaXNwbGF5IH0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoaWxkLnBhcmVudCA9IHRoaXMucGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fcmVzKCdESVNNSVNTRUQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB1dGlsID0gZmluZFBhdGgoJ2tkaWFsb2cnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwpIAoJCQl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgS0RJQUxPRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7CiAgIAkJCQlpZih4ZGc9PW51bGwpCgkJCQl7CgkJCQkJeGRnID0gJy90bXAvcnVudGltZS0nICsgcmV0VmFsLnVzZXJuYW1lOwoJCQkJfSAgICAgICAgICAgICAgICAgICAKICAgICAgaWYgKCFyZXRWYWwueGluZm8gfHwgIXJldFZhbC54aW5mby5kaXNwbGF5IHx8ICFyZXRWYWwueGluZm8ueGF1dGhvcml0eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignSW50ZXJuYWwgRXJyb3InKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgkJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh1dGlsLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHJldFZhbC50aXRsZSwgJy0tcGFzc2l2ZXBvcHVwJywgcmV0VmFsLmNhcHRpb24sICc1J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5LCBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnBhcmVudCA9IHJldFZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5Lm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ1plbml0eS9LRGlhbG9nIG5vdCBmb3VuZCcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2Rhcndpbic6CiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0ID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnkodGl0bGUsIGNhcHRpb24pOwogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC5wYXJlbnQgPSByZXRWYWw7CiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0LnRoZW4oZnVuY3Rpb24gKHYpIHsgdGhpcy5wYXJlbnQuX3Jlcyh2KTsgfSwgZnVuY3Rpb24gKGUpIHsgdGhpcy5wYXJlbnQuX3JlaihlKTsgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgIH07Cn0KCm1vZHVsZS5leHBvcnRzID0gbmV3IFRvYXN0ZXIoKTsK', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('toaster', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOwoKaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQp7CiAgICBmdW5jdGlvbiBmaW5kUGF0aChhcHApCiAgICB7CiAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICAgICAgewogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzICIgKyBhcHAgKyAiXG5leGl0XG4iKTsKICAgICAgICB9CiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7CiAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyID09ICcnID8gbnVsbCA6IGNoaWxkLnN0ZG91dC5zdHIpOwogICAgfQp9CgpmdW5jdGlvbiBUb2FzdGVyKCkKewogICAgdGhpcy5fT2JqZWN0SUQgPSAndG9hc3Rlcic7CiAgICB0aGlzLlRvYXN0ID0gZnVuY3Rpb24gVG9hc3QodGl0bGUsIGNhcHRpb24pCiAgICB7CiAgICAgICAgdmFyIHJldFZhbCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgcmV0VmFsLnRpdGxlID0gdGl0bGU7CiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOwoKICAgICAgICBzd2l0Y2ggKHByb2Nlc3MucGxhdGZvcm0pCiAgICAgICAgewogICAgICAgICAgICBjYXNlICd3aW4zMic6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOwogICAgICAgICAgICAgICAgICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnUHJvY2Vzc0lkVG9TZXNzaW9uSWQnKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcHNpZCA9IEdNLkNyZWF0ZVZhcmlhYmxlKDQpOwogICAgICAgICAgICAgICAgICAgIHZhciBjb25zb2xlVWlkID0gMDsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVVaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdDYW5ub3QgZGlzcGxheSB1c2VyIG5vdGlmaWNhdGlvbiB3aGVuIGEgdXNlciBpcyBub3QgbG9nZ2VkIGluJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGtlcm5lbDMyLlByb2Nlc3NJZFRvU2Vzc2lvbklkKHByb2Nlc3MucGlkLCBwc2lkKS5WYWwgPT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdpbnRlcm5hbCBlcnJvcicpOyByZXR1cm4gKHJldFZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoY29uc29sZVVpZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcnVubmluZyBvbiB0aGUgcGh5c2ljYWwgY29uc29sZQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKHsgcHJvY2Vzc0lzb2xhdGlvbjogdHJ1ZSB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBzbyBzcGF3biB0aGUgU2NyaXB0Q29udGFpbmVyIGludG8gdGhlIGNvcnJlY3Qgc2Vzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKHsgcHJvY2Vzc0lzb2xhdGlvbjogdHJ1ZSwgc2Vzc2lvbklkOiBjb25zb2xlVWlkIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLnBhcmVudCA9IHJldFZhbDsKICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7IH0pOwogICAgICAgICAgICAgICAgICAgIHJldFZhbC5fY2hpbGQuYWRkTW9kdWxlKCd3aW4tY29uc29sZScsIGdldEpTTW9kdWxlKCd3aW4tY29uc29sZScpKTsKICAgICAgICAgICAgICAgICAgICByZXRWYWwuX2NoaWxkLmFkZE1vZHVsZSgnd2luLW1lc3NhZ2UtcHVtcCcsIGdldEpTTW9kdWxlKCd3aW4tbWVzc2FnZS1wdW1wJykpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9hc3QgPSByZXF1aXJlKCd3aW4tY29uc29sZScpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWxsb29uID0gdG9hc3QuU2V0VHJheUljb24oeyBzekluZm86ICciICsgY2FwdGlvbiArICInLCBzekluZm9UaXRsZTogJyIgKyB0aXRsZSArICInLCBiYWxsb29uT25seTogdHJ1ZSB9KTtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWxsb29uLm9uKCdUb2FzdERpc21pc3NlZCcsIGZ1bmN0aW9uKCl7cHJvY2Vzcy5leGl0KCk7fSk7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAge1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKGUpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZCgnZG9uZScpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7CiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9jaGlsZC5FeGVjdXRlU3RyaW5nKHN0cik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgkgICAgY2FzZSAnZnJlZWJzZCc6CiAgICAgICAgICAgIGNhc2UgJ2xpbnV4JzoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jb25zb2xlVWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLnhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8ocmV0VmFsLmNvbnNvbGVVaWQpOwoJCQlyZXRWYWwudXNlcm5hbWUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0VXNlcm5hbWUocmV0VmFsLmNvbnNvbGVVaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAoeHhlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooeHhlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2YXIgdXRpbCA9IGZpbmRQYXRoKCd6ZW5pdHknKTsKICAgICAgICAgICAgICAgICAgICBpZiAodXRpbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBaRU5JVFkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHV0aWwsIFsnemVuaXR5JywgJy0tbm90aWZpY2F0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5wYXJlbnQgPSByZXRWYWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgdGhpcy5wYXJlbnQua2lsbCgpOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZGVyci5zdHIudHJpbSgpICE9ICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodXRpbCA9IGZpbmRQYXRoKCdub3RpZnktc2VuZCcpKSAmJiB0aGlzLnN0ZGVyci5zdHIuc3BsaXQoJ0dMaWItQ1JJVElDQUwnKS5sZW5ndGggPiAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJ1ZyBpbiB6ZW5pdHksIHNvIHdlIHNob3VsZCB0cnkgbm90aWZ5LXNlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydESVNQTEFZJ10pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERJU1BMQVkgaXMgc2V0LCBzbyB3ZSBnb29kIHRvIGdvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh1dGlsLCBbJ25vdGlmeS1zZW5kJywgdGhpcy5wYXJlbnQudGl0bGUsIHRoaXMucGFyZW50LmNhcHRpb25dKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoaWxkLnBhcmVudCA9IHRoaXMucGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaW5kIHRoZSBESVNQTEFZIHRvIHVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKGNvbnNvbGVVaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQucGFyZW50ID0gdGhpcy5wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC5zdGRpbi53cml0ZSgnc3UgLSAnICsgdXNlcm5hbWUgKyAnIC1jICJESVNQTEFZPScgKyBkaXNwbGF5ICsgJyBub3RpZnktc2VuZCBcJycgKyB0aGlzLnBhcmVudC50aXRsZSArICdcJyBcJycgKyB0aGlzLnBhcmVudC5jYXB0aW9uICsgJ1wnIlxuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC5zdGRpbi53cml0ZSgnZXhpdFxuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9USUZZLVNFTkQgaGFzIGEgYnVnIHdoZXJlIHRpbWVvdXRzIGRvbid0IHdvcmssIHNvIHRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25GYWtlRGlzbWlzc2VkKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9yZXMoJ0RJU01JU1NFRCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwMCwgdGhpcy5wYXJlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFrZSBhIHRvYXN0IHVzaW5nIHplbml0eSAtLWluZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbCA9IGZpbmRQYXRoKCd6ZW5pdHknKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodXRpbCwgWyd6ZW5pdHknLCAnLS1pbmZvJywgJy0tdGl0bGU9JyArIHRoaXMucGFyZW50LnRpdGxlLCAnLS10ZXh0PScgKyB0aGlzLnBhcmVudC5jYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHRoaXMucGFyZW50LmNvbnNvbGVVaWQsIGVudjogeyBYQVVUSE9SSVRZOiB0aGlzLnBhcmVudC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiB0aGlzLnBhcmVudC54aW5mby5kaXNwbGF5IH0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoaWxkLnBhcmVudCA9IHRoaXMucGFyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fcmVzKCdESVNNSVNTRUQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB1dGlsID0gZmluZFBhdGgoJ2tkaWFsb2cnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwpIAoJCQl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgS0RJQUxPRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7CiAgIAkJCQlpZih4ZGc9PW51bGwpCgkJCQl7CgkJCQkJeGRnID0gJy90bXAvcnVudGltZS0nICsgcmV0VmFsLnVzZXJuYW1lOwoJCQkJfSAgICAgICAgICAgICAgICAgICAKICAgICAgaWYgKCFyZXRWYWwueGluZm8gfHwgIXJldFZhbC54aW5mby5kaXNwbGF5IHx8ICFyZXRWYWwueGluZm8ueGF1dGhvcml0eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignSW50ZXJuYWwgRXJyb3InKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgkJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh1dGlsLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHJldFZhbC50aXRsZSwgJy0tcGFzc2l2ZXBvcHVwJywgcmV0VmFsLmNhcHRpb24sICc1J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5LCBYQVVUSE9SSVRZOiByZXRWYWwueGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnBhcmVudCA9IHJldFZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5Lm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpIHsgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7IH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ1plbml0eS9LRGlhbG9nIG5vdCBmb3VuZCcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2Rhcndpbic6CiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0ID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnkodGl0bGUsIGNhcHRpb24pOwogICAgICAgICAgICAgICAgcmV0VmFsLl90b2FzdC5wYXJlbnQgPSByZXRWYWw7CiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0LnRoZW4oZnVuY3Rpb24gKHYpIHsgdGhpcy5wYXJlbnQuX3Jlcyh2KTsgfSwgZnVuY3Rpb24gKGUpIHsgdGhpcy5wYXJlbnQuX3JlaihlKTsgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHJldHVybiAocmV0VmFsKTsKICAgIH07Cn0KCm1vZHVsZS5leHBvcnRzID0gbmV3IFRvYXN0ZXIoKTsK', 'base64').toString());"); // wget: Refer to modules/wget.js for a human readable version. This is the only module that won't update, if you just past the .js file, because the module loader caches results, and the following does a require('wget') in the property definition duk_peval_string_noresult(ctx, "addModule('wget', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOw0KdmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7DQp2YXIgd3JpdGFibGUgPSByZXF1aXJlKCdzdHJlYW0nKS5Xcml0YWJsZTsNCg0KDQpmdW5jdGlvbiB3Z2V0KHJlbW90ZVVyaSwgbG9jYWxGaWxlUGF0aCwgd2dldG9wdGlvbnMpDQp7DQogICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgdmFyIGFnZW50Q29ubmVjdGVkID0gZmFsc2U7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2J5dGVzJykNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdhYm9ydCcpDQogICAgICAgIC5hZGRNZXRob2QoJ2Fib3J0JywgZnVuY3Rpb24gKCkgeyB0aGlzLl9yZXF1ZXN0LmFib3J0KCk7IH0pOw0KDQogICAgdHJ5DQogICAgew0KICAgICAgICBhZ2VudENvbm5lY3RlZCA9IHJlcXVpcmUoJ01lc2hBZ2VudCcpLmlzQ29udHJvbENoYW5uZWxDb25uZWN0ZWQ7DQogICAgfQ0KICAgIGNhdGNoIChlKQ0KICAgIHsNCiAgICB9DQoNCiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgcHJveHkgc2V0dGluZ3MgaWYgdGhlIGFnZW50IGlzIG5vdCBjb25uZWN0ZWQsIGJlY2F1c2Ugd2hlbiB0aGUgYWdlbnQNCiAgICAvLyBjb25uZWN0cywgaXQgYXV0b21hdGljYWxseSBjb25maWd1cmVzIHRoZSBwcm94eSBmb3IgSmF2YVNjcmlwdC4NCiAgICBpZiAoIWFnZW50Q29ubmVjdGVkKQ0KICAgIHsNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHJlZyA9IHJlcXVpcmUoJ3dpbi1yZWdpc3RyeScpOw0KICAgICAgICAgICAgaWYgKHJlZy5RdWVyeUtleShyZWcuSEtFWS5DdXJyZW50VXNlciwgJ1NvZnR3YXJlXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uXFxJbnRlcm5ldCBTZXR0aW5ncycsICdQcm94eUVuYWJsZScpID09IDEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHByb3h5VXJpID0gcmVnLlF1ZXJ5S2V5KHJlZy5IS0VZLkN1cnJlbnRVc2VyLCAnU29mdHdhcmVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXEludGVybmV0IFNldHRpbmdzJywgJ1Byb3h5U2VydmVyJyk7DQogICAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSByZXF1aXJlKCdodHRwJykucGFyc2VVcmkoJ2h0dHA6Ly8nICsgcHJveHlVcmkpOw0KDQogICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Byb3h5ID0+ICcgKyBwcm94eVVyaSk7DQogICAgICAgICAgICAgICAgcmVxdWlyZSgnZ2xvYmFsLXR1bm5lbCcpLmluaXRpYWxpemUob3B0aW9ucyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB2YXIgcmVxT3B0aW9ucyA9IHJlcXVpcmUoJ2h0dHAnKS5wYXJzZVVyaShyZW1vdGVVcmkpOw0KICAgIGlmICh3Z2V0b3B0aW9ucykNCiAgICB7DQogICAgICAgIGZvciAodmFyIGlucHV0T3B0aW9uIGluIHdnZXRvcHRpb25zKSB7DQogICAgICAgICAgICByZXFPcHRpb25zW2lucHV0T3B0aW9uXSA9IHdnZXRvcHRpb25zW2lucHV0T3B0aW9uXTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXQuX3RvdGFsQnl0ZXMgPSAwOw0KICAgIHJldC5fcmVxdWVzdCA9IGh0dHAuZ2V0KHJlcU9wdGlvbnMpOw0KICAgIHJldC5fbG9jYWxGaWxlUGF0aCA9IGxvY2FsRmlsZVBhdGg7DQogICAgcmV0Ll9yZXF1ZXN0LnByb21pc2UgPSByZXQ7DQogICAgcmV0Ll9yZXF1ZXN0Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7IHRoaXMucHJvbWlzZS5fcmVqKGUpOyB9KTsNCiAgICByZXQuX3JlcXVlc3Qub24oJ2Fib3J0JywgZnVuY3Rpb24gKCkgeyB0aGlzLnByb21pc2UuZW1pdCgnYWJvcnQnKTsgfSk7DQogICAgcmV0Ll9yZXF1ZXN0Lm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChpbXNnKQ0KICAgIHsNCiAgICAgICAgaWYoaW1zZy5zdGF0dXNDb2RlICE9IDIwMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1NlcnZlciByZXNwb25zZWQgd2l0aCBTdGF0dXMgQ29kZTogJyArIGltc2cuc3RhdHVzQ29kZSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9maWxlID0gcmVxdWlyZSgnZnMnKS5jcmVhdGVXcml0ZVN0cmVhbSh0aGlzLnByb21pc2UuX2xvY2FsRmlsZVBhdGgsIHsgZmxhZ3M6ICd3YicgfSk7DQogICAgICAgICAgICAgICAgdGhpcy5fc2hhID0gcmVxdWlyZSgnU0hBMzg0U3RyZWFtJykuY3JlYXRlKCk7DQogICAgICAgICAgICAgICAgdGhpcy5fc2hhLnByb21pc2UgPSB0aGlzLnByb21pc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaChlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKGUpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX3NoYS5vbignaGFzaCcsIGZ1bmN0aW9uIChoKSB7IHRoaXMucHJvbWlzZS5fcmVzKGgudG9TdHJpbmcoJ2hleCcpKTsgfSk7DQogICAgICAgICAgICB0aGlzLl9hY2N1bXVsYXRvciA9IG5ldyB3cml0YWJsZSgNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbihjaHVuaywgY2FsbGJhY2spDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuZW1pdCgnYnl0ZXMnLCB0aGlzLnByb21pc2UuX3RvdGFsQnl0ZXMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgZmluYWw6IGZ1bmN0aW9uKGNhbGxiYWNrKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0aGlzLl9hY2N1bXVsYXRvci5wcm9taXNlID0gdGhpcy5wcm9taXNlOw0KICAgICAgICAgICAgaW1zZy5waXBlKHRoaXMuX2ZpbGUpOw0KICAgICAgICAgICAgaW1zZy5waXBlKHRoaXMuX2FjY3VtdWxhdG9yKTsNCiAgICAgICAgICAgIGltc2cucGlwZSh0aGlzLl9zaGEpOw0KICAgICAgICB9DQogICAgfSk7DQogICAgcmV0LnByb2dyZXNzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX3RvdGFsQnl0ZXMpOyB9Ow0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KbW9kdWxlLmV4cG9ydHMgPSB3Z2V0Ow0KDQoNCv==', 'base64').toString());"); diff --git a/modules/toaster.js b/modules/toaster.js index 446f5d5..b394329 100644 --- a/modules/toaster.js +++ b/modules/toaster.js @@ -16,7 +16,7 @@ limitations under the License. var promise = require('promise'); -if (process.platform == 'linux' || process.platform == 'darwin') +if (process.platform == 'linux' || process.platform == 'darwin' || process.platform == 'freebsd') { function findPath(app) {