From d49b781ee46340ef46bf2b5976eb14256ef198e5 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Sun, 6 Oct 2019 19:22:11 -0700 Subject: [PATCH] Added ability to register for ClientMessage events --- microscript/ILibDuktape_Polyfills.c | 11 ++++++----- modules/monitor-info.js | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 18128f1..d8669c7 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -1991,11 +1991,12 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) #endif // monitor-info: Refer to modules/monitor-info.js - char *_monitorinfo = ILibMemory_Allocate(56002, 0, NULL, NULL); - memcpy_s(_monitorinfo + 0, 32000, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOwp2YXIgUFBvc2l0aW9uID0gNDsKdmFyIFBTaXplID0gODsKdmFyIFBNaW5TaXplID0gMSA8PCA0Owp2YXIgUE1heFNpemUgPSAxIDw8IDU7CnZhciBfTkVUX1dNX1NUQVRFX1JFTU9WRSA9IDA7ICAgIC8vIHJlbW92ZS91bnNldCBwcm9wZXJ0eQp2YXIgX05FVF9XTV9TVEFURV9BREQgPSAxOyAgICAvLyBhZGQvc2V0IHByb3BlcnR5CnZhciBfTkVUX1dNX1NUQVRFX1RPR0dMRSA9IDI7ICAgIC8vIHRvZ2dsZSBwcm9wZXJ0eQp2YXIgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrID0gKDEgPDwgMjApOwp2YXIgU3Vic3RydWN0dXJlTm90aWZ5TWFzayA9ICgxIDw8IDE5KTsKdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7CnZhciBYQV9BVE9NID0gNDsKdmFyIE1XTV9ISU5UU19GVU5DVElPTlMgPSAoMSA8PCAwKTsNCnZhciBNV01fSElOVFNfREVDT1JBVElPTlMgPSAgKDEgPDwgMSk7CgpmdW5jdGlvbiBnZXRMaWJJbmZvKGxpYm5hbWUpCnsKICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdsaW51eCcpIHsgdGhyb3cgKCdPbmx5IHN1cHBvcnRlZCBvbiBsaW51eCcpOyB9CgogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIGxkY29uZmlnIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsKICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgdmFyIGxkY29uZmlnID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7CgogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgY2hpbGQuc3RkaW4ud3JpdGUobGRjb25maWcgKyAiIC1wIHwgZ3JlcCAnIiArIGxpYm5hbWUgKyAiLnNvLidcbmV4aXRcbiIpOwogICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICB2YXIgdiA9IFtdOwogICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXG4nKTsKICAgIGZvciAodmFyIGkgaW4gbGluZXMpIHsKICAgICAgICBpZiAobGluZXNbaV0pIHsKICAgICAgICAgICAgdmFyIGluZm8gPSBsaW5lc1tpXS5zcGxpdCgnPT4nKTsKICAgICAgICAgICAgdmFyIHB0aCA9IGluZm9bMV0udHJpbSgpOwogICAgICAgICAgICB2YXIgbGliaW5mbyA9IGluZm9bMF0udHJpbSgpLnNwbGl0KCcgJyk7CiAgICAgICAgICAgIHZhciBsaWIgPSBsaWJpbmZvWzBdOwogICAgICAgICAgICB2YXIgcGxhdCA9IGxpYmluZm9bMV0uc3Vic3RyaW5nKDEsIGxpYmluZm9bMV0ubGVuZ3RoIC0gMSkuc3BsaXQoJywnKTsKCiAgICAgICAgICAgIGlmIChsaWIuc3RhcnRzV2l0aChsaWJuYW1lICsgJy5zby4nKSkgewogICAgICAgICAgICAgICAgdi5wdXNoKHsgbGliOiBsaWIsIHBhdGg6IHB0aCwgaW5mbzogcGxhdCB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAodik7Cn0KCmZ1bmN0aW9uIG1vbml0b3JpbmZvKCkKewogICAgdGhpcy5fT2JqZWN0SUQgPSAnbW9uaXRvci1pbmZvJzsKICAgIHRoaXMuX2dtID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7CgogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykKICAgIHsKICAgICAgICB0aGlzLl91c2VyMzIgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOwogICAgICAgIHRoaXMuX3VzZXIzMi5DcmVhdGVNZXRob2QoJ0VudW1EaXNwbGF5TW9uaXRvcnMnKTsKICAgICAgICB0aGlzLl9rZXJuZWwzMiA9IHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsKICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldExhc3RFcnJvcicpOwoKICAgICAgICB0aGlzLmdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBpbmZvID0gdGhpczsKICAgICAgICAgICAgcmV0dXJuIChuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZXIsIHJlamVjdG9yKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mbyA9IHsgcmVzb2x2ZXI6IHJlc29sdmVyLCByZWplY3RvcjogcmVqZWN0b3IsIHNlbGY6IGluZm8sIGNhbGxiYWNrOiBpbmZvLl9nbS5HZXRHZW5lcmljR2xvYmFsQ2FsbGJhY2soNCkgfTsKICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLmluZm8gPSB0aGlzLl9tb25pdG9yaW5mbzsKICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmR3RGF0YSA9IGluZm8uX2dtLk9iamVjdFRvUHRyKHRoaXMuX21vbml0b3JpbmZvKTsKCiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5yZXN1bHRzID0gW107CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5vbignR2xvYmFsQ2FsbGJhY2snLCBmdW5jdGlvbiBPbk1vbml0b3JJbmZvKGhtb24sIGhkYywgciwgdXNlcikgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLk9iamVjdFRvUHRyX1ZlcmlmeSh0aGlzLmluZm8sIHVzZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYiA9IHIuRGVyZWYoMCwgMTYpLnRvQnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHsgbGVmdDogcmIucmVhZEludDMyTEUoMCksIHRvcDogcmIucmVhZEludDMyTEUoNCksIHJpZ2h0OiByYi5yZWFkSW50MzJMRSg4KSwgYm90dG9tOiByYi5yZWFkSW50MzJMRSgxMikgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMuaW5mby5zZWxmLl9nbS5DcmVhdGVJbnRlZ2VyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHIuVmFsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoaW5mby5fdXNlcjMyLkVudW1EaXNwbGF5TW9uaXRvcnMoMCwgMCwgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2ssIHRoaXMuX21vbml0b3JpbmZvLmR3RGF0YSkuVmFsID09IDApIHsKICAgICAgICAgICAgICAgICAgICByZWplY3RvcignTGFzdEVycm9yPScgKyBpbmZvLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IoKS5WYWwpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc29sdmVyKHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLnJlc3VsdHMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSkpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnKQogICAgewogICAgICAgIC8vIEZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8sIGlzIGRldGVybWluZSB3aGVyZSB0aGUgWDExIGxpYnJhcmllcyBhcmUKICAgICAgICB2YXIgYXNrT1MgPSBmYWxzZTsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuaXNSb290KCkpIHsgYXNrT1MgPSB0cnVlOyB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKQogICAgICAgIHsgfQoKICAgICAgICBpZiAoYXNrT1MpCiAgICAgICAgewogICAgICAgICAgICAvLyBTdWZmaWNpZW50IGFjY2VzcyByaWdodHMgdG8gdXNlIGxkY29uZmlnCiAgICAgICAgICAgIHZhciB4MTFpbmZvID0gZ2V0TGliSW5mbygnbGliWDExJyk7CiAgICAgICAgICAgIHZhciB4dHN0aW5mbyA9IGdldExpYkluZm8oJ2xpYlh0c3QnKTsKICAgICAgICAgICAgdmFyIHhleHRpbmZvID0gZ2V0TGliSW5mbygnbGliWGV4dCcpOwogICAgICAgICAgICB2YXIgeGZpeGVzaW5mbyA9IGdldExpYkluZm8oJ2xpYlhmaXhlcycpOwogICAgICAgICAgICB2YXIgaXg7CgogICAgICAgICAgICBmb3IoaXggaW4geDExaW5mbykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeDExaW5mb1tpeF0ucGF0aCk7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiB4MTFpbmZvW2l4XS5wYXRoIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2goZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpeCBpbiB4dHN0aW5mbykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeHRzdGluZm9baXhdLnBhdGgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogeHRzdGluZm9baXhdLnBhdGggfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpeCBpbiB4ZXh0aW5mbykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeGV4dGluZm9baXhdLnBhdGgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRVhUJywgeyB2YWx1ZTogeGV4dGluZm9baXhdLnBhdGggfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChpeCBpbiB4Zml4ZXNpbmZvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSh4Zml4ZXNpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUZJWEVTJywgeyB2YWx1ZTogeGZpeGVzaW5mb1tpeF0ucGF0aCB9KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChleCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAvLyBOb3QgZW5vdWdoIGFjY2VzcyByaWdodHMgdG8gdXNlIGxkY29uZmlnLCBzbyBtYW51YWxseSBzZWFyY2gKICAgICAgICAgICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTsKICAgICAgICAgICAgdmFyIGZpbGVzID0gZnMucmVhZGRpclN5bmMoJy91c3IvbGliJyk7CiAgICAgICAgICAgIHZhciBmaWxlczI7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIGZpbGVzKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnbGliWDExLnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXNbaV0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnbGliWHRzdC5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzW2ldLnNwbGl0KCcuJykubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFUU1QnLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJ2xpYlhleHQuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlc1tpXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRVhUJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzW2ldLnNwbGl0KCdsaWJYZml4ZXMuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlc1tpXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUZJWEVTJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJy1saW51eC0nKS5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzMiA9IGZzLnJlYWRkaXJTeW5jKCcvdXNyL2xpYi8nICsgZmlsZXNbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogaW4gZmlsZXMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMyW2pdLnNwbGl0KCdsaWJYMTEuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlh0c3Quc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlhleHQuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRVhUJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlhmaXhlcy5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzMltqXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICB7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlgxMScpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWDExJylbMF0ubG9jYXRpb246IHVuZGVmaW5lZCB9KTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdLmxvY2F0aW9uOnVuZGVmaW5lZCB9KTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGV4dCcpWzBdID8gcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYZXh0JylbMF0ubG9jYXRpb24gOiB1bmRlZmluZWQgfSk7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGZpeGVzJylbMF0gPyByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhmaXhlcycpWzBdLmxvY2F0aW9uIDogdW5kZWZpbmVkIH0pOwogICAgfQoKICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJykKICAgIHsKICAgICAgICB0aGlzLk1PVElGX0ZMQUdTID0gDQogICAgICAgIHsNCiAgICAgICAgICAgIE1XTV9GVU5DX0FMTCAgICAgICAgOiAoMSA8PCAwKSAsDQogICAgICAgICAgICBNV01fRlVOQ19SRVNJWkUgICAgIDogKDEgPDwgMSkgLA0KICAgICAgICAgICAgTVdNX0ZVTkNfTU9WRSAgICAgICA6ICgxIDw8IDIpICwNCiAgICAgICAgICAgIE1XTV9GVU5DX01JTklNSVpFICAgOiAoMSA8PCAzKSAsDQogICAgICAgICAgICBNV01fRlVOQ19NQVhJTUlaRSAgIDogKDEgPDwgNCkgLA0KICAgICAgICAgICAgTVdNX0ZVTkNfQ0xPU0UgICAgICA6ICgxIDw8IDUpIAogICAgICAgIH07CgoKICAgICAgICBpZiAodGhpcy5Mb2NhdGlvbl9YMTFMSUIgJiYgdGhpcy5Mb2NhdGlvbl9YMTFUU1QgJiYgdGhpcy5Mb2NhdGlvbl9YMTFFWFQpCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNoID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uICgpIHsgfSk7DQogICAgICAgICAgICBjaC5zdGRvdXQuc3RyID0gJyc7IGNoLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgncHMgLWUgfCBncmVwIFhcbmV4aXRcbicpOw0KICAgICAgICAgICAgY2gud2FpdEV4aXQoKTsNCiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAna3ZtX3gxMV9zdXBwb3J0JywgeyB2YWx1ZTogY2guc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfSk7DQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgew0KICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrdm1feDExX3N1cHBvcnQnLCB7IHZhbHVlOiBmYWxzZSB9KTsNCiAgICAgICAgfQoKCiAgICAgICAgaWYgKHRoaXMuTG9jYXRpb25fWDExTElCKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5fWDExID0gdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkodGhpcy5Mb2NhdGlvbl9YMTFMSUIpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ2hhbmdlUHJvcGVydHknKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENsb3NlRGlzcGxheScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ29ubmVjdGlvbk51bWJlcicpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ29udmVydFNlbGVjdGlvbicpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlR0MnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENyZWF0ZVdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlU2ltcGxlV2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEZWZhdWx0Q29sb3JtYXAnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlZmF1bHRTY3JlZW4nKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlc3Ryb3lXaW5kb3cnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERyYXdMaW5lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEaXNwbGF5SGVpZ2h0Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEaXNwbGF5V2lkdGgnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZldGNoTmFtZScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRmx1c2gnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZyZWUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENyZWF0ZUdDJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hHZXRBdG9tTmFtZScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYR2V0V2luZG93UHJvcGVydHknKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEludGVybkF0b20nKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWE1hcFdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnWE5leHRFdmVudCcsIHRocmVhZERpc3BhdGNoOiB0cnVlIH0pOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnWE5leHRFdmVudCcsIG5ld05hbWU6ICdYTmV4dEV2ZW50U3luYycgfSk7CiAg", 16000); - memcpy_s(_monitorinfo + 16000, 16000, "ICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hPcGVuRGlzcGxheScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYUGVuZGluZycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYUm9vdFdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2VsZWN0SW5wdXQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNjcmVlbkNvdW50Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTY3JlZW5PZkRpc3BsYXknKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNlbGVjdElucHV0Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZW5kRXZlbnQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldEZvcmVncm91bmQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldEZ1bmN0aW9uJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRMaW5lQXR0cmlidXRlcycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0Tm9ybWFsSGludHMnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFNlbGVjdGlvbk93bmVyJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRTdWJ3aW5kb3dNb2RlJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTdG9yZU5hbWUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFN5bmMnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEJsYWNrUGl4ZWwnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFdoaXRlUGl4ZWwnKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuaXNVbml0eSA9IGZ1bmN0aW9uIGlzVW5pdHkoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIChwcm9jZXNzLmVudlsnWERHX0NVUlJFTlRfREVTS1RPUCddID09ICdVbml0eScpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy51bkRlY29yYXRlV2luZG93ID0gZnVuY3Rpb24gdW5EZWNvcmF0ZVdpbmRvdyhkaXNwbGF5LCB3aW5kb3cpCiAgICAgICAgewogICAgICAgICAgICB2YXIgTXdtSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg0MCk7CiAgICAgICAgICAgIHZhciBtd21IaW50c1Byb3BlcnR5ID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTU9USUZfV01fSElOVFMnKSwgMCk7CiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgxIDw8IDEpOwogICAgICAgICAgICB0aGlzLl9YMTEuWENoYW5nZVByb3BlcnR5KGRpc3BsYXksIHdpbmRvdywgbXdtSGludHNQcm9wZXJ0eSwgbXdtSGludHNQcm9wZXJ0eSwgMzIsIDAsIE13bUhpbnRzLCA1KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZXRBbGxvd2VkQWN0aW9ucyA9IGZ1bmN0aW9uIHNldEFsbG93ZWRBY3Rpb25zKGRpc3BsYXksIHdpbmRvdywgZmxhZ3MpCiAgICAgICAgew0KICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICBNV01fSElOVFNfRlVOQ1RJT05TID0gKDFMIDw8IDApLA0KICAgICAgICAgICAgICAgIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICAoMUwgPDwgMSksDQoNCiAgICAgICAgICAgICAgICBNV01fRlVOQ19BTEwgPSAoMUwgPDwgMCksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfUkVTSVpFID0gKDFMIDw8IDEpLA0KICAgICAgICAgICAgICAgIE1XTV9GVU5DX01PVkUgPSAoMUwgPDwgMiksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTUlOSU1JWkUgPSAoMUwgPDwgMyksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTUFYSU1JWkUgPSAoMUwgPDwgNCksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfQ0xPU0UgPSAoMUwgPDwgNSkNCiAgICAgICAgICAgICovDQoNCiAgICAgICAgICAgIHZhciBNd21IaW50cyA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDQwKTsKICAgICAgICAgICAgdmFyIG13bUhpbnRzUHJvcGVydHkgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19NT1RJRl9XTV9ISU5UUycpLCAwKTsKCiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShNV01fSElOVFNfRlVOQ1RJT05TKTsKICAgICAgICAgICAgTXdtSGludHMuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKGZsYWdzKTsKCiAgICAgICAgICAgIHRoaXMuX1gxMS5YQ2hhbmdlUHJvcGVydHkoZGlzcGxheSwgd2luZG93LCBtd21IaW50c1Byb3BlcnR5LCBtd21IaW50c1Byb3BlcnR5LCAzMiwgUHJvcE1vZGVSZXBsYWNlLCBNd21IaW50cywgNSk7DQogICAgICAgIH0KICAgICAgICB0aGlzLnNldFdpbmRvd1NpemVIaW50cyA9IGZ1bmN0aW9uIHNldFdpbmRvd1NpemVIaW50cyhkaXNwbGF5LCB3aW5kb3csIHgsIHksIHdpZHRoLCBoZWlnaHQsIG1pbldpZHRoLCBtaW5IZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgc2l6ZUhpbnRzID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoODApOwogICAgICAgICAgICB2YXIgc3BlYyA9IFBQb3NpdGlvbiB8IFBTaXplOwogICAgICAgICAgICBpZiAobWluV2lkdGggIT0gbnVsbCAmJiBtaW5IZWlnaHQgIT0gbnVsbCkgeyBzcGVjIHw9IFBNaW5TaXplOyB9CiAgICAgICAgICAgIGlmIChtYXhXaWR0aCAhPSBudWxsICYmIG1heEhlaWdodCAhPSBudWxsKSB7IHNwZWMgfD0gUE1heFNpemU7IH0KCiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoc3BlYyk7CiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoeCk7CiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZigxMiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHkpOwogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoMTYsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh3aWR0aCk7CiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZigyMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKGhlaWdodCk7CiAgICAgICAgICAgIGlmIChtaW5XaWR0aCAhPSBudWxsKSB7IHNpemVIaW50cy5EZXJlZigyNCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1pbldpZHRoKTsgfQogICAgICAgICAgICBpZiAobWluSGVpZ2h0ICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDI4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWluSGVpZ2h0KTsgfQogICAgICAgICAgICBpZiAobWF4V2lkdGggIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYoMzIsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShtYXhXaWR0aCk7IH0KICAgICAgICAgICAgaWYgKG1heEhlaWdodCAhPSBudWxsKSB7IHNpemVIaW50cy5EZXJlZigzNiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1heEhlaWdodCk7IH0KCiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2V0Tm9ybWFsSGludHMoZGlzcGxheSwgd2luZG93LCBzaXplSGludHMpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNldEFsd2F5c09uVG9wID0gZnVuY3Rpb24gc2V0QWx3YXlzT25Ub3AoZGlzcGxheSwgcm9vdFdpbmRvdywgd2luZG93KQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHdtTmV0V21TdGF0ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURScpLCAxKTsKICAgICAgICAgICAgdmFyIHdtU3RhdGVBYm92ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURV9BQk9WRScpLCAxKTsKCiAgICAgICAgICAgIHZhciB4Y2xpZW50ID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoOTYpOwogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMyk7ICAgICAgICAgICAgICAgICAgIC8vIENsaWVudE1lc3NhZ2UgdHlwZQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDQ4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzIpOyAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCAzMgogICAgICAgICAgICB3bU5ldFdtU3RhdGUucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZig0MCwgOCkudG9CdWZmZXIoKSk7IC8vIG1lc3NhZ2VfdHlwZQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDU2LCA4KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoX05FVF9XTV9TVEFURV9BREQpOyAgIC8vIGRhdGEubFswXQogICAgICAgICAgICB3bVN0YXRlQWJvdmUucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZig2NCwgOCkudG9CdWZmZXIoKSk7IC8vIGRhdGEubFsxXQoKICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoMzIsIDgpLnRvQnVmZmVyKCkpOyAgICAgICAvLyB3aW5kb3cKICAgICAgICAgICAgdGhpcy5fWDExLlhTZW5kRXZlbnQoZGlzcGxheSwgcm9vdFdpbmRvdywgMCwgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzaywgeGNsaWVudCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGlkZVdpbmRvd0ljb24gPSBmdW5jdGlvbiBoaWRlV2luZG93SWNvbihkaXNwbGF5LCByb290V2luZG93LCB3aW5kb3cpCiAgICAgICAgewogICAgICAgICAgICB2YXIgd21OZXRXbVN0YXRlID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFJyksIDEpOwogICAgICAgICAgICB2YXIgd21TdGF0ZVNraXAgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEVfU0tJUF9UQVNLQkFSJyksIDEpOwoKICAgICAgICAgICAgdmFyIHhjbGllbnQgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg5Nik7CiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMzKTsgICAgICAgICAgICAgICAgICAgLy8gQ2xpZW50TWVzc2FnZSB0eXBlCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoNDgsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMik7ICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IDMyCiAgICAgICAgICAgIHdtTmV0V21TdGF0ZS5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDQwLCA4KS50b0J1ZmZlcigpKTsgLy8gbWVzc2FnZV90eXBlCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoNTYsIDgpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShfTkVUX1dNX1NUQVRFX0FERCk7ICAgLy8gZGF0YS5sWzBdCiAgICAgICAgICAgIHdtU3RhdGVTa2lwLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoNjQsIDgpLnRvQnVmZmVyKCkpOyAgLy8gZGF0YS5sWzFdCgogICAgICAgICAgICB3aW5kb3cucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZigzMiwgOCkudG9CdWZmZXIoKSk7ICAgICAgIC8vIHdpbmRvdwogICAgICAgICAgICB0aGlzLl9YMTEuWFNlbmRFdmVudChkaXNwbGF5LCByb290V2luZG93LCAwLCBTdWJzdHJ1Y3R1cmVSZWRpcmVjdE1hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrLCB4Y2xpZW50KTsKICAgICAgICB9CgogICAgICAgIHRoaXMuZ2V0SW5mbyA9IGZ1bmN0aW9uIGdldEluZm8oKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGluZm8gPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsKICAgICAgICAgICAgcmV0LnBhcmVudCA9IHRoaXM7CgogICAgICAgICAgICBpZiAoIXByb2Nlc3MuZW52LlhBVVRIT1JJVFkgfHwgIXByb2Nlc3MuZW52LkRJU1BMQVkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB4aW5mbyA9IHRoaXMuZ2V0WEluZm8ocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVpZChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykud2hvYW1pKCkpKTsKICAgICAgICAgICAgICAgIHByb2Nlc3Muc2V0ZW52KCdYQVVUSE9SSVRZJywgeGluZm8ueGF1dGhvcml0eSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzLnNldGVudignRElTUExBWScsIHhpbmZvLmRpc3BsYXkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgZGlzcGxheSA9IGluZm8uX1gxMS5YT3BlbkRpc3BsYXkoaW5mby5fZ20uQ3JlYXRlVmFyaWFibGUocHJvY2Vzcy5lbnYuRElTUExBWSkpOwogICAgICAgICAgICBpZiAoZGlzcGxheS5WYWwgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVxdWlyZSgnZnMnKS53cml0ZUZpbGVTeW5jKCcvdmFyL3RtcC9hZ2VudFNsYXZlJywgJ1hPcGVuRGlzcGxheSBGYWlsZWQnLCB7IGZsYWdzOiAnYScgfSk7CiAgICAgICAgICAgICAgICByZXQuX3JlaignWE9wZW5EaXNwbGF5IEZhaWxlZCcpOwogICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc2NyZWVuQ291bnQgPSBpbmZvLl9YMTEuWFNjcmVlbkNvdW50KGRpc3BsYXkpLlZhbDsKICAgICAgICAgICAgdmFyIGlmbyA9IFtdOwogICAgICAgICAgICBmb3IodmFyIGk9MDtpPHNjcmVlbkNvdW50OysraSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHNjcmVlbiA9IGluZm8uX1gxMS5YU2NyZWVuT2ZEaXNwbGF5KGRpc3BsYXksIGkpOwogICAgICAgICAgICAgICAgaWZvLnB1c2goeyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiBpbmZvLl9YMTEuWERpc3BsYXlXaWR0aChkaXNwbGF5LCBpKS5WYWwsIGJvdHRvbTogaW5mby5fWDExLlhEaXNwbGF5SGVpZ2h0KGRpc3BsYXksIGkpLlZhbCwgc2NyZWVuOiBzY3JlZW4sIHNjcmVlbklkOiBpLCBkaXNwbGF5OiBkaXNwbGF5IH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldC5fcmVzKGlmbyk7CgogICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZ2V0WEluZm8gPSBmdW5jdGlvbiBnZXRYSW5mbyhjb25zb2xldWlkKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHJldCA9IG51bGw7CiAgICAgICAgICAgIHZhciB1bmFtZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShjb25zb2xldWlkKTsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAiICsgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnPyItYXggIjoiIikgKyAiLWUgLW8gdXNlciIgKyAocHJvY2Vzcy5wbGF0Zm9ybT09J2xpbnV4Jz8iOjk5OSI6IiIpICsgIiAtbyB0dHkgLW8gY29tbWFuZCB8IGdyZXAgWCB8IGF3ayAneyBzcGxpdCgkMCwgYSwgXCItYXV0aFwiKTsgc3BsaXQoYVsyXSwgYiwgXCIgXCIpOyBpZigkMT09XCIiICsgdW5hbWUgKyAiXCIgJiYgYlsxXSE9XCJcIikgeyBwcmludGYgXCIlcywlcywlc1wiLCQxLCQyLGJbMV0gfSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKS5zcGxpdCgnLCcpOwogICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXQgPSB7IHR0eTogdG9rZW5zWzFdLCB4YXV0aG9yaXR5OiB0b2tlbnNbMl0gfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHJldCA9PSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBUaGlzIExpbnV4IERpc3RybyBkb2VzIG5vdCBzcGF3biBhbiBYU2VydmVyIGluc3RhbmNlIGluIHRoZSB1c2VyIHNlc3Npb24sIHRoYXQgc3BlY2lmaWVzIHRoZSBYQVVUSE9SSVRZLgogICAgICAgICAgICAgICAgLy8gU28gd2UncmUgZ29pbmcgdG8gYnJ1dGUgZm9yY2UgaXQsIGJ5IGVudW1lcmF0aW5nIGFsbCBwcm9jZXNzZXMgb3duZWQgYnkgdGhpcyB1c2VyLCBhbmQgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzICIgKyAocHJvY2Vzcy5wbGF0Zm9ybT09J2ZyZWVic2QnPyItYXggIjoiIikgKyAiLWUgLW8gcGlkIC1vIHVzZXIgfCBncmVwICIgKyB1bmFtZSArICIgfCBhd2sgJ3sgcHJpbnQgJDEgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgZm9yKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBsbiA9IGxpbmVzW25dLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICBpZihsbi5sZW5ndGg+MCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldEVudkZyb21QaWQobG4pOwogICAgICAgICAgICAgICAgICAgICAgICBpZihlLlhBVVRIT1JJVFkgJiYgZS5ESVNQTEFZKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB7IHR0eTogJz8nLCB4YXV0aG9yaXR5OiBlLlhBVVRIT1JJVFksIGRpc3BsYXk6IGUuRElTUExBWSB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYocmV0ID09IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBYQVVUSE9SSVRZIGFuZCBESVNQTEFZLCBzbyBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LCBsZXRzIGp1c3QgbG9vayBmb3IgRElTUExBWQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gbGluZXMpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsbi5sZW5ndGggPiAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRFbnZGcm9tUGlkKGxuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLkRJU1BMQVkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0geyB0dHk6ICc/JywgZGlzcGxheTogZS5ESVNQTEFZIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaW5kICRESVNQTEFZIGJ5IGxvb2tpbmcgYXQgYWxsIHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgc2FtZSB0dHkgYXMgdGhlIFhTZXJ2ZXIgaW5zdGFuY2UgZm9yIHRoaXMgdXNlciBzZXNzaW9uCiAgICAgICAgICAgICAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHMgLWUgLW8gdHR5IC1vIHBpZCAtbyB1c2VyOjk5OTkgfCBncmVwICIgKyByZXQudHR5ICsgIiB8IGdyZXAgIiArIHVuYW1lICsgIiB8IGF3ayAneyBwcmludCAkMiB9JyBcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgdmFyIHBzLCBwc3gsIHYsIHZzID0gMDsKICAgICAgICAgICAgICAgIGZvcih2YXIgeCBpbiBsaW5lcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihsaW5lc1t4XS50cmltKCkubGVuZ3RoPjApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMgPSByZXF1aXJlKCdmcycpLnJlYWRGaWxlU3luYygnL3Byb2MvJyArIGxpbmVzW3hdLnRyaW0oKSArICcvZW52aXJvbicpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKHBzZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdnMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IocHN4PTA7cHN4PHBzLmxlbmd0aDsrK3BzeCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzW3BzeF0gPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gcHMuc2xpY2UodnMsIHBzeCkudG9TdHJpbmcoKS5zcGxpdCgnPScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2WzBdID09ICdESVNQTEFZJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5kaXNwbGF5ID0gdlsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cyA9IHBzeCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH07CiAgICB9Cn0KCmlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKQ0Kew0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1vbml0b3JpbmZvKCk7DQp9CgoK", 16000); - ILibBase64DecodeEx((unsigned char*)_monitorinfo, 32000, (unsigned char*)_monitorinfo + 32000); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "monitor-info"); duk_push_string(ctx, _monitorinfo + 32000); + char *_monitorinfo = ILibMemory_Allocate(57332, 0, NULL, NULL); + memcpy_s(_monitorinfo + 0, 32760, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCnZhciBQUG9zaXRpb24gPSA0Ow0KdmFyIFBTaXplID0gODsNCnZhciBQTWluU2l6ZSA9IDEgPDwgNDsNCnZhciBQTWF4U2l6ZSA9IDEgPDwgNTsNCnZhciBfTkVUX1dNX1NUQVRFX1JFTU9WRSA9IDA7ICAgIC8vIHJlbW92ZS91bnNldCBwcm9wZXJ0eQ0KdmFyIF9ORVRfV01fU1RBVEVfQUREID0gMTsgICAgLy8gYWRkL3NldCBwcm9wZXJ0eQ0KdmFyIF9ORVRfV01fU1RBVEVfVE9HR0xFID0gMjsgICAgLy8gdG9nZ2xlIHByb3BlcnR5DQp2YXIgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrID0gKDEgPDwgMjApOw0KdmFyIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgPSAoMSA8PCAxOSk7DQp2YXIgUHJvcE1vZGVSZXBsYWNlID0gMDsNCnZhciBYQV9BVE9NID0gNDsNCnZhciBNV01fSElOVFNfRlVOQ1RJT05TID0gKDEgPDwgMCk7DQp2YXIgTVdNX0hJTlRTX0RFQ09SQVRJT05TID0gKDEgPDwgMSk7DQp2YXIgQ2xpZW50TWVzc2FnZSA9IDMzOw0KDQpmdW5jdGlvbiBnZXRMaWJJbmZvKGxpYm5hbWUpDQp7DQogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2xpbnV4JykgeyB0aHJvdyAoJ09ubHkgc3VwcG9ydGVkIG9uIGxpbnV4Jyk7IH0NCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOw0KICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBsZGNvbmZpZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgIHZhciBsZGNvbmZpZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUobGRjb25maWcgKyAiIC1wIHwgZ3JlcCAnIiArIGxpYm5hbWUgKyAiLnNvLidcbmV4aXRcbiIpOw0KICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICB2YXIgdiA9IFtdOw0KICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7DQogICAgZm9yICh2YXIgaSBpbiBsaW5lcykgew0KICAgICAgICBpZiAobGluZXNbaV0pIHsNCiAgICAgICAgICAgIHZhciBpbmZvID0gbGluZXNbaV0uc3BsaXQoJz0+Jyk7DQogICAgICAgICAgICB2YXIgcHRoID0gaW5mb1sxXS50cmltKCk7DQogICAgICAgICAgICB2YXIgbGliaW5mbyA9IGluZm9bMF0udHJpbSgpLnNwbGl0KCcgJyk7DQogICAgICAgICAgICB2YXIgbGliID0gbGliaW5mb1swXTsNCiAgICAgICAgICAgIHZhciBwbGF0ID0gbGliaW5mb1sxXS5zdWJzdHJpbmcoMSwgbGliaW5mb1sxXS5sZW5ndGggLSAxKS5zcGxpdCgnLCcpOw0KDQogICAgICAgICAgICBpZiAobGliLnN0YXJ0c1dpdGgobGlibmFtZSArICcuc28uJykpIHsNCiAgICAgICAgICAgICAgICB2LnB1c2goeyBsaWI6IGxpYiwgcGF0aDogcHRoLCBpbmZvOiBwbGF0IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAodik7DQp9DQoNCmZ1bmN0aW9uIG1vbml0b3JpbmZvKCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtb25pdG9yLWluZm8nOw0KICAgIHRoaXMuX2dtID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQoNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fdXNlcjMyID0gdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICAgICAgdGhpcy5fdXNlcjMyLkNyZWF0ZU1ldGhvZCgnRW51bURpc3BsYXlNb25pdG9ycycpOw0KICAgICAgICB0aGlzLl9rZXJuZWwzMiA9IHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHZXRMYXN0RXJyb3InKTsNCg0KICAgICAgICB0aGlzLmdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGluZm8gPSB0aGlzOw0KICAgICAgICAgICAgcmV0dXJuIChuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZXIsIHJlamVjdG9yKSB7DQogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8gPSB7IHJlc29sdmVyOiByZXNvbHZlciwgcmVqZWN0b3I6IHJlamVjdG9yLCBzZWxmOiBpbmZvLCBjYWxsYmFjazogaW5mby5fZ20uR2V0R2VuZXJpY0dsb2JhbENhbGxiYWNrKDQpIH07DQogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2suaW5mbyA9IHRoaXMuX21vbml0b3JpbmZvOw0KICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmR3RGF0YSA9IGluZm8uX2dtLk9iamVjdFRvUHRyKHRoaXMuX21vbml0b3JpbmZvKTsNCg0KICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLnJlc3VsdHMgPSBbXTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5vbignR2xvYmFsQ2FsbGJhY2snLCBmdW5jdGlvbiBPbk1vbml0b3JJbmZvKGhtb24sIGhkYywgciwgdXNlcikgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5PYmplY3RUb1B0cl9WZXJpZnkodGhpcy5pbmZvLCB1c2VyKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJiID0gci5EZXJlZigwLCAxNikudG9CdWZmZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHsgbGVmdDogcmIucmVhZEludDMyTEUoMCksIHRvcDogcmIucmVhZEludDMyTEUoNCksIHJpZ2h0OiByYi5yZWFkSW50MzJMRSg4KSwgYm90dG9tOiByYi5yZWFkSW50MzJMRSgxMikgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gdGhpcy5pbmZvLnNlbGYuX2dtLkNyZWF0ZUludGVnZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHIuVmFsID0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGlmIChpbmZvLl91c2VyMzIuRW51bURpc3BsYXlNb25pdG9ycygwLCAwLCB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjaywgdGhpcy5fbW9uaXRvcmluZm8uZHdEYXRhKS5WYWwgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICByZWplY3RvcignTGFzdEVycm9yPScgKyBpbmZvLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IoKS5WYWwpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICByZXNvbHZlcih0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5yZXN1bHRzKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIH0pKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCiAgICB7DQogICAgICAgIC8vIEZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8sIGlzIGRldGVybWluZSB3aGVyZSB0aGUgWDExIGxpYnJhcmllcyBhcmUNCiAgICAgICAgdmFyIGFza09TID0gZmFsc2U7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmlzUm9vdCgpKSB7IGFza09TID0gdHJ1ZTsgfQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7IH0NCg0KICAgICAgICBpZiAoYXNrT1MpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIFN1ZmZpY2llbnQgYWNjZXNzIHJpZ2h0cyB0byB1c2UgbGRjb25maWcNCiAgICAgICAgICAgIHZhciB4MTFpbmZvID0gZ2V0TGliSW5mbygnbGliWDExJyk7DQogICAgICAgICAgICB2YXIgeHRzdGluZm8gPSBnZXRMaWJJbmZvKCdsaWJYdHN0Jyk7DQogICAgICAgICAgICB2YXIgeGV4dGluZm8gPSBnZXRMaWJJbmZvKCdsaWJYZXh0Jyk7DQogICAgICAgICAgICB2YXIgeGZpeGVzaW5mbyA9IGdldExpYkluZm8oJ2xpYlhmaXhlcycpOw0KICAgICAgICAgICAgdmFyIGl4Ow0KDQogICAgICAgICAgICBmb3IoaXggaW4geDExaW5mbykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHgxMWluZm9baXhdLnBhdGgpOw0KICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6IHgxMWluZm9baXhdLnBhdGggfSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjYXRjaChleCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yIChpeCBpbiB4dHN0aW5mbykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHh0c3RpbmZvW2l4XS5wYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFUU1QnLCB7IHZhbHVlOiB4dHN0aW5mb1tpeF0ucGF0aCB9KTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNhdGNoIChleCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yIChpeCBpbiB4ZXh0aW5mbykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHhleHRpbmZvW2l4XS5wYXRoKTsNCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiB4ZXh0aW5mb1tpeF0ucGF0aCB9KTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNhdGNoIChleCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yIChpeCBpbiB4Zml4ZXNpbmZvKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeGZpeGVzaW5mb1tpeF0ucGF0aCk7DQogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiB4Zml4ZXNpbmZvW2l4XS5wYXRoIH0pOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgY2F0Y2ggKGV4KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBOb3QgZW5vdWdoIGFjY2VzcyByaWdodHMgdG8gdXNlIGxkY29uZmlnLCBzbyBtYW51YWxseSBzZWFyY2gNCiAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7DQogICAgICAgICAgICB2YXIgZmlsZXMgPSBmcy5yZWFkZGlyU3luYygnL3Vzci9saWInKTsNCiAgICAgICAgICAgIHZhciBmaWxlczI7DQoNCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZmlsZXMpIHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJ2xpYlgxMS5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzW2ldLnNwbGl0KCcuJykubGVuZ3RoID09IDMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJ2xpYlh0c3Quc28uJykubGVuZ3RoID4gMSAmJiBmaWxlc1tpXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzW2ldLnNwbGl0KCdsaWJYZXh0LnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXNbaV0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgew0KICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnbGliWGZpeGVzLnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXNbaV0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJy1saW51eC0nKS5sZW5ndGggPiAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlczIgPSBmcy5yZWFkZGlyU3luYygnL3Vzci9saWIvJyArIGZpbGVzW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiBpbiBmaWxlczIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMyW2pdLnNwbGl0KCdsaWJYMTEuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlh0c3Quc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlhleHQuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlhmaXhlcy5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzMltqXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgIHsNCgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlgxMScpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWDExJylbMF0ubG9jYXRpb246IHVuZGVmaW5lZCB9KTsNCgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFUU1QnLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlh0c3QnKVswXT9yZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlh0c3QnKVswXS5sb2NhdGlvbjp1bmRlZmluZWQgfSk7DQoJICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRVhUJywgeyB2YWx1ZTogcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYZXh0JylbMF0gPyByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhleHQnKVswXS5sb2NhdGlvbiA6IHVuZGVmaW5lZCB9KTsNCgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGZpeGVzJylbMF0gPyByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhmaXhlcycpWzBdLmxvY2F0aW9uIDogdW5kZWZpbmVkIH0pOw0KICAgIH0NCg0KICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJykNCiAgICB7DQogICAgICAgIHRoaXMuTU9USUZfRkxBR1MgPSANCiAgICAgICAgew0KICAgICAgICAgICAgTVdNX0ZVTkNfQUxMICAgICAgICA6ICgxIDw8IDApICwNCiAgICAgICAgICAgIE1XTV9GVU5DX1JFU0laRSAgICAgOiAoMSA8PCAxKSAsDQogICAgICAgICAgICBNV01fRlVOQ19NT1ZFICAgICAgIDogKDEgPDwgMikgLA0KICAgICAgICAgICAgTVdNX0ZVTkNfTUlOSU1JWkUgICA6ICgxIDw8IDMpICwNCiAgICAgICAgICAgIE1XTV9GVU5DX01BWElNSVpFICAgOiAoMSA8PCA0KSAsDQogICAgICAgICAgICBNV01fRlVOQ19DTE9TRSAgICAgIDogKDEgPDwgNSkgDQogICAgICAgIH07DQoNCg0KICAgICAgICBpZiAodGhpcy5Mb2NhdGlvbl9YMTFMSUIgJiYgdGhpcy5Mb2NhdGlvbl9YMTFUU1QgJiYgdGhpcy5Mb2NhdGlvbl9YMTFFWFQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICBjaC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7IH0pOw0KICAgICAgICAgICAgY2guc3Rkb3V0LnN0ciA9ICcnOyBjaC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3BzIC1lIHwgZ3JlcCBYXG5leGl0XG4nKTsNCiAgICAgICAgICAgIGNoLndhaXRFeGl0KCk7DQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2t2bV94MTFfc3VwcG9ydCcsIHsgdmFsdWU6IGNoLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gZmFsc2UgOiB0cnVlIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrdm1feDExX3N1cHBvcnQnLCB7IHZhbHVlOiBmYWxzZSB9KTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgaWYgKHRoaXMuTG9jYXRpb25fWDExTElCKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9YMTEgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSh0aGlzLkxvY2F0aW9uX1gxMUxJQik7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ2hhbmdlUHJvcGVydHknKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDbG9zZURpc3BsYXknKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDb25uZWN0aW9uTnVtYmVyJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ29udmVydFNlbGVjdGlvbicpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENyZWF0ZUdDJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlV2luZG93Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlU2ltcGxlV2luZG93Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVmYXVsdENvbG9ybWFwJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVmYXVsdFNjcmVlbicpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlc3Ryb3lXaW5kb3cnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEcmF3TGluZScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERpc3BsYXlIZWlnaHQnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEaXNwbGF5V2lkdGgnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hGZXRjaE5hbWUnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hGbHVzaCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZyZWUnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVHQycpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEdldEF0b21OYW1lJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYR2V0V2luZG93UHJvcGVy", 16000); + memcpy_s(_monitorinfo + 16000, 16760, "dHknKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hJbnRlcm5BdG9tJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYTWFwV2luZG93Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnWE5leHRFdmVudCcsIHRocmVhZERpc3BhdGNoOiB0cnVlIH0pOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCh7IG1ldGhvZDogJ1hOZXh0RXZlbnQnLCBuZXdOYW1lOiAnWE5leHRFdmVudFN5bmMnIH0pOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWE9wZW5EaXNwbGF5Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYUGVuZGluZycpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFJvb3RXaW5kb3cnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZWxlY3RJbnB1dCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNjcmVlbkNvdW50Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2NyZWVuT2ZEaXNwbGF5Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2VsZWN0SW5wdXQnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZW5kRXZlbnQnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRGb3JlZ3JvdW5kJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0RnVuY3Rpb24nKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRMaW5lQXR0cmlidXRlcycpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldE5vcm1hbEhpbnRzJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0U2VsZWN0aW9uT3duZXInKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRTdWJ3aW5kb3dNb2RlJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0V01Qcm90b2NvbHMnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTdG9yZU5hbWUnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTeW5jJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQmxhY2tQaXhlbCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFdoaXRlUGl4ZWwnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMuaXNVbml0eSA9IGZ1bmN0aW9uIGlzVW5pdHkoKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKHByb2Nlc3MuZW52WydYREdfQ1VSUkVOVF9ERVNLVE9QJ10gPT0gJ1VuaXR5Jyk7DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLnVuRGVjb3JhdGVXaW5kb3cgPSBmdW5jdGlvbiB1bkRlY29yYXRlV2luZG93KGRpc3BsYXksIHdpbmRvdykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIE13bUhpbnRzID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoNDApOw0KICAgICAgICAgICAgdmFyIG13bUhpbnRzUHJvcGVydHkgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19NT1RJRl9XTV9ISU5UUycpLCAwKTsNCiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgxIDw8IDEpOw0KICAgICAgICAgICAgdGhpcy5fWDExLlhDaGFuZ2VQcm9wZXJ0eShkaXNwbGF5LCB3aW5kb3csIG13bUhpbnRzUHJvcGVydHksIG13bUhpbnRzUHJvcGVydHksIDMyLCAwLCBNd21IaW50cywgNSk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5zZXRBbGxvd2VkQWN0aW9ucyA9IGZ1bmN0aW9uIHNldEFsbG93ZWRBY3Rpb25zKGRpc3BsYXksIHdpbmRvdywgZmxhZ3MpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgTVdNX0hJTlRTX0ZVTkNUSU9OUyA9ICgxTCA8PCAwKSwNCiAgICAgICAgICAgICAgICBNV01fSElOVFNfREVDT1JBVElPTlMgPSAgKDFMIDw8IDEpLA0KDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfQUxMID0gKDFMIDw8IDApLA0KICAgICAgICAgICAgICAgIE1XTV9GVU5DX1JFU0laRSA9ICgxTCA8PCAxKSwNCiAgICAgICAgICAgICAgICBNV01fRlVOQ19NT1ZFID0gKDFMIDw8IDIpLA0KICAgICAgICAgICAgICAgIE1XTV9GVU5DX01JTklNSVpFID0gKDFMIDw8IDMpLA0KICAgICAgICAgICAgICAgIE1XTV9GVU5DX01BWElNSVpFID0gKDFMIDw8IDQpLA0KICAgICAgICAgICAgICAgIE1XTV9GVU5DX0NMT1NFID0gKDFMIDw8IDUpDQogICAgICAgICAgICAqLw0KDQogICAgICAgICAgICB2YXIgTXdtSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg0MCk7DQogICAgICAgICAgICB2YXIgbXdtSGludHNQcm9wZXJ0eSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX01PVElGX1dNX0hJTlRTJyksIDApOw0KDQogICAgICAgICAgICBNd21IaW50cy5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoTVdNX0hJTlRTX0ZVTkNUSU9OUyk7DQogICAgICAgICAgICBNd21IaW50cy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KDQogICAgICAgICAgICB0aGlzLl9YMTEuWENoYW5nZVByb3BlcnR5KGRpc3BsYXksIHdpbmRvdywgbXdtSGludHNQcm9wZXJ0eSwgbXdtSGludHNQcm9wZXJ0eSwgMzIsIFByb3BNb2RlUmVwbGFjZSwgTXdtSGludHMsIDUpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuc2V0V2luZG93U2l6ZUhpbnRzID0gZnVuY3Rpb24gc2V0V2luZG93U2l6ZUhpbnRzKGRpc3BsYXksIHdpbmRvdywgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHNpemVIaW50cyA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDgwKTsNCiAgICAgICAgICAgIHZhciBzcGVjID0gUFBvc2l0aW9uIHwgUFNpemU7DQogICAgICAgICAgICBpZiAobWluV2lkdGggIT0gbnVsbCAmJiBtaW5IZWlnaHQgIT0gbnVsbCkgeyBzcGVjIHw9IFBNaW5TaXplOyB9DQogICAgICAgICAgICBpZiAobWF4V2lkdGggIT0gbnVsbCAmJiBtYXhIZWlnaHQgIT0gbnVsbCkgeyBzcGVjIHw9IFBNYXhTaXplOyB9DQoNCiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoc3BlYyk7DQogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHgpOw0KICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDEyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoeSk7DQogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoMTYsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh3aWR0aCk7DQogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoMjAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShoZWlnaHQpOw0KICAgICAgICAgICAgaWYgKG1pbldpZHRoICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWluV2lkdGgpOyB9DQogICAgICAgICAgICBpZiAobWluSGVpZ2h0ICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDI4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWluSGVpZ2h0KTsgfQ0KICAgICAgICAgICAgaWYgKG1heFdpZHRoICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDMyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWF4V2lkdGgpOyB9DQogICAgICAgICAgICBpZiAobWF4SGVpZ2h0ICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDM2LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWF4SGVpZ2h0KTsgfQ0KDQogICAgICAgICAgICB0aGlzLl9YMTEuWFNldE5vcm1hbEhpbnRzKGRpc3BsYXksIHdpbmRvdywgc2l6ZUhpbnRzKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLnNldEFsd2F5c09uVG9wID0gZnVuY3Rpb24gc2V0QWx3YXlzT25Ub3AoZGlzcGxheSwgcm9vdFdpbmRvdywgd2luZG93KQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgd21OZXRXbVN0YXRlID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFJyksIDEpOw0KICAgICAgICAgICAgdmFyIHdtU3RhdGVBYm92ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURV9BQk9WRScpLCAxKTsNCg0KICAgICAgICAgICAgdmFyIHhjbGllbnQgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg5Nik7DQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMyk7ICAgICAgICAgICAgICAgICAgIC8vIENsaWVudE1lc3NhZ2UgdHlwZQ0KICAgICAgICAgICAgeGNsaWVudC5EZXJlZig0OCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMyKTsgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgMzINCiAgICAgICAgICAgIHdtTmV0V21TdGF0ZS5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDQwLCA4KS50b0J1ZmZlcigpKTsgLy8gbWVzc2FnZV90eXBlDQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDU2LCA4KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoX05FVF9XTV9TVEFURV9BREQpOyAgIC8vIGRhdGEubFswXQ0KICAgICAgICAgICAgd21TdGF0ZUFib3ZlLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoNjQsIDgpLnRvQnVmZmVyKCkpOyAvLyBkYXRhLmxbMV0NCg0KICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoMzIsIDgpLnRvQnVmZmVyKCkpOyAgICAgICAvLyB3aW5kb3cNCiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2VuZEV2ZW50KGRpc3BsYXksIHJvb3RXaW5kb3csIDAsIFN1YnN0cnVjdHVyZVJlZGlyZWN0TWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2ssIHhjbGllbnQpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuaGlkZVdpbmRvd0ljb24gPSBmdW5jdGlvbiBoaWRlV2luZG93SWNvbihkaXNwbGF5LCByb290V2luZG93LCB3aW5kb3cpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciB3bU5ldFdtU3RhdGUgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEUnKSwgMSk7DQogICAgICAgICAgICB2YXIgd21TdGF0ZVNraXAgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEVfU0tJUF9UQVNLQkFSJyksIDEpOw0KDQogICAgICAgICAgICB2YXIgeGNsaWVudCA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDk2KTsNCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMzKTsgICAgICAgICAgICAgICAgICAgLy8gQ2xpZW50TWVzc2FnZSB0eXBlDQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDQ4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzIpOyAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCAzMg0KICAgICAgICAgICAgd21OZXRXbVN0YXRlLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoNDAsIDgpLnRvQnVmZmVyKCkpOyAvLyBtZXNzYWdlX3R5cGUNCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoNTYsIDgpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShfTkVUX1dNX1NUQVRFX0FERCk7ICAgLy8gZGF0YS5sWzBdDQogICAgICAgICAgICB3bVN0YXRlU2tpcC5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDY0LCA4KS50b0J1ZmZlcigpKTsgIC8vIGRhdGEubFsxXQ0KDQogICAgICAgICAgICB3aW5kb3cucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZigzMiwgOCkudG9CdWZmZXIoKSk7ICAgICAgIC8vIHdpbmRvdw0KICAgICAgICAgICAgdGhpcy5fWDExLlhTZW5kRXZlbnQoZGlzcGxheSwgcm9vdFdpbmRvdywgMCwgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzaywgeGNsaWVudCk7DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLmdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGluZm8gPSB0aGlzOw0KICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgICAgICByZXQucGFyZW50ID0gdGhpczsNCg0KICAgICAgICAgICAgaWYgKCFwcm9jZXNzLmVudi5YQVVUSE9SSVRZIHx8ICFwcm9jZXNzLmVudi5ESVNQTEFZKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB4aW5mbyA9IHRoaXMuZ2V0WEluZm8ocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVpZChyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykud2hvYW1pKCkpKTsNCiAgICAgICAgICAgICAgICBwcm9jZXNzLnNldGVudignWEFVVEhPUklUWScsIHhpbmZvLnhhdXRob3JpdHkpOw0KICAgICAgICAgICAgICAgIHByb2Nlc3Muc2V0ZW52KCdESVNQTEFZJywgeGluZm8uZGlzcGxheSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gaW5mby5fWDExLlhPcGVuRGlzcGxheShpbmZvLl9nbS5DcmVhdGVWYXJpYWJsZShwcm9jZXNzLmVudi5ESVNQTEFZKSk7DQogICAgICAgICAgICBpZiAoZGlzcGxheS5WYWwgPT0gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXF1aXJlKCdmcycpLndyaXRlRmlsZVN5bmMoJy92YXIvdG1wL2FnZW50U2xhdmUnLCAnWE9wZW5EaXNwbGF5IEZhaWxlZCcsIHsgZmxhZ3M6ICdhJyB9KTsNCiAgICAgICAgICAgICAgICByZXQuX3JlaignWE9wZW5EaXNwbGF5IEZhaWxlZCcpOw0KICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHNjcmVlbkNvdW50ID0gaW5mby5fWDExLlhTY3JlZW5Db3VudChkaXNwbGF5KS5WYWw7DQogICAgICAgICAgICB2YXIgaWZvID0gW107DQogICAgICAgICAgICBmb3IodmFyIGk9MDtpPHNjcmVlbkNvdW50OysraSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgc2NyZWVuID0gaW5mby5fWDExLlhTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSwgaSk7DQogICAgICAgICAgICAgICAgaWZvLnB1c2goeyBsZWZ0OiAwLCB0b3A6IDAsIHJpZ2h0OiBpbmZvLl9YMTEuWERpc3BsYXlXaWR0aChkaXNwbGF5LCBpKS5WYWwsIGJvdHRvbTogaW5mby5fWDExLlhEaXNwbGF5SGVpZ2h0KGRpc3BsYXksIGkpLlZhbCwgc2NyZWVuOiBzY3JlZW4sIHNjcmVlbklkOiBpLCBkaXNwbGF5OiBkaXNwbGF5IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0Ll9yZXMoaWZvKTsNCg0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuZ2V0WEluZm8gPSBmdW5jdGlvbiBnZXRYSW5mbyhjb25zb2xldWlkKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgcmV0ID0gbnVsbDsNCiAgICAgICAgICAgIHZhciB1bmFtZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVc2VybmFtZShjb25zb2xldWlkKTsNCiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHMgIiArIChwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJz8iLWF4ICI6IiIpICsgIi1lIC1vIHVzZXIiICsgKHByb2Nlc3MucGxhdGZvcm09PSdsaW51eCc/Ijo5OTkiOiIiKSArICIgLW8gdHR5IC1vIGNvbW1hbmQgfCBncmVwIFggfCBhd2sgJ3sgc3BsaXQoJDAsIGEsIFwiLWF1dGhcIik7IHNwbGl0KGFbMl0sIGIsIFwiIFwiKTsgaWYoJDE9PVwiIiArIHVuYW1lICsgIlwiICYmIGJbMV0hPVwiXCIpIHsgcHJpbnRmIFwiJXMsJXMsJXNcIiwkMSwkMixiWzFdIH0gfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKS5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICByZXQgPSB7IHR0eTogdG9rZW5zWzFdLCB4YXV0aG9yaXR5OiB0b2tlbnNbMl0gfTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHJldCA9PSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIFRoaXMgTGludXggRGlzdHJvIGRvZXMgbm90IHNwYXduIGFuIFhTZXJ2ZXIgaW5zdGFuY2UgaW4gdGhlIHVzZXIgc2Vzc2lvbiwgdGhhdCBzcGVjaWZpZXMgdGhlIFhBVVRIT1JJVFkuDQogICAgICAgICAgICAgICAgLy8gU28gd2UncmUgZ29pbmcgdG8gYnJ1dGUgZm9yY2UgaXQsIGJ5IGVudW1lcmF0aW5nIGFsbCBwcm9jZXNzZXMgb3duZWQgYnkgdGhpcyB1c2VyLCBhbmQgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzDQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAiICsgKHByb2Nlc3MucGxhdGZvcm09PSdmcmVlYnNkJz8iLWF4ICI6IiIpICsgIi1lIC1vIHBpZCAtbyB1c2VyIHwgZ3JlcCAiICsgdW5hbWUgKyAiIHwgYXdrICd7IHByaW50ICQxIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXG4nKTsNCiAgICAgICAgICAgICAgICBmb3IodmFyIG4gaW4gbGluZXMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7DQogICAgICAgICAgICAgICAgICAgIGlmKGxuLmxlbmd0aD4wKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRFbnZGcm9tUGlkKGxuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGUuWEFVVEhPUklUWSAmJiBlLkRJU1BMQVkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0geyB0dHk6ICc/JywgeGF1dGhvcml0eTogZS5YQVVUSE9SSVRZLCBkaXNwbGF5OiBlLkRJU1BMQVkgfTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYocmV0ID09IG51bGwpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZG4ndCBmaW5kIFhBVVRIT1JJVFkgYW5kIERJU1BMQVksIHNvIGFzIGEgbGFzdCBkaXRjaCBlZmZvcnQsIGxldHMganVzdCBsb29rIGZvciBESVNQTEFZDQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gbGluZXMpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsbiA9IGxpbmVzW25dLnRyaW0oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsbi5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldEVudkZyb21QaWQobG4pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLkRJU1BMQVkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB7IHR0eTogJz8nLCBkaXNwbGF5OiBlLkRJU1BMQVkgfTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgJERJU1BMQVkgYnkgbG9va2luZyBhdCBhbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIHR0eSBhcyB0aGUgWFNlcnZlciBpbnN0YW5jZSBmb3IgdGhpcyB1c2VyIHNlc3Npb24NCiAgICAgICAgICAgICAgICBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHMgLWUgLW8gdHR5IC1vIHBpZCAtbyB1c2VyOjk5OTkgfCBncmVwICIgKyByZXQudHR5ICsgIiB8IGdyZXAgIiArIHVuYW1lICsgIiB8IGF3ayAneyBwcmludCAkMiB9JyBcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQoNCiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOw0KICAgICAgICAgICAgICAgIHZhciBwcywgcHN4LCB2LCB2cyA9IDA7DQogICAgICAgICAgICAgICAgZm9yKHZhciB4IGluIGxpbmVzKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYobGluZXNbeF0udHJpbSgpLmxlbmd0aD4wKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgbGluZXNbeF0udHJpbSgpICsgJy9lbnZpcm9uJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChwc2UpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB2cyA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IocHN4PTA7cHN4PHBzLmxlbmd0aDsrK3BzeCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNbcHN4XSA9PSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHBzLnNs", 16000); + memcpy_s(_monitorinfo + 32000, 760, "aWNlKHZzLCBwc3gpLnRvU3RyaW5nKCkuc3BsaXQoJz0nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZbMF0gPT0gJ0RJU1BMQVknKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuZGlzcGxheSA9IHZbMV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnMgPSBwc3ggKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfTsNCiAgICB9DQp9DQoNCmlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKQ0Kew0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1vbml0b3JpbmZvKCk7DQp9DQoNCg0K", 760); + ILibBase64DecodeEx((unsigned char*)_monitorinfo, 32760, (unsigned char*)_monitorinfo + 32760); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "monitor-info"); duk_push_string(ctx, _monitorinfo + 32760); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_monitorinfo); diff --git a/modules/monitor-info.js b/modules/monitor-info.js index c6583cb..822f8f4 100644 --- a/modules/monitor-info.js +++ b/modules/monitor-info.js @@ -27,7 +27,8 @@ var SubstructureNotifyMask = (1 << 19); var PropModeReplace = 0; var XA_ATOM = 4; var MWM_HINTS_FUNCTIONS = (1 << 0); -var MWM_HINTS_DECORATIONS = (1 << 1); +var MWM_HINTS_DECORATIONS = (1 << 1); +var ClientMessage = 33; function getLibInfo(libname) { @@ -298,6 +299,7 @@ function monitorinfo() this._X11.CreateMethod('XSetNormalHints'); this._X11.CreateMethod('XSetSelectionOwner'); this._X11.CreateMethod('XSetSubwindowMode'); + this._X11.CreateMethod('XSetWMProtocols'); this._X11.CreateMethod('XStoreName'); this._X11.CreateMethod('XSync'); this._X11.CreateMethod('XBlackPixel');