diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index db1edd9..49f5448 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -1998,11 +1998,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_taskscheduler); // message-box, refer to modules/message-box.js - char *_messagebox = ILibMemory_Allocate(48315, 0, NULL, NULL); - memcpy_s(_messagebox + 0, 27608, "LyoKQ29weXJpZ2h0IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCgpjb25zdCBNQl9PSyA9IDB4MDAwMDAwMDA7CmNvbnN0IE1CX09LQ0FOQ0VMICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwMTsKY29uc3QgTUJfQUJPUlRSRVRSWUlHTk9SRSAgICAgICAgPSAweDAwMDAwMDAyOwpjb25zdCBNQl9ZRVNOT0NBTkNFTCAgICAgICAgICAgICA9IDB4MDAwMDAwMDM7CmNvbnN0IE1CX1lFU05PICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNDsKY29uc3QgTUJfUkVUUllDQU5DRUwgICAgICAgICAgICAgPSAweDAwMDAwMDA1OwoKY29uc3QgTUJfREVGQlVUVE9OMSAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOwpjb25zdCBNQl9ERUZCVVRUT04yICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7CmNvbnN0IE1CX0RFRkJVVFRPTjMgICAgICAgICAgICAgID0gMHgwMDAwMDIwMDsKY29uc3QgTUJfSUNPTkhBTkQgICAgICAgICAgICAgICAgPSAweDAwMDAwMDEwOwpjb25zdCBNQl9JQ09OUVVFU1RJT04gICAgICAgICAgICA9IDB4MDAwMDAwMjA7CmNvbnN0IE1CX0lDT05FWENMQU1BVElPTiAgICAgICAgID0gMHgwMDAwMDAzMDsKY29uc3QgTUJfSUNPTkFTVEVSSVNLICAgICAgICAgICAgPSAweDAwMDAwMDQwOwoKY29uc3QgSURPSyAgICAgPSAxOwpjb25zdCBJRENBTkNFTCA9IDI7CmNvbnN0IElEQUJPUlQgID0gMzsKY29uc3QgSURSRVRSWSAgPSA0Owpjb25zdCBJRElHTk9SRSA9IDU7CmNvbnN0IElEWUVTICAgID0gNjsKY29uc3QgSUROTyAgICAgPSA3OwoKdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7CnZhciBjaGlsZFNjcmlwdCA9ICJcCiAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykub24oJ2RhdGEnLCBmdW5jdGlvbiAoailcCiAgICAgICAge1wKICAgICAgICAgICAgc3dpdGNoKGouY29tbWFuZClcCiAgICAgICAgICAgIHtcCiAgICAgICAgICAgICAgICBjYXNlICdtZXNzYWdlQm94JzpcCiAgICAgICAgICAgICAgICAgICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKVwKICAgICAgICAgICAgICAgICAgICB7XAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTtcCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpO1wKICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnTWVzc2FnZUJveEEnKTtcCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIzMi5NZXNzYWdlQm94QS5hc3luYygwLCBHTS5DcmVhdGVWYXJpYWJsZShqLmNhcHRpb24pLCBHTS5DcmVhdGVWYXJpYWJsZShqLnRpdGxlKSwgIiArIChNQl9ZRVNOTyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04pLnRvU3RyaW5nKCkgKyAiKS50aGVuKFwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocilcCiAgICAgICAgICAgICAgICAgICAgICAgIHtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyLlZhbCA9PSAiICsgSURZRVMudG9TdHJpbmcoKSArICIpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAge1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKCIgKyBJRFlFUy50b1N0cmluZygpICsgIik7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpLnNlbmQoIiArIElETk8udG9TdHJpbmcoKSArICIpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTtcCiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1wKICAgICAgICAgICAgICAgICAgICB9XAogICAgICAgICAgICAgICAgICAgIGJyZWFrO1wKICAgICAgICAgICAgfVwKICAgICAgICB9KTtcCiAgICAiOwoKZnVuY3Rpb24gbWVzc2FnZUJveCgpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsKICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0KQogICAgewogICAgICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwogICAgICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsKICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1Byb2Nlc3NJZFRvU2Vzc2lvbklkJyk7CiAgICAgICAgdmFyIHBzaWQgPSBHTS5DcmVhdGVWYXJpYWJsZSg0KTsKICAgICAgICBpZiAoa2VybmVsMzIuUHJvY2Vzc0lkVG9TZXNzaW9uSWQocHJvY2Vzcy5waWQsIHBzaWQpLlZhbCA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0Ll9yZWooJ0ludGVybmFsIEVycm9yJyk7CiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9CgogICAgICAgIGlmICh0aW1lb3V0ID09IG51bGwpIHsgdGltZW91dCA9IDEwOyB9CiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGV4ZWN1dGlvblRpbWVvdXQ6IHRpbWVvdXQgfTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBvcHRpb25zLnNlc3Npb25JZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7CiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb25JZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpIHsgZGVsZXRlIG9wdGlvbnMuc2Vzc2lvbklkOyB9CiAgICAgICAgfQogICAgICAgIGNhdGNoKGVlKQogICAgICAgIHsKICAgICAgICAgICAgcmV0Ll9yZWooJ05vIGxvZ2dlZCBvbiB1c2VycycpOwogICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgfQogICAgICAgIHJldC5fdGl0bGUgPSB0aXRsZTsKICAgICAgICByZXQuX2NhcHRpb24gPSBjYXB0aW9uOwogICAgICAgIHJldC5fY29udGFpbmVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKG9wdGlvbnMpOwogICAgICAgIHJldC5fY29udGFpbmVyLnByb21pc2UgPSByZXQ7CiAgICAgICAgcmV0Ll9jb250YWluZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaikKICAgICAgICB7CiAgICAgICAgICAgIGlmKGogPT0gSURZRVMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignRGVuaWVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXQuX2NvbnRhaW5lci5vbignZXhpdCcsIGZ1bmN0aW9uICgpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVGltZW91dCcpOwogICAgICAgIH0pOwogICAgICAgIHJldC5fY29udGFpbmVyLkV4ZWN1dGVTdHJpbmcoY2hpbGRTY3JpcHQpOwogICAgICAgIHJldC5fY29udGFpbmVyLnNlbmQoeyBjb21tYW5kOiAnbWVzc2FnZUJveCcsIGNhcHRpb246IGNhcHRpb24sIHRpdGxlOiB0aXRsZSB9KTsKICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9Owp9CgoKZnVuY3Rpb24gbGludXhfbWVzc2FnZUJveCgpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsKICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0KQogICAgewogICAgICAgIGlmICh0aW1lb3V0ID09IG51bGwpIHsgdGltZW91dCA9IDEwOyB9CiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgdmFyIHplbml0eSA9ICcnLCBrZGlhbG9nID0gJyc7CiAgICAgICAgdmFyIHVpZDsgICAgCiAgICAgICAgdmFyIHhpbmZvOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7CiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goZSkKICAgICAgICB7CiAgICAgICAgICAgIHVpZCA9IDA7CiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oMCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoeGluZm8gPT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldC5fcmVqKCdUaGlzIHN5c3RlbSBjYW5ub3QgZGlzcGxheSBhIHVzZXIgZGlhbG9nIGJveCB3aGVuIGEgdXNlciBpcyBub3QgbG9nZ2VkIGluJyk7CiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9CgogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOwogICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgemVuaXR5ID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7CiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnICYmIHplbml0eSA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluL3plbml0eScpKSB7IHplbml0eSA9ICcvdXNyL2xvY2FsL2Jpbi96ZW5pdHknOyB9CiAgICAgICAgaWYgKHplbml0eSAhPSAnJykKICAgICAgICB7CiAgICAgICAgICAgIC8vIEdOT01FL1pFTklUWQogICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoemVuaXR5LCBbJ3plbml0eScsICctLXF1ZXN0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PScgKyB0aW1lb3V0XSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsKICAgICAgICAgICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAga2RpYWxvZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYga2RpYWxvZyA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluL2tkaWFsb2cnKSkgeyBrZGlhbG9nID0gJy91c3IvbG9jYWwvYmluL2tkaWFsb2cnOyB9CiAgICAgICAgICAgIGlmIChrZGlhbG9nID09ICcnKSB7IHJldC5fcmVqKCdQbGF0Zm9ybSBub3Qgc3VwcG9ydGVkICh6ZW5pdHkgb3Iga2RpYWxvZyBub3QgZm91bmQpJyk7IHJldHVybiAocmV0KTsgfQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnZnJlZWJzZCcgJiYgcHJvY2Vzcy5lbnZbJ0RJU1BMQVknXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKGtkaWFsb2csIFsna2RpYWxvZycsICctLXRpdGxlJywgdGl0bGUsICctLXllc25vJywgY2FwdGlvbl0pOwogICAgICAgICAgICAgICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQogICAgICAgICAgICAgICAgaWYgKCF4aW5mbyB8fCAheGluZm8uZGlzcGxheSB8fCAheGluZm8ueGF1dGhvcml0eSkgeyByZXQuX3JlaignSW50ZXJhbCBFcnJvciwgY291bGQgbm90IGRldGVybWluZSBYMTEvWERHIGVudicpOyByZXR1cm4gKHJldCk7IH0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShrZGlhbG9nLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCAnLS15ZXNubycsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsKICAgICAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAocmV0KTsKICAgIH07Cn0KCmlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQp7CiAgICBmdW5jdGlvbiB0cmFuc2xhdGVPYmplY3Qob2JqKQogICAgewogICAgICAgIHZhciBqID0gSlNPTi5zdHJpbmdpZnkob2JqKTsKICAgICAgICB2YXIgYiA9IEJ1ZmZlci5hbGxvYyhqLmxlbmd0aCArIDQpOwogICAgICAgIGIud3JpdGVVSW50MzJMRShqLmxlbmd0aCArIDQpOwogICAgICAgIEJ1ZmZlci5mcm9tKGopLmNvcHkoYiwgNCk7CiAgICAgICAgcmV0dXJuIChiKTsKICAgIH0KfQoKZnVuY3Rpb24gbWFjb3NfbWVzc2FnZUJveCgpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsKICAgIHRoaXMuX2luaXRJUENCYXNlID0gZnVuY3Rpb24gX2luaXRJUENCYXNlKCkKICAgIHsKICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICByZXQudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpCiAgICAgICAgewogICAgICAgICAgICByZXQuX3JlaihlKTsKICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KCiAgICAgICAgcmV0LnBhdGggPSAnL3Zhci90bXAvJyArIHByb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSArICdfZXYnOwogICAgICAgIHZhciBuOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpCiAgICAgICAgewogICAgICAgICAgICBuID0gMDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhyZXQucGF0aCArIG4pKQogICAgICAgIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgKytuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldC5wYXRoID0gcmV0LnBhdGggKyBuOwogICAgICAgIHJldC50bXBTZXJ2aWNlTmFtZSA9ICdtZXNoTm90aWZpY2F0aW9uU2VydmVyJyArIG47CiAgICAgICAgcmV0dXJuIChyZXQpOwogICAgfTsKICAgIAogICAgdGhpcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUodGl0bGUsIGNhcHRpb24sIHRpbWVvdXQpCiAgICB7CiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7CiAgICAgICAgcmV0LnRpdGxlID0gdGl0bGU7IHJldC5jYXB0aW9uID0gY2FwdGlvbjsgcmV0LnRpbWVvdXQgPSB0aW1lb3V0OwogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOwogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0OwogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOwogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsKICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC50aW1lb3V0KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVElNRU9VVCcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnV0dG9uID09ICdZZXMnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKHAuYnV0dG9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24sIGljb246ICdjYXV0aW9uJywgYnV0dG9uczogWyciWWVzIicsICciTm8iJ10sIGJ1dHRvbkRlZmF1bHQ6IDIsIHRpbWVvdXQ6IHRoaXMucmV0LnRpbWVvdXQgfSkpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9OwogICAgdGhpcy5sb2NrID0gZnVuY3Rpb24gbG9jaygpCiAgICB7CiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7CiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7CiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7CiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsKICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7CiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlm", 16000); - memcpy_s(_messagebox + 16000, 11608, "IChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycgfSkpOw0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07CiAgICB0aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgY2FwdGlvbikKICAgIHsKICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXIKICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsKICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyAKICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsKICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsKICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsKICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7CiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgdGl0bGU6IHRoaXMucmV0LnRpdGxlLCBjYXB0aW9uOiB0aGlzLnJldC5jYXB0aW9uIH0pKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIChyZXQpOwogICAgfTsKICAgIHRoaXMuc3RhcnRDbGllbnQgPSBmdW5jdGlvbiBzdGFydENsaWVudChvcHRpb25zKQogICAgewogICAgICAgIC8vIENyZWF0ZSB0aGUgQ2xpZW50CiAgICAgICAgY29uc29sZS5sb2coJ1N0YXJ0aW5nIENsaWVudC4uLicpOwoKICAgICAgICBvcHRpb25zLm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOwogICAgICAgIG9wdGlvbnMudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsKICAgICAgICB0aGlzLmNsaWVudCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZUNvbm5lY3Rpb24ob3B0aW9ucyk7CiAgICAgICAgdGhpcy5jbGllbnQuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQogICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAnTE9DSyc6CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL01lbnVcXCBFeHRyYXMvVXNlci5tZW51L0NvbnRlbnRzL1Jlc291cmNlcy9DR1Nlc3Npb24gLXN1c3BlbmRcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IG5vdGlmaWNhdGlvbiAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyJcJ1xuZXhpdFxuJyk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCBzdGF0dXM6IDAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0RJQUxPRyc6CiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBwLnRpbWVvdXQgPyAoJyBnaXZpbmcgdXAgYWZ0ZXIgJyArIHAudGltZW91dCkgOiAnJzsKICAgICAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IHAuaWNvbiA/ICgnd2l0aCBpY29uICcgKyBwLmljb24pIDogJyc7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbnMgPSBwLmJ1dHRvbnMgPyAoJ2J1dHRvbnMgeycgKyBwLmJ1dHRvbnMudG9TdHJpbmcoKSArICd9JykgOiAnJzsKICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b25EZWZhdWx0ICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zICs9ICgnIGRlZmF1bHQgYnV0dG9uICcgKyBwLmJ1dHRvbkRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgZGlhbG9nICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIiAnICsgaWNvbiArICcgJyArIGJ1dHRvbnMgKyB0aW1lb3V0ICsgJ1wnIHwgYXdrIFwneyBjPXNwbGl0KCQwLCB0b2tlbnMsICIsIik7IHNwbGl0KHRva2Vuc1sxXSwgdmFsLCAiOiIpOyBpZihjPT0xKSB7IHByaW50IHZhbFsyXSB9IGVsc2UgeyBzcGxpdCh0b2tlbnNbMl0sIGd1LCAiOiIpOyBpZihndVsyXT09InRydWUiKSB7IHByaW50ICJfVElNRU9VVF8iIH0gZWxzZSB7IHByaW50IHZhbFsyXSAgfSAgfSB9XCdcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aW1lb3V0OiB0cnVlIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCBidXR0b246IHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLmNsaWVudC5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pOwogICAgICAgIHRoaXMuY2xpZW50LnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpCiAgICAgICAgewogICAgICAgICAgICAvLyBOZWVkIHRvIHVuaW5zdGFsbCBvdXJzZWx2ZXMKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctZXhlYycsICJ2YXIgcz1yZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KCciICsgdGhpcy5fb3B0aW9ucy5zZXJ2aWNlICsgIicsICIgKyB0aGlzLl9vcHRpb25zLnVpZCArICIpOyBzLnVubG9hZCgpOyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMocy5wbGlzdCk7cHJvY2Vzcy5leGl0KCk7Il0sIHsgZGV0YWNoZWQ6IHRydWUsIHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLkRFVEFDSEVEIH0pOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuICh0aGlzLmNsaWVudCk7CiAgICB9OwogICAgdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIgPSBmdW5jdGlvbiBzdGFydE1lc3NhZ2VTZXJ2ZXIob3B0aW9ucykKICAgIHsKICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKG9wdGlvbnMucGF0aCkpIHsgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKG9wdGlvbnMucGF0aCk7IH0KICAgICAgICBvcHRpb25zLndyaXRhYmxlQWxsID0gdHJ1ZTsKCiAgICAgICAgdmFyIHJldCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOwogICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOwogICAgICAgIHJldC5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsKICAgICAgICByZXQuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIHJldC50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKG9iaikKICAgICAgICB7CiAgICAgICAgICAgIG9iai5jbG9zZSgpOwogICAgICAgICAgICBvYmouX29wdGlvbnMuX3JlaignQ29ubmVjdGlvbiB0aW1lb3V0Jyk7CiAgICAgICAgfSwgNTAwMCwgcmV0KTsKICAgICAgICByZXQubGlzdGVuKG9wdGlvbnMpOwogICAgICAgIHJldC5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQogICAgICAgIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOwogICAgICAgIH0pOwogICAgICAgIHJldC5vbignficsIGZ1bmN0aW9uICgpCiAgICAgICAgewogICAgICAgICAgICByZXF1aXJlKCdmcycpLnVubGlua1N5bmModGhpcy5fb3B0aW9ucy5wYXRoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5pbnN0YWxsTGF1bmNoQWdlbnQoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLCBzdGFydFR5cGU6ICdBVVRPX1NUQVJUJywgdWlkOiByZXQudWlkLAogICAgICAgICAgICAgICAgc2Vzc2lvblR5cGVzOiBbJ0FxdWEnXSwgcGFyYW1ldGVyczogWyctZXhlYycsICJyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnN0YXJ0Q2xpZW50KHsgcGF0aDogJyIgKyBvcHRpb25zLnBhdGggKyAiJywgc2VydmljZTogJyIgKyBvcHRpb25zLnRtcFNlcnZpY2VOYW1lICsgIicgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOyJdCiAgICAgICAgICAgIH0pOwogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQob3B0aW9ucy50bXBTZXJ2aWNlTmFtZSwgcmV0LnVpZCkubG9hZCgpOwoKICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9Owp9CgoKc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pCnsKICAgIGNhc2UgJ3dpbjMyJzoKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBtZXNzYWdlQm94KCk7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICdsaW51eCc6CiAgICBjYXNlICdmcmVlYnNkJzoKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBsaW51eF9tZXNzYWdlQm94KCk7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICdkYXJ3aW4nOgogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1hY29zX21lc3NhZ2VCb3goKTsKICAgICAgICBicmVhazsKfQoKCgoKCgo=", 11608); - ILibBase64DecodeEx((unsigned char*)_messagebox, 27608, (unsigned char*)_messagebox + 27608); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 27608); + char *_messagebox = ILibMemory_Allocate(48546, 0, NULL, NULL); + memcpy_s(_messagebox + 0, 27740, "LyoKQ29weXJpZ2h0IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCgpjb25zdCBNQl9PSyA9IDB4MDAwMDAwMDA7CmNvbnN0IE1CX09LQ0FOQ0VMICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxOwpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsKY29uc3QgTUJfWUVTTk9DQU5DRUwgICAgICAgICAgICA9IDB4MDAwMDAwMDM7CmNvbnN0IE1CX1lFU05PICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDA0Owpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsKY29uc3QgTUJfVE9QTU9TVCAgICAgICAgICAgICAgICA9IDB4MDAwNDAwMDA7CmNvbnN0IE1CX1NFVEZPUkVHUk9VTkQgICAgICAgICAgPSAweDAwMDEwMDAwOwoKY29uc3QgTUJfREVGQlVUVE9OMSAgICAgICAgICAgICA9IDB4MDAwMDAwMDA7CmNvbnN0IE1CX0RFRkJVVFRPTjIgICAgICAgICAgICAgPSAweDAwMDAwMTAwOwpjb25zdCBNQl9ERUZCVVRUT04zICAgICAgICAgICAgID0gMHgwMDAwMDIwMDsKY29uc3QgTUJfSUNPTkhBTkQgICAgICAgICAgICAgICA9IDB4MDAwMDAwMTA7CmNvbnN0IE1CX0lDT05RVUVTVElPTiAgICAgICAgICAgPSAweDAwMDAwMDIwOwpjb25zdCBNQl9JQ09ORVhDTEFNQVRJT04gICAgICAgID0gMHgwMDAwMDAzMDsKY29uc3QgTUJfSUNPTkFTVEVSSVNLICAgICAgICAgICA9IDB4MDAwMDAwNDA7Cgpjb25zdCBJRE9LICAgICA9IDE7CmNvbnN0IElEQ0FOQ0VMID0gMjsKY29uc3QgSURBQk9SVCAgPSAzOwpjb25zdCBJRFJFVFJZICA9IDQ7CmNvbnN0IElESUdOT1JFID0gNTsKY29uc3QgSURZRVMgICAgPSA2Owpjb25zdCBJRE5PICAgICA9IDc7Cgp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsKdmFyIGNoaWxkU2NyaXB0ID0gIlwKICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5vbignZGF0YScsIGZ1bmN0aW9uIChqKVwKICAgICAgICB7XAogICAgICAgICAgICBzd2l0Y2goai5jb21tYW5kKVwKICAgICAgICAgICAge1wKICAgICAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2VCb3gnOlwKICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpXAogICAgICAgICAgICAgICAgICAgIHtcCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpO1wKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7XAogICAgICAgICAgICAgICAgICAgICAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdNZXNzYWdlQm94QScpO1wKICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjMyLk1lc3NhZ2VCb3hBLmFzeW5jKDAsIEdNLkNyZWF0ZVZhcmlhYmxlKGouY2FwdGlvbiksIEdNLkNyZWF0ZVZhcmlhYmxlKGoudGl0bGUpLCAiICsgKE1CX1lFU05PIHwgTUJfREVGQlVUVE9OMiB8IE1CX0lDT05FWENMQU1BVElPTiB8IE1CX1NFVEZPUkVHUk9VTkQpLnRvU3RyaW5nKCkgKyAiKS50aGVuKFwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocilcCiAgICAgICAgICAgICAgICAgICAgICAgIHtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyLlZhbCA9PSAiICsgSURZRVMudG9TdHJpbmcoKSArICIpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAge1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKCIgKyBJRFlFUy50b1N0cmluZygpICsgIik7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpLnNlbmQoIiArIElETk8udG9TdHJpbmcoKSArICIpO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoKTtcCiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1wKICAgICAgICAgICAgICAgICAgICB9XAogICAgICAgICAgICAgICAgICAgIGJyZWFrO1wKICAgICAgICAgICAgfVwKICAgICAgICB9KTtcCiAgICAiOwoKZnVuY3Rpb24gbWVzc2FnZUJveCgpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsKICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0KQogICAgewogICAgICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwogICAgICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsKICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1Byb2Nlc3NJZFRvU2Vzc2lvbklkJyk7CiAgICAgICAgdmFyIHBzaWQgPSBHTS5DcmVhdGVWYXJpYWJsZSg0KTsKICAgICAgICBpZiAoa2VybmVsMzIuUHJvY2Vzc0lkVG9TZXNzaW9uSWQocHJvY2Vzcy5waWQsIHBzaWQpLlZhbCA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0Ll9yZWooJ0ludGVybmFsIEVycm9yJyk7CiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9CgogICAgICAgIGlmICh0aW1lb3V0ID09IG51bGwpIHsgdGltZW91dCA9IDEwOyB9CiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgdmFyIG9wdGlvbnMgPSB7IGV4ZWN1dGlvblRpbWVvdXQ6IHRpbWVvdXQgfTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBvcHRpb25zLnNlc3Npb25JZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7CiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb25JZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpIHsgZGVsZXRlIG9wdGlvbnMuc2Vzc2lvbklkOyB9CiAgICAgICAgfQogICAgICAgIGNhdGNoKGVlKQogICAgICAgIHsKICAgICAgICAgICAgcmV0Ll9yZWooJ05vIGxvZ2dlZCBvbiB1c2VycycpOwogICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgfQogICAgICAgIHJldC5fdGl0bGUgPSB0aXRsZTsKICAgICAgICByZXQuX2NhcHRpb24gPSBjYXB0aW9uOwogICAgICAgIHJldC5fY29udGFpbmVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKG9wdGlvbnMpOwogICAgICAgIHJldC5fY29udGFpbmVyLnByb21pc2UgPSByZXQ7CiAgICAgICAgcmV0Ll9jb250YWluZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaikKICAgICAgICB7CiAgICAgICAgICAgIGlmKGogPT0gSURZRVMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignRGVuaWVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXQuX2NvbnRhaW5lci5vbignZXhpdCcsIGZ1bmN0aW9uICgpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVGltZW91dCcpOwogICAgICAgIH0pOwogICAgICAgIHJldC5fY29udGFpbmVyLkV4ZWN1dGVTdHJpbmcoY2hpbGRTY3JpcHQpOwogICAgICAgIHJldC5fY29udGFpbmVyLnNlbmQoeyBjb21tYW5kOiAnbWVzc2FnZUJveCcsIGNhcHRpb246IGNhcHRpb24sIHRpdGxlOiB0aXRsZSB9KTsKICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9Owp9CgoKZnVuY3Rpb24gbGludXhfbWVzc2FnZUJveCgpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsKICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0KQogICAgewogICAgICAgIGlmICh0aW1lb3V0ID09IG51bGwpIHsgdGltZW91dCA9IDEwOyB9CiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgdmFyIHplbml0eSA9ICcnLCBrZGlhbG9nID0gJyc7CiAgICAgICAgdmFyIHVpZDsgICAgCiAgICAgICAgdmFyIHhpbmZvOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7CiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goZSkKICAgICAgICB7CiAgICAgICAgICAgIHVpZCA9IDA7CiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oMCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoeGluZm8gPT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldC5fcmVqKCdUaGlzIHN5c3RlbSBjYW5ub3QgZGlzcGxheSBhIHVzZXIgZGlhbG9nIGJveCB3aGVuIGEgdXNlciBpcyBub3QgbG9nZ2VkIGluJyk7CiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9CgogICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOwogICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgemVuaXR5ID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7CiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnICYmIHplbml0eSA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluL3plbml0eScpKSB7IHplbml0eSA9ICcvdXNyL2xvY2FsL2Jpbi96ZW5pdHknOyB9CiAgICAgICAgaWYgKHplbml0eSAhPSAnJykKICAgICAgICB7CiAgICAgICAgICAgIC8vIEdOT01FL1pFTklUWQogICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoemVuaXR5LCBbJ3plbml0eScsICctLXF1ZXN0aW9uJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uLCAnLS10aW1lb3V0PScgKyB0aW1lb3V0XSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHksIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsKICAgICAgICAgICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAga2RpYWxvZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgJiYga2RpYWxvZyA9PSAnJyAmJiByZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJy91c3IvbG9jYWwvYmluL2tkaWFsb2cnKSkgeyBrZGlhbG9nID0gJy91c3IvbG9jYWwvYmluL2tkaWFsb2cnOyB9CiAgICAgICAgICAgIGlmIChrZGlhbG9nID09ICcnKSB7IHJldC5fcmVqKCdQbGF0Zm9ybSBub3Qgc3VwcG9ydGVkICh6ZW5pdHkgb3Iga2RpYWxvZyBub3QgZm91bmQpJyk7IHJldHVybiAocmV0KTsgfQogICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnZnJlZWJzZCcgJiYgcHJvY2Vzcy5lbnZbJ0RJU1BMQVknXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKGtkaWFsb2csIFsna2RpYWxvZycsICctLXRpdGxlJywgdGl0bGUsICctLXllc25vJywgY2FwdGlvbl0pOwogICAgICAgICAgICAgICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQogICAgICAgICAgICAgICAgaWYgKCF4aW5mbyB8fCAheGluZm8uZGlzcGxheSB8fCAheGluZm8ueGF1dGhvcml0eSkgeyByZXQuX3JlaignSW50ZXJhbCBFcnJvciwgY291bGQgbm90IGRldGVybWluZSBYMTEvWERHIGVudicpOyByZXR1cm4gKHJldCk7IH0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShrZGlhbG9nLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCAnLS15ZXNubycsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsKICAgICAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7CiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaigndGltZW91dCcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAocmV0KTsKICAgIH07Cn0KCmlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQp7CiAgICBmdW5jdGlvbiB0cmFuc2xhdGVPYmplY3Qob2JqKQogICAgewogICAgICAgIHZhciBqID0gSlNPTi5zdHJpbmdpZnkob2JqKTsKICAgICAgICB2YXIgYiA9IEJ1ZmZlci5hbGxvYyhqLmxlbmd0aCArIDQpOwogICAgICAgIGIud3JpdGVVSW50MzJMRShqLmxlbmd0aCArIDQpOwogICAgICAgIEJ1ZmZlci5mcm9tKGopLmNvcHkoYiwgNCk7CiAgICAgICAgcmV0dXJuIChiKTsKICAgIH0KfQoKZnVuY3Rpb24gbWFjb3NfbWVzc2FnZUJveCgpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsKICAgIHRoaXMuX2luaXRJUENCYXNlID0gZnVuY3Rpb24gX2luaXRJUENCYXNlKCkKICAgIHsKICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsKCiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICByZXQudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpCiAgICAgICAgewogICAgICAgICAgICByZXQuX3JlaihlKTsKICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KCiAgICAgICAgcmV0LnBhdGggPSAnL3Zhci90bXAvJyArIHByb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSArICdfZXYnOwogICAgICAgIHZhciBuOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpCiAgICAgICAgewogICAgICAgICAgICBuID0gMDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhyZXQucGF0aCArIG4pKQogICAgICAgIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG4gPSByZXF1aXJlKCd0bHMnKS5nZW5lcmF0ZVJhbmRvbUludGVnZXIoJzEnLCAnOTk5OTknKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgKytuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldC5wYXRoID0gcmV0LnBhdGggKyBuOwogICAgICAgIHJldC50bXBTZXJ2aWNlTmFtZSA9ICdtZXNoTm90aWZpY2F0aW9uU2VydmVyJyArIG47CiAgICAgICAgcmV0dXJuIChyZXQpOwogICAgfTsKICAgIAogICAgdGhpcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUodGl0bGUsIGNhcHRpb24sIHRpbWVvdXQpCiAgICB7CiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7CiAgICAgICAgcmV0LnRpdGxlID0gdGl0bGU7IHJldC5jYXB0aW9uID0gY2FwdGlvbjsgcmV0LnRpbWVvdXQgPSB0aW1lb3V0OwogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOwogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0OwogICAgICAgIHJldC5zZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOwogICAgICAgICAgICBjLnByb21pc2UgPSB0aGlzLnJldDsKICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC50aW1lb3V0KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVElNRU9VVCcpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnV0dG9uID09ICdZZXMnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKHAuYnV0dG9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24sIGljb246ICdjYXV0aW9uJywgYnV0dG9uczogWyciWWVzIicsICciTm8iJ10sIGJ1dHRvbkRlZmF1bHQ6IDIsIHRpbWVvdXQ6IHRoaXMucmV0LnRpbWVvdXQgfSkpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9OwogICAgdGhpcy5sb2NrID0gZnVuY3Rpb24gbG9jaygpCiAgICB7CiAgICAgICAgLy8gU3RhcnQgTG9jYWwgU2VydmVyCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7CiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7CiAgICAgICAgcmV0LnNlcnZlci5yZXQgPSByZXQ7CiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsKICAgICAgICAgICAg", 16000); + memcpy_s(_messagebox + 16000, 11740, "Yy5wcm9taXNlID0gdGhpcy5yZXQ7CiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaihwLnJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycgfSkpOw0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH07CiAgICB0aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgY2FwdGlvbikKICAgIHsKICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXIKICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsKICAgICAgICByZXQudGl0bGUgPSB0aXRsZTsgcmV0LmNhcHRpb24gPSBjYXB0aW9uOyAKICAgICAgICByZXQuc2VydmVyID0gdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIocmV0KTsKICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsKICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsKICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7CiAgICAgICAgICAgIGMub24oJ2RhdGEnLCBmdW5jdGlvbiAoYnVmZmVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0KICAgICAgICAgICAgICAgIHZhciBwID0gSlNPTi5wYXJzZShidWZmZXIuc2xpY2UoNCwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdFUlJPUic6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgdGl0bGU6IHRoaXMucmV0LnRpdGxlLCBjYXB0aW9uOiB0aGlzLnJldC5jYXB0aW9uIH0pKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIChyZXQpOwogICAgfTsKICAgIHRoaXMuc3RhcnRDbGllbnQgPSBmdW5jdGlvbiBzdGFydENsaWVudChvcHRpb25zKQogICAgewogICAgICAgIC8vIENyZWF0ZSB0aGUgQ2xpZW50CiAgICAgICAgY29uc29sZS5sb2coJ1N0YXJ0aW5nIENsaWVudC4uLicpOwoKICAgICAgICBvcHRpb25zLm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOwogICAgICAgIG9wdGlvbnMudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsKICAgICAgICB0aGlzLmNsaWVudCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZUNvbm5lY3Rpb24ob3B0aW9ucyk7CiAgICAgICAgdGhpcy5jbGllbnQuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQogICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAnTE9DSyc6CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGluLndyaXRlKCcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL01lbnVcXCBFeHRyYXMvVXNlci5tZW51L0NvbnRlbnRzL1Jlc291cmNlcy9DR1Nlc3Npb24gLXN1c3BlbmRcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdMT0NLJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTk9USUZZJzoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJ29zYXNjcmlwdCAtZSBcJ3RlbGwgY3VycmVudCBhcHBsaWNhdGlvbiB0byBkaXNwbGF5IG5vdGlmaWNhdGlvbiAiJyArIHAuY2FwdGlvbiArICciIHdpdGggdGl0bGUgIicgKyBwLnRpdGxlICsgJyJcJ1xuZXhpdFxuJyk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCBzdGF0dXM6IDAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0RJQUxPRyc6CiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBwLnRpbWVvdXQgPyAoJyBnaXZpbmcgdXAgYWZ0ZXIgJyArIHAudGltZW91dCkgOiAnJzsKICAgICAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IHAuaWNvbiA/ICgnd2l0aCBpY29uICcgKyBwLmljb24pIDogJyc7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbnMgPSBwLmJ1dHRvbnMgPyAoJ2J1dHRvbnMgeycgKyBwLmJ1dHRvbnMudG9TdHJpbmcoKSArICd9JykgOiAnJzsKICAgICAgICAgICAgICAgICAgICBpZiAocC5idXR0b25EZWZhdWx0ICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zICs9ICgnIGRlZmF1bHQgYnV0dG9uICcgKyBwLmJ1dHRvbkRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgZGlhbG9nICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIiAnICsgaWNvbiArICcgJyArIGJ1dHRvbnMgKyB0aW1lb3V0ICsgJ1wnIHwgYXdrIFwneyBjPXNwbGl0KCQwLCB0b2tlbnMsICIsIik7IHNwbGl0KHRva2Vuc1sxXSwgdmFsLCAiOiIpOyBpZihjPT0xKSB7IHByaW50IHZhbFsyXSB9IGVsc2UgeyBzcGxpdCh0b2tlbnNbMl0sIGd1LCAiOiIpOyBpZihndVsyXT09InRydWUiKSB7IHByaW50ICJfVElNRU9VVF8iIH0gZWxzZSB7IHByaW50IHZhbFsyXSAgfSAgfSB9XCdcbmV4aXRcbicpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aW1lb3V0OiB0cnVlIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCBidXR0b246IHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLmNsaWVudC5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHRoaXMudW5pbnN0YWxsKCk7IH0pOwogICAgICAgIHRoaXMuY2xpZW50LnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpCiAgICAgICAgewogICAgICAgICAgICAvLyBOZWVkIHRvIHVuaW5zdGFsbCBvdXJzZWx2ZXMKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctZXhlYycsICJ2YXIgcz1yZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KCciICsgdGhpcy5fb3B0aW9ucy5zZXJ2aWNlICsgIicsICIgKyB0aGlzLl9vcHRpb25zLnVpZCArICIpOyBzLnVubG9hZCgpOyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMocy5wbGlzdCk7cHJvY2Vzcy5leGl0KCk7Il0sIHsgZGV0YWNoZWQ6IHRydWUsIHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLkRFVEFDSEVEIH0pOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuICh0aGlzLmNsaWVudCk7CiAgICB9OwogICAgdGhpcy5zdGFydE1lc3NhZ2VTZXJ2ZXIgPSBmdW5jdGlvbiBzdGFydE1lc3NhZ2VTZXJ2ZXIob3B0aW9ucykKICAgIHsKICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKG9wdGlvbnMucGF0aCkpIHsgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKG9wdGlvbnMucGF0aCk7IH0KICAgICAgICBvcHRpb25zLndyaXRhYmxlQWxsID0gdHJ1ZTsKCiAgICAgICAgdmFyIHJldCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOwogICAgICAgIHJldC51aWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOwogICAgICAgIHJldC5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsKICAgICAgICByZXQuX29wdGlvbnMgPSBvcHRpb25zOwogICAgICAgIHJldC50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKG9iaikKICAgICAgICB7CiAgICAgICAgICAgIG9iai5jbG9zZSgpOwogICAgICAgICAgICBvYmouX29wdGlvbnMuX3JlaignQ29ubmVjdGlvbiB0aW1lb3V0Jyk7CiAgICAgICAgfSwgNTAwMCwgcmV0KTsKICAgICAgICByZXQubGlzdGVuKG9wdGlvbnMpOwogICAgICAgIHJldC5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQogICAgICAgIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOwogICAgICAgIH0pOwogICAgICAgIHJldC5vbignficsIGZ1bmN0aW9uICgpCiAgICAgICAgewogICAgICAgICAgICByZXF1aXJlKCdmcycpLnVubGlua1N5bmModGhpcy5fb3B0aW9ucy5wYXRoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmVxdWlyZSgnc2VydmljZS1tYW5hZ2VyJykubWFuYWdlci5pbnN0YWxsTGF1bmNoQWdlbnQoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLCBzdGFydFR5cGU6ICdBVVRPX1NUQVJUJywgdWlkOiByZXQudWlkLAogICAgICAgICAgICAgICAgc2Vzc2lvblR5cGVzOiBbJ0FxdWEnXSwgcGFyYW1ldGVyczogWyctZXhlYycsICJyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnN0YXJ0Q2xpZW50KHsgcGF0aDogJyIgKyBvcHRpb25zLnBhdGggKyAiJywgc2VydmljZTogJyIgKyBvcHRpb25zLnRtcFNlcnZpY2VOYW1lICsgIicgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgcHJvY2Vzcy5leGl0KCk7IH0pOyJdCiAgICAgICAgICAgIH0pOwogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQob3B0aW9ucy50bXBTZXJ2aWNlTmFtZSwgcmV0LnVpZCkubG9hZCgpOwoKICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9Owp9CgoKc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pCnsKICAgIGNhc2UgJ3dpbjMyJzoKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBtZXNzYWdlQm94KCk7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICdsaW51eCc6CiAgICBjYXNlICdmcmVlYnNkJzoKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBsaW51eF9tZXNzYWdlQm94KCk7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICdkYXJ3aW4nOgogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1hY29zX21lc3NhZ2VCb3goKTsKICAgICAgICBicmVhazsKfQoKCgoKCgo=", 11740); + ILibBase64DecodeEx((unsigned char*)_messagebox, 27740, (unsigned char*)_messagebox + 27740); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 27740); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_messagebox); diff --git a/modules/message-box.js b/modules/message-box.js index 40839ae..683e668 100644 --- a/modules/message-box.js +++ b/modules/message-box.js @@ -16,19 +16,21 @@ limitations under the License. const MB_OK = 0x00000000; -const MB_OKCANCEL = 0x00000001; -const MB_ABORTRETRYIGNORE = 0x00000002; -const MB_YESNOCANCEL = 0x00000003; -const MB_YESNO = 0x00000004; -const MB_RETRYCANCEL = 0x00000005; +const MB_OKCANCEL = 0x00000001; +const MB_ABORTRETRYIGNORE = 0x00000002; +const MB_YESNOCANCEL = 0x00000003; +const MB_YESNO = 0x00000004; +const MB_RETRYCANCEL = 0x00000005; +const MB_TOPMOST = 0x00040000; +const MB_SETFOREGROUND = 0x00010000; -const MB_DEFBUTTON1 = 0x00000000; -const MB_DEFBUTTON2 = 0x00000100; -const MB_DEFBUTTON3 = 0x00000200; -const MB_ICONHAND = 0x00000010; -const MB_ICONQUESTION = 0x00000020; -const MB_ICONEXCLAMATION = 0x00000030; -const MB_ICONASTERISK = 0x00000040; +const MB_DEFBUTTON1 = 0x00000000; +const MB_DEFBUTTON2 = 0x00000100; +const MB_DEFBUTTON3 = 0x00000200; +const MB_ICONHAND = 0x00000010; +const MB_ICONQUESTION = 0x00000020; +const MB_ICONEXCLAMATION = 0x00000030; +const MB_ICONASTERISK = 0x00000040; const IDOK = 1; const IDCANCEL = 2; @@ -50,7 +52,7 @@ var childScript = "\ var GM = require('_GenericMarshal');\ var user32 = GM.CreateNativeProxy('user32.dll');\ user32.CreateMethod('MessageBoxA');\ - user32.MessageBoxA.async(0, GM.CreateVariable(j.caption), GM.CreateVariable(j.title), " + (MB_YESNO | MB_DEFBUTTON2 | MB_ICONEXCLAMATION).toString() + ").then(\ + user32.MessageBoxA.async(0, GM.CreateVariable(j.caption), GM.CreateVariable(j.title), " + (MB_YESNO | MB_DEFBUTTON2 | MB_ICONEXCLAMATION | MB_SETFOREGROUND).toString() + ").then(\ function(r)\ {\ if(r.Val == " + IDYES.toString() + ")\