diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 875b171..55b820a 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -1991,12 +1991,12 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) #endif // monitor-info: Refer to modules/monitor-info.js - char *_monitorinfo = ILibMemory_Allocate(58606, 0, NULL, NULL); - memcpy_s(_monitorinfo + 0, 33488, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOwp2YXIgUFBvc2l0aW9uID0gNDsKdmFyIFBTaXplID0gODsKdmFyIFBNaW5TaXplID0gMSA8PCA0Owp2YXIgUE1heFNpemUgPSAxIDw8IDU7CnZhciBfTkVUX1dNX1NUQVRFX1JFTU9WRSA9IDA7ICAgIC8vIHJlbW92ZS91bnNldCBwcm9wZXJ0eQp2YXIgX05FVF9XTV9TVEFURV9BREQgPSAxOyAgICAvLyBhZGQvc2V0IHByb3BlcnR5CnZhciBfTkVUX1dNX1NUQVRFX1RPR0dMRSA9IDI7ICAgIC8vIHRvZ2dsZSBwcm9wZXJ0eQp2YXIgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrID0gKDEgPDwgMjApOwp2YXIgU3Vic3RydWN0dXJlTm90aWZ5TWFzayA9ICgxIDw8IDE5KTsKdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7CnZhciBYQV9BVE9NID0gNDsKdmFyIE1XTV9ISU5UU19GVU5DVElPTlMgPSAoMSA8PCAwKTsKdmFyIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICgxIDw8IDEpOwp2YXIgQ2xpZW50TWVzc2FnZSA9IDMzOwoKZnVuY3Rpb24gZ2V0TGliSW5mbyhsaWJuYW1lKQp7CiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnbGludXgnKSB7IHRocm93ICgnT25seSBzdXBwb3J0ZWQgb24gbGludXgnKTsgfQoKICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBsZGNvbmZpZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgIHZhciBsZGNvbmZpZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwoKICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKGxkY29uZmlnICsgIiAtcCB8IGdyZXAgJyIgKyBsaWJuYW1lICsgIi5zby4nXG5leGl0XG4iKTsKICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgdmFyIHYgPSBbXTsKICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICBmb3IgKHZhciBpIGluIGxpbmVzKSB7CiAgICAgICAgaWYgKGxpbmVzW2ldKSB7CiAgICAgICAgICAgIHZhciBpbmZvID0gbGluZXNbaV0uc3BsaXQoJz0+Jyk7CiAgICAgICAgICAgIHZhciBwdGggPSBpbmZvWzFdLnRyaW0oKTsKICAgICAgICAgICAgdmFyIGxpYmluZm8gPSBpbmZvWzBdLnRyaW0oKS5zcGxpdCgnICcpOwogICAgICAgICAgICB2YXIgbGliID0gbGliaW5mb1swXTsKICAgICAgICAgICAgdmFyIHBsYXQgPSBsaWJpbmZvWzFdLnN1YnN0cmluZygxLCBsaWJpbmZvWzFdLmxlbmd0aCAtIDEpLnNwbGl0KCcsJyk7CgogICAgICAgICAgICBpZiAobGliLnN0YXJ0c1dpdGgobGlibmFtZSArICcuc28uJykpIHsKICAgICAgICAgICAgICAgIHYucHVzaCh7IGxpYjogbGliLCBwYXRoOiBwdGgsIGluZm86IHBsYXQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gKHYpOwp9CgpmdW5jdGlvbiBtb25pdG9yaW5mbygpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21vbml0b3ItaW5mbyc7CiAgICB0aGlzLl9nbSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwoKICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpCiAgICB7CiAgICAgICAgdGhpcy5fdXNlcjMyID0gdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsKICAgICAgICB0aGlzLl91c2VyMzIuQ3JlYXRlTWV0aG9kKCdFbnVtRGlzcGxheU1vbml0b3JzJyk7CiAgICAgICAgdGhpcy5fa2VybmVsMzIgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7CiAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHZXRMYXN0RXJyb3InKTsKCiAgICAgICAgdGhpcy5nZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaW5mbyA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiAobmV3IHByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVyLCByZWplY3RvcikgewogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8gPSB7IHJlc29sdmVyOiByZXNvbHZlciwgcmVqZWN0b3I6IHJlamVjdG9yLCBzZWxmOiBpbmZvLCBjYWxsYmFjazogaW5mby5fZ20uR2V0R2VuZXJpY0dsb2JhbENhbGxiYWNrKDQpIH07CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5pbmZvID0gdGhpcy5fbW9uaXRvcmluZm87CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5kd0RhdGEgPSBpbmZvLl9nbS5PYmplY3RUb1B0cih0aGlzLl9tb25pdG9yaW5mbyk7CgogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2sucmVzdWx0cyA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2sub24oJ0dsb2JhbENhbGxiYWNrJywgZnVuY3Rpb24gT25Nb25pdG9ySW5mbyhobW9uLCBoZGMsIHIsIHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5PYmplY3RUb1B0cl9WZXJpZnkodGhpcy5pbmZvLCB1c2VyKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmIgPSByLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaCh7IGxlZnQ6IHJiLnJlYWRJbnQzMkxFKDApLCB0b3A6IHJiLnJlYWRJbnQzMkxFKDQpLCByaWdodDogcmIucmVhZEludDMyTEUoOCksIGJvdHRvbTogcmIucmVhZEludDMyTEUoMTIpIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLmluZm8uc2VsZi5fZ20uQ3JlYXRlSW50ZWdlcigpOwogICAgICAgICAgICAgICAgICAgICAgICByLlZhbCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKGluZm8uX3VzZXIzMi5FbnVtRGlzcGxheU1vbml0b3JzKDAsIDAsIHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLCB0aGlzLl9tb25pdG9yaW5mby5kd0RhdGEpLlZhbCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmVqZWN0b3IoJ0xhc3RFcnJvcj0nICsgaW5mby5fa2VybmVsMzIuR2V0TGFzdEVycm9yKCkuVmFsKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlcih0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5yZXN1bHRzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykKICAgIHsKICAgICAgICAvLyBGaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvLCBpcyBkZXRlcm1pbmUgd2hlcmUgdGhlIFgxMSBsaWJyYXJpZXMgYXJlCiAgICAgICAgdmFyIGFza09TID0gZmFsc2U7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmlzUm9vdCgpKSB7IGFza09TID0gdHJ1ZTsgfQogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkKICAgICAgICB7IH0KCiAgICAgICAgaWYgKGFza09TKQogICAgICAgIHsKICAgICAgICAgICAgLy8gU3VmZmljaWVudCBhY2Nlc3MgcmlnaHRzIHRvIHVzZSBsZGNvbmZpZwogICAgICAgICAgICB2YXIgeDExaW5mbyA9IGdldExpYkluZm8oJ2xpYlgxMScpOwogICAgICAgICAgICB2YXIgeHRzdGluZm8gPSBnZXRMaWJJbmZvKCdsaWJYdHN0Jyk7CiAgICAgICAgICAgIHZhciB4ZXh0aW5mbyA9IGdldExpYkluZm8oJ2xpYlhleHQnKTsKICAgICAgICAgICAgdmFyIHhmaXhlc2luZm8gPSBnZXRMaWJJbmZvKCdsaWJYZml4ZXMnKTsKICAgICAgICAgICAgdmFyIGl4OwoKICAgICAgICAgICAgZm9yKGl4IGluIHgxMWluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHgxMWluZm9baXhdLnBhdGgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogeDExaW5mb1tpeF0ucGF0aCB9KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoKGV4KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaXggaW4geHRzdGluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHh0c3RpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHh0c3RpbmZvW2l4XS5wYXRoIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGV4KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaXggaW4geGV4dGluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHhleHRpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHhleHRpbmZvW2l4XS5wYXRoIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGV4KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaXggaW4geGZpeGVzaW5mbykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeGZpeGVzaW5mb1tpeF0ucGF0aCk7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHhmaXhlc2luZm9baXhdLnBhdGggfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgLy8gTm90IGVub3VnaCBhY2Nlc3MgcmlnaHRzIHRvIHVzZSBsZGNvbmZpZywgc28gbWFudWFsbHkgc2VhcmNoCiAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7CiAgICAgICAgICAgIHZhciBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKCcvdXNyL2xpYicpOwogICAgICAgICAgICB2YXIgZmlsZXMyOwoKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmaWxlcykgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJ2xpYlgxMS5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzW2ldLnNwbGl0KCcuJykubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJ2xpYlh0c3Quc28uJykubGVuZ3RoID4gMSAmJiBmaWxlc1tpXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzW2ldLnNwbGl0KCdsaWJYZXh0LnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXNbaV0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnbGliWGZpeGVzLnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXNbaV0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldIH0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzW2ldLnNwbGl0KCctbGludXgtJykubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBmaWxlczIgPSBmcy5yZWFkZGlyU3luYygnL3Vzci9saWIvJyArIGZpbGVzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqIGluIGZpbGVzMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzMltqXS5zcGxpdCgnbGliWDExLnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXMyW2pdLnNwbGl0KCcuJykubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMyW2pdLnNwbGl0KCdsaWJYdHN0LnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXMyW2pdLnNwbGl0KCcuJykubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMyW2pdLnNwbGl0KCdsaWJYZXh0LnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXMyW2pdLnNwbGl0KCcuJykubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMyW2pdLnNwbGl0KCdsaWJYZml4ZXMuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUZJWEVTJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7IH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFMSUInXSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFMSUInXSB9KTsgfQogICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMVRTVCddKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogcHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMVRTVCddIH0pOyB9CiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRVhUJ10pIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiBwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRVhUJ10gfSk7IH0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFGSVhFUyddKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiBwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRklYRVMnXSB9KTsgfQogICAgICAgIH0KICAgIH0KICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQogICAgewoJICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYMTEnKVswXT9yZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlgxMScpWzBdLmxvY2F0aW9uOiB1bmRlZmluZWQgfSk7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFUU1QnLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlh0c3QnKVswXT9yZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlh0c3QnKVswXS5sb2NhdGlvbjp1bmRlZmluZWQgfSk7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhleHQnKVswXSA/IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGV4dCcpWzBdLmxvY2F0aW9uIDogdW5kZWZpbmVkIH0pOwoJICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhmaXhlcycpWzBdID8gcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYZml4ZXMnKVswXS5sb2NhdGlvbiA6IHVuZGVmaW5lZCB9KTsKICAgIH0KCiAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICB7CiAgICAgICAgdGhpcy5NT1RJRl9GTEFHUyA9IAogICAgICAgIHsKICAgICAgICAgICAgTVdNX0ZVTkNfQUxMICAgICAgICA6ICgxIDw8IDApICwKICAgICAgICAgICAgTVdNX0ZVTkNfUkVTSVpFICAgICA6ICgxIDw8IDEpICwKICAgICAgICAgICAgTVdNX0ZVTkNfTU9WRSAgICAgICA6ICgxIDw8IDIpICwKICAgICAgICAgICAgTVdNX0ZVTkNfTUlOSU1JWkUgICA6ICgxIDw8IDMpICwKICAgICAgICAgICAgTVdNX0ZVTkNfTUFYSU1JWkUgICA6ICgxIDw8IDQpICwKICAgICAgICAgICAgTVdNX0ZVTkNfQ0xPU0UgICAgICA6ICgxIDw8IDUpIAogICAgICAgIH07CgoKICAgICAgICBpZiAodGhpcy5Mb2NhdGlvbl9YMTFMSUIgJiYgdGhpcy5Mb2NhdGlvbl9YMTFUU1QgJiYgdGhpcy5Mb2NhdGlvbl9YMTFFWFQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2ggPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7IH0pOwogICAgICAgICAgICBjaC5zdGRvdXQuc3RyID0gJyc7IGNoLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCdwcyAtZSB8IGdyZXAgWFxuZXhpdFxuJyk7CiAgICAgICAgICAgIGNoLndhaXRFeGl0KCk7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAna3ZtX3gxMV9zdXBwb3J0JywgeyB2YWx1ZTogY2guc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAna3ZtX3gxMV9zdXBwb3J0JywgeyB2YWx1ZTogZmFsc2UgfSk7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKHRoaXMuTG9jYXRpb25fWDExTElCKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5fWDExID0gdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkodGhpcy5Mb2NhdGlvbl9YMTFMSUIpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ2hhbmdlUHJvcGVydHknKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENsb3NlRGlzcGxheScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ29ubmVjdGlvbk51bWJlcicpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ29udmVydFNlbGVjdGlvbicpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlR0MnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENyZWF0ZVdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlU2ltcGxlV2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEZWZhdWx0Q29sb3JtYXAnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlZmF1bHRTY3JlZW4nKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlc3Ryb3lXaW5kb3cnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERyYXdMaW5lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEaXNwbGF5SGVpZ2h0Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEaXNwbGF5V2lkdGgn", 16000); - memcpy_s(_monitorinfo + 16000, 17488, "KTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZldGNoTmFtZScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRmx1c2gnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZyZWUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENyZWF0ZUdDJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hHZXRBdG9tTmFtZScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYR2V0V2luZG93UHJvcGVydHknKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEludGVybkF0b20nKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWE1hcFdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnWE5leHRFdmVudCcsIHRocmVhZERpc3BhdGNoOiB0cnVlIH0pOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnWE5leHRFdmVudCcsIG5ld05hbWU6ICdYTmV4dEV2ZW50U3luYycgfSk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hPcGVuRGlzcGxheScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYUGVuZGluZycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYUm9vdFdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2VsZWN0SW5wdXQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNjcmVlbkNvdW50Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTY3JlZW5PZkRpc3BsYXknKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNlbGVjdElucHV0Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZW5kRXZlbnQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldEZvcmVncm91bmQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldEZ1bmN0aW9uJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRMaW5lQXR0cmlidXRlcycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0Tm9ybWFsSGludHMnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFNlbGVjdGlvbk93bmVyJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRTdWJ3aW5kb3dNb2RlJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRXTVByb3RvY29scycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU3RvcmVOYW1lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTeW5jJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hCbGFja1BpeGVsJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hXaGl0ZVBpeGVsJyk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmlzVW5pdHkgPSBmdW5jdGlvbiBpc1VuaXR5KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAocHJvY2Vzcy5lbnZbJ1hER19DVVJSRU5UX0RFU0tUT1AnXSA9PSAnVW5pdHknKTsKICAgICAgICB9CgogICAgICAgIHRoaXMudW5EZWNvcmF0ZVdpbmRvdyA9IGZ1bmN0aW9uIHVuRGVjb3JhdGVXaW5kb3coZGlzcGxheSwgd2luZG93KQogICAgICAgIHsKICAgICAgICAgICAgdmFyIE13bUhpbnRzID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoNDApOwogICAgICAgICAgICB2YXIgbXdtSGludHNQcm9wZXJ0eSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX01PVElGX1dNX0hJTlRTJyksIDApOwogICAgICAgICAgICBNd21IaW50cy5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMSA8PCAxKTsKICAgICAgICAgICAgdGhpcy5fWDExLlhDaGFuZ2VQcm9wZXJ0eShkaXNwbGF5LCB3aW5kb3csIG13bUhpbnRzUHJvcGVydHksIG13bUhpbnRzUHJvcGVydHksIDMyLCAwLCBNd21IaW50cywgNSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2V0QWxsb3dlZEFjdGlvbnMgPSBmdW5jdGlvbiBzZXRBbGxvd2VkQWN0aW9ucyhkaXNwbGF5LCB3aW5kb3csIGZsYWdzKQogICAgICAgIHsKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIE1XTV9ISU5UU19GVU5DVElPTlMgPSAoMUwgPDwgMCksCiAgICAgICAgICAgICAgICBNV01fSElOVFNfREVDT1JBVElPTlMgPSAgKDFMIDw8IDEpLAoKICAgICAgICAgICAgICAgIE1XTV9GVU5DX0FMTCA9ICgxTCA8PCAwKSwKICAgICAgICAgICAgICAgIE1XTV9GVU5DX1JFU0laRSA9ICgxTCA8PCAxKSwKICAgICAgICAgICAgICAgIE1XTV9GVU5DX01PVkUgPSAoMUwgPDwgMiksCiAgICAgICAgICAgICAgICBNV01fRlVOQ19NSU5JTUlaRSA9ICgxTCA8PCAzKSwKICAgICAgICAgICAgICAgIE1XTV9GVU5DX01BWElNSVpFID0gKDFMIDw8IDQpLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfQ0xPU0UgPSAoMUwgPDwgNSkKICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIHZhciBNd21IaW50cyA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDQwKTsKICAgICAgICAgICAgdmFyIG13bUhpbnRzUHJvcGVydHkgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19NT1RJRl9XTV9ISU5UUycpLCAwKTsKCiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShNV01fSElOVFNfRlVOQ1RJT05TKTsKICAgICAgICAgICAgTXdtSGludHMuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKGZsYWdzKTsKCiAgICAgICAgICAgIHRoaXMuX1gxMS5YQ2hhbmdlUHJvcGVydHkoZGlzcGxheSwgd2luZG93LCBtd21IaW50c1Byb3BlcnR5LCBtd21IaW50c1Byb3BlcnR5LCAzMiwgUHJvcE1vZGVSZXBsYWNlLCBNd21IaW50cywgNSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2V0V2luZG93U2l6ZUhpbnRzID0gZnVuY3Rpb24gc2V0V2luZG93U2l6ZUhpbnRzKGRpc3BsYXksIHdpbmRvdywgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzaXplSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg4MCk7CiAgICAgICAgICAgIHZhciBzcGVjID0gUFBvc2l0aW9uIHwgUFNpemU7CiAgICAgICAgICAgIGlmIChtaW5XaWR0aCAhPSBudWxsICYmIG1pbkhlaWdodCAhPSBudWxsKSB7IHNwZWMgfD0gUE1pblNpemU7IH0KICAgICAgICAgICAgaWYgKG1heFdpZHRoICE9IG51bGwgJiYgbWF4SGVpZ2h0ICE9IG51bGwpIHsgc3BlYyB8PSBQTWF4U2l6ZTsgfQoKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShzcGVjKTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDgsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh4KTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDEyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoeSk7CiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZigxNiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHdpZHRoKTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDIwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoaGVpZ2h0KTsKICAgICAgICAgICAgaWYgKG1pbldpZHRoICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWluV2lkdGgpOyB9CiAgICAgICAgICAgIGlmIChtaW5IZWlnaHQgIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYoMjgsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShtaW5IZWlnaHQpOyB9CiAgICAgICAgICAgIGlmIChtYXhXaWR0aCAhPSBudWxsKSB7IHNpemVIaW50cy5EZXJlZigzMiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1heFdpZHRoKTsgfQogICAgICAgICAgICBpZiAobWF4SGVpZ2h0ICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDM2LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWF4SGVpZ2h0KTsgfQoKICAgICAgICAgICAgdGhpcy5fWDExLlhTZXROb3JtYWxIaW50cyhkaXNwbGF5LCB3aW5kb3csIHNpemVIaW50cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2V0QWx3YXlzT25Ub3AgPSBmdW5jdGlvbiBzZXRBbHdheXNPblRvcChkaXNwbGF5LCByb290V2luZG93LCB3aW5kb3cpCiAgICAgICAgewogICAgICAgICAgICB2YXIgd21OZXRXbVN0YXRlID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFJyksIDEpOwogICAgICAgICAgICB2YXIgd21TdGF0ZUFib3ZlID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFX0FCT1ZFJyksIDEpOwoKICAgICAgICAgICAgdmFyIHhjbGllbnQgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg5Nik7CiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMzKTsgICAgICAgICAgICAgICAgICAgLy8gQ2xpZW50TWVzc2FnZSB0eXBlCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoNDgsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMik7ICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IDMyCiAgICAgICAgICAgIHdtTmV0V21TdGF0ZS5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDQwLCA4KS50b0J1ZmZlcigpKTsgLy8gbWVzc2FnZV90eXBlCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYoNTYsIDgpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShfTkVUX1dNX1NUQVRFX0FERCk7ICAgLy8gZGF0YS5sWzBdCiAgICAgICAgICAgIHdtU3RhdGVBYm92ZS5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDY0LCA4KS50b0J1ZmZlcigpKTsgLy8gZGF0YS5sWzFdCgogICAgICAgICAgICB3aW5kb3cucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZigzMiwgOCkudG9CdWZmZXIoKSk7ICAgICAgIC8vIHdpbmRvdwogICAgICAgICAgICB0aGlzLl9YMTEuWFNlbmRFdmVudChkaXNwbGF5LCByb290V2luZG93LCAwLCBTdWJzdHJ1Y3R1cmVSZWRpcmVjdE1hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrLCB4Y2xpZW50KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oaWRlV2luZG93SWNvbiA9IGZ1bmN0aW9uIGhpZGVXaW5kb3dJY29uKGRpc3BsYXksIHJvb3RXaW5kb3csIHdpbmRvdykKICAgICAgICB7CiAgICAgICAgICAgIHZhciB3bU5ldFdtU3RhdGUgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEUnKSwgMSk7CiAgICAgICAgICAgIHZhciB3bVN0YXRlU2tpcCA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURV9TS0lQX1RBU0tCQVInKSwgMSk7CgogICAgICAgICAgICB2YXIgeGNsaWVudCA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDk2KTsKICAgICAgICAgICAgeGNsaWVudC5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzMpOyAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRNZXNzYWdlIHR5cGUKICAgICAgICAgICAgeGNsaWVudC5EZXJlZig0OCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMyKTsgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgMzIKICAgICAgICAgICAgd21OZXRXbVN0YXRlLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoNDAsIDgpLnRvQnVmZmVyKCkpOyAvLyBtZXNzYWdlX3R5cGUKICAgICAgICAgICAgeGNsaWVudC5EZXJlZig1NiwgOCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKF9ORVRfV01fU1RBVEVfQUREKTsgICAvLyBkYXRhLmxbMF0KICAgICAgICAgICAgd21TdGF0ZVNraXAucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZig2NCwgOCkudG9CdWZmZXIoKSk7ICAvLyBkYXRhLmxbMV0KCiAgICAgICAgICAgIHdpbmRvdy5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDMyLCA4KS50b0J1ZmZlcigpKTsgICAgICAgLy8gd2luZG93CiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2VuZEV2ZW50KGRpc3BsYXksIHJvb3RXaW5kb3csIDAsIFN1YnN0cnVjdHVyZVJlZGlyZWN0TWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2ssIHhjbGllbnQpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5nZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaW5mbyA9IHRoaXM7CiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOwogICAgICAgICAgICByZXQucGFyZW50ID0gdGhpczsKCiAgICAgICAgICAgIGlmICghcHJvY2Vzcy5lbnYuWEFVVEhPUklUWSB8fCAhcHJvY2Vzcy5lbnYuRElTUExBWSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHhpbmZvID0gdGhpcy5nZXRYSW5mbyhyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0VWlkKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSkpOwogICAgICAgICAgICAgICAgcHJvY2Vzcy5zZXRlbnYoJ1hBVVRIT1JJVFknLCB4aW5mby54YXV0aG9yaXR5KTsKICAgICAgICAgICAgICAgIHByb2Nlc3Muc2V0ZW52KCdESVNQTEFZJywgeGluZm8uZGlzcGxheSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gaW5mby5fWDExLlhPcGVuRGlzcGxheShpbmZvLl9nbS5DcmVhdGVWYXJpYWJsZShwcm9jZXNzLmVudi5ESVNQTEFZKSk7CiAgICAgICAgICAgIGlmIChkaXNwbGF5LlZhbCA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXF1aXJlKCdmcycpLndyaXRlRmlsZVN5bmMoJy92YXIvdG1wL2FnZW50U2xhdmUnLCAnWE9wZW5EaXNwbGF5IEZhaWxlZCcsIHsgZmxhZ3M6ICdhJyB9KTsKICAgICAgICAgICAgICAgIHJldC5fcmVqKCdYT3BlbkRpc3BsYXkgRmFpbGVkJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBzY3JlZW5Db3VudCA9IGluZm8uX1gxMS5YU2NyZWVuQ291bnQoZGlzcGxheSkuVmFsOwogICAgICAgICAgICB2YXIgaWZvID0gW107CiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8c2NyZWVuQ291bnQ7KytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgc2NyZWVuID0gaW5mby5fWDExLlhTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSwgaSk7CiAgICAgICAgICAgICAgICBpZm8ucHVzaCh7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IGluZm8uX1gxMS5YRGlzcGxheVdpZHRoKGRpc3BsYXksIGkpLlZhbCwgYm90dG9tOiBpbmZvLl9YMTEuWERpc3BsYXlIZWlnaHQoZGlzcGxheSwgaSkuVmFsLCBzY3JlZW46IHNjcmVlbiwgc2NyZWVuSWQ6IGksIGRpc3BsYXk6IGRpc3BsYXkgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0Ll9yZXMoaWZvKTsKCiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5nZXRYSW5mbyA9IGZ1bmN0aW9uIGdldFhJbmZvKGNvbnNvbGV1aWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmV0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHVuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKGNvbnNvbGV1aWQpOwogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzICIgKyAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCc/Ii1heCAiOiIiKSArICItZSAtbyB1c2VyIiArIChwcm9jZXNzLnBsYXRmb3JtPT0nbGludXgnPyI6OTk5IjoiIikgKyAiIC1vIHR0eSAtbyBjb21tYW5kIHwgZ3JlcCBYIHwgYXdrICd7IHNwbGl0KCQwLCBhLCBcIi1hdXRoXCIpOyBzcGxpdChhWzJdLCBiLCBcIiBcIik7IGlmKCQxPT1cIiIgKyB1bmFtZSArICJcIiAmJiBiWzFdIT1cIlwiKSB7IHByaW50ZiBcIiVzLCVzLCVzXCIsJDEsJDIsYlsxXSB9IH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgdmFyIHRva2VucyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnNwbGl0KCcsJyk7CiAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldCA9IHsgdHR5OiB0b2tlbnNbMV0sIHhhdXRob3JpdHk6IHRva2Vuc1syXSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHJldCA9PSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBUaGlzIExpbnV4IERpc3RybyBkb2VzIG5vdCBzcGF3biBhbiBYU2VydmVyIGluc3RhbmNlIGluIHRoZSB1c2VyIHNlc3Npb24sIHRoYXQgc3BlY2lmaWVzIHRoZSBYQVVUSE9SSVRZLgogICAgICAgICAgICAgICAgLy8gU28gd2UncmUgZ29pbmcgdG8gYnJ1dGUgZm9yY2UgaXQsIGJ5IGVudW1lcmF0aW5nIGFsbCBwcm9jZXNzZXMgb3duZWQgYnkgdGhpcyB1c2VyLCBhbmQgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzICIgKyAocHJvY2Vzcy5wbGF0Zm9ybT09J2ZyZWVic2QnPyItYXggIjoiIikgKyAiLWUgLW8gcGlkIC1vIHVzZXIgfCBncmVwICIgKyB1bmFtZSArICIgfCBhd2sgJ3sgcHJpbnQgJDEgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgZm9yKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBsbiA9IGxpbmVzW25dLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICBpZihsbi5sZW5ndGg+MCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldEVudkZyb21QaWQobG4pOwogICAgICAgICAgICAgICAgICAgICAgICBpZihlLlhBVVRIT1JJVFkgJiYgZS5ESVNQTEFZKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB7IHR0eTogJz8nLCB4YXV0aG9yaXR5OiBlLlhBVVRIT1JJVFksIGRpc3BsYXk6IGUuRElTUExBWSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHJldCA9PSBudWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgWEFVVEhPUklUWSBhbmQgRElTUExBWSwgc28gYXMgYSBsYXN0IGRpdGNoIGVmZm9ydCwgbGV0cyBqdXN0IGxvb2sgZm9yIERJU1BMQVkKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxuID0gbGluZXNbbl0udHJpbSgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG4ubGVuZ3RoID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0RW52RnJvbVBpZChsbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5ESVNQTEFZKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHsgdHR5OiAnPycsIGRpc3BsYXk6IGUuRElTUExBWSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgJERJU1BMQVkgYnkgbG9va2luZyBhdCBhbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIHR0eSBhcyB0aGUgWFNlcnZlciBpbnN0YW5jZSBmb3IgdGhpcyB1c2VyIHNlc3Npb24KICAgICAgICAgICAgICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAtZSAtbyB0dHkgLW8gcGlkIC1vIHVzZXI6OTk5OSB8IGdyZXAgIiArIHJldC50dHkgKyAiIHwgZ3JlcCAiICsgdW5hbWUgKyAiIHwgYXdrICd7IHByaW50ICQyIH0nIFxuZXhpdFxuIik7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgICB2YXIgcHMsIHBzeCwgdiwgdnMgPSAwOwogICAgICAgICAgICAgICAgZm9yKHZhciB4IGluIGxpbmVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmKGxpbmVzW3hdLnRyaW0oKS5sZW5ndGg+MCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgbGluZXNbeF0udHJpbSgpICsgJy9lbnZpcm9uJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gocHNlKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihwc3g9MDtwc3g8cHMubGVuZ3RoOysrcHN4KQogICAgICAg", 16000); - memcpy_s(_monitorinfo + 32000, 1488, "ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNbcHN4XSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBwcy5zbGljZSh2cywgcHN4KS50b1N0cmluZygpLnNwbGl0KCc9Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZbMF0gPT0gJ0RJU1BMQVknKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LmRpc3BsYXkgPSB2WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzID0gcHN4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgfTsKICAgIH0KfQoKZnVuY3Rpb24gZXhwb3J0RW52KCkNCnsNCiAgICB2YXIgciA9DQogICAgICAgIHsNCiAgICAgICAgICAgIFhBVVRIT1JJVFk6IHRoaXMueGF1dGhvcml0eSwgRElTUExBWTogdGhpcy5kaXNwbGF5LA0KICAgICAgICAgICAgTG9jYXRpb25fWDExTElCOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5Mb2NhdGlvbl9YMTFMSUIsDQogICAgICAgICAgICBMb2NhdGlvbl9YMTFUU1Q6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLkxvY2F0aW9uX1gxMVRTVCwNCiAgICAgICAgICAgIExvY2F0aW9uX1gxMUVYVDogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTG9jYXRpb25fWDExRVhULA0KICAgICAgICAgICAgTG9jYXRpb25fWDExRklYRVM6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLkxvY2F0aW9uX1gxMUZJWEVTDQogICAgICAgIH07DQogICAgcmV0dXJuIChyKTsNCn0KCmlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKQp7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBtb25pdG9yaW5mbygpOwp9CgoK", 1488); - ILibBase64DecodeEx((unsigned char*)_monitorinfo, 33488, (unsigned char*)_monitorinfo + 33488); - 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 + 33488); + char *_monitorinfo = ILibMemory_Allocate(63806, 0, NULL, NULL); + memcpy_s(_monitorinfo + 0, 36460, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOwp2YXIgUFBvc2l0aW9uID0gNDsKdmFyIFBTaXplID0gODsKdmFyIFBNaW5TaXplID0gMSA8PCA0Owp2YXIgUE1heFNpemUgPSAxIDw8IDU7CnZhciBfTkVUX1dNX1NUQVRFX1JFTU9WRSA9IDA7ICAgIC8vIHJlbW92ZS91bnNldCBwcm9wZXJ0eQp2YXIgX05FVF9XTV9TVEFURV9BREQgPSAxOyAgICAvLyBhZGQvc2V0IHByb3BlcnR5CnZhciBfTkVUX1dNX1NUQVRFX1RPR0dMRSA9IDI7ICAgIC8vIHRvZ2dsZSBwcm9wZXJ0eQp2YXIgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrID0gKDEgPDwgMjApOwp2YXIgU3Vic3RydWN0dXJlTm90aWZ5TWFzayA9ICgxIDw8IDE5KTsKdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7CnZhciBYQV9BVE9NID0gNDsKdmFyIE1XTV9ISU5UU19GVU5DVElPTlMgPSAoMSA8PCAwKTsKdmFyIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICgxIDw8IDEpOwp2YXIgQ2xpZW50TWVzc2FnZSA9IDMzOwoKZnVuY3Rpb24gZ2V0TGliSW5mbyhsaWJuYW1lKQp7CiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnbGludXgnKSB7IHRocm93ICgnT25seSBzdXBwb3J0ZWQgb24gbGludXgnKTsgfQoKICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBsZGNvbmZpZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgIHZhciBsZGNvbmZpZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwoKICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKGxkY29uZmlnICsgIiAtcCB8IGdyZXAgJyIgKyBsaWJuYW1lICsgIi5zby4nXG5leGl0XG4iKTsKICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgdmFyIHYgPSBbXTsKICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICBmb3IgKHZhciBpIGluIGxpbmVzKSB7CiAgICAgICAgaWYgKGxpbmVzW2ldKSB7CiAgICAgICAgICAgIHZhciBpbmZvID0gbGluZXNbaV0uc3BsaXQoJz0+Jyk7CiAgICAgICAgICAgIHZhciBwdGggPSBpbmZvWzFdLnRyaW0oKTsKICAgICAgICAgICAgdmFyIGxpYmluZm8gPSBpbmZvWzBdLnRyaW0oKS5zcGxpdCgnICcpOwogICAgICAgICAgICB2YXIgbGliID0gbGliaW5mb1swXTsKICAgICAgICAgICAgdmFyIHBsYXQgPSBsaWJpbmZvWzFdLnN1YnN0cmluZygxLCBsaWJpbmZvWzFdLmxlbmd0aCAtIDEpLnNwbGl0KCcsJyk7CgogICAgICAgICAgICBpZiAobGliLnN0YXJ0c1dpdGgobGlibmFtZSArICcuc28uJykpIHsKICAgICAgICAgICAgICAgIHYucHVzaCh7IGxpYjogbGliLCBwYXRoOiBwdGgsIGluZm86IHBsYXQgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gKHYpOwp9CgpmdW5jdGlvbiBtb25pdG9yaW5mbygpCnsKICAgIHRoaXMuX09iamVjdElEID0gJ21vbml0b3ItaW5mbyc7CiAgICB0aGlzLl9nbSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOwoKICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpCiAgICB7CiAgICAgICAgdGhpcy5fdXNlcjMyID0gdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsKICAgICAgICB0aGlzLl91c2VyMzIuQ3JlYXRlTWV0aG9kKCdFbnVtRGlzcGxheU1vbml0b3JzJyk7CiAgICAgICAgdGhpcy5fa2VybmVsMzIgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7CiAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHZXRMYXN0RXJyb3InKTsKCiAgICAgICAgdGhpcy5nZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaW5mbyA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiAobmV3IHByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVyLCByZWplY3RvcikgewogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8gPSB7IHJlc29sdmVyOiByZXNvbHZlciwgcmVqZWN0b3I6IHJlamVjdG9yLCBzZWxmOiBpbmZvLCBjYWxsYmFjazogaW5mby5fZ20uR2V0R2VuZXJpY0dsb2JhbENhbGxiYWNrKDQpIH07CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5pbmZvID0gdGhpcy5fbW9uaXRvcmluZm87CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5kd0RhdGEgPSBpbmZvLl9nbS5PYmplY3RUb1B0cih0aGlzLl9tb25pdG9yaW5mbyk7CgogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2sucmVzdWx0cyA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2sub24oJ0dsb2JhbENhbGxiYWNrJywgZnVuY3Rpb24gT25Nb25pdG9ySW5mbyhobW9uLCBoZGMsIHIsIHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5PYmplY3RUb1B0cl9WZXJpZnkodGhpcy5pbmZvLCB1c2VyKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmIgPSByLkRlcmVmKDAsIDE2KS50b0J1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaCh7IGxlZnQ6IHJiLnJlYWRJbnQzMkxFKDApLCB0b3A6IHJiLnJlYWRJbnQzMkxFKDQpLCByaWdodDogcmIucmVhZEludDMyTEUoOCksIGJvdHRvbTogcmIucmVhZEludDMyTEUoMTIpIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLmluZm8uc2VsZi5fZ20uQ3JlYXRlSW50ZWdlcigpOwogICAgICAgICAgICAgICAgICAgICAgICByLlZhbCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKGluZm8uX3VzZXIzMi5FbnVtRGlzcGxheU1vbml0b3JzKDAsIDAsIHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLCB0aGlzLl9tb25pdG9yaW5mby5kd0RhdGEpLlZhbCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmVqZWN0b3IoJ0xhc3RFcnJvcj0nICsgaW5mby5fa2VybmVsMzIuR2V0TGFzdEVycm9yKCkuVmFsKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXNvbHZlcih0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5yZXN1bHRzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykKICAgIHsKICAgICAgICAvLyBGaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvLCBpcyBkZXRlcm1pbmUgd2hlcmUgdGhlIFgxMSBsaWJyYXJpZXMgYXJlCiAgICAgICAgdmFyIGFza09TID0gZmFsc2U7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBpZiAocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmlzUm9vdCgpKSB7IGFza09TID0gdHJ1ZTsgfQogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkKICAgICAgICB7IH0KCiAgICAgICAgaWYgKGFza09TKQogICAgICAgIHsKICAgICAgICAgICAgLy8gU3VmZmljaWVudCBhY2Nlc3MgcmlnaHRzIHRvIHVzZSBsZGNvbmZpZwogICAgICAgICAgICB2YXIgeDExaW5mbyA9IGdldExpYkluZm8oJ2xpYlgxMScpOwogICAgICAgICAgICB2YXIgeHRzdGluZm8gPSBnZXRMaWJJbmZvKCdsaWJYdHN0Jyk7CiAgICAgICAgICAgIHZhciB4ZXh0aW5mbyA9IGdldExpYkluZm8oJ2xpYlhleHQnKTsKICAgICAgICAgICAgdmFyIHhmaXhlc2luZm8gPSBnZXRMaWJJbmZvKCdsaWJYZml4ZXMnKTsKICAgICAgICAgICAgdmFyIGl4OwoKICAgICAgICAgICAgZm9yKGl4IGluIHgxMWluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHgxMWluZm9baXhdLnBhdGgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogeDExaW5mb1tpeF0ucGF0aCB9KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoKGV4KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaXggaW4geHRzdGluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHh0c3RpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHh0c3RpbmZvW2l4XS5wYXRoIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGV4KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaXggaW4geGV4dGluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHhleHRpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHhleHRpbmZvW2l4XS5wYXRoIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGV4KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaXggaW4geGZpeGVzaW5mbykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeGZpeGVzaW5mb1tpeF0ucGF0aCk7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHhmaXhlc2luZm9baXhdLnBhdGggfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgLy8gTm90IGVub3VnaCBhY2Nlc3MgcmlnaHRzIHRvIHVzZSBsZGNvbmZpZywgc28gbWFudWFsbHkgc2VhcmNoCiAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7CiAgICAgICAgICAgIHZhciBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKCcvdXNyL2xpYicpOwogICAgICAgICAgICB2YXIgZmlsZXMyOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7ICsraSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnbGliWDExLnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXNbaV0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlTmF0aXZlUHJveHkoJy91c3IvbGliLycgKyBmaWxlc1tpXSk7DQogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gfSk7DQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXNbaV0uc3BsaXQoJ2xpYlh0c3Quc28uJykubGVuZ3RoID4gMSAmJiBmaWxlc1tpXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVOYXRpdmVQcm94eSgnL3Vzci9saWIvJyArIGZpbGVzW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnbGliWGV4dC5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzW2ldLnNwbGl0KCcuJykubGVuZ3RoID09IDMpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZU5hdGl2ZVByb3h5KCcvdXNyL2xpYi8nICsgZmlsZXNbaV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldIH0pOw0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzW2ldLnNwbGl0KCdsaWJYZml4ZXMuc28uJykubGVuZ3RoID4gMSAmJiBmaWxlc1tpXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVOYXRpdmVQcm94eSgnL3Vzci9saWIvJyArIGZpbGVzW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldIH0pOw0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5zcGxpdCgnLWxpbnV4LScpLmxlbmd0aCA+IDEpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzMiA9IGZzLnJlYWRkaXJTeW5jKCcvdXNyL2xpYi8nICsgZmlsZXNbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZmlsZXMyLmxlbmd0aDsgKytqKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlgxMS5zby4nKS5sZW5ndGggPiAxICYmIGZpbGVzMltqXS5zcGxpdCgnLicpLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLkNyZWF0ZU5hdGl2ZVByb3h5KCcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoICh4eCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiAnL3Vzci9saWIvJyArIGZpbGVzW2ldICsgJy8nICsgZmlsZXMyW2pdIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlczJbal0uc3BsaXQoJ2xpYlh0c3Quc28uJykubGVuZ3RoID4gMSAmJiBmaWxlczJbal0uc3BsaXQoJy4nKS5sZW5ndGggPT0gMykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVOYXRpdmVQcm94eSgnL3Vzci9saWIvJyArIGZpbGVzW2ldICsgJy8nICsgZmlsZXMyW2pdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoeHgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZXMyW2pdLnNwbGl0KCdsaWJYZXh0LnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXMyW2pdLnNwbGl0KCcuJykubGVuZ3RoID09IDMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlTmF0aXZlUHJveHkoJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHh4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6ICcvdXNyL2xpYi8nICsgZmlsZXNbaV0gKyAnLycgKyBmaWxlczJbal0gfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzMltqXS5zcGxpdCgnbGliWGZpeGVzLnNvLicpLmxlbmd0aCA+IDEgJiYgZmlsZXMyW2pdLnNwbGl0KCcuJykubGVuZ3RoID09IDMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlTmF0aXZlUHJveHkoJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHh4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUZJWEVTJywgeyB2YWx1ZTogJy91c3IvbGliLycgKyBmaWxlc1tpXSArICcvJyArIGZpbGVzMltqXSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkgeyB9DQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMUxJQiddKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogcHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMUxJQiddIH0pOyB9CiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExVFNUJ10pIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFUU1QnLCB7IHZhbHVlOiBwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExVFNUJ10gfSk7IH0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFFWFQnXSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFFWFQnXSB9KTsgfQogICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMUZJWEVTJ10pIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFGSVhFUyddIH0pOyB9CiAgICAgICAgfQogICAgfQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICB7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlgxMScpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWDExJylbMF0ubG9jYXRpb246IHVuZGVmaW5lZCB9KTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdP3JlcXVpcmUoJ2xp", 16000); + memcpy_s(_monitorinfo + 16000, 20460, "Yi1maW5kZXInKSgnbGliWHRzdCcpWzBdLmxvY2F0aW9uOnVuZGVmaW5lZCB9KTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGV4dCcpWzBdID8gcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYZXh0JylbMF0ubG9jYXRpb24gOiB1bmRlZmluZWQgfSk7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGZpeGVzJylbMF0gPyByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhmaXhlcycpWzBdLmxvY2F0aW9uIDogdW5kZWZpbmVkIH0pOwogICAgfQoKICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJykKICAgIHsKICAgICAgICB0aGlzLk1PVElGX0ZMQUdTID0gCiAgICAgICAgewogICAgICAgICAgICBNV01fRlVOQ19BTEwgICAgICAgIDogKDEgPDwgMCkgLAogICAgICAgICAgICBNV01fRlVOQ19SRVNJWkUgICAgIDogKDEgPDwgMSkgLAogICAgICAgICAgICBNV01fRlVOQ19NT1ZFICAgICAgIDogKDEgPDwgMikgLAogICAgICAgICAgICBNV01fRlVOQ19NSU5JTUlaRSAgIDogKDEgPDwgMykgLAogICAgICAgICAgICBNV01fRlVOQ19NQVhJTUlaRSAgIDogKDEgPDwgNCkgLAogICAgICAgICAgICBNV01fRlVOQ19DTE9TRSAgICAgIDogKDEgPDwgNSkgCiAgICAgICAgfTsKCgogICAgICAgIGlmICh0aGlzLkxvY2F0aW9uX1gxMUxJQiAmJiB0aGlzLkxvY2F0aW9uX1gxMVRTVCAmJiB0aGlzLkxvY2F0aW9uX1gxMUVYVCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uICgpIHsgfSk7CiAgICAgICAgICAgIGNoLnN0ZG91dC5zdHIgPSAnJzsgY2guc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3BzIC1lIHwgZ3JlcCBYXG5leGl0XG4nKTsKICAgICAgICAgICAgY2gud2FpdEV4aXQoKTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrdm1feDExX3N1cHBvcnQnLCB7IHZhbHVlOiBjaC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IGZhbHNlIDogdHJ1ZSB9KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrdm1feDExX3N1cHBvcnQnLCB7IHZhbHVlOiBmYWxzZSB9KTsKICAgICAgICB9CgoKICAgICAgICBpZiAodGhpcy5Mb2NhdGlvbl9YMTFMSUIpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLl9YMTEgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSh0aGlzLkxvY2F0aW9uX1gxMUxJQik7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDaGFuZ2VQcm9wZXJ0eScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ2xvc2VEaXNwbGF5Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDb25uZWN0aW9uTnVtYmVyJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDb252ZXJ0U2VsZWN0aW9uJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVHQycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlV2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVTaW1wbGVXaW5kb3cnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlZmF1bHRDb2xvcm1hcCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVmYXVsdFNjcmVlbicpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVzdHJveVdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRHJhd0xpbmUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERpc3BsYXlIZWlnaHQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERpc3BsYXlXaWR0aCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRmV0Y2hOYW1lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hGbHVzaCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRnJlZScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlR0MnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEdldEF0b21OYW1lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hHZXRXaW5kb3dQcm9wZXJ0eScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYSW50ZXJuQXRvbScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYTWFwV2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoeyBtZXRob2Q6ICdYTmV4dEV2ZW50JywgdGhyZWFkRGlzcGF0Y2g6IHRydWUgfSk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoeyBtZXRob2Q6ICdYTmV4dEV2ZW50JywgbmV3TmFtZTogJ1hOZXh0RXZlbnRTeW5jJyB9KTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWE9wZW5EaXNwbGF5Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hQZW5kaW5nJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hSb290V2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZWxlY3RJbnB1dCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2NyZWVuQ291bnQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNjcmVlbk9mRGlzcGxheScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2VsZWN0SW5wdXQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNlbmRFdmVudCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0Rm9yZWdyb3VuZCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0RnVuY3Rpb24nKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldExpbmVBdHRyaWJ1dGVzJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXROb3JtYWxIaW50cycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0U2VsZWN0aW9uT3duZXInKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFN1YndpbmRvd01vZGUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFdNUHJvdG9jb2xzJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTdG9yZU5hbWUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFN5bmMnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEJsYWNrUGl4ZWwnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFdoaXRlUGl4ZWwnKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuaXNVbml0eSA9IGZ1bmN0aW9uIGlzVW5pdHkoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIChwcm9jZXNzLmVudlsnWERHX0NVUlJFTlRfREVTS1RPUCddID09ICdVbml0eScpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy51bkRlY29yYXRlV2luZG93ID0gZnVuY3Rpb24gdW5EZWNvcmF0ZVdpbmRvdyhkaXNwbGF5LCB3aW5kb3cpCiAgICAgICAgewogICAgICAgICAgICB2YXIgTXdtSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg0MCk7CiAgICAgICAgICAgIHZhciBtd21IaW50c1Byb3BlcnR5ID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTU9USUZfV01fSElOVFMnKSwgMCk7CiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgxIDw8IDEpOwogICAgICAgICAgICB0aGlzLl9YMTEuWENoYW5nZVByb3BlcnR5KGRpc3BsYXksIHdpbmRvdywgbXdtSGludHNQcm9wZXJ0eSwgbXdtSGludHNQcm9wZXJ0eSwgMzIsIDAsIE13bUhpbnRzLCA1KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZXRBbGxvd2VkQWN0aW9ucyA9IGZ1bmN0aW9uIHNldEFsbG93ZWRBY3Rpb25zKGRpc3BsYXksIHdpbmRvdywgZmxhZ3MpCiAgICAgICAgewogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgTVdNX0hJTlRTX0ZVTkNUSU9OUyA9ICgxTCA8PCAwKSwKICAgICAgICAgICAgICAgIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICAoMUwgPDwgMSksCgogICAgICAgICAgICAgICAgTVdNX0ZVTkNfQUxMID0gKDFMIDw8IDApLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfUkVTSVpFID0gKDFMIDw8IDEpLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTU9WRSA9ICgxTCA8PCAyKSwKICAgICAgICAgICAgICAgIE1XTV9GVU5DX01JTklNSVpFID0gKDFMIDw8IDMpLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTUFYSU1JWkUgPSAoMUwgPDwgNCksCiAgICAgICAgICAgICAgICBNV01fRlVOQ19DTE9TRSA9ICgxTCA8PCA1KQogICAgICAgICAgICAqLwoKICAgICAgICAgICAgdmFyIE13bUhpbnRzID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoNDApOwogICAgICAgICAgICB2YXIgbXdtSGludHNQcm9wZXJ0eSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX01PVElGX1dNX0hJTlRTJyksIDApOwoKICAgICAgICAgICAgTXdtSGludHMuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKE1XTV9ISU5UU19GVU5DVElPTlMpOwogICAgICAgICAgICBNd21IaW50cy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOwoKICAgICAgICAgICAgdGhpcy5fWDExLlhDaGFuZ2VQcm9wZXJ0eShkaXNwbGF5LCB3aW5kb3csIG13bUhpbnRzUHJvcGVydHksIG13bUhpbnRzUHJvcGVydHksIDMyLCBQcm9wTW9kZVJlcGxhY2UsIE13bUhpbnRzLCA1KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZXRXaW5kb3dTaXplSGludHMgPSBmdW5jdGlvbiBzZXRXaW5kb3dTaXplSGludHMoZGlzcGxheSwgd2luZG93LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5XaWR0aCwgbWluSGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0KQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHNpemVIaW50cyA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDgwKTsKICAgICAgICAgICAgdmFyIHNwZWMgPSBQUG9zaXRpb24gfCBQU2l6ZTsKICAgICAgICAgICAgaWYgKG1pbldpZHRoICE9IG51bGwgJiYgbWluSGVpZ2h0ICE9IG51bGwpIHsgc3BlYyB8PSBQTWluU2l6ZTsgfQogICAgICAgICAgICBpZiAobWF4V2lkdGggIT0gbnVsbCAmJiBtYXhIZWlnaHQgIT0gbnVsbCkgeyBzcGVjIHw9IFBNYXhTaXplOyB9CgogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHNwZWMpOwogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHgpOwogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoMTIsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh5KTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDE2LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUod2lkdGgpOwogICAgICAgICAgICBzaXplSGludHMuRGVyZWYoMjAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShoZWlnaHQpOwogICAgICAgICAgICBpZiAobWluV2lkdGggIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYoMjQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShtaW5XaWR0aCk7IH0KICAgICAgICAgICAgaWYgKG1pbkhlaWdodCAhPSBudWxsKSB7IHNpemVIaW50cy5EZXJlZigyOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1pbkhlaWdodCk7IH0KICAgICAgICAgICAgaWYgKG1heFdpZHRoICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKDMyLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWF4V2lkdGgpOyB9CiAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYoMzYsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShtYXhIZWlnaHQpOyB9CgogICAgICAgICAgICB0aGlzLl9YMTEuWFNldE5vcm1hbEhpbnRzKGRpc3BsYXksIHdpbmRvdywgc2l6ZUhpbnRzKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZXRBbHdheXNPblRvcCA9IGZ1bmN0aW9uIHNldEFsd2F5c09uVG9wKGRpc3BsYXksIHJvb3RXaW5kb3csIHdpbmRvdykKICAgICAgICB7CiAgICAgICAgICAgIHZhciB3bU5ldFdtU3RhdGUgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEUnKSwgMSk7CiAgICAgICAgICAgIHZhciB3bVN0YXRlQWJvdmUgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEVfQUJPVkUnKSwgMSk7CgogICAgICAgICAgICB2YXIgeGNsaWVudCA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDk2KTsKICAgICAgICAgICAgeGNsaWVudC5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzMpOyAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRNZXNzYWdlIHR5cGUKICAgICAgICAgICAgeGNsaWVudC5EZXJlZig0OCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMyKTsgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgMzIKICAgICAgICAgICAgd21OZXRXbVN0YXRlLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoNDAsIDgpLnRvQnVmZmVyKCkpOyAvLyBtZXNzYWdlX3R5cGUKICAgICAgICAgICAgeGNsaWVudC5EZXJlZig1NiwgOCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKF9ORVRfV01fU1RBVEVfQUREKTsgICAvLyBkYXRhLmxbMF0KICAgICAgICAgICAgd21TdGF0ZUFib3ZlLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoNjQsIDgpLnRvQnVmZmVyKCkpOyAvLyBkYXRhLmxbMV0KCiAgICAgICAgICAgIHdpbmRvdy5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDMyLCA4KS50b0J1ZmZlcigpKTsgICAgICAgLy8gd2luZG93CiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2VuZEV2ZW50KGRpc3BsYXksIHJvb3RXaW5kb3csIDAsIFN1YnN0cnVjdHVyZVJlZGlyZWN0TWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2ssIHhjbGllbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmhpZGVXaW5kb3dJY29uID0gZnVuY3Rpb24gaGlkZVdpbmRvd0ljb24oZGlzcGxheSwgcm9vdFdpbmRvdywgd2luZG93KQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHdtTmV0V21TdGF0ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURScpLCAxKTsKICAgICAgICAgICAgdmFyIHdtU3RhdGVTa2lwID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFX1NLSVBfVEFTS0JBUicpLCAxKTsKCiAgICAgICAgICAgIHZhciB4Y2xpZW50ID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoOTYpOwogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMyk7ICAgICAgICAgICAgICAgICAgIC8vIENsaWVudE1lc3NhZ2UgdHlwZQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDQ4LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzIpOyAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCAzMgogICAgICAgICAgICB3bU5ldFdtU3RhdGUucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZig0MCwgOCkudG9CdWZmZXIoKSk7IC8vIG1lc3NhZ2VfdHlwZQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDU2LCA4KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoX05FVF9XTV9TVEFURV9BREQpOyAgIC8vIGRhdGEubFswXQogICAgICAgICAgICB3bVN0YXRlU2tpcC5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKDY0LCA4KS50b0J1ZmZlcigpKTsgIC8vIGRhdGEubFsxXQoKICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYoMzIsIDgpLnRvQnVmZmVyKCkpOyAgICAgICAvLyB3aW5kb3cKICAgICAgICAgICAgdGhpcy5fWDExLlhTZW5kRXZlbnQoZGlzcGxheSwgcm9vdFdpbmRvdywgMCwgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzaywgeGNsaWVudCk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBpbmZvID0gdGhpczsKICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7CiAgICAgICAgICAgIHJldC5wYXJlbnQgPSB0aGlzOwoKICAgICAgICAgICAgaWYgKCFwcm9jZXNzLmVudi5YQVVUSE9SSVRZIHx8ICFwcm9jZXNzLmVudi5ESVNQTEFZKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgeGluZm8gPSB0aGlzLmdldFhJbmZvKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRVaWQocmVxdWlyZSgndXNlci1zZXNzaW9ucycpLndob2FtaSgpKSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzLnNldGVudignWEFVVEhPUklUWScsIHhpbmZvLnhhdXRob3JpdHkpOwogICAgICAgICAgICAgICAgcHJvY2Vzcy5zZXRlbnYoJ0RJU1BMQVknLCB4aW5mby5kaXNwbGF5KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBpbmZvLl9YMTEuWE9wZW5EaXNwbGF5KGluZm8uX2dtLkNyZWF0ZVZhcmlhYmxlKHByb2Nlc3MuZW52LkRJU1BMQVkpKTsKICAgICAgICAgICAgaWYgKGRpc3BsYXkuVmFsID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykud3JpdGVGaWxlU3luYygnL3Zhci90bXAvYWdlbnRTbGF2ZScsICdYT3BlbkRpc3BsYXkgRmFpbGVkJywgeyBmbGFnczogJ2EnIH0pOwogICAgICAgICAgICAgICAgcmV0Ll9yZWooJ1hPcGVuRGlzcGxheSBGYWlsZWQnKTsKICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHNjcmVlbkNvdW50ID0gaW5mby5fWDExLlhTY3JlZW5Db3VudChkaXNwbGF5KS5WYWw7CiAgICAgICAgICAgIHZhciBpZm8gPSBbXTsKICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxzY3JlZW5Db3VudDsrK2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBzY3JlZW4gPSBpbmZvLl9YMTEuWFNjcmVlbk9mRGlzcGxheShkaXNwbGF5LCBpKTsKICAgICAgICAgICAgICAgIGlmby5wdXNoKHsgbGVmdDogMCwgdG9wOiAwLCByaWdodDogaW5mby5fWDExLlhEaXNwbGF5V2lkdGgoZGlzcGxheSwgaSkuVmFsLCBib3R0b206IGluZm8uX1gxMS5YRGlzcGxheUhlaWdodChkaXNwbGF5LCBpKS5WYWwsIHNjcmVlbjogc2NyZWVuLCBzY3JlZW5JZDogaSwgZGlzcGxheTogZGlzcGxheSB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXQuX3JlcyhpZm8pOwoKICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmdldFhJbmZvID0gZnVuY3Rpb24gZ2V0WEluZm8oY29uc29sZXVpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciByZXQgPSBudWxsOwogICAgICAgICAgICB2YXIgdW5hbWUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0VXNlcm5hbWUoY29uc29sZXVpZCk7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHMgIiArIChwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJz8iLWF4ICI6IiIpICsgIi1lIC1vIHVzZXIiICsgKHByb2Nlc3MucGxhdGZvcm09PSdsaW51eCc/Ijo5OTkiOiIiKSArICIgLW8gdHR5IC1vIGNvbW1hbmQgfCBncmVwIFggfCBhd2sgJ3sgc3BsaXQoJDAsIGEsIFwiLWF1dGhcIik7IHNwbGl0KGFbMl0sIGIsIFwiIFwiKTsgaWYoJDE9PVwiIiArIHVuYW1lICsgIlwiICYmIGJbMV0hPVwiXCIpIHsgcHJpbnRmIFwiJXMsJXMsJXNcIiwkMSwkMixiWzFdIH0gfSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICB2YXIgdG9rZW5zID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkuc3BsaXQoJywnKTsKICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT0gMykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0ID0geyB0dHk6IHRva2Vuc1sxXSwgeGF1dGhvcml0eTogdG9rZW5zWzJdLCBleHBvcnRFbnY6IGV4cG9ydEVudiB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAocmV0ID09IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgTGludXggRGlzdHJvIGRvZXMgbm90IHNwYXduIGFuIFhTZXJ2ZXIgaW5zdGFuY2UgaW4gdGhlIHVzZXIgc2Vzc2lvbiwgdGhhdCBzcGVjaWZpZXMgdGhlIFhBVVRIT1JJVFkuCiAgICAgICAgICAgICAgICAvLyBTbyB3ZSdyZSBnb2luZyB0byBicnV0ZSBmb3JjZSBpdCwgYnkgZW51bWVyYXRpbmcgYWxsIHByb2Nlc3NlcyBvd25lZCBieSB0aGlzIHVzZXIsIGFuZCBpbnNwZWN0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgicHMgIiArIChwcm9jZXNzLnBsYXRmb3JtPT0nZnJlZWJzZCc/Ii1heCAiOiIiKSArICItZSAtbyBwaWQgLW8gdXNlciB8IGdyZXAgIiArIHVuYW1lICsgIiB8IGF3ayAneyBwcmludCAkMSB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgICBmb3IodmFyIG4gaW4gbGluZXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxuID0gbGluZXNbbl0udHJpbSgpOwogICAgICAgICAgICAgICAgICAgIGlmKGxuLmxlbmd0aD4wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0RW52RnJvbVBpZChsbik7CiAgICAgICAgICAgICAgICAgICAg", 16000); + memcpy_s(_monitorinfo + 32000, 4460, "ICAgIGlmKGUuWEFVVEhPUklUWSAmJiBlLkRJU1BMQVkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHsgdHR5OiAnPycsIHhhdXRob3JpdHk6IGUuWEFVVEhPUklUWSwgZGlzcGxheTogZS5ESVNQTEFZLCBleHBvcnRFbnY6IGV4cG9ydEVudiB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYocmV0ID09IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBYQVVUSE9SSVRZIGFuZCBESVNQTEFZLCBzbyBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LCBsZXRzIGp1c3QgbG9vayBmb3IgRElTUExBWQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gbGluZXMpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsbi5sZW5ndGggPiAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRFbnZGcm9tUGlkKGxuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLkRJU1BMQVkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0geyB0dHk6ICc/JywgZGlzcGxheTogZS5ESVNQTEFZLCBleHBvcnRFbnY6IGV4cG9ydEVudiB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZmluZCAkRElTUExBWSBieSBsb29raW5nIGF0IGFsbCB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgdHR5IGFzIHRoZSBYU2VydmVyIGluc3RhbmNlIGZvciB0aGlzIHVzZXIgc2Vzc2lvbgogICAgICAgICAgICAgICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzIC1lIC1vIHR0eSAtbyBwaWQgLW8gdXNlcjo5OTk5IHwgZ3JlcCAiICsgcmV0LnR0eSArICIgfCBncmVwICIgKyB1bmFtZSArICIgfCBhd2sgJ3sgcHJpbnQgJDIgfScgXG5leGl0XG4iKTsKICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CgogICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgICAgIHZhciBwcywgcHN4LCB2LCB2cyA9IDA7CiAgICAgICAgICAgICAgICBmb3IodmFyIHggaW4gbGluZXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYobGluZXNbeF0udHJpbSgpLmxlbmd0aD4wKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzID0gcmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoJy9wcm9jLycgKyBsaW5lc1t4XS50cmltKCkgKyAnL2Vudmlyb24nKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChwc2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZzID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHBzeD0wO3BzeDxwcy5sZW5ndGg7Kytwc3gpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwc1twc3hdID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHBzLnNsaWNlKHZzLCBwc3gpLnRvU3RyaW5nKCkuc3BsaXQoJz0nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodlswXSA9PSAnRElTUExBWScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuZGlzcGxheSA9IHZbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnMgPSBwc3ggKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9OwogICAgfQp9CgpmdW5jdGlvbiBleHBvcnRFbnYoKQ0Kew0KICAgIHZhciByID0NCiAgICAgICAgew0KICAgICAgICAgICAgWEFVVEhPUklUWTogdGhpcy54YXV0aG9yaXR5LCBESVNQTEFZOiB0aGlzLmRpc3BsYXksDQogICAgICAgICAgICBMb2NhdGlvbl9YMTFMSUI6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLkxvY2F0aW9uX1gxMUxJQiwNCiAgICAgICAgICAgIExvY2F0aW9uX1gxMVRTVDogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTG9jYXRpb25fWDExVFNULA0KICAgICAgICAgICAgTG9jYXRpb25fWDExRVhUOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5Mb2NhdGlvbl9YMTFFWFQsDQogICAgICAgICAgICBMb2NhdGlvbl9YMTFGSVhFUzogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTG9jYXRpb25fWDExRklYRVMNCiAgICAgICAgfTsNCiAgICByZXR1cm4gKHIpOw0KfQoKaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2RhcndpbicpCnsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1vbml0b3JpbmZvKCk7Cn0KCgo=", 4460); + ILibBase64DecodeEx((unsigned char*)_monitorinfo, 36460, (unsigned char*)_monitorinfo + 36460); + 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 + 36460); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_monitorinfo); diff --git a/modules/monitor-info.js b/modules/monitor-info.js index 6e7c86c..2b47f13 100644 --- a/modules/monitor-info.js +++ b/modules/monitor-info.js @@ -185,36 +185,82 @@ function monitorinfo() var files = fs.readdirSync('/usr/lib'); var files2; - for (var i in files) { - try { - if (files[i].split('libX11.so.').length > 1 && files[i].split('.').length == 3) { + for (var i = 0; i < files.length; ++i) + { + try + { + if (files[i].split('libX11.so.').length > 1 && files[i].split('.').length == 3) + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i]); Object.defineProperty(this, 'Location_X11LIB', { value: '/usr/lib/' + files[i] }); } - if (files[i].split('libXtst.so.').length > 1 && files[i].split('.').length == 3) { + if (files[i].split('libXtst.so.').length > 1 && files[i].split('.').length == 3) + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i]); Object.defineProperty(this, 'Location_X11TST', { value: '/usr/lib/' + files[i] }); } - if (files[i].split('libXext.so.').length > 1 && files[i].split('.').length == 3) { + if (files[i].split('libXext.so.').length > 1 && files[i].split('.').length == 3) + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i]); Object.defineProperty(this, 'Location_X11EXT', { value: '/usr/lib/' + files[i] }); } if (files[i].split('libXfixes.so.').length > 1 && files[i].split('.').length == 3) { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i]); Object.defineProperty(this, 'Location_X11FIXES', { value: '/usr/lib/' + files[i] }); } - if (files[i].split('-linux-').length > 1) { + if (files[i].split('-linux-').length > 1) + { files2 = fs.readdirSync('/usr/lib/' + files[i]); - for (j in files2) { - if (files2[j].split('libX11.so.').length > 1 && files2[j].split('.').length == 3) { + for (j = 0; j < files2.length; ++j) + { + if (files2[j].split('libX11.so.').length > 1 && files2[j].split('.').length == 3) + { + try + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i] + '/' + files2[j]); + } + catch (xx) + { + break; + } Object.defineProperty(this, 'Location_X11LIB', { value: '/usr/lib/' + files[i] + '/' + files2[j] }); } - if (files2[j].split('libXtst.so.').length > 1 && files2[j].split('.').length == 3) { + if (files2[j].split('libXtst.so.').length > 1 && files2[j].split('.').length == 3) + { + try + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i] + '/' + files2[j]); + } + catch (xx) + { + break; + } Object.defineProperty(this, 'Location_X11TST', { value: '/usr/lib/' + files[i] + '/' + files2[j] }); } - if (files2[j].split('libXext.so.').length > 1 && files2[j].split('.').length == 3) { + if (files2[j].split('libXext.so.').length > 1 && files2[j].split('.').length == 3) + { + try + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i] + '/' + files2[j]); + } + catch (xx) + { + break; + } Object.defineProperty(this, 'Location_X11EXT', { value: '/usr/lib/' + files[i] + '/' + files2[j] }); } if (files2[j].split('libXfixes.so.').length > 1 && files2[j].split('.').length == 3) { + try + { + require('_GenericMarshal').CreateNativeProxy('/usr/lib/' + files[i] + '/' + files2[j]); + } + catch (xx) + { + break; + } Object.defineProperty(this, 'Location_X11FIXES', { value: '/usr/lib/' + files[i] + '/' + files2[j] }); } }