diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index a9cc0da..84c9c09 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2193,15 +2193,14 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_messagebox); // toaster, refer to modules/toaster.js - char *_toaster = ILibMemory_Allocate(33832, 0, NULL, NULL); - memcpy_s(_toaster + 0, 19332, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0Kew0KICAgIGZ1bmN0aW9uIGZpbmRQYXRoKGFwcCkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIlxuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYgY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluLycgKyBhcHApKSB7IHJldHVybiAoJy91c3IvbG9jYWwvYmluLycgKyBhcHApOyB9DQogICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyA/IG51bGwgOiBjaGlsZC5zdGRvdXQuc3RyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFRvYXN0ZXIoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ3RvYXN0ZXInOw0KICAgIHRoaXMuVG9hc3QgPSBmdW5jdGlvbiBUb2FzdCh0aXRsZSwgY2FwdGlvbiwgdHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXRWYWwgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXRWYWwudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNpZDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMgPSB7IH07DQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwub3B0aW9ucy51aWQgPSB0c2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogdHNpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwub3B0aW9ucy51aWQgPT0gKGNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmV0VmFsLm9wdGlvbnMudWlkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRzaWQgIT0gbnVsbCAmJiBjaWQgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRvYXN0IGFzIHVpZDogJyArIHRzaWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5vcHRpb25zLnR5cGUgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5VU0VSOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0Nhbm5vdCBkaXNwbGF5IHVzZXIgbm90aWZpY2F0aW9uIHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcV2luZG93c1Bvd2VyU2hlbGxcXHYxLjBcXHBvd2Vyc2hlbGwuZXhlJywgWydwb3dlcnNoZWxsJywgJy1ub3Byb2ZpbGUnLCAnLW5vbG9nbyddLCByZXRWYWwub3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC50b2FzdCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZG91dC5zdGRpbiA9IHJldFZhbC5jaGlsZC5zdGRpbjsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5zdGRpbiA9IHJldFZhbC5jaGlsZC5zdGRpbjsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGlmIChjLnRvU3RyaW5nKCkuaW5jbHVkZXMoJzxESVNNSVNTRUQ+JykpIHsgdGhpcy5zdGRpbi53cml0ZSgnZXhpdFxuJyk7IH0gfSk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnW1N5c3RlbS5SZWZsZWN0aW9uLkFzc2VtYmx5XTo6TG9hZFdpdGhQYXJ0aWFsTmFtZSgiU3lzdGVtLldpbmRvd3MuRm9ybXMiKVxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbiA9IE5ldy1PYmplY3QgU3lzdGVtLldpbmRvd3MuRm9ybXMuTm90aWZ5SWNvblxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5JY29uID0gW1N5c3RlbS5EcmF3aW5nLlN5c3RlbUljb25zXTo6SW5mb3JtYXRpb25cclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnJG9iakJhbGxvb24uVmlzaWJsZSA9ICRUcnVlXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJ1JlZ2lzdGVyLU9iamVjdEV2ZW50IC1JbnB1dE9iamVjdCAkb2JqQmFsbG9vbiAtRXZlbnROYW1lIEJhbGxvb25UaXBDbG9zZWQgLUFjdGlvbiB7ICRvYmpCYWxsb29uLmRpc3Bvc2UoKTtXcml0ZS1Ib3N0ICI8YERJU01JU1NFRGA+IiB9JykNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5TaG93QmFsbG9vblRpcCgxMDAwMCwiJyArIHRpdGxlICsgJyIsICInICsgY2FwdGlvbiArICciLCAwKVxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKCkgeyB0aGlzLnRvYXN0Ll9yZXMoJ0RJU01JU1NFRCcpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCgkgICAgICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICAgICAgY2FzZSAnbGludXgnOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jb25zb2xlVWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC54aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHJldFZhbC5jb25zb2xlVWlkKTsNCgkJCSAgICAgICAgICAgIHJldFZhbC51c2VybmFtZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShyZXRWYWwuY29uc29sZVVpZCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHh4ZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooeHhlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiAhcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UoJ29yZy5mcmVlZGVza3RvcC5Ob3RpZmljYXRpb25zJykpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gRC1CdXMgc2VydmljZSB0byBoYW5kbGUgbm90aWZpY2F0aW9ucywgc28gd2UgbXVzdCBmYWtlIGEgbm90aWZpY2F0aW9uIHdpdGggWkVOSVRZIC0taW5mbw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dCBTdXBwb3J0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIFRpbWVvdXQgU3VwcG9ydCwgc28gd2UgbXVzdCBmYWtlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbl0sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpIHsgYy50aW1lb3V0ID0gbnVsbDsgYy5raWxsKCk7IH0sIDUwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS52ZXJzaW9uWzBdIDwgMyB8fCAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudmVyc2lvblswXSA9PSAzICYmIHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnZlcnNpb25bMV0gPCAxMCkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWkVOSVRZIE5vdGlmaWNhdGlvbiBpcyBicm9rZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnlzZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNpbmcgbm90aWZ5LXNlbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSA9PSAncm9vdCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHJvb3QsIHNvIHdlIG11c3QgcnVuIGluIGNvcnJlY3QgY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnc3UgLSAnICsgcmV0VmFsLnVzZXJuYW1lICsgJyAtYyAiRElTUExBWT1cJycgKyByZXRWYWwueGluZm8uZGlzcGxheSArICdcJyBub3RpZnktc2VuZCBcJycgKyByZXRWYWwudGl0bGUgKyAnXCcgXCcnICsgcmV0VmFsLmNhcHRpb24gKyAnXCciXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGEgcmVndWxhciB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQucGF0aCwgWydub3RpZnktc2VuZCcsIHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWtpbmcgbm90aWZpY2F0aW9uIHdpdGggWkVOSVRZIC0taW5mbw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudGltZW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dCBTdXBwb3J0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbiwgJy0tdGltZW91dD01J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gVGltZW91dCBTdXBwb3J0LCBzbyB3ZSBtdXN0IGZha2UgaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbl0sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChjKSB7IGMudGltZW91dCA9IG51bGw7IGMua2lsbCgpOyB9LCA1MDAwLCByZXRWYWwuY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBaRU5JVFkgTm90aWZpY2F0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0tbm90aWZpY2F0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnBhcmVudCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7ICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwgPSBmaW5kUGF0aCgna2RpYWxvZycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwpIA0KCQkJICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBLRElBTE9HDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0VmFsLnhpbmZvIHx8ICFyZXRWYWwueGluZm8uZGlzcGxheSB8fCAhcmV0VmFsLnhpbmZvLnhhdXRob3JpdHkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignSW50ZXJuYWwgRXJyb3InKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodXRpbCwgWydrZGlhbG9nJywgJy0tdGl0bGUnLCByZXRWYWwudGl0bGUsICctLXBhc3NpdmVwb3B1cCcsIHJldFZhbC5jYXB0aW9uLCAnNSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIFhER19SVU5USU1FX0RJUjogeGRnIH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fbm90aWZ5LnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5fcmVzKCdESVNNSVNTRUQnKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykueG1lc3NhZ2UpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy", 16000); - memcpy_s(_toaster + 16000, 3332, "ZXRWYWwuX21iID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5jcmVhdGUodGl0bGUsIGNhcHRpb24sIDUsICdPSycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iLnJldCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9tYi50aGVuKGZ1bmN0aW9uICgpIHsgdGhpcy5yZXQuX3JlcygnRElTTUlTU0VEJyk7IH0sIGZ1bmN0aW9uICgpIHsgdGhpcy5yZXQuX3JlcygnRElTTUlTU0VEJyk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignWmVuaXR5L0tEaWFsb2cveG1lc3NhZ2Ugbm90IGZvdW5kJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0ID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnkodGl0bGUsIGNhcHRpb24pOw0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QudGhlbihmdW5jdGlvbiAodikgeyB0aGlzLnBhcmVudC5fcmVzKHYpOyB9LCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudC5fcmVqKGUpOyB9KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICB9Ow0KICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICB7DQogICAgICAgIHRoaXMuX2NvbnRhaW5lclRvYXN0ID0gZnVuY3Rpb24gX2NvbnRhaW5lclRvYXN0KGNhcHRpb24sIHRpdGxlKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgdG9hc3Q7DQogICAgICAgICAgICB2YXIgYmFsbG9vbjsNCg0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdG9hc3QgPSByZXF1aXJlKCd3aW4tY29uc29sZScpOw0KICAgICAgICAgICAgICAgIGJhbGxvb24gPSB0b2FzdC5TZXRUcmF5SWNvbih7IHN6SW5mbzogY2FwdGlvbiwgc3pJbmZvVGl0bGU6IHRpdGxlLCBiYWxsb29uT25seTogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICBiYWxsb29uLm9uKCdUb2FzdERpc21pc3NlZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLm1lc3NhZ2UoeyBzdGF0dXM6ICdvaycsIHBpZDogcHJvY2Vzcy5waWR9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoKGVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIHQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChiKSB7IGIucmVtb3ZlKCk7IHByb2Nlc3MuZXhpdCgpOyB9LCA3MDAwLCBiYWxsb29uKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KbW9kdWxlLmV4cG9ydHMgPSBuZXcgVG9hc3RlcigpOw0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiAhcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UpDQp7DQogICAgcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UgPSBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpDQogICAgew0KICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2NhdCAvdXNyL3NoYXJlL2RidXMtMS9zZXJ2aWNlcy8qLnNlcnZpY2UgfCBncmVwICInICsgbmFtZSArICciIHwgYXdrIC1GPSBcJ3sgaWYoICQyPT0iJyArIG5hbWUgKyAnIiApIHsgcHJpbnQgJDI7IH0gfVwnXG5leGl0XG4nKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJyk7DQogICAgfTsNCn0=", 3332); - ILibBase64DecodeEx((unsigned char*)_toaster, 19332, (unsigned char*)_toaster + 19332); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "toaster"); duk_push_string(ctx, _toaster + 19332); + char *_toaster = ILibMemory_Allocate(34917, 0, NULL, NULL); + memcpy_s(_toaster + 0, 19952, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0Kew0KICAgIGZ1bmN0aW9uIGZpbmRQYXRoKGFwcCkNCiAgICB7DQogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIiB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyAiICsgYXBwICsgIlxuZXhpdFxuIik7DQogICAgICAgIH0NCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYgY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluLycgKyBhcHApKSB7IHJldHVybiAoJy91c3IvbG9jYWwvYmluLycgKyBhcHApOyB9DQogICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ciA9PSAnJyA/IG51bGwgOiBjaGlsZC5zdGRvdXQuc3RyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFRvYXN0ZXIoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ3RvYXN0ZXInOw0KICAgIHRoaXMuVG9hc3QgPSBmdW5jdGlvbiBUb2FzdCh0aXRsZSwgY2FwdGlvbiwgdHNpZCkNCiAgICB7DQogICAgICAgIHZhciByZXRWYWwgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXRWYWwudGl0bGUgPSB0aXRsZTsNCiAgICAgICAgcmV0VmFsLmNhcHRpb24gPSBjYXB0aW9uOw0KDQogICAgICAgIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkNCiAgICAgICAgew0KICAgICAgICAgICAgY2FzZSAnd2luMzInOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNpZDsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLm9wdGlvbnMgPSB7IH07DQogICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwub3B0aW9ucy51aWQgPSB0c2lkID09IG51bGwgPyByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpIDogdHNpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRWYWwub3B0aW9ucy51aWQgPT0gKGNpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRQcm9jZXNzT3duZXJOYW1lKHByb2Nlc3MucGlkKS50c2lkKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmV0VmFsLm9wdGlvbnMudWlkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRzaWQgIT0gbnVsbCAmJiBjaWQgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5fcmVqKCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRvYXN0IGFzIHVpZDogJyArIHRzaWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldFZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5vcHRpb25zLnR5cGUgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuU3Bhd25UeXBlcy5VU0VSOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNhdGNoIChlZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooJ0Nhbm5vdCBkaXNwbGF5IHVzZXIgbm90aWZpY2F0aW9uIHdoZW4gYSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmVudlsnd2luZGlyJ10gKyAnXFxTeXN0ZW0zMlxcV2luZG93c1Bvd2VyU2hlbGxcXHYxLjBcXHBvd2Vyc2hlbGwuZXhlJywgWydwb3dlcnNoZWxsJywgJy1ub3Byb2ZpbGUnLCAnLW5vbG9nbycsICctY29tbWFuZCcsICctJ10sIHJldFZhbC5vcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRvYXN0ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0LnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLnN0ZGluID0gcmV0VmFsLmNoaWxkLnN0ZGluOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgaWYgKGMudG9TdHJpbmcoKS5pbmNsdWRlcygnPERJU01JU1NFRD4nKSkgeyB0aGlzLnN0ZGluLndyaXRlKCdleGl0XG4nKTsgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGVyci5vbmNlKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdGRpbi53cml0ZSgnJG9iakJhbGxvb24uZGlzcG9zZSgpO2V4aXRcbicpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCdbU3lzdGVtLlJlZmxlY3Rpb24uQXNzZW1ibHldOjpMb2FkV2l0aFBhcnRpYWxOYW1lKCJTeXN0ZW0uV2luZG93cy5Gb3JtcyIpXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uID0gTmV3LU9iamVjdCBTeXN0ZW0uV2luZG93cy5Gb3Jtcy5Ob3RpZnlJY29uXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLkljb24gPSBbU3lzdGVtLkRyYXdpbmcuU3lzdGVtSWNvbnNdOjpJbmZvcm1hdGlvblxyXG4nKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5WaXNpYmxlID0gJFRydWVcclxuJyk7DQogICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnUmVnaXN0ZXItT2JqZWN0RXZlbnQgLUlucHV0T2JqZWN0ICRvYmpCYWxsb29uIC1FdmVudE5hbWUgQmFsbG9vblRpcENsb3NlZCAtQWN0aW9uIHsgJG9iakJhbGxvb24uZGlzcG9zZSgpO1dyaXRlLUhvc3QgIjxgRElTTUlTU0VEYD4iIH0nKQ0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkaW4ud3JpdGUoJyRvYmpCYWxsb29uLlNob3dCYWxsb29uVGlwKDEwMDAwLCInICsgdGl0bGUgKyAnIiwgIicgKyBjYXB0aW9uICsgJyIsIDApXHJcbicpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGMudGltZW91dCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgICAgICBjLnN0ZGluLndyaXRlKCckb2JqQmFsbG9vbi5kaXNwb3NlKCk7ZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIH0sIDEwMDAwLCByZXRWYWwuY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0ICE9IG51bGwpIHsgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuX3JlcygnRElTTUlTU0VEJyk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCgkgICAgICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICAgICAgY2FzZSAnbGludXgnOg0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jb25zb2xlVWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC54aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHJldFZhbC5jb25zb2xlVWlkKTsNCgkJCSAgICAgICAgICAgIHJldFZhbC51c2VybmFtZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShyZXRWYWwuY29uc29sZVVpZCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHh4ZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9yZWooeHhlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiAhcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UoJ29yZy5mcmVlZGVza3RvcC5Ob3RpZmljYXRpb25zJykpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gRC1CdXMgc2VydmljZSB0byBoYW5kbGUgbm90aWZpY2F0aW9ucywgc28gd2UgbXVzdCBmYWtlIGEgbm90aWZpY2F0aW9uIHdpdGggWkVOSVRZIC0taW5mbw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dCBTdXBwb3J0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0taW5mbycsICctLXRpdGxlPScgKyByZXRWYWwudGl0bGUsICctLXRleHQ9JyArIHJldFZhbC5jYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIFRpbWVvdXQgU3VwcG9ydCwgc28gd2UgbXVzdCBmYWtlIGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbl0sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpIHsgYy50aW1lb3V0ID0gbnVsbDsgYy5raWxsKCk7IH0sIDUwMDAsIHJldFZhbC5jaGlsZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS52ZXJzaW9uWzBdIDwgMyB8fCAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudmVyc2lvblswXSA9PSAzICYmIHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnZlcnNpb25bMV0gPCAxMCkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWkVOSVRZIE5vdGlmaWNhdGlvbiBpcyBicm9rZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnlzZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNpbmcgbm90aWZ5LXNlbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSA9PSAncm9vdCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHJvb3QsIHNvIHdlIG11c3QgcnVuIGluIGNvcnJlY3QgY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRpbi53cml0ZSgnc3UgLSAnICsgcmV0VmFsLnVzZXJuYW1lICsgJyAtYyAiRElTUExBWT1cJycgKyByZXRWYWwueGluZm8uZGlzcGxheSArICdcJyBub3RpZnktc2VuZCBcJycgKyByZXRWYWwudGl0bGUgKyAnXCcgXCcnICsgcmV0VmFsLmNhcHRpb24gKyAnXCciXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGEgcmVndWxhciB1c2VyLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLm5vdGlmeXNlbmQucGF0aCwgWydub3RpZnktc2VuZCcsIHJldFZhbC50aXRsZSwgcmV0VmFsLmNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWtpbmcgbm90aWZpY2F0aW9uIHdpdGggWkVOSVRZIC0taW5mbw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS56ZW5pdHkudGltZW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZW91dCBTdXBwb3J0ZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbiwgJy0tdGltZW91dD01J10sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gVGltZW91dCBTdXBwb3J0LCBzbyB3ZSBtdXN0IGZha2UgaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnplbml0eS5wYXRoLCBbJ3plbml0eScsICctLWluZm8nLCAnLS10aXRsZT0nICsgcmV0VmFsLnRpdGxlLCAnLS10ZXh0PScgKyByZXRWYWwuY2FwdGlvbl0sIHsgdWlkOiByZXRWYWwuY29uc29sZVVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHJldFZhbC54aW5mby54YXV0aG9yaXR5LCBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChjKSB7IGMudGltZW91dCA9IG51bGw7IGMua2lsbCgpOyB9LCA1MDAwLCByZXRWYWwuY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBaRU5JVFkgTm90aWZpY2F0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgJy0tbm90aWZpY2F0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PTUnXSwgeyB1aWQ6IHJldFZhbC5jb25zb2xlVWlkLCBlbnY6IHsgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHJldFZhbC54aW5mby5kaXNwbGF5IH0gfSk7ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmNoaWxkLnBhcmVudCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRlcnIuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7ICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3JlcygnRElTTUlTU0VEJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwgPSBmaW5kUGF0aCgna2RpYWxvZycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwpIA0KCQkJICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBLRElBTE9HDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhkZyA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5maW5kRW52KHJldFZhbC5jb25zb2xlVWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmV0VmFsLnhpbmZvIHx8ICFyZXRWYWwueGluZm8uZGlzcGxheSB8fCAhcmV0VmFsLnhpbmZvLnhhdXRob3JpdHkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignSW50ZXJuYWwgRXJyb3InKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXRWYWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCgkJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodXRpbCwgWydrZGlhbG9nJywgJy0tdGl0bGUnLCByZXRWYWwudGl0bGUsICctLXBhc3NpdmVwb3B1cCcsIHJldFZhbC5jYXB0aW9uLCAnNSddLCB7IHVpZDogcmV0VmFsLmNvbnNvbGVVaWQsIGVudjogeyBESVNQTEFZOiByZXRWYWwueGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogcmV0VmFsLnhpbmZvLnhhdXRob3JpdHksIFhER19SVU5USU1FX0RJUjogeGRnIH0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg", 16000); + memcpy_s(_toaster + 16000, 3952, "IHJldFZhbC5fbm90aWZ5LnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX25vdGlmeS5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9ub3RpZnkub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5fcmVzKCdESVNNSVNTRUQnKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykueG1lc3NhZ2UpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5jcmVhdGUodGl0bGUsIGNhcHRpb24sIDUsICdPSycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX21iLnJldCA9IHJldFZhbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0VmFsLl9tYi50aGVuKGZ1bmN0aW9uICgpIHsgdGhpcy5yZXQuX3JlcygnRElTTUlTU0VEJyk7IH0sIGZ1bmN0aW9uICgpIHsgdGhpcy5yZXQuX3JlcygnRElTTUlTU0VEJyk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwuX3JlaignWmVuaXR5L0tEaWFsb2cveG1lc3NhZ2Ugbm90IGZvdW5kJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgICAgICAgICByZXRWYWwuX3RvYXN0ID0gcmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5ub3RpZnkodGl0bGUsIGNhcHRpb24pOw0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QucGFyZW50ID0gcmV0VmFsOw0KICAgICAgICAgICAgICAgIHJldFZhbC5fdG9hc3QudGhlbihmdW5jdGlvbiAodikgeyB0aGlzLnBhcmVudC5fcmVzKHYpOyB9LCBmdW5jdGlvbiAoZSkgeyB0aGlzLnBhcmVudC5fcmVqKGUpOyB9KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAocmV0VmFsKTsNCiAgICB9Ow0KICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykNCiAgICB7DQogICAgICAgIHRoaXMuX2NvbnRhaW5lclRvYXN0ID0gZnVuY3Rpb24gX2NvbnRhaW5lclRvYXN0KGNhcHRpb24sIHRpdGxlKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgdG9hc3Q7DQogICAgICAgICAgICB2YXIgYmFsbG9vbjsNCg0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdG9hc3QgPSByZXF1aXJlKCd3aW4tY29uc29sZScpOw0KICAgICAgICAgICAgICAgIGJhbGxvb24gPSB0b2FzdC5TZXRUcmF5SWNvbih7IHN6SW5mbzogY2FwdGlvbiwgc3pJbmZvVGl0bGU6IHRpdGxlLCBiYWxsb29uT25seTogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICBiYWxsb29uLm9uKCdUb2FzdERpc21pc3NlZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2goZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2NoaWxkLWNvbnRhaW5lcicpLm1lc3NhZ2UoeyBzdGF0dXM6ICdvaycsIHBpZDogcHJvY2Vzcy5waWR9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoKGVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIHQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChiKSB7IGIucmVtb3ZlKCk7IHByb2Nlc3MuZXhpdCgpOyB9LCA3MDAwLCBiYWxsb29uKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KbW9kdWxlLmV4cG9ydHMgPSBuZXcgVG9hc3RlcigpOw0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiAhcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UpDQp7DQogICAgcmVxdWlyZSgnbGludXgtZGJ1cycpLmhhc1NlcnZpY2UgPSBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpDQogICAgew0KICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2NhdCAvdXNyL3NoYXJlL2RidXMtMS9zZXJ2aWNlcy8qLnNlcnZpY2UgfCBncmVwICInICsgbmFtZSArICciIHwgYXdrIC1GPSBcJ3sgaWYoICQyPT0iJyArIG5hbWUgKyAnIiApIHsgcHJpbnQgJDI7IH0gfVwnXG5leGl0XG4nKTsNCiAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAnJyk7DQogICAgfTsNCn0=", 3952); + ILibBase64DecodeEx((unsigned char*)_toaster, 19952, (unsigned char*)_toaster + 19952); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "toaster"); duk_push_string(ctx, _toaster + 19952); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_toaster); - // notifybar-desktop, refer to modules/notifybar-desktop.js char *_notifybardesktop = ILibMemory_Allocate(37242, 0, NULL, NULL); memcpy_s(_notifybardesktop + 0, 21280, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHRyc2l6ZSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplOw0KdmFyIENsaWVudE1lc3NhZ2UgPSAzMzsNCg0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9jaGVjayh0aXRsZSwgdHNpZCkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW0odGl0bGUsIHRzaWQpKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHdpbmRvd3Nfbm90aWZ5YmFyX3N5c3RlbSh0aXRsZSwgdHNpZCkNCnsNCiAgICB2YXIgcmV0ID0ge307DQoNCiAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuX2V4aXQoKTt9KTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQoNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLmNoaWxkLmtpbGwoKTsgfSk7DQoNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJ1xcJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIHsgdHlwZTogMSwgdWlkOiB0c2lkIH0pOw0KICAgIHJldC5jaGlsZC5wYXJlbnQgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gd2luZG93c19ub3RpZnliYXJfbG9jYWwodGl0bGUpDQp7DQogICAgdmFyIE1lc3NhZ2VQdW1wOw0KICAgIHZhciByZXQ7DQoNCiAgICBNZXNzYWdlUHVtcCA9IHJlcXVpcmUoJ3dpbi1tZXNzYWdlLXB1bXAnKTsNCiAgICByZXQgPSB7IF9PYmplY3RJRDogJ25vdGlmeWJhci1kZXNrdG9wLldpbmRvd3MnLCB0aXRsZTogdGl0bGUsIF9wdW1wczogW10sIF9wcm9taXNlOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRJbmZvKCkgfTsNCg0KICAgIHJldC5fcHJvbWlzZS5ub3RpZnliYXIgPSByZXQ7DQogICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHVtcHMubGVuZ3RoOyArK2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fcHVtcHNbaV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7DQogICAgICAgICAgICAgICAgdGhpcy5fcHVtcHNbaV0uY2xvc2UoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX3B1bXBzID0gW107DQogICAgICAgIH0pOw0KDQogICAgcmV0Ll9wcm9taXNlLnRoZW4oZnVuY3Rpb24gKG0pDQogICAgew0KICAgICAgICB2YXIgb2Zmc2V0Ow0KICAgICAgICB2YXIgYmFyV2lkdGgsIG1vbldpZHRoLCBvZmZzZXQsIGJhckhlaWdodCwgbW9uSGVpZ2h0Ow0KDQogICAgICAgIGZvciAodmFyIGkgaW4gbSkNCiAgICAgICAgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnTW9uaXRvcjogJyArIGkgKyAnID0gV2lkdGhbJyArIChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KSArICddJyk7DQogICAgICAgICAgICBtb25XaWR0aCA9IChtW2ldLnJpZ2h0IC0gbVtpXS5sZWZ0KTsNCiAgICAgICAgICAgIG1vbkhlaWdodCA9IChtW2ldLmJvdHRvbSAtIG1baV0udG9wKTsNCiAgICAgICAgICAgIGJhcldpZHRoID0gTWF0aC5mbG9vcihtb25XaWR0aCAqIDAuMzApOw0KICAgICAgICAgICAgYmFySGVpZ2h0ID0gTWF0aC5mbG9vcihtb25IZWlnaHQgKiAwLjAzNSk7DQogICAgICAgICAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC41MCkgLSBNYXRoLmZsb29yKGJhcldpZHRoICogMC41MCk7DQogICAgICAgICAgICBzdGFydCA9IG1baV0ubGVmdCArIG9mZnNldDsNCiAgICAgICAgICAgIHZhciBvcHRpb25zID0NCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHdpbmRvdzoNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgd2luc3R5bGVzOiBNZXNzYWdlUHVtcC5XaW5kb3dTdHlsZXMuV1NfVklTSUJMRSB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19CT1JERVIgfCBNZXNzYWdlUHVtcC5XaW5kb3dTdHlsZXMuV1NfQ0FQVElPTiB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19TWVNNRU5VLA0KICAgICAgICAgICAgICAgICAgICAgICAgeDogc3RhcnQsIHk6IG1baV0udG9wLCBsZWZ0OiBtW2ldLmxlZnQsIHJpZ2h0OiBtW2ldLnJpZ2h0LCB3aWR0aDogYmFyV2lkdGgsIGhlaWdodDogYmFySGVpZ2h0LCB0aXRsZTogdGhpcy5ub3RpZnliYXIudGl0bGUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICANCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wdXNoKG5ldyBNZXNzYWdlUHVtcChvcHRpb25zKSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm5vdGlmeWJhciA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnBlZWsoKS5vbignaHduZCcsIGZ1bmN0aW9uIChoKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX0hBTkRMRSA9IGg7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkub24oJ2V4aXQnLCBmdW5jdGlvbiAoaCkNCiAgICAgICAgICAgIHsgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vdGlmeWJhci5fcHVtcHMubGVuZ3RoOyArK2kpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHNbaV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wc1tpXS5jbG9zZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5lbWl0KCdjbG9zZScpOw0KICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcyA9IFtdOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm9uKCdtZXNzYWdlJywgZnVuY3Rpb24gb25XaW5kb3dzTWVzc2FnZShtc2cpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKG1zZy5tZXNzYWdlID09IDEzMykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coIldNX05DUEFJTlQiKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG1zZy5tZXNzYWdlID09IDcwKSAgIC8vIFdlIGFyZSBpbnRlcmNlcHRpbmcgV01fV0lORE9XUE9TQ0hBTkdJTkcgdG8gRElTQUJMRSBtb3ZpbmcgdGhlIHdpbmRvdw0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX0hBTkRMRSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHRyc2l6ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjQsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfCAweDAwMDI7IC8vIFNldCBTV1BfTk9NT1ZFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cubHBhcmFtX3Jhdy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgPCB0aGlzLl9vcHRpb25zLndpbmRvdy5sZWZ0IHx8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobXNnLmxwYXJhbV9yYXcuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpICsgdGhpcy5fb3B0aW9ucy53aW5kb3cud2lkdGgpID49IHRoaXMuX29wdGlvbnMud2luZG93LnJpZ2h0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyB0aGlzIG1vdmUsIGJlY2F1c2UgaXQgd2lsbCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBjdXJyZW50IG1vbml0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdGhlIG1vdmUsIGJ1dCBvbmx5IG9uIHRoZSBYLWF4aXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDEyLCA0KS50b0J1ZmZlcigpLndyaXRlSW50MzJMRSh0aGlzLl9vcHRpb25zLndpbmRvdy55KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gbXNnLmxwYXJhbV9yYXcuRGVyZWYoMzIsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgfCAweDAwMDIgIC8vIFNldCBTV1BfTk9NT1ZFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cubHBhcmFtX3Jhdy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpIDwgdGhpcy5fb3B0aW9ucy53aW5kb3cubGVmdCB8fCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc2cubHBhcmFtX3Jhdy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS5yZWFkSW50MzJMRSgpICsgdGhpcy5fb3B0aW9ucy53aW5kb3cud2lkdGgpID49IHRoaXMuX29wdGlvbnMud2luZG93LnJpZ2h0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyB0aGlzIG1vdmUsIGJlY2F1c2UgaXQgd2lsbCBnbyBvdXQgb2YgYm91bmRzIG9mIHRoZSBjdXJyZW50IG1vbml0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDMyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdGhlIG1vdmUsIGJ1dCBvbmx5IG9uIHRoZSBYLWF4aXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5scGFyYW1fcmF3LkRlcmVmKDIwLCA0KS50b0J1ZmZlcigpLndyaXRlSW50MzJMRSh0aGlzLl9vcHRpb25zLndpbmRvdy55KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCg0KZnVuY3Rpb24geF9ub3RpZnliYXJfY2hlY2sodGl0bGUpDQp7DQogICAgdmFyIHNjcmlwdCA9IEJ1ZmZlci5mcm9tKCJyZXF1aXJlKCdub3RpZnliYXItZGVza3RvcCcpKCciICsgdGl0bGUgKyAiJykub24oJ2Nsb3NlJywgZnVuY3Rpb24oKXtwcm9jZXNzLmV4aXQoKTt9KTsiKS50b1N0cmluZygnYmFzZTY0Jyk7DQoNCiAgICB2YXIgbWluID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLm1pblVpZCgpOw0KICAgIHZhciB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIHZhciBzZWxmID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLlNlbGYoKTsNCg0KICAgIGlmIChzZWxmICE9IDAgfHwgdWlkID09IDApDQogICAgew0KICAgICAgICByZXR1cm4gKHhfbm90aWZ5YmFyKHRpdGxlKSk7IC8vIE5vIERpc3BhdGNoaW5nIG5lY2Vzc2FyeQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAvLyBXZSBhcmUgcm9vdCwgc28gd2Ugc2hvdWxkIHRyeSB0byBzcGF3biBhIGNoaWxkIGludG8gdGhlIHVzZXIncyBkZXNrdG9wDQogICAgICAgIGlmICh1aWQgPCBtaW4gJiYgdWlkICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIExldHMgaG9vayBsb2dpbiBldmVudCwgc28gd2UgY2FuIHJlc3Bhd24gdGhlIGJhcnMgbGF0ZXINCiAgICAgICAgICAgIHZhciByZXQgPSB7IG1pbjogbWluIH07DQogICAgICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgICAgICAgICAgLmFkZE1ldGhvZCgnY2xvc2UnLCBmdW5jdGlvbiBjbG9zZSgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykucmVtb3ZlTGlzdGVuZXIoJ2NoYW5nZWQnLCB0aGlzLl9jaGFuZ2VkKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2UyKCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXQuX2NoYW5nZWQgPSBmdW5jdGlvbiBfY2hhbmdlZCgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSBfY2hhbmdlZC5zZWxmOw0KICAgICAgICAgICAgICAgIHZhciB1aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICAgICAgICAgIGlmICh1aWQgPj0gdGhhdC5taW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGF0Ll9jbG9zZTIgPSBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkLmtpbGwoKTsNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnLycpLnBvcCgpLCAnLWI2NGV4ZWMnLCBzY3JpcHRdLCB7IHVpZDogdWlkLCBlbnY6IHhpbmZvLmV4cG9ydEVudigpIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGF0LmNoaWxkLnBhcmVudCA9IHRoYXQ7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgcmV0Ll9jaGFuZ2VkLnNlbGYgPSByZXQ7DQogICAgICAgICAgICByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykub24oJ2NoYW5nZWQnLCByZXQuX2NoYW5nZWQpOw0KICAgICAgICAgICAgcmV0Ll9jbG9zZTIgPSBmdW5jdGlvbiBfY2xvc2UyKCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgaWYgKCF4aW5mbykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhyb3coJ1hTZXJ2ZXIgSW5pdGlhbGl6YXRpb24gRXJyb3InKQ0KICAgICAgICB9DQogICAgICAgIHZhciByZXQgPSB7fTsNCiAgICAgICAgcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyLmNhbGwocmV0LCB0cnVlKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLmNoaWxkLmtpbGwoKTsgfSk7DQoNCiAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctYjY0ZXhlYycsIHNjcmlwdF0sIHsgdWlkOiB1aWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgICAgIHJldC5jaGlsZC5wYXJlbnQgPSByZXQ7DQogICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyB0aGlzLnBhcmVudC5lbWl0KCdjbG9zZScsIGNvZGUpOyB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiB4X25vdGlmeWJhcih0aXRsZSkNCnsNCiAgICByZXQgPSB7IF9PYmplY3RJRDogJ25vdGlmeWJhci1kZXNrdG9wLlgnLCB0aXRsZTogdGl0bGUsIF93aW5kb3dzOiBbXSwgX3Byb21pc2U6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKSwgbW9uaXRvcnM6IFtdLCB3b3Jrc3BhY2VzOiB7fSB9Ow0KDQogICAgcmV0Ll9wcm9taXNlLm5vdGlmeWJhciA9IHJldDsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICB9KTsNCg0KICAgIHJldC5fcHJvbWlzZS5jcmVhdGVCYXJzID0gZnVuY3Rpb24gKG0pDQogICAgew0KICAgICAgICBmb3IgKHZhciBpIGluIG0pDQogICAgICAgIHsNCiAgICAgICAgICAgIG1vbldpZHRoID0gKG1baV0ucmlnaHQgLSBtW2ldLmxlZnQpOw0KICAgICAgICAgICAgbW9uSGVpZ2h0ID0gKG1baV0uYm90dG9tIC0gbVtpXS50b3ApOw0KICAgICAgICAgICAgYmFyV2lkdGggPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC4zMCk7DQogICAgICAgICAgICBiYXJIZWlnaHQgPSBNYXRoLmZsb29yKG1vbkhlaWdodCAqIDAuMDM1KTsNCiAgICAgICAgICAgIG9mZnNldCA9IE1hdGguZmxvb3IobW9uV2lkdGggKiAwLjUwKSAtIE1hdGguZmxvb3IoYmFyV2lkdGggKiAwLjUwKTsNCiAgICAgICAgICAgIHN0YXJ0ID0gbVtpXS5sZWZ0ICsgb2Zmc2V0Ow0KDQogICAgICAgICAgICB2YXIgd2hpdGUgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhXaGl0ZVBpeGVsKG1baV0uZGlzcGxheSwgbVtpXS5zY3JlZW5JZCkuVmFsOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucHVzaCh7DQogICAgICAgICAgICAgICAgcm9vdDogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YUm9vdFdpbmRvdyhtW2ldLmRpc3BsYXksIG1baV0uc2NyZWVuSWQpLA0KICAgICAgICAgICAgICAgIGRpc3BsYXk6IG1baV0uZGlzcGxheSwgaWQ6IG1baV0uc2NyZWVkSWQNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YQ3JlYXRlU2ltcGxlV2luZG93KG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLnJvb3QsIHN0YXJ0LCAwLCBiYXJXaWR0aCwgMSwgMCwgd2hpdGUsIHdoaXRlKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFN0b3JlTmFtZShtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZVZhcmlhYmxlKHRoaXMubm90aWZ5YmFyLnRpdGxlKSk7DQoNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLnNldFdpbmRvd1NpemVIaW50cyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIHN0YXJ0LCAwLCBiYXJXaWR0aCwgMSwgYmFyV2lkdGgsIDEsIGJhcldpZHRoLCAxKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmhpZGVXaW5kb3dJY29uKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLnJvb3QsIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIpOw0KDQogICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5zZXRBbGxvd2VkQWN0aW9ucyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIsIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLk1PVElGX0ZMQUdTLk1XTV9GVU5DX0NMT1NFKTsNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLnNldEFsd2F5c09uVG9wKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3Mu", 16000); diff --git a/modules/toaster.js b/modules/toaster.js index 836d037..52d5b0e 100644 --- a/modules/toaster.js +++ b/modules/toaster.js @@ -76,19 +76,29 @@ function Toaster() return (retVal); } - retVal.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo'], retVal.options); + retVal.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], retVal.options); retVal.child.toast = retVal; retVal.child.stdout.stdin = retVal.child.stdin; retVal.child.stderr.stdin = retVal.child.stdin; retVal.child.stdout.on('data', function (c) { if (c.toString().includes('')) { this.stdin.write('exit\n'); } }); - retVal.child.stderr.on('data', function (c) { this.stdin.write('exit\n'); }); + retVal.child.stderr.once('data', function (c) { this.stdin.write('$objBalloon.dispose();exit\n'); }); retVal.child.stdin.write('[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")\r\n'); retVal.child.stdin.write('$objBalloon = New-Object System.Windows.Forms.NotifyIcon\r\n'); retVal.child.stdin.write('$objBalloon.Icon = [System.Drawing.SystemIcons]::Information\r\n'); retVal.child.stdin.write('$objBalloon.Visible = $True\r\n'); retVal.child.stdin.write('Register-ObjectEvent -InputObject $objBalloon -EventName BalloonTipClosed -Action { $objBalloon.dispose();Write-Host "<`DISMISSED`>" }') retVal.child.stdin.write('$objBalloon.ShowBalloonTip(10000,"' + title + '", "' + caption + '", 0)\r\n'); - retVal.child.on('exit', function () { this.toast._res('DISMISSED'); }); + retVal.child.timeout = setTimeout(function (c) + { + c.timeout = null; + c.stdin.write('$objBalloon.dispose();exit\n'); + }, 10000, retVal.child); + retVal.child.on('exit', function () + { + if (this.timeout != null) { clearTimeout(this.timeout); } + this.toast._res('DISMISSED'); + }); + return (retVal); } break;