From 0bd84b93b196bbc1efc321eceefe9159f380bcff Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Thu, 4 Jun 2020 00:47:34 -0700 Subject: [PATCH] freebsd fix --- microscript/ILibDuktape_Polyfills.c | 10 +++++----- modules/clipboard.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 7368361..ba6f0de 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(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); + char *_clipboard = ILibMemory_Allocate(55211, 0, NULL, NULL); + memcpy_s(_clipboard + 0, 31548, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCg0KdmFyIEFueVByb3BlcnR5VHlwZSA9IDA7DQp2YXIgQ3VycmVudFRpbWUgPSAwOw0KdmFyIE5vbmUgPSAwOw0KdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7DQp2YXIgU2VsZWN0aW9uQ2xlYXIgPSAyOTsNCnZhciBTZWxlY3Rpb25Ob3RpZnkgPSAzMTsNCnZhciBTZWxlY3Rpb25SZXF1ZXN0ID0gMzA7DQp2YXIgWEFfUFJJTUFSWSA9IDE7DQp2YXIgQ0ZfVEVYVCA9IDE7DQp2YXIgQ0ZfVU5JQ09ERVRFWFQgPSAxMzsNCg0KdmFyIHhjbGlwVGFibGUgPSB7fTsNCg0KZnVuY3Rpb24gbmF0aXZlQWRkTW9kdWxlKG5hbWUpDQp7DQogICAgdmFyIHZhbHVlID0gZ2V0SlNNb2R1bGUobmFtZSk7DQogICAgdmFyIHJldCA9ICJkdWtfcGV2YWxfc3RyaW5nX25vcmVzdWx0KGN0eCwgXCJhZGRNb2R1bGUoJyIgKyBuYW1lICsgIicsIEJ1ZmZlci5mcm9tKCciICsgQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCdiYXNlNjQnKSArICInLCAnYmFzZTY0JykudG9TdHJpbmcoKSk7XCIpOyI7DQogICAgaWYgKHJldC5sZW5ndGggPiAxNjMwMCkNCiAgICB7DQogICAgICAgIC8vIE1TIFZpc3VhbCBTdHVkaW8gaGFzIGEgbWF4c2l6ZSBsaW1pdGF0aW9uDQogICAgICAgIHZhciB0bXAgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KICAgICAgICByZXQgPSAnY2hhciAqXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnID0gSUxpYk1lbW9yeV9BbGxvY2F0ZSgnICsgKHRtcC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyAyKSArICcsIDAsIE5VTEwsIE5VTEwpO1xuJzsNCiAgICAgICAgdmFyIGkgPSAwOw0KICAgICAgICB3aGlsZSAoaSA8IHRtcC5sZW5ndGgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBjaHVuayA9IHRtcC5zdWJzdHJpbmcoaSwgaSsxNjAwMCk7DQogICAgICAgICAgICByZXQgKz0gKCdtZW1jcHlfcyhfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgaSArICcsICcgKyAodG1wLmxlbmd0aCAtIGkpICsgJywgIicgKyBjaHVuayArICciLCAnICsgY2h1bmsubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgICAgIGkgKz0gY2h1bmsubGVuZ3RoOw0KICAgICAgICB9DQogICAgICAgIHJldCArPSAoJ0lMaWJCYXNlNjREZWNvZGVFeCgodW5zaWduZWQgY2hhciopXycgKyBuYW1lLnNwbGl0KCctJykuam9pbignJykgKyAnLCAnICsgdG1wLmxlbmd0aCArICcsICh1bnNpZ25lZCBjaGFyKilfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcgKyAnICsgdG1wLmxlbmd0aCArICcpO1xuJyk7DQogICAgICAgIHJldCArPSAoJ2R1a19wdXNoX2dsb2JhbF9vYmplY3QoY3R4KTtkdWtfZ2V0X3Byb3Bfc3RyaW5nKGN0eCwgLTEsICJhZGRNb2R1bGUiKTtkdWtfc3dhcF90b3AoY3R4LCAtMik7ZHVrX3B1c2hfc3RyaW5nKGN0eCwgIicgKyBuYW1lICsgJyIpO2R1a19wdXNoX3N0cmluZyhjdHgsIF8nICsgbmFtZS5zcGxpdCgnLScpLmpvaW4oJycpICsgJyArICcgKyB0bXAubGVuZ3RoICsgJyk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZHVrX3BjYWxsX21ldGhvZChjdHgsIDIpOyBkdWtfcG9wKGN0eCk7XG4nKTsNCiAgICAgICAgcmV0ICs9ICgnZnJlZShfJyArIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcnKSArICcpO1xuJyk7DQogICAgfQ0KICAgIG1vZHVsZS5leHBvcnRzKHJldCk7DQp9DQpmdW5jdGlvbiBkaXNwYXRjaFJlYWQoc2lkKQ0Kew0KICAgIHZhciBpZCA9IDA7DQoNCiAgICBpZihzaWQ9PW51bGwpDQogICAgew0KICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLkN1cnJlbnQoKS5BY3RpdmU7DQogICAgICAgICAgICBpZiAoYWN0aXZlLmxlbmd0aCA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWQgPSBwYXJzZUludChhY3RpdmVbMF0uU2Vzc2lvbklkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZCA9IHNpZDsNCiAgICB9DQoNCiAgICBpZiAoaWQgPT0gMCB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdkYXJ3aW4nIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnIHx8IChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcgJiYgcmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cy5yZWFkKCkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5zdWNjZXNzID0gZmFsc2U7DQogICAgICAgIHJldC5tYXN0ZXIgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5DcmVhdGUoY2hpbGRQcm9wZXJ0aWVzKTsNCiAgICAgICAgcmV0Lm1hc3Rlci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQubWFzdGVyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5zdWNjZXNzID0gdHJ1ZTsNCiAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKGQpOw0KICAgICAgICAgICAgdGhpcy5leGl0KCk7DQogICAgICAgIH0pOw0KICAgICAgICByZXQubWFzdGVyLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5wcm9taXNlLnN1Y2Nlc3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ0Vycm9yIHJlYWRpbmcgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkZWxldGUgdGhpcy5wcm9taXNlLm1hc3RlcjsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5tYXN0ZXIuRXhlY3V0ZVN0cmluZygidmFyIHBhcmVudCA9IHJlcXVpcmUoJ1NjcmlwdENvbnRhaW5lcicpOyByZXF1aXJlKCdjbGlwYm9hcmQnKS5yZWFkKCkudGhlbihmdW5jdGlvbih2KXtwYXJlbnQuc2VuZCh2KTt9LCBmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpO3Byb2Nlc3MuZXhpdCgpO30pOyIpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwYXRjaFdyaXRlKGRhdGEsIHNpZCkNCnsNCiAgICB2YXIgaWQgPSAwOw0KDQogICAgaWYoc2lkID09IG51bGwpDQogICAgew0KICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBhY3RpdmUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuQ3VycmVudCgpLkFjdGl2ZTsNCiAgICAgICAgICAgIGlmKGFjdGl2ZS5sZW5ndGg+MCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZCA9IHBhcnNlSW50KGFjdGl2ZVswXS5TZXNzaW9uSWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIGlkID0gc2lkOw0KICAgIH0NCg0KICAgIGlmIChpZCA9PSAwIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2RhcndpbicgfHwgcHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcgfHwgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiByZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCkpDQogICAgew0KICAgICAgICByZXR1cm4obW9kdWxlLmV4cG9ydHMoZGF0YSkpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICB2YXIgY2hpbGRQcm9wZXJ0aWVzID0geyBzZXNzaW9uSWQ6IGlkIH07DQogICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgICAgIHsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgICAgICAgICAgY2hpbGRQcm9wZXJ0aWVzLmVudiA9IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgRElTUExBWTogeGluZm8uZGlzcGxheSB9Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJyB8fCAhdGhpcy5tYXN0ZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKGNoaWxkUHJvcGVydGllcyk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5wYXJlbnQgPSB0aGlzOw0KICAgICAgICAgICAgdGhpcy5tYXN0ZXIub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkgeyBpZiAodGhpcy5wYXJlbnQubWFzdGVyKSB7IGRlbGV0ZSB0aGlzLnBhcmVudC5tYXN0ZXI7IH0gfSk7DQogICAgICAgICAgICB0aGlzLm1hc3Rlci5vbignZGF0YScsIGZ1bmN0aW9uIChkKSB7IGNvbnNvbGUubG9nKGQpOyB9KTsNCiAgICAgICAgICAgIHRoaXMubWFzdGVyLkV4ZWN1dGVTdHJpbmcoInZhciBwYXJlbnQgPSByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKTsgcGFyZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24oZCl7dHJ5e3JlcXVpcmUoJ2NsaXBib2FyZCcpKGQpO31jYXRjaChlKXtyZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKGUpO31pZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpe3Byb2Nlc3MuZXhpdCgpO319KTsiKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLm1hc3Rlci5zZW5kKGRhdGEpOw0KDQogICAgICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyAmJiB0aGlzLm1hc3RlcikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYodGhpcy5tYXN0ZXIudGltZW91dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tYXN0ZXIudGltZW91dCk7DQogICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXIudGltZW91dCA9IG51bGw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLm1hc3Rlci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoc2VsZikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5leGl0KCk7DQogICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBudWxsOw0KICAgICAgICAgICAgfSwgNjAwMDAsIHRoaXMpOw0KICAgICAgICB9DQoNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpDQp7DQogICAgdmFyIGlkOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgaWQgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuY29uc29sZVVpZCgpOw0KICAgIH0NCiAgICBjYXRjaCAoZSkNCiAgICB7DQogICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfQ0KDQogICAgdmFyIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8oaWQpOw0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShyZXF1aXJlKCdjbGlwYm9hcmQnKS54Y2xpcCwgWyd4bGNsaXAnLCAnLXNlbGVjdGlvbicsICdjJywgJy1vJ10sIHsgdWlkOiBpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICByZXQuY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgaWYgKHRoaXMuc3RkZXJyLnN0ciAhPSAnJykNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoodGhpcy5zdGRlcnIuc3RyLnRyaW0oKSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLnByb21pc2UuX3Jlcyh0aGlzLnN0ZG91dC5zdHIpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGJzZF94Y2xpcF9yZWFkdGV4dCgpDQp7DQogICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgbGluX3hjbGlwX3JlYWR0ZXh0KHJldCk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBsaW5fcmVhZHRleHQoKQ0Kew0KICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOw0KICAgIHRyeQ0KICAgIHsNCiAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykNCiAgICB9DQogICAgY2F0Y2goZXhjKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooZXhjKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciBYMTEgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExOw0KICAgIGlmICghWDExKQ0KICAgIHsNCiAgICAgICAgcmV0Ll9yZWooJ1gxMSByZXF1aXJlZCBmb3IgQ2xpcGJvYXJkIE1hbmlwdWxhdGlvbicpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXApDQogICAgICAgIHsNCiAgICAgICAgICAgIGxpbl94Y2xpcF9yZWFkdGV4dChyZXQpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX2dtOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLl9tYXN0ZXJQcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKG1vbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKG1vbi5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IFgxMS5YV2hpdGVQaXhlbChtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKS5WYWw7DQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ0NMSVBCT0FSRCcpLCAwKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElEID0gWDExLlhJbnRlcm5BdG9tKG1vblswXS5kaXNwbGF5LCBHTS5DcmVhdGVWYXJpYWJsZSgnVVRGOF9TVFJJTkcnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdYU0VMX0RBVEEnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5JTkNSSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdJTkNSJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiA9IFgxMS5YUm9vdFdpbmRvdyhtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4gPSBYMTEuWENyZWF0ZVNpbXBsZVdpbmRvdyhtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOLCAwLCAwLCBtb25bMF0ucmlnaHQsIDUsIDAsIHdoaXRlLCB3aGl0ZSk7DQoNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KICAgICAgICAgICAgICAgIFgxMS5YQ29udmVydFNlbGVjdGlvbihtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQsIHRoaXMuX21hc3RlclByb21pc2UuRk1USUQsIHRoaXMuX21hc3RlclByb21pc2UuUFJPUElELCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIEN1cnJlbnRUaW1lKTsNCiAgICAgICAgICAgICAgICBYMTEuWFN5bmMobW9uWzBdLmRpc3BsYXksIDApOw0KDQoNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKFgxMS5YQ29ubmVjdGlvbk51bWJlcihtb25bMF0uZGlzcGxheSkuVmFsLCB7IHJlYWRzZXQ6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX21hc3RlclByb21pc2UgPSB0aGlzLl9tYXN0ZXJQcm9taXNlOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbW9uWzBdLmRpc3BsYXk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQub24oJ3JlYWRzZXQnLCBmdW5jdGlvbiAoZmQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgWEUgPSBHTS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFgxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YTmV4dEV2ZW50U3luYyh0aGlzLl9kaXNwbGF5LCBYRSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihYRS5EZXJlZigwLCA0KS50b0J1ZmZlcigpLnJlYWRVSW50MzJMRSgpID09IFNlbGVjdGlvbk5vdGlmeSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHMgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN6ID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWlsID0gR00uQ3JlYXRlUG9pbnRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBHTS5DcmVhdGVQb2ludGVyKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTEuWEdldFdpbmRvd1Byb3BlcnR5KHRoaXMuX2Rpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTiwgdGhpcy5fbWFzdGVyUHJvbWlzZS5QUk9QSUQsIDAsIDY1NTM1LCAwLCBBbnlQcm9wZXJ0eVR5cGUsIGlkLCBiaXRzLCBzeiwgdGFpbCwgcmVzdWx0KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuX3JlcyhyZXN1bHQuRGVyZWYoKS5TdHJpbmcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YRnJlZShyZXN1bHQuRGVyZWYoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhEZXN0cm95V2luZG93KHRoaXMuX2Rpc3BsYXksIHRoaXMuX21hc3RlclByb21pc2UuRkFLRVdJTik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURlc2NyaXB0b3IoZmQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIGNvbnNvbGUuZXJyb3IpOw0KICAgIH0NCiAgICByZXR1cm4gKHJldCk7DQp9DQoNCmZ1bmN0aW9uIGxpbl94Y2xpcF9jb3B5KHR4dCkNCnsNCiAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICB2YXIgaWQ7DQogICAgdHJ5DQogICAgew0KICAgICAgICBpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgfQ0KICAgIGNhdGNoKGUpDQogICAgew0KICAgICAgICByZXQuX3JlaihlKTsNCiAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgIH0NCg0KICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKGlkKTsNCiAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocmVxdWlyZSgnY2xpcGJvYXJkJykueGNsaXAsIFsneGNsaXAoJyArIHJldC5faGFzaENvZGUoKSArICcpJywgJy1zZWxlY3Rpb24nLCAnYyddLCB7IHVpZDogaWQsIGVudjogeGluZm8uZXhwb3J0RW52KCkgfSk7DQogICAgcmV0LmNoaWxkLnByb21pc2UgPSByZXQ7DQogICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyBjb25zb2xlLmxvZyhjLnRvU3RyaW5nKCkpOyB9KTsNCiAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgeGNsaXBUYWJsZVt0aGlzLnByb21pc2UuX2hhc2hDb2RlKCldID0gc2V0VGltZW91dChmdW5jdGlvbiAocCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNoID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgIGNoLnN0ZG91dC5zdHIgPSAnJzsgY2guc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IGNvbnNvbGUubG9nKGMudG9TdHJpbmcoKSk7IH0pOw0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgICAgICAgICAg", 16000); + memcpy_s(_clipboard + 16000, 15548, "ew0KICAgICAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCdwcyAtYXhvIHBpZCAtbyBjb21tYW5kICcpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3BzIC1lIC1vIHBpZCAtbyBjbWQgJykNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCd8IGdyZXAgInhjbGlwKCcgKyBwLl9oYXNoQ29kZSgpICsgJykiIHwgJyArICIgdHIgJ1xcbicgJ2AnIHwgYXdrIC1GJ2AnICciKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCd7Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgZm9yKGk9MTtpPE5GOysraSknKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICB7Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgIHNwbGl0KCRpLHRva2VucywiICIpOycpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICBuYW1lPXN1YnN0cigkaSwgbGVuZ3RoKHRva2Vuc1sxXSkrMyk7Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgICAgIGNoa25hbWU9c3Vic3RyKG5hbWUsMSw2KTsnKQ0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICBpZihjaGtuYW1lPT0ieGNsaXAoIiknKTsNCiAgICAgICAgICAgIGNoLnN0ZGluLndyaXRlKCcgICAgICAgeycpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICAgICBwcmludGYgIiVzIiwgdG9rZW5zWzFdOycpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJyAgICAgICB9Jyk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgnICAgfScpOw0KICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoIn0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgIGNoLndhaXRFeGl0KCk7DQogICAgICAgICAgICBpZihjaC5zdGRvdXQuc3RyICE9ICcnKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByb2Nlc3Mua2lsbChwYXJzZUludChjaC5zdGRvdXQuc3RyKSwgJ1NJR0tJTEwnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRlbGV0ZSB4Y2xpcFRhYmxlW3AuX2hhc2hDb2RlKCldOw0KICAgICAgICB9LCAyMDAwMCwgdGhpcy5wcm9taXNlKTsNCiAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICB9KTsNCiAgICByZXQuY2hpbGQuc3RkaW4ud3JpdGUodHh0LCBmdW5jdGlvbiAoKQ0KICAgIHsNCiAgICAgICAgdGhpcy5lbmQoKTsNCiAgICB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KZnVuY3Rpb24gbGluX2NvcHl0ZXh0KHR4dCkNCnsNCiAgICB2YXIgWDExID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMTsNCiAgICBpZiAoIVgxMSkNCiAgICB7DQogICAgICAgIHRocm93KCdYMTEgcmVxdWlyZWQgZm9yIENsaXBib2FyZCBNYW5pcHVsYXRpb24nKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2NsaXBib2FyZCcpLnhjbGlwKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXR1cm4gKGxpbl94Y2xpcF9jb3B5KHR4dCkpOw0KICAgICAgICB9DQogICAgICAgIHZhciBHTSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9nbTsNCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHJldC5fdHh0ID0gdHh0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpOw0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLl9tYXN0ZXJQcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2dldEluZm9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKG1vbikNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKG1vbi5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciB3aGl0ZSA9IFgxMS5YV2hpdGVQaXhlbChtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKS5WYWw7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5DTElQSUQgPSBYMTEuWEludGVybkF0b20obW9uWzBdLmRpc3BsYXksIEdNLkNyZWF0ZVZhcmlhYmxlKCdDTElQQk9BUkQnKSwgMCk7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5GTVRJRCA9IFgxMS5YSW50ZXJuQXRvbShtb25bMF0uZGlzcGxheSwgR00uQ3JlYXRlVmFyaWFibGUoJ1VURjhfU1RSSU5HJyksIDApOw0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuUk9PVFdJTiA9IFgxMS5YUm9vdFdpbmRvdyhtb25bMF0uZGlzcGxheSwgbW9uWzBdLnNjcmVlbklkKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4gPSBYMTEuWENyZWF0ZVNpbXBsZVdpbmRvdyhtb25bMF0uZGlzcGxheSwgdGhpcy5fbWFzdGVyUHJvbWlzZS5ST09UV0lOLCAwLCAwLCBtb25bMF0ucmlnaHQsIDUsIDAsIHdoaXRlLCB3aGl0ZSk7DQoNCiAgICAgICAgICAgICAgICBYMTEuWFNldFNlbGVjdGlvbk93bmVyKG1vblswXS5kaXNwbGF5LCBYQV9QUklNQVJZLCB0aGlzLl9tYXN0ZXJQcm9taXNlLkZBS0VXSU4sIEN1cnJlbnRUaW1lKTsNCiAgICAgICAgICAgICAgICBYMTEuWFNldFNlbGVjdGlvbk93bmVyKG1vblswXS5kaXNwbGF5LCB0aGlzLl9tYXN0ZXJQcm9taXNlLkNMSVBJRCwgdGhpcy5fbWFzdGVyUHJvbWlzZS5GQUtFV0lOLCBDdXJyZW50VGltZSk7DQogICAgICAgICAgICAgICAgWDExLlhTeW5jKG1vblswXS5kaXNwbGF5LCAwKTsNCg0KICAgICAgICAgICAgICAgIHRoaXMuX21hc3RlclByb21pc2UuRGVzY3JpcHRvckV2ZW50ID0gcmVxdWlyZSgnRGVzY3JpcHRvckV2ZW50cycpLmFkZERlc2NyaXB0b3IoWDExLlhDb25uZWN0aW9uTnVtYmVyKG1vblswXS5kaXNwbGF5KS5WYWwsIHsgcmVhZHNldDogdHJ1ZSB9KTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5fbWFzdGVyUHJvbWlzZSA9IHRoaXMuX21hc3RlclByb21pc2U7DQogICAgICAgICAgICAgICAgdGhpcy5fbWFzdGVyUHJvbWlzZS5EZXNjcmlwdG9yRXZlbnQuX2Rpc3BsYXkgPSBtb25bMF0uZGlzcGxheTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tYXN0ZXJQcm9taXNlLkRlc2NyaXB0b3JFdmVudC5vbigncmVhZHNldCcsIGZ1bmN0aW9uIChmZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBYRSA9IEdNLkNyZWF0ZVZhcmlhYmxlKDEwMjQpOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoWDExLlhQZW5kaW5nKHRoaXMuX2Rpc3BsYXkpLlZhbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhOZXh0RXZlbnRTeW5jKHRoaXMuX2Rpc3BsYXksIFhFKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoWEUuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkNsZWFyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdTb21lYm9keSBlbHNlIG93bnMgY2xpcGJvYXJkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uUmVxdWVzdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnU29tZWJvZHkgd2FudHMgdXMgdG8gc2VuZCB0aGVtIGRhdGEnKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXYgPSBHTS5DcmVhdGVWYXJpYWJsZShHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gNzIgOiAzNik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl9yZXF1ZXN0b3IgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoNDAsIDgpIDogWEUuRGVyZWYoMjAsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Jfc2VsZWN0aW9uID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDQ4LCA4KSA6IFhFLkRlcmVmKDI0LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3Byb3BlcnR5ID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDY0LCA4KSA6IFhFLkRlcmVmKDMyLCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX3RhcmdldCA9IEdNLlBvaW50ZXJTaXplID09IDggPyBYRS5EZXJlZig1NiwgOCkgOiBYRS5EZXJlZigyOCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcl90aW1lID0gR00uUG9pbnRlclNpemUgPT0gOCA/IFhFLkRlcmVmKDcyLCA4KSA6IFhFLkRlcmVmKDM2LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyX2Rpc3BsYXkgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gWEUuRGVyZWYoMjQsIDgpIDogWEUuRGVyZWYoMTIsIDQpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShTZWxlY3Rpb25Ob3RpZnkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfcmVxdWVzdG9yID0gR00uUG9pbnRlclNpemUgPT0gOCA/IGV2LkRlcmVmKDMyLCA4KSA6IGV2LkRlcmVmKDE2LCA0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV2X3NlbGVjdGlvbiA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig0MCwgOCkgOiBldi5EZXJlZigyMCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl90YXJnZXQgPSBHTS5Qb2ludGVyU2l6ZSA9PSA4ID8gZXYuRGVyZWYoNDgsIDgpIDogZXYuRGVyZWYoMjQsIDQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZfdGltZSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig2NCwgOCkgOiBldi5EZXJlZigzMiwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldl9wcm9wZXJ0eSA9IEdNLlBvaW50ZXJTaXplID09IDggPyBldi5EZXJlZig1NiwgOCkgOiBldi5EZXJlZigyOCwgNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwdGV4dCA9IEdNLkNyZWF0ZVZhcmlhYmxlKHRoaXMuX21hc3RlclByb21pc2UuX3R4dCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfcmVxdWVzdG9yLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfcmVxdWVzdG9yLnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdSRVFVRVNUT1I6ICcgKyBzcl9yZXF1ZXN0b3IuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jfc2VsZWN0aW9uLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfc2VsZWN0aW9uLnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdTRUxFQ1RJT046ICcgKyBzcl9zZWxlY3Rpb24uRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfdGFyZ2V0LkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLmNvcHkoZXZfdGFyZ2V0LnRvQnVmZmVyKCkpOyBjb25zb2xlLmluZm8xKCdUQVJHRVQ6ICcgKyBzcl90YXJnZXQuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfdGltZS5EZXJlZigpLnBvaW50ZXJCdWZmZXIoKS5jb3B5KGV2X3RpbWUudG9CdWZmZXIoKSk7IGNvbnNvbGUuaW5mbzEoJ1RJTUU6ICcgKyBzcl90aW1lLkRlcmVmKCkucG9pbnRlckJ1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyX3RhcmdldC5EZXJlZigpLlZhbCA9PSB0aGlzLl9tYXN0ZXJQcm9taXNlLkZNVElELlZhbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvMSgnVVRGOCBSZXF1ZXN0IGZvcjogJyArIGNsaXB0ZXh0LlN0cmluZyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKHNyX2Rpc3BsYXkuVmFsLCBzcl9yZXF1ZXN0b3IuRGVyZWYoKS5WYWwsIHNyX3Byb3BlcnR5LkRlcmVmKCkuVmFsLCBzcl90YXJnZXQuRGVyZWYoKS5WYWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExLlhDaGFuZ2VQcm9wZXJ0eShzcl9kaXNwbGF5LkRlcmVmKCksIHNyX3JlcXVlc3Rvci5EZXJlZigpLCBzcl9wcm9wZXJ0eS5EZXJlZigpLCBzcl90YXJnZXQuRGVyZWYoKSwgOCwgUHJvcE1vZGVSZXBsYWNlLCBjbGlwdGV4dCwgY2xpcHRleHQuX3NpemUgLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YU3luYyhzcl9kaXNwbGF5LkRlcmVmKCksIDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JfcHJvcGVydHkuRGVyZWYoKS5wb2ludGVyQnVmZmVyKCkuY29weShldl9wcm9wZXJ0eS50b0J1ZmZlcigpKTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8xKCdVbmtub3duIEZvcm1hdCBSZXF1ZXN0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldl9wcm9wZXJ0eS5wb2ludGVyQnVmZmVyKCkud3JpdGVVSW50MzJMRShOb25lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgxMS5YU2VuZEV2ZW50KHNyX2Rpc3BsYXkuRGVyZWYoKSwgc3JfcmVxdWVzdG9yLkRlcmVmKCksIDEsIDAsIGV2KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgY29uc29sZS5sb2cpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gd2luX3JlYWR0ZXh0KCkNCnsNCiAgICB2YXIgaDsNCiAgICB2YXIgcmV0ID0gJyc7DQogICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQogICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7DQogICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgIGtlcm5lbDMyLkNyZWF0ZU1ldGhvZCgnR2xvYmFsQWxsb2MnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbExvY2snKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbFVubG9jaycpOw0KDQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnQ2xvc2VDbGlwYm9hcmQnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZScpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0dldENsaXBib2FyZERhdGEnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdPcGVuQ2xpcGJvYXJkJyk7DQoNCiAgICB1c2VyMzIuT3BlbkNsaXBib2FyZCgwKTsNCg0KICAgIGlmICh1c2VyMzIuSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoQ0ZfVU5JQ09ERVRFWFQpLlZhbCAhPSAwKQ0KICAgIHsNCiAgICAgICAgaCA9IHVzZXIzMi5HZXRDbGlwYm9hcmREYXRhKENGX1VOSUNPREVURVhUKTsNCiAgICAgICAgaWYgKGguVmFsICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciBoYnVmZmVyID0ga2VybmVsMzIuR2xvYmFsTG9jayhoKTsNCiAgICAgICAgICAgIGhidWZmZXIuX3NpemUgPSAtMTsNCiAgICAgICAgICAgIHJldCA9IGhidWZmZXIuV2lkZTJVVEY4Ow0KICAgICAgICAgICAga2VybmVsMzIuR2xvYmFsVW5sb2NrKGgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIHZhciBwID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgcC5fcmVqKCdVbmtub3duIENsaXBib2FyZCBEYXRhJyk7DQogICAgICAgIHJldHVybiAocCk7DQogICAgfQ0KDQoNCiAgICB1c2VyMzIuQ2xvc2VDbGlwYm9hcmQoKTsNCg0KICAgIHZhciBwID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICBwLl9yZXMocmV0KTsNCiAgICByZXR1cm4gKHApOw0KfQ0KDQpmdW5jdGlvbiB3aW5fY29weXRleHQodHh0KQ0Kew0KICAgIHZhciBHTUVNX01PVkVBQkxFID0gMHgwMDAyOw0KICAgIHZhciBDRl9URVhUID0gMTsNCg0KICAgIHZhciBHTSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpOw0KICAgIHZhciB1c2VyMzIgPSBHTS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOw0KICAgIHZhciBrZXJuZWwzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dsb2JhbEFsbG9jJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxMb2NrJyk7DQogICAga2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHbG9iYWxVbmxvY2snKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdDbG9zZUNsaXBib2FyZCcpOw0KICAgIHVzZXIzMi5DcmVhdGVNZXRob2QoJ0VtcHR5Q2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUnKTsNCiAgICB1c2VyMzIuQ3JlYXRlTWV0aG9kKCdPcGVuQ2xpcGJvYXJkJyk7DQogICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnU2V0Q2xpcGJvYXJkRGF0YScpOw0KDQogICAgdmFyIG10eHQgPSBHTS5DcmVhdGVWYXJpYWJsZSh0eHQsIHsgd2lkZTogdHJ1ZSB9KTsgDQogICAgdmFyIGggPSBrZXJuZWwzMi5HbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBtdHh0Ll9zaXplKTsNCiAgICBoLmF1dG9GcmVlKGZhbHNlKTsNCiAgICB2YXIgaGJ1ZmZlciA9IGtlcm5lbDMyLkdsb2JhbExvY2soaCk7DQogICAgaGJ1ZmZlci5hdXRvRnJlZShmYWxzZSk7DQoNCiAgICBtdHh0LnRvQnVmZmVyKCkuY29weShoYnVmZmVyLkRlcmVmKDAsICgyICogdHh0Lmxlbmd0aCkgKyAyKS50b0J1ZmZlcigpKTsNCiAgICBrZXJuZWwzMi5HbG9iYWxVbmxvY2soaCk7DQoNCiAgICB1c2VyMzIuT3BlbkNsaXBib2FyZCgwKTsNCiAgICB1c2VyMzIuRW1wdHlDbGlwYm9hcmQoKTsNCiAgICB1c2VyMzIuU2V0Q2xpcGJvYXJkRGF0YShDRl9VTklDT0RFVEVYVCwgaCk7DQogICAgdXNlcjMyLkNsb3NlQ2xpcGJvYXJkKCk7DQp9DQpmdW5jdGlvbiBtYWNvc19jb3B5dGV4dChjbGlwVGV4dCkNCnsNCiAgICByZXR1cm4gKHJlcXVpcmUoJ21lc3NhZ2UtYm94Jykuc2V0Q2xpcGJvYXJkKGNsaXBUZXh0KSk7DQp9DQpmdW5jdGlvbiBtYWNvc19yZWFkdGV4dCgpDQp7DQogICAgcmV0dXJuIChyZXF1aXJlKCdtZXNzYWdlLWJveCcpLmdldENsaXBib2FyZCgpKTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbl9jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IHdpbl9yZWFkdGV4dDsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGxpbl9jb3B5dGV4dDsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IGxpbl9yZWFkdGV4dDsNCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAieGNsaXAiLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl94Y2xpcCkgeyByZXR1cm4gKHRoaXMuX3hjbGlwKTsgfQ0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIHhjbGlwIHwgYXdrICd7IHByaW50ICQyOyB9J1xuZXhpdFxuIik7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSAhPSAiIikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJfeGNsaXAiLCB7IHZhbHVlOiBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgIT0gIiIgPyBjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA6IG51bGwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygndXNyL2xvY2FsL2Jpbi94Y2xpcCcpKQ0KICAgICAgICB7DQogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGxpbl94Y2xpcF9jb3B5Ow0KICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMucmVhZCA9IGJzZF94Y2xpcF9yZWFkdGV4dDsNCiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgInhjbGlwIiwgeyB2YWx1ZTogJ3Vzci9sb2NhbC9iaW4veGNsaXAnIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgdGhyb3cgKCdDbGlwYm9hcmQgU3VwcG9ydCBvbiBCU0QgcmVxdWlyZXMgeGNsaXAnKTsNCiAgICAgICAgfQ0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdkYXJ3aW4nOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1hY29zX2NvcHl0ZXh0Ow0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5yZWFkID0gbWFjb3NfcmVhZHRleHQ7DQogICAgICAgIGJyZWFrOw0KfQ0KbW9kdWxlLmV4cG9ydHMubmF0aXZlQWRkTW9kdWxlID0gbmF0aXZlQWRkTW9kdWxlOw0KbW9kdWxlLmV4cG9ydHMuZGlzcGF0Y2hXcml0ZSA9IGRpc3BhdGNoV3JpdGU7DQptb2R1bGUuZXhwb3J0cy5kaXNwYXRjaFJlYWQgPSBkaXNwYXRjaFJlYWQ7", 15548); + ILibBase64DecodeEx((unsigned char*)_clipboard, 31548, (unsigned char*)_clipboard + 31548); + 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 + 31548); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_clipboard); diff --git a/modules/clipboard.js b/modules/clipboard.js index 532495b..7ce1d33 100644 --- a/modules/clipboard.js +++ b/modules/clipboard.js @@ -325,7 +325,7 @@ function lin_xclip_copy(txt) ch.stderr.on('data', function (c) { console.log(c.toString()); }); if (process.platform == 'freebsd') { - ch.stdin.write('ps -axo pid -o cmd ') + ch.stdin.write('ps -axo pid -o command ') } else {