diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 71ee833..7368361 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2090,11 +2090,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addModule('http-digest', Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCnZhciB3cml0YWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLldyaXRhYmxlOw0KdmFyIG1kNSA9IHJlcXVpcmUoJ01ENVN0cmVhbScpLmNyZWF0ZSgpOw0KDQpmdW5jdGlvbiBjaGVja0V2ZW50Rm9yd2FyZGluZyhkaWdlc3RSZXF1ZXN0LCBldmVudE5hbWUpDQp7DQogICAgaWYgKGRpZ2VzdFJlcXVlc3QubGlzdGVuZXJDb3VudChldmVudE5hbWUpID4gMCkNCiAgICB7DQogICAgICAgIHZhciBlRm9yd2FyZCA9IGZ1bmN0aW9uIF9lRm9yd2FyZCgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBwID0gW2VGb3J3YXJkLl9ldmVudE5hbWVdOw0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsgcC5wdXNoKGFyZ3VtZW50c1tpXSk7IH0NCiAgICAgICAgICAgIF9lRm9yd2FyZC5fZGlnZXN0UmVxdWVzdC5lbWl0LmFwcGx5KF9lRm9yd2FyZC5fZGlnZXN0UmVxdWVzdCwgcCk7DQogICAgICAgIH07DQogICAgICAgIGVGb3J3YXJkLl9ldmVudE5hbWUgPSBldmVudE5hbWU7DQogICAgICAgIGVGb3J3YXJkLl9kaWdlc3RSZXF1ZXN0ID0gZGlnZXN0UmVxdWVzdDsNCiAgICAgICAgZGlnZXN0UmVxdWVzdC5fcmVxdWVzdC5vbihldmVudE5hbWUsIGVGb3J3YXJkKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGdlbmVyYXRlQXV0aEhlYWRlcnMoaW1zZywgb3B0aW9ucywgZGlnZXN0KQ0Kew0KICAgIHZhciBhdXRoOw0KDQogICAgaWYgKGltc2cgIT0gbnVsbCkNCiAgICB7DQogICAgICAgIGF1dGggPSB7IHJlYWxtOiBudWxsLCBub25jZTogbnVsbCwgb3BhcXVlOiBudWxsLCBxb3A6IG51bGwgfTsNCiAgICAgICAgdmFyIHd3dyA9IGltc2cuaGVhZGVyc1snV1dXLUF1dGhlbnRpY2F0ZSddOw0KICAgICAgICB2YXIgdG9rZW5zID0gd3d3LnNwbGl0KCcsJyk7DQoNCiAgICAgICAgdmFyIHBhaXJzOw0KICAgICAgICBmb3IgKHZhciBpIGluIHRva2VucykNCiAgICAgICAgew0KICAgICAgICAgICAgcGFpcnMgPSB0b2tlbnNbaV0uc3BsaXQoJz0nKTsNCiAgICAgICAgICAgIGlmIChwYWlycy5sZW5ndGggPT0gMikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhaXJzWzBdLnRvTG93ZXJDYXNlKCkudHJpbSgpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGlnZXN0IHJlYWxtJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgucmVhbG0gPSBwYWlyc1sxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRoLnJlYWxtWzBdID09ICciJykgeyBhdXRoLnJlYWxtID0gYXV0aC5yZWFsbS5zdWJzdHJpbmcoMSwgYXV0aC5yZWFsbS5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vbmNlJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgubm9uY2UgPSBwYWlyc1sxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRoLm5vbmNlWzBdID09ICciJykgeyBhdXRoLm5vbmNlID0gYXV0aC5ub25jZS5zdWJzdHJpbmcoMSwgYXV0aC5ub25jZS5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ29wYXF1ZSc6DQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLm9wYXF1ZSA9IHBhaXJzWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGgub3BhcXVlWzBdID09ICciJykgeyBhdXRoLm9wYXF1ZSA9IGF1dGgub3BhcXVlLnN1YnN0cmluZygxLCBhdXRoLm9wYXF1ZS5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3FvcCc6DQogICAgICAgICAgICAgICAgICAgICAgICBhdXRoLnFvcCA9IHBhaXJzWzFdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGgucW9wWzBdID09ICciJykgeyBhdXRoLnFvcCA9IGF1dGgucW9wLnN1YnN0cmluZygxLCBhdXRoLnFvcC5sZW5ndGggLSAxKTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGRpZ2VzdC5fYXV0aCA9IGF1dGg7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlmICghKGF1dGggPSBkaWdlc3QuX2F1dGgpKSB7IHJldHVybjsgfQ0KICAgIH0NCg0KICAgIHZhciBzdGVwMSA9IGRpZ2VzdC5fb3B0aW9ucy51c2VybmFtZSArICc6JyArIGF1dGgucmVhbG0gKyAnOicgKyBkaWdlc3QuX29wdGlvbnMucGFzc3dvcmQ7DQogICAgYXV0aC5zdGVwMSA9IG1kNS5zeW5jSGFzaChzdGVwMSkudG9TdHJpbmcoJ2hleCcpLnRvTG93ZXJDYXNlKCk7DQoNCiAgICB2YXIgc3RlcDIgPSBvcHRpb25zLm1ldGhvZCArICc6JyArIG9wdGlvbnMucGF0aDsNCiAgICBhdXRoLnN0ZXAyID0gbWQ1LnN5bmNIYXNoKHN0ZXAyKS50b1N0cmluZygnaGV4JykudG9Mb3dlckNhc2UoKTsNCg0KDQogICAgaWYgKGF1dGgucW9wID09IG51bGwpDQogICAgew0KICAgICAgICB2YXIgc3RlcDMgPSBhdXRoLnN0ZXAxICsgJzonICsgYXV0aC5ub25jZSArICc6JyArIGF1dGguc3RlcDI7DQogICAgICAgIGF1dGguc3RlcDMgPSBtZDUuc3luY0hhc2goc3RlcDMpLnRvU3RyaW5nKCdoZXgnKS50b0xvd2VyQ2FzZSgpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBkaWdlc3QuX05DICs9IDE7DQogICAgICAgIHZhciBzdGVwMyA9IGF1dGguc3RlcDEgKyAnOicgKyBhdXRoLm5vbmNlICsgJzonICsgZGlnZXN0Ll9OQy50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg4LCAnMCcpICsgJzonICsgZGlnZXN0Ll9DTk9OQ0UgKyAnOicgKyBhdXRoLnFvcCArICc6JyArIGF1dGguc3RlcDI7DQogICAgICAgIGF1dGguc3RlcDMgPSBtZDUuc3luY0hhc2goc3RlcDMpLnRvU3RyaW5nKCdoZXgnKS50b0xvd2VyQ2FzZSgpOw0KICAgIH0NCg0KICAgIHZhciByZXQgPSAnRGlnZXN0IHVzZXJuYW1lPSInICsgZGlnZXN0Ll9vcHRpb25zLnVzZXJuYW1lICsgJyIscmVhbG09IicgKyBhdXRoLnJlYWxtICsgJyIsbm9uY2U9IicgKyBhdXRoLm5vbmNlICsgJyIsdXJpPSInICsgb3B0aW9ucy5wYXRoICsgJyInOw0KICAgIGlmIChhdXRoLm9wYXF1ZSAhPSBudWxsKSB7IHJldCArPSAoJyxvcGFxdWU9IicgKyBhdXRoLm9wYXF1ZSArICciJyk7IH0NCiAgICByZXQgKz0gKCcscmVzcG9uc2U9IicgKyBhdXRoLnN0ZXAzICsgJyInKTsNCg0KICAgIGlmIChhdXRoLnFvcCAhPSBudWxsKQ0KICAgIHsNCiAgICAgICAgcmV0ICs9ICgnLHFvcD0iJyArIGF1dGgucW9wICsgJyIsbmM9IicgKyBkaWdlc3QuX05DLnRvU3RyaW5nKDE2KS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDgsICcwJykgKyAnIixjbm9uY2U9IicgKyBkaWdlc3QuX0NOT05DRSArICciJyk7DQogICAgfQ0KDQoNCiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykgeyBvcHRpb25zLmhlYWRlcnMgPSB7fTsgfQ0KICAgIG9wdGlvbnMuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gcmV0Ow0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gaHR0cF9kaWdlc3QoKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gImh0dHAtZGlnZXN0IjsNCiAgICB0aGlzLmNyZWF0ZSA9IGZ1bmN0aW9uKCkNCiAgICB7DQogICAgICAgIGlmKGFyZ3VtZW50cy5sZW5ndGggPT0gMSAmJiB0eXBlb2YoYXJndW1lbnRzWzBdID09ICdvYmplY3QnKSkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIChuZXcgaHR0cF9kaWdlc3RfaW5zdGFuY2UoYXJndW1lbnRzWzBdKSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoYXJndW1lbnRzLmxlbmd0aCA9PSAyICYmIHR5cGVvZihhcmd1bWVudHNbMF0pID09ICdzdHJpbmcnICYmIHR5cGVvZihhcmd1bWVudHNbMV0pID09ICdzdHJpbmcnKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKG5ldyBodHRwX2RpZ2VzdF9pbnN0YW5jZSh7dXNlcm5hbWU6IGFyZ3VtZW50c1swXSwgcGFzc3dvcmQ6IGFyZ3VtZW50c1sxXX0pKTsNCiAgICAgICAgfQ0KICAgICAgICB0aHJvdyAoJ0ludmFsaWQgUGFyYW1ldGVycycpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gaHR0cF9kaWdlc3RfaW5zdGFuY2Uob3B0aW9ucykNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdodHRwLWRpZ2VzdC5pbnN0YW5jZSc7DQogICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7DQogICAgdGhpcy5odHRwID0gbnVsbDsNCiAgICB0aGlzLl9OQyA9IDA7DQogICAgdGhpcy5fQ05PTkNFID0gcmVxdWlyZSgnaHR0cCcpLmdlbmVyYXRlTm9uY2UoMTYpOw0KDQogICAgdGhpcy5nZXQgPSBmdW5jdGlvbih1cmkpDQogICAgew0KICAgICAgICByZXR1cm4gKHRoaXMucmVxdWVzdCh1cmkpKTsNCiAgICB9DQogICAgdGhpcy5yZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcjEpDQogICAgew0KICAgICAgICB2YXIgY2FsbGVuZCA9IGZhbHNlOw0KICAgICAgICB2YXIgcmV0ID0gbmV3IHdyaXRhYmxlKA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHdyaXRlOiBmdW5jdGlvbiAoY2h1bmssIGZsdXNoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VuZGVkKSB7IHRocm93ICgnU3RyZWFtIGFscmVhZHkgZW5kZWQnKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5fYnVmZmVyZWQpIA0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJlZCA9IEJ1ZmZlci5hbGxvYyhjaHVuay5sZW5ndGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsuY29weSh0aGlzLl9idWZmZXJlZCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuX2J1ZmZlcmVkLCBjaHVua10sIHRoaXMuX2J1ZmZlcmVkLmxlbmd0aCArIGNodW5rLmxlbmd0aCk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkgeyB0aGlzLl9yZXF1ZXN0LndyaXRlKGNodW5rKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggIT0gbnVsbCkgeyBmbHVzaCgpOyB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBmaW5hbDogZnVuY3Rpb24gKGZsdXNoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VuZGVkKSB7IHRocm93ICgnU3RyZWFtIGFscmVhZHkgZW5kZWQnKTsgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmRlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7IHRoaXMuX3JlcXVlc3QuZW5kKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoICE9IG51bGwpIHsgZmx1c2goKTsgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICByZXQuX2J1ZmZlcmVkID0gbnVsbDsNCiAgICAgICAgcmV0Ll9lbmRlZCA9IGZhbHNlOw0KICAgICAgICBzd2l0Y2ggKHR5cGVvZiAocGFyMSkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgdGhyb3cgKCdJbnZhbGlkIFBhcmFtZXRlcicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoNCiAgICAgICAgICAgICAgICByZXQub3B0aW9ucyA9IHRoaXMuaHR0cC5wYXJzZVVyaShwYXIxKTsNCiAgICAgICAgICAgICAgICBjYWxsZW5kID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6DQogICAgICAgICAgICAgICAgcmV0Lm9wdGlvbnMgPSBwYXIxOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgICAgIC5jcmVhdGVFdmVudCgncmVzcG9uc2UnKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdlcnJvcicpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ3VwZ3JhZGUnKQ0KICAgICAgICAgICAgLmNyZWF0ZUV2ZW50KCdjb250aW51ZScpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ3RpbWVvdXQnKTsNCiAgICAgICAgcmV0Ll9kaWdlc3QgPSB0aGlzOw0KDQogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgKGFyZ3VtZW50c1sxXSkgPT0gJ2Z1bmN0aW9uJykNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Lm9uY2UoJ3Jlc3BvbnNlJywgYXJndW1lbnRzWzFdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vDQogICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBhZGQgQXV0aEhlYWRlcnMgbm93DQogICAgICAgIC8vDQogICAgICAgIGdlbmVyYXRlQXV0aEhlYWRlcnMobnVsbCwgcmV0Lm9wdGlvbnMsIHRoaXMpOw0KDQogICAgICAgIC8vIFdoZW4gc29tZWJvZHkgaG9va3MgdXAgZXZlbnRzIHRvIGRpZ2VzdC5jbGllbnRSZXF1ZXN0LCB3ZSBuZWVkIHRvIGhvb2sgdGhlIHJlYWwgZXZlbnQgb24gaHR0cC5jbGllbnRSZXF1ZXN0DQogICAgICAgIHJldC5fcmVxdWVzdCA9IHRoaXMuaHR0cC5yZXF1ZXN0KHJldC5vcHRpb25zKTsNCiAgICAgICAgcmV0Ll9yZXF1ZXN0LmRpZ1JlcXVlc3QgPSByZXQ7DQogICAgICAgIHJldC5vbignbmV3TGlzdGVuZXInLCBmdW5jdGlvbiAoZXZOYW1lLCBjYWxsYmFjaykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKGV2TmFtZSAhPSAndXBncmFkZScgJiYgZXZOYW1lICE9ICdlcnJvcicgJiYgZXZOYW1lICE9ICdjb250aW51ZScgJiYgZXZOYW1lICE9ICd0aW1lb3V0JyAmJiBldk5hbWUgIT0gJ2RyYWluJykgeyByZXR1cm47IH0NCiAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0Lmxpc3RlbmVyQ291bnQoZXZOYW1lKSA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBldlNpbmsgPSBmdW5jdGlvbiBfZXZTaW5rKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwYXJtcyA9IFtfZXZTaW5rLmV2ZW50TmFtZV07DQogICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpIHtwYXJtcy5wdXNoKGFyZ3VtZW50c1tpXSk7fQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuZW1pdC5hcHBseSh0aGlzLmRpZ1JlcXVlc3QsIHBhcm1zKTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIGV2U2luay5ldmVudE5hbWUgPSBldk5hbWU7DQogICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdC5vbihldk5hbWUsIGV2U2luayk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KDQogICAgICAgIHJldC5fcmVxdWVzdC5vbmNlKCdyZXNwb25zZScsIGZ1bmN0aW9uIChpbXNnKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoaW1zZy5zdGF0dXNDb2RlID09IDQwMSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgY2FsbGVuZCA9IHRoaXMuZGlnUmVxdWVzdC5fcmVxdWVzdC5fY2FsbGVuZDsNCiAgICAgICAgICAgICAgICB2YXIgYXV0aCA9IGdlbmVyYXRlQXV0aEhlYWRlcnMoaW1zZywgdGhpcy5kaWdSZXF1ZXN0Lm9wdGlvbnMsIHRoaXMuZGlnUmVxdWVzdC5fZGlnZXN0KTsNCg0KICAgICAgICAgICAgICAgIHRoaXMuZGlnUmVxdWVzdC5fcmVxdWVzdCA9IHRoaXMuZGlnUmVxdWVzdC5fZGlnZXN0Lmh0dHAucmVxdWVzdCh0aGlzLmRpZ1JlcXVlc3Qub3B0aW9ucyk7DQogICAgICAgICAgICAgICAgdGhpcy5kaWdSZXF1ZXN0Ll9yZXF1ZXN0LmRpZ1JlcXVlc3QgPSB0aGlzLmRpZ1JlcXVlc3Q7DQogICAgICAgICAgICAgICAgdGhpcy5kaWdSZXF1ZXN0Ll9yZXF1ZXN0Lm9uY2UoJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKGltc2cpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2goaW1zZy5zdGF0dXNDb2RlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuZW1pdCgnZXJyb3InLCAnRGlnZXN0IGZhaWxlZCB0b28gbWFueSB0aW1lcycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuZW1pdCgncmVzcG9uc2UnLCBpbXNnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGNoZWNrRXZlbnRGb3J3YXJkaW5nKHRoaXMuZGlnUmVxdWVzdCwgJ3VwZ3JhZGUnKTsNCiAgICAgICAgICAgICAgICBjaGVja0V2ZW50Rm9yd2FyZGluZyh0aGlzLmRpZ1JlcXVlc3QsICdlcnJvcicpOw0KICAgICAgICAgICAgICAgIGNoZWNrRXZlbnRGb3J3YXJkaW5nKHRoaXMuZGlnUmVxdWVzdCwgJ2NvbnRpbnVlJyk7DQogICAgICAgICAgICAgICAgY2hlY2tFdmVudEZvcndhcmRpbmcodGhpcy5kaWdSZXF1ZXN0LCAndGltZW91dCcpOw0KICAgICAgICAgICAgICAgIGNoZWNrRXZlbnRGb3J3YXJkaW5nKHRoaXMuZGlnUmVxdWVzdCwgJ2RyYWluJyk7DQogICAgICAgICAgICAgICAgaWYgKGNhbGxlbmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmRpZ1JlcXVlc3QuX3JlcXVlc3QuZW5kKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpZ1JlcXVlc3QuX2J1ZmZlcmVkKSB7IHRoaXMuZGlnUmVxdWVzdC5fcmVxdWVzdC53cml0ZSh0aGlzLmRpZ1JlcXVlc3QuX2J1ZmZlcmVkKTsgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaWdSZXF1ZXN0Ll9lbmRlZCkgeyB0aGlzLmRpZ1JlcXVlc3QuX3JlcXVlc3QuZW5kKCk7IH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5kaWdSZXF1ZXN0LmVtaXQoJ3Jlc3BvbnNlJywgaW1zZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpZiAoY2FsbGVuZCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZXF1ZXN0Ll9jYWxsZW5kID0gdHJ1ZTsgcmV0Ll9yZXF1ZXN0LmVuZCgpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHJldC5fYnVmZmVyZWQpIHsgcmV0Ll9yZXF1ZXN0LndyaXRlKHJldC5fYnVmZmVyZWQpOyB9DQogICAgICAgICAgICBpZiAocmV0Ll9lbmRlZCkgeyByZXQuX3JlcXVlc3QuZW5kKCk7IH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQptb2R1bGUuZXhwb3J0cyA9IG5ldyBodHRwX2RpZ2VzdCgpOw0KDQo=', 'base64').toString());"); // Clipboard. Refer to /modules/clipboard.js for a human readable version - char *_clipboard = ILibMemory_Allocate(54698, 0, NULL, NULL); - memcpy_s(_clipboard + 0, 31256, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KdmFyIEFueVByb3BlcnR5VHlwZSA9IDA7DQp2YXIgQ3VycmVudFRpbWUgPSAwOw0KdmFyIE5vbmUgPSAwOw0KdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7DQp2YXIgU2VsZWN0aW9uQ2xlYXIgPSAyOTsNCnZhciBTZWxlY3Rpb25Ob3RpZnkgPSAzMTsNCnZhciBTZWxlY3Rpb25SZXF1ZXN0ID0gMzA7DQp2YXIgWEFfUFJJTUFSWSA9IDE7DQp2YXIgQ0ZfVEVYVCA9IDE7DQp2YXIgQ0ZfVU5JQ09ERVRFWFQgPSAxMzsNCg0KdmFyIHhjbGlwVGFibGUgPSB7fTsNCg0KZnVuY3Rpb24gbmF0aXZlQWRkTW9kdWxlKG5hbWUpDQp7DQogICAgdmFyIHZhbHVlID0gZ2V0SlNNb2R1bGUobmFtZSk7DQogICAgdmFyIHJldCA9ICJkdWtfcGV2YWxfc3RyaW5nX25vcmVzdWx0KGN0eCwgXCJhZGRNb2R1bGUoJyIgKyBuYW1lICsgIicsIEJ1ZmZlci5mcm9tKCciICsgQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCdiYXNlNjQnKSArICInLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XCIpOyI7DQogICAgaWYgKHJldC5sZW5ndGggPiAxNjMwMCkNCiAgICB7DQogICAgICAgIC8vIE1TIFZpc3VhbCBTdHVkaW8gaGFzIGEgbWF4c2l6ZSBsaW1pdGF0aW9uDQogICAgICAgIHZhciB0bXAgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KICAgICAgICByZXQgPSAnY2hhciAqXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnID0gSUxpYk1lbW9yeV9BbGxvY2F0ZSgnICsgKHRtcC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyAyKSArICcsIDAsIE5VTEwsIE5VTEwpO1xuJzsNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICB3aGlsZSAoaSA8IHRtcC5sZW5ndGgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaHVuayA9IHRtcC5zdWJzdHJpbmcoaSwgaSsxNjAwMCk7DQogICAgICAgICAgICByZXQgKz0gKCdtZW1jcHlfcyhfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgaSArICcsICcgKyAodG1wLmxlbmd0aCAtIGkpICsgJywgIicgKyBjaHVuayArICciLCAnICsgY2h1bmsubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgICAgIGkgKz0gY2h1bmsubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldCArPSAoJ0lMaWJCYXNlNjREZWNvZGVFeCgodW5zaWduZWQgY2hhciopXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnLCAnICsgdG1wLmxlbmd0aCArICcsICh1bnNpZ25lZCBjaGFyKilfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgdG1wLmxlbmd0aCArICcpO1xuJyk7DQogICAgICAgIHJldCArPSAoJ2R1a19wdXNoX2dsb2JhbF9vYmplY3QoY3R4KTtkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJhZGRNb2R1bGUiKTtkdWtfc3dhcF90b3AoY3R4LCAtMik7ZHVrX3B1c2hfc3RyaW5nKGN0eCwgIicgKyBuYW1lICsgJyIpO2R1a19wdXNoX3N0cmluZyhjdHgsIF8nICsgbmFtZS5zcGxpdCgnLScpLmpvaW4oJycpICsgJyArICcgKyB0bXAubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZHVrX3BjYWxsX21ldGhvZChjdHgsIDIpOyBkdWtfcG9wKGN0eCk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZnJlZShfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcpO1xuJyk7DQogICAgfQ0KICAgIG1vZHVsZS5leHBvcnRzKHJldCk7DQp9DQpmdW5jdGlvbiBkaXNwYXRjaFJlYWQoc2lkKQ0Kew0KICAgIHZhciBpZCA9IDA7DQoNCiAgICBpZihzaWQ9PW51bGwpDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLkN1cnJlbnQoKS5BY3RpdmU7DQogICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWQgPSBwYXJzZUludChhY3RpdmVbMF0uU2Vzc2lvbklkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZCA9IHNpZDsNCiAgICB9DQoNCiAgICBpZiAoaWQgPT0gMCB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnIHx8IChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgcmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cy5yZWFkKCkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5zdWNjZXNzID0gZmFsc2U7DQogICAgICAgIHJldC5tYXN0ZXIgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5DcmVhdGUoY2hpbGRQcm9wZXJ0aWVzKTsNCiAgICAgICAgcmV0Lm1hc3Rlci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQubWFzdGVyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5zdWNjZXNzID0gdHJ1ZTsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKGQpOw0KICAgICAgICAgICAgdGhpcy5leGl0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQubWFzdGVyLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5wcm9taXNlLnN1Y2Nlc3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ0Vycm9yIHJlYWRpbmcgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLm1hc3RlcjsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5tYXN0ZXIuRXhlY3V0ZVN0cmluZygidmFyIHBhcmVudCA9IHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpOyByZXF1aXJlKCdjbGlwYm9hcmQnKS5yZWFkKCkudGhlbihmdW5jdGlvbih2KXtwYXJlbnQuc2VuZCh2KTt9LCBmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpO3Byb2Nlc3MuZXhpdCgpO30pOyIpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwYXRjaFdyaXRlKGRhdGEsIHNpZCkNCnsNCiAgICB2YXIgaWQgPSAwOw0KDQogICAgaWYoc2lkID09IG51bGwpDQogICAgew0KICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuQ3VycmVudCgpLkFjdGl2ZTsNCiAgICAgICAgICAgIGlmKGFjdGl2ZS5sZW5ndGg+MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZCA9IHBhcnNlSW50KGFjdGl2ZVswXS5TZXNzaW9uSWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlkID0gc2lkOw0KICAgIH0NCg0KICAgIGlmIChpZCA9PSAwIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgfHwgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiByZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkpDQogICAgew0KICAgICAgICByZXR1cm4obW9kdWxlLmV4cG9ydHMoZGF0YSkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyB8fCAhdGhpcy5tYXN0ZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKGNoaWxkUHJvcGVydGllcyk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5wYXJlbnQgPSB0aGlzOw0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyBpZiAodGhpcy5wYXJlbnQubWFzdGVyKSB7IGRlbGV0ZSB0aGlzLnBhcmVudC5tYXN0ZXI7IH0gfSk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5vbignZGF0YScsIGZ1bmN0aW9uIChkKSB7IGNvbnNvbGUubG9nKGQpOyB9KTsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyLkV4ZWN1dGVTdHJpbmcoInZhciBwYXJlbnQgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKTsgcGFyZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24oZCl7dHJ5e3JlcXVpcmUoJ2NsaXBib2FyZCcpKGQpO31jYXRjaChlKXtyZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKGUpO31pZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpe3Byb2Nlc3MuZXhpdCgpO319KTsiKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLm1hc3Rlci5zZW5kKGRhdGEpOw0KDQogICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiB0aGlzLm1hc3RlcikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYodGhpcy5tYXN0ZXIudGltZW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tYXN0ZXIudGltZW91dCk7DQogICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIudGltZW91dCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLm1hc3Rlci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5leGl0KCk7DQogICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBudWxsOw0KICAgICAgICAgICAgfSwgNjAwMDAsIHRoaXMpOw0KICAgICAgICB9DQoNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpDQp7DQogICAgdmFyIGlkOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KDQogICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCwgWyd4bGNsaXAnLCAnLXNlbGVjdGlvbicsICdjJywgJy1vJ10sIHsgdWlkOiBpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICByZXQuY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoodGhpcy5zdGRlcnIuc3RyLnRyaW0oKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLnByb21pc2UuX3Jlcyh0aGlzLnN0ZG91dC5zdHIpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGJzZF94Y2xpcF9yZWFkdGV4dCgpDQp7DQogICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgbGluX3hjbGlwX3JlYWR0ZXh0KHJldCk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBsaW5fcmVhZHRleHQoKQ0Kew0KICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykNCiAgICB9DQogICAgY2F0Y2goZXhjKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooZXhjKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciBYMTEgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExOw0KICAgIGlmICghWDExKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooJ1gxMSByZXF1aXJlZCBmb3IgQ2xpcGJvYXJkIE1hbmlwdWxhdGlvbicpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApDQogICAgICAgIHsNCiAgICAgICAgICAgIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX2dtOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLl9tYXN0ZXJQcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKG1vbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKG1vbi5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IFgxMS5YV2hpdGVQaXhlbChtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKS5WYWw7DQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ0NMSVBCT0FSRCcpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnVVRGOF9TVFJJTkcnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdYU0VMX0RBVEEnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5JTkNSSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdJTkNSJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiA9IFgxMS5YUm9vdFdpbmRvdyhtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4gPSBYMTEuWENyZWF0ZVNpbXBsZVdpbmRvdyhtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOLCAwLCAwLCBtb25bMF0ucmlnaHQsIDUsIDAsIHdoaXRlLCB3aGl0ZSk7DQoNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KICAgICAgICAgICAgICAgIFgxMS5YQ29udmVydFNlbGVjdGlvbihtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQsIHRoaXMuX21hc3RlclByb21pc2UuRk1USUQsIHRoaXMuX21hc3RlclByb21pc2UuUFJPUElELCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIEN1cnJlbnRUaW1lKTsNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KDQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKFgxMS5YQ29ubmVjdGlvbk51bWJlcihtb25bMF0uZGlzcGxheSkuVmFsLCB7IHJlYWRzZXQ6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX21hc3RlclByb21pc2UgPSB0aGlzLl9tYXN0ZXJQcm9taXNlOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbW9uWzBdLmRpc3BsYXk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQub24oJ3JlYWRzZXQnLCBmdW5jdGlvbiAoZmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgWEUgPSBHTS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFgxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YTmV4dEV2ZW50U3luYyh0aGlzLl9kaXNwbGF5LCBYRSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihYRS5EZXJlZigwLCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpID09IFNlbGVjdGlvbk5vdGlmeSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHMgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN6ID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWlsID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWEdldFdpbmRvd1Byb3BlcnR5KHRoaXMuX2Rpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQsIDAsIDY1NTM1LCAwLCBBbnlQcm9wZXJ0eVR5cGUsIGlkLCBiaXRzLCBzeiwgdGFpbCwgcmVzdWx0KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuX3JlcyhyZXN1bHQuRGVyZWYoKS5TdHJpbmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YRnJlZShyZXN1bHQuRGVyZWYoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhEZXN0cm95V2luZG93KHRoaXMuX2Rpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURlc2NyaXB0b3IoZmQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIGNvbnNvbGUuZXJyb3IpOw0KICAgIH0NCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9jb3B5KHR4dCkNCnsNCiAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICB2YXIgaWQ7DQogICAgdHJ5DQogICAgew0KICAgICAgICBpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgfQ0KICAgIGNhdGNoKGUpDQogICAgew0KICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKGlkKTsNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXAsIFsneGNsaXAoJyArIHJldC5faGFzaENvZGUoKSArICcpJywgJy1zZWxlY3Rpb24nLCAnYyddLCB7IHVpZDogaWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyBjb25zb2xlLmxvZyhjLnRvU3RyaW5nKCkpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgeGNsaXBUYWJsZVt0aGlzLnByb21pc2UuX2hhc2hDb2RlKCldID0gc2V0VGltZW91dChmdW5jdGlvbiAocCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNoID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgIGNoLnN0ZG91dC5zdHIgPSAnJzsgY2guc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3BzIC1lIC1vIHBpZCAtbyBjbWQgfCBncmVwICJ4Y2xp", 16000); - memcpy_s(_clipboard + 16000, 15256, "cCgnICsgcC5faGFzaENvZGUoKSArICcpIiB8ICcgKyAiIHRyICdcXG4nICdgJyB8IGF3ayAtRidgJyAnIik7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgneycpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgIGZvcihpPTE7aTxORjsrK2kpJyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgeycpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICBzcGxpdCgkaSx0b2tlbnMsIiAiKTsnKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgbmFtZT1zdWJzdHIoJGksIGxlbmd0aCh0b2tlbnNbMV0pKzMpOycpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICBjaGtuYW1lPXN1YnN0cihuYW1lLDEsNik7JykNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgaWYoY2hrbmFtZT09InhjbGlwKCIpJyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgIHsnKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgICAgcHJpbnRmICIlcyIsIHRva2Vuc1sxXTsnKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgfScpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgIH0nKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCJ9J1xuZXhpdFxuIik7DQogICAgICAgICAgICBjaC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgaWYoY2guc3Rkb3V0LnN0ciAhPSAnJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBwcm9jZXNzLmtpbGwocGFyc2VJbnQoY2guc3Rkb3V0LnN0ciksICdTSUdLSUxMJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkZWxldGUgeGNsaXBUYWJsZVtwLl9oYXNoQ29kZSgpXTsNCiAgICAgICAgfSwgMjAwMDAsIHRoaXMucHJvbWlzZSk7DQogICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKCk7DQogICAgfSk7DQogICAgcmV0LmNoaWxkLnN0ZGluLndyaXRlKHR4dCwgZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIHRoaXMuZW5kKCk7DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGxpbl9jb3B5dGV4dCh0eHQpDQp7DQogICAgdmFyIFgxMSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTE7DQogICAgaWYgKCFYMTEpDQogICAgew0KICAgICAgICB0aHJvdygnWDExIHJlcXVpcmVkIGZvciBDbGlwYm9hcmQgTWFuaXB1bGF0aW9uJyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlmIChyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIChsaW5feGNsaXBfY29weSh0eHQpKTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fZ207DQogICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICByZXQuX3R4dCA9IHR4dDsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKTsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZS5fbWFzdGVyUHJvbWlzZSA9IHJldDsNCiAgICAgICAgcmV0Ll9nZXRJbmZvUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChtb24pDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChtb24ubGVuZ3RoID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgd2hpdGUgPSBYMTEuWFdoaXRlUGl4ZWwobW9uWzBdLmRpc3BsYXksIG1vblswXS5zY3JlZW5JZCkuVmFsOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuQ0xJUElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnQ0xJUEJPQVJEJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRk1USUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdVVEY4X1NUUklORycpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLlJPT1RXSU4gPSBYMTEuWFJvb3RXaW5kb3cobW9uWzBdLmRpc3BsYXksIG1vblswXS5zY3JlZW5JZCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOID0gWDExLlhDcmVhdGVTaW1wbGVXaW5kb3cobW9uWzBdLmRpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiwgMCwgMCwgbW9uWzBdLnJpZ2h0LCA1LCAwLCB3aGl0ZSwgd2hpdGUpOw0KDQogICAgICAgICAgICAgICAgWDExLlhTZXRTZWxlY3Rpb25Pd25lcihtb25bMF0uZGlzcGxheSwgWEFfUFJJTUFSWSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOLCBDdXJyZW50VGltZSk7DQogICAgICAgICAgICAgICAgWDExLlhTZXRTZWxlY3Rpb25Pd25lcihtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQsIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgQ3VycmVudFRpbWUpOw0KICAgICAgICAgICAgICAgIFgxMS5YU3luYyhtb25bMF0uZGlzcGxheSwgMCk7DQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKFgxMS5YQ29ubmVjdGlvbk51bWJlcihtb25bMF0uZGlzcGxheSkuVmFsLCB7IHJlYWRzZXQ6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX21hc3RlclByb21pc2UgPSB0aGlzLl9tYXN0ZXJQcm9taXNlOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbW9uWzBdLmRpc3BsYXk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQub24oJ3JlYWRzZXQnLCBmdW5jdGlvbiAoZmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgWEUgPSBHTS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFgxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YTmV4dEV2ZW50U3luYyh0aGlzLl9kaXNwbGF5LCBYRSk7DQogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFhFLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25DbGVhcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnU29tZWJvZHkgZWxzZSBvd25zIGNsaXBib2FyZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvblJlcXVlc3Q6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1NvbWVib2R5IHdhbnRzIHVzIHRvIHNlbmQgdGhlbSBkYXRhJyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2ID0gR00uQ3JlYXRlVmFyaWFibGUoR00uUG9pbnRlclNpemUgPT0gOCA/IDcyIDogMzYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfcmVxdWVzdG9yID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDQwLCA4KSA6IFhFLkRlcmVmKDIwLCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3NlbGVjdGlvbiA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig0OCwgOCkgOiBYRS5EZXJlZigyNCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9wcm9wZXJ0eSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig2NCwgOCkgOiBYRS5EZXJlZigzMiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl90YXJnZXQgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNTYsIDgpIDogWEUuRGVyZWYoMjgsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfdGltZSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig3MiwgOCkgOiBYRS5EZXJlZigzNiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9kaXNwbGF5ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDI0LCA4KSA6IFhFLkRlcmVmKDEyLCA0KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldi5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoU2VsZWN0aW9uTm90aWZ5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3JlcXVlc3RvciA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZigzMiwgOCkgOiBldi5EZXJlZigxNiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl9zZWxlY3Rpb24gPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNDAsIDgpIDogZXYuRGVyZWYoMjAsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfdGFyZ2V0ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDQ4LCA4KSA6IGV2LkRlcmVmKDI0LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3RpbWUgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNjQsIDgpIDogZXYuRGVyZWYoMzIsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfcHJvcGVydHkgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNTYsIDgpIDogZXYuRGVyZWYoMjgsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcHRleHQgPSBHTS5DcmVhdGVWYXJpYWJsZSh0aGlzLl9tYXN0ZXJQcm9taXNlLl90eHQpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3JlcXVlc3Rvci5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3JlcXVlc3Rvci50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnUkVRVUVTVE9SOiAnICsgc3JfcmVxdWVzdG9yLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3NlbGVjdGlvbi5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3NlbGVjdGlvbi50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnU0VMRUNUSU9OOiAnICsgc3Jfc2VsZWN0aW9uLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3RhcmdldC5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3RhcmdldC50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnVEFSR0VUOiAnICsgc3JfdGFyZ2V0LkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3RpbWUuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl90aW1lLnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdUSU1FOiAnICsgc3JfdGltZS5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS50b1N0cmluZygnaGV4JykpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcl90YXJnZXQuRGVyZWYoKS5WYWwgPT0gdGhpcy5fbWFzdGVyUHJvbWlzZS5GTVRJRC5WYWwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1VURjggUmVxdWVzdCBmb3I6ICcgKyBjbGlwdGV4dC5TdHJpbmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMShzcl9kaXNwbGF5LlZhbCwgc3JfcmVxdWVzdG9yLkRlcmVmKCkuVmFsLCBzcl9wcm9wZXJ0eS5EZXJlZigpLlZhbCwgc3JfdGFyZ2V0LkRlcmVmKCkuVmFsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YQ2hhbmdlUHJvcGVydHkoc3JfZGlzcGxheS5EZXJlZigpLCBzcl9yZXF1ZXN0b3IuRGVyZWYoKSwgc3JfcHJvcGVydHkuRGVyZWYoKSwgc3JfdGFyZ2V0LkRlcmVmKCksIDgsIFByb3BNb2RlUmVwbGFjZSwgY2xpcHRleHQsIGNsaXB0ZXh0Ll9zaXplIC0gMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWFN5bmMoc3JfZGlzcGxheS5EZXJlZigpLCAwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyX3Byb3BlcnR5LkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfcHJvcGVydHkudG9CdWZmZXIoKSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnVW5rbm93biBGb3JtYXQgUmVxdWVzdCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZfcHJvcGVydHkucG9pbnRlckJ1ZmZlcigpLndyaXRlVUludDMyTEUoTm9uZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWFNlbmRFdmVudChzcl9kaXNwbGF5LkRlcmVmKCksIHNyX3JlcXVlc3Rvci5EZXJlZigpLCAxLCAwLCBldik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIGNvbnNvbGUubG9nKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHdpbl9yZWFkdGV4dCgpDQp7DQogICAgdmFyIGg7DQogICAgdmFyIHJldCA9ICcnOw0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbEFsbG9jJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxMb2NrJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxVbmxvY2snKTsNCg0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdHZXRDbGlwYm9hcmREYXRhJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnT3BlbkNsaXBib2FyZCcpOw0KDQogICAgdXNlcjMyLk9wZW5DbGlwYm9hcmQoMCk7DQoNCiAgICBpZiAodXNlcjMyLklzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlKENGX1VOSUNPREVURVhUKS5WYWwgIT0gMCkNCiAgICB7DQogICAgICAgIGggPSB1c2VyMzIuR2V0Q2xpcGJvYXJkRGF0YShDRl9VTklDT0RFVEVYVCk7DQogICAgICAgIGlmIChoLlZhbCAhPSAwKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgaGJ1ZmZlciA9IGtlcm5lbDMyLkdsb2JhbExvY2soaCk7DQogICAgICAgICAgICBoYnVmZmVyLl9zaXplID0gLTE7DQogICAgICAgICAgICByZXQgPSBoYnVmZmVyLldpZGUyVVRGODsNCiAgICAgICAgICAgIGtlcm5lbDMyLkdsb2JhbFVubG9jayhoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHAuX3JlaignVW5rbm93biBDbGlwYm9hcmQgRGF0YScpOw0KICAgICAgICByZXR1cm4gKHApOw0KICAgIH0NCg0KDQogICAgdXNlcjMyLkNsb3NlQ2xpcGJvYXJkKCk7DQoNCiAgICB2YXIgcCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgcC5fcmVzKHJldCk7DQogICAgcmV0dXJuIChwKTsNCn0NCg0KZnVuY3Rpb24gd2luX2NvcHl0ZXh0KHR4dCkNCnsNCiAgICB2YXIgR01FTV9NT1ZFQUJMRSA9IDB4MDAwMjsNCiAgICB2YXIgQ0ZfVEVYVCA9IDE7DQoNCiAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICB2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICB2YXIga2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxBbGxvYycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsTG9jaycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsVW5sb2NrJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnQ2xvc2VDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdFbXB0eUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0lzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnT3BlbkNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ1NldENsaXBib2FyZERhdGEnKTsNCg0KICAgIHZhciBtdHh0ID0gR00uQ3JlYXRlVmFyaWFibGUodHh0LCB7IHdpZGU6IHRydWUgfSk7IA0KICAgIHZhciBoID0ga2VybmVsMzIuR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgbXR4dC5fc2l6ZSk7DQogICAgaC5hdXRvRnJlZShmYWxzZSk7DQogICAgdmFyIGhidWZmZXIgPSBrZXJuZWwzMi5HbG9iYWxMb2NrKGgpOw0KICAgIGhidWZmZXIuYXV0b0ZyZWUoZmFsc2UpOw0KDQogICAgbXR4dC50b0J1ZmZlcigpLmNvcHkoaGJ1ZmZlci5EZXJlZigwLCAoMiAqIHR4dC5sZW5ndGgpICsgMikudG9CdWZmZXIoKSk7DQogICAga2VybmVsMzIuR2xvYmFsVW5sb2NrKGgpOw0KDQogICAgdXNlcjMyLk9wZW5DbGlwYm9hcmQoMCk7DQogICAgdXNlcjMyLkVtcHR5Q2xpcGJvYXJkKCk7DQogICAgdXNlcjMyLlNldENsaXBib2FyZERhdGEoQ0ZfVU5JQ09ERVRFWFQsIGgpOw0KICAgIHVzZXIzMi5DbG9zZUNsaXBib2FyZCgpOw0KfQ0KZnVuY3Rpb24gbWFjb3NfY29weXRleHQoY2xpcFRleHQpDQp7DQogICAgcmV0dXJuIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLnNldENsaXBib2FyZChjbGlwVGV4dCkpOw0KfQ0KZnVuY3Rpb24gbWFjb3NfcmVhZHRleHQoKQ0Kew0KICAgIHJldHVybiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5nZXRDbGlwYm9hcmQoKSk7DQp9DQoNCnN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0Kew0KICAgIGNhc2UgJ3dpbjMyJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB3aW5fY29weXRleHQ7DQogICAgICAgIG1vZHVsZS5leHBvcnRzLnJlYWQgPSB3aW5fcmVhZHRleHQ7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2xpbnV4JzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBsaW5fY29weXRleHQ7DQogICAgICAgIG1vZHVsZS5leHBvcnRzLnJlYWQgPSBsaW5fcmVhZHRleHQ7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgInhjbGlwIiwNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5feGNsaXApIHsgcmV0dXJuICh0aGlzLl94Y2xpcCk7IH0NCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB4Y2xpcCB8IGF3ayAneyBwcmludCAkMjsgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gIiIpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiX3hjbGlwIiwgeyB2YWx1ZTogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICIiID8gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgOiBudWxsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgIGlmIChyZXF1aXJlKCdmcycpLmV4aXN0c1N5bmMoJ3Vzci9sb2NhbC9iaW4veGNsaXAnKSkNCiAgICAgICAgew0KICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBsaW5feGNsaXBfY29weTsNCiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnJlYWQgPSBic2RfeGNsaXBfcmVhZHRleHQ7DQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICJ4Y2xpcCIsIHsgdmFsdWU6ICd1c3IvbG9jYWwvYmluL3hjbGlwJyB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHRocm93ICgnQ2xpcGJvYXJkIFN1cHBvcnQgb24gQlNEIHJlcXVpcmVzIHhjbGlwJyk7DQogICAgICAgIH0NCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtYWNvc19jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IG1hY29zX3JlYWR0ZXh0Ow0KICAgICAgICBicmVhazsNCn0NCm1vZHVsZS5leHBvcnRzLm5hdGl2ZUFkZE1vZHVsZSA9IG5hdGl2ZUFkZE1vZHVsZTsNCm1vZHVsZS5leHBvcnRzLmRpc3BhdGNoV3JpdGUgPSBkaXNwYXRjaFdyaXRlOw0KbW9kdWxlLmV4cG9ydHMuZGlzcGF0Y2hSZWFkID0gZGlzcGF0Y2hSZWFkOw==", 15256); - ILibBase64DecodeEx((unsigned char*)_clipboard, 31256, (unsigned char*)_clipboard + 31256); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "clipboard"); duk_push_string(ctx, _clipboard + 31256); + char *_clipboard = ILibMemory_Allocate(55203, 0, NULL, NULL); + memcpy_s(_clipboard + 0, 31544, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KdmFyIEFueVByb3BlcnR5VHlwZSA9IDA7DQp2YXIgQ3VycmVudFRpbWUgPSAwOw0KdmFyIE5vbmUgPSAwOw0KdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7DQp2YXIgU2VsZWN0aW9uQ2xlYXIgPSAyOTsNCnZhciBTZWxlY3Rpb25Ob3RpZnkgPSAzMTsNCnZhciBTZWxlY3Rpb25SZXF1ZXN0ID0gMzA7DQp2YXIgWEFfUFJJTUFSWSA9IDE7DQp2YXIgQ0ZfVEVYVCA9IDE7DQp2YXIgQ0ZfVU5JQ09ERVRFWFQgPSAxMzsNCg0KdmFyIHhjbGlwVGFibGUgPSB7fTsNCg0KZnVuY3Rpb24gbmF0aXZlQWRkTW9kdWxlKG5hbWUpDQp7DQogICAgdmFyIHZhbHVlID0gZ2V0SlNNb2R1bGUobmFtZSk7DQogICAgdmFyIHJldCA9ICJkdWtfcGV2YWxfc3RyaW5nX25vcmVzdWx0KGN0eCwgXCJhZGRNb2R1bGUoJyIgKyBuYW1lICsgIicsIEJ1ZmZlci5mcm9tKCciICsgQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCdiYXNlNjQnKSArICInLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XCIpOyI7DQogICAgaWYgKHJldC5sZW5ndGggPiAxNjMwMCkNCiAgICB7DQogICAgICAgIC8vIE1TIFZpc3VhbCBTdHVkaW8gaGFzIGEgbWF4c2l6ZSBsaW1pdGF0aW9uDQogICAgICAgIHZhciB0bXAgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KICAgICAgICByZXQgPSAnY2hhciAqXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnID0gSUxpYk1lbW9yeV9BbGxvY2F0ZSgnICsgKHRtcC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyAyKSArICcsIDAsIE5VTEwsIE5VTEwpO1xuJzsNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICB3aGlsZSAoaSA8IHRtcC5sZW5ndGgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaHVuayA9IHRtcC5zdWJzdHJpbmcoaSwgaSsxNjAwMCk7DQogICAgICAgICAgICByZXQgKz0gKCdtZW1jcHlfcyhfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgaSArICcsICcgKyAodG1wLmxlbmd0aCAtIGkpICsgJywgIicgKyBjaHVuayArICciLCAnICsgY2h1bmsubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgICAgIGkgKz0gY2h1bmsubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldCArPSAoJ0lMaWJCYXNlNjREZWNvZGVFeCgodW5zaWduZWQgY2hhciopXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnLCAnICsgdG1wLmxlbmd0aCArICcsICh1bnNpZ25lZCBjaGFyKilfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgdG1wLmxlbmd0aCArICcpO1xuJyk7DQogICAgICAgIHJldCArPSAoJ2R1a19wdXNoX2dsb2JhbF9vYmplY3QoY3R4KTtkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJhZGRNb2R1bGUiKTtkdWtfc3dhcF90b3AoY3R4LCAtMik7ZHVrX3B1c2hfc3RyaW5nKGN0eCwgIicgKyBuYW1lICsgJyIpO2R1a19wdXNoX3N0cmluZyhjdHgsIF8nICsgbmFtZS5zcGxpdCgnLScpLmpvaW4oJycpICsgJyArICcgKyB0bXAubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZHVrX3BjYWxsX21ldGhvZChjdHgsIDIpOyBkdWtfcG9wKGN0eCk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZnJlZShfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcpO1xuJyk7DQogICAgfQ0KICAgIG1vZHVsZS5leHBvcnRzKHJldCk7DQp9DQpmdW5jdGlvbiBkaXNwYXRjaFJlYWQoc2lkKQ0Kew0KICAgIHZhciBpZCA9IDA7DQoNCiAgICBpZihzaWQ9PW51bGwpDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLkN1cnJlbnQoKS5BY3RpdmU7DQogICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWQgPSBwYXJzZUludChhY3RpdmVbMF0uU2Vzc2lvbklkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZCA9IHNpZDsNCiAgICB9DQoNCiAgICBpZiAoaWQgPT0gMCB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnIHx8IChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgcmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cy5yZWFkKCkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5zdWNjZXNzID0gZmFsc2U7DQogICAgICAgIHJldC5tYXN0ZXIgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5DcmVhdGUoY2hpbGRQcm9wZXJ0aWVzKTsNCiAgICAgICAgcmV0Lm1hc3Rlci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQubWFzdGVyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5zdWNjZXNzID0gdHJ1ZTsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKGQpOw0KICAgICAgICAgICAgdGhpcy5leGl0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQubWFzdGVyLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5wcm9taXNlLnN1Y2Nlc3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ0Vycm9yIHJlYWRpbmcgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLm1hc3RlcjsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5tYXN0ZXIuRXhlY3V0ZVN0cmluZygidmFyIHBhcmVudCA9IHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpOyByZXF1aXJlKCdjbGlwYm9hcmQnKS5yZWFkKCkudGhlbihmdW5jdGlvbih2KXtwYXJlbnQuc2VuZCh2KTt9LCBmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpO3Byb2Nlc3MuZXhpdCgpO30pOyIpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwYXRjaFdyaXRlKGRhdGEsIHNpZCkNCnsNCiAgICB2YXIgaWQgPSAwOw0KDQogICAgaWYoc2lkID09IG51bGwpDQogICAgew0KICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuQ3VycmVudCgpLkFjdGl2ZTsNCiAgICAgICAgICAgIGlmKGFjdGl2ZS5sZW5ndGg+MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZCA9IHBhcnNlSW50KGFjdGl2ZVswXS5TZXNzaW9uSWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlkID0gc2lkOw0KICAgIH0NCg0KICAgIGlmIChpZCA9PSAwIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgfHwgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiByZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkpDQogICAgew0KICAgICAgICByZXR1cm4obW9kdWxlLmV4cG9ydHMoZGF0YSkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyB8fCAhdGhpcy5tYXN0ZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKGNoaWxkUHJvcGVydGllcyk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5wYXJlbnQgPSB0aGlzOw0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyBpZiAodGhpcy5wYXJlbnQubWFzdGVyKSB7IGRlbGV0ZSB0aGlzLnBhcmVudC5tYXN0ZXI7IH0gfSk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5vbignZGF0YScsIGZ1bmN0aW9uIChkKSB7IGNvbnNvbGUubG9nKGQpOyB9KTsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyLkV4ZWN1dGVTdHJpbmcoInZhciBwYXJlbnQgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKTsgcGFyZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24oZCl7dHJ5e3JlcXVpcmUoJ2NsaXBib2FyZCcpKGQpO31jYXRjaChlKXtyZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKGUpO31pZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpe3Byb2Nlc3MuZXhpdCgpO319KTsiKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLm1hc3Rlci5zZW5kKGRhdGEpOw0KDQogICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiB0aGlzLm1hc3RlcikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYodGhpcy5tYXN0ZXIudGltZW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tYXN0ZXIudGltZW91dCk7DQogICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIudGltZW91dCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLm1hc3Rlci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5leGl0KCk7DQogICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBudWxsOw0KICAgICAgICAgICAgfSwgNjAwMDAsIHRoaXMpOw0KICAgICAgICB9DQoNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpDQp7DQogICAgdmFyIGlkOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KDQogICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCwgWyd4bGNsaXAnLCAnLXNlbGVjdGlvbicsICdjJywgJy1vJ10sIHsgdWlkOiBpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICByZXQuY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoodGhpcy5zdGRlcnIuc3RyLnRyaW0oKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLnByb21pc2UuX3Jlcyh0aGlzLnN0ZG91dC5zdHIpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGJzZF94Y2xpcF9yZWFkdGV4dCgpDQp7DQogICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgbGluX3hjbGlwX3JlYWR0ZXh0KHJldCk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBsaW5fcmVhZHRleHQoKQ0Kew0KICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykNCiAgICB9DQogICAgY2F0Y2goZXhjKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooZXhjKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciBYMTEgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExOw0KICAgIGlmICghWDExKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooJ1gxMSByZXF1aXJlZCBmb3IgQ2xpcGJvYXJkIE1hbmlwdWxhdGlvbicpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApDQogICAgICAgIHsNCiAgICAgICAgICAgIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX2dtOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLl9tYXN0ZXJQcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKG1vbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKG1vbi5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IFgxMS5YV2hpdGVQaXhlbChtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKS5WYWw7DQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ0NMSVBCT0FSRCcpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnVVRGOF9TVFJJTkcnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdYU0VMX0RBVEEnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5JTkNSSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdJTkNSJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiA9IFgxMS5YUm9vdFdpbmRvdyhtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4gPSBYMTEuWENyZWF0ZVNpbXBsZVdpbmRvdyhtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOLCAwLCAwLCBtb25bMF0ucmlnaHQsIDUsIDAsIHdoaXRlLCB3aGl0ZSk7DQoNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KICAgICAgICAgICAgICAgIFgxMS5YQ29udmVydFNlbGVjdGlvbihtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQsIHRoaXMuX21hc3RlclByb21pc2UuRk1USUQsIHRoaXMuX21hc3RlclByb21pc2UuUFJPUElELCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIEN1cnJlbnRUaW1lKTsNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KDQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKFgxMS5YQ29ubmVjdGlvbk51bWJlcihtb25bMF0uZGlzcGxheSkuVmFsLCB7IHJlYWRzZXQ6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX21hc3RlclByb21pc2UgPSB0aGlzLl9tYXN0ZXJQcm9taXNlOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbW9uWzBdLmRpc3BsYXk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQub24oJ3JlYWRzZXQnLCBmdW5jdGlvbiAoZmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgWEUgPSBHTS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFgxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YTmV4dEV2ZW50U3luYyh0aGlzLl9kaXNwbGF5LCBYRSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihYRS5EZXJlZigwLCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpID09IFNlbGVjdGlvbk5vdGlmeSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHMgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN6ID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWlsID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWEdldFdpbmRvd1Byb3BlcnR5KHRoaXMuX2Rpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQsIDAsIDY1NTM1LCAwLCBBbnlQcm9wZXJ0eVR5cGUsIGlkLCBiaXRzLCBzeiwgdGFpbCwgcmVzdWx0KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuX3JlcyhyZXN1bHQuRGVyZWYoKS5TdHJpbmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YRnJlZShyZXN1bHQuRGVyZWYoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhEZXN0cm95V2luZG93KHRoaXMuX2Rpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURlc2NyaXB0b3IoZmQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIGNvbnNvbGUuZXJyb3IpOw0KICAgIH0NCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9jb3B5KHR4dCkNCnsNCiAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICB2YXIgaWQ7DQogICAgdHJ5DQogICAgew0KICAgICAgICBpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgfQ0KICAgIGNhdGNoKGUpDQogICAgew0KICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKGlkKTsNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXAsIFsneGNsaXAoJyArIHJldC5faGFzaENvZGUoKSArICcpJywgJy1zZWxlY3Rpb24nLCAnYyddLCB7IHVpZDogaWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyBjb25zb2xlLmxvZyhjLnRvU3RyaW5nKCkpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgeGNsaXBUYWJsZVt0aGlzLnByb21pc2UuX2hhc2hDb2RlKCldID0gc2V0VGltZW91dChmdW5jdGlvbiAocCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNoID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgIGNoLnN0ZG91dC5zdHIgPSAnJzsgY2guc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICAgICAg", 16000); + memcpy_s(_clipboard + 16000, 15544, "ew0KICAgICAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCdwcyAtYXhvIHBpZCAtbyBjbWQgJykNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgncHMgLWUgLW8gcGlkIC1vIGNtZCAnKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3wgZ3JlcCAieGNsaXAoJyArIHAuX2hhc2hDb2RlKCkgKyAnKSIgfCAnICsgIiB0ciAnXFxuJyAnYCcgfCBhd2sgLUYnYCcgJyIpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3snKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICBmb3IoaT0xO2k8TkY7KytpKScpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgIHsnKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgc3BsaXQoJGksdG9rZW5zLCIgIik7Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgIG5hbWU9c3Vic3RyKCRpLCBsZW5ndGgodG9rZW5zWzFdKSszKTsnKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgY2hrbmFtZT1zdWJzdHIobmFtZSwxLDYpOycpDQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgIGlmKGNoa25hbWU9PSJ4Y2xpcCgiKScpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICB7Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgICAgIHByaW50ZiAiJXMiLCB0b2tlbnNbMV07Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgIH0nKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICB9Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgifSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgY2gud2FpdEV4aXQoKTsNCiAgICAgICAgICAgIGlmKGNoLnN0ZG91dC5zdHIgIT0gJycpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5raWxsKHBhcnNlSW50KGNoLnN0ZG91dC5zdHIpLCAnU0lHS0lMTCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZGVsZXRlIHhjbGlwVGFibGVbcC5faGFzaENvZGUoKV07DQogICAgICAgIH0sIDIwMDAwLCB0aGlzLnByb21pc2UpOw0KICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgIH0pOw0KICAgIHJldC5jaGlsZC5zdGRpbi53cml0ZSh0eHQsIGZ1bmN0aW9uICgpDQogICAgew0KICAgICAgICB0aGlzLmVuZCgpOw0KICAgIH0pOw0KDQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBsaW5fY29weXRleHQodHh0KQ0Kew0KICAgIHZhciBYMTEgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExOw0KICAgIGlmICghWDExKQ0KICAgIHsNCiAgICAgICAgdGhyb3coJ1gxMSByZXF1aXJlZCBmb3IgQ2xpcGJvYXJkIE1hbmlwdWxhdGlvbicpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiAobGluX3hjbGlwX2NvcHkodHh0KSk7DQogICAgICAgIH0NCiAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX2dtOw0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgcmV0Ll90eHQgPSB0eHQ7DQogICAgICAgIHJldC5fZ2V0SW5mb1Byb21pc2UgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRJbmZvKCk7DQogICAgICAgIHJldC5fZ2V0SW5mb1Byb21pc2UuX21hc3RlclByb21pc2UgPSByZXQ7DQogICAgICAgIHJldC5fZ2V0SW5mb1Byb21pc2UudGhlbihmdW5jdGlvbiAobW9uKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAobW9uLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gWDExLlhXaGl0ZVBpeGVsKG1vblswXS5kaXNwbGF5LCBtb25bMF0uc2NyZWVuSWQpLlZhbDsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ0NMSVBCT0FSRCcpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnVVRGOF9TVFJJTkcnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOID0gWDExLlhSb290V2luZG93KG1vblswXS5kaXNwbGF5LCBtb25bMF0uc2NyZWVuSWQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiA9IFgxMS5YQ3JlYXRlU2ltcGxlV2luZG93KG1vblswXS5kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLlJPT1RXSU4sIDAsIDAsIG1vblswXS5yaWdodCwgNSwgMCwgd2hpdGUsIHdoaXRlKTsNCg0KICAgICAgICAgICAgICAgIFgxMS5YU2V0U2VsZWN0aW9uT3duZXIobW9uWzBdLmRpc3BsYXksIFhBX1BSSU1BUlksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgQ3VycmVudFRpbWUpOw0KICAgICAgICAgICAgICAgIFgxMS5YU2V0U2VsZWN0aW9uT3duZXIobW9uWzBdLmRpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuQ0xJUElELCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIEN1cnJlbnRUaW1lKTsNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KDQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQgPSByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykuYWRkRGVzY3JpcHRvcihYMTEuWENvbm5lY3Rpb25OdW1iZXIobW9uWzBdLmRpc3BsYXkpLlZhbCwgeyByZWFkc2V0OiB0cnVlIH0pOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9tYXN0ZXJQcm9taXNlID0gdGhpcy5fbWFzdGVyUHJvbWlzZTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5fZGlzcGxheSA9IG1vblswXS5kaXNwbGF5Ow0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Lm9uKCdyZWFkc2V0JywgZnVuY3Rpb24gKGZkKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIFhFID0gR00uQ3JlYXRlVmFyaWFibGUoMTAyNCk7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChYMTEuWFBlbmRpbmcodGhpcy5fZGlzcGxheSkuVmFsKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBYMTEuWE5leHRFdmVudFN5bmModGhpcy5fZGlzcGxheSwgWEUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChYRS5EZXJlZigwLCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uQ2xlYXI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1NvbWVib2R5IGVsc2Ugb3ducyBjbGlwYm9hcmQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25SZXF1ZXN0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdTb21lYm9keSB3YW50cyB1cyB0byBzZW5kIHRoZW0gZGF0YScpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldiA9IEdNLkNyZWF0ZVZhcmlhYmxlKEdNLlBvaW50ZXJTaXplID09IDggPyA3MiA6IDM2KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3JlcXVlc3RvciA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig0MCwgOCkgOiBYRS5EZXJlZigyMCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9zZWxlY3Rpb24gPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNDgsIDgpIDogWEUuRGVyZWYoMjQsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfcHJvcGVydHkgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNjQsIDgpIDogWEUuRGVyZWYoMzIsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfdGFyZ2V0ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDU2LCA4KSA6IFhFLkRlcmVmKDI4LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3RpbWUgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNzIsIDgpIDogWEUuRGVyZWYoMzYsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JfZGlzcGxheSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZigyNCwgOCkgOiBYRS5EZXJlZigxMiwgNCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXYuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKFNlbGVjdGlvbk5vdGlmeSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl9yZXF1ZXN0b3IgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoMzIsIDgpIDogZXYuRGVyZWYoMTYsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfc2VsZWN0aW9uID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDQwLCA4KSA6IGV2LkRlcmVmKDIwLCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3RhcmdldCA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig0OCwgOCkgOiBldi5EZXJlZigyNCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl90aW1lID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDY0LCA4KSA6IGV2LkRlcmVmKDMyLCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3Byb3BlcnR5ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDU2LCA4KSA6IGV2LkRlcmVmKDI4LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXB0ZXh0ID0gR00uQ3JlYXRlVmFyaWFibGUodGhpcy5fbWFzdGVyUHJvbWlzZS5fdHh0KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcl9yZXF1ZXN0b3IuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl9yZXF1ZXN0b3IudG9CdWZmZXIoKSk7IGNvbnNvbGUuaW5mbzEoJ1JFUVVFU1RPUjogJyArIHNyX3JlcXVlc3Rvci5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS50b1N0cmluZygnaGV4JykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcl9zZWxlY3Rpb24uRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl9zZWxlY3Rpb24udG9CdWZmZXIoKSk7IGNvbnNvbGUuaW5mbzEoJ1NFTEVDVElPTjogJyArIHNyX3NlbGVjdGlvbi5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS50b1N0cmluZygnaGV4JykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcl90YXJnZXQuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl90YXJnZXQudG9CdWZmZXIoKSk7IGNvbnNvbGUuaW5mbzEoJ1RBUkdFVDogJyArIHNyX3RhcmdldC5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS50b1N0cmluZygnaGV4JykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcl90aW1lLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfdGltZS50b0J1ZmZlcigpKTsgY29uc29sZS5pbmZvMSgnVElNRTogJyArIHNyX3RpbWUuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JfdGFyZ2V0LkRlcmVmKCkuVmFsID09IHRoaXMuX21hc3RlclByb21pc2UuRk1USUQuVmFsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdVVEY4IFJlcXVlc3QgZm9yOiAnICsgY2xpcHRleHQuU3RyaW5nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoc3JfZGlzcGxheS5WYWwsIHNyX3JlcXVlc3Rvci5EZXJlZigpLlZhbCwgc3JfcHJvcGVydHkuRGVyZWYoKS5WYWwsIHNyX3RhcmdldC5EZXJlZigpLlZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWENoYW5nZVByb3BlcnR5KHNyX2Rpc3BsYXkuRGVyZWYoKSwgc3JfcmVxdWVzdG9yLkRlcmVmKCksIHNyX3Byb3BlcnR5LkRlcmVmKCksIHNyX3RhcmdldC5EZXJlZigpLCA4LCBQcm9wTW9kZVJlcGxhY2UsIGNsaXB0ZXh0LCBjbGlwdGV4dC5fc2l6ZSAtIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhTeW5jKHNyX2Rpc3BsYXkuRGVyZWYoKSwgMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcl9wcm9wZXJ0eS5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3Byb3BlcnR5LnRvQnVmZmVyKCkpOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbzEoJ1Vua25vd24gRm9ybWF0IFJlcXVlc3QnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2X3Byb3BlcnR5LnBvaW50ZXJCdWZmZXIoKS53cml0ZVVJbnQzMkxFKE5vbmUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhTZW5kRXZlbnQoc3JfZGlzcGxheS5EZXJlZigpLCBzcl9yZXF1ZXN0b3IuRGVyZWYoKSwgMSwgMCwgZXYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LCBjb25zb2xlLmxvZyk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiB3aW5fcmVhZHRleHQoKQ0Kew0KICAgIHZhciBoOw0KICAgIHZhciByZXQgPSAnJzsNCiAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICB2YXIgdXNlcjMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICB2YXIga2VybmVsMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgna2VybmVsMzIuZGxsJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxBbGxvYycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsTG9jaycpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsVW5sb2NrJyk7DQoNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdDbG9zZUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0lzQ2xpcGJvYXJkRm9ybWF0QXZhaWxhYmxlJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnR2V0Q2xpcGJvYXJkRGF0YScpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ09wZW5DbGlwYm9hcmQnKTsNCg0KICAgIHVzZXIzMi5PcGVuQ2xpcGJvYXJkKDApOw0KDQogICAgaWYgKHVzZXIzMi5Jc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZShDRl9VTklDT0RFVEVYVCkuVmFsICE9IDApDQogICAgew0KICAgICAgICBoID0gdXNlcjMyLkdldENsaXBib2FyZERhdGEoQ0ZfVU5JQ09ERVRFWFQpOw0KICAgICAgICBpZiAoaC5WYWwgIT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGhidWZmZXIgPSBrZXJuZWwzMi5HbG9iYWxMb2NrKGgpOw0KICAgICAgICAgICAgaGJ1ZmZlci5fc2l6ZSA9IC0xOw0KICAgICAgICAgICAgcmV0ID0gaGJ1ZmZlci5XaWRlMlVURjg7DQogICAgICAgICAgICBrZXJuZWwzMi5HbG9iYWxVbmxvY2soaCk7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgdmFyIHAgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgICAgICBwLl9yZWooJ1Vua25vd24gQ2xpcGJvYXJkIERhdGEnKTsNCiAgICAgICAgcmV0dXJuIChwKTsNCiAgICB9DQoNCg0KICAgIHVzZXIzMi5DbG9zZUNsaXBib2FyZCgpOw0KDQogICAgdmFyIHAgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgIHAuX3JlcyhyZXQpOw0KICAgIHJldHVybiAocCk7DQp9DQoNCmZ1bmN0aW9uIHdpbl9jb3B5dGV4dCh0eHQpDQp7DQogICAgdmFyIEdNRU1fTU9WRUFCTEUgPSAweDAwMDI7DQogICAgdmFyIENGX1RFWFQgPSAxOw0KDQogICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7DQogICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsQWxsb2MnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbExvY2snKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbFVubG9jaycpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0Nsb3NlQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnRW1wdHlDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZScpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ09wZW5DbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdTZXRDbGlwYm9hcmREYXRhJyk7DQoNCiAgICB2YXIgbXR4dCA9IEdNLkNyZWF0ZVZhcmlhYmxlKHR4dCwgeyB3aWRlOiB0cnVlIH0pOyANCiAgICB2YXIgaCA9IGtlcm5lbDMyLkdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIG10eHQuX3NpemUpOw0KICAgIGguYXV0b0ZyZWUoZmFsc2UpOw0KICAgIHZhciBoYnVmZmVyID0ga2VybmVsMzIuR2xvYmFsTG9jayhoKTsNCiAgICBoYnVmZmVyLmF1dG9GcmVlKGZhbHNlKTsNCg0KICAgIG10eHQudG9CdWZmZXIoKS5jb3B5KGhidWZmZXIuRGVyZWYoMCwgKDIgKiB0eHQubGVuZ3RoKSArIDIpLnRvQnVmZmVyKCkpOw0KICAgIGtlcm5lbDMyLkdsb2JhbFVubG9jayhoKTsNCg0KICAgIHVzZXIzMi5PcGVuQ2xpcGJvYXJkKDApOw0KICAgIHVzZXIzMi5FbXB0eUNsaXBib2FyZCgpOw0KICAgIHVzZXIzMi5TZXRDbGlwYm9hcmREYXRhKENGX1VOSUNPREVURVhULCBoKTsNCiAgICB1c2VyMzIuQ2xvc2VDbGlwYm9hcmQoKTsNCn0NCmZ1bmN0aW9uIG1hY29zX2NvcHl0ZXh0KGNsaXBUZXh0KQ0Kew0KICAgIHJldHVybiAocmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5zZXRDbGlwYm9hcmQoY2xpcFRleHQpKTsNCn0NCmZ1bmN0aW9uIG1hY29zX3JlYWR0ZXh0KCkNCnsNCiAgICByZXR1cm4gKHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuZ2V0Q2xpcGJvYXJkKCkpOw0KfQ0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICd3aW4zMic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gd2luX2NvcHl0ZXh0Ow0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5yZWFkID0gd2luX3JlYWR0ZXh0Ow0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbGluX2NvcHl0ZXh0Ow0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5yZWFkID0gbGluX3JlYWR0ZXh0Ow0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICJ4Y2xpcCIsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3hjbGlwKSB7IHJldHVybiAodGhpcy5feGNsaXApOyB9DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeGNsaXAgfCBhd2sgJ3sgcHJpbnQgJDI7IH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICIiKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIl94Y2xpcCIsIHsgdmFsdWU6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAiIiA/IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIDogbnVsbCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKCd1c3IvbG9jYWwvYmluL3hjbGlwJykpDQogICAgICAgIHsNCiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbGluX3hjbGlwX2NvcHk7DQogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5yZWFkID0gYnNkX3hjbGlwX3JlYWR0ZXh0Ow0KICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAieGNsaXAiLCB7IHZhbHVlOiAndXNyL2xvY2FsL2Jpbi94Y2xpcCcgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB0aHJvdyAoJ0NsaXBib2FyZCBTdXBwb3J0IG9uIEJTRCByZXF1aXJlcyB4Y2xpcCcpOw0KICAgICAgICB9DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWFjb3NfY29weXRleHQ7DQogICAgICAgIG1vZHVsZS5leHBvcnRzLnJlYWQgPSBtYWNvc19yZWFkdGV4dDsNCiAgICAgICAgYnJlYWs7DQp9DQptb2R1bGUuZXhwb3J0cy5uYXRpdmVBZGRNb2R1bGUgPSBuYXRpdmVBZGRNb2R1bGU7DQptb2R1bGUuZXhwb3J0cy5kaXNwYXRjaFdyaXRlID0gZGlzcGF0Y2hXcml0ZTsNCm1vZHVsZS5leHBvcnRzLmRpc3BhdGNoUmVhZCA9IGRpc3BhdGNoUmVhZDs=", 15544); + ILibBase64DecodeEx((unsigned char*)_clipboard, 31544, (unsigned char*)_clipboard + 31544); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "clipboard"); duk_push_string(ctx, _clipboard + 31544); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_clipboard); diff --git a/modules/clipboard.js b/modules/clipboard.js index d60e80c..532495b 100644 --- a/modules/clipboard.js +++ b/modules/clipboard.js @@ -323,7 +323,15 @@ function lin_xclip_copy(txt) var ch = require('child_process').execFile('/bin/sh', ['sh']); ch.stdout.str = ''; ch.stdout.on('data', function (c) { this.str += c.toString(); }); ch.stderr.on('data', function (c) { console.log(c.toString()); }); - ch.stdin.write('ps -e -o pid -o cmd | grep "xclip(' + p._hashCode() + ')" | ' + " tr '\\n' '`' | awk -F'`' '"); + if (process.platform == 'freebsd') + { + ch.stdin.write('ps -axo pid -o cmd ') + } + else + { + ch.stdin.write('ps -e -o pid -o cmd ') + } + ch.stdin.write('| grep "xclip(' + p._hashCode() + ')" | ' + " tr '\\n' '`' | awk -F'`' '"); ch.stdin.write('{'); ch.stdin.write(' for(i=1;i