DQooZnVuY3Rpb24oKXsNCiJ1c2Ugc3RyaWN0IjsNCmlmICh3aW5kb3cuX19BRENGX0xPQURFRF9fKSByZXR1cm47DQp3aW5kb3cuX19BRENGX0xPQURFRF9fID0gdHJ1ZTsgdHJ5eyB2YXIgX2p0PW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCgnYXBlcmN1Jyk7IGlmKF9qdCl7IHRyeXsgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYWRjZl9hcGVyY3UnLCBfanQpOyB9Y2F0Y2goZSl7fSB0cnl7IHZhciBfdT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpOyBfdS5zZWFyY2hQYXJhbXMuZGVsZXRlKCdhcGVyY3UnKTsgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIF91LnBhdGhuYW1lICsgX3Uuc2VhcmNoICsgX3UuaGFzaCk7IH1jYXRjaChlKXt9IH0gfWNhdGNoKGUpe30gDQoNCnZhciBTVFJJUEUgPSAnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvP3V0bV9zb3VyY2U9YWRjZiZ1dG1fbWVkaXVtPXBhZ2UtdmVudGUmdXRtX2NhbXBhaWduPWFuYWx5c2UtcmVsZXZlJzsNCnRyeXsgd2luZG93Ll9fQURDRl9TVFJJUEVfXyA9IFNUUklQRTsgfWNhdGNoKGUpe30NCnRyeXsgd2luZG93Ll9fQURDRl9QUklYX18gPSAnMjQ5IOKCrCBUVEMnOyB9Y2F0Y2goZSl7fQ0KdmFyIFBIT1RPICA9ICdodHRwczovL3d3dy5hZGNmLm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMy9waG90by1sZW9uYXJkLWRlaS5qcGcnOw0KDQp2YXIgQlJFQUsgPSAxMDI0Ow0KdmFyIFVOSVRMRVNTID0ge29wYWNpdHk6MSx6SW5kZXg6MSxmb250V2VpZ2h0OjEsbGluZUhlaWdodDoxLGZsZXg6MSxmbGV4R3JvdzoxLGZsZXhTaHJpbms6MSxvcmRlcjoxLHN0cm9rZVdpZHRoOjEsZmlsbE9wYWNpdHk6MSxzdHJva2VPcGFjaXR5OjEscGF0aExlbmd0aDoxfTsNCnZhciBTVkdUQUdTID0ge3N2ZzoxLHBhdGg6MSxsaW5lOjEsY2lyY2xlOjEscmVjdDoxLHRleHQ6MSxnOjEsZGVmczoxLHBvbHlsaW5lOjEscG9seWdvbjoxLGVsbGlwc2U6MSx0c3BhbjoxfTsNCnZhciBTVkdDQU1FTCA9IHt2aWV3Qm94OjEscHJlc2VydmVBc3BlY3RSYXRpbzoxLHBhdHRlcm5Vbml0czoxLGdyYWRpZW50VW5pdHM6MSxncmFkaWVudFRyYW5zZm9ybToxLGNsaXBQYXRoOjEsbWFya2VyV2lkdGg6MSxtYXJrZXJIZWlnaHQ6MSxyZWZYOjEscmVmWToxLHRleHRBbmNob3I6MCxiYXNlUHJvZmlsZToxfTsNCnZhciBrZWJhYiA9IGZ1bmN0aW9uKGspeyByZXR1cm4gay5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihjKXsgcmV0dXJuICctJytjLnRvTG93ZXJDYXNlKCk7IH0pOyB9Ow0KDQpmdW5jdGlvbiBhcHBseVN0eWxlKG5vZGUsIHN0KXsNCiAgZm9yICh2YXIgayBpbiBzdCl7DQogICAgdmFyIHYgPSBzdFtrXTsNCiAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gZmFsc2UpIGNvbnRpbnVlOw0KICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgIVVOSVRMRVNTW2tdKSB2ID0gdiArICdweCc7DQogICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShrZWJhYihrKSwgU3RyaW5nKHYpKTsNCiAgfQ0KfQ0KDQpmdW5jdGlvbiBhcHBlbmQobm9kZSwgYyl7DQogIGlmIChjID09PSBudWxsIHx8IGMgPT09IHVuZGVmaW5lZCB8fCBjID09PSBmYWxzZSB8fCBjID09PSB0cnVlKSByZXR1cm47DQogIGlmIChBcnJheS5pc0FycmF5KGMpKSB7IGZvciAodmFyIGk9MDtpPGMubGVuZ3RoO2krKykgYXBwZW5kKG5vZGUsIGNbaV0pOyByZXR1cm47IH0NCiAgaWYgKGMgaW5zdGFuY2VvZiBOb2RlKSB7DQogICAgbm9kZS5hcHBlbmRDaGlsZChjLnBhcmVudE5vZGUgPyBjLmNsb25lTm9kZSh0cnVlKSA6IGMpOw0KICAgIHJldHVybjsNCiAgfQ0KICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjKSkpOw0KfQ0KDQpmdW5jdGlvbiBlbCh0YWcsIHByb3BzKXsNCiAgdmFyIHN2ZyA9ICEhU1ZHVEFHU1t0YWddOw0KICB2YXIgbm9kZSA9IHN2ZyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCB0YWcpDQogICAgICAgICAgICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOw0KICBwcm9wcyA9IHByb3BzIHx8IHt9Ow0KICBmb3IgKHZhciBrIGluIHByb3BzKXsNCiAgICB2YXIgdiA9IHByb3BzW2tdOw0KICAgIGlmIChrID09PSAna2V5JyB8fCB2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkgY29udGludWU7DQogICAgaWYgKGsgPT09ICdzdHlsZScpIHsgYXBwbHlTdHlsZShub2RlLCB2KTsgY29udGludWU7IH0NCiAgICBpZiAoayA9PT0gJ2NsYXNzTmFtZScpIHsgbm9kZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgdik7IGNvbnRpbnVlOyB9DQogICAgaWYgKGsuaW5kZXhPZignb24nKSA9PT0gMCAmJiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyl7DQogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoay5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCB2KTsNCiAgICAgIGNvbnRpbnVlOw0KICAgIH0NCiAgICBpZiAoc3ZnKSBub2RlLnNldEF0dHJpYnV0ZShTVkdDQU1FTFtrXSA/IGsgOiBrZWJhYihrKSwgU3RyaW5nKHYpKTsNCiAgICBlbHNlIG5vZGUuc2V0QXR0cmlidXRlKGsuaW5kZXhPZignLScpID4gLTEgPyBrIDoga2ViYWIoayksIFN0cmluZyh2KSk7DQogIH0NCiAgZm9yICh2YXIgYT0yOyBhPGFyZ3VtZW50cy5sZW5ndGg7IGErKykgYXBwZW5kKG5vZGUsIGFyZ3VtZW50c1thXSk7DQogIHJldHVybiBub2RlOw0KfQ0KDQp2YXIgX0ggPSB7IGNyZWF0ZUVsZW1lbnQ6IGVsIH07ICAgLy8gbG9jYWwgw6AgY2UgYmxvYywgbifDqWNyYXNlIHBhcyBsZSBSZWFjdCBkZSBXb3JkUHJlc3MNCg0KY29uc3QgU0VSSUY9IidOZXdzcmVhZGVyJyxHZW9yZ2lhLHNlcmlmIjsNCmNvbnN0IElOSz0nIzFiMjM1Mic7DQpjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIFBBUEVSPScjZjhmYWZjJywgTElORT0nI2U1ZTdlYicsIFRJTlQ9JyNlZWYyZmInLCBSVElOVD0nI0ZERUNFRic7DQpjb25zdCBDQVJFRVI9W1sxOTgyLDI2XSxbMTk4NCwzMV0sWzE5ODYsMzRdLFsxOTg4LDM4XSxbMTk5MCw0Ml0sWzE5OTIsNDVdLFsxOTk0LDQ5XSxbMTk5NiwyOSwxXSxbMTk5OCwyNCwxXSxbMjAwMCw1Ml0sWzIwMDEsMjEsMV0sWzIwMDMsNThdLFsyMDA1LDYxXSxbMjAwNyw2NF0sWzIwMDksNjZdLFsyMDExLDcwXSxbMjAxMyw3M10sWzIwMTUsNzZdLFsyMDE3LDc5XSxbMjAxOSw4Ml0sWzIwMjAsODRdLFsyMDIxLDg2XSxbMjAyMiw4OV0sWzIwMjMsOTFdLFsyMDI0LDkzXSxbMjAyNSw5NV1dOw0KDQpjb25zdCBBVklTID0gWw0KICBbJ1MnLCdKZSBwZW5zYWlzIHF1ZSBtb24gcmVsZXbDqSBkZSBjYXJyacOocmUgw6l0YWl0IGNvcnJlY3QsIG1haXMgbFx1MjAxOWFuYWx5c2UgYSBwZXJtaXMgZGUgcmVww6lyZXIgcGx1c2lldXJzIHDDqXJpb2RlcyBxdWkgbcOpcml0YWllbnQgZFx1MjAxOcOqdHJlIHbDqXJpZmnDqWVzLiBMZSByYXBwb3J0IGVzdCBjbGFpciwgZMOpdGFpbGzDqSBldCBzdXJ0b3V0IGZhY2lsZSDDoCBjb21wcmVuZHJlLiBKZSBzdWlzIHZyYWltZW50IHRyw6hzIHNhdGlzZmFpdGUgZHUgc2VydmljZS4nLCdQcsOpbm9tLCBkw6lwYXJ0ZW1lbnQnLCdSZWxldsOpIGRlIFhYIGFubsOpZXMnLFsnWFggc3VqZXRzJywnWCBjb3VycmllcnMnXV0sDQogIFsnQScsJ1Ryw6hzIGJvbm5lIGV4cMOpcmllbmNlLiBMXHUyMDE5YW5hbHlzZSBkZSBtb24gcmVsZXbDqSBkZSBjYXJyacOocmUgbVx1MjAxOWEgcGVybWlzIGRcdTIwMTl5IHZvaXIgYmVhdWNvdXAgcGx1cyBjbGFpciBhdmFudCBtb24gZMOpcGFydCDDoCBsYSByZXRyYWl0ZS4gTGVzIGV4cGxpY2F0aW9ucyBzb250IHByw6ljaXNlcyBldCBsZXMgcG9pbnRzIMOgIGNvbnRyw7RsZXIgc29udCBjbGFpcmVtZW50IGlkZW50aWZpw6lzLiBVbiBzZXJ2aWNlIHPDqXJpZXV4IHF1ZSBqZSByZWNvbW1hbmRlLicsJ1Byw6lub20sIGTDqXBhcnRlbWVudCcsJ1JlbGV2w6kgZGUgWFggYW5uw6llcycsWydYWCBzdWpldHMnLCdYIGNvdXJyaWVycyddXQ0KXTsNCmNvbnN0IENPTlRFTlUgPSBbDQogIFsnVW4gZG9zc2llcicsJ2NvbXBvc8OpIGV0IG51bcOpcm90w6knLCfDoCBsaXJlIMOgIGxcdTIwMTnDqWNyYW4gb3Ugw6AgaW1wcmltZXIsIGV0IMOgIGdhcmRlciBkYW5zIHVuIGNsYXNzZXVyJ10sDQogIFsnMSBwYWdlJywncGFyIHN1amV0IHJldGVudScsJ2F2ZWMgbOKAmWFubsOpZSBjb25jZXJuw6llLCBsZSBtb3RpZiDDoCBpbnZvcXVlciBldCBsZXMgcGnDqGNlcyDDoCBqb2luZHJlJ10sDQogIFsnMSBjb3VycmllcicsJ3BhciBkw6ltYXJjaGUgw6AgZW5nYWdlcicsJ2TDqWrDoCByw6lkaWfDqSDDoCB2b3RyZSBub20sIMOgIHNpZ25lciBldCBwb3N0ZXInXSwNCiAgWydFbiBldXJvcycsJ2NlIHF1ZSDDp2EgcmVwcsOpc2VudGUnLCdjaGFxdWUgY29ycmVjdGlvbiBjaGlmZnLDqWUsIGR1IGJydXQgYXUgbmV0LCBzdXIgdm9zIHByb3ByZXMgdHJhbmNoZXMnXQ0KXTsNCmNvbnN0IEVUQVBFUyA9IFsNCiAgWydWb3VzIGTDqXBvc2V6IGxlIFBERiBkZSB2b3RyZSByZWxldsOpJywnU3VyIGluZm8tcmV0cmFpdGUuZnIsIHJ1YnJpcXVlIMKrIE1vbiByZWxldsOpIGRlIGNhcnJpw6hyZSDCuywgYm91dG9uIFTDqWzDqWNoYXJnZXIuIFNpIHZvdXMgblx1MjAxOWF2ZXogcGFzIGRlIGNvbXB0ZSwgamUgdm91cyBpbmRpcXVlIGNvbW1lbnQgbGUgY3LDqWVyLiBSaWVuIGRcdTIwMTlhdXRyZSDDoCBwcsOpcGFyZXIuJ10sDQogIFsnVm91cyByw6lwb25kZXogw6AgcXVlbHF1ZXMgcXVlc3Rpb25zJywnU3VyIGxlcyBzZXVsZXMgYW5uw6llcyBxdWkgcG9zZW50IHF1ZXN0aW9uLiBVbmUgZGl6YWluZSBkZSBtaW51dGVzLCBlbiB1bmUgZm9pcyBvdSBlbiBwbHVzaWV1cnMuJ10sDQogIFsnSlx1MjAxOWFuYWx5c2Ugdm90cmUgcmVsZXbDqSBldCBqXHUyMDE5w6ljcmlzIHZvdHJlIGJpbGFuJywnSlx1MjAxOWV4YW1pbmUgY2hhcXVlIHDDqXJpb2RlIGF2ZWMgbGVzIHLDqGdsZXMgcXVpIGx1aSBjb3JyZXNwb25kZW50LCBldCBqXHUyMDE5w6ljYXJ0ZSBjZSBxdWkgbmUgc2UgZMOpZmVuZCBwYXMgZGV2YW50IHVuZSBjYWlzc2UuJ10sDQogIFsnVm91cyByZWNldmV6IHVuIGUtbWFpbCBhdmVjIGxlIGxpZW4gcG91ciB0w6lsw6ljaGFyZ2VyIHZvdHJlIGRvc3NpZXInLCdTb3VzIDMgam91cnMgb3V2csOpcy4gw4AgbGlyZSDDoCBsXHUyMDE5w6ljcmFuLCBvdSDDoCBpbXByaW1lciBwb3VyIMOpY3JpcmUgZGVzc3VzLiddDQpdOw0KY29uc3QgSkFNQUlTID0gWw0KICBbJ1ZvdHJlIG51bcOpcm8gZGUgc8OpY3VyaXTDqSBzb2NpYWxlJywnSWwgZmlndXJlIHN1ciB2b3RyZSByZWxldsOpLiBJbCBlc3QgbHUgdW5lIGZvaXMsIHBvdXIgcmV0cm91dmVyIHZvdHJlIGRhdGUgZGUgbmFpc3NhbmNlIGV0IHZvdHJlIMOiZ2UgbMOpZ2FsIGRlIGTDqXBhcnQsIGV0IGlsIG5cdTIwMTllc3QgamFtYWlzIGNvbnNlcnbDqS4gRMOpcG9zZXogbGUgcmVsZXbDqSB0ZWwgcXVlIHZvdHJlIGNhaXNzZSB2b3VzIGxcdTIwMTlhIHJlbWlzLCBzYW5zIHJpZW4gbW9kaWZpZXIuIFN1ciBsZXMgY291cnJpZXJzLCBjXHUyMDE5ZXN0IHVuIGNoYW1wIGxhaXNzw6kgdmlkZSBxdWUgdm91cyByZW1wbGlzc2V6IMOgIGxhIG1haW4uJ10sDQogIFsnVm9zIGNvZGVzIGRcdTIwMTlhY2PDqHMnLCdOaSBjZXV4IGRlIHZvdHJlIGVzcGFjZSByZXRyYWl0ZSwgbmkgRnJhbmNlQ29ubmVjdC4gUGVyc29ubmUgbmUgc2UgY29ubmVjdGUgw6Agdm90cmUgcGxhY2UsIGphbWFpcy4nXSwNCiAgWydVbmUgY29waWUgZGUgdm90cmUgcmVsZXbDqScsJ1ZvdHJlIFBERiBlc3QgZMOpdHJ1aXQgZMOocyBzYSBsZWN0dXJlLiBMZXMgZG9ubsOpZXMgcXVpIGVuIHNvbnQgZXh0cmFpdGVzIHNvbnQgY29uc2VydsOpZXMgbGUgdGVtcHMgZGUgdm91cyByZW1ldHRyZSB2b3RyZSBkb3NzaWVyLCBwdWlzIGVmZmFjw6llcy4gQ2hpZmZyw6ksIGjDqWJlcmfDqSBlbiBGcmFuY2UuJ10NCl07DQpjb25zdCBDT01QUklTID0gWw0KICBbJ1ByaXgnLCcyNDkg4oKsIFRUQywgdW5lIHNldWxlIGZvaXMnXSwNCiAgWydQYWllbWVudCcsJ2VuIGxpZ25lLCBwYXIgY2FydGUsIHNhbnMgY29tcHRlIMOgIGNyw6llciddLA0KICBbJ0Zvcm1hdCcsJ3VuIFBERiDDoCB0w6lsw6ljaGFyZ2VyLCDDoCBsaXJlIMOgIGxcdTIwMTnDqWNyYW4gb3Ugw6AgaW1wcmltZXInXSwNCiAgWydBYm9ubmVtZW50JywnYXVjdW4nXSwNCiAgWydSZXN0ZSDDoCB2b3RyZSBjaGFyZ2UnLCdsXHUyMDE5ZW52b2kgZGVzIGNvdXJyaWVycyBlbiByZWNvbW1hbmTDqSwgZGUgbFx1MjAxOW9yZHJlIGRlIDYgw6AgNyDigqwgcGFyIGNvdXJyaWVyJ10NCl07DQpjb25zdCBQT1VSVk9VUyA9IFsNCiAgJ3ZvdXMgYXZleiB2b3RyZSByZWxldsOpIGRlIGNhcnJpw6hyZSBzb3VzIGxlcyB5ZXV4IGV0IHVuIGRvdXRlJywNCiAgJ3ZvdHJlIGNhcnJpw6hyZSBhIGRlcyB0cm91cywgZGVzIHRlbXBzIHBhcnRpZWxzLCBkZSBsXHUyMDE5aW50w6lyaW0gb3UgZGVzIHDDqXJpb2RlcyDDoCBsXHUyMDE5w6l0cmFuZ2VyJywNCiAgJ3ZvdXMgbGlxdWlkZXogYmllbnTDtHQgZXQgdm91cyB2b3VsZXogdsOpcmlmaWVyIGF2YW50LCBwYXMgYXByw6hzJywNCiAgJ3ZvdXMgcHLDqXBhcmV6IGxlIGRvc3NpZXIgZFx1MjAxOXVuIHBhcmVudCcsDQogICd2b3VzIHZvdWxleiBxdVx1MjAxOXVuZSBwZXJzb25uZSByZWdhcmRlIHZvdHJlIHJlbGV2w6ksIHBhcyBzZXVsZW1lbnQgdW4gbG9naWNpZWwnDQpdOw0KY29uc3QgUEFTVk9VUyA9IFsNCiAgJ3ZvdXMgYXR0ZW5kZXogcXVcdTIwMTlvbiBmYXNzZSBsZXMgZMOpbWFyY2hlcyDDoCB2b3RyZSBwbGFjZSA6IGxlcyBjb3VycmllcnMgc29udCByw6lkaWfDqXMsIG1haXMgY1x1MjAxOWVzdCB2b3VzIHF1aSBzaWduZXogZXQgcG9zdGV6JywNCiAgJ3ZvdXMgYXR0ZW5kZXogdW5lIHNpbXVsYXRpb24gb2ZmaWNpZWxsZSBkZSB2b3RyZSBwZW5zaW9uIDogbGUgZG9zc2llciBjaGlmZnJlIGNlIHF1ZSBjaGFxdWUgY29ycmVjdGlvbiByZXByw6lzZW50ZSwgaWwgbmUgcmVtcGxhY2UgcGFzIGxlIGNhbGN1bCBkZSB2b3RyZSBjYWlzc2UnLA0KICAndm91cyB2b3VsZXogdW5lIHByb21lc3NlIGRlIHNvbW1lIHLDqWN1cMOpcsOpZSA6IHBlcnNvbm5lIG5lIHBldXQgc2F2b2lyIMOgIGxcdTIwMTlhdmFuY2UgY2UgcXVlIHZvdHJlIGNhaXNzZSBhY2NlcHRlcmEnDQpdOw0KY29uc3QgQUlMTEVVUlMgPSBbDQogIFsnQ29uc3VsdGF0aW9uIHNpbXBsZSwgdW5lIGhldXJlJywnMTUwIMOgIDQwMCDigqwnLCd1biBwcmVtaWVyIGF2aXMgc3VyIGRlcyBxdWVzdGlvbnMgY2libMOpZXMnLDE1MCw0MDBdLA0KICBbJ0JpbGFuIHJldHJhaXRlIHN0YW5kYXJkJywnNDAwIMOgIDEgMDAwIOKCrCcsJ2FuYWx5c2UgZGUgY2FycmnDqHJlIGV0IGVzdGltYXRpb24gZGVzIGRyb2l0cycsNDAwLDEwMDBdLA0KICBbJ0JpbGFuIGFwcHJvZm9uZGkgc3VyIG1lc3VyZScsJzEgMDAwIMOgIDIgNTAwIOKCrCcsJ3JlY29uc3RpdHV0aW9uIGTDqXRhaWxsw6llLCBwbHVzaWV1cnMgcsOpZ2ltZXMnLDEwMDAsMjUwMF0sDQogIFsnQWNjb21wYWduZW1lbnQganVzcXVcdTIwMTnDoCBsYSBsaXF1aWRhdGlvbicsJzEgNTAwIMOgIDUgMDAwIOKCrCcsJ3ByaXNlIGVuIGNoYXJnZSBjb21wbMOodGUgZHUgZG9zc2llcicsMTUwMCw1MDAwXQ0KXTsNCmNvbnN0IEFQRVJDVVMgPSBbDQogIFsnVW4gc3VqZXQgw6AgdsOpcmlmaWVyJywnSHVpdCBibG9jcyA6IGxlIGNvbnN0YXQsIHBvdXJxdW9pIGNlbGEgbcOpcml0ZSB1bmUgZGVtYW5kZSwgY2UgcXVpIHBldXQgbFx1MjAxOWV4cGxpcXVlciwgbGEgcGnDqGNlIMOgIGpvaW5kcmUsIGxlIGdlc3RlIMOgIGZhaXJlLCBjZSBxdWUgw6dhIHBvcnRlLCBsZSBuaXZlYXUgZGUgY2VydGl0dWRlLCBsYSBzb3VyY2UuJ10sDQogIFsnVm90cmUgY2FycmnDqHJlLCBhbm7DqWUgcGFyIGFubsOpZScsJ0NoYXF1ZSBhbm7DqWUgY29uZnJvbnTDqWUgYXV4IHNldWlscyBlbiB2aWd1ZXVyLCBsZXMgYW5uw6llcyDDoCB2w6lyaWZpZXIgc2lnbmFsw6llcy4nXSwNCiAgWydVbiBjb3VycmllciBwcsOqdCDDoCBzaWduZXInLCdPYmpldCwgY29ycHMsIHBpw6hjZXMgw6Agam9pbmRyZSwgZXQgbGVzIGNoYW1wcyBsYWlzc8OpcyB2aWRlcyBxdWUgdm91cyByZW1wbGlzc2V6IMOgIGxhIG1haW4uJ10NCl07DQpjb25zdCBSRUdBUkRFID0gWw0KICBbJ1ZvdXMgYXZleiB0cmF2YWlsbMOpIGVuIGludMOpcmltLCBvdSBlbiBtaXNzaW9ucyBjb3VydGVzJywnQ2Ugc29udCBsZXMgcMOpcmlvZGVzIGxlcyBwbHVzIHNvdXZlbnQgYWJzZW50ZXMgOiBwbHVzaWV1cnMgZW1wbG95ZXVycywgZGVzIGNvbnRyYXRzIGRlIHF1ZWxxdWVzIHNlbWFpbmVzLCBkZXMgZMOpY2xhcmF0aW9ucyBmYWl0ZXMgZW4gcmV0YXJkLiddLA0KICBbJ1ZvdXMgYXZleiBldSB1biB0ZW1wcyBwYXJ0aWVsJywnVW4gc2FsYWlyZSBwbHVzIGZhaWJsZSBwZXV0IHBhc3NlciBzb3VzIGxlIHNldWlsIHF1aSB2YWxpZGUgdW4gdHJpbWVzdHJlLiBDaGFxdWUgYW5uw6llIGVzdCBjb25mcm9udMOpZSBhdSBzZXVpbCBxdWkgc1x1MjAxOWFwcGxpcXVhaXQgw6AgbFx1MjAxOcOpcG9xdWUsIHBhcyDDoCBjZWx1aSBkXHUyMDE5YXVqb3VyZFx1MjAxOWh1aS4nXSwNCiAgWydWb3VzIGF2ZXogw6l0w6kgZW4gYXJyw6p0LCBhdSBjaMO0bWFnZSwgZW4gY29uZ8OpIG1hdGVybml0w6knLCdDZXMgcMOpcmlvZGVzIGRvbm5lbnQgZGVzIHRyaW1lc3RyZXMsIGVuY29yZSBmYXV0LWlsIHF1XHUyMDE5ZWxsZXMgc29pZW50IGluc2NyaXRlcy4gQ2hhcXVlIGFubsOpZSBlc3QgcGFzc8OpZSBhdSBjcmlibGUuJ10sDQogIFsnVm91cyBhdmV6IMOpbGV2w6kgZGVzIGVuZmFudHMnLCdUcmltZXN0cmVzIGRlIG1hdGVybml0w6ksIGRcdTIwMTnDqWR1Y2F0aW9uLCBtYWpvcmF0aW9uIGRlIHBlbnNpb24sIGV0IGxlcyB0cmltZXN0cmVzIGxpw6lzIGF1eCBhbGxvY2F0aW9ucyBmYW1pbGlhbGVzIChBVlBGKSwgc291dmVudCBhYnNlbnRzIDogY2Ugc29udCBkZXMgZHJvaXRzIHF1aSBzZSBkZW1hbmRlbnQuJ10sDQogIFsnVm91cyBhdmV6IGNoYW5nw6kgZGUgbcOpdGllciBvdSBkZSBzdGF0dXQnLCdTYWxhcmnDqSwgaW5kw6lwZW5kYW50LCBmb25jdGlvbm5haXJlLCBhZ3JpY29sZSA6IGNlIHF1XHUyMDE5dW4gcsOpZ2ltZSBjb21wdGUsIGxcdTIwMTlhdXRyZSBsXHUyMDE5aWdub3JlIHBhcmZvaXMuIExlcyByZWNvdXBlbWVudHMgc29udCBmYWl0cy4nXSwNCiAgWydWb3VzIGF2ZXogdHJhdmFpbGzDqSDDoCBsXHUyMDE5w6l0cmFuZ2VyJywnRGFucyBsXHUyMDE5VW5pb24gZXVyb3DDqWVubmUgZXQgbGVzIHBheXMgc291cyBjb252ZW50aW9uLCBjZXMgYW5uw6llcyBjb21wdGVudC4gRWxsZXMgbWFucXVlbnQgcHJlc3F1ZSB0b3Vqb3VycyBhdSByZWxldsOpIGZyYW7Dp2Fpcy4nXSwNCiAgWydWb3VzIGF2ZXogZGVzIGFubsOpZXMgw6AgesOpcm8sIG91IGluY29tcGzDqHRlcycsJ1VuZSBhbm7DqWUgw6AgZGV1eCB0cmltZXN0cmVzIGF1IGxpZXUgZGUgcXVhdHJlIG5lIHNlIHZvaXQgcGFzIMOgIGxcdTIwMTnFk2lsLiBFbGxlIHNlIHRyb3V2ZSBlbiBjb21wYXJhbnQgbGUgc2FsYWlyZSBwb3J0w6kgYXUgc2V1aWwgZGUgbFx1MjAxOWFubsOpZS4nXSwNCiAgWydWb3VzIG5lIHNhdmV6IHBhcyDDoCBxdWVsbGUgZGF0ZSB2b3VzIHBvdXZleiBwYXJ0aXInLCdDZSBxdWUgdm9zIHRyaW1lc3RyZXMgcGVybWV0dGVudCwgw6AgcXVlbGxlIGRhdGUsIGV0IGNlIHF1ZSB0cm9pcyBtb2lzIGRlIHBsdXMgY2hhbmdlcmFpZW50LiddDQpdOw0KY29uc3QgUkVHQVJERV9PTEQgPSBbDQogIFsnTGVzIHNldWlscywgYW5uw6llIHBhciBhbm7DqWUnLCdDaGFxdWUgYW5uw6llIGVzdCBjb25mcm9udMOpZSBhdSBzYWxhaXJlIHF1XHUyMDE5aWwgZmFsbGFpdCBkw6ljbGFyZXIsIGNldHRlIGFubsOpZS1sw6AsIHBvdXIgdmFsaWRlciB1biB0cmltZXN0cmUuIExlcyBzZXVpbHMgb250IGNoYW5nw6kgZG91emUgZm9pcyBkZXB1aXMgMTk3Mi4nXSwNCiAgWydMZXMgYW5uw6llcyBpbmNvbXBsw6h0ZXMnLCdVbiB0cmltZXN0cmUgbWFucXVhbnQgZW4gMTk5NiBuZSBzZSB2b2l0IHBhcyDDoCBsXHUyMDE5xZNpbC4gSWwgc2UgdHJvdXZlIGVuIGNvbmZyb250YW50IGxlIHNhbGFpcmUgcG9ydMOpIGF1IHNldWlsIGRlIGxcdTIwMTnDqXBvcXVlLiddLA0KICBbJ0xcdTIwMTlpbnTDqXJpbSBldCBsZXMgZW1wbG95ZXVycyBtdWx0aXBsZXMnLCdMZXMgbWlzc2lvbnMgY291cnRlcyBldCBsZXMgZW1wbG95ZXVycyBxdWkgc2Ugc3VjY8OoZGVudCBzb250IGxhIHByZW1pw6hyZSBzb3VyY2UgZGUgcMOpcmlvZGVzIG91Ymxpw6llcy4nXSwNCiAgWydMZXMgcMOpcmlvZGVzIGFzc2ltaWzDqWVzJywnTWFsYWRpZSwgbWF0ZXJuaXTDqSwgY2jDtG1hZ2UsIGFjY2lkZW50IGR1IHRyYXZhaWwsIHNlcnZpY2UgbmF0aW9uYWwgOiBlbGxlcyBkb25uZW50IGRlcyB0cmltZXN0cmVzLCBlbmNvcmUgZmF1dC1pbCBxdVx1MjAxOWVsbGVzIHNvaWVudCBpbnNjcml0ZXMuJ10sDQogIFsnTGVzIG1ham9yYXRpb25zIHBvdXIgZW5mYW50cycsJ01hdGVybml0w6ksIMOpZHVjYXRpb24sIG1ham9yYXRpb24gZGUgcGVuc2lvbiwgZXQgbGVzIHRyaW1lc3RyZXMgQVZQRiBsacOpcyBhdXggYWxsb2NhdGlvbnMgZmFtaWxpYWxlcyA6IGRlcyBkcm9pdHMgcXVpIHNlIGRlbWFuZGVudC4nXSwNCiAgWydMZXMgcsOpZ2ltZXMgY3JvaXPDqXMnLCdSw6lnaW1lIGfDqW7DqXJhbCwgY29tcGzDqW1lbnRhaXJlLCBpbmTDqXBlbmRhbnRzLCBhZ3JpY29sZSwgZm9uY3Rpb24gcHVibGlxdWUgOiBjZSBxdWUgbFx1MjAxOXVuIGNvbXB0ZSwgbFx1MjAxOWF1dHJlIGxcdTIwMTlpZ25vcmUgcGFyZm9pcy4nXSwNCiAgWydMZXMgcMOpcmlvZGVzIMOgIGxcdTIwMTnDqXRyYW5nZXInLCdVbmlvbiBldXJvcMOpZW5uZSBldCBwYXlzIHNvdXMgY29udmVudGlvbiA6IGNlcyBhbm7DqWVzIGNvbXB0ZW50LCBldCBtYW5xdWVudCBwcmVzcXVlIHRvdWpvdXJzIGF1IHJlbGV2w6kgZnJhbsOnYWlzLiddLA0KICBbJ0xhIGRhdGUgZGUgZMOpcGFydCcsJ0NlIHF1ZSB2b3MgdHJpbWVzdHJlcyBwZXJtZXR0ZW50LCDDoCBxdWVsbGUgZGF0ZSwgZXQgY2UgcXVlIHRyb2lzIG1vaXMgZGUgcGx1cyBjaGFuZ2VyYWllbnQuJ10NCl07DQpjb25zdCBQUk9GSUxTID0gWw0KICBbJ0ludMOpcmltLCBtaXNzaW9ucyBjb3VydGVzLCBwbHVzaWV1cnMgZW1wbG95ZXVycycsJ0xlcyBww6lyaW9kZXMgbGVzIHBsdXMgc291dmVudCBhYnNlbnRlcyBkXHUyMDE5dW4gcmVsZXbDqS4nLA0KICAgIFsnQ2hhcXVlIG1pc3Npb24gZXN0IHJldHJvdXbDqWUgZXQgcmF0dGFjaMOpZSBhdSBib24gcsOpZ2ltZS4nLCdMZXMgZMOpY2xhcmF0aW9ucyB0YXJkaXZlcyBkXHUyMDE5ZW1wbG95ZXVyIHNvbnQgcmVww6lyw6llcyBhbm7DqWUgcGFyIGFubsOpZS4nLCdMZXMgcMOpcmlvZGVzIGRlIGNow7RtYWdlIGVudHJlIGRldXggbWlzc2lvbnMgc29udCBwYXNzw6llcyBhdSBjcmlibGUgdW5lIMOgIHVuZS4nXV0sDQogIFsnVGVtcHMgcGFydGllbCwgb3Ugc2FsYWlyZXMgbW9kZXN0ZXMnLCdVbiBzYWxhaXJlIHBsdXMgZmFpYmxlIHBldXQgcGFzc2VyIHNvdXMgbGUgc2V1aWwgZHUgdHJpbWVzdHJlLicsDQogICAgWydDaGFxdWUgYW5uw6llIGVzdCBjb25mcm9udMOpZSBhdSBzZXVpbCBxdWkgc1x1MjAxOWFwcGxpcXVhaXQgw6AgbFx1MjAxOcOpcG9xdWUsIHBhcyDDoCBjZWx1aSBkXHUyMDE5YXVqb3VyZFx1MjAxOWh1aS4nLCdMZXMgYW5uw6llcyDDoCBkZXV4IG91IHRyb2lzIHRyaW1lc3RyZXMgYXUgbGlldSBkZSBxdWF0cmUgc29udCBpc29sw6llcy4nLCdMZXMgbWFqb3JhdGlvbnMgbGnDqWVzIGF1eCBlbmZhbnRzIGV0IMOgIGxcdTIwMTlBVlBGIHNvbnQgY29udHLDtGzDqWVzLiddXSwNCiAgWydQbHVzaWV1cnMgcsOpZ2ltZXMsIG91IHVuIGNoYW5nZW1lbnQgZGUgc3RhdHV0JywnQ2UgcXVcdTIwMTl1biByw6lnaW1lIGNvbXB0ZSwgbFx1MjAxOWF1dHJlIGxcdTIwMTlpZ25vcmUgcGFyZm9pcy4nLA0KICAgIFsnUsOpZ2ltZSBnw6luw6lyYWwsIE1TQSwgaW5kw6lwZW5kYW50cywgZm9uY3Rpb24gcHVibGlxdWUgZXQgQWdpcmMtQXJyY28gc29udCByZWNvdXDDqXMuJywnTGVzIGFubsOpZXMgY29tcHTDqWVzIGRldXggZm9pcywgb3UgcGFyIHBlcnNvbm5lLCBzb250IHNpZ25hbMOpZXMuJywnTGVzIGRyb2l0cyBvdXZlcnRzIGRhbnMgdW4gcsOpZ2ltZSBvdWJsacOpIHNvbnQgcmVjaGVyY2jDqXMuJ11dLA0KICBbJ0RlcyBhbm7DqWVzIMOgIGxcdTIwMTnDqXRyYW5nZXInLCdFbGxlcyBtYW5xdWVudCBwcmVzcXVlIHRvdWpvdXJzIGF1IHJlbGV2w6kgZnJhbsOnYWlzLicsDQogICAgWydVbmlvbiBldXJvcMOpZW5uZSBldCBwYXlzIHNvdXMgY29udmVudGlvbiA6IGxlcyBhbm7DqWVzIHNvbnQgcsOpY2xhbcOpZXMgYXZlYyBsZSBmb3JtdWxhaXJlIGFkYXB0w6kuJywnTGVzIHDDqXJpb2RlcyBub24gcmVwb3J0w6llcyBzb250IGRhdMOpZXMgZXQgZG9jdW1lbnTDqWVzLicsJ0xcdTIwMTllZmZldCBzdXIgdm90cmUgZGF0ZSBkZSBkw6lwYXJ0IGVzdCBjYWxjdWzDqS4nXV0NCl07DQpjb25zdCBGQVEgPSBbDQogIFsnQ29tYmllbiB2YWlzLWplIHLDqWN1cMOpcmVywqA/JywnSmUgbmUgcHJvbWV0cyBhdWN1bmUgc29tbWUgOiBjZSBxdWUgbGEgY2Fpc3NlIGFjY2VwdGVyYSBkZSBjb3JyaWdlciBuZSBzZSBzYWl0IHF1XHUyMDE5YXByw6hzIGV4YW1lbiBkZXMgcGnDqGNlcy4gTGUgZG9zc2llciBjaGlmZnJlIGVuIHJldmFuY2hlIGNlIHF1ZSBjaGFxdWUgY29ycmVjdGlvbiByZXByw6lzZW50ZXJhaXQgc2kgZWxsZSBhYm91dGl0LCBkdSBicnV0IGF1IG5ldCwgc3VyIHZvcyBwcm9wcmVzIHRyYW5jaGVzLiddLA0KICBbJ0VzdC1jZSBlbmNvcmUgdW4gb3V0aWwgcXVpIHJlY3JhY2hlIHVuIFBERiBhdXRvbWF0aXF1ZcKgPycsJ05vbiwgZXQgY1x1MjAxOWVzdCBwcsOpY2lzw6ltZW50IGxhIHJhaXNvbiBkdSBkw6lsYWkuIFVuZSBwcmVtacOocmUgbGVjdHVyZSByZXDDqHJlIGxlcyBwb2ludHMgw6AgcmVnYXJkZXIsIG1haXMgcmllbiBuZSBwYXJ0IGF2YW50IHF1ZSBqXHUyMDE5YWllIGFuYWx5c8OpIHZvdHJlIHJlbGV2w6kgYW5uw6llIHBhciBhbm7DqWUgZXQgw6ljYXJ0w6kgY2UgcXVpIG5lIHNlIGTDqWZlbmQgcGFzIGRldmFudCB1bmUgY2Fpc3NlLiddLA0KICBbJ0V0IHNpIHZvdXMgbmUgdHJvdXZleiByaWVuIGNoZXogbW9pID8nLCdRdVx1MjAxOW9uIHRyb3V2ZSBkaXggZXJyZXVycyBvdSBhdWN1bmUsIHZvdXMgc29ydGV6IGF2ZWMgbGEgbcOqbWUgY2hvc2VcdTAwYTA6IGxhIGNlcnRpdHVkZS4gTGUgZG9zc2llciB2b3VzIGRpdCBjZSBxdWkgYSDDqXTDqSB2w6lyaWZpw6ksIHNldWlsIHBhciBzZXVpbCBldCBhbm7DqWUgcGFyIGFubsOpZSwgZXQgaWwgY29tcGFyZSB2b3MgZGF0ZXMgZGUgZMOpcGFydCBwb3NzaWJsZXMuIFZvdXMgY2Vzc2V6IGRlIHZvdXMgZGVtYW5kZXIuJ10sDQogIFsnUG91cnF1b2kgbmUgcGFzIGRlbWFuZGVyIMOnYSDDoCBtYSBjYWlzc2UgPycsJ0xcdTIwMTllbnRyZXRpZW4gaW5mb3JtYXRpb24gcmV0cmFpdGUgZXN0IGdyYXR1aXQgZXQgaWwgdmF1dCBsYSBwZWluZSBkXHUyMDE5w6p0cmUgZGVtYW5kw6kuIExlIGJpbGFuIGZhaXQgYXV0cmUgY2hvc2VcdTAwYTA6IGlsIGNvbmZyb250ZSBjaGFxdWUgYW5uw6llIGRlIHZvdHJlIGNhcnJpw6hyZSBhdXggcsOoZ2xlcyBxdWkgc1x1MjAxOWFwcGxpcXVhaWVudCDDoCBlbGxlLCBpbCBjb21wYXJlIHZvcyBzY8OpbmFyaW9zIGRlIGTDqXBhcnQgY2hpZmZyw6lzLCBldCBpbCB2b3VzIHJlbWV0IGxlcyBjb3VycmllcnMgw6ljcml0cyBhdmVjIGxlcyBwacOoY2VzIMOgIGpvaW5kcmUuIExlcyBkZXV4IHNlIGNvbXBsw6h0ZW50LiddLA0KICBbJ1F1ZWxzIHLDqWdpbWVzIHJlZ2FyZGV6LXZvdXPCoD8nLCdUb3VzIGNldXggcXVpIGZpZ3VyZW50IMOgIHZvdHJlIHJlbGV2w6kgOiBsZSByw6lnaW1lIGfDqW7DqXJhbCwgbGEgTVNBLCBsZXMgaW5kw6lwZW5kYW50cywgbGEgZm9uY3Rpb24gcHVibGlxdWUsIGxlcyByw6lnaW1lcyBzcMOpY2lhdXgsIGV0IGxhIGNvbXBsw6ltZW50YWlyZSBBZ2lyYy1BcnJjby4gVW5lIGNhcnJpw6hyZSBwYXNzw6llIGRcdTIwMTl1biBzdGF0dXQgw6AgbFx1MjAxOWF1dHJlIGVzdCBqdXN0ZW1lbnQgY2VsbGUgb8O5IGxlcyB0cmltZXN0cmVzIHNlIHBlcmRlbnQuJ10sDQogIFsnTWEgbcOocmUgblx1MjAxOWEgcGFzIGRlIGNvbXB0ZSBzdXIgbFx1MjAxOWVzcGFjZSByZXRyYWl0ZS4nLCdDXHUyMDE5ZXN0IGxlIGNhcyBsZSBwbHVzIGZyw6lxdWVudC4gTGUgY29tcHRlIHNlIGNyw6llIGVuIHF1ZWxxdWVzIG1pbnV0ZXMgc3VyIGluZm8tcmV0cmFpdGUuZnIsIGF2ZWMgdW4gbnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGUgZXQgdW5lIGFkcmVzc2UgZS1tYWlsLiBMZSByZWxldsOpIHNlIHTDqWzDqWNoYXJnZSBlbnN1aXRlIGVuIHVuIGNsaWMsIGV0IHZvdXMgcG91dmV6IGZhaXJlIGxhIGTDqW1hcmNoZSBwb3VyIGVsbGUuJ10sDQogIFsnVm91cyBmYWl0ZXMgbGVzIGTDqW1hcmNoZXMgw6AgbWEgcGxhY2XCoD8nLCdOb24uIExlcyBjb3VycmllcnMgc29udCByw6lkaWfDqXMsIHZvdXMgbGVzIHNpZ25leiBldCBsZXMgcG9zdGV6LiBWb3RyZSBjYWlzc2UgbmUgY29ycmVzcG9uZCBxdVx1MjAxOWF2ZWMgdm91cywgZXQgbGUgZG9zc2llciByZXN0ZSB2b3RyZSBwcm9wcmnDqXTDqS4nXSwNCiAgWydWb3MgZG9ubsOpZXMsIHF1ZSBkZXZpZW5uZW50LWVsbGVzID8nLCdWb3RyZSBQREYgZXN0IGVmZmFjw6kgZMOocyBxdVx1MjAxOWlsIGVzdCBsdSwgZXQgdm90cmUgbnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGUgblx1MjAxOWVzdCBwYXMgY29uc2VydsOpLiBMZSBkb3NzaWVyLCBsdWksIG5lIHBhcnQgamFtYWlzIGVuIHBpw6hjZSBqb2ludGVcdTAwYTA6IHZvdXMgcmVjZXZleiB1biBsaWVuIHBlcnNvbm5lbCwgcXVpIGV4cGlyZS4gSWwgcG9ydGUgZGVzIGRvbm7DqWVzIGRlIHNhbnTDqSBhdSBzZW5zIGRlIGxcdTIwMTlhcnRpY2xlIDkgZHUgUkdQRCwgZXQgaWwgZXN0IHRyYWl0w6kgY29tbWUgdGVsLiBWb3VzIHBvdXZleiBlbiBkZW1hbmRlciBsXHUyMDE5ZWZmYWNlbWVudCDDoCBjb250YWN0QGFkY2Yub3JnLCBzYW5zIG1vdGlmLCBldCBpbCBlc3QgZmFpdCBzb3VzIDMwIGpvdXJzLiddLA0KICBbJ0plIGxpcXVpZGUgZGFucyBkZXV4IG1vaXMsIGVzdC1jZSBlbmNvcmUgdXRpbGXCoD8nLCdPdWksIHRhbnQgcXVlIGxhIGxpcXVpZGF0aW9uIG5cdTIwMTllc3QgcGFzIHByb25vbmPDqWUuIENvbXB0ZXogdG91dGVmb2lzIHBsdXNpZXVycyBtb2lzIGRcdTIwMTlpbnN0cnVjdGlvbiBkdSBjw7R0w6kgZGUgbGEgY2Fpc3NlLCBldCBjZXJ0YWlucyBkw6lsYWlzIGRlIHJlY291cnMgY291cmVudCBkw6lqw6AgOiBjXHUyMDE5ZXN0IHBvdXIgY2VsYSBxdWUgbGUgZG9zc2llciBpbmRpcXVlIGRhbnMgcXVlbCBvcmRyZSB0cmFpdGVyIGxlcyBzdWpldHMuJ10sDQogIFsnRXN0LWNlIHF1ZSBqZSBwZXV4IGxlIGZhaXJlIHBvdXIgdW4gcGFyZW50wqA/JywnT3VpLiBKXHUyMDE5YW5hbHlzZSBsZSByZWxldsOpIHF1aSBtXHUyMDE5ZXN0IGTDqXBvc8OpLCBxdWVsIHF1XHUyMDE5ZW4gc29pdCBsZSB0aXR1bGFpcmVcdTAwYTA6IGlsIHZvdXMgcmV2aWVudCBkZSB2b3VzIGFzc3VyZXIgcXVlIGxhIHBlcnNvbm5lIGNvbmNlcm7DqWUgZXN0IGRcdTIwMTlhY2NvcmQgZXQgcXVlIHZvdXMgcG91dmV6IGRpc3Bvc2VyIGRlIHNvbiBkb2N1bWVudC4gTGUgZG9zc2llciBlc3Qgw6l0YWJsaSDDoCBzb24gbm9tLCBldCBsZXMgY291cnJpZXJzIHNvbnQgw6Agc2Egc2lnbmF0dXJlLiddLA0KICBbJ0NvbWJpZW4gZGUgdGVtcHMgY2VsYSBtZSBwcmVuZMKgPycsJ1VuZSBkaXphaW5lIGRlIG1pbnV0ZXPCoDogdMOpbMOpY2hhcmdlciB2b3RyZSByZWxldsOpLCBsXHUyMDE5ZW52b3llciwgcsOpcG9uZHJlIGF1eCBxdWVzdGlvbnMgcG9zw6llcyBzdXIgbGVzIGFubsOpZXMgcXVpIHBvc2VudCBwcm9ibMOobWUuIExlIHJlc3RlIHNlIHBhc3NlIGRlIG5vdHJlIGPDtHTDqS4nXSwNCiAgWydFdCBzaSBtYSBjYWlzc2UgcmVmdXNlIGxhIGNvcnJlY3Rpb27CoD8nLCdMZSBkb3NzaWVyIGNvbnRpZW50IGxlcyBsZXR0cmVzIGRlIHJlbGFuY2UgZXQgbGEgbWFyY2hlIMOgIHN1aXZyZSBqdXNxdVx1MjAxOcOgIGxhIGNvbW1pc3Npb24gZGUgcmVjb3VycyBhbWlhYmxlLCBhdmVjIGxlcyBkw6lsYWlzIHF1aSBjb3VyZW50LiBVbiByZWZ1cyBuXHUyMDE5ZXN0IHBhcyBsYSBmaW4gZGUgbGEgZMOpbWFyY2hlLiddLA0KICBbJ1B1aXMtamUgdm91cyBqb2luZHJlwqA/JywnUGFyIMOpY3JpdCwgw6AgY29udGFjdEBhZGNmLm9yZy4gSWwgblx1MjAxOXkgYSBwYXMgZGUgbnVtw6lybyBkZSB0w6lsw6lwaG9uZSwgZXQgamUgcHLDqWbDqHJlIGxcdTIwMTnDqWNyaXJlIHBsdXTDtHQgcXVlIGRlIHZvdXMgbGFpc3NlciBjaGVyY2hlci4nXSwNCiAgWydWb3VzIMOqdGVzIHVuIHNlcnZpY2UgcHVibGljwqA/JywnTm9uLiBKZSBuZSBzdWlzIG1hbmRhdMOpIHBhciBhdWN1bmUgY2Fpc3NlIGRlIHJldHJhaXRlIGV0IGplIG5lIHJlbXBsYWNlIHBhcyBsYSB2w7R0cmUuJ10NCl07DQoNCmNsYXNzIFBhZ2Ugew0KICBzdGF0ZSA9IHsgcHJvZmlsOiAwIH07DQogIHByaWNlKCl7IHJldHVybiB0aGlzLnByb3BzLnByaWNlID8/ICcyNDkg4oKsIFRUQyc7IH0NCiAgZGVsYWkoKXsgcmV0dXJuIHRoaXMucHJvcHMuZGVsYWkgPz8gJzMgam91cnMgb3V2csOpcyc7IH0NCiAgZm91bmRlcigpeyByZXR1cm4gdGhpcy5wcm9wcy5mb3VuZGVyID8/ICdMw6lvbmFyZCBEZcOvJzsgfQ0KDQogIGV5ZWJyb3codCxjb2xvcixzaXplLG51bSl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudCwgYmFzZT17Zm9udFNpemU6KHNpemV8fDEyKSsncHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxsaW5lSGVpZ2h0OjEuNH07DQogICAgaWYoIWNvbG9yfHxjb2xvcj09PU5BVlkpIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzExcHgnLG1pbldpZHRoOjB9fSwNCiAgICAgIG51bT9lbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOicxNXB4Jyxmb250U3R5bGU6J2l0YWxpYycsY29sb3I6JyNjNDE3M2EnLGZsZXhTaHJpbms6MH19LG51bSk6ZWwoJ3NwYW4nLHtzdHlsZTp7d2lkdGg6JzIycHgnLGhlaWdodDonMnB4JyxiYWNrZ3JvdW5kOlJFRCxmbGV4U2hyaW5rOjB9fSksDQogICAgICBlbCgnc3Bhbicse3N0eWxlOk9iamVjdC5hc3NpZ24oe30sYmFzZSx7Y29sb3I6JyNjNDE3M2EnLG1pbldpZHRoOjB9KX0sdCkpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6T2JqZWN0LmFzc2lnbih7fSxiYXNlLHtjb2xvcjpjb2xvcn0pfSx0KTsNCiAgfQ0KDQogIGNvdmVyKHcpew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQsIGs9dy8yMTAsIG1tPXY9PisodiprKS50b0ZpeGVkKDIpKydweCcsIGg9dyoxLjQxNDsNCiAgICBjb25zdCBpdGVtPShuLHR4dCk9PmVsKCdkaXYnLHtrZXk6bixzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMS40KX19LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm1tKDUpLGxpbmVIZWlnaHQ6MSxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjY1KSd9fSxuKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bW0oMi41KSxsaW5lSGVpZ2h0OjEuMjUsY29sb3I6JyNmZmZmZmYnLGZvbnRXZWlnaHQ6NTAwfX0sdHh0KSk7DQogICAgY29uc3Qgc3BpbmU9ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6Jy05cHgnLHRvcDonM3B4Jyxib3R0b206Jy0zcHgnLHdpZHRoOic5cHgnLGJhY2tncm91bmQ6J2xpbmVhci1ncmFkaWVudCg5MGRlZywjMDcwYjJiIDAlLCMwYjEwMzkgNTUlLCMxNDFiNTcgMTAwJSknLHRyYW5zZm9ybTonc2tld1koNmRlZyknLHRyYW5zZm9ybU9yaWdpbjoncmlnaHQgY2VudGVyJ319KTsNCiAgICBjb25zdCBzdGFjaz1bNyw0LjUsMl0ubWFwKChvLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDooLW8pKydweCcsdG9wOm8qMC41KydweCcsd2lkdGg6dysncHgnLGhlaWdodDpoKydweCcsYmFja2dyb3VuZDppPT09Mj8nI2YyZjRmOSc6JyNkZmUzZWUnLGJveFNoYWRvdzonaW5zZXQgLTFweCAwIDAgcmdiYSgxNCwxOSw3OSwwLjE2KSd9fSkpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidyZWxhdGl2ZScsd2lkdGg6dysncHgnLGhlaWdodDpoKydweCcsZmxleFNocmluazowLGZpbHRlcjonZHJvcC1zaGFkb3coOHB4IDEycHggMTRweCByZ2JhKDQsNiwyNCwwLjUpKSBkcm9wLXNoYWRvdyg0MHB4IDU0cHggNjRweCByZ2JhKDQsNiwyNCwwLjU1KSknfX0sDQogICAgICBzdGFjayxzcGluZSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxpbnNldDowLGJhY2tncm91bmQ6TkFWWSxvdmVyZmxvdzonaGlkZGVuJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGluc2V0Om1tKDExKSxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMyknLHBvaW50ZXJFdmVudHM6J25vbmUnfX0pLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6bW0oMTEpLHRvcDptbSgxMSksd2lkdGg6bW0oOSksaGVpZ2h0Om1tKDkpLGJvcmRlclRvcDonMnB4IHNvbGlkICcrUkVELGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnK1JFRCxwb2ludGVyRXZlbnRzOidub25lJ319KSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxpbnNldDowLHBhZGRpbmc6bW0oMTkpKycgJyttbSgyNCkrJyAnK21tKDExKSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGJveFNpemluZzonYm9yZGVyLWJveCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptbSg2KX19LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm1tKDIuNiksZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yZW0nLGNvbG9yOicjZmZmZmZmJ319LCdBRENGJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bW0oMi40KSxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyM5YWEzZDgnfX0sJ0Rvc3NpZXIgZFx1MjAxOWFuYWx5c2UnKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOidhdXRvJ319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bW0oMi41KSxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjNlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpSRUR9fSwnw4l0YWJsaSBwb3VyJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm1tKDgpLGxpbmVIZWlnaHQ6MSxtYXJnaW5Ub3A6bW0oNSksY29sb3I6JyNjN2NkZjInfX0sJ0NsYWlyZScpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptbSgyNiksbGluZUhlaWdodDowLjkyLGxldHRlclNwYWNpbmc6Jy0wLjAzNWVtJyxtYXJnaW5Ub3A6bW0oMSksY29sb3I6JyNmZmZmZmYnfX0sJ0RVUE9OVCcpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6bW0oMjQpLGhlaWdodDonMnB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Ub3A6bW0oOCl9fSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bW0oNiksZm9udFNpemU6bW0oNCksbGluZUhlaWdodDoxLjYsY29sb3I6JyNjN2NkZjInLG1heFdpZHRoOm1tKDEyMCl9fSwnSlx1MjAxOWFpIGFuYWx5c8OpIHZvcyA0MiBhbm7DqWVzIGRlIGNhcnJpw6hyZSwgdW5lIHBhciB1bmUuICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjonI2ZmZmZmZicsZm9udFdlaWdodDo2MDB9fSwnMTMgc3VqZXRzIHNvbnQgw6AgZmFpcmUgdsOpcmlmaWVyIHBhciB2b3RyZSBjYWlzc2UuJykpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bW0oMTApLG1hcmdpbkJvdHRvbTptbSgxMCl9fSx0aGlzLmN1cnZlKHctdyowLjIzLGgqMC4yLHRydWUpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6J2F1dG8nLG1hcmdpbkxlZnQ6bW0oLTEzKSxtYXJnaW5SaWdodDptbSgtMTMpLGJhY2tncm91bmQ6UkVELHBhZGRpbmc6bW0oNikrJyAnK21tKDEzKX19LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bW0oMi43KSxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjJlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2ZmZmZmZid9fSwnQ2V0dGUgc2VtYWluZSwgdHJvaXMgY2hvc2VzJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOidyZXBlYXQoMywxZnIpJyxnYXA6bW0oOCksbWFyZ2luVG9wOm1tKDQpfX0sDQogICAgICAgICAgICBpdGVtKCcwMScsJ1NpZ25lciBsZSBjb3VycmllciAxJyksaXRlbSgnMDInLCdEZW1hbmRlciB2b3MgYnVsbGV0aW5zIDE5OTYnKSxpdGVtKCcwMycsJ1Bvc3RlciBlbiByZWNvbW1hbmTDqScpKSkpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDowLHRvcDowLGJvdHRvbTowLHdpZHRoOm1tKDMuNCksYmFja2dyb3VuZDonbGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkscmdiYSgyNTUsMjU1LDI1NSwwKSA3MCUpJyxwb2ludGVyRXZlbnRzOidub25lJ319KSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGluc2V0OjAsYmFja2dyb3VuZDonbGluZWFyLWdyYWRpZW50KDEwNGRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMDkpIDAlLHJnYmEoMjU1LDI1NSwyNTUsMCkgMzQlLHJnYmEoMCwwLDAsMC4xNikgMTAwJSknLHBvaW50ZXJFdmVudHM6J25vbmUnfX0pKSk7DQogIH0NCg0KICB2ZXJpZkNhcmQobSl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICBjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIExJTkU9JyNlNWU3ZWInLCBSVElOVD0nI0ZERUNFRic7DQogICAgY29uc3Qgcm93PShsYWIsdmFsLHJlZCk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzE0cHgnLHBhZGRpbmc6bT8nMTFweCAwJzonMTNweCAwJyxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkV9fSwNCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOkdSRVl9fSxsYWIpLA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOnJlZD8nI2M0MTczYSc6TkFWWSx3aGl0ZVNwYWNlOidub3dyYXAnfX0sdmFsKSk7DQogICAgcmV0dXJuIGVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggZGFzaGVkICNjOWNmZGEnLGJveFNoYWRvdzonbm9uZSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycxMnB4IDE4cHgnOicxNHB4IDIycHgnLGJhY2tncm91bmQ6JyNlZWYyZmInLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTJweCd9fSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTEuNXB4JzonMTJweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOk5BVll9fSwnRXhlbXBsZScpLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxjb2xvcjpHUkVZfX0sJ3VuZSBhbm7DqWUgw6AgdGVtcHMgcGFydGllbCwgMjAxMicpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPyc2cHggMThweCAxNnB4JzonOHB4IDIycHggMjBweCd9fSwNCiAgICAgICAgcm93KCdTYWxhaXJlIHBvcnTDqSBhdSByZWxldsOpJywnOCA0MDAg4oKsJyksDQogICAgICAgIHJvdygnU2V1aWwgZGUgdmFsaWRhdGlvbiBkXHUyMDE5dW4gdHJpbWVzdHJlIGVuIDIwMTInLCcxIDg0NCDigqwnKSwNCiAgICAgICAgcm93KCdUcmltZXN0cmVzIHF1ZSBjZSBzYWxhaXJlIGp1c3RpZmllJywnNCcpLA0KICAgICAgICByb3coJ1RyaW1lc3RyZXMgaW5zY3JpdHMgYXUgcmVsZXbDqScsJzInLHRydWUpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxNHB4JzonMTZweCcscGFkZGluZzptPycxM3B4IDE1cHgnOicxNXB4IDE4cHgnLGJhY2tncm91bmQ6UlRJTlQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVEfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMS41cHgnOicxMnB4Jyxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjEyZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNjNDE3M2EnLG1hcmdpbkJvdHRvbTonNXB4J319LCdDZSBxdWUgZGlyYWl0IGxlIGRvc3NpZXInKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOk5BVll9fSwnTGUgc2FsYWlyZSBkw6ljbGFyw6kgc3VmZmlzYWl0IHBvdXIgdmFsaWRlciBsXHUyMDE5YW5uw6llIGVudGnDqHJlLiBEZXV4IHRyaW1lc3RyZXMgbWFucXVlbnQuIExlcyBidWxsZXRpbnMgZGUgMjAxMiBzb250IMOgIGpvaW5kcmUgYXUgY291cnJpZXIuJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc5cHgnOicxMXB4Jyxmb250U2l6ZTptPycxMS41cHgnOicxMnB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6R1JFWX19LCdTZXVpbCBkZSB2YWxpZGF0aW9uXHUwMGEwOiB0YWJsZSBDTkFWIDIwMTIuJykpKTsNCiAgfQ0KDQogIG1pZEN0YShtLGxpbmUsb3B0KXsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIGNvbnN0IE5BVlk9JyMwRTEzNEYnLCBSRUQ9JyNGNTI1NDknLCBMSU5FPScjZTVlN2ViJywgR1JFWT0nIzZDNzE3OSc7DQogICAgb3B0PW9wdHx8e307DQogICAgdmFyIGVtcD1vcHQuZW1wfHwnYmFuZGUnOw0KICAgIHZhciBtb2RlPW9wdC5tb2RlfHwnZGVwb3QnOyAgICAgICAgICAvLyAnZGVwb3QnIHwgJ3F1ZXN0aW9ucycNCiAgICB2YXIgYWNoYXQ9b3B0LmFjaGF0IT09ZmFsc2U7ICAgICAgICAgIC8vIGxpZW4gdGV4dGUgZCdhY2hhdCBzb3VzIGxlIGJvdXRvbg0KICAgIHZhciBsYWJlbD1tb2RlPT09J3F1ZXN0aW9ucyc/J1LDqXBvbmRyZSBhdXggNiBxdWVzdGlvbnMnOidWb2lyIGNlIHF1ZSBwb3J0ZSBtb24gcmVsZXbDqSc7DQogICAgdmFyIHZlbmRhYmxlPShTVFJJUEUgJiYgU1RSSVBFIT09JyMnICYmICEvUkVNUExBQ0VSLy50ZXN0KFNUUklQRSkpOw0KICAgIHZhciBib3V0b249ZWwoJ2EnLHtocmVmOicjZGlhZycsb25DbGljazplPT57aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7dHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0Om1vZGU9PT0ncXVlc3Rpb25zJz8ncXVlc3Rpb25zJzoncHJlYW5hbHlzZScsZW1wbGFjZW1lbnQ6ZW1wfSk7fWNhdGNoKF8pe30NCiAgICAgICAgaWYobW9kZT09PSdxdWVzdGlvbnMnKXsgdHJ5eyBpZih3aW5kb3cuX19hZGNmTGVjdHVyZSkgd2luZG93Ll9fYWRjZkxlY3R1cmUub3V2cmlyUXVlc3Rpb25zKCk7IH1jYXRjaChfZSl7fSB9DQogICAgICAgIHRoaXMuc2Nyb2xsVG9EaWFnKGUpO30sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTFweCknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9LHN0eWxlOnt0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsaGVpZ2h0Om0/JzU0cHgnOic1OHB4JyxwYWRkaW5nOm0/JzAgMjJweCc6JzAgMzBweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NjAwLHdoaXRlU3BhY2U6J25vd3JhcCcsYm94U2hhZG93OicwIDEycHggMjhweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjUpJ319LGxhYmVsKTsNCiAgICB2YXIgbGllbj1hY2hhdD9lbCgnYScse2hyZWY6dmVuZGFibGU/U1RSSVBFOicjb2ZmcmUnLG9uQ2xpY2s6ZT0+e3RyeXt0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDp2ZW5kYWJsZT8nc3RyaXBlJzonb2ZmcmUnLGVtcGxhY2VtZW50OmVtcCsnX2xpZW5fYWNoYXQnfSk7fWNhdGNoKF8pe30gaWYoIXZlbmRhYmxlKXsgaWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7IHRoaXMudG9PZmZyZShlKTsgfX0sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9TkFWWTt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPUdSRVk7fSxzdHlsZTp7bWFyZ2luVG9wOic5cHgnLGRpc3BsYXk6J2lubGluZS1ibG9jaycsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOkdSRVksdGV4dERlY29yYXRpb246J25vbmUnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxjdXJzb3I6J3BvaW50ZXInfX0sJ291IG9idGVuaXIgZGlyZWN0ZW1lbnQgbW9uIGJpbGFuIHJldHJhaXRlLCAnK3RoaXMucHJpY2UoKSk6bnVsbDsNCiAgICByZXR1cm4gZWwoJ3NlY3Rpb24nLHtzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzIycHggMCc6JzMwcHggMCd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWF4V2lkdGg6bT8nbm9uZSc6JzEwNjBweCcsbWFyZ2luOicwIGF1dG8nLHBhZGRpbmc6bT8nMCAyNHB4JzonMCA2MHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsYWxpZ25JdGVtczptPydzdHJldGNoJzonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOm0/JzE2cHgnOic0MHB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6J1wnTmV3c3JlYWRlclwnLCBHZW9yZ2lhLCBzZXJpZicsZm9udFNpemU6bT8nMjFweCc6JzI3cHgnLGxpbmVIZWlnaHQ6MS4yNSxmb250V2VpZ2h0OjUwMCxjb2xvcjpOQVZZLG1heFdpZHRoOic0NGNoJ319LGxpbmUpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2ZsZXgtc3RhcnQnfX0sYm91dG9uLGxpZW4pKSk7DQogIH0NCg0KICBwcm9maWxzKG0pew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQsIGFjdD10aGlzLnN0YXRlLnByb2ZpbCwgY3VyPVBST0ZJTFNbYWN0XTsNCiAgICBjb25zdCBjYXJkPSh4LGkpPT57DQogICAgICBjb25zdCBvbj1pPT09YWN0Ow0KICAgICAgcmV0dXJuIGVsKCdidXR0b24nLHtrZXk6aSxvbkNsaWNrOigpPT50aGlzLnNldFN0YXRlKHtwcm9maWw6aX0pLA0KICAgICAgICBzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyxhcHBlYXJhbmNlOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRleHRBbGlnbjonbGVmdCcsDQogICAgICAgICAgYmFja2dyb3VuZDpvbj9OQVZZOicjZmZmZmZmJyxjb2xvcjpvbj8nI2ZmZmZmZic6TkFWWSwNCiAgICAgICAgICBib3JkZXI6JzFweCBzb2xpZCAnKyhvbj9OQVZZOkxJTkUpLGJvcmRlclRvcDonM3B4IHNvbGlkICcrKG9uP1JFRDonI2M5Y2ZkZCcpLA0KICAgICAgICAgIG1pbldpZHRoOjAsd2hpdGVTcGFjZTonbm9ybWFsJyxvdmVyZmxvd1dyYXA6J2FueXdoZXJlJyxwYWRkaW5nOm0/JzE1cHggMTZweCAxNnB4JzonMThweCAyMHB4IDIwcHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic3cHgnLA0KICAgICAgICAgIGJveFNoYWRvdzpvbj8nMCAxOHB4IDQwcHggLTI2cHggcmdiYSgxNCwxOSw3OSwwLjc1KSc6J25vbmUnLA0KICAgICAgICAgIHRyYW5zaXRpb246J2JhY2tncm91bmQgLjJzIGVhc2UsIGJvcmRlci1jb2xvciAuMnMgZWFzZSwgdHJhbnNmb3JtIC4ycyBlYXNlLCBib3gtc2hhZG93IC4ycyBlYXNlJ30sDQogICAgICAgIG9uTW91c2VFbnRlcjplPT57aWYoIW9uKXtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9TkFWWTtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyVG9wQ29sb3I9TkFWWTtlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0ycHgpJzt9fSwNCiAgICAgICAgb25Nb3VzZUxlYXZlOmU9PntpZighb24pe2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1MSU5FO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJUb3BDb2xvcj0nI2M5Y2ZkZCc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fX19LA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTAuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicuMThlbScsY29sb3I6b24/JyNmZjgwOTUnOicjOWFhMGFhJyxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSwnMCcrKGkrMSkpLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjYwMCxsaW5lSGVpZ2h0OjEuMjgsbGV0dGVyU3BhY2luZzonLTAuMDEyZW0nfX0seFswXSksDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOm9uPydyZ2JhKDI1NSwyNTUsMjU1LDAuNyknOkdSRVl9fSx4WzFdKSwNCiAgICAgICAgb24mJiFtP2VsKCdzcGFuJyx7a2V5OiduJyxzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0Oic1MCUnLGJvdHRvbTonLTlweCcsd2lkdGg6JzE2cHgnLGhlaWdodDonMTZweCcsbWFyZ2luTGVmdDonLThweCcsYmFja2dyb3VuZDpOQVZZLHRyYW5zZm9ybToncm90YXRlKDQ1ZGVnKSd9fSk6bnVsbCk7DQogICAgfTsNCiAgICBjb25zdCBpdGVtPShzLGkpPT5lbCgnZGl2Jyx7a2V5OmFjdCsnLScraSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nN3B4JzonOXB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZ1RvcDptPycxMXB4JzonMTNweCd9fSwNCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjFweCc6JzI1cHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxjb2xvcjpSRUQsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzAnKyhpKzEpKSwNCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0scykpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEycHgnOicwJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6J3JlcGVhdCg0LG1pbm1heCgwLDFmcikpJyxnYXA6bT8nOXB4JzonMTJweCcsYWxpZ25JdGVtczonc3RyZXRjaCd9fSxQUk9GSUxTLm1hcChjYXJkKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycwJzonMjJweCcsYmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmc6bT8nMThweCAxOHB4IDIwcHgnOicyNnB4IDMycHggMzBweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTRweCc6JzIwcHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTRweCcsZmxleFdyYXA6J3dyYXAnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLjE4ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6R1JFWX19LCdDZSBxdWUgbFx1MjAxOWFuYWx5c2UgcmVnYXJkZSBhbG9ycycpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMThweCc6JzIxcHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVlksbGV0dGVyU3BhY2luZzonLTAuMDE1ZW0nfX0sY3VyWzBdKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOidyZXBlYXQoMywxZnIpJyxnYXA6bT8nMTZweCc6JzM0cHgnfX0sY3VyWzJdLm1hcChpdGVtKSkpKTsNCiAgfQ0KDQogIHRlbW9pbnMobSl7DQogICAgcmV0dXJuIG51bGw7IC8vIEFWSVMgbWFzcXXDqXMsIHN1cHByaW1lciBjZXR0ZSBsaWduZSBwb3VyIHLDqWFjdGl2ZXINCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIGNvbnN0IHE9KHR4dCx3aG8sY3R4LG1ldGEsaW5pdCxpKT0+ZWwoJ2ZpZ3VyZScse2tleTppLHN0eWxlOnttYXJnaW46MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxNnB4JzonMjBweCcsDQogICAgICBwYWRkaW5nTGVmdDptPycwJzooaT8nNDRweCc6JzAnKSxwYWRkaW5nUmlnaHQ6bT8nMCc6KGk/JzAnOic0NHB4JyksYm9yZGVyTGVmdDptPydub25lJzooaT8nMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xOCknOidub25lJyksDQogICAgICBwYWRkaW5nVG9wOm0/KGk/JzI2cHgnOicwJyk6JzAnLGJvcmRlclRvcDptPyhpPycxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE4KSc6J25vbmUnKTonbm9uZSd9fSwNCiAgICAgIGVsKCdibG9ja3F1b3RlJyx7c3R5bGU6e21hcmdpbjowLHBvc2l0aW9uOidyZWxhdGl2ZScsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMHB4JzonMjVweCcsbGluZUhlaWdodDoxLjQyLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOicjZmZmZmZmJyxsZXR0ZXJTcGFjaW5nOictMC4wMTVlbScsdGV4dFdyYXA6J3ByZXR0eSd9fSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0Om0/Jy0ycHgnOictMjJweCcsdG9wOm0/Jy0zMHB4JzonLTZweCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc0MHB4JzonNDhweCcsbGluZUhlaWdodDoxLGNvbG9yOlJFRCxwb2ludGVyRXZlbnRzOidub25lJ319LCdcdTIwMUMnKSwNCiAgICAgICAgdHh0KSwNCiAgICAgIGVsKCdmaWdjYXB0aW9uJyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGdhcDptPycxM3B4JzonMTVweCcsbWFyZ2luVG9wOidhdXRvJyxwYWRkaW5nVG9wOm0/JzE2cHgnOicyMHB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJ319LA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6bT8nNDBweCc6JzQ0cHgnLGhlaWdodDptPyc0MHB4JzonNDRweCcsYm9yZGVyOicxLjVweCBzb2xpZCAnK1JFRCxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTlweCc6JzIwcHgnLGNvbG9yOicjZmZmJ319LGluaXQpLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonM3B4JyxtaW5XaWR0aDowfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6JyNmZmZmZmYnfX0sd2hvKSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjYpJ319LGN0eCksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7bWFyZ2luVG9wOiczcHgnLGZvbnRTaXplOicxMXB4Jyxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicuMTNlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjQyKScsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sbWV0YS5qb2luKCdcdTAwYTBcdTAwYjdcdTAwYTAnKSkpKSk7DQogICAgY29uc3Qgbj1BVklTLmxlbmd0aCwgY29scz1tPycxZnInOihuPD0yPycxZnIgMWZyJzoncmVwZWF0KDMsMWZyKScpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxib3JkZXJUb3A6JzRweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzI2cHggMjBweCAyOHB4JzonNDZweCA1MnB4IDQ4cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzI0cHgnOiczOHB4Jyxib3hTaGFkb3c6JzAgNDBweCA5MHB4IC02MHB4IHJnYmEoMTQsMTksNzksMC45KSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxMnB4JzonNTRweCcsYWxpZ25JdGVtczptPydmbGV4LXN0YXJ0JzonZmxleC1lbmQnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleDptPydub25lJzonMCAwIDQ0JScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzE0cHgnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLjJlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2ZmODA5NSd9fSwnQXZpcycpLA0KICAgICAgICAgIGVsKCdoMicse3N0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI4cHgnOic0MnB4JyxsaW5lSGVpZ2h0OjEuMCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wM2VtJyxjb2xvcjonI2ZmZmZmZicsdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ0xlcyBhdmlzIGRlIG5vcyBwcmVtaWVycyBjbGllbnRzJykpLA0KICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmbGV4OicxIDEgMCcsZm9udFNpemU6bT8nMTUuNXB4JzonMTYuNXB4JyxsaW5lSGVpZ2h0OjEuNjgsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC43MiknLG1heFdpZHRoOic1MGNoJyx0ZXh0V3JhcDoncHJldHR5J319LCdMZSBzZXJ2aWNlIHZpZW50IGRcdTIwMTlvdXZyaXIuIFZvaWNpIGxlcyByZXRvdXJzIGRlcyBwcmVtacOocmVzIHBlcnNvbm5lcyDDoCBhdm9pciByZcOndSBsZXVyIGRvc3NpZXIsIHB1Ymxpw6lzIHRlbHMgcXVcdTIwMTlpbHMgbVx1MjAxOW9udCDDqXTDqSDDqWNyaXRzLCBhdmVjIGxldXIgYWNjb3JkLicpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczpjb2xzLGdhcDptPycyNnB4JzonMCd9fSwNCiAgICAgICAgQVZJUy5tYXAoKGEsaSk9PnEoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzBdLGkpKSkpOw0KICB9DQoNCiAgY3RhKG0sbGFiZWwsc3ViLGRhcmssYW5jaG9yLGVtcCl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICAvLyBMZSBsaWJlbGzDqSBkw6ljb3VsZSBkZSBsYSBkZXN0aW5hdGlvbiwgamFtYWlzIGR1IHNpdGUgZCdhcHBlbCA6IGwnYWN0aW9uIGdyYXR1aXRlDQogICAgLy8gcG9ydGUgbGUgbm9tIGR1IGRvY3VtZW50LCBsJ2FjdGlvbiBwYXlhbnRlIGxlIG5vbSBkdSBsaXZyYWJsZS4NCiAgICBpZihhbmNob3I9PT0nZGlhZycpIGxhYmVsPSdWb2lyIGNlIHF1ZSBwb3J0ZSBtb24gcmVsZXbDqSc7DQogICAgZWxzZSBpZighYW5jaG9yKSBsYWJlbD0nT2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUnOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMnB4JyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidmbGV4LXN0YXJ0J319LA0KICAgICAgZWwoYW5jaG9yPydidXR0b24nOidhJyx7b25DbGljazooZT0+e3RyeXt0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDphbmNob3I9PT0nb2ZmcmUnPydvZmZyZSc6KGFuY2hvcj8ncHJlYW5hbHlzZSc6KFNUUklQRT09PScjJz8ncHJlYW5hbHlzZSc6J3N0cmlwZScpKSxlbXBsYWNlbWVudDplbXB8fCcnfSk7fWNhdGNoKF8pe30gaWYoYW5jaG9yPT09J2RpYWcnKXJldHVybiB0aGlzLnNjcm9sbFRvRGlhZyhlKTsgaWYoYW5jaG9yKXJldHVybiB0aGlzLnRvT2ZmcmUoZSk7IGlmKFNUUklQRT09PScjJylyZXR1cm4gdGhpcy5zY3JvbGxUb0RpYWcoZSk7fSksaHJlZjphbmNob3I/bnVsbDooU1RSSVBFPT09JyMnPycjJzpTVFJJUEUpLHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLHRleHREZWNvcmF0aW9uOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGJveFNpemluZzonYm9yZGVyLWJveCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE3cHgnOicxOHB4Jyxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjAwNWVtJyxwYWRkaW5nOm0/JzAgMjBweCc6JzAgMzJweCcsaGVpZ2h0Om0/JzU2cHgnOic2MHB4Jyx3aGl0ZVNwYWNlOidub3dyYXAnLGZsZXhTaHJpbms6MCxtYXhXaWR0aDonMTAwJScsYm94U2hhZG93OicwIDEycHggMjhweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjUpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJyx3aWR0aDptPycxMDAlJzonYXV0byd9LA0KICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSwNCiAgICAgICAgb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9fSxsYWJlbCksDQogICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpkYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuNzIpJzpHUkVZLHRleHRBbGlnbjptPydjZW50ZXInOidsZWZ0J319LHN1YikpOw0KICB9DQoNCiAgY3VydmUodyxoLGRhcmspew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQsIFA9Q0FSRUVSLCBuPVAubGVuZ3RoOw0KICAgIGNvbnN0IHBhZEw9NixwYWRSPTYscGFkVD0xNCxwYWRCPTMyLG1heD05NTsNCiAgICBjb25zdCBpdz13LXBhZEwtcGFkUiwgaWg9aC1wYWRULXBhZEI7DQogICAgY29uc3QgWD1pPT4rKHBhZEwraXcqaS8obi0xKSkudG9GaXhlZCgxKSwgWT12PT4rKHBhZFQraWgqKDEtdi9tYXgpKS50b0ZpeGVkKDEpOw0KICAgIGNvbnN0IGxpbmU9UC5tYXAoKHAsaSk9PihpPydMJzonTScpK1goaSkrJyAnK1kocFsxXSkpLmpvaW4oJyAnKTsNCiAgICBjb25zdCBiYXNlPXBhZFQraWgsIGluaz1kYXJrPycjZmZmZmZmJzpOQVZZLCBzb2Z0PWRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC43NSknOkdSRVk7DQogICAgY29uc3QgbWFya3M9W107DQogICAgLy8gRGVtaS1sYXJnZXVyIGQndW5lIMOpdGlxdWV0dGUgZCdhbm7DqWUgw6AgMTEgcHgsIHBsdXMgbCdlc3BhY2UgbWluaW1hbCBlbnRyZSBkZXV4Lg0KICAgIGNvbnN0IGRlbWk9MTUsIGVjYXJ0PTU7DQogICAgLy8gTGVzIGJvcm5lcyAxOTgyIGV0IDIwMjUgb2NjdXBlbnQgZMOpasOgIGxlIHByZW1pZXIgbml2ZWF1IMOgIGNoYXF1ZSBleHRyw6ltaXTDqS4NCiAgICBjb25zdCBvY2N1cGU9W1twYWRMKzMwXSxbcGFkTF1dLCBib3JuZUQ9dy1wYWRSLTMwOw0KICAgIFAuZm9yRWFjaCgocCxpKT0+eyBpZighcFsyXSkgcmV0dXJuOw0KICAgICAgY29uc3QgY3g9WChpKSwgZz1jeC1kZW1pLCBkPWN4K2RlbWk7DQogICAgICBsZXQgbml2ZWF1PS0xOw0KICAgICAgZm9yKGxldCB6PTA7ejwyO3orKyl7DQogICAgICAgIGNvbnN0IGxpYnJlID0gZyA+PSBvY2N1cGVbel1bb2NjdXBlW3pdLmxlbmd0aC0xXStlY2FydCAmJiAoej4wIHx8IGQgPD0gYm9ybmVEKTsNCiAgICAgICAgaWYobGlicmUpeyBuaXZlYXU9ejsgYnJlYWs7IH0NCiAgICAgIH0NCiAgICAgIC8vIExlIHJlcMOocmUgZXN0IHRvdWpvdXJzIHRyYWPDqSA6IGMnZXN0IGx1aSBxdWkgcG9ydGUgbCdpbmZvcm1hdGlvbi4NCiAgICAgIG1hcmtzLnB1c2goZWwoJ2xpbmUnLHtrZXk6J3YnK2kseDE6Y3gseTE6WShwWzFdKSx4MjpjeCx5MjpiYXNlLHN0cm9rZTpSRUQsc3Ryb2tlV2lkdGg6MSxzdHJva2VEYXNoYXJyYXk6JzIgMycsb3BhY2l0eTowLjZ9KSk7DQogICAgICBtYXJrcy5wdXNoKGVsKCdjaXJjbGUnLHtrZXk6J2MnK2ksY3g6Y3gsY3k6WShwWzFdKSxyOjMuOCxmaWxsOlJFRCxzdHJva2U6ZGFyaz9OQVZZOicjZmZmZmZmJyxzdHJva2VXaWR0aDoxLjYsc3R5bGU6e2FuaW1hdGlvbjoncG9wQ2hlY2sgLjRzIGN1YmljLWJlemllciguMiwxLjMsLjQsMSkgJysoMStpKjAuMDMpKydzIGJvdGgnfX0pKTsNCiAgICAgIGlmKG5pdmVhdTwwKSByZXR1cm47DQogICAgICBvY2N1cGVbbml2ZWF1XS5wdXNoKGQpOw0KICAgICAgY29uc3QgeXk9YmFzZSsobml2ZWF1PzI2OjEzKTsNCiAgICAgIG1hcmtzLnB1c2goZWwoJ2xpbmUnLHtrZXk6J2wnK2kseDE6Y3gseTE6YmFzZSszLHgyOmN4LHkyOnl5LTksc3Ryb2tlOlJFRCxzdHJva2VXaWR0aDoxLG9wYWNpdHk6MC4zNX0pKTsNCiAgICAgIG1hcmtzLnB1c2goZWwoJ3RleHQnLHtrZXk6J3QnK2kseDpjeCx5Onl5LHRleHRBbmNob3I6J21pZGRsZScsc3R5bGU6e2ZvbnRTaXplOicxMXB4Jyxmb250V2VpZ2h0OjYwMCxmaWxsOmRhcms/JyNmZjgwOTUnOicjYzQxNzNhJyxmb250RmFtaWx5Oidpbmhlcml0J319LHBbMF0pKTsNCiAgICB9KTsNCiAgICByZXR1cm4gZWwoJ3N2Zycse3ZpZXdCb3g6JzAgMCAnK3crJyAnK2gsc3R5bGU6e3dpZHRoOicxMDAlJyxoZWlnaHQ6J2F1dG8nLGRpc3BsYXk6J2Jsb2NrJyxvdmVyZmxvdzondmlzaWJsZSd9fSwNCiAgICAgIGVsKCdsaW5lJyx7eDE6cGFkTCx5MTpiYXNlLHgyOnctcGFkUix5MjpiYXNlLHN0cm9rZTpkYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuMjIpJzpMSU5FLHN0cm9rZVdpZHRoOjF9KSwNCiAgICAgIGVsKCdwYXRoJyx7ZDpsaW5lKycgTCcrWChuLTEpKycgJytiYXNlKycgTCcrcGFkTCsnICcrYmFzZSsnIFonLGZpbGw6ZGFyaz8ncmdiYSgyNTUsMjU1LDI1NSwwLjA3KSc6VElOVH0pLA0KICAgICAgZWwoJ3BhdGgnLHtkOmxpbmUsZmlsbDonbm9uZScsc3Ryb2tlOmluayxzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWpvaW46J3JvdW5kJyxzdHJva2VMaW5lY2FwOidyb3VuZCcscGF0aExlbmd0aDoxLHN0eWxlOntzdHJva2VEYXNoYXJyYXk6MSxzdHJva2VEYXNob2Zmc2V0OjEsYW5pbWF0aW9uOidkcmF3IDEuNnMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSkgLjJzIGJvdGgnfX0pLA0KICAgICAgbWFya3MsDQogICAgICBlbCgndGV4dCcse3g6cGFkTCx5OmJhc2UrMTMsc3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZpbGw6c29mdCxmb250RmFtaWx5Oidpbmhlcml0J319LCcxOTgyJyksDQogICAgICBlbCgndGV4dCcse3g6dy1wYWRSLHk6YmFzZSsxMyx0ZXh0QW5jaG9yOidlbmQnLHN0eWxlOntmb250U2l6ZTonMTAuNXB4JyxmaWxsOnNvZnQsZm9udEZhbWlseTonaW5oZXJpdCd9fSwnMjAyNScpKTsNCiAgfQ0KDQogIGRvY1N0YWNrKG0pew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQ7DQogICAgY29uc3QgcGFnZT0oaSxvZmYscm90KT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6b2ZmKydweCcsdG9wOihpKjQpKydweCcsd2lkdGg6bT8nMTUwcHgnOicyNjhweCcsaGVpZ2h0Om0/JzIxMnB4JzonMzc5cHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3hTaGFkb3c6JzAgMThweCA0MHB4IC0yMHB4IHJnYmEoMTQsMTksNzksMC40KScsdHJhbnNmb3JtOidyb3RhdGUoJytyb3QrJ2RlZyknLHRyYW5zZm9ybU9yaWdpbjonYm90dG9tIGxlZnQnLG92ZXJmbG93OidoaWRkZW4nfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2hlaWdodDptPyc1cHgnOic3cHgnLGJhY2tncm91bmQ6TkFWWX19KSwNCiAgICAgIGk9PT0yDQogICAgICAgID8gZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm0/JzhweCA5cHgnOicxMnB4IDEzcHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzNweCc6JzVweCd9fSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptPyc1cHgnOic3cHgnfX0sDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxNXB4JzonMjNweCcsbGluZUhlaWdodDowLjksY29sb3I6TkFWWX19LCcxOTk2JyksDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nNnB4JzonN3B4Jyxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjFlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2M0MTczYSd9fSwnMiB0cmltZXN0cmVzIHN1ciA0JykpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpMSU5FLG1hcmdpbjptPycycHggMCc6JzRweCAwJ319KSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nNnB4JzonNi41cHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMTRlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonIzhiOTBhMCd9fSwnTGUgY29uc3RhdCcpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPyc2cHgnOic3LjRweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0sJ1ZvdHJlIHJlbGV2w6kgbmUgY29tcHRlIHF1ZSBkZXV4IHRyaW1lc3RyZXMgcG91ciAxOTk2LCBhbG9ycyBxdWUgdm9zIGJ1bGxldGlucyBjb3V2cmVudCBsXHUyMDE5YW5uw6llIGVudGnDqHJlLicpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNHB4Jyxmb250U2l6ZTptPyc2cHgnOic2LjVweCcsZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4xNGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjOGI5MGEwJ319LCdDZSBxdWkgcGV1dCBsXHUyMDE5ZXhwbGlxdWVyJyksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzZweCc6JzcuNHB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSwnVW4gZW1wbG95ZXVyIGF5YW50IGTDqWNsYXLDqSB0YXJkaXZlbWVudCwgb3UgdW5lIG1pc3Npb24gZFx1MjAxOWludMOpcmltIHJhdHRhY2jDqWUgYXUgbWF1dmFpcyByw6lnaW1lLicpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nM3B4JzonNXB4JyxwYWRkaW5nOm0/JzRweCA1cHgnOic2cHggN3B4JyxiYWNrZ3JvdW5kOlJUSU5ULGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnK1JFRCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMnB4J319LA0KICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzZweCc6JzYuNXB4Jyxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjE0ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyM4YjkwYTAnfX0sJ0xlIGdlc3RlIMOgIGZhaXJlJyksDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nNnB4JzonNy40cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOklOS319LCdKb2luZHJlIHZvcyBidWxsZXRpbnMgZGUgMTk5NiBhdSBjb3VycmllciAyLicpKSkNCiAgICAgICAgOiBlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nOHB4IDlweCc6JzEycHggMTNweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nNHB4JzonNnB4J319LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6bT8nNnB4JzonOXB4Jyx3aWR0aDonNjIlJyxiYWNrZ3JvdW5kOk5BVlksb3BhY2l0eTowLjg1fX0pLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpMSU5FLG1hcmdpbjonMnB4IDAnfX0pLA0KICAgICAgICAgICAgWzEsMiwzLDQsNSw2LDddLm1hcChyPT5lbCgnZGl2Jyx7a2V5OnIsc3R5bGU6e2hlaWdodDptPyczcHgnOic0cHgnLHdpZHRoOihyPT09Mz8nNDYlJzpyPT09Nj8nNTglJzonODglJyksYmFja2dyb3VuZDpyPT09Mz9SVElOVDonI2U5ZWNmMyd9fSkpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6bT8nM3B4JzonNHB4Jyx3aWR0aDonMzQlJyxiYWNrZ3JvdW5kOlJFRCxvcGFjaXR5OjAuNzUsbWFyZ2luVG9wOicycHgnfX0pKSk7DQogICAgcmV0dXJuIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyxoZWlnaHQ6bT8nMjM4cHgnOic0MTZweCcsd2lkdGg6JzEwMCUnfX0sDQogICAgICBwYWdlKDAsbT81Njo5NiwtNyksIHBhZ2UoMSxtPzI5OjQ5LC0zLjQpLCBwYWdlKDIsMCwwLjYpKTsNCiAgfQ0KDQogIG5pckRldGFpbChtKXsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIGNvbnN0IE5BVlk9JyMwRTEzNEYnLCBSRUQ9JyNGNTI1NDknLCBHUkVZPScjNkM3MTc5JywgTElORT0nI2U1ZTdlYicsIFJUSU5UPScjRkRFQ0VGJzsNCiAgICBjb25zdCBjdXQ9KHcsbyk9PmVsKCdkaXYnLHtzdHlsZTp7aGVpZ2h0Om0/JzVweCc6JzZweCcsd2lkdGg6dyxiYWNrZ3JvdW5kOicjZTNlNmVlJyxvcGFjaXR5Om99fSk7DQogICAgY29uc3QgY2hhbXA9KGxhYix2YWwpPT5lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTBweCc6JzEycHgnLHBhZGRpbmc6bT8nOXB4IDAnOicxMXB4IDAnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX19LA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleDonMCAwIGF1dG8nLG1pbldpZHRoOm0/JzExMnB4JzonMTMycHgnLGZvbnRTaXplOm0/JzEycHgnOicxMi41cHgnLGxldHRlclNwYWNpbmc6JzAuMWVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOkdSRVl9fSxsYWIpLA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSx2YWwpKTsNCiAgICByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3hTaGFkb3c6JzAgMThweCA0MHB4IC0yMHB4IHJnYmEoMTQsMTksNzksMC4zNSknLG92ZXJmbG93OidoaWRkZW4nfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMTRweCAxOHB4IDAnOicxOHB4IDI0cHggMCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nNXB4JzonNnB4JyxvcGFjaXR5OjAuNTV9fSxjdXQoJzg2JScsMSksY3V0KCc3MiUnLDAuOCksY3V0KCc0MCUnLDAuNTUpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycxMnB4IDE4cHggNHB4JzonMTZweCAyNHB4IDZweCd9fSwNCiAgICAgICAgY2hhbXAoJ05vbSBldCBwcsOpbm9tJywnQ2xhaXJlIERVUE9OVCcpLA0KICAgICAgICBjaGFtcCgnTsOpIGxlJywnMTQgbWFycyAxOTYyJyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycxMnB4IDAgNHB4JzonMTRweCAwIDZweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEycHgnOicxMi41cHgnLGxldHRlclNwYWNpbmc6JzAuMWVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYzQxNzNhJyxtYXJnaW5Cb3R0b206bT8nN3B4JzonOHB4J319LCdOwrAgZGUgc8OpY3VyaXTDqSBzb2NpYWxlJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6bT8nNDBweCc6JzQ2cHgnLGJhY2tncm91bmQ6UlRJTlQsYm9yZGVyOicxLjVweCBkYXNoZWQgJytSRUQsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxwYWRkaW5nOicwIDEycHgnLGdhcDptPyc3cHgnOic5cHgnfX0sDQogICAgICAgICAgICBbMCwxLDIsMyw0LDUsNl0ubWFwKGk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZmxleDoxLGhlaWdodDonMS41cHgnLGJhY2tncm91bmQ6J3JnYmEoMTk2LDIzLDU4LDAuNDUpJ319KSkpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzhweCc6JzlweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsZm9udFN0eWxlOidpdGFsaWMnLGNvbG9yOicjYzQxNzNhJ319LCdsYWlzc8OpIHZpZGUsIHZvdXMgbFx1MjAxOcOpY3JpdmV6IMOgIGxhIG1haW4nKSkpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm0/JzAgMThweCAxNHB4JzonMCAyNHB4IDE4cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzVweCc6JzZweCcsb3BhY2l0eTowLjR9fSxjdXQoJzY0JScsMSksY3V0KCczMCUnLDAuNykpKTsNCiAgfQ0KDQogIGxldHRlckNhcmQobSl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICBjb25zdCBsPSh3LHJlZCk9PmVsKCdkaXYnLHtzdHlsZTp7aGVpZ2h0Om0/JzRweCc6JzVweCcsd2lkdGg6dyxiYWNrZ3JvdW5kOnJlZD9SRUQ6JyNkZmUzZWMnLG9wYWNpdHk6cmVkPzAuNzoxfX0pOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE2cHggMTZweCAxOHB4JzonMjRweCAyNnB4IDI2cHgnLGJveFNoYWRvdzonMCAxNnB4IDQwcHggLTIwcHggcmdiYSgxNCwxOSw3OSwwLjM1KScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nN3B4JzonOXB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonZmxleC1zdGFydCcsZ2FwOicxMnB4JyxtYXJnaW5Cb3R0b206bT8nNHB4JzonNnB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic1cHgnfX0sbChtPyc1NHB4JzonNzZweCcpLGwobT8nMzhweCc6JzU0cHgnKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTBweCc6JzExcHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMWVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOkdSRVl9fSwnQ291cnJpZXIgMicpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7aGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6TElORSxtYXJnaW46bT8nMnB4IDAgNnB4JzonNHB4IDAgOHB4J319KSwNCiAgICAgIGwoJzkyJScpLCBsKCc4NiUnKSwgbCgnOTQlJyksIGwobT8nNjIlJzonNzAlJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc4cHgnOicxMXB4JyxwYWRkaW5nOm0/JzhweCAxMHB4JzonMTFweCAxM3B4JyxiYWNrZ3JvdW5kOlJUSU5ULGJvcmRlcjonMXB4IGRhc2hlZCAnK1JFRCxib3JkZXJSYWRpdXM6JzNweCcsZm9udFNpemU6bT8nMTFweCc6JzEycHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnTnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGXCoDogw6AgcmVtcGxpciDDoCBsYSBtYWluJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc4cHgnOicxMXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNnB4JyxhbGlnbkl0ZW1zOidmbGV4LWVuZCd9fSxsKG0/JzQ2cHgnOic2MnB4JyksZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE1cHgnOicxOHB4Jyxjb2xvcjpOQVZZLG9wYWNpdHk6MC41NSx0cmFuc2Zvcm06J3JvdGF0ZSgtNGRlZyknfX0sJ3NpZ25hdHVyZScpKSk7DQogIH0NCg0KICBmYXFMaXN0KG0sZGFyayxsaW1pdCl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nfX0sDQogICAgICAobGltaXQ/RkFRLnNsaWNlKDAsbGltaXQpOkZBUSkubWFwKChmLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrKGRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC4xNiknOkxJTkUpLHBhZGRpbmc6bT8nMTZweCAwJzonMjBweCAwJyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAxLjM1ZnInLGdhcDptPyc3cHgnOiczMnB4JyxhbGlnbkl0ZW1zOidzdGFydCd9fSwNCiAgICAgICAgZWwoJ2gzJyx7c3R5bGU6e21hcmdpbjowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTcuNXB4JzonMTlweCcsbGluZUhlaWdodDoxLjI1LGZvbnRXZWlnaHQ6NTAwLGNvbG9yOmRhcms/JyNmZmZmZmYnOk5BVll9fSxmWzBdKSwNCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjY1LGNvbG9yOmRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC43OCknOklOS319LGZbMV0pKSkpOw0KICB9DQoNCiAgbGVnYWxGb290KG0sZGFyayl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICBjb25zdCBsYz1kYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuNzIpJzpHUkVZLCBkaW09ZGFyaz8ncmdiYSgyNTUsMjU1LDI1NSwwLjUpJzpHUkVZLCBydWxlPWRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC4xNiknOkxJTkU7DQogICAgY29uc3QgbGluaz10PT5lbCgnYScse2tleTp0LGhyZWY6JyMnLHN0eWxlOntmb250U2l6ZTonMTMuNXB4Jyxjb2xvcjpsYyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsbGV0dGVyU3BhY2luZzonLjAxZW0nLGxpbmVIZWlnaHQ6MS41LGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrKGRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC4yOCknOkxJTkUpLHRyYW5zaXRpb246J2NvbG9yIC4xOHMsYm9yZGVyLWNvbG9yIC4xOHMnfSxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1kYXJrPycjZmZmJzpOQVZZO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvcj1kYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuNiknOk5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1sYztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQm90dG9tQ29sb3I9ZGFyaz8ncmdiYSgyNTUsMjU1LDI1NSwwLjI4KSc6TElORTt9fSx0KTsNCiAgICBjb25zdCBsYWJlbD10PT5lbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6Jy4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOmRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC40MiknOicjOWFhMGFhJyxtYXJnaW5Cb3R0b206bT8nMTBweCc6JzEycHgnfX0sdCk7DQogICAgY29uc3QgaWRCbG9jaz1lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMHB4JyxtYXhXaWR0aDonMzMwcHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMHB4J319LGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzE0cHgnLGhlaWdodDonMTRweCcsYm9yZGVyVG9wOicycHggc29saWQgJytSRUQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELGZsZXhTaHJpbms6MH19KSxlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTZweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yZW0nLGNvbG9yOmRhcms/JyNmZmZmZmYnOk5BVll9fSwnQURDRicpKSwNCiAgICAgICk7DQogICAgY29uc3QgbGlua3NCbG9jaz1lbCgnZGl2JyxudWxsLGxhYmVsKCdJbmZvcm1hdGlvbnMnKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOXB4JzonMTBweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSwNCiAgICAgICAgWw0KICAgICAgICAgIGVsKCdhJyx7aHJlZjonaHR0cHM6Ly93d3cuYWRjZi5vcmcvbWVudGlvbnMtbGVnYWxlcy8nLHN0eWxlOntmb250U2l6ZTonMTMuNXB4Jyxjb2xvcjpsYyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsbGV0dGVyU3BhY2luZzonLjAxZW0nLGxpbmVIZWlnaHQ6MS41LGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrKGRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC4yOCknOkxJTkUpfX0sJ01lbnRpb25zIGzDqWdhbGVzJyksDQogICAgICAgICAgZWwoJ2EnLHtocmVmOidodHRwczovL3d3dy5hZGNmLm9yZy9jb25kaXRpb25zLWdlbmVyYWxlcy1kZS12ZW50ZS8nLHN0eWxlOntmb250U2l6ZTonMTMuNXB4Jyxjb2xvcjpsYyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsbGV0dGVyU3BhY2luZzonLjAxZW0nLGxpbmVIZWlnaHQ6MS41LGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrKGRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC4yOCknOkxJTkUpfX0sJ0NvbmRpdGlvbnMgZGUgdmVudGUnKSwNCiAgICAgICAgICBlbCgnYScse2hyZWY6J2h0dHBzOi8vd3d3LmFkY2Yub3JnL3BvbGl0aXF1ZS1kZS1jb25maWRlbnRpYWxpdGUvJyxzdHlsZTp7Zm9udFNpemU6JzEzLjVweCcsY29sb3I6bGMsdGV4dERlY29yYXRpb246J25vbmUnLGxldHRlclNwYWNpbmc6Jy4wMWVtJyxsaW5lSGVpZ2h0OjEuNSxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnKyhkYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuMjgpJzpMSU5FKX19LCdWb3MgZG9ubsOpZXMnKSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTMuNXB4Jyxjb2xvcjpsYyxsZXR0ZXJTcGFjaW5nOicuMDFlbScsbGluZUhlaWdodDoxLjV9fSwnUsOpdHJhY3RhdGlvbicpDQogICAgICAgIF0pKTsNCiAgICBjb25zdCBjb250YWN0QmxvY2s9ZWwoJ2RpdicsbnVsbCxsYWJlbCgnQ29udGFjdCcpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonOHB4J319LA0KICAgICAgICBlbCgnYScse2hyZWY6J21haWx0bzpjb250YWN0QGFkY2Yub3JnJyxzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsY29sb3I6ZGFyaz8nI2ZmZic6TkFWWSx0ZXh0RGVjb3JhdGlvbjonbm9uZScsYm9yZGVyQm90dG9tOicxcHggc29saWQgJysoZGFyaz8ncmdiYSgyNTUsMjU1LDI1NSwwLjM1KSc6TElORSksYWxpZ25TZWxmOidmbGV4LXN0YXJ0J319LCdjb250YWN0QGFkY2Yub3JnJyksDQogICAgICAgICkpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzI2cHgnOiczMnB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5Om0/J2ZsZXgnOidncmlkJyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdyaWRUZW1wbGF0ZUNvbHVtbnM6JzEuMmZyIDFmciAxZnInLGdhcDptPycyNnB4JzonNDBweCd9fSxpZEJsb2NrLGxpbmtzQmxvY2ssY29udGFjdEJsb2NrKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7aGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6cnVsZX19KSwNCiAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOicxMi41cHgnLGxpbmVIZWlnaHQ6MS43LGNvbG9yOmRpbSxtYXhXaWR0aDonNzIwcHgnfX0sJ0plIG5lIHN1aXMgbWFuZGF0w6kgcGFyIGF1Y3VuZSBjYWlzc2UgZGUgcmV0cmFpdGUgZXQgamUgbmUgcmVtcGxhY2UgcGFzIGxhIHbDtHRyZS4gSmUgbmUgdm91cyBkZW1hbmRlcmFpIGphbWFpcyB2b3RyZSByZWxldsOpIHBhciBlLW1haWwgbmkgcGFyIHTDqWzDqXBob25lIDogc2kgcXVlbHF1XHUyMDE5dW4gdm91cyBsZSByw6ljbGFtZSBhdSBub20gZFx1MjAxOUFEQ0YsIGNlIG5cdTIwMTllc3QgcGFzIG1vaS4nKSk7DQogIH0NCg0KICBwb2ludENsZShtKXsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIHJldHVybiBlbCgnZGl2Jyx7a2V5OiduJyxzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyxvdmVyZmxvdzonaGlkZGVuJyxtYXJnaW5Ub3A6bT8nMTZweCc6JzI2cHgnLGJhY2tncm91bmQ6TkFWWSxwYWRkaW5nOm0/JzI2cHggMjJweCAyOHB4JzonNDZweCA1NHB4IDUwcHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScscmlnaHQ6bT8nLTE0cHgnOicyMnB4Jyxib3R0b206bT8nLTQwcHgnOictNTZweCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxNzBweCc6JzI2MHB4JyxsaW5lSGVpZ2h0OjAuOCxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjA1NSknLHBvaW50ZXJFdmVudHM6J25vbmUnfX0sJ1x1MDBiYicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6MCxyaWdodDowLHRvcDowLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOidsaW5lYXItZ3JhZGllbnQoOTBkZWcsJytSRUQrJyAwJSxyZ2JhKDI0NSwzNyw3MywwKSA0MiUpJ319KSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzE1MHB4IDFmcicsZ2FwOm0/JzE0cHgnOic0NHB4JyxhbGlnbkl0ZW1zOidzdGFydCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMTBweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEwLjVweCc6JzExcHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMTZlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI0Y1MjU0OSd9fSwnTGUgcG9pbnQgY2zDqScpLA0KICAgICAgICAgIG0/bnVsbDplbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOiczNHB4JyxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDoncmdiYSgyNTUsMjU1LDI1NSwwLjI4KSd9fSkpLA0KICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIycHgnOiczNHB4JyxsaW5lSGVpZ2h0OjEuMjQsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6JyNhYWIyZWUnLG1heFdpZHRoOiczMGNoJyx0ZXh0V3JhcDoncHJldHR5J319LA0KICAgICAgICAgICdNb24gYW5hbHlzZSBuZSBjaGVyY2hlIHBhcyBzZXVsZW1lbnQgZGVzIGVycmV1cnMuICcsDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Y29sb3I6JyNmZmZmZmYnfX0sJ0VsbGUgY2hlcmNoZSBhdXNzaSBkZXMgZHJvaXRzIHF1aSBuZSBzZSBkw6ljbGVuY2hlbnQgcXVlIHNpIG9uIGxlcyBkZW1hbmRlLicpKSkpOw0KICB9DQoNCiAgZW5nYWdlbWVudChtLGlubmVyKXsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIGNvbnN0IHJvdz0oayx2LGxhc3QpPT5lbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMTI0cHggMWZyJzonMTMycHggMWZyJyxnYXA6bT8nMTJweCc6JzE4cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxwYWRkaW5nOm0/JzExcHggMCc6JzEzcHggMCcsYm9yZGVyVG9wOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE2KScsYm9yZGVyQm90dG9tOmxhc3Q/JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTYpJzonbm9uZSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTFweCc6JzExLjVweCcsZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4xM2VtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYWFiMmVlJ319LGspLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOicjZmZmZmZmJ319LHYpKTsNCiAgICBjb25zdCBjYXJ0ZT1udWxsOw0KICAgIGNvbnN0IGdhdWNoZT1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxOHB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMC41cHgnOicxMXB4Jyxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNGNTI1NDknfX0sJ0xcdTIwMTllbmdhZ2VtZW50JyksDQogICAgICBlbCgnaDInLHtzdHlsZTp7bWFyZ2luOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyczMHB4JzonNDZweCcsbGluZUhlaWdodDoxLjAyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyOGVtJyxjb2xvcjonI2ZmZmZmZicsbWF4V2lkdGg6JzIxY2gnLHRleHRXcmFwOidiYWxhbmNlJ319LCdDZSBxdWkgcmVzdGUgZGFucyBsZSBkb3NzaWVyLCB2b3VzIHBvdXZleiBsXHUyMDE5ZW52b3llci4nKSwNCiAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE1cHgnOicxN3B4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC44KScsbWF4V2lkdGg6JzU0Y2gnfX0sJ0plIHBhc3NlIHZvdHJlIHJlbGV2w6kgYXUgY3JpYmxlLCBhbm7DqWUgcGFyIGFubsOpZSwgc2FucyBlbiBzYXV0ZXIgdW5lLiBQdWlzIGpcdTIwMTnDqWNhcnRlIHRvdXQgY2UgcXVpIG5lIHNlIGTDqWZlbmQgcGFzIGRldmFudCB1bmUgY2Fpc3NlLiBDZSBxdWkgcmVzdGUgZGFucyB2b3RyZSBkb3NzaWVyIGVzdCBjaGlmZnLDqSwgZGF0w6ksIGV0IHZvdXMgcG91dmV6IGxlIHBvc3RlciB0ZWwgcXVlbC4nKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzZweCc6JzEwcHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbid9fSwNCiAgICAgICAgcm93KCfDiWNyaXQgw6AgbGEgbWFpbicsJ0Rvc3NpZXIgcGFyIGRvc3NpZXIuJyksDQogICAgICAgIHJvdygnw4ljYXJ0w6knLCdVbiBzdWpldCBxdWkgbmUgdGllbnQgcGFzIGVzdCByZXRpcsOpLCBwYXMgZW52b3nDqSBxdWFuZCBtw6ptZS4nKSwNCiAgICAgICAgcm93KCdEw6lsYWknLCdTb3VzICcrdGhpcy5kZWxhaSgpKycuJyx0cnVlKSkpOw0KICAgIHJldHVybiBlbCgnc2VjdGlvbicse3N0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLG92ZXJmbG93OidoaWRkZW4nLGJhY2tncm91bmQ6TkFWWSxib3JkZXJUb3A6JzJweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzQ0cHggMCA0NnB4JzonNzhweCAwIDgwcHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDonLTEwJScsdG9wOictNDAlJyx3aWR0aDonNzAlJyxoZWlnaHQ6JzE4MCUnLGJhY2tncm91bmQ6J3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzAlIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMDcpLHJnYmEoMjU1LDI1NSwyNTUsMCkgNjIlKScscG9pbnRlckV2ZW50czonbm9uZSd9fSksDQogICAgICBpbm5lcihlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidyZWxhdGl2ZScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyNnB4JzonNTZweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonZmxleC1zdGFydCd9fSxnYXVjaGUsY2FydGUpKSk7DQogIH0NCg0KICBzdGlja3lCYXIobSl7DQogICAgaWYoIW0pIHJldHVybiBudWxsOw0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQ7DQogICAgdmFyIHZpcz0hIXRoaXMuc3RhdGUuYmFycmVWaXNpYmxlOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7J2RhdGEtc3RpY2t5JzonMScsc3R5bGU6e3Bvc2l0aW9uOidzdGlja3knLGJvdHRvbTowLHpJbmRleDozMCxiYWNrZ3JvdW5kOidyZ2JhKDI1NSwyNTUsMjU1LDAuOTQpJyxiYWNrZHJvcEZpbHRlcjonYmx1cigxMHB4KScsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6JzEwcHggMTZweCAyMnB4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidzdHJldGNoJyxnYXA6JzEwcHgnLGJveFNoYWRvdzonMCAtMTBweCAzMHB4IC0xOHB4IHJnYmEoMTQsMTksNzksMC40NSknLG9wYWNpdHk6dmlzPzE6MCx0cmFuc2Zvcm06dmlzPyd0cmFuc2xhdGVZKDApJzondHJhbnNsYXRlWSgxMTAlKScscG9pbnRlckV2ZW50czp2aXM/J2F1dG8nOidub25lJyx0cmFuc2l0aW9uOidvcGFjaXR5IC4yMnMgZWFzZSwgdHJhbnNmb3JtIC4yMnMgZWFzZSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OjAscmlnaHQ6MCx0b3A6MCxoZWlnaHQ6JzNweCcsYmFja2dyb3VuZDonI2U5ZWNmMyd9fSxlbCgnZGl2Jyx7J2RhdGEtcHJvZyc6JzEnLHN0eWxlOntoZWlnaHQ6JzEwMCUnLHdpZHRoOicwJScsYmFja2dyb3VuZDpSRUR9fSkpLA0KICAgICAgZWwoJ2EnLHsnZGF0YS1iYXItZnJlZSc6JzEnLGhyZWY6JyNkaWFnJyxvbkNsaWNrOmU9PntpZihlJiZlLnByZXZlbnREZWZhdWx0KWUucHJldmVudERlZmF1bHQoKTt0cnl7dHJhY2soJ2N0YV9jbGljaycse2Rlc3Q6J3ByZWFuYWx5c2UnLGVtcGxhY2VtZW50OidiYXJyZV9jb2xsYW50ZSd9KTt9Y2F0Y2goXyl7fSB2YXIgX3N0PSh3aW5kb3cuX19hZGNmTGVjdHVyZSYmd2luZG93Ll9fYWRjZkxlY3R1cmUuc3RhdGUpfHx7fTsgaWYoX3N0LmRpYWc9PT0ncmVzdWx0YXQnKXsgdHJ5e3dpbmRvdy5fX2FkY2ZMZWN0dXJlLnNjcm9sbFRvRGlhZygpO31jYXRjaChfKXt9IHZhciBfaW5wPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhZGNmLWxlY3R1cmUgaW5wdXRbdHlwZT0iZW1haWwiXScpOyBpZihfaW5wKXt0cnl7X2lucC5mb2N1cygpO31jYXRjaChfKXt9fSByZXR1cm47IH0gdHJ5eyB3aW5kb3cuX19hZGNmTGVjdHVyZS5vdXZyaXJHdWlkZSgnY2hvaXgnKTsgfWNhdGNoKF8peyB0aGlzLnNjcm9sbFRvRGlhZyhlKTsgfX0sc3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLHRleHREZWNvcmF0aW9uOidub25lJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsZ2FwOicxcHgnLGJvcmRlcjonMnB4IHNvbGlkICcrTkFWWSxiYWNrZ3JvdW5kOicjZmZmZmZmJyxoZWlnaHQ6JzU0cHgnLHBhZGRpbmc6JzAgOHB4J319LA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTQuNXB4Jyxmb250V2VpZ2h0OjcwMCxsaW5lSGVpZ2h0OjEuMTUsY29sb3I6TkFWWSx0ZXh0QWxpZ246J2NlbnRlcid9fSwnUHLDqS1hbmFseXNlJyksDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMXB4JyxsaW5lSGVpZ2h0OjEuMixjb2xvcjpHUkVZfX0sJ2dyYXR1aXRlJykpLA0KICAgICAgZWwoJ2EnLHsnZGF0YS1iYXItYnV5JzonMScsaHJlZjpTVFJJUEU9PT0nIyc/JyNkaWFnJzpTVFJJUEUsb25DbGljazplPT57dHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0OlNUUklQRT09PScjJz8ncHJlYW5hbHlzZSc6J3N0cmlwZScsZW1wbGFjZW1lbnQ6J2JhcnJlX2NvbGxhbnRlJ30pO31jYXRjaChfKXt9IGlmKFNUUklQRT09PScjJyl7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHRoaXMuc2Nyb2xsVG9EaWFnKGUpO319LHN0eWxlOntmbGV4OicxLjI1IDEgMCcsbWluV2lkdGg6MCx0ZXh0RGVjb3JhdGlvbjonbm9uZScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGdhcDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxoZWlnaHQ6JzU0cHgnLHBhZGRpbmc6JzAgOHB4Jyxib3hTaGFkb3c6JzAgMTJweCAyOHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNSknfX0sDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxNC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxpbmVIZWlnaHQ6MS4xNSxjb2xvcjonI2ZmZmZmZicsdGV4dEFsaWduOidjZW50ZXInfX0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlJyksDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMXB4JyxsaW5lSGVpZ2h0OjEuMixjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjg1KSd9fSx0aGlzLnByaWNlKCkpKSk7DQogIH0NCg0KICBtaW5pKGtpbmQsdyl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudCwgaz13LzIxMCwgbW09dj0+Kyh2KmspLnRvRml4ZWQoMikrJ3B4JywgaD13KjEuNDE0Ow0KICAgIGNvbnN0IGZzPXY9Pk1hdGgubWF4KDYsKyh2KmsqMS41KS50b0ZpeGVkKDIpKSsncHgnOw0KICAgIGNvbnN0IGxibD10eHQ9PmVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6ZnMoMi4zKSxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyM4YjkwYTAnfX0sdHh0KTsNCiAgICBjb25zdCBib2R5PXR4dD0+ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTpmcygyLjkpLGxpbmVIZWlnaHQ6MS41LGNvbG9yOklOSyx0ZXh0V3JhcDoncHJldHR5J319LHR4dCk7DQogICAgbGV0IGNvcmU7DQogICAgaWYoa2luZD09PTApIGNvcmU9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgzKX19LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm1tKDMpfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTpmcyg5KSxsaW5lSGVpZ2h0OjAuOSxjb2xvcjpOQVZZfX0sJzE5OTYnKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTpmcygyLjYpLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMWVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYzQxNzNhJ319LCcyIHRyaW1lc3RyZXMgc3VyIDQnKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDEuMil9fSxsYmwoJ0xlIGNvbnN0YXQnKSxib2R5KCdWb3RyZSByZWxldsOpIG5lIGNvbXB0ZSBxdWUgZGV1eCB0cmltZXN0cmVzIHBvdXIgMTk5NiwgYWxvcnMgcXVlIHZvcyBidWxsZXRpbnMgY291dnJlbnQgbFx1MjAxOWFubsOpZSBlbnRpw6hyZS4nKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDEuMil9fSxsYmwoJ0NlIHF1aSBwZXV0IGxcdTIwMTlleHBsaXF1ZXInKSxib2R5KCdVbiBlbXBsb3lldXIgYXlhbnQgZMOpY2xhcsOpIHRhcmRpdmVtZW50LCBvdSB1bmUgbWlzc2lvbiBkXHUyMDE5aW50w6lyaW0gcmF0dGFjaMOpZSBhdSBtYXV2YWlzIHLDqWdpbWUuJykpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm1tKDMpLGJhY2tncm91bmQ6UlRJTlQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDEuMil9fSxsYmwoJ0xlIGdlc3RlIMOgIGZhaXJlJyksYm9keSgnSm9pbmRyZSB2b3MgYnVsbGV0aW5zIGRlIDE5OTYgYXUgY291cnJpZXIgMiwgZW4gcmVjb21tYW5kw6kuJykpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgxLjIpfX0sbGJsKCdOb3RyZSBzb3VyY2UnKSxib2R5KCdMZSB0ZXh0ZSBhcHBsaXF1w6ksIHJlcHJvZHVpdCBlbiBlbnRpZXIgZGFucyBsXHUyMDE5YW5uZXhlLCBwYWdlIDI0LicpKSk7DQogICAgZWxzZSBpZihraW5kPT09MSkgY29yZT1lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDMuNCl9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMS40KX19LGxibCgnVm9zIHRyaW1lc3RyZXMgYWNxdWlzJyksdGhpcy5jdXJ2ZSh3LXcqMC4xOCxoKjAuMjYsZmFsc2UpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMS42KX19LA0KICAgICAgICBbWycxOTk2JywnMiB0cmltLicsJ8OgIHbDqXJpZmllciddLFsnMTk5OCcsJzIgdHJpbS4nLCfDoCB2w6lyaWZpZXInXSxbJzIwMDEnLCcwIHRyaW0uJywnw6AgdsOpcmlmaWVyJ10sWycyMDAzJywnNCB0cmltLicsJ2NvbmZvcm1lJ11dLm1hcCgocixpKT0+DQogICAgICAgICAgZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOicxZnIgMWZyIDFmcicsZ2FwOm1tKDIpLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm1tKDEuNCksZm9udFNpemU6ZnMoMi43KSxjb2xvcjppPT09Mz9JTks6JyNjNDE3M2EnfX0sDQogICAgICAgICAgICBlbCgnc3BhbicsbnVsbCxyWzBdKSxlbCgnc3BhbicsbnVsbCxyWzFdKSxlbCgnc3Bhbicse3N0eWxlOnt0ZXh0QWxpZ246J3JpZ2h0J319LHJbMl0pKSkpKTsNCiAgICBlbHNlIGNvcmU9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgzKX19LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnthbGlnblNlbGY6J2ZsZXgtZW5kJyx0ZXh0QWxpZ246J3JpZ2h0Jyxmb250U2l6ZTpmcygyLjcpLGxpbmVIZWlnaHQ6MS41LGNvbG9yOklOS319LCdDYWlzc2UgcsOpZ2lvbmFsZScsZWwoJ2JyJyksJ1NlcnZpY2UgcsOpZ3VsYXJpc2F0aW9uJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOmZzKDIuOSksZm9udFdlaWdodDo3MDAsY29sb3I6TkFWWX19LCdPYmpldFx1MDBhMDogcsOpZ3VsYXJpc2F0aW9uIGRlIGxcdTIwMTlhbm7DqWUgMTk5NicpLA0KICAgICAgYm9keSgnTWFkYW1lLCBNb25zaWV1ciwnKSwNCiAgICAgIGJvZHkoJ0plIHZvdXMgcHJpZSBkZSBiaWVuIHZvdWxvaXIgcHJvY8OpZGVyIMOgIGxhIHLDqWd1bGFyaXNhdGlvbiBkZSBtb24gcmVsZXbDqSBkZSBjYXJyacOocmUgcG91ciBsXHUyMDE5YW5uw6llIDE5OTYsIHBvdXIgbGFxdWVsbGUgZGV1eCB0cmltZXN0cmVzIHNldWxlbWVudCBzb250IGluc2NyaXRzLicpLA0KICAgICAgYm9keSgnVm91cyB0cm91dmVyZXogY2ktam9pbnQgbGEgY29waWUgZGUgbWVzIGJ1bGxldGlucyBkZSBzYWxhaXJlIGNvdXZyYW50IGxhIHDDqXJpb2RlLicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm1tKDMpLGJhY2tncm91bmQ6UlRJTlQsYm9yZGVyOicxcHggZGFzaGVkICcrUkVELGZvbnRTaXplOmZzKDIuNiksY29sb3I6TkFWWX19LCdOwrAgZGUgc8OpY3VyaXTDqSBzb2NpYWxlXHUwMGEwOiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bW0oMiksYWxpZ25TZWxmOidmbGV4LWVuZCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTpmcyg1KSxjb2xvcjpOQVZZLG9wYWNpdHk6MC41LHRyYW5zZm9ybToncm90YXRlKC00ZGVnKSd9fSwnc2lnbmF0dXJlJykpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidyZWxhdGl2ZScsd2lkdGg6dysncHgnLGhlaWdodDpoKydweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJveFNoYWRvdzonMCAyMnB4IDUwcHggLTI2cHggcmdiYSgxNCwxOSw3OSwwLjQ1KScsYm94U2l6aW5nOidib3JkZXItYm94JyxwYWRkaW5nOm1tKDExKSsnICcrbW0oMTMpLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDQpLG92ZXJmbG93OidoaWRkZW4nfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm1tKDQpLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nQm90dG9tOm1tKDIuNSl9fSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6ZnMoMi40KSxjb2xvcjpHUkVZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSwnRG9zc2llciBkXHUyMDE5YW5hbHlzZScpLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTpmcygyLjQpLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMWVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOkdSRVksd2hpdGVTcGFjZTonbm93cmFwJ319LGtpbmQ9PT0wPydTdWpldCAxIC8gMTMnOmtpbmQ9PT0xPydBbm7DqWUgcGFyIGFubsOpZSc6J0NvdXJyaWVyIDIgLyA0JykpLA0KICAgICAgY29yZSk7DQogIH0NCg0KICBwYWdlQShtKXsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIGNvbnN0IGlubmVyPWM9PmVsKCdkaXYnLHtzdHlsZTp7bWF4V2lkdGg6bT8nbm9uZSc6JzEwNjBweCcsbWFyZ2luOicwIGF1dG8nLHBhZGRpbmc6bT8nMCAyNHB4JzonMCA2MHB4J319LGMpOw0KICAgIGNvbnN0IHNlY3Q9KGJnLGNoaWxkcmVuLGV4dHJhKT0+ZWwoJ3NlY3Rpb24nLHtzdHlsZTpPYmplY3QuYXNzaWduKHtwYWRkaW5nOm0/JzQ4cHggMCc6Jzg0cHggMCcsYmFja2dyb3VuZDpiZ3x8J3RyYW5zcGFyZW50J30sZXh0cmF8fHt9KX0saW5uZXIoY2hpbGRyZW4pKTsNCiAgICBjb25zdCBjb2w9KGdhcCxraWRzKT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDpnYXB9fSxraWRzKTsNCiAgICBjb25zdCBoMj0odHh0LGRhcmsscik9PmVsKCdoMicse3N0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/KHI/JzM0cHgnOicyNnB4Jyk6KHI/JzYycHgnOiczOHB4JyksbGluZUhlaWdodDoxLjAyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNmVtJyxjb2xvcjpkYXJrPycjZmZmZmZmJzpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LHR4dCk7DQogICAgY29uc3QgcD0odHh0LGRhcmspPT5lbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxNnB4JzonMTcuNXB4JyxsaW5lSGVpZ2h0OjEuNjgsY29sb3I6ZGFyaz8ncmdiYSgyNTUsMjU1LDI1NSwwLjgyKSc6SU5LLG1heFdpZHRoOic2MGNoJyx0ZXh0V3JhcDoncHJldHR5J319LHR4dCk7DQogICAgY29uc3QgcnVsZVJvdz0oa2lkcyk9PmVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMTdweCAwJzonMjJweCAwJyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzI4cHggMWZyJzonNDZweCAxZnIgMS4yZnInLGdhcDptPycwIDEycHgnOicwIDMwcHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LGtpZHMpOw0KDQogICAgY29uc3QgTkFWTElOS1M9W1snTGUgZG9zc2llcicsJ3JlY29pcyddLFsnTGUgcHJpeCcsJ29mZnJlJ10sWydRdWVzdGlvbnMnLCdxdWVzdGlvbnMnXV07DQogICAgY29uc3QgdmVuZGFibGU9KFNUUklQRSAmJiBTVFJJUEUhPT0nIycgJiYgIS9SRU1QTEFDRVIvLnRlc3QoU1RSSVBFKSk7DQogICAgY29uc3QgYmFyPWVsKCdkaXYnLHsnZGF0YS1iYXInOicxJyxzdHlsZTp7cG9zaXRpb246bT8nc3RhdGljJzonc3RpY2t5Jyx0b3A6bT8nYXV0byc6MCx6SW5kZXg6MjAsYmFja2dyb3VuZDonIzA4MGMyYycsYm9yZGVyQm90dG9tOicycHggc29saWQgJytSRUQscGFkZGluZ1RvcDowfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21heFdpZHRoOm0/J25vbmUnOicxMTAwcHgnLG1hcmdpbjonMCBhdXRvJyxwYWRkaW5nOm0/JzEycHggMThweCc6JzAgNDBweCcsaGVpZ2h0Om0/J2F1dG8nOic3MHB4JyxtaW5XaWR0aDowLG1heFdpZHRoOicxMDAlJyxib3hTaXppbmc6J2JvcmRlci1ib3gnLGRpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOidub3dyYXAnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDptPycxNHB4JzonMjRweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTBweCcsbWluV2lkdGg6MCxmbGV4U2hyaW5rOjB9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOicxMnB4JyxoZWlnaHQ6JzEycHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrUkVELGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnK1JFRCxmbGV4U2hyaW5rOjB9fSksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyxjb2xvcjonI2ZmZmZmZid9fSwnQURDRicpLA0KICAgICAgICAgIG0/bnVsbDplbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOicxNS41cHgnLGNvbG9yOicjYWFiMmVlJyxwYWRkaW5nTGVmdDonMTZweCcsbWFyZ2luTGVmdDonNnB4Jyxib3JkZXJMZWZ0OicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0sJ0JpbGFuIHJldHJhaXRlJykpLA0KICAgICAgICBlbCgnbmF2Jyx7c3R5bGU6bT97ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonZmxleC1lbmQnLGdhcDonMTZweCcsb3ZlcmZsb3dYOidhdXRvJyxXZWJraXRPdmVyZmxvd1Njcm9sbGluZzondG91Y2gnLHNjcm9sbGJhcldpZHRoOidub25lJ306e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicyMHB4JyxmbGV4U2hyaW5rOjB9fSwNCiAgICAgICAgICBOQVZMSU5LUy5tYXAoZnVuY3Rpb24oeCxpMil7IHJldHVybiBlbCgnYScse2tleTppMixocmVmOicjJyt4WzFdLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7IGlmKGUmJmUucHJldmVudERlZmF1bHQpZS5wcmV2ZW50RGVmYXVsdCgpOyB0cnl7IHRyYWNrKCduYXZfY2xpY2snLHtjaWJsZTp4WzFdfSk7IH1jYXRjaChfKXt9DQogICAgICAgICAgICAgIHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5hdj0iJyt4WzFdKyciXScpOyBpZih0KSB0LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJyxibG9jazonc3RhcnQnfSk7IH0sDQogICAgICAgICAgICBvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7IGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj0nI2ZmZmZmZic7IGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvcj1SRUQ7IH0sDQogICAgICAgICAgICBvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oZSl7IGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj0nI2FhYjJlZSc7IGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvcj0ndHJhbnNwYXJlbnQnOyB9LA0KICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKGUpeyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9JyNmZmZmZmYnOyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQm90dG9tQ29sb3I9UkVEOyB9LA0KICAgICAgICAgICAgb25Ub3VjaEVuZDpmdW5jdGlvbihlKXsgdmFyIHQ9ZS5jdXJyZW50VGFyZ2V0OyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHQuc3R5bGUuY29sb3I9JyNhYWIyZWUnOyB0LnN0eWxlLmJvcmRlckJvdHRvbUNvbG9yPSd0cmFuc3BhcmVudCc7IH0sMjYwKTsgfSwNCiAgICAgICAgICAgIG9uVG91Y2hDYW5jZWw6ZnVuY3Rpb24oZSl7IGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj0nI2FhYjJlZSc7IGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvcj0ndHJhbnNwYXJlbnQnOyB9LA0KICAgICAgICAgICAgc3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOicjYWFiMmVlJyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsd2hpdGVTcGFjZTonbm93cmFwJyxjdXJzb3I6J3BvaW50ZXInLHBhZGRpbmdCb3R0b206JzNweCcsYm9yZGVyQm90dG9tOicycHggc29saWQgdHJhbnNwYXJlbnQnLHRyYW5zaXRpb246J2NvbG9yIC4xOHMgZWFzZSwgYm9yZGVyLWNvbG9yIC4xOHMgZWFzZSd9fSx4WzBdKTsgfSkpLA0KICAgICAgICBtP251bGw6ZWwoJ2EnLHtocmVmOnZlbmRhYmxlP1NUUklQRTonI29mZnJlJyxvbkNsaWNrOmU9Pnt0cnl7dHJhY2soJ2N0YV9jbGljaycse2Rlc3Q6dmVuZGFibGU/J3N0cmlwZSc6J29mZnJlJyxlbXBsYWNlbWVudDonYmFycmVfaGF1dCd9KTt9Y2F0Y2goXyl7fSBpZighdmVuZGFibGUpeyBpZihlJiZlLnByZXZlbnREZWZhdWx0KWUucHJldmVudERlZmF1bHQoKTsgdGhpcy50b09mZnJlKGUpOyB9fSxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO30sc3R5bGU6e2ZsZXhTaHJpbms6MCx0ZXh0RGVjb3JhdGlvbjonbm9uZScsZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOic5cHgnLGJhY2tncm91bmQ6UkVELGhlaWdodDonNDZweCcscGFkZGluZzonMCAyMHB4Jyx3aGl0ZVNwYWNlOidub3dyYXAnLGJveFNoYWRvdzonMCAxMHB4IDI0cHggLTEycHggcmdiYSgyNDUsMzcsNzMsMC41NSknLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzE1cHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOicjZmZmZmZmJ319LCdPYnRlbmlyIG1vbiBiaWxhbiByZXRyYWl0ZScpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMy41cHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOidyZ2JhKDI1NSwyNTUsMjU1LDAuODIpJyxwYWRkaW5nTGVmdDonOXB4Jyxib3JkZXJMZWZ0OicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjM1KSd9fSx0aGlzLnByaWNlKCkpKSkpOw0KDQogICAgY29uc3QgbGlnbmVMZW9uYXJkPWVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzE0cHgnOicyMHB4JyxwYWRkaW5nVG9wOm0/JzE0cHgnOicxOHB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMiknLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOm0/JzEycHgnOicxNHB4J319LA0KICAgICAgKFBIT1RPDQogICAgICAgID8gZWwoJ2ltZycse3NyYzpQSE9UTyxhbHQ6dGhpcy5mb3VuZGVyKCksc3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonNTJweCcsaGVpZ2h0Oic1MnB4Jyxib3JkZXJSYWRpdXM6JzUwJScsb2JqZWN0Rml0Oidjb3ZlcicsZGlzcGxheTonYmxvY2snfX0pDQogICAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzUycHgnLGhlaWdodDonNTJweCcsYm9yZGVyUmFkaXVzOic1MCUnLGJhY2tncm91bmQ6J3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknLGJvcmRlcjonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zKSd9fSkpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOicjYWFiMmVlJ319LA0KICAgICAgICAnQW5hbHlzw6ksIHbDqXJpZmnDqSBldCByw6lkaWfDqSBwYXIgJyxlbCgnc3Ryb25nJyx7c3R5bGU6e2NvbG9yOicjZmZmZmZmJyxmb250V2VpZ2h0OjYwMH19LHRoaXMuZm91bmRlcigpKSkpOw0KDQogICAgLy8gSHVpdCByw6lzdWx0YXRzLCB2ZXJiZSBlbiB0w6p0ZSwgdW5lIGxpZ25lIGNoYWN1bi4gUmllbiBlbiBzZXJpZiBpY2kgOiBsZSB0aXRyZQ0KICAgIC8vIGRvaXQgcmVzdGVyIGxlIHNldWwgZGlzcGxheSBkZSBsJ8OpY3Jhbi4NCiAgICBjb25zdCBTQVZPSVI9Ww0KICAgICAgJ0NlIHF1ZSB2b3RyZSByZWxldsOpIGNvbXB0ZSB2cmFpbWVudCwgYW5uw6llIHBhciBhbm7DqWUnLA0KICAgICAgJ0xlcyBhbm7DqWVzIHF1aSBtYW5xdWVudCwgZXQgY2UgcXVpIHBldXQgbFx1MjAxOWV4cGxpcXVlcicsDQogICAgICAnQ2UgcXVlIGNoYXF1ZSBjb3JyZWN0aW9uIGFqb3V0ZXJhaXQsIHNpIHZvdHJlIGNhaXNzZSBsYSByZXRpZW50JywNCiAgICAgICfDgCBxdWVsbGUgZGF0ZSB2b3VzIHBvdXJyaWV6IHBhcnRpciwgZXQgY2UgcXVlIDYgbW9pcyBkZSBwbHVzIGNoYW5nZXJhaWVudCcsDQogICAgICAnU2kgdm90cmUgY2FycmnDqHJlIGVudHJlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZFx1MjAxOXVuIGTDqXBhcnQgYW50aWNpcMOpJywNCiAgICAgICdTaSByYWNoZXRlciBkZXMgdHJpbWVzdHJlcyBhIHVuIGludMOpcsOqdCBjaGV6IHZvdXMnLA0KICAgICAgJ0NlIHF1ZSB2b3RyZSByZXRyYWl0ZSBwb3VycmFpdCBvdXZyaXIgw6Agdm90cmUgY29uam9pbnQsIGV0IHNvdXMgcXVlbGxlcyBjb25kaXRpb25zJywNCiAgICAgICdMZXMgY291cnJpZXJzIGTDqWrDoCDDqWNyaXRzLCDDoCBzaWduZXIgZXQgw6AgcG9zdGVyJw0KICAgIF07DQogICAgLy8gMyBiw6luw6lmaWNlcyBjb3VydHMgc2V1bGVtZW50IDogbGVzIDggZMOpdGFpbGzDqXMgdml2ZW50IGRhbnMgbGEgc2VjdGlvbiBkdSBiaWxhbi4NCiAgICAvLyBIZXJvIDogbGUgcHJpeCBhcHBhcnRpZW50IMOgIGxhIGNvbG9ubmUgZHUgYmlsYW4sIGphbWFpcyDDoCBjZWxsZSBkdSBncmF0dWl0Lg0KICAgIGNvbnN0IGNvbG9ubmVBcmd1bWVudD1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA1MiUnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMXB4JzonMTEuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjJlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2FhYjJlZSd9fSwnQmlsYW4gcmV0cmFpdGUgcGVyc29ubmFsaXPDqScpLA0KICAgICAgZWwoJ2gxJyx7c3R5bGU6e21hcmdpbjptPycxMnB4IDAgMCc6JzE2cHggMCAwJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzM0cHgnOic1MnB4JyxsaW5lSGVpZ2h0Om0/MS4wODoxLjA0LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6bT8nLTAuMDI2ZW0nOictMC4wM2VtJyxjb2xvcjonI2ZmZmZmZid9fSwnUXVhbmQgcGFydGlyLCBhdmVjIHF1ZWxsZSBwZW5zaW9uIGV0IHF1ZWxsZXMgZMOpbWFyY2hlc1x1MDBhMD8nKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzU0cHgnLGhlaWdodDonMnB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Ub3A6bT8nMTRweCc6JzIwcHgnfX0pLA0KICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzE0cHggMCAwJzonMjBweCAwIDAnLGZvbnRTaXplOm0/JzE4cHgnOicxOHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6JyNkZmUzZmInLG1heFdpZHRoOic0NGNoJ319LCdVbiBiaWxhbiDDqWNyaXQgcG91ciB2w6lyaWZpZXIgdm90cmUgY2FycmnDqHJlLCBjb21wYXJlciB2b3MgZGF0ZXMgZGUgZMOpcGFydCBldCB2b3MgbW9udGFudHMgZXN0aW3DqXMsIGV0IHByw6lwYXJlciB2b3MgZMOpbWFyY2hlcyBhdXByw6hzIGRlcyBjYWlzc2VzLicpLA0KICAgICAgbGlnbmVMZW9uYXJkLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTZweCc6JzIwcHgnLHBhZGRpbmdUb3A6bT8nMTZweCc6JzE4cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4V3JhcDond3JhcCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonNHB4IDlweCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxOHB4JzonMThweCcsZm9udFdlaWdodDo2MDAsY29sb3I6JyNjN2NkZjInfX0sJ0JpbGFuIGNvbXBsZXRcdTAwYTA6JyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMXB4JzonMjJweCcsbGluZUhlaWdodDoxLjIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6JyNmZmZmZmYnfX0sJzI0OSDigqwgVFRDJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGxpbmVIZWlnaHQ6MS40NSxjb2xvcjonI2FhYjJlZSd9fSwnUGFpZW1lbnQgdW5pcXVlIMK3IFJlbWlzIHNvdXMgJyt0aGlzLmRlbGFpKCkpLA0KICAgICAgICBlbCgnYScse2hyZWY6JyNyZWNvaXMnLG9uQ2xpY2s6ZT0+eyBpZihlJiZlLnByZXZlbnREZWZhdWx0KWUucHJldmVudERlZmF1bHQoKTsgdHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidiZW5lZmljZXMnLGVtcGxhY2VtZW50OidoZXJvX3NlY29uZGFpcmUnfSk7fWNhdGNoKF8pe30NCiAgICAgICAgICAgIHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5hdj0icmVjb2lzIl0nKTsgaWYodCkgdC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsYmxvY2s6J3N0YXJ0J30pOyB9LA0KICAgICAgICAgIG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPScjZmZmZmZmJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQm90dG9tQ29sb3I9JyNmZmZmZmYnO30sDQogICAgICAgICAgb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9JyNhYWIyZWUnO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJCb3R0b21Db2xvcj0ncmdiYSgxNzAsMTc4LDIzOCwwLjUpJzt9LA0KICAgICAgICAgIHN0eWxlOnttYXJnaW5Ub3A6JzJweCcsZm9udFNpemU6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOicjYWFiMmVlJyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxwYWRkaW5nQm90dG9tOicycHgnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkIHJnYmEoMTcwLDE3OCwyMzgsMC41KScsdHJhbnNpdGlvbjonY29sb3IgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlJ319LCdEw6ljb3V2cmlyIGxlIGJpbGFuIGNvbXBsZXQnKSkpOw0KDQogICAgLy8gR3JvdXBlIHZvbG9udGFpcmVtZW50IHBhdXZyZSA6IGF1Y3VuIHByaXgsIGF1Y3VuIGTDqWxhaSwgYXVjdW4gZm9ybXVsYWlyZS4NCiAgICBjb25zdCBjb2xvbm5lQWN0aW9uPWVsKCdkaXYnLHtzdHlsZTp7ZmxleDptPydub25lJzonMCAwIDQwJScsbWluV2lkdGg6MCxtYXJnaW5Ub3A6bT8nMzJweCc6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMnB4JzonMTRweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTFweCc6JzExLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNmZjgwOTUnfX0sJ1BvdXIgY29tbWVuY2VyIGdyYXR1aXRlbWVudCcpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxOHB4JzonMThweCcsbGluZUhlaWdodDoxLjUsY29sb3I6JyNkZmUzZmInLG1heFdpZHRoOic0MGNoJ319LCdVbmUgcHJlbWnDqHJlIGxlY3R1cmUgYXV0b21hdGlxdWUgcG91ciByZXDDqXJlciBsZXMgcG9pbnRzIMOgIHbDqXJpZmllciBkYW5zIHZvdHJlIHJlbGV2w6kuJyksDQogICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+eyB0cnl7dHJhY2soJ2N0YV9jbGljaycse2Rlc3Q6J2d1aWRlJyxlbXBsYWNlbWVudDonaGVybyd9KTt9Y2F0Y2goXyl7fSB0cnl7IHdpbmRvdy5fX2FkY2ZMZWN0dXJlLm91dnJpckd1aWRlKCdjaG9peCcpOyB9Y2F0Y2goXyl7fSB9LA0KICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSwNCiAgICAgICAgb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9LA0KICAgICAgICBvblRvdWNoU3RhcnQ6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7fSwNCiAgICAgICAgb25Ub3VjaEVuZDplPT57dmFyIHQ9ZS5jdXJyZW50VGFyZ2V0OyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdHlsZS5maWx0ZXI9J25vbmUnO30sMjIwKTt9LA0KICAgICAgICBzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnLHdpZHRoOicxMDAlJyxtaW5IZWlnaHQ6bT8nNThweCc6JzYycHgnLHBhZGRpbmc6bT8nMTRweCAyMHB4JzonMTRweCAyNnB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTdweCc6JzE4cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLGxpbmVIZWlnaHQ6MS4yNSxib3hTaGFkb3c6JzAgMTZweCAzNHB4IC0xNnB4IHJnYmEoMjQ1LDM3LDczLDAuNjIpJ319LCdMYW5jZXIgbWEgcHLDqS1hbmFseXNlIGdyYXR1aXRlJykpOw0KDQogICAgY29uc3QgaGVybz1lbCgnaGVhZGVyJyx7J2RhdGEtZm9sZCc6JzEnLHN0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLG92ZXJmbG93OidoaWRkZW4nLGJhY2tncm91bmQ6TkFWWSxiYWNrZ3JvdW5kSW1hZ2U6J3JhZGlhbC1ncmFkaWVudCgxMjAlIDkwJSBhdCAxOCUgMCUsICMxYjI0NzggMCUsIHJnYmEoMjcsMzYsMTIwLDApIDU4JSksIHJhZGlhbC1ncmFkaWVudCg5MCUgNzAlIGF0IDEwMCUgMTAwJSwgIzA3MGEyNiAwJSwgcmdiYSg3LDEwLDM4LDApIDYyJSknLHBhZGRpbmc6bT8nMjRweCAwIDMwcHgnOic0OHB4IDAgNjBweCd9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyNnB4JzonNyUnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2ZsZXgtc3RhcnQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICBjb2xvbm5lQXJndW1lbnQsDQogICAgICAgIGNvbG9ubmVBY3Rpb24pKSk7DQoNCiAgICAvLyBNaW5pYXR1cmVzIGRlcyBwYWdlcyByw6llbGxlcyBkdSBkb3NzaWVyIDogbcOqbWVzIHByb3BvcnRpb25zLCBtw6ptZSBjaGFydGUsDQogICAgLy8gY29udGVudXMgcmVwcmlzIGRlcyBnYWJhcml0cyBkJ2ltcHJlc3Npb24uDQogICAgY29uc3QgbUZldWlsbGU9KGtpZHMpPT5lbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOicxMDAlJyxhc3BlY3RSYXRpbzonMjEwIC8gMjk3JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxwYWRkaW5nOm0/JzhweCA3cHggN3B4JzonMTJweCAxMXB4IDEwcHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsY29sb3I6TkFWWSxib3hTaXppbmc6J2JvcmRlci1ib3gnLG92ZXJmbG93OidoaWRkZW4nfX0sa2lkcyk7DQogICAgY29uc3QgbVRldGU9KGRyb2l0ZSk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzZweCcsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdCb3R0b206bT8nM3B4JzonNHB4Jyxmb250U2l6ZTptPyczLjhweCc6JzUuMnB4Jyxjb2xvcjpHUkVZfX0sDQogICAgICBlbCgnc3Bhbicse3N0eWxlOnt3aGl0ZVNwYWNlOidub3dyYXAnLG92ZXJmbG93OidoaWRkZW4nLHRleHRPdmVyZmxvdzonZWxsaXBzaXMnfX0sJ0NsYWlyZSBEVVBPTlQgwrcgRG9zc2llciBkXHUyMDE5YW5hbHlzZScpLA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMDhlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJ319LGRyb2l0ZSkpOw0KICAgIGNvbnN0IG1CYXM9KG4yKT0+ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6J2F1dG8nLHBhZGRpbmdUb3A6bT8nNHB4JzonNXB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGZvbnRTaXplOm0/JzMuNnB4JzonNXB4Jyxjb2xvcjpHUkVZfX0sDQogICAgICBlbCgnc3BhbicsbnVsbCwnQURDRicpLGVsKCdzcGFuJyxudWxsLG4yKSk7DQogICAgY29uc3QgbVRyYWl0cz0obGlzdCk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMi41cHgnOiczLjVweCd9fSwNCiAgICAgIGxpc3QubWFwKGZ1bmN0aW9uKHcsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2hlaWdodDptPycxLjZweCc6JzIuMnB4Jyx3aWR0aDp3KyclJyxiYWNrZ3JvdW5kOicjZTNlN2YwJ319KTsgfSkpOw0KDQogICAgY29uc3QgcGFnZUNvdXY9ZWwoJ2Rpdicse3N0eWxlOnt3aWR0aDonMTAwJScsYXNwZWN0UmF0aW86JzIxMCAvIDI5NycsYmFja2dyb3VuZDpOQVZZLGJhY2tncm91bmRJbWFnZTonbGluZWFyLWdyYWRpZW50KDE1MGRlZywjMTQxYzYzIDAlLCMwYjEwNDAgNjAlKScscGFkZGluZzptPyc5cHggOHB4JzonMTNweCAxMnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGJveFNpemluZzonYm9yZGVyLWJveCcsb3ZlcmZsb3c6J2hpZGRlbid9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMy42cHgnOic1cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMjRlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2ZmODA5NSd9fSwnw4l0YWJsaSBwb3VyJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic2cHgnLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nOXB4JzonMTNweCcsbGluZUhlaWdodDoxLGNvbG9yOicjYzdjZGYyJ319LCdDbGFpcmUnKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxN3B4JzonMjVweCcsbGluZUhlaWdodDowLjk0LGxldHRlclNwYWNpbmc6Jy0wLjAzNWVtJyxjb2xvcjonI2ZmZmZmZid9fSwnRFVQT05UJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOm0/JzE2cHgnOicyMnB4JyxoZWlnaHQ6JzJweCcsYmFja2dyb3VuZDpSRUQsbWFyZ2luVG9wOm0/JzZweCc6JzhweCd9fSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc2cHgnOic4cHgnLGZvbnRTaXplOm0/JzRweCc6JzUuNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6JyNjN2NkZjInfX0sJzQyIGFubsOpZXMgYW5hbHlzw6llcywgdW5lIHBhciB1bmUuICcsZWwoJ3NwYW4nLHtzdHlsZTp7Y29sb3I6JyNmZmZmZmYnLGZvbnRXZWlnaHQ6NjAwfX0sJzEzIHN1amV0cyDDoCBmYWlyZSB2w6lyaWZpZXIuJykpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6J2F1dG8nLG1hcmdpbkJvdHRvbTptPyc2cHgnOic4cHgnLHBvc2l0aW9uOidyZWxhdGl2ZScsaGVpZ2h0Om0/JzI2cHgnOiczOHB4Jyxib3JkZXJCb3R0b206JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpJ319LA0KICAgICAgICBbWzYsNDJdLFsxNCw1OF0sWzIzLDM2XSxbMzEsNzBdLFszOCw1Ml0sWzQ2LDc4XSxbNTQsNDRdLFs2Miw2Nl0sWzcwLDg0XSxbNzgsNThdLFs4Niw3Ml0sWzk0LDYyXV0NCiAgICAgICAgICAubWFwKGZ1bmN0aW9uKHB0LGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6cHRbMF0rJyUnLGJvdHRvbTowLHdpZHRoOm0/JzJweCc6JzNweCcsaGVpZ2h0OnB0WzFdKyclJyxiYWNrZ3JvdW5kOlsxLDUsOV0uaW5kZXhPZihrKT49MD9SRUQ6J3JnYmEoMjU1LDI1NSwyNTUsMC40MiknfX0pOyB9KSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpbkxlZnQ6bT8nLThweCc6Jy0xMnB4JyxtYXJnaW5SaWdodDptPyctOHB4JzonLTEycHgnLGJhY2tncm91bmQ6UkVELHBhZGRpbmc6bT8nNXB4IDhweCc6JzdweCAxMnB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzMuNHB4JzonNC42cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjZmZmZmZmJ319LCdDZXR0ZSBzZW1haW5lLCB0cm9pcyBjaG9zZXMnKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nM3B4JzonNHB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOidyZXBlYXQoMywxZnIpJyxnYXA6bT8nNHB4JzonNnB4J319LA0KICAgICAgICAgIFsnU2lnbmVyIGxlIGNvdXJyaWVyIDEnLCdEZW1hbmRlciB2b3MgYnVsbGV0aW5zJywnUG9zdGVyIGVuIHJlY29tbWFuZMOpJ10ubWFwKGZ1bmN0aW9uKHQyLGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntmb250U2l6ZTptPyczLjRweCc6JzQuNnB4JyxsaW5lSGVpZ2h0OjEuMzUsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC45MiknfX0sdDIpOyB9KSkpKTsNCg0KICAgIGNvbnN0IHBhZ2VTdWpldD1tRmV1aWxsZShbDQogICAgICBtVGV0ZSgnSUkgwrcgU3VqZXQgMyAvIDEzJyksDQogICAgICBlbCgnZGl2Jyx7a2V5Oid0JyxzdHlsZTp7bWFyZ2luVG9wOm0/JzVweCc6JzdweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonZmxleC1lbmQnLGdhcDptPyc1cHgnOic3cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjdweCcsZm9udFdlaWdodDo2MDAsbGluZUhlaWdodDowLjc4LGxldHRlclNwYWNpbmc6Jy0wLjA0ZW0nfX0sJzE5ODInKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4OjEscGFkZGluZ0JvdHRvbTonMXB4JyxtaW5XaWR0aDowfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPyczLjRweCc6JzQuNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyM1NzYwNmQnfX0sJ1N1amV0IG5cdTAwYjAgMycpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc2cHgnOic4cHgnLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MS4yNSxsZXR0ZXJTcGFjaW5nOictMC4wMTVlbScsbWFyZ2luVG9wOicxcHgnfX0sJ0RlcyBwb2ludHMsIG1haXMgYXVjdW4gdHJpbWVzdHJlJykpKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2InLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNXB4Jyxib3JkZXJUb3A6JzEuNXB4IHNvbGlkICcrTkFWWSxib3JkZXJCb3R0b206JzEuNXB4IHNvbGlkICcrTkFWWSxwYWRkaW5nOm0/JzNweCAwJzonNHB4IDAnLGRpc3BsYXk6J2ZsZXgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzZweCd9fSwNCiAgICAgICAgW1snMTcnLCdwb2ludHMgSXJjYW50ZWMnXSxbJzAnLCd0cmltZXN0cmUgZGUgYmFzZSddLFsnNCA2MzggRicsJ3JldmVudSBwb3J0w6knXV0ubWFwKGZ1bmN0aW9uKHgsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omt9LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc2cHgnOic4cHgnLGxpbmVIZWlnaHQ6MSxjb2xvcjprPT09MT8nI2M0MTczYSc6TkFWWX19LHhbMF0pLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMy40cHgnOic0LjZweCcsY29sb3I6R1JFWSxtYXJnaW5Ub3A6JzFweCd9fSx4WzFdKSk7IH0pKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3AnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNXB4Jyxmb250U2l6ZTptPyczLjlweCc6JzUuM3B4JyxsaW5lSGVpZ2h0OjEuNTV9fSwnTFx1MjAxOWFubsOpZSAxOTgyIHBvcnRlIDE3IHBvaW50cyBkZSByZXRyYWl0ZSBjb21wbMOpbWVudGFpcmUsIGNlIHF1aSBzdXBwb3NlIHVuZSBhY3Rpdml0w6kgcsOpbXVuw6lyw6llLCBtYWlzIGF1Y3VuIHRyaW1lc3RyZSBkZSBiYXNlLicpLA0KICAgICAgZWwoJ2Rpdicse2tleTonbCcsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnfX0sbVRyYWl0cyhbOTYsODgsOTQsNzJdKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidzJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzZweCcsYmFja2dyb3VuZDonI0ZERUNFRicsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nM3B4IDRweCc6JzRweCA2cHgnLGZvbnRTaXplOm0/JzMuN3B4JzonNXB4JyxsaW5lSGVpZ2h0OjEuNX19LCdTZXVpbCAxOTgyXHUwMGEwOiAzIDYzMCBGIGVuIG3DqXRyb3BvbGUsIDIgNzY4IEYgw6AgTGEgUsOpdW5pb24uIExlIHJldmVudSBwb3J0w6kgZMOpcGFzc2FpdCBsZSBzZXVpbCBwYXJ0b3V0LicpLA0KICAgICAgZWwoJ2Rpdicse2tleTonbDInLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNXB4J319LG1UcmFpdHMoWzkyLDgwLDg2XSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnLGZvbnRTaXplOm0/JzMuNXB4JzonNC44cHgnLGNvbG9yOkdSRVl9fSwnUsOoZ2xlcyBhcHBsaXF1w6llc1x1MDBhMDogUjAzLCBSMzcuJyksDQogICAgICBtQmFzKCdQYWdlIDYnKQ0KICAgIF0pOw0KDQogICAgY29uc3QgcGFnZUNvdXJyaWVyPW1GZXVpbGxlKFsNCiAgICAgIG1UZXRlKCdJViDCtyBDb3VycmllciAxIC8gNScpLA0KICAgICAgZWwoJ2Rpdicse2tleTonYScsc3R5bGU6e21hcmdpblRvcDptPyc2cHgnOic4cHgnLGFsaWduU2VsZjonZmxleC1lbmQnLHRleHRBbGlnbjoncmlnaHQnLGZvbnRTaXplOm0/JzMuN3B4JzonNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ0NhaXNzZSBkXHUyMDE5YXNzdXJhbmNlIHJldHJhaXRlJyxlbCgnYnInKSwnZXQgZGUgbGEgc2FudMOpIGF1IHRyYXZhaWwnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J28nLHN0eWxlOnttYXJnaW5Ub3A6bT8nNnB4JzonOHB4Jyxmb250U2l6ZTptPyc0LjFweCc6JzUuNnB4Jyxmb250V2VpZ2h0OjcwMH19LCdPYmpldFx1MDBhMDogZGVtYW5kZSBkXHUyMDE5ZW50cmV0aWVuIGluZm9ybWF0aW9uIHJldHJhaXRlJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidjJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzZweCcsZm9udFNpemU6bT8nMy45cHgnOic1LjNweCcsbGluZUhlaWdodDoxLjZ9fSwnTWFkYW1lLCBNb25zaWV1ciwnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2MyJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzNweCc6JzRweCcsZm9udFNpemU6bT8nMy45cHgnOic1LjNweCcsbGluZUhlaWdodDoxLjZ9fSwnQ29uZm9ybcOpbWVudCDDoCBsXHUyMDE5YXJ0aWNsZSBELjE2MS0yLTEtOC0zIGR1IGNvZGUgZGUgbGEgc8OpY3VyaXTDqSBzb2NpYWxlLCBqZSBzb2xsaWNpdGUgdW4gZW50cmV0aWVuIGluZm9ybWF0aW9uIHJldHJhaXRlLicpLA0KICAgICAgZWwoJ2Rpdicse2tleTonYzMnLHN0eWxlOnttYXJnaW5Ub3A6bT8nM3B4JzonNHB4J319LG1UcmFpdHMoWzk4LDk0LDg4LDk2LDcyXSkpLA0KICAgICAgZWwoJ2Rpdicse2tleTonY2gnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNXB4JzonN3B4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyczcHgnOic0cHgnfX0sDQogICAgICAgIFsnTm9tIGV0IHByw6lub20nLCdOdW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZScsJ0RhdGUgZXQgc2lnbmF0dXJlJ10ubWFwKGZ1bmN0aW9uKHQyLGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic1cHgnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRTaXplOm0/JzMuNHB4JzonNC42cHgnLGNvbG9yOkdSRVksd2lkdGg6bT8nMzRweCc6JzQ2cHgnfX0sdDIpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXg6MSxib3JkZXJCb3R0b206JzFweCBkb3R0ZWQgI2I5YzFkNicsaGVpZ2h0Om0/JzZweCc6JzhweCd9fSkpOyB9KSksDQogICAgICBtQmFzKCdQYWdlIDIxJykNCiAgICBdKTsNCg0KICAgIGNvbnN0IHBhZ2VFdXJvcz1tRmV1aWxsZShbDQogICAgICBtVGV0ZSgnSSDCtyBMXHUyMDE5ZXNzZW50aWVsJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidoJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzVweCc6JzdweCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc4cHgnOicxMXB4Jyxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEuMTUsbGV0dGVyU3BhY2luZzonLTAuMDJlbSd9fSwnQ2UgcXVlIGNlbGEgcmVwcsOpc2VudGUgZW4gZXVyb3MnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3cnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNXB4Jyxib3JkZXI6JzEuNXB4IHNvbGlkICNiODE4MzMnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDonI2I4MTgzMycsY29sb3I6JyNmZmZmZmYnLHBhZGRpbmc6bT8nMnB4IDRweCc6JzNweCA2cHgnLGZvbnRTaXplOm0/JzMuM3B4JzonNC40cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMDZlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJ319LCdEZXMgZXN0aW1hdGlvbnMsIHBhcyB1bmUgZMOpY2lzaW9uJyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPyczcHggNHB4JzonNHB4IDZweCcsYmFja2dyb3VuZDonI0ZERUNFRicsZm9udFNpemU6bT8nMy42cHgnOic0LjlweCcsbGluZUhlaWdodDoxLjV9fSwnQ2FsY3Vsw6llcyBhdmVjIGxhIGZvcm11bGUgb2ZmaWNpZWxsZSwgw6AgcGFydGlyIGRlcyBzYWxhaXJlcyBxdWUgdm90cmUgcmVsZXbDqSBwb3J0ZSBhdWpvdXJkXHUyMDE5aHVpLicpKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNXB4JzonNnB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOicxZnIgMWZyJyxnYXA6bT8nNHB4JzonNnB4J319LA0KICAgICAgICBbWyc0IDM3OSDigqwnLCdwYXIgbW9pcywgYXVqb3VyZFx1MjAxOWh1aSddLFsnNSAxOTkg4oKsJywnc2kgbGVzIGRlbWFuZGVzIGFib3V0aXNzZW50J11dLm1hcChmdW5jdGlvbih4LGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntib3JkZXJUb3A6JzEuNXB4IHNvbGlkICcrKGs/UkVEOk5BVlkpLHBhZGRpbmdUb3A6bT8nM3B4JzonNHB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc5cHgnOicxMnB4JyxsaW5lSGVpZ2h0OjEsY29sb3I6az8nI2M0MTczYSc6TkFWWX19LHhbMF0pLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMy40cHgnOic0LjZweCcsY29sb3I6R1JFWSxtYXJnaW5Ub3A6JzFweCcsbGluZUhlaWdodDoxLjM1fX0seFsxXSkpOyB9KSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidwJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzVweCc6JzZweCcsZm9udFNpemU6bT8nMy45cHgnOic1LjNweCcsbGluZUhlaWdodDoxLjU1fX0sJ1JldmVudSBhbm51ZWwgbW95ZW4gZGUgNDQgNDM0IOKCrCwgc3VyIHZvcyAyNSBtZWlsbGV1cmVzIGFubsOpZXMuIFZvdHJlIHRhdXggZXN0IGRlIDQwLDYzICUgbMOgIG/DuSBpbCBwbGFmb25uZSDDoCA1MCAlXHUwMGEwOiBpbCB2b3VzIHJlc3RlIDE1IHRyaW1lc3RyZXMgw6Agb2J0ZW5pci4nKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNXB4J319LG1UcmFpdHMoWzk0LDg2LDkyLDc4LDg4XSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncycsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnLGJhY2tncm91bmQ6JyNlZWYyZmInLHBhZGRpbmc6bT8nM3B4IDRweCc6JzRweCA2cHgnLGZvbnRTaXplOm0/JzMuN3B4JzonNXB4JyxsaW5lSGVpZ2h0OjEuNX19LCdDaGFxdWUgdHJpbWVzdHJlIHDDqHNlIDY4IOKCrCBwYXIgbW9pcywgw6AgdmllLiBMZXMgZGVtYW5kZXMgZGUgY2UgZG9zc2llciBlbiB2aXNlbnQgMTIsIHNvaXQgODIwIOKCrCBkZSBwbHVzIGNoYXF1ZSBtb2lzLicpLA0KICAgICAgbUJhcygnUGFnZSAxMicpDQogICAgXSk7DQoNCiAgICAgICAgY29uc3QgUkVDVT1bDQogICAgICBbJ8KrIMOAIHF1ZWxsZSBkYXRlIGVzdC1jZSBxdWUgamUgcGV1eCBwYXJ0aXJcdTAwYTA/IMK7JywnVm90cmUgZGF0ZSwgY2FsY3Vsw6llIHN1ciB2b3MgdHJpbWVzdHJlcyByw6llbHMgZXQgc3VyIGxlcyBkaXNwb3NpdGlmcyBxdWkgcGVybWV0dGVudCBkZSBwYXJ0aXIgcGx1cyB0w7R0XHUwMGEwOiBjYXJyacOocmUgbG9uZ3VlLCBpbmFwdGl0dWRlLCBjb21wdGUgcMOpbmliaWxpdMOpLiBBdmVjIGRldXggaHlwb3Row6hzZXMgY8O0dGUgw6AgY8O0dGUsIHNpIHZvdXMgdm91cyBhcnLDqnRleiBkZSB0cmF2YWlsbGVyIGRcdTIwMTlpY2kgbMOgIGV0IHNpIHZvdXMgY29udGludWV6LiBFdCBjZSBxdWUgMyBtb2lzIGRlIHBsdXMgb3UgZGUgbW9pbnMgY2hhbmdlbnQuJ10sDQogICAgICBbJ8KrIENvbWJpZW4gZXN0LWNlIHF1ZSBqZSB2YWlzIHRvdWNoZXJcdTAwYTA/IMK7JywnTGUgbW9udGFudCBtZW5zdWVsLCBldCBjb21tZW50IGlsIGJvdWdlIHNlbG9uIGxlIG1vbWVudCBvw7kgdm91cyBwYXJ0ZXouIERcdTIwMTlvw7kgdmllbnQgbGEgcGFydCBkZSBiYXNlIGV0IGRcdTIwMTlvw7kgdmllbnQgbGEgY29tcGzDqW1lbnRhaXJlLiBFdCBjZSBxdWUgY2UgY2FsY3VsIHN1cHBvc2UsIMOpY3JpdCBub2lyIHN1ciBibGFuYywgcGFyY2UgcXVcdTIwMTl1bmUgZXN0aW1hdGlvbiBzYW5zIHNlcyBoeXBvdGjDqHNlcyBuZSB2YXV0IHJpZW4uJ10sDQogICAgICBbJ8KrIFF1XHUyMDE5ZXN0LWNlIHF1aSBtYW5xdWUgc3VyIG1vbiByZWxldsOpXHUwMGEwPyDCuycsJ0NoYXF1ZSBzdWpldCBub21tw6ksIGF2ZWMgbFx1MjAxOWFubsOpZSBjb25jZXJuw6llIGV0IGxlcyBwacOoY2VzIMOgIGpvaW5kcmUuIFBhcyB1biBjb21wdGV1clx1MDBhMDogZGVzIHRpdHJlcyBjb21tZSDCqyB1bmUgcMOpcmlvZGUgZGUgY2jDtG1hZ2UgcmVjb25udWUgcGFyIHVuIHLDqWdpbWUsIHBhcyBwYXIgbFx1MjAxOWF1dHJlIMK7IG91IMKrIGxlIHNldWlsIGRlcyAxMjAgdHJpbWVzdHJlcyBjb3Rpc8OpcywgZXQgbGUgcGnDqGdlIHF1aSBsZSBmYWl0IHBlcmRyZSDCuy4nXSwNCiAgICAgIFsnwqsgRXQgc2kgbWEgY2Fpc3NlIG5lIHLDqXBvbmQgcGFzXHUwMGEwPyDCuycsJ0xhIHN1aXRlIGVzdCDDqWNyaXRlIGF1c3NpXHUwMGEwOiBsYSByZWxhbmNlLCDDoCBxdWVsbGUgZGF0ZSwgbGUgbcOpZGlhdGV1ciBkZSB2b3RyZSBjYWlzc2UgcsOpZ2lvbmFsZSwgcHVpcyBsYSBjb21taXNzaW9uIGRlIHJlY291cnMgYW1pYWJsZSBldCBzb24gZMOpbGFpIGRlIDIgbW9pcy4gQXZlYyB1biB0YWJsZWF1IHBvdXIgc3VpdnJlIG/DuSBlbiBlc3QgY2hhcXVlIGRlbWFuZGUsIGV0IGNvbW1lbnQgbGlyZSBsYSByw6lwb25zZSBxdWFuZCBlbGxlIGFycml2ZS4nXSwNCiAgICAgIFsnwqsgRXQgc2kgdG91dCB2YSBiaWVuIGNoZXogbW9pXHUwMGEwPyDCuycsJ0Fsb3JzIGxlIGRvc3NpZXIgdm91cyBsZSBkaXQsIGV0IGlsIGRpdCBjZSBxdWkgYSDDqXTDqSB2w6lyaWZpw6kgcG91ciBsXHUyMDE5YWZmaXJtZXIsIHNldWlsIHBhciBzZXVpbCBldCBhbm7DqWUgcGFyIGFubsOpZS4gVm91cyByZWZlcm1leiBsZSBzdWpldCBhdSBsaWV1IGRcdTIwMTl5IHJlcGVuc2VyIHRvdXMgbGVzIDYgbW9pcy4nXSwNCiAgICAgIFsnwqsgRXQgbW9uIGNvbmpvaW50XHUwMGEwPyDCuycsJ0NlIHF1ZSB2b3RyZSByZXRyYWl0ZSBsdWkgb3V2cmlyYWl0LCBldCBzb3VzIHF1ZWxsZXMgY29uZGl0aW9ucy4nXQ0KICAgIF07DQogICAgY29uc3QgcmVjdT1zZWN0KG51bGwsZWwoJ2RpdicsbnVsbCxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidoJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxMHB4JzonNDZweCcsYWxpZ25JdGVtczptPydmbGV4LXN0YXJ0JzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSx0aGlzLmV5ZWJyb3coJ0NlIHF1ZSB2b3VzIHJlY2V2ZXonLG51bGwsbnVsbCwnSScpLA0KICAgICAgICAgIGVsKCdoMicse3N0eWxlOnttYXJnaW46bT8nMTBweCAwIDAnOicxMnB4IDAgMCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNnB4JzonMzhweCcsbGluZUhlaWdodDoxLjAyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdMZXMgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgdm90cmUgZG9zc2llciByw6lwb25kJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZLG1heFdpZHRoOicyNmNoJ319LCdEYW5zIHZvcyBtb3RzLCBldCBkYW5zIGNldCBvcmRyZS4nKSksDQoNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2FjdCcsc3R5bGU6e21hcmdpblRvcDptPycyMHB4JzonMzBweCcsYmFja2dyb3VuZDpOQVZZLGJvcmRlclRvcDonM3B4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nMjBweCAxOHB4IDIycHgnOiczMnB4IDQwcHggMzRweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMjUwcHgnLGdhcDptPycxNnB4JzonMCA0NnB4JyxhbGlnbkl0ZW1zOidjZW50ZXInfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTJweCd9fSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTVweCc6JzE3cHgnLGxpbmVIZWlnaHQ6MS4yLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOicjZmY4MDk1Jyxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSwnMDEnKSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjZmY4MDk1J319LCdMZSBjxZN1ciBkdSBkb3NzaWVyJykpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzhweCc6JzExcHgnLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjRweCc6JzM0cHgnLGxpbmVIZWlnaHQ6MS4wOCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjZlbScsY29sb3I6JyNmZmZmZmYnLHRleHRXcmFwOidiYWxhbmNlJ319LCfCqyBFdCBjb25jcsOodGVtZW50LCBqZSBmYWlzIHF1b2lcdTAwYTA/IMK7JyksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzlweCAwIDAnOicxM3B4IDAgMCcsbWF4V2lkdGg6JzUyY2gnLGZvbnRTaXplOm0/JzE1cHgnOicxNi41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOicjYzdjZGYyJ319LCdWb3MgY291cnJpZXJzLCBkw6lqw6Agw6ljcml0cywgY2hhY3VuIGFkcmVzc8OpIMOgIGxhIGNhaXNzZSBxdWkgZG9pdCBsZSByZWNldm9pci4gVm91cyBsZXMgc2lnbmV6IGV0IHZvdXMgbGVzIHBvc3Rlei4nKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MCxib3JkZXJUb3A6bT8nMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yMiknOidub25lJyxib3JkZXJMZWZ0Om0/J25vbmUnOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKScscGFkZGluZ1RvcDptPycxNHB4JzonMCcscGFkZGluZ0xlZnQ6bT8nMCc6JzM0cHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzQycHgnOic1NnB4JyxsaW5lSGVpZ2h0OjAuOSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMzVlbScsY29sb3I6JyNmZmZmZmYnfX0sJzMgw6AgNScpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzZweCcsZm9udFNpemU6bT8nMTNweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOicjYWFiMmVlJ319LCdjb3VycmllcnMgc2Vsb24gdm90cmUgY2FycmnDqHJlLCBwcsOqdHMgw6AgcG9zdGVyJykpKSwNCg0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDptPycyMnB4JzonMzRweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZfX0sDQogICAgICAgIFJFQ1UubWFwKGZ1bmN0aW9uKHgsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMjZweCAxZnIgMS41ZnInLGdhcDptPyc2cHgnOicwIDMwcHgnLGFsaWduSXRlbXM6J3N0YXJ0Jyxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxNnB4IDAnOicyMHB4IDAnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE1cHgnOicxN3B4JyxsaW5lSGVpZ2h0OjEuMzUsZm9udFdlaWdodDo1MDAsY29sb3I6UkVELGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LCcwJysoaysyKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE4cHgnOicyMHB4JyxsaW5lSGVpZ2h0OjEuMjIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDE0ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0seFswXSksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOklOS319LHhbMV0pKTsgfSkpDQogICAgXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzQ0cHggMCc6JzgwcHggMCd9KTsNCg0KICAgIGNvbnN0IGRvc3NpZXI9ZWwoJ3NlY3Rpb24nLHtzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPyczMHB4IDAgMzJweCc6JzUycHggMCA1NnB4J319LA0KICAgICAgaW5uZXIoZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxNnB4JzonMjJweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzhweCc6JzQwcHgnLGFsaWduSXRlbXM6bT8nZmxleC1zdGFydCc6J2ZsZXgtZW5kJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSwNCiAgICAgICAgICAgIHRoaXMuZXllYnJvdygnSnVnZXogc3VyIHBpw6hjZXMnKSwNCiAgICAgICAgICAgIGVsKCdoMicse3N0eWxlOnttYXJnaW46bT8nMTBweCAwIDAnOicxMnB4IDAgMCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyN3B4JzonMzhweCcsbGluZUhlaWdodDoxLjA1LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCc0IHBhZ2VzLCB0ZWxsZXMgcXVcdTIwMTllbGxlcyBzb3J0ZW50JykpLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLG1heFdpZHRoOm0/J25vbmUnOic0MGNoJyxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVl9fSwnTGEgY291dmVydHVyZSwgdW5lIHBhZ2UgZGUgc3VqZXQsIHVuIGNvdXJyaWVyIHByw6p0IMOgIHNpZ25lciwgZXQgbGEgcGFnZSBxdWkgZXhwbGlxdWUgY29tbWVudCBsaXJlIGxhIHLDqXBvbnNlIHF1ZSB2b3VzIHJlY2V2cmV6LicpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmciAxZnInOidyZXBlYXQoNCwxZnIpJyxnYXA6bT8nMTJweCc6JzIwcHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LA0KICAgICAgICAgIFsNCiAgICAgICAgICAgIFtwYWdlQ291diwnTGEgY291dmVydHVyZSddLA0KICAgICAgICAgICAgW3BhZ2VTdWpldCwnVW5lIHBhZ2UgZGUgc3VqZXQnXSwNCiAgICAgICAgICAgIFtwYWdlQ291cnJpZXIsJ1VuIGNvdXJyaWVyIHByw6p0IMOgIHNpZ25lciddLA0KICAgICAgICAgICAgW3BhZ2VFdXJvcywnQ2UgcXVlIGNlbGEgcmVwcsOpc2VudGUgZW4gZXVyb3MnXQ0KICAgICAgICAgIF0ubWFwKCh4LGkyKT0+ZWwoJ2Rpdicse2tleTppMixzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nN3B4JzonOXB4J319LA0KICAgICAgICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+eyB0cnl7dHJhY2soJ2FwZXJjdV9hZ3JhbmRpJyx7cGFnZTp4WzFdfSk7fWNhdGNoKF8pe30gdGhpcy5zZXRTdGF0ZSh7em9vbTppMn0pOyB9LA0KICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPU5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1MSU5FO30sDQogICAgICAgICAgICAgICAgc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLHBhZGRpbmc6MCxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsY3Vyc29yOid6b29tLWluJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3hTaGFkb3c6JzAgMTZweCAzNnB4IC0yNnB4IHJnYmEoMTQsMTksNzksMC40NSknLG92ZXJmbG93OidoaWRkZW4nLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J3N0cmV0Y2gnLGp1c3RpZnlDb250ZW50OidjZW50ZXInfX0seFswXSksDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTEuNXB4JzonMTIuNXB4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjpHUkVZLHRleHRBbGlnbjonY2VudGVyJ319LHhbMV0pKSkpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGZvbnRTdHlsZTonaXRhbGljJyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdVbiBkb3NzaWVyIHLDqWVsLCBhbm9ueW1pc8OpXHUwMGEwOiBjZSBkb3NzaWVyLWzDoCwgNDIgYW5uw6llcyByZXByaXNlcywgMTMgc3VqZXRzLCAyOCBwYWdlcy4gQ2xpcXVleiBzdXIgdW5lIHBhZ2UgcG91ciBsXHUyMDE5YWdyYW5kaXIuJykpKSk7DQoNCiAgICBjb25zdCBwcmV1dmU9ZWwoJ3NlY3Rpb24nLHtzdHlsZTp7YmFja2dyb3VuZDpOQVZZLHBhZGRpbmc6bT8nMjhweCAwIDMwcHgnOic0NnB4IDAgNDhweCd9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTJweCc6JzE2cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjZmY4MDk1J319LCdTdXIgbWVzIDExIGRlcm5pZXJzIHJlbGV2w6lzIGx1cycpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOicjOGY5OGQ4J319LCc0MCBhbm7DqWVzIHJlcHJpc2VzIHBhciByZWxldsOpLCBkZSBsYSBwcmVtacOocmUgbGlnbmUgw6AgbGEgZGVybmnDqHJlLicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic4cHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTNweCc6JzE4cHgnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nNTJweCc6Jzc2cHgnLGxpbmVIZWlnaHQ6MC44Nixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMzZlbScsY29sb3I6JyNmZmZmZmYnLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LCc3JyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7bWluV2lkdGg6MH19LA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZGlzcGxheTonYmxvY2snLGZvbnRTaXplOm0/JzE2cHgnOicxOXB4JyxsaW5lSGVpZ2h0OjEuMjUsZm9udFdlaWdodDo2MDAsY29sb3I6JyNmZmZmZmYnfX0sJ3RyaW1lc3RyZXMgZW4gamV1IGVuIG1veWVubmUsIGp1c3F1XHUyMDE5w6AgMjAgc3VyIHVuIHNldWwgcmVsZXbDqS4nKSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2Rpc3BsYXk6J2Jsb2NrJyxtYXJnaW5Ub3A6JzRweCcsZm9udFNpemU6bT8nMTRweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOicjYzdjZGYyJ319LCdTb2l0IHByw6hzIGRlIDIgYW5zIGRlIGNvdGlzYXRpb24gw6AgZmFpcmUgdsOpcmlmaWVyLicpKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzZweCc6JzEwcHgnLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE1cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKScsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptPycxMXB4JzonMTRweCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyczMHB4JzonMzhweCcsbGluZUhlaWdodDowLjkyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzZW0nLGNvbG9yOicjZmZmZmZmJyxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSwnMycpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS4zNSxmb250V2VpZ2h0OjYwMCxjb2xvcjonI2ZmZmZmZid9fSwnYW5uw6llcyBxdWkgbmUgY29sbGVudCBwYXMsIGVuIG1veWVubmUsIHN1ciB1biBtw6ptZSByZWxldsOpLicpKSwNCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzE0cHggMCAwJzonMjBweCAwIDAnLHBhZGRpbmdUb3A6bT8nMTRweCc6JzE4cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMiknLG1heFdpZHRoOic3NGNoJyxmb250U2l6ZTptPycxMy41cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjonI2M3Y2RmMid9fSwnQ2VydGFpbnMgZG9zc2llcnMgcG9ydGFpZW50IGJlYXVjb3VwIGRlIHN1amV0cyDDoCBmYWlyZSB2w6lyaWZpZXIsIGRcdTIwMTlhdXRyZXMgdHLDqHMgcGV1LiBBdWN1biByZWxldsOpIG5lIHJlc3NlbWJsZSDDoCB1biBhdXRyZSwgZXQgamUgbmUgc2FpcyBwYXMgY2UgcXVlIHBvcnRlIGxlIHbDtHRyZSBhdmFudCBkZSBsXHUyMDE5YXZvaXIgbHUuJykpKSk7DQoNCiAgICBjb25zdCBwYXNzZXJlbGxlPWVsKCdzZWN0aW9uJyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzI0cHggMCc6JzM2cHggMCd9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyMHB4JzonNDRweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonY2VudGVyJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDIwcHggMWZyIDIwcHggMWZyJyxnYXA6bT8nMTRweCc6JzAnLGFsaWduSXRlbXM6J2NlbnRlcid9fSwNCiAgICAgICAgICBbWydDZSBxdWUgdm91cyBkw6lwb3NleicsJ2xlIFBERiBkZSB2b3RyZSByZWxldsOpLCByaWVuIGRcdTIwMTlhdXRyZSddLFsnQ2UgcXVlIHZvdXMgcmVjZXZleicsJ3ZvdHJlIGRvc3NpZXIgZXQgdm9zIGNvdXJyaWVycywgcHLDqnRzIMOgIHBvc3RlciddLFsnUXVhbmQnLCdqZSBsZSByw6lkaWdlIHNvdXMgJyt0aGlzLmRlbGFpKCldXQ0KICAgICAgICAgICAgLmZsYXRNYXAoKHgsaSk9PnsNCiAgICAgICAgICAgICAgY29uc3QgY2VsbD1lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic1cHgnLHBhZGRpbmdMZWZ0Om0/JzEycHgnOicxNHB4JyxwYWRkaW5nUmlnaHQ6bT8nMCc6JzE0cHgnLGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnKyhpPT09Mj9SRUQ6TElORSl9fSwNCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGNvbG9yOmk9PT0yPycjYzQxNzNhJzpHUkVZfX0seFswXSksDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOk5BVll9fSx4WzFdKSk7DQogICAgICAgICAgICAgIGlmKG18fGk9PT0yKSByZXR1cm4gW2NlbGxdOw0KICAgICAgICAgICAgICByZXR1cm4gW2NlbGwsZWwoJ3N2Zycse2tleTonYScraSx3aWR0aDoxNCxoZWlnaHQ6MTQsdmlld0JveDonMCAwIDI0IDI0JyxmaWxsOidub25lJyxzdHlsZTp7b3ZlcmZsb3c6J3Zpc2libGUnfX0sZWwoJ3BhdGgnLHtkOidNOCA0bDkgOC05IDgnLHN0cm9rZTonI2FlYjVjNicsc3Ryb2tlV2lkdGg6Mi42LHN0cm9rZUxpbmVjYXA6J3JvdW5kJyxzdHJva2VMaW5lam9pbjoncm91bmQnfSkpXTsNCiAgICAgICAgICAgIH0pKSwNCiAgICAgICAgbnVsbCkpKTsNCg0KICAgIGNvbnN0IG9iamVjdGlvbj10aGlzLmVuZ2FnZW1lbnQobSxpbm5lcik7DQoNCiAgICBjb25zdCBwaG90bz1lbCgnZGl2Jyx7Y2xhc3NOYW1lOidhZGNmLXBob3RvJyxzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOm0/JzEwMCUnOiczMDBweCcsbWF4V2lkdGg6JzEwMCUnLG1pbldpZHRoOjAsYm94U2l6aW5nOidib3JkZXItYm94JyxoZWlnaHQ6bT8nMjUwcHgnOiczNjhweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJ319LA0KICAgICAgUEhPVE8/ZWwoJ2ltZycse3NyYzpQSE9UTyxhbHQ6J0zDqW9uYXJkIERlw68sIGZvbmRhdGV1ciBkXHUyMDE5QURDRid9KQ0KICAgICAgICAgICA6ZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEzcHgnLGxldHRlclNwYWNpbmc6Jy4wOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjOGI5M2E4Jyx0ZXh0QWxpZ246J2NlbnRlcicscGFkZGluZzonMCAxNnB4J319LCdQaG90byBkZSBMw6lvbmFyZCBEZcOvJykpOw0KDQogICAgY29uc3QgbGV0dHJlPXNlY3QobnVsbCxlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMjZweCc6JzYwcHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLG1heFdpZHRoOm0/J25vbmUnOic5MDBweCd9fSxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidwJyxzdHlsZTp7d2lkdGg6bT8nMTAwJSc6J2F1dG8nLG1pbldpZHRoOjAsbWF4V2lkdGg6JzEwMCUnfX0scGhvdG8pLA0KICAgICAgZWwoJ2Rpdicse2tleTondCcsc3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowfX0sY29sKG0/JzE2cHgnOicyMHB4JyxbDQogICAgICAgIHRoaXMuZXllYnJvdygnUXVpIHLDqWRpZ2Ugdm90cmUgYmlsYW4nKSwNCiAgICAgICAgaDIoJ0pcdTIwMTlleGFtaW5lIHZvdHJlIGNhcnJpw6hyZSwgYW5uw6llIHBhciBhbm7DqWUuJyxmYWxzZSwxKSwNCiAgICAgICAgcCgnSmUgc3VpcyAnK3RoaXMuZm91bmRlcigpKycsIGZvbmRhdGV1ciBkXHUyMDE5QURDRi4gQW5jaWVuIGNvbnN1bHRhbnQgZW4gY3liZXJzw6ljdXJpdMOpLCBtb24gbcOpdGllciBjb25zaXN0YWl0IMOgIGV4YW1pbmVyIGRlcyBzeXN0w6htZXMgY29tcGxleGVzIHBvdXIgcmVww6lyZXIgY2UgcXVpIHBhc3NhaXQgaW5hcGVyw6d1LiBKXHUyMDE5ZW4gYWkgZ2FyZMOpIHVuZSBleGlnZW5jZVx1MDBhMDogY3JvaXNlciBsZXMgaW5mb3JtYXRpb25zIGV0IHbDqXJpZmllciBhdmFudCBkZSBjb25jbHVyZS4nKSwNCiAgICAgICAgcCgnSlx1MjAxOWFpIHZ1IGRlcyBwZXJzb25uZXMgZMOpY291dnJpciwgYXByw6hzIDQwIGFucyBkZSB0cmF2YWlsIGV0IMOgIHF1ZWxxdWVzIG1vaXMgZHUgZMOpcGFydCwgcXVlIGRldXggYW5uw6llcyBtYW5xdWFpZW50IMOgIGxldXIgcmVsZXbDqS4gUGVyc29ubmUgbmUgbGV1ciBhdmFpdCBleHBsaXF1w6kgcXVvaSByZWdhcmRlci4nKSwNCiAgICAgICAgcCgnQXVqb3VyZFx1MjAxOWh1aSwgamUgcmVwcmVuZHMgcGVyc29ubmVsbGVtZW50IGNoYXF1ZSBiaWxhbiByZXRyYWl0ZS4gSmUgbVx1MjAxOWFwcHVpZSBzdXIgbGVzIGNvbnRyw7RsZXMgYXV0b21hdGlxdWVzIGV0IHZvcyByw6lwb25zZXMgYXUgcXVlc3Rpb25uYWlyZSBwb3VyIGV4YW1pbmVyIGNoYXF1ZSBww6lyaW9kZSBhdmVjIGxlcyByw6hnbGVzIHF1aSBsdWkgY29ycmVzcG9uZGVudC4gTGVzIGVuZmFudHMsIGxlIHRyYXZhaWwgw6AgbFx1MjAxOcOpdHJhbmdlciBvdSBsZXMgYW5uw6llcyBjcmV1c2VzIGFwcG9ydGVudCBkZXMgaW5mb3JtYXRpb25zIHF1ZSBsZSByZWxldsOpIHNldWwgbmUgZG9ubmUgcGFzLicpLA0KICAgICAgICBwKCdBdmFudCBkZSByZXRlbmlyIHVuIHBvaW50IMOgIHNpZ25hbGVyLCBqXHUyMDE5ZXhhbWluZSBjZSBxdWkgcG91cnJhaXQgbFx1MjAxOWV4cGxpcXVlci4gVm90cmUgZG9zc2llciBwcsOpY2lzZSBjZSBxdWkgZXN0IGNvbmZvcm1lLCBjZSBxdWkgbcOpcml0ZSB1bmUgZGVtYW5kZSBldCBjZSBxdWkgcmVzdGUgw6AgY29uZmlybWVyLicpLA0KICAgICAgICBwKCdKZSByw6lkaWdlIHZvdHJlIGJpbGFuIGF2ZWMgbGVzIGNvbmNsdXNpb25zIGV4cGxpcXXDqWVzLCBsZXMgZGF0ZXMgZXQgbW9udGFudHMgZXN0aW3DqXMgYWNjb21wYWduw6lzIGRlIGxldXJzIGh5cG90aMOoc2VzLCBldCBsZXMgY291cnJpZXJzIGFkYXB0w6lzIGF1eCBkZW1hbmRlcyByZXRlbnVlcy4gVm91cyBzYXZleiBxdWVsbGVzIHBpw6hjZXMgcsOpdW5pciwgw6AgcXVpIMOpY3JpcmUgZXQgZGFucyBxdWVsIG9yZHJlIGFnaXIuJyksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J3MnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNnB4JzonMTJweCcscGFkZGluZ1RvcDptPycxNHB4JzonMjBweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic0cHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLHRleHRBbGlnbjonbGVmdCcsbWF4V2lkdGg6JzYwY2gnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI4cHgnOiczNHB4Jyxmb250U3R5bGU6J2l0YWxpYycsY29sb3I6TkFWWSxvcGFjaXR5OjAuNzgsdHJhbnNmb3JtOidyb3RhdGUoLTIuNWRlZyknLHRyYW5zZm9ybU9yaWdpbjonbGVmdCd9fSx0aGlzLmZvdW5kZXIoKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzhweCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsY29sb3I6R1JFWX19LCdGb25kYXRldXIgZFx1MjAxOUFEQ0YsIGNocm9uaXF1ZXVyIGF1IEpvdXJuYWwgZHUgTmV0LicpKV0pKV0pLHtib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkV9KTsNCg0KICAgIGNvbnN0IGNvbnRlbnU9c2VjdChudWxsLGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyOHB4JzonNTZweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxjb2wobT8nMThweCc6JzI0cHgnLFsNCiAgICAgICAgdGhpcy5leWVicm93KCdMZSBsaXZyYWJsZScpLA0KICAgICAgICBoMignVW4gZG9zc2llciDDoCBsYSB0YWlsbGUgZGUgdm90cmUgY2FycmnDqHJlJyxmYWxzZSwxKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleTonbnInLHN0eWxlOntwYWRkaW5nOm0/JzE0cHggMTZweCc6JzE2cHggMjBweCcsYmFja2dyb3VuZDonI2VlZjJmYicsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrTkFWWSxmb250U2l6ZTptPycxNXB4JzonMTZweCcsbGluZUhlaWdodDoxLjYsY29sb3I6TkFWWX19LCdWb3VzIG5cdTIwMTlhdmV6IHBhcyDDoCB0b3V0IGxpcmUuIExhIHByZW1pw6hyZSBwYWdlIGRvbm5lIGxlcyB0cm9pcyBjaG9zZXMgw6AgZmFpcmUgY2V0dGUgc2VtYWluZSwgZGFucyBsXHUyMDE5b3JkcmUuIExlIHJlc3RlIGVzdCBsw6AgcXVhbmQgdm91cyBlbiBhdmV6IGJlc29pbi4nKSwNCiAgICAgICAgcCgnU2EgdGFpbGxlIGTDqXBlbmQgZGUgbGEgdsO0dHJlwqA6IHVuZSBjYXJyacOocmUgY291cnRlIGV0IGxpbsOpYWlyZSBkb25uZSB1biBkb3NzaWVyIHBsdXMgbWluY2UgcXVcdTIwMTl1bmUgY2FycmnDqHJlIGRlIDQwIGFucyBhdmVjIGRlcyB0cm91cy4gQ2hhcXVlIHN1amV0IHRpZW50IHN1ciB1bmUgcGFnZSwgZW4gaHVpdCBibG9jc1x1MDBhMDogbGUgY29uc3RhdCwgcG91cnF1b2kgY2VsYSBtw6lyaXRlIHVuZSBkZW1hbmRlLCBjZSBxdWkgcGV1dCBsXHUyMDE5ZXhwbGlxdWVyLCBjZSBxdWUgw6dhIHBvcnRlLCBsYSBwacOoY2Ugw6Agam9pbmRyZSwgbGUgZ2VzdGUgw6AgZmFpcmUsIGxlIG5pdmVhdSBkZSBjZXJ0aXR1ZGUsIGV0IGxlIHRleHRlIHF1aSBsXHUyMDE5YXBwdWllLicpLA0KICAgICAgICBlbCgnZGl2Jyx7a2V5OidnJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzJweCc6JzhweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzoncmVwZWF0KDMsMWZyKScsZ2FwOm0/JzAnOiczNHB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksYm9yZGVyQm90dG9tOm0/J25vbmUnOicxcHggc29saWQgJytMSU5FfX0sDQogICAgICAgICAgICBDT05URU5VLnNsaWNlKDAsMykubWFwKChjLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e3BhZGRpbmc6bT8nMTVweCAwJzonMjBweCAwJyxib3JkZXJCb3R0b206bT8nMXB4IHNvbGlkICcrTElORTonbm9uZScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydyb3cnOidjb2x1bW4nLGdhcDptPycxNHB4JzonN3B4JyxhbGlnbkl0ZW1zOm0/J2Jhc2VsaW5lJzonZmxleC1zdGFydCd9fSwNCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI3cHgnOiczNHB4JyxsaW5lSGVpZ2h0OjAuOSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxjb2xvcjpOQVZZLG1pbldpZHRoOm0/Jzk2cHgnOidhdXRvJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0sY1swXSksDQogICAgICAgICAgICAgIGVsKCdkaXYnLG51bGwsDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxtYXJnaW5Cb3R0b206JzNweCd9fSxjWzFdKSwNCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sY1syXSkpKSkpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzE0cHgnOicxOHB4JyxwYWRkaW5nOm0/JzE1cHggMTZweCc6JzE4cHggMjJweCcsYmFja2dyb3VuZDonI2VlZjJmYicsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPyc2cHgnOicxOHB4JyxhbGlnbkl0ZW1zOm0/J2ZsZXgtc3RhcnQnOidiYXNlbGluZSd9fSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjFweCcsZm9udFdlaWdodDo1MDAsY29sb3I6TkFWWSx3aGl0ZVNwYWNlOidub3dyYXAnfX0sJ0V0IGVuIGV1cm9zJyksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwnY2hhcXVlIGNvcnJlY3Rpb24gY2hpZmZyw6llLCBkdSBicnV0IGF1IG5ldCwgc3VyIHZvcyBwcm9wcmVzIHRyYW5jaGVzLicpKSksDQogICAgICAgIGVsKCdwJyx7a2V5Oidub3RlJyxzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWSxmb250U3R5bGU6J2l0YWxpYyd9fSwnQ2VzIGZvdXJjaGV0dGVzIHNvbnQgY2VsbGVzIGRlcyBkb3NzaWVycyBkw6lqw6AgY29tcG9zw6lzLiBTaSB2b3RyZSByZWxldsOpIGVzdCBqdXN0ZSwgbGUgZG9zc2llciBsZSBkaXQgYXVzc2ksIGFubsOpZSBwYXIgYW5uw6llLicpXSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA0NCUnLHdpZHRoOm0/JzEwMCUnOidhdXRvJ319LHRoaXMuZG9jU3RhY2sobSkpXSkpOw0KDQogICAgY29uc3QgYXBlcmN1cz1zZWN0KFBBUEVSLGNvbChtPycyMnB4JzonMzRweCcsWw0KICAgICAgdGhpcy5leWVicm93KCdKdWdleiBzdXIgcGnDqGNlcycpLA0KICAgICAgaDIoJ1Ryb2lzIHBhZ2VzLCB0ZWxsZXMgcXVcdTIwMTllbGxlcyBzb3J0ZW50JyxmYWxzZSwxKSwNCiAgICAgIHAoJ1VuIHN1amV0IMOgIHbDqXJpZmllciwgdm90cmUgY2FycmnDqHJlIGFubsOpZSBwYXIgYW5uw6llLCB1biBjb3VycmllciBwcsOqdCDDoCBzaWduZXIsIGRhbnMgbGV1ciBjb21wb3NpdGlvbiByw6llbGxlLicpLA0KICAgICAgbQ0KICAgICAgICA/IGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMjZweCcsbWFyZ2luVG9wOicycHgnfX0sDQogICAgICAgICAgICBBUEVSQ1VTLm1hcCgoYXAsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzEycHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnfX0sDQogICAgICAgICAgICAgIHRoaXMubWluaShpLDMwMCksDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzE1cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSxhcFswXSksDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzE0cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LGFwWzFdKSkpKQ0KICAgICAgICA6IGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOnttYXJnaW5Ub3A6JzE0cHgnfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGFsaWduSXRlbXM6J2ZsZXgtZW5kJyxoZWlnaHQ6JzU0MHB4J319LA0KICAgICAgICAgICAgICBBUEVSQ1VTLm1hcCgoYXAsaSk9PnsNCiAgICAgICAgICAgICAgICBjb25zdCBnPVtbLTksMCwwLDEsMzAwXSxbMS4yLC02NiwzMCwzLDMzOF0sWzcuNiwtNzIsMCwyLDMwNl1dW2ldOw0KICAgICAgICAgICAgICAgIHJldHVybiBlbCgnZGl2Jyx7a2V5Omksc3R5bGU6e21hcmdpbkxlZnQ6aT9nWzFdKydweCc6MCxtYXJnaW5Cb3R0b206Z1syXSsncHgnLHpJbmRleDpnWzNdLHRyYW5zZm9ybToncm90YXRlKCcrZ1swXSsnZGVnKScsdHJhbnNmb3JtT3JpZ2luOidib3R0b20gY2VudGVyJyxmaWx0ZXI6J2Ryb3Atc2hhZG93KDAgMjZweCAzNHB4IHJnYmEoMTQsMTksNzksMC4yOCkpJ319LHRoaXMubWluaShpLGdbNF0pKTsNCiAgICAgICAgICAgICAgfSkpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzE0cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6J3JlcGVhdCgzLDFmciknLGdhcDonMzBweCd9fSwNCiAgICAgICAgICAgICAgQVBFUkNVUy5tYXAoKGFwLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic2cHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nVG9wOicxMnB4J319LA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOXB4J319LGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6JzE1cHgnLGZvbnRTdHlsZTonaXRhbGljJyxjb2xvcjonI2M0MTczYSd9fSxTdHJpbmcoaSsxKSksZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSxhcFswXSkpLA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sYXBbMV0pKSkpKV0pLHtib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nNDhweCAwJzonMTIwcHggMCd9KTsNCg0KICAgIGNvbnN0IHJlbGVjdHVyZT1lbCgnc2VjdGlvbicse3N0eWxlOntiYWNrZ3JvdW5kOk5BVlkscGFkZGluZzptPyc0OHB4IDAnOic4MnB4IDAnfX0sDQogICAgICBpbm5lcihjb2wobT8nMjBweCc6JzI4cHgnLFsNCiAgICAgICAgdGhpcy5leWVicm93KCdMZSBwb2ludCBxdWkgY2hhbmdlIHRvdXQnLCcjYWFiMmVlJyxtPzExOjEyKSwNCiAgICAgICAgZWwoJ2gyJyx7a2V5OidoJyxzdHlsZTp7bWFyZ2luOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyczM3B4JzonNTZweCcsbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzZW0nLGNvbG9yOicjZmZmZmZmJyx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnTGUgZG9zc2llciBuZSBwYXJ0IHBhcyBzYW5zIHF1ZSBxdWVscXVcdTIwMTl1biBsXHUyMDE5YWl0IGx1JyksDQogICAgICAgIHAoJ1VuIG1vdGV1ciBkw6lwb3VpbGxlIHZvdHJlIHJlbGV2w6kgZXQgcG9zZSBsZXMgcXVlc3Rpb25zIHV0aWxlcy4gRW5zdWl0ZSAnK3RoaXMuZm91bmRlcigpKycgcmVwcmVuZCBsZSBkb3NzaWVyIGxpZ25lIMOgIGxpZ25lLCDDqWNhcnRlIGNlIHF1aSBuZSBzZSBkw6lmZW5kIHBhcyBkZXZhbnQgdW5lIGNhaXNzZSwgZXQgbGUgdmFsaWRlLicsdHJ1ZSksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J2InLHN0eWxlOnttYXJnaW5Ub3A6bT8nOHB4JzonMTRweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMTZweCc6JzMwcHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm0/JzIycHgnOiczMHB4Jyxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMjIpJyxib3JkZXJMZWZ0OiczcHggc29saWQgJytSRUR9fSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNHB4JzonMzJweCcsbGluZUhlaWdodDoxLjE1LGZvbnRXZWlnaHQ6NTAwLGNvbG9yOicjZmZmZmZmJyxtYXJnaW5Cb3R0b206JzEwcHgnfX0sJ1JlbWlzIHNvdXMgJyt0aGlzLmRlbGFpKCkpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOidyZ2JhKDI1NSwyNTUsMjU1LDAuNzIpJ319LCdKZSByw6lkaWdlIHZvdHJlIGJpbGFuIHJldHJhaXRlIHBlbmRhbnQgY2UgdGVtcHMtbMOgLiBDXHUyMDE5ZXN0IHByw6ljaXPDqW1lbnQgY2UgcXVlIHZvdXMgYWNoZXRlei4nKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm0/JzIycHgnOiczMHB4Jyxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMjIpJ319LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOiczMnB4JyxsaW5lSGVpZ2h0OjEuMTUsZm9udFdlaWdodDo1MDAsY29sb3I6JyNmZmZmZmYnLG1hcmdpbkJvdHRvbTonMTBweCd9fSwnUHVpcyBpbCBlc3Qgw6Agdm91cycpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOidyZ2JhKDI1NSwyNTUsMjU1LDAuNzIpJ319LCdWb3VzIHBvdXZleiBsZSB0cmFuc21ldHRyZSDDoCB2b3RyZSBjYWlzc2UsIMOgIHVuIHByb2NoZSBvdSDDoCB1biBjb25zZWlsLCBzYW5zIG1cdTIwMTllbiBpbmZvcm1lci4nKSkpXSkpKTsNCg0KICAgIGNvbnN0IHJlZ2FyZGVMaXN0PWVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LA0KICAgICAgUkVHQVJERS5tYXAoKHIsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7Ym9yZGVyVG9wOmk/JzFweCBzb2xpZCAnK0xJTkU6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZzptPycxNXB4IDAnOicxOHB4IDAnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZ2FwOm0/JzExcHgnOicxNHB4JyxhbGlnbkl0ZW1zOidiYXNlbGluZSd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6bT8nOXB4JzonMTFweCcsaGVpZ2h0Om0/JzlweCc6JzExcHgnLGJhY2tncm91bmQ6UkVELG1hcmdpblRvcDptPyc2cHgnOic3cHgnfX0pLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMTcuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNSxtYXJnaW5Cb3R0b206JzRweCd9fSxyWzBdKSwNCiAgICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpHUkVZfX0sclsxXSkpKSkpKTsNCg0KICAgIGNvbnN0IFJFR0lNRVM9WydSw6lnaW1lIGfDqW7DqXJhbCcsJ0FnaXJjLUFycmNvJywnTVNBJywnSVJDQU5URUMnLCdDSVBBVicsJ21pY3JvLXNvY2lhbCcsJ2ZvbmN0aW9uIHB1YmxpcXVlJywncsOpZ2ltZXMgc3DDqWNpYXV4JywncHJvZmVzc2lvbnMgbGliw6lyYWxlcycsJ2xlcyByw6lnaW1lcyBkZXMgaW5kw6lwZW5kYW50cyddOw0KICAgIGNvbnN0IHJlZ2ltZXM9c2VjdChQQVBFUixjb2wobT8nMTZweCc6JzIycHgnLFsNCiAgICAgIHRoaXMuZXllYnJvdygnTGVzIHLDqWdpbWVzJyksDQogICAgICBoMignMjIgcsOpZ2ltZXMgZGUgcmV0cmFpdGUsIDk1ICUgZGVzIHNpdHVhdGlvbnMnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3AnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4V3JhcDond3JhcCcsZ2FwOm0/JzdweCc6JzlweCd9fSwNCiAgICAgICAgUkVHSU1FUy5tYXAoZnVuY3Rpb24ocixpMil7IHJldHVybiBlbCgnc3Bhbicse2tleTppMixzdHlsZTp7ZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsaGVpZ2h0Om0/JzMycHgnOiczNnB4JyxwYWRkaW5nOm0/JzAgMTJweCc6JzAgMTVweCcsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzEzcHgnOicxNHB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSxyKTsgfSkpLA0KICAgICAgcCgnVm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUgbGVzIHJhc3NlbWJsZSB0b3VzIGVuIHVuIHNldWwgZG9jdW1lbnQuIEplIGxlIGxpcyBlbiBlbnRpZXIsIGV0IGpcdTIwMTlhbmFseXNlIGNoYXF1ZSBhbm7DqWUgZGFucyBsZSByw6lnaW1lIHF1aSBsYSBwb3J0ZS4nKSwNCiAgICAgIHAoJ0NcdTIwMTllc3QganVzdGVtZW50IGF1eCBjaGFuZ2VtZW50cyBkZSBzdGF0dXQgcXVlIGxlcyB0cmltZXN0cmVzIHNlIHBlcmRlbnRcdTAwYTA6IGNlIHF1XHUyMDE5dW4gcsOpZ2ltZSBjb21wdGUsIGxcdTIwMTlhdXRyZSBsXHUyMDE5aWdub3JlIHBhcmZvaXMuIFVuZSBjYXJyacOocmUgcXVpIGVzdCBwYXNzw6llIGR1IHNhbGFyaWF0IMOgIGxcdTIwMTlpbmTDqXBlbmRhbnQsIG91IGR1IHByaXbDqSBhdSBwdWJsaWMsIGVzdCBjZWxsZSBvw7kgaWwgeSBhIGxlIHBsdXMgw6AgdsOpcmlmaWVyLicpDQogICAgXSkse3BhZGRpbmc6bT8nMzRweCAwJzonNTBweCAwJ30pOw0KDQogICAgY29uc3QgYW5hbHlzZT1zZWN0KG51bGwsY29sKG0/JzIwcHgnOiczMHB4JyxbDQogICAgICB0aGlzLmV5ZWJyb3coJ0NlIHF1ZSBsXHUyMDE5YW5hbHlzZSByZWdhcmRlJyxudWxsLG51bGwsJ0lJJyksDQogICAgICBoMignTGVzIDggZW5kcm9pdHMgb8O5IHVuIHJlbGV2w6kgcGVyZCBkZXMgYW5uw6llcycsZmFsc2UsMSksDQogICAgICBwKCdSZWdhcmRleiBzaSBsXHUyMDE5dW5lIGRlIGNlcyBzaXR1YXRpb25zIGVzdCBsYSB2w7R0cmUuIENoYWN1bmUgZXN0IHBhc3PDqWUgYXUgY3JpYmxlIGFubsOpZSBwYXIgYW5uw6llLCBhdmFudCBxdWUgdm90cmUgZG9zc2llciBuZSBzb2l0IMOpY3JpdC4gTW9uIGFuYWx5c2UgbmUgY2hlcmNoZSBwYXMgc2V1bGVtZW50IGRlcyBlcnJldXJzXHUwMGEwOiBlbGxlIGNoZXJjaGUgYXVzc2kgZGVzIGRyb2l0cyBxdWkgbmUgc2UgZMOpY2xlbmNoZW50IHF1ZSBzaSBvbiBsZXMgZGVtYW5kZS4nKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonOHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzI2cHgnOic1NHB4JyxhbGlnbkl0ZW1zOidmbGV4LXN0YXJ0J319LA0KICAgICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxyZWdhcmRlTGlzdCksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J3InLHN0eWxlOntmbGV4Om0/J25vbmUnOicwIDAgMzYlJyx3aWR0aDptPycxMDAlJzonYXV0bycsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sDQogICAgICAgICAgdGhpcy52ZXJpZkNhcmQobSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1VuIGV4ZW1wbGUgY2hpZmZyw6ksIHBvdXIgbW9udHJlciBjb21tZW50IHVuZSBhbm7DqWUgZXN0IHBhc3PDqWUgYXUgY3JpYmxlXHUwMGEwOiBsZSBzYWxhaXJlIHBvcnTDqSBhdSByZWxldsOpLCBjb25mcm9udMOpIGF1IHNldWlsIHF1aSB2YWxpZGFpdCB1biB0cmltZXN0cmUgY2V0dGUgYW5uw6llLWzDoC4nKSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncHInLHN0eWxlOnttYXJnaW5Ub3A6bT8nMTJweCc6JzIwcHgnLHBhZGRpbmdUb3A6bT8nMjJweCc6JzMwcHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxNHB4JzonMThweCd9fSwNCiAgICAgICAgZWwoJ2RpdicsbnVsbCwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjRweCc6JzMycHgnLGxpbmVIZWlnaHQ6MS4wNSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjJlbScsY29sb3I6TkFWWX19LCdMYXF1ZWxsZSBkZSBjZXMgY2FycmnDqHJlcyByZXNzZW1ibGUgw6AgbGEgdsO0dHJlXHUwMGEwPycpLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPyc4cHggMCAwJzonMTBweCAwIDAnLGZvbnRTaXplOm0/JzE1cHgnOicxNnB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZLG1heFdpZHRoOic1OGNoJ319LCdDaG9pc2lzc2V6IGxhIHNpdHVhdGlvbiBsYSBwbHVzIHByb2NoZS4gTGUgZMOpdGFpbCBkZSBjZSBxdWkgZXN0IGFuYWx5c8OpIGRhbnMgY2UgY2FzIHNcdTIwMTlhZmZpY2hlIGVuIGRlc3NvdXMuJykpLA0KICAgICAgICB0aGlzLnByb2ZpbHMobSkpLA0KICAgICAgdGhpcy5wb2ludENsZShtKV0pKTs7DQoNCiAgICBjb25zdCBkb25uZWVzPXNlY3QobnVsbCxlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMjBweCc6JzUwcHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxtaW5XaWR0aDowfX0sY29sKG0/JzEwcHgnOicxMnB4JyxbdGhpcy5leWVicm93KCdWb3MgZG9ubsOpZXMnLG51bGwsbnVsbCwnVklJJyksaDIoJ0NlIHF1ZSBqZSBuZSB2b3VzIGRlbWFuZGUgamFtYWlzJyldKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzExcHgnfX0sDQogICAgICAgIFtbJ1ZvcyBpZGVudGlmaWFudHMuJywnTmkgY2V1eCBkZSB2b3RyZSBlc3BhY2UgcmV0cmFpdGUsIG5pIEZyYW5jZUNvbm5lY3QuIFBlcnNvbm5lIG5lIHNlIGNvbm5lY3RlIMOgIHZvdHJlIHBsYWNlLiddLFsnVm90cmUgbnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGUsIGNvbnNlcnbDqS4nLCdJbCBlc3QgbHUgdW5lIGZvaXMsIHBvdXIgdm90cmUgZGF0ZSBkZSBuYWlzc2FuY2UgZXQgdm90cmUgw6JnZSBsw6lnYWwgZGUgZMOpcGFydC4gU3VyIGxlcyBjb3VycmllcnMsIGNcdTIwMTllc3QgdW4gY2hhbXAgcXVlIHZvdXMgcmVtcGxpc3NleiDDoCBsYSBtYWluLiddLFsnVm90cmUgcmVsZXbDqSwgZ2FyZMOpLicsJ0xlIFBERiBlc3QgZWZmYWPDqSBkw6hzIHF1XHUyMDE5aWwgZXN0IGx1LiBDZSBxdWUgalx1MjAxOWVuIGFpIGx1IHJlc3RlIGNoaWZmcsOpLCBow6liZXJnw6kgZW4gRnJhbmNlLCBldCBzXHUyMDE5ZWZmYWNlIGVuc3VpdGUuJ11dDQogICAgICAgICAgLm1hcChmdW5jdGlvbih4LGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm0/JzEwcHgnOicxMnB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPyc5cHgnOicxMXB4J319LA0KICAgICAgICAgICAgZWwoJ3N2Zycse3dpZHRoOm0/MTU6MTYsaGVpZ2h0Om0/MTU6MTYsdmlld0JveDonMCAwIDI0IDI0JyxmaWxsOidub25lJyxzdHlsZTp7ZmxleFNocmluazowLG1hcmdpblRvcDonM3B4J319LGVsKCdjaXJjbGUnLHtjeDoxMixjeToxMixyOjEwLHN0cm9rZTpSRUQsc3Ryb2tlV2lkdGg6MS44fSksZWwoJ3BhdGgnLHtkOidNOCA4bDggOE0xNiA4bC04IDgnLHN0cm9rZTpSRUQsc3Ryb2tlV2lkdGg6MS44fSkpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSxlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzBdKSwnICcseFsxXSkpOyB9KSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNHB4Jyxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdKZSBuZSB2b3VzIGRlbWFuZGVyYWkgamFtYWlzIHZvdHJlIHJlbGV2w6kgcGFyIGUtbWFpbCBuaSBwYXIgdMOpbMOpcGhvbmUuIFNpIHF1ZWxxdVx1MjAxOXVuIHZvdXMgbGUgcsOpY2xhbWUgYXUgbm9tIGRcdTIwMTlBRENGLCBjZSBuXHUyMDE5ZXN0IHBhcyBtb2kuJyksDQogICAgICAgIGVsKCdkZXRhaWxzJyx7c3R5bGU6e21hcmdpblRvcDptPyc2cHgnOic4cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzlweCc6JzExcHgnfX0sDQogICAgICAgICAgZWwoJ3N1bW1hcnknLHtzdHlsZTp7bGlzdFN0eWxlOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGRpc3BsYXk6J2ZsZXgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzE0cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxmb250U2l6ZTptPycxNHB4JzonMTQuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sDQogICAgICAgICAgICBlbCgnc3BhbicsbnVsbCwnRXQgbGUgZG9zc2llciwgdW5lIGZvaXMgw6ljcml0XHUwMGEwPyBMZSBkw6l0YWlsJykpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZ1RvcDptPyc4cHgnOicxMHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMXB4J319LA0KICAgICAgICAgICAgW1snSWwgbmUgcGFydCBqYW1haXMgZW4gcGnDqGNlIGpvaW50ZS4nLCdWb3VzIHJlY2V2ZXogdW4gbGllbiBwZXJzb25uZWwgcG91ciBsZSB0w6lsw6ljaGFyZ2VyLCBxdWkgZXhwaXJlLiBVbiBlLW1haWwgcmVzdGUgZGVzIGFubsOpZXMgZGFucyB1bmUgYm/DrnRlLCB2b3RyZSBkb3NzaWVyIG5vbi4nXSxbJ0lsIHBvcnRlIGRlcyBkb25uw6llcyBkZSBzYW50w6kuJywnQXJyw6p0cyBkZSB0cmF2YWlsLCBhY2NpZGVudHMgZHUgdHJhdmFpbCwgaW52YWxpZGl0w6ksIG1hdGVybml0w6lcdTAwYTA6IGNlIHNvbnQgZGVzIGRvbm7DqWVzIHNlbnNpYmxlcyBhdSBzZW5zIGRlIGxcdTIwMTlhcnRpY2xlIDkgZHUgUkdQRCwgZXQgZWxsZXMgc29udCB0cmFpdMOpZXMgY29tbWUgdGVsbGVzLiddLFsnVm91cyBwb3V2ZXogdG91dCBmYWlyZSBlZmZhY2VyLicsJ1VuZSBkZW1hbmRlIMOgIGNvbnRhY3RAYWRjZi5vcmcgc3VmZml0LCBzYW5zIG1vdGlmIMOgIGRvbm5lciwgZXQgbFx1MjAxOWVmZmFjZW1lbnQgZXN0IGZhaXQgc291cyAzMCBqb3Vycy4nXV0NCiAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbih4LGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6SU5LfX0sZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0seFswXSksJyAnLHhbMV0pOyB9KSkpKSksDQogICAgICB7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMzRweCAwJzonNTZweCAwJ30pOw0KICAgIGNvbnN0IGxpc3RCbG9jaz0odGl0bGUsaXRlbXMsb2spPT5lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE2cHgnOicyMHB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMnB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnKyhvaz9OQVZZOkxJTkUpLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE0cHgnfX0sDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzExcHgnOicxMS41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpvaz9OQVZZOkdSRVl9fSx0aXRsZSkpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMnB4JzonMTRweCd9fSwNCiAgICAgICAgaXRlbXMubWFwKGZ1bmN0aW9uKHQsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sDQogICAgICAgICAgb2sNCiAgICAgICAgICAgID8gZWwoJ3N2Zycse3dpZHRoOm0/MTU6MTYsaGVpZ2h0Om0/MTU6MTYsdmlld0JveDonMCAwIDI0IDI0JyxmaWxsOidub25lJyxzdHlsZTp7ZmxleFNocmluazowLG1hcmdpblRvcDonNHB4J319LGVsKCdwYXRoJyx7ZDonTTQgMTIuNWw1IDVMMjAgNi41JyxzdHJva2U6UkVELHN0cm9rZVdpZHRoOjIuMn0pKQ0KICAgICAgICAgICAgOiBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6bT8nMTFweCc6JzEycHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOicjYjljMWQ2JyxtYXJnaW5Ub3A6bT8nMTBweCc6JzExcHgnfX0pLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpJTkt9fSx0KSk7IH0pKSk7DQoNCiAgICBjb25zdCBwb3VycXVpPXNlY3QoUEFQRVIsY29sKG0/JzIwcHgnOicyOHB4JyxbDQogICAgICB0aGlzLmV5ZWJyb3coJ8OAIHF1aSBjZWxhIHNcdTIwMTlhZHJlc3NlJyxudWxsLG51bGwsJ0lWJyksDQogICAgICBoMignQ2UgZG9zc2llciBuXHUyMDE5ZXN0IHBhcyBmYWl0IHBvdXIgdG91dCBsZSBtb25kZScpLA0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMzBweCc6JzU2cHgnLG1hcmdpblRvcDptPyc0cHgnOicxMHB4J319LA0KICAgICAgICBsaXN0QmxvY2soJ0ZhaXQgcG91ciB2b3VzIHNpJyxQT1VSVk9VUyx0cnVlKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnt3aWR0aDonMXB4JyxiYWNrZ3JvdW5kOkxJTkUsYWxpZ25TZWxmOidzdHJldGNoJyxkaXNwbGF5Om0/J25vbmUnOidibG9jayd9fSksDQogICAgICAgIGxpc3RCbG9jaygnU2FucyBkb3V0ZSBwYXMgc2knLFBBU1ZPVVMsZmFsc2UpKV0pLHtib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPyc0NHB4IDAnOic4NHB4IDAnfSk7DQoNCiAgICBjb25zdCBTQ0FMRT0zMDAwLCBwb3M9dj0+KE1hdGgubWluKHYsU0NBTEUpL1NDQUxFKjEwMCkrJyUnLCBwb3NSYXc9dj0+KHYvU0NBTEUqMTAwKSsnJSc7DQogICAgY29uc3QgYXhpc0NlbGw9KGZyb20sdG8sbWluZSk9PmVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyx3aWR0aDonMTAwJScsZmxleDonMSAxIGF1dG8nLGFsaWduU2VsZjonc3RyZXRjaCcsbWluSGVpZ2h0Om0/JzQwcHgnOic1NHB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6MCxyaWdodDowLHRvcDonNTAlJyxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDptaW5lPydyZ2JhKDE0LDE5LDc5LDAuMTQpJzonI2VjZWZmNSd9fSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDpwb3MoZnJvbSksd2lkdGg6J2NhbGMoJytwb3MoTWF0aC5taW4odG8sU0NBTEUpKSsnIC0gJytwb3MoZnJvbSkrKHRvPlNDQUxFPycgLSAxNnB4JzonJykrJyknLHRvcDonNTAlJyx0cmFuc2Zvcm06J3RyYW5zbGF0ZVkoLTUwJSknLGhlaWdodDptaW5lPyhtPycxNHB4JzonMTZweCcpOihtPycxMHB4JzonMTJweCcpLGJhY2tncm91bmQ6bWluZT9SRUQ6JyM5YWEyYzQnfX0pLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6cG9zKDI0OSksdG9wOjAsYm90dG9tOjAsd2lkdGg6JzFweCcsYmFja2dyb3VuZDptaW5lPyd0cmFuc3BhcmVudCc6J3JnYmEoMjQ1LDM3LDczLDAuNTUpJ319KSwNCiAgICAgIG1pbmU/bnVsbDplbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDpwb3MoZnJvbSksdG9wOic1MCUnLHRyYW5zZm9ybTondHJhbnNsYXRlKC01MCUsLTUwJSknLHdpZHRoOicxcHgnLGhlaWdodDptPycxOXB4JzonMjJweCcsYmFja2dyb3VuZDonIzZhNzRhNid9fSksDQogICAgICBtaW5lfHx0bz5TQ0FMRT9udWxsOmVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OnBvcyh0byksdG9wOic1MCUnLHRyYW5zZm9ybTondHJhbnNsYXRlKC01MCUsLTUwJSknLHdpZHRoOicxcHgnLGhlaWdodDptPycxOXB4JzonMjJweCcsYmFja2dyb3VuZDonIzZhNzRhNid9fSksDQogICAgICBtaW5lfHx0bz5TQ0FMRT9udWxsOmVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OidjYWxjKCcrcG9zKE1hdGgubWluKHRvLFNDQUxFKSkrJyArIDhweCknLHJpZ2h0OjAsdG9wOic1MCUnLGJvcmRlclRvcDonMXB4IGRvdHRlZCAjYzljZWRiJ319KSwNCiAgICAgIHRvPlNDQUxFP2VsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxyaWdodDonNHB4Jyx0b3A6JzUwJScsdHJhbnNmb3JtOid0cmFuc2xhdGVZKC01MCUpJyx3aWR0aDowLGhlaWdodDowLGJvcmRlclRvcDoobT8nOHB4JzonOXB4JykrJyBzb2xpZCB0cmFuc3BhcmVudCcsYm9yZGVyQm90dG9tOihtPyc4cHgnOic5cHgnKSsnIHNvbGlkIHRyYW5zcGFyZW50Jyxib3JkZXJMZWZ0OihtPyc5cHgnOicxMHB4JykrJyBzb2xpZCAjOWFhMmM0J319KTpudWxsKTsNCg0KICAgIGNvbnN0IE1JTkU9WydMXHUyMDE5YW5hbHlzZSBBRENGJyx0aGlzLnByaWNlKCksJ2NvdXJyaWVycyBldCByZWxhbmNlcyBpbmNsdXMnLDAsMjQ5LHRydWVdOw0KICAgIGNvbnN0IExJR05FUz1bTUlORV0uY29uY2F0KEFJTExFVVJTKTsNCiAgICBjb25zdCByYW5nZWU9KGEyLGkpPT57Y29uc3QgbWluZT0hIWEyWzVdLCBiZz1taW5lPycjZWVmMmZiJzondHJhbnNwYXJlbnQnLCBiZD0nMXB4IHNvbGlkICcrKG1pbmU/J3JnYmEoMTQsMTksNzksMC4xNCknOkxJTkUpOw0KICAgICAgcmV0dXJuIFsNCiAgICAgICAgZWwoJ2Rpdicse2tleTonbCcraSxzdHlsZTp7Z3JpZENvbHVtbjptPycxIC8gLTEnOidhdXRvJyxiYWNrZ3JvdW5kOmJnLHBhZGRpbmc6bT8obWluZT8nMTRweCAxNHB4IDZweCc6JzE0cHggMCA2cHgnKTonMTZweCAzMHB4IDE2cHggJysobWluZT8nMThweCc6JzAnKSxib3JkZXJMZWZ0Om1pbmU/JzNweCBzb2xpZCAnK1JFRDonbm9uZScsYm9yZGVyVG9wOmJkLGFsaWduU2VsZjonc3RyZXRjaCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzNweCcsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcid9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsY29sb3I6TkFWWSxmb250V2VpZ2h0Om1pbmU/NjAwOjQwMH19LGEyWzBdKSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxjb2xvcjonIzViNjE2YicsZm9udFN0eWxlOidpdGFsaWMnLGxpbmVIZWlnaHQ6MS40NX19LGEyWzJdKSwNCiAgICAgICAgICBpPT09Mz9lbCgnc3Bhbicse3N0eWxlOnttYXJnaW5Ub3A6JzRweCcsZm9udFNpemU6bT8nMTJweCc6JzEyLjVweCcsZm9udFdlaWdodDo2MDAsbGluZUhlaWdodDoxLjQsY29sb3I6JyNDMjE4M0EnfX0sJ1x1MjE5MSBtw6ptZSBww6lyaW3DqHRyZSBxdWUgbFx1MjAxOWFuYWx5c2UgQURDRicpOm51bGwpLA0KICAgICAgICBlbCgnZGl2Jyx7a2V5OidhJytpLHN0eWxlOntncmlkQ29sdW1uOm0/JzEgLyAtMSc6J2F1dG8nLGJhY2tncm91bmQ6YmcsYWxpZ25TZWxmOidzdHJldGNoJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGJvcmRlclRvcDptPydub25lJzpiZCxwYWRkaW5nOm0/JzAgMTRweCA4cHgnOjB9fSxheGlzQ2VsbChhMlszXSxhMls0XSxtaW5lKSksDQogICAgICAgIGVsKCdzcGFuJyx7a2V5Oid2JytpLHN0eWxlOntncmlkQ29sdW1uOm0/JzEgLyAtMSc6J2F1dG8nLGJhY2tncm91bmQ6YmcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptaW5lPyhtPycyOHB4JzonMzRweCcpOihtPycxOHB4JzonMjBweCcpLGNvbG9yOm1pbmU/TkFWWTonIzViNjE2Yicsd2hpdGVTcGFjZTonbm93cmFwJyx0ZXh0QWxpZ246bT8nbGVmdCc6J3JpZ2h0JyxhbGlnblNlbGY6J3N0cmV0Y2gnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6bT8nZmxleC1zdGFydCc6J2ZsZXgtZW5kJyxib3JkZXJUb3A6bT8nbm9uZSc6YmQscGFkZGluZzptPycwIDE0cHggMTRweCc6JzE2cHggJysobWluZT8nMThweCc6JzAnKSsnIDE2cHggMzBweCd9fSxhMlsxXSkNCiAgICAgIF07fTsNCg0KICAgIGNvbnN0IFRBUklGUz1bDQogICAgICBbJ01vbiBiaWxhbiByZXRyYWl0ZSwgY291cnJpZXJzIGV0IHJlbGFuY2VzIGNvbXByaXMnLCcyNDkg4oKsIFRUQycsdHJ1ZV0sDQogICAgICBbJ1VuIGVudHJldGllbiBkXHUyMDE5dW5lIGhldXJlIGF2ZWMgdW4gZXhwZXJ0JywnMjkwIOKCrCBIVCwgc29pdCAzNDgg4oKsIFRUQycsZmFsc2VdLA0KICAgICAgWydVbmUgYW5hbHlzZSBlbiBsaWduZSwgc2FucyBlbnRyZXRpZW4nLCczNDUg4oKsJyxmYWxzZV0sDQogICAgICBbJ1VuZSBhbmFseXNlIGVuIGxpZ25lLCBhdmVjIHVuZSBoZXVyZSBkXHUyMDE5ZXhwZXJ0JywnNjkwIOKCrCcsZmFsc2VdLA0KICAgICAgWydMYSBwcmlzZSBlbiBjaGFyZ2UgZGVzIGTDqW1hcmNoZXMgc2V1bGVzJywnw6AgcGFydGlyIGRlIDgyOCDigqwnLGZhbHNlXSwNCiAgICAgIFsnVW5lIMOpdHVkZSBjb21wbMOodGUgZW4gY2FiaW5ldCcsJ8OgIHBhcnRpciBkZSAxIDYwOCDigqwnLGZhbHNlXQ0KICAgIF07DQogICAgY29uc3QgYWlsbGV1cnM9c2VjdChQQVBFUixjb2wobT8nMThweCc6JzI2cHgnLFsNCiAgICAgIHRoaXMuZXllYnJvdygnQ2UgcXVlIGNlIHRyYXZhaWwgY2/Du3RlIGFpbGxldXJzJyxudWxsLG51bGwsJ0lWJyksDQogICAgICBoMignQ2UgcXVlIGNlIHRyYXZhaWwgY2/Du3RlIGFpbGxldXJzJyksDQogICAgICBlbCgncCcse2tleTonc3JjJyxzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTMuNXB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ1RhcmlmcyBwdWJsaWNzLCByZWxldsOpcyBsZSA2IHNlcHRlbWJyZSAyMDI2IHN1ciBsZXMgc2l0ZXMgZGUgNCBwcmVzdGF0YWlyZXMuJyksDQogICAgICBlbCgnZGl2Jyx7a2V5Oid0JyxzdHlsZTp7bWFyZ2luVG9wOm0/JzJweCc6JzZweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggc29saWQgJytMSU5FfX0sDQogICAgICAgIFRBUklGUy5tYXAoZnVuY3Rpb24oeCxpMil7IHJldHVybiBlbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDptPycxNHB4JzonMzJweCcscGFkZGluZzptPycxMnB4IDE0cHgnOicxNXB4IDI0cHgnLGJvcmRlclRvcDppMj8nMXB4IHNvbGlkICcrTElORTonbm9uZScsYmFja2dyb3VuZDp4WzJdPycjRkRFQ0VGJzondHJhbnNwYXJlbnQnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjQsY29sb3I6eFsyXT9OQVZZOkdSRVksZm9udFdlaWdodDp4WzJdPzcwMDo0MDB9fSx4WzBdKSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyh4WzJdPycyMXB4JzonMTdweCcpOih4WzJdPycyNXB4JzonMTlweCcpLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxjb2xvcjp4WzJdPycjYzQxNzNhJzpOQVZZLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0seFsxXSkpOyB9KSksDQogICAgICBlbCgncCcse2tleTonbjEnLHN0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxMy41cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpHUkVZfX0sJzMgZGUgY2VzIDUgb2ZmcmVzIG5lIHNlIGNvbmNsdWVudCBwYXMgZW4gbGlnbmVcdTAwYTA6IGlsIGZhdXQgcGFzc2VyIHBhciB1biBkZXZpcyBvdSBwYXIgdW4gcmVuZGV6LXZvdXMuIExcdTIwMTl1bmUgYW5ub25jZSB1biBkw6lsYWkgZGUgMiBtb2lzLiBBdWN1bmUgbmUgbWVudGlvbm5lIGRlIGNvdXJyaWVycyBwcsOqdHMgw6Agc2lnbmVyLicpLA0KICAgICAgZWwoJ3AnLHtrZXk6J24yJyxzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0sJ0ljaSwgbGUgcHJpeCBlc3QgYWZmaWNow6ksIGxcdTIwMTlhY2hhdCBzZSBmYWl0IGVuIGxpZ25lLCBldCBsZSBkb3NzaWVyIHZvdXMgZXN0IHJlbWlzIGF2ZWMgc2VzIGNvdXJyaWVycy4nKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J24zJyxzdHlsZTp7Ym9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELHBhZGRpbmdMZWZ0Om0/JzEycHgnOicxNXB4Jyxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkssbWF4V2lkdGg6JzcwY2gnfX0sJ1NpIGplIHN1aXMgbW9pbnMgY2hlciwgY2Ugblx1MjAxOWVzdCBwYXMgcGFyY2UgcXVlIGpcdTIwMTllbiBmYWlzIG1vaW5zLiBDXHUyMDE5ZXN0IHF1ZSB2b3VzIG5lIHBheWV6IHBhcyB1bmUgaGV1cmUgZGUgbW9uIHRlbXBzIGVuIHJlbmRlei12b3VzXHUwMGEwOiB2b3VzIHBheWV6IHVuIGRvc3NpZXIgw6ljcml0IHN1ciB2b3RyZSByZWxldsOpLCBxdWUgdm91cyBnYXJkZXogZXQgcXVlIHZvdXMgcG91dmV6IHBvc3RlciB0ZWwgcXVlbC4nKQ0KICAgIF0pLHtwYWRkaW5nOm0/JzQwcHggMCc6JzU4cHggMCd9KTsNCg0KICAgIGNvbnN0IGV0YXBlcz1zZWN0KG51bGwsY29sKG0/JzE4cHgnOicyNnB4JyxbDQogICAgICB0aGlzLmV5ZWJyb3coJ0xlIGTDqXJvdWzDqScsbnVsbCxudWxsLCdJSUknKSwNCiAgICAgIGgyKCc0IMOpdGFwZXMsIHVuZSBkaXphaW5lIGRlIG1pbnV0ZXMgZGUgdm90cmUgY8O0dMOpJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyxtYXJnaW5Ub3A6bT8nNHB4JzonMTJweCcscGFkZGluZ0xlZnQ6bT8nNDBweCc6JzU0cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0Om0/JzEzcHgnOicxN3B4Jyx0b3A6bT8nMTJweCc6JzE2cHgnLGJvdHRvbTptPycxOHB4JzonMjJweCcsd2lkdGg6JzFweCcsYmFja2dyb3VuZDonbGluZWFyLWdyYWRpZW50KDE4MGRlZywnK05BVlkrJyAwJSwgI2M5Y2VkYiAxMDAlKSd9fSksDQogICAgICAgIEVUQVBFUy5tYXAoKHN0LGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e3Bvc2l0aW9uOidyZWxhdGl2ZScscGFkZGluZ1RvcDppPyhtPycyMnB4JzonMzBweCcpOjB9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDptPyctNDBweCc6Jy01NHB4Jyx0b3A6aT8obT8nMjJweCc6JzMwcHgnKTowLHdpZHRoOm0/JzI3cHgnOiczNnB4JyxoZWlnaHQ6bT8nMjdweCc6JzM2cHgnLGJvcmRlclJhZGl1czonNTAlJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzEuNXB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTRweCc6JzE3cHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVlksYm94U2l6aW5nOidib3JkZXItYm94J319LFN0cmluZyhpKzEpKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDEuMjVmcicsZ2FwOm0/JzZweCc6JzMwcHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMThweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuM319LHN0WzBdKSwNCiAgICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkt9fSxzdFsxXSkpKSkpXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkV9KTsNCg0KICAgIGNvbnN0IHRpY2s9ZWwoJ3N2Zycse3dpZHRoOjE1LGhlaWdodDoxNSx2aWV3Qm94OicwIDAgMjQgMjQnLGZpbGw6J25vbmUnLHN0eWxlOntmbGV4U2hyaW5rOjAsbWFyZ2luVG9wOiczcHgnfX0sDQogICAgICBlbCgncGF0aCcse2Q6J000IDEyLjVsNSA1TDIwIDYuNScsc3Ryb2tlOicjMTU4MDNkJyxzdHJva2VXaWR0aDoyLjQsc3Ryb2tlTGluZWNhcDoncm91bmQnLHN0cm9rZUxpbmVqb2luOidyb3VuZCd9KSk7DQogICAgY29uc3QgbGlnbmU9KGMsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczonMTVweCAxZnInLGdhcDptPycwIDExcHgnOicwIDEzcHgnLGFsaWduSXRlbXM6J3N0YXJ0JyxwYWRkaW5nOm0/JzlweCAwJzonMTBweCAwJ319LA0KICAgICAgY1sxXT09PSdjb21wcmlzJz90aWNrOmVsKCdzcGFuJyx7c3R5bGU6e21hcmdpblRvcDonNnB4Jyx3aWR0aDonOXB4JyxoZWlnaHQ6JzEuNXB4JyxiYWNrZ3JvdW5kOkdSRVksbWFyZ2luTGVmdDonM3B4J319KSwNCiAgICAgIGVsKCdkaXYnLG51bGwsDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOk5BVll9fSxjWzBdKSwNCiAgICAgICAgY1sxXT09PSdjb21wcmlzJz9udWxsOmVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOkdSRVksbWFyZ2luVG9wOicycHgnfX0sY1sxXSkpKTsNCiAgICBjb25zdCBvYmplY3Rpb25zT2ZmcmU9ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMjJweCc6JzMwcHgnLHBhZGRpbmdUb3A6bT8nMThweCc6JzI0cHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAxZnInLGdhcDptPycxNnB4JzonMCA0MHB4J319LA0KICAgICAgW1snRXQgc2kgdm91cyBuZSB0cm91dmV6IHJpZW4gY2hleiBtb2lcdTAwYTA/JywnVW5lIGNhcnJpw6hyZSBjb21wbMOodGUsIDE5MiB0cmltZXN0cmVzIHZhbGlkw6lzIHBvdXIgMTcwIHJlcXVpcywgcHJvZHVpdCBxdWFuZCBtw6ptZSBkZXMgc3VqZXRzIGV0IGRlcyBjb3VycmllcnMuIExlIGRvc3NpZXIgcG9ydGUgZGVzIGRyb2l0cyDDoCBkZW1hbmRlciwgcGFzIHNldWxlbWVudCBkZXMgZXJyZXVycyDDoCBjb3JyaWdlci4nXSwNCiAgICAgICBbJ1BvdXJxdW9pIG5lIHBhcyBkZW1hbmRlciDDp2Egw6AgbWEgY2Fpc3NlXHUwMGEwPycsJ0xcdTIwMTllbnRyZXRpZW4gaW5mb3JtYXRpb24gcmV0cmFpdGUgZXN0IGdyYXR1aXQgZXQgaWwgdmF1dCBsYSBwZWluZSBkXHUyMDE5w6p0cmUgZGVtYW5kw6kuIElsIGNvbW1lbnRlIGNlIHF1ZSB2b3RyZSBjYWlzc2UgYSBlbnJlZ2lzdHLDqS4gSWwgbmUgY2hlcmNoZSBwYXMgY2UgcXVpIG1hbnF1ZSwgZXQgaWwgblx1MjAxOcOpY3JpdCBwYXMgbGVzIGNvdXJyaWVycy4nXV0NCiAgICAgICAgLm1hcChmdW5jdGlvbih4LGkyKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6aTIsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic2cHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuMzUsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbMF0pLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LHhbMV0pKTsgfSkpOw0KDQ0KICAgIGNvbnN0IE9GRlJFPVsNCiAgICAgICdWb3RyZSBjYXJyacOocmUgZXhhbWluw6llIGFubsOpZSBwYXIgYW5uw6llLCBhdmVjIGxlcyBwb2ludHMgw6AgdsOpcmlmaWVyIGV0IGxlcyBjb25jbHVzaW9ucyBleHBsaXF1w6llcy4nLA0KICAgICAgJ1ZvcyBkYXRlcyBkZSBkw6lwYXJ0IHBvc3NpYmxlcywgeSBjb21wcmlzIHVuIMOpdmVudHVlbCBkw6lwYXJ0IGFudGljaXDDqSwgZXQgdm9zIG1vbnRhbnRzIGVzdGltw6lzIHNlbG9uIGxlcyBzY8OpbmFyaW9zIMOpdHVkacOpcy4nLA0KICAgICAgJ0xlcyBjb3VycmllcnMgYWRhcHTDqXMgYXV4IGRlbWFuZGVzIHJldGVudWVzLCBsZXMgcGnDqGNlcyDDoCByw6l1bmlyIGV0IGxlcyDDqXRhcGVzIMOgIHN1aXZyZS4nDQogICAgXTsNCiAgICBjb25zdCBvZmZyZVRleHRlPWVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTZweCc6JzIycHgnfX0sDQogICAgICB0aGlzLmV5ZWJyb3coJ0xcdTIwMTlhbmFseXNlIEFEQ0YnLG51bGwsbnVsbCwnVicpLA0KICAgICAgZWwoJ2gyJyx7c3R5bGU6e21hcmdpbjowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMzBweCc6JzUycHgnLGxpbmVIZWlnaHQ6MS4wMixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wM2VtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdWb3RyZSBiaWxhbiByZXRyYWl0ZSBwZXJzb25uYWxpc8OpJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE2cHgnOicxOHB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSwnVm9zIGRyb2l0cywgdm90cmUgZMOpcGFydCBldCBsZXMgZMOpbWFyY2hlcyDDoCBlbmdhZ2VyLicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZ1RvcDptPycxNHB4JzonMThweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sDQogICAgICAgIE9GRlJFLm1hcChmdW5jdGlvbih0MixrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6ayxzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTFweCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEycHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzdweCd9fSksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSx0MikpOyB9KSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ0JpbGFuIHJlcHJpcyBldCByw6lkaWfDqSBwZXJzb25uZWxsZW1lbnQgcGFyICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sdGhpcy5mb3VuZGVyKCkpLCcuIFJlbWlzZSBzb3VzICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sdGhpcy5kZWxhaSgpKSwnLicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxNnB4JzonMjBweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGZsZXhXcmFwOid3cmFwJyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidmbGV4LWVuZCcsZ2FwOm0/JzE2cHgnOicyNHB4IDQwcHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzhweCcsd2hpdGVTcGFjZTonbm93cmFwJ319LA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc1MnB4JzonODBweCcsbGluZUhlaWdodDowLjg2LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjA0MmVtJyxjb2xvcjpOQVZZfX0sJzI0OSDigqwnKSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxOHB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpHUkVZfX0sJ1RUQycpKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdVbiBzZXVsIHBhaWVtZW50LCBzYW5zIGFib25uZW1lbnQuJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6bT97ZmxleDonMCAwIGF1dG8nLHdpZHRoOicxMDAlJ306e2ZsZXg6JzEgMSAzMDBweCd9fSx0aGlzLmN0YShtLCdPYnRlbmlyIG1vbiBiaWxhbiByZXRyYWl0ZScsJ1BhaWVtZW50IHPDqWN1cmlzw6kgcGFyIFN0cmlwZS4gQXVjdW4gY29tcHRlIMOgIGNyw6llci4nLHVuZGVmaW5lZCxudWxsLCdvZmZyZScpKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzEycHgnOicxNXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc4cHgnOic5cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCdBcHLDqHMgdm90cmUgY29tbWFuZGUsIHVuIHF1ZXN0aW9ubmFpcmUgY29tcGzDqHRlIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgcmVsZXbDqS4gVm91cyByZWNldmV6IHZvdHJlIGRvc3NpZXIgcGVyc29ubmFsaXPDqSBhdSBmb3JtYXQgUERGLCDDoCBjb25zdWx0ZXIgb3Ugw6AgaW1wcmltZXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgZMOpcG9zw6kgdm90cmUgcmVsZXbDqSBwbHVzIGhhdXQsIGlsIHZvdXMgc3VpdFx1MDBhMDogdm91cyBuXHUyMDE5YXZleiByaWVuIMOgIHJlZMOpcG9zZXIuJyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCdWb3VzIHNpZ25leiBldCBlbnZveWV6IGxlcyBjb3VycmllcnMuIExlcyDDqXZlbnR1ZWxzIGZyYWlzIGRcdTIwMTllbnZvaSByZXN0ZW50IMOgIHZvdHJlIGNoYXJnZSwgZGUgbFx1MjAxOW9yZHJlIGRlIDYgw6AgNyDigqwgcGFyIHJlY29tbWFuZMOpLicpKSk7DQoNCiAgICBjb25zdCBvZmZyZVZpc3VlbD1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMnB4JzonMTZweCcsYWxpZ25JdGVtczonY2VudGVyJyxwZXJzcGVjdGl2ZTonMTUwMHB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnt0cmFuc2Zvcm06bT8nbm9uZSc6J3JvdGF0ZVkoOWRlZykgcm90YXRlWCgxLjVkZWcpIHJvdGF0ZVooMWRlZyknLHRyYW5zZm9ybVN0eWxlOidwcmVzZXJ2ZS0zZCd9fSx0aGlzLmNvdmVyKG0/MjMwOjMwMCkpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxMy41cHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMDJlbScsbGluZUhlaWdodDoxLjUsY29sb3I6TkFWWSx0ZXh0QWxpZ246J2NlbnRlcid9fSwnVm90cmUgZG9zc2llciBwZXJzb25uYWxpc8OpJykpOw0KDQogICAgLy8gU3VyIHTDqWzDqXBob25lLCBsZXMgYsOpbsOpZmljZXMsIGxlIHByaXggZXQgbGUgYm91dG9uIHBhc3NlbnQgYXZhbnQgbGEgY291dmVydHVyZS4NCiAgICBjb25zdCBwcml4PWVsKCdzZWN0aW9uJyx7J2RhdGEtb2ZmcmUnOicxJywnZGF0YS1uYXYnOidvZmZyZScsc3R5bGU6e3BhZGRpbmc6bT8nNDRweCAwIDQ4cHgnOic5NnB4IDAgMTA0cHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWX19LA0KICAgICAgaW5uZXIoZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzI4cHgnOic3MHB4JyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidjZW50ZXInfX0sDQogICAgICAgIG0/W29mZnJlVGV4dGUsb2ZmcmVWaXN1ZWxdOltvZmZyZVZpc3VlbCxvZmZyZVRleHRlXSkpKTsNCgogICAgY29uc3QgcXVlc3Rpb25zPXNlY3QoUEFQRVIsY29sKG0/JzE4cHgnOicyNnB4JyxbDQogICAgICB0aGlzLmV5ZWJyb3coJ1F1ZXN0aW9ucycsbnVsbCxudWxsLCdWSScpLA0KICAgICAgaDIoJ0NlIHF1ZSBsXHUyMDE5b24gbWUgZGVtYW5kZSBsZSBwbHVzJyksDQogICAgICB0aGlzLmZhcUxpc3QobSxmYWxzZSwzKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J21vcmUnLHN0eWxlOnttYXJnaW5Ub3A6bT8nOHB4JzonMTZweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMCc6JzAgNDRweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sDQogICAgICAgIEZBUS5zbGljZSgzKS5tYXAoKGYsaSk9PmVsKCdkZXRhaWxzJyx7a2V5Omksc3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORX19LA0KICAgICAgICAgIGVsKCdzdW1tYXJ5Jyx7c3R5bGU6e2xpc3RTdHlsZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxwYWRkaW5nOm0/JzE1cHggMCc6JzE2cHggMCcsZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDonMTZweCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTdweCc6JzE4cHgnLGxpbmVIZWlnaHQ6MS4zLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVll9fSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyxudWxsLGZbMF0pLA0KKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxwYWRkaW5nOm0/JzAgMCAxNnB4JzonMCAwIDIwcHgnLG1heFdpZHRoOic2MmNoJyxmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNjUsY29sb3I6SU5LfX0sZlsxXSkpKSldKSx7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nNDRweCAwJzonNzJweCAwJ30pOw0KDQogICAgY29uc3QgcGllZD1lbCgnZm9vdGVyJyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxwYWRkaW5nOm0/JzQ4cHggMCc6JzcycHggMCd9fSwNCiAgICAgIGlubmVyKGNvbChtPycyNnB4JzonMzRweCcsWw0KICAgICAgICBlbCgnZGl2Jyx7a2V5Oid0JyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyMHB4JzonNTJweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICAgIGVsKCdoMicse3N0eWxlOnttYXJnaW46MCxtYXhXaWR0aDonMjBjaCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyczMnB4JzonNTZweCcsbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzZW0nLGNvbG9yOicjZmZmZmZmJyx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnVm90cmUgcmVsZXbDqSBlc3QgcHLDqnQuIExlIGRvc3NpZXIgc3VpdC4nKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MH19LHRoaXMuY3RhKG0sJ1ZvaXIgY2UgcXVlIHBvcnRlIG1vbiByZWxldsOpJywnVW5lIHNldWxlIGNob3NlIMOgIHByw6lwYXJlcsKgOiBsZSBQREYgZGUgdm90cmUgcmVsZXbDqS4nLHRydWUsbnVsbCwnbWlsaWV1JykpKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleToncHMnLHN0eWxlOntwYWRkaW5nOm0/JzIwcHggMCAwJzonMjZweCAwIDAnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrUkVELGZvbnRTaXplOm0/JzE1LjVweCc6JzE3cHgnLGxpbmVIZWlnaHQ6MS42NSxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjkpJyxtYXhXaWR0aDonNjZjaCd9fSwNCiAgICAgICAgICBlbCgnc3Ryb25nJyx7c3R5bGU6e2NvbG9yOicjZmZmZmZmJyxmb250V2VpZ2h0OjcwMH19LCdQLi1TLicpLCcgcGx1cyBsXHUyMDE5YW5hbHlzZSBlc3QgZmFpdGUgdMO0dCwgcGx1cyBpbCByZXN0ZSBkZSB0ZW1wcyBwb3VyIHJldHJvdXZlciBsZXMganVzdGlmaWNhdGlmcyBldCBmYWlyZSBjb3JyaWdlciB1bmUgYW5uw6llIGF2YW50IGxlIGTDqXBhcnQuIEFwcsOocyBsYSBsaXF1aWRhdGlvbiwgY2VydGFpbmVzIGNvcnJlY3Rpb25zIG5lIHNlIHJhdHRyYXBlbnQgcGx1cy4nKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleTonbCcsc3R5bGU6e21hcmdpblRvcDptPycxMnB4JzonMjBweCcscGFkZGluZ1RvcDptPycyMHB4JzonMjZweCcsYm9yZGVyVG9wOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE4KSd9fSx0aGlzLmxlZ2FsRm9vdChtLHRydWUpKV0pKSk7DQoNCiAgICBjb25zdCBmaW5DdGE9ZWwoJ3NlY3Rpb24nLHtzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmc6bT8nMjZweCAwIDMwcHgnOiczOHB4IDAgNDRweCd9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDptPycxNnB4JzonNDBweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIxcHgnOicyN3B4JyxsaW5lSGVpZ2h0OjEuMTQsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDIyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnLG1heFdpZHRoOiczMmNoJ319LCdWb3RyZSBiaWxhbiByZXRyYWl0ZSBwZXV0IHBhcnRpciBhdWpvdXJkXHUyMDE5aHVpLicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2ZsZXgtZW5kJ319LA0KICAgICAgICAgIGVsKCdhJyx7aHJlZjooU1RSSVBFICYmIFNUUklQRSE9PScjJyAmJiAhL1JFTVBMQUNFUi8udGVzdChTVFJJUEUpKT9TVFJJUEU6JyNvZmZyZScsDQogICAgICAgICAgICBvbkNsaWNrOmU9Pnt2YXIgdj0oU1RSSVBFICYmIFNUUklQRSE9PScjJyAmJiAhL1JFTVBMQUNFUi8udGVzdChTVFJJUEUpKTsgdHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0OnY/J3N0cmlwZSc6J29mZnJlJyxlbXBsYWNlbWVudDonYmFuZGVfZmFxJ30pO31jYXRjaChfKXt9IGlmKCF2KXsgaWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7IHRoaXMudG9PZmZyZShlKTsgfX0sDQogICAgICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSwNCiAgICAgICAgICAgIG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fSwNCiAgICAgICAgICAgIHN0eWxlOnt0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJyx0ZXh0RGVjb3JhdGlvbjonbm9uZScsZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsaGVpZ2h0Om0/JzU2cHgnOic2MHB4JyxwYWRkaW5nOm0/JzAgMjRweCc6JzAgMzRweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE2LjVweCc6JzE3cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLHdoaXRlU3BhY2U6J25vd3JhcCcsYm94U2hhZG93OicwIDE0cHggMzBweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjYpJ319LCdPYnRlbmlyIG1vbiBiaWxhbiByZXRyYWl0ZSwgJyt0aGlzLnByaWNlKCkpLA0KICAgICAgICAgIGVsKCdhJyx7aHJlZjonI2RpYWcnLG9uQ2xpY2s6ZT0+e2lmKGUmJmUucHJldmVudERlZmF1bHQpZS5wcmV2ZW50RGVmYXVsdCgpOyB0cnl7dHJhY2soJ2N0YV9jbGljaycse2Rlc3Q6J3ByZWFuYWx5c2UnLGVtcGxhY2VtZW50OidiYW5kZV9mYXFfbGllbl9ncmF0dWl0J30pO31jYXRjaChfKXt9IHRoaXMuc2Nyb2xsVG9EaWFnKGUpO30sDQogICAgICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1OQVZZO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9R1JFWTt9LA0KICAgICAgICAgICAgc3R5bGU6e21hcmdpblRvcDonOXB4JyxhbGlnblNlbGY6bT8nZmxleC1zdGFydCc6J2ZsZXgtZW5kJyxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6R1JFWSx0ZXh0RGVjb3JhdGlvbjonbm9uZScsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FLGN1cnNvcjoncG9pbnRlcid9fSwnb3UgZmFpcmUgbGlyZSBtb24gcmVsZXbDqSBncmF0dWl0ZW1lbnQsIGRcdTIwMTlhYm9yZCcpKSkpKTsNCg0KICAgIC8vIFVuZSBzZXVsZSBwcsOpc2VudGF0aW9uIGR1IGJpbGFuIHBheWFudCA6IGVsbGUgYWJzb3JiZSDCqyBsZXMgcXVlc3Rpb25zIGF1eHF1ZWxsZXMNCiAgICAvLyB2b3RyZSBkb3NzaWVyIHLDqXBvbmQgwrssIGV0IGxlcyA0IHBhZ2VzIG5lIHNvbnQgcGx1cyB1bmUgc2VjdGlvbiwgb24geSBhY2PDqGRlIGQnaWNpLg0KICAgIGNvbnN0IEdST1VQRVM9Ww0KICAgICAgWydWb3MgZHJvaXRzIHbDqXJpZmnDqXMnLFsNCiAgICAgICAgJ2NlIHF1ZSB2b3RyZSByZWxldsOpIGNvbXB0ZSB2cmFpbWVudCwgYW5uw6llIHBhciBhbm7DqWUnLA0KICAgICAgICAnbGVzIGFubsOpZXMgcXVpIG1hbnF1ZW50LCBldCBjZSBxdWkgcGV1dCBsXHUyMDE5ZXhwbGlxdWVyJywNCiAgICAgICAgJ2NlIHF1ZSBjaGFxdWUgY29ycmVjdGlvbiBham91dGVyYWl0LCBzaSB2b3RyZSBjYWlzc2UgbGEgcmV0aWVudCcsDQogICAgICAgICdjZSBxdWUgdm90cmUgcmV0cmFpdGUgcG91cnJhaXQgb3V2cmlyIMOgIHZvdHJlIGNvbmpvaW50LCBldCBzb3VzIHF1ZWxsZXMgY29uZGl0aW9ucycNCiAgICAgIF0sJ1F1XHUyMDE5b24gdHJvdXZlIGRpeCBlcnJldXJzIG91IGF1Y3VuZSwgdm91cyBzb3J0ZXogYXZlYyBsYSBtw6ptZSBjaG9zZVx1MDBhMDogbGEgY2VydGl0dWRlLiddLA0KICAgICAgWydWb3MgcG9zc2liaWxpdMOpcyBkZSBkw6lwYXJ0JyxbDQogICAgICAgICfDoCBxdWVsbGUgZGF0ZSB2b3VzIHBvdXJyaWV6IHBhcnRpciwgZXQgY2UgcXVlIDYgbW9pcyBkZSBwbHVzIGNoYW5nZXJhaWVudCcsDQogICAgICAgICdjb21iaWVuIHZvdXMgdG91Y2hlcmV6IGNoYXF1ZSBtb2lzLCBzZWxvbiBsZSBtb21lbnQgb8O5IHZvdXMgcGFydGV6JywNCiAgICAgICAgJ3NpIHZvdHJlIGNhcnJpw6hyZSBlbnRyZSBkYW5zIGxlcyBjb25kaXRpb25zIGRcdTIwMTl1biBkw6lwYXJ0IGFudGljaXDDqScsDQogICAgICAgICdzaSByYWNoZXRlciBkZXMgdHJpbWVzdHJlcyBhIHVuIGludMOpcsOqdCBjaGV6IHZvdXMnDQogICAgICBdLG51bGxdLA0KICAgICAgWydWb3MgZMOpbWFyY2hlcyBwcsOpcGFyw6llcycsWw0KICAgICAgICAnbGVzIGNvdXJyaWVycyBkw6lqw6Agw6ljcml0cywgYWRyZXNzw6lzIMOgIGxhIGJvbm5lIGNhaXNzZSwgw6Agc2lnbmVyIGV0IMOgIHBvc3RlcicsDQogICAgICAgICdsZXMgcGnDqGNlcyDDoCByw6l1bmlyIHBvdXIgY2hhY3VuJywNCiAgICAgICAgJ2xcdTIwMTlvcmRyZSBkZXMgZGVtYW5kZXMsIGxhIHBsdXMgZMOpdGVybWluYW50ZSBlbiBwcmVtaWVyJywNCiAgICAgICAgJ2xhIHJlbGFuY2UsIGxlIG3DqWRpYXRldXIsIGxhIGNvbW1pc3Npb24gZGUgcmVjb3VycyBhbWlhYmxlJw0KICAgICAgXSxudWxsXQ0KICAgIF07DQogICAgY29uc3QgYmVuZWZpY2VzPXNlY3QoUEFQRVIsZWwoJ2RpdicsbnVsbCxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidoJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxMHB4JzonNDZweCcsYWxpZ25JdGVtczptPydmbGV4LXN0YXJ0JzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSx0aGlzLmV5ZWJyb3coJ0NlIHF1ZSB2b3VzIGFwcG9ydGUgbGUgYmlsYW4gY29tcGxldCcsbnVsbCxudWxsLCdJJyksDQogICAgICAgICAgZWwoJ2gyJyx7c3R5bGU6e21hcmdpbjptPycxMHB4IDAgMCc6JzEycHggMCAwJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczOHB4JyxsaW5lSGVpZ2h0OjEuMDIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI2ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ1ZvcyBkcm9pdHMsIHZvdHJlIGRhdGUgZGUgZMOpcGFydCwgdm9zIGTDqW1hcmNoZXMnKSksDQogICAgICAgIG51bGwpLA0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDptPycyMnB4JzonMzJweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOidyZXBlYXQoMywxZnIpJyxnYXA6bT8nMjJweCc6JzAgNDBweCd9fSwNCiAgICAgICAgR1JPVVBFUy5tYXAoZnVuY3Rpb24oZyxrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6ayxzdHlsZTp7Ym9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE1cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxMnB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTBweCd9fSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTVweCc6JzE3cHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxjb2xvcjpSRUQsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzAnKyhrKzEpKSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLGNvbG9yOk5BVll9fSxnWzBdKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc3cHgnOic4cHgnfX0sDQogICAgICAgICAgICBnWzFdLm1hcChmdW5jdGlvbih0MixrMil7IHJldHVybiBlbCgnZGl2Jyx7a2V5OmsyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic5cHgnfX0sDQogICAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonMTBweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6JyNjOWNmZGEnLG1hcmdpbkJvdHRvbTonNnB4J319KSwNCiAgICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSx0MikpOyB9KSksDQogICAgICAgICAgZ1syXT9lbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycycHgnOiczcHgnLHBhZGRpbmdUb3A6bT8nOXB4JzonMTBweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sZ1syXSk6bnVsbCk7IH0pKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2YnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMjBweCc6JzI4cHgnLHBhZGRpbmdUb3A6bT8nMTRweCc6JzE4cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzEycHgnOic0MHB4JyxhbGlnbkl0ZW1zOm0/J2ZsZXgtc3RhcnQnOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZLG1heFdpZHRoOic2MmNoJ319LCdKXHUyMDE5YW5hbHlzZSwgamUgcsOpZGlnZSBldCBqZSBwcsOpcGFyZSB2b3MgZGVtYW5kZXMuIFZvdXMgc2lnbmV6IGV0IHZvdXMgZW52b3llei4gQ1x1MjAxOWVzdCB2b3RyZSBjYWlzc2UgcXVpIGTDqWNpZGUuJyksDQogICAgICAgIGVsKCdidXR0b24nLHtvbkNsaWNrOigpPT57IHRyeXt0cmFjaygnYXBlcmN1X2FncmFuZGknLHtwYWdlOidkZXB1aXNfYmVuZWZpY2VzJ30pO31jYXRjaChfKXt9IHRoaXMuc2V0U3RhdGUoe3pvb206MH0pOyB9LA0KICAgICAgICAgIG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPU5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0nI2M5Y2ZkYSc7fSwNCiAgICAgICAgICBzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMHB4JyxoZWlnaHQ6bT8nNDhweCc6JzUwcHgnLHBhZGRpbmc6JzAgMjBweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggc29saWQgI2M5Y2ZkYScsY29sb3I6TkFWWSxmb250U2l6ZTptPycxNC41cHgnOicxNXB4Jyxmb250V2VpZ2h0OjYwMH19LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e3dpZHRoOicxMnB4JyxoZWlnaHQ6JzE2cHgnLGJvcmRlcjonMXB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidpbmxpbmUtYmxvY2snfX0pLA0KICAgICAgICAgICdWb2lyIDQgcGFnZXMgZFx1MjAxOXVuIGRvc3NpZXIgcsOpZWwnKSkNCiAgICBdKSx7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FfSk7DQoNCiAgICAvLyBUcm9pcyDDqXRhcGVzIDogbGUgY291cnJpZXIgbidlc3QgcGFzIHVuZSByw6ljb21wZW5zZSBkZSBmaW4gZGUgcGFyY291cnMsIGlsIGVzdCBwb3PDqQ0KICAgIC8vIMOgIGPDtHTDqSBkdSByYWlzb25uZW1lbnQgcXVpIGxlIGp1c3RpZmllLg0KICAgIGNvbnN0IGNhc1RldGU9KG4sdCk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTBweCd9fSwNCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTVweCc6JzE3cHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxjb2xvcjpSRUQsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sbiksDQogICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMC41cHgnOicxMXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6R1JFWX19LHQpKTsNCiAgICBjb25zdCBjYXNQYXJhPSh0KT0+ZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkt9fSx0KTsNCg0KICAgIGNvbnN0IGNhc0NvdXJyaWVyPWVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nOm0/JzE4cHggMThweCAyMHB4JzonMjhweCAzMnB4IDMwcHgnLGJveFNoYWRvdzonMCAyNHB4IDYwcHggLTQwcHggcmdiYSgxNCwxOSw3OSwwLjM1KSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTEuNXB4JzonMTJweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWSx0ZXh0QWxpZ246J3JpZ2h0J319LCdDYWlzc2UgZFx1MjAxOWFzc3VyYW5jZSByZXRyYWl0ZScsZWwoJ2JyJyksJ2V0IGRlIGxhIHNhbnTDqSBhdSB0cmF2YWlsJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxNHB4JzonMThweCcsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjcwMCxjb2xvcjpOQVZZfX0sJ09iamV0XHUwMGEwOiBkZW1hbmRlIGRlIHLDqWd1bGFyaXNhdGlvbiBkZSBsXHUyMDE5YW5uw6llIDE5ODMnKSwNCiAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPycxMnB4IDAgMCc6JzE2cHggMCAwJyxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS43LGNvbG9yOklOS319LCdNYWRhbWUsIE1vbnNpZXVyLCcpLA0KICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzhweCAwIDAnOicxMHB4IDAgMCcsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNyxjb2xvcjpJTkt9fSwnTW9uIHJlbGV2w6kgZGUgY2FycmnDqHJlIHBvcnRlLCBwb3VyIGxcdTIwMTlhbm7DqWUgMTk4MywgdW5lIGFjdGl2aXTDqSByw6ltdW7DqXLDqWUgc2FucyBxdVx1MjAxOWF1Y3VuIHRyaW1lc3RyZSBuZSBzb2l0IHJldGVudSBhdSByw6lnaW1lIGRlIGJhc2UuIENldHRlIGFubsOpZSBjb25kaXRpb25uZSBwYXIgYWlsbGV1cnMgbFx1MjAxOWV4YW1lbiBkZSBtZXMgZHJvaXRzIMOgIHVuIGTDqXBhcnQgYW50aWNpcMOpLicpLA0KICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzhweCAwIDAnOicxMHB4IDAgMCcsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNyxjb2xvcjpJTkt9fSwnSmUgdm91cyBkZW1hbmRlIGRlIGJpZW4gdm91bG9pciBwcm9jw6lkZXIgYXUgcsOpZXhhbWVuIGRlIGNldHRlIGFubsOpZSBhdSB2dSBkZXMgcGnDqGNlcyBqb2ludGVzLCBldCBkZSBwb3J0ZXIgw6AgbW9uIGNvbXB0ZSBsZXMgdHJpbWVzdHJlcyBjb3JyZXNwb25kYW50cy4nKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzE0cHgnOicxOHB4JyxwYWRkaW5nVG9wOm0/JzEycHgnOicxNXB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOXB4JzonMTFweCd9fSwNCiAgICAgICAgWydOb20gZXQgcHLDqW5vbScsJ051bcOpcm8gZGUgc8OpY3VyaXTDqSBzb2NpYWxlJywnRGF0ZSBldCBzaWduYXR1cmUnXS5tYXAoZnVuY3Rpb24odDIsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEwcHgnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOm0/JzExMnB4JzonMTMycHgnLGZvbnRTaXplOm0/JzEycHgnOicxMi41cHgnLGNvbG9yOkdSRVl9fSx0MiksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleDoxLGJvcmRlckJvdHRvbTonMXB4IGRvdHRlZCAjYjljMWQ2JyxoZWlnaHQ6bT8nMTRweCc6JzE2cHgnfX0pKTsgfSkpKTsNCg0KICAgIGNvbnN0IGNhc0dhdWNoZT1lbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMjBweCc6JzI2cHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nVG9wOm0/JzEycHgnOicxNXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwNCiAgICAgICAgY2FzVGV0ZSgnMScsJ0NlIHF1ZSBsZSByZWxldsOpIGluZGlxdWFpdCcpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTJweCc6JzE0cHgnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxiYWNrZ3JvdW5kOicjZmZmZmZmJyxwYWRkaW5nOm0/JzExcHggMTNweCc6JzEzcHggMTZweCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI4cHgnOiczNHB4JyxsaW5lSGVpZ2h0OjAuOSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMzVlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSwnMTk4MycpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxjb2xvcjpHUkVZfX0sJ8K3JyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyOHB4JzonMzRweCcsbGluZUhlaWdodDowLjksZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDM1ZW0nLGNvbG9yOlJFRCxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSwnMCB0cmltZXN0cmUnKSksDQogICAgICAgIGNhc1BhcmEoJ0NldHRlIGFubsOpZS1sw6AgYXZhaXQgcHJvZHVpdCBkZXMgZHJvaXRzIMOgIGxhIHJldHJhaXRlIGNvbXBsw6ltZW50YWlyZSwgZG9uYyBpbCB5IGF2YWl0IGV1IGR1IHRyYXZhaWwgcsOpbXVuw6lyw6kuIEV0IHBhcyB1biBzZXVsIHRyaW1lc3RyZSB2YWxpZMOpIGF1IHLDqWdpbWUgZGUgYmFzZS4gVW5lIGxpZ25lIHBhcm1pIHF1YXJhbnRlLCBxdWUgcmllbiBuZSBtZXQgZW4gw6l2aWRlbmNlLicpKSwNCg0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZ1RvcDptPycxMnB4JzonMTVweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEzcHgnfX0sDQogICAgICAgIGNhc1RldGUoJzInLCdDZSBxdWUgbFx1MjAxOWV4YW1lbiBhIHByw6ljaXPDqScpLA0KICAgICAgICBjYXNQYXJhKCdDZXR0ZSBhbm7DqWUgcG9ydGFpdCBkZXMgZHJvaXRzIMOgIGxhIHJldHJhaXRlIGNvbXBsw6ltZW50YWlyZSwgZG9uYyB1biBzYWxhaXJlLCBldCBhdWN1biB0cmltZXN0cmUgZGUgYmFzZS4gVW4gZMOpY2FsYWdlIHF1aSBhcHBlbGxlIHVuIGV4YW1lbiwgcGFzIHVuZSBjb25jbHVzaW9uLicpLA0KICAgICAgICBjYXNQYXJhKCdUcm9pcyBzaXR1YXRpb25zIHBldXZlbnQgbFx1MjAxOWV4cGxpcXVlciBzYW5zIGVycmV1ciBkZSBsYSBjYWlzc2VcdTAwYTA6IHVuIHByZW1pZXIgZW1wbG9pIGRlIHF1ZWxxdWVzIHNlbWFpbmVzLCB1biBhcHByZW50aXNzYWdlLCBvdSB1biBzYWxhaXJlIHRyb3AgYmFzIMOgIHVuZSDDqXBvcXVlIG/DuSBsZSBzZXVpbCBkZSB2YWxpZGF0aW9uIMOpdGFpdCBiaWVuIHBsdXMgw6lsZXbDqSBxdVx1MjAxOWF1am91cmRcdTIwMTlodWkuIEF1Y3VuZSBuZSBwZXV0IMOqdHJlIGV4Y2x1ZSBzdXIgbGUgc2V1bCBkb2N1bWVudC4gQ1x1MjAxOWVzdCBwcsOpY2lzw6ltZW50IGNlIHF1aSBqdXN0aWZpZSB1bmUgZGVtYW5kZSBkZSB2w6lyaWZpY2F0aW9uLicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycycHgnOic0cHgnLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nTGVmdDptPycxM3B4JzonMTZweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOHB4JzonMTBweCd9fSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyNHB4JyxsaW5lSGVpZ2h0OjEuMjIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDoncHJldHR5J319LCdTZXB0IGFubsOpZXMgZGUgc29uIHJlbGV2w6kgYXBwZWxhaWVudCB1bmUgdsOpcmlmaWNhdGlvbi4gU2l4IHZhbGVudCBkZXMgdHJpbWVzdHJlcy4gQ2VsbGUtY2kgZXN0IGxhIHNldWxlIMOgIHNlIHNpdHVlciBhdmFudCBsYSBib3JuZSBkXHUyMDE5w6JnZSBkZSBkw6lidXQgZFx1MjAxOWFjdGl2aXTDqSBxdWkgb3V2cmUgbGEgY2FycmnDqHJlIGxvbmd1ZSwgYm9ybmUgcXVcdTIwMTllbGxlIG5cdTIwMTlhdHRlaW50IHBhcyBhdWpvdXJkXHUyMDE5aHVpLiBDXHUyMDE5ZXN0IGRvbmMgJyxlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NzAwfX0sJ2xhIHNldWxlIGRvbnQgbGEgcsOpZ3VsYXJpc2F0aW9uIHBldXQgYXZhbmNlciBzYSBkYXRlIGRlIGTDqXBhcnQnKSwnLCBldCBwYXMgc2V1bGVtZW50IGF1Z21lbnRlciBzYSBwZW5zaW9uLiBFbGxlIGVzdCBwYXNzw6llIGVuIHTDqnRlIGR1IGNvdXJyaWVyIHBvdXIgY2V0dGUgcmFpc29uLicpLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0LjVweCcsZm9udFN0eWxlOidpdGFsaWMnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0xhIGNhcnJpw6hyZSBsb25ndWUgZXhpZ2UgdW5lIHNlY29uZGUgY29uZGl0aW9uLCBsYSBkdXLDqWUgY290aXPDqWUsIHF1aSBuZSBmaWd1cmUgcGFzIHN1ciB1biByZWxldsOpLiBDXHUyMDE5ZXN0IHNhIGNhaXNzZSBxdWkgdHJhbmNoZS4nKSksDQogICAgICAgIGVsKCdkZXRhaWxzJyx7c3R5bGU6e21hcmdpblRvcDptPycycHgnOic0cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzEwcHgnOicxMnB4J319LA0KICAgICAgICAgIGVsKCdzdW1tYXJ5Jyx7c3R5bGU6e2N1cnNvcjoncG9pbnRlcicsbGlzdFN0eWxlOidub25lJyxmb250U2l6ZTptPycxMy41cHgnOicxNHB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0xlcyBkw6l0YWlscyBkZSBsYSBtw6l0aG9kZScpLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPyc5cHggMCAwJzonMTFweCAwIDAnLGZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVl9fSwnTFx1MjAxOWFubsOpZSAxOTgzIG5cdTIwMTlhIHBhcyDDqXTDqSBqdWfDqWUgYXZlYyBsZXMgcsOoZ2xlcyBkZSAyMDI2LCBtYWlzIGF2ZWMgbGUgc2V1aWwgZGUgdmFsaWRhdGlvbiBxdWkgc1x1MjAxOWFwcGxpcXVhaXQgY2V0dGUgYW5uw6llLWzDoCwgZXQgY2VsdWkgZGUgc29uIHRlcnJpdG9pcmUuIENlcyBzZXVpbHMgb250IGNoYW5nw6kgMiBmb2lzIGRlcHVpcyAxOTQ3LCBldCBwZW5kYW50IDIzIGFucyBpbHMgblx1MjAxOW9udCBwYXMgw6l0w6kgbGVzIG3Dqm1lcyBlbiBtw6l0cm9wb2xlIGV0IG91dHJlLW1lci4nKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nOHB4IDAgMCc6JzEwcHggMCAwJyxmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJzMgZMOpdGVjdGlvbnMgb250IMOpdMOpIMOpY3JpdGVzLCB2w6lyaWZpw6llcywgcHVpcyBkw6lzYWN0aXbDqWVzXHUwMGEwOiBlbGxlcyBhdXJhaWVudCBhbGFybcOpIMOgIHRvcnQgbGEgcGx1cGFydCBkZXMgbcOocmVzIGRlIGZhbWlsbGUuIEVsbGVzIHNvbnQgdG91am91cnMgZGFucyBub3MgZmljaGllcnMsIGF2ZWMgbGEgcmFpc29uIMOpY3JpdGUgZGUgbGV1ciBtaXNlIMOgIGxcdTIwMTnDqWNhcnQuJykpKSwNCg0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZ1RvcDptPycxMnB4JzonMTVweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sDQogICAgICAgIGNhc1RldGUoJzMnLCdDZSBxdVx1MjAxOWVsbGUgYSByZcOndScpLA0KICAgICAgICBjYXNQYXJhKCdMZSBjb3Vycmllciwgw6ljcml0LCBhZHJlc3PDqSDDoCBsYSBib25uZSBjYWlzc2UsIGF2ZWMgY2V0dGUgYW5uw6llIHBsYWPDqWUgZW4gdMOqdGUgZGUgZGVtYW5kZSBldCBsZXMgc2l4IGF1dHJlcyDDoCBsYSBzdWl0ZS4gRWxsZSBuXHUyMDE5YSBwbHVzIHF1XHUyMDE5w6AgbGUgc2lnbmVyIGV0IMOgIGxcdTIwMTllbnZveWVyIGVuIHJlY29tbWFuZMOpLicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzdweCc6JzhweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0sJ0V0IGxhIGxpc3RlIG5vbWluYXRpdmUgZGVzIHBpw6hjZXMgw6Agam9pbmRyZVx1MDBhMDonKSwNCiAgICAgICAgICBbJ3NlcyBidWxsZXRpbnMgZGUgcGFpZSBkZSBsXHUyMDE5YW5uw6llJywnc29uIGNvbnRyYXQgb3Ugc29uIGNlcnRpZmljYXQgZGUgdHJhdmFpbCcsJ2xlIGNvbnRyYXQgZFx1MjAxOWFwcHJlbnRpc3NhZ2UgbGUgY2FzIMOpY2jDqWFudCddLm1hcChmdW5jdGlvbih0MixrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6ayxzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTBweCd9fSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonMTJweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6UkVELG1hcmdpbkJvdHRvbTonNXB4J319KSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6TkFWWX19LHQyKSk7IH0pKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdMZSBkb3NzaWVyIGNpdGUgc2VzIHNvdXJjZXNcdTAwYTA6IHVuIGTDqWNyZXQgZGUgMjAyMywgdW4gYXJ0aWNsZSBkdSBjb2RlIGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZSwgZXQgdW5lIGNpcmN1bGFpcmUgZGUgbGEgQ25hdiBkZSBqdWluIDIwMjYuJykpKTsNCg0KICAgIGNvbnN0IGNhcz1zZWN0KG51bGwsZWwoJ2RpdicsbnVsbCxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidoJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxMHB4JzonNDZweCcsYWxpZ25JdGVtczptPydmbGV4LXN0YXJ0JzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSx0aGlzLmV5ZWJyb3coJ1VuIGNhcyBjb25jcmV0JyxudWxsLG51bGwsJ0lJJyksDQogICAgICAgICAgZWwoJ2gyJyx7c3R5bGU6e21hcmdpbjptPycxMHB4IDAgMCc6JzEycHggMCAwJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczOHB4JyxsaW5lSGVpZ2h0OjEuMDIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI2ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ1VuZSBsaWduZSBkZSAxOTgzLCBkdSByZWxldsOpIGp1c3F1XHUyMDE5YXUgY291cnJpZXInKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVksbWF4V2lkdGg6JzI2Y2gnfX0sJ0xlIG3Dqm1lIHJhaXNvbm5lbWVudCwgdGVudSBzdXIgY2hhY3VuZSBkZSB2b3MgYW5uw6llcy4nKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidnJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzIycHgnOiczMnB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzEuMjVmciAxZnInLGdhcDptPycyMnB4JzonMCA0NHB4JyxhbGlnbkl0ZW1zOidzdGFydCd9fSwNCiAgICAgICAgY2FzR2F1Y2hlLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSxtP2Nhc0NvdXJyaWVyOmVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J3N0aWNreScsdG9wOicyNHB4J319LGNhc0NvdXJyaWVyKSkpLA0KICAgICAgZWwoJ2Rpdicse2tleTonY3RhJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzI0cHgnOiczNHB4JyxwYWRkaW5nVG9wOm0/JzE4cHgnOicyNHB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDptPycxNnB4JzonNDBweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIwcHgnOicyNXB4JyxsaW5lSGVpZ2h0OjEuMTUsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZScsbWF4V2lkdGg6JzM0Y2gnfX0sJ0NlIHJhaXNvbm5lbWVudCwgdGVudSBzdXIgY2hhY3VuZSBkZSB2b3MgYW5uw6llcywgY1x1MjAxOWVzdCB2b3RyZSBiaWxhbiByZXRyYWl0ZS4nKSwNCiAgICAgICAgZWwoJ2EnLHtocmVmOihTVFJJUEUgJiYgU1RSSVBFIT09JyMnICYmICEvUkVNUExBQ0VSLy50ZXN0KFNUUklQRSkpP1NUUklQRTonI29mZnJlJywNCiAgICAgICAgICBvbkNsaWNrOmU9Pnt2YXIgdj0oU1RSSVBFICYmIFNUUklQRSE9PScjJyAmJiAhL1JFTVBMQUNFUi8udGVzdChTVFJJUEUpKTsgdHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0OnY/J3N0cmlwZSc6J29mZnJlJyxlbXBsYWNlbWVudDonYmFuZGVfY2FzJ30pO31jYXRjaChfKXt9IGlmKCF2KXsgaWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7IHRoaXMudG9PZmZyZShlKTsgfX0sDQogICAgICAgICAgb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTFweCknO30sDQogICAgICAgICAgb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9LA0KICAgICAgICAgIHN0eWxlOnt0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJyxmbGV4U2hyaW5rOjAsdGV4dERlY29yYXRpb246J25vbmUnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGhlaWdodDptPyc1NnB4JzonNjBweCcscGFkZGluZzptPycwIDI0cHgnOicwIDM0cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNi41cHgnOicxN3B4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyx3aGl0ZVNwYWNlOidub3dyYXAnLGJveFNoYWRvdzonMCAxNHB4IDMwcHggLTE0cHggcmdiYSgyNDUsMzcsNzMsMC42KSd9fSwnT2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUsICcrdGhpcy5wcmljZSgpKSkNCiAgICBdKSx7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FfSk7DQoNCiAgICAvLyBMZXMgNCBwYWdlcyBzb250IHRyb3AgcGV0aXRlcyBwb3VyIMOqdHJlIGx1ZXMgOiB1biBjbGljIGxlcyBhZ3JhbmRpdCDDoCBsJ8OpY2hlbGxlLg0KICAgIGNvbnN0IHpvb21JZHg9KHRoaXMuc3RhdGUmJnRoaXMuc3RhdGUuem9vbSE9bnVsbCk/dGhpcy5zdGF0ZS56b29tOm51bGw7DQogICAgY29uc3QgWlA9W1twYWdlQ291diwnTGEgY291dmVydHVyZSddLFtwYWdlU3VqZXQsJ1VuZSBwYWdlIGRlIHN1amV0J10sW3BhZ2VDb3VycmllciwnVW4gY291cnJpZXIgcHLDqnQgw6Agc2lnbmVyJ10sW3BhZ2VFdXJvcywnQ2UgcXVlIGNlbGEgcmVwcsOpc2VudGUgZW4gZXVyb3MnXV07DQogICAgLy8gTCfDqWNoZWxsZSBzZSBjYWxjdWxlIHN1ciBsYSBwbGFjZSBkaXNwb25pYmxlLCBqYW1haXMgc3VyIHVuZSBjb25zdGFudGUgOiBsZSBjb3Jwcw0KICAgIC8vIGRlcyBwYWdlcyAoMyw3IMOgIDQsNiBweCBkYW5zIGxlIGdhYmFyaXQpIGRvaXQgcmVzc29ydGlyIMOgIDEyIHB4IGF1IG1pbmltdW0uDQogICAgY29uc3QgQkFTRT1tPzE1MDoyMTY7DQogICAgY29uc3QgX3Z3PSh0eXBlb2Ygd2luZG93IT09J3VuZGVmaW5lZCc/d2luZG93LmlubmVyV2lkdGg6MTIwMCksIF92aD0odHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnP3dpbmRvdy5pbm5lckhlaWdodDo4MDApOw0KICAgIGNvbnN0IF9jaWJsZT1NYXRoLm1pbihfdncqMC45NCxfdmgqMC44NioyMTAvMjk3LDg2MCk7DQogICAgY29uc3Qga3o9TWF0aC5tYXgoMy42LF9jaWJsZS9CQVNFKTsNCiAgICBjb25zdCB2aXNpb25uZXVzZT0oem9vbUlkeD09bnVsbCk/bnVsbDplbCgnZGl2Jyx7b25DbGljazooKT0+dGhpcy5zZXRTdGF0ZSh7em9vbTpudWxsfSksDQogICAgICBzdHlsZTp7cG9zaXRpb246J2ZpeGVkJyxsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MCx6SW5kZXg6MTIwLGJhY2tncm91bmQ6J3JnYmEoNywxMCwzOCwwLjg2KScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGdhcDptPycxMnB4JzonMTZweCcscGFkZGluZzptPycxNnB4JzonMjhweCcsY3Vyc29yOid6b29tLW91dCd9fSwNCiAgICAgIGVsKCdkaXYnLHtvbkNsaWNrOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCksc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOm0/JzEwcHgnOicxNnB4JyxjdXJzb3I6J2RlZmF1bHQnfX0sDQogICAgICAgIGVsKCdidXR0b24nLHtvbkNsaWNrOigpPT50aGlzLnNldFN0YXRlKHt6b29tOih6b29tSWR4KzMpJTR9KSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0Jyx3aWR0aDptPyczNHB4JzonMzhweCcsaGVpZ2h0Om0/JzM0cHgnOiczOHB4Jyxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuNCknLGJhY2tncm91bmQ6J3RyYW5zcGFyZW50Jyxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6JzE2cHgnLGxpbmVIZWlnaHQ6MX19LCdcdTIwMzknKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDptPycxNTBweCc6JzIyMHB4Jyx0ZXh0QWxpZ246J2NlbnRlcicsZm9udFNpemU6bT8nMTEuNXB4JzonMTIuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNhYWIyZWUnfX0sWlBbem9vbUlkeF1bMV0rJ1x1MDBhMMK3ICcrKHpvb21JZHgrMSkrJyBzdXIgNCcpLA0KICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+dGhpcy5zZXRTdGF0ZSh7em9vbTooem9vbUlkeCsxKSU0fSksc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsd2lkdGg6bT8nMzRweCc6JzM4cHgnLGhlaWdodDptPyczNHB4JzonMzhweCcsYm9yZGVyOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQpJyxiYWNrZ3JvdW5kOid0cmFuc3BhcmVudCcsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOicxNnB4JyxsaW5lSGVpZ2h0OjF9fSwnXHUyMDNhJykpLA0KICAgICAgZWwoJ2Rpdicse29uQ2xpY2s6ZT0+e2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSxzdHlsZTp7d2lkdGg6TWF0aC5yb3VuZChCQVNFKmt6KSsncHgnLG1heFdpZHRoOic5NHZ3JyxoZWlnaHQ6TWF0aC5yb3VuZChCQVNFKmt6KjI5Ny8yMTApKydweCcsbWF4SGVpZ2h0Oic4NnZoJyxvdmVyZmxvdzonYXV0bycsV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6J3RvdWNoJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3hTaGFkb3c6JzAgNDBweCA5MHB4IC0zMHB4IHJnYmEoMCwwLDAsMC42KScsY3Vyc29yOidkZWZhdWx0J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOkJBU0UrJ3B4Jyx0cmFuc2Zvcm06J3NjYWxlKCcra3orJyknLHRyYW5zZm9ybU9yaWdpbjondG9wIGxlZnQnfX0sWlBbem9vbUlkeF1bMF0pKSwNCiAgICAgIGVsKCdidXR0b24nLHtvbkNsaWNrOigpPT50aGlzLnNldFN0YXRlKHt6b29tOm51bGx9KSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0Jyxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuNCknLGJhY2tncm91bmQ6J3RyYW5zcGFyZW50Jyxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsZm9udFdlaWdodDo2MDAscGFkZGluZzptPycxMHB4IDE4cHgnOicxMXB4IDIycHgnfX0sJ0Zlcm1lcicpKTsNCg0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e21pbkhlaWdodDonMTAwJScsYmFja2dyb3VuZDonI2ZmZmZmZid9fSxiYXIsaGVybyx0aGlzLmxlY3R1cmUobSksZWwoJ2Rpdicse2tleTonbmF2LXJlY29pcycsJ2RhdGEtbmF2JzoncmVjb2lzJ30sYmVuZWZpY2VzKSxjYXMscHJldXZlLGxldHRyZSxyZWdpbWVzLGV0YXBlcyxhaWxsZXVycyxwcml4LGVsKCdkaXYnLHtrZXk6J25hdi1xdWVzdGlvbnMnLCdkYXRhLW5hdic6J3F1ZXN0aW9ucyd9LHF1ZXN0aW9ucyksZmluQ3RhLHBpZWQsdGhpcy5zdGlja3lCYXIobSksdmlzaW9ubmV1c2UpOw0KICB9DQoNCiAgcGFnZUIobSl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICBjb25zdCBpbm5lcj1jPT5tP2VsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzonMCAyNHB4J319LGMpOmVsKCdkaXYnLHtzdHlsZTp7bWF4V2lkdGg6JzEwMDBweCcsbWFyZ2luOicwIGF1dG8nLHBhZGRpbmc6JzAgNjRweCd9fSxjKTsNCiAgICBjb25zdCBraWNrZXI9KHQsZGFyayk9PnRoaXMuZXllYnJvdyh0LGRhcms/JyNhYWIyZWUnOk5BVlksbT8xMS41OjEyLjUpOw0KICAgIGNvbnN0IGgyPSh0LGRhcmspPT5lbCgnaDInLHtzdHlsZTp7bWFyZ2luOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyOHB4JzonNDRweCcsbGluZUhlaWdodDoxLjA1LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNGVtJyxjb2xvcjpkYXJrPycjZmZmZmZmJzpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LHQpOw0KICAgIGNvbnN0IHA9KHQsZGFyayk9PmVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE1LjVweCc6JzE3LjVweCcsbGluZUhlaWdodDoxLjY4LGNvbG9yOmRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC44MiknOklOSyxtYXhXaWR0aDonNThjaCcsdGV4dFdyYXA6J3ByZXR0eSd9fSx0KTsNCiAgICBjb25zdCBjYXB0aW9uPSh0LGRhcmspPT5lbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOmRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC42KSc6R1JFWSxwYWRkaW5nVG9wOm0/JzEwcHgnOicxMnB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnKyhkYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJzpMSU5FKX19LHQpOw0KICAgIGNvbnN0IGNvbD0oZ2FwLGNoaWxkcmVuKT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDpnYXB9fSxjaGlsZHJlbik7DQogICAgY29uc3Qgcm93PShyZXYsY2hpbGRyZW4pPT5lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoocmV2Pydyb3ctcmV2ZXJzZSc6J3JvdycpLGdhcDptPycyNnB4JzonNTZweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSxjaGlsZHJlbik7DQogICAgY29uc3Qgc2VjdD0oYmcsY2hpbGRyZW4sZXh0cmEpPT5lbCgnc2VjdGlvbicse3N0eWxlOk9iamVjdC5hc3NpZ24oe3BhZGRpbmc6bT8nNDRweCAwJzonNzJweCAwJyxiYWNrZ3JvdW5kOmJnfHwndHJhbnNwYXJlbnQnfSxleHRyYXx8e30pfSxpbm5lcihjaGlsZHJlbikpOw0KDQogICAgY29uc3QgYnJhbmQ9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonOXB4JyxtYXJnaW5Cb3R0b206bT8nMnB4JzonNnB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnt3aWR0aDonMTNweCcsaGVpZ2h0OicxM3B4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK1JFRCxib3JkZXJMZWZ0OicycHggc29saWQgJytSRUR9fSksDQogICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTNweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyxjb2xvcjonI2ZmZmZmZid9fSwnQURDRicpKTsNCg0KICAgIGNvbnN0IGhlcm9MZWZ0PWNvbChtPycxNnB4JzonMjJweCcsW2JyYW5kLA0KICAgICAgZWwoJ2gxJyx7c3R5bGU6e21hcmdpbjowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMzdweCc6JzY2cHgnLGxpbmVIZWlnaHQ6MC45OCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMzJlbScsY29sb3I6JyNmZmZmZmYnLHRleHRXcmFwOidiYWxhbmNlJ319LCdTdXIgY2UgcmVsZXbDqSBkZSA0MiBhbm7DqWVzLCAxMyBzdWpldHMgw6AgZmFpcmUgdsOpcmlmaWVyLicpLA0KICAgICAgcCgnTGVzIHBvaW50cyByb3VnZXMgc29udCBsZXMgYW5uw6llcyBvw7kgbGUgY29tcHRlIG5lIHRvbWJlIHBhcyBqdXN0ZS4nLHRydWUpLA0KICAgICAgZWwoJ2Rpdicse2tleTonYycsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic4cHgnfX0sdGhpcy5jdGEobSwnQW5hbHlzZXIgbW9uIGRvc3NpZXInLCdMZWN0dXJlIGdyYXR1aXRlLCByw6lzdWx0YXQgZW4gcXVlbHF1ZXMgc2Vjb25kZXMuIExlIGJpbGFuIHJldHJhaXRlIGNvbXBsZXRcdTAwYTA6IDI0OSDigqwgVFRDLCB1bmUgc2V1bGUgZm9pcy4nLHRydWUsJ2RpYWcnLCdtaWxpZXUnKSldKTsNCg0KICAgIGNvbnN0IGhlcm9SaWdodD1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMHB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTRweCd9fSwNCiAgICAgICAgdGhpcy5leWVicm93KCdWb3MgdHJpbWVzdHJlcywgYW5uw6llIHBhciBhbm7DqWUnLCcjYWFiMmVlJyxtPzExOjExLjUpLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjonI2FhYjJlZScsZmxleFNocmluazowfX0sJzMgY3JldXgnKSksDQogICAgICB0aGlzLmN1cnZlKG0/MzMwOjYwMCxtPzE2MDoyNTAsdHJ1ZSksDQogICAgICBjYXB0aW9uKCdMZWN0dXJlIGRcdTIwMTl1biByZWxldsOpIGRlIGNhcnJpw6hyZSBhbm9ueW1pc8OpLCAxOTgyIMOgIDIwMjUuIExlIHRyYWPDqSBzdWl0IGxlcyB0cmltZXN0cmVzIGFjcXVpcywgbGVzIHJlcMOocmVzIHJvdWdlcyBzaWduYWxlbnQgbGVzIGFubsOpZXMgw6AgdsOpcmlmaWVyLicsdHJ1ZSkpOw0KDQogICAgY29uc3QgaGVybz1lbCgnaGVhZGVyJyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxwYWRkaW5nVG9wOm0/JzYycHgnOiczNHB4JyxwYWRkaW5nQm90dG9tOm0/JzQwcHgnOic2MnB4J319LA0KICAgICAgaW5uZXIoZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzI2cHgnOic1NnB4JyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidjZW50ZXInfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxoZXJvTGVmdCksaGVyb1JpZ2h0KSkpOw0KDQogICAgY29uc3QgY2hpcHM9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4V3JhcDond3JhcCcsZ2FwOm0/JzEwcHgnOicxMnB4JyxtYXJnaW5Ub3A6JzRweCd9fSwNCiAgICAgIENPTlRFTlUubWFwKChjLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e3BhZGRpbmc6bT8nOXB4IDEzcHgnOicxMXB4IDE2cHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJSYWRpdXM6Jzk5cHgnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0LjVweCcsY29sb3I6TkFWWX19LA0KICAgICAgICBlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NzAwfX0sY1swXSksJyAnLGNbMV0pKSk7DQoNCiAgICBjb25zdCBsaXZyYWJsZT1zZWN0KFBBUEVSLHJvdyhmYWxzZSxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxjb2wobT8nMTZweCc6JzIwcHgnLFtraWNrZXIoJ0xlIGxpdnJhYmxlJyksDQogICAgICAgIGgyKCdVbiBkb3NzaWVyIMOgIGxhIHRhaWxsZSBkZSB2b3RyZSBjYXJyacOocmUnKSwNCiAgICAgICAgcCgnQ2hhcXVlIHN1amV0IHRpZW50IHN1ciB1bmUgcGFnZSwgZW4gaHVpdCBibG9jc1x1MDBhMDogZHUgY29uc3RhdCBhdSBnZXN0ZSDDoCBmYWlyZSwganVzcXVcdTIwMTlhdSB0ZXh0ZSBkZSBsb2kgcXVpIGxcdTIwMTlhcHB1aWUuIExlIHJlc3RlIGR1IGRvc3NpZXIgcmVwcmVuZCB2b3RyZSBjYXJyacOocmUsIHVuZSBhbm7DqWUgYXByw6hzIGxcdTIwMTlhdXRyZS4nKSwNCiAgICAgICAgY2hpcHNdKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidyJyxzdHlsZTp7ZmxleDptPydub25lJzonMCAwIDQ0JScsd2lkdGg6bT8nMTAwJSc6J2F1dG8nfX0sdGhpcy5kb2NTdGFjayhtKSldKSx7Ym9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FfSk7DQoNCiAgICBjb25zdCBjb3VycmllcnM9c2VjdChudWxsLHJvdyh0cnVlLFsNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MH19LGNvbChtPycxNnB4JzonMjBweCcsW2tpY2tlcignTGVzIGNvdXJyaWVycycpLA0KICAgICAgICBoMignRMOpasOgIHLDqWRpZ8Opcy4gVm91cyBzaWduZXosIHZvdXMgcG9zdGV6LicpLA0KICAgICAgICBwKCdUcm9pcyDDoCBjaW5xIGNvdXJyaWVycyBzZWxvbiBsZXMgc3VqZXRzIHRyb3V2w6lzwqA6IGxhIGRlbWFuZGUgZGUgcsOpZ3VsYXJpc2F0aW9uLCBsZXMgcGnDqGNlcyDDoCByw6ljbGFtZXIsIGxhIHJlbGFuY2Ugc2kgbGEgY2Fpc3NlIG5lIHLDqXBvbmQgcGFzLiBSaWVuIMOgIGZvcm11bGVyIHZvdXMtbcOqbWUuJyksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J24nLHN0eWxlOntwYWRkaW5nOm0/JzE0cHggMTZweCc6JzE4cHggMjBweCcsYmFja2dyb3VuZDpSVElOVCxib3JkZXJMZWZ0OiczcHggc29saWQgJytSRUQsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpOQVZZfX0sJ0xlIGNoYW1wIGR1IG51bcOpcm8gZGUgc8OpY3VyaXTDqSBzb2NpYWxlIHJlc3RlIHZpZGUgc3VyIG5vcyBjb3VycmllcnMuIElsIGZpZ3VyZSBzdXIgdm90cmUgcmVsZXbDqSwgZG9uYyBpbCBlc3QgbHUsIG1haXMgaWwgblx1MjAxOWVzdCBqYW1haXMgY29uc2VydsOpwqA6IHZvdXMgbFx1MjAxOcOpY3JpdmV6IMOgIGxhIG1haW4gYXZhbnQgZGUgcG9zdGVyLicpXSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA0MCUnLHdpZHRoOm0/JzEwMCUnOidhdXRvJ319LHRoaXMubGV0dGVyQ2FyZChtKSldKSk7DQoNCiAgICBjb25zdCBib3g9KHRpdGxlLHRleHQsYWNjZW50KT0+ZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm0/JzIwcHgnOicyOHB4Jyxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMjIpJyxib3JkZXJMZWZ0OmFjY2VudD8nM3B4IHNvbGlkICcrUkVEOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMnB4JzonMjdweCcsbGluZUhlaWdodDoxLjIsZm9udFdlaWdodDo1MDAsY29sb3I6JyNmZmZmZmYnLG1hcmdpbkJvdHRvbTonOXB4J319LHRpdGxlKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOidyZ2JhKDI1NSwyNTUsMjU1LDAuNyknfX0sdGV4dCkpOw0KDQogICAgY29uc3QgcmVsZWN0dXJlPWVsKCdzZWN0aW9uJyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxwYWRkaW5nOm0/JzQ2cHggMCc6Jzc2cHggMCd9fSwNCiAgICAgIGlubmVyKGNvbChtPycyMHB4JzonMjZweCcsW2tpY2tlcignQXZhbnQgbGEgcmVtaXNlJyx0cnVlKSwNCiAgICAgICAgaDIoJ0FuYWx5c8OpLCBwdWlzIHLDqWRpZ8OpIHBhciBzb24gYXV0ZXVyJyx0cnVlKSwNCiAgICAgICAgcCgnVW4gbW90ZXVyIGTDqXBvdWlsbGUgdm90cmUgcmVsZXbDqSBldCBwb3NlIGxlcyBxdWVzdGlvbnMgdXRpbGVzLiBFbnN1aXRlICcrdGhpcy5mb3VuZGVyKCkrJywgZm9uZGF0ZXVyIGRcdTIwMTlBRENGLCByZXByZW5kIGxlIGRvc3NpZXIgbGlnbmUgw6AgbGlnbmUsIMOpY2FydGUgY2UgcXVpIG5lIHNlIGTDqWZlbmQgcGFzIGRldmFudCB1bmUgY2Fpc3NlLCBldCBsZSB2YWxpZGUuJyx0cnVlKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDptPyc2cHgnOicxMHB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAxZnInLGdhcDptPycxNnB4JzonMjhweCd9fSwNCiAgICAgICAgICBib3goJ1LDqWRpZ8OpIHNvdXMgJyt0aGlzLmRlbGFpKCksJ0plIHLDqWRpZ2Ugdm90cmUgYmlsYW4gcmV0cmFpdGUgcGVuZGFudCBjZSB0ZW1wcy1sw6AuIENcdTIwMTllc3QgcHLDqWNpc8OpbWVudCBjZSBxdWUgdm91cyBhY2hldGV6LicsdHJ1ZSksDQogICAgICAgICAgYm94KCdQdWlzIGlsIGVzdCDDoCB2b3VzJywnVm91cyBwb3V2ZXogbGUgdHJhbnNtZXR0cmUgw6Agdm90cmUgY2Fpc3NlLCDDoCB1biBwcm9jaGUgb3Ugw6AgdW4gY29uc2VpbCwgc2FucyBtXHUyMDE5ZW4gaW5mb3JtZXIuJyxmYWxzZSkpXSkpKTsNCg0KICAgIGNvbnN0IGRvbm5lZXM9c2VjdChQQVBFUixjb2wobT8nMThweCc6JzI2cHgnLFtraWNrZXIoJ1ZvcyBkb25uw6llcycpLA0KICAgICAgaDIoJ0NlIHF1ZSBqZSBuZSB2b3VzIGRlbWFuZGUgamFtYWlzJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidnJyxzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOidyZXBlYXQoMywxZnIpJyxnYXA6bT8nMTRweCc6JzI2cHgnfX0sDQogICAgICAgIEpBTUFJUy5tYXAoKGosaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDonMnB4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nMThweCc6JzIycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNX19LGpbMF0pLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOklOS319LGpbMV0pKSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncycsc3R5bGU6e21hcmdpblRvcDptPycxMnB4JzonMjBweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nMjBweCc6JzI4cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNXB4JzonMzRweCcsbGluZUhlaWdodDoxLjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWX19LCdFdCB2b3RyZSBkb3NzaWVyLCB1bmUgZm9pcyDDqWNyaXQnKSwNCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzEwcHggMCAwJzonMTJweCAwIDAnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2LjVweCcsbGluZUhlaWdodDoxLjY1LGNvbG9yOklOSyxtYXhXaWR0aDonNjJjaCd9fSwnVW4gZG9zc2llciBkXHUyMDE5YW5hbHlzZSBwb3J0ZSB2b3RyZSBub20sIHZvcyBzYWxhaXJlcyBhbm7DqWUgcGFyIGFubsOpZSwgZXQgbGVzIHDDqXJpb2RlcyBkZSBtYWxhZGllLCBkXHUyMDE5YWNjaWRlbnQgZHUgdHJhdmFpbCwgZGUgbWF0ZXJuaXTDqSBvdSBkXHUyMDE5aW52YWxpZGl0w6kgaW5zY3JpdGVzIMOgIHZvdHJlIHJlbGV2w6kuIENlIHNvbnQgZGVzIGRvbm7DqWVzIGRlIHNhbnTDqS4gSWwgZXN0IHRyYWl0w6kgY29tbWUgdGVsLicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxOHB4JzonMjRweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOidyZXBlYXQoMywxZnIpJyxnYXA6bT8nMTZweCc6JzMwcHgnfX0sDQogICAgICAgICAgW1snVW4gbGllbiBwZXJzb25uZWwsIHF1aSBleHBpcmUnLCdWb3RyZSBkb3NzaWVyIG5cdTIwMTllc3QgcGFzIGVudm95w6kgZW4gcGnDqGNlIGpvaW50ZSBkXHUyMDE5dW4gZS1tYWlsLCBvw7kgaWwgcmVzdGVyYWl0IGRlcyBhbm7DqWVzLiBWb3VzIGxlIHTDqWzDqWNoYXJnZXogZGVwdWlzIHVuIGxpZW4gdmFsYWJsZSBwb3VyIHZvdXMgc2V1bCwgZXQgcXVpIGNlc3NlIGRlIGxcdTIwMTnDqnRyZS4nXSwNCiAgICAgICAgICAgWydKYW1haXMgdm90cmUgcmVsZXbDqSBwYXIgZS1tYWlsJywnSWwgc1x1MjAxOWVudm9pZSBwYXIgbGUgZm9ybXVsYWlyZSBjaGlmZnLDqSwgamFtYWlzIHBhciBtZXNzYWdlcmllLiBFdCBpbCBuZSB2b3VzIHNlcmEgamFtYWlzIHJlZGVtYW5kw6kgdW5lIHNlY29uZGUgZm9pcy4nXSwNCiAgICAgICAgICAgWydEw6lwb3NleiBsZSByZWxldsOpIHRlbCBxdWVsJywnTmUgbW9kaWZpZXogcmllbiBhdmFudCBkZSBsZSBkw6lwb3Nlclx1MDBhMDogbGUgbnVtw6lybyBlc3QgbHUgdW5lIGZvaXMsIHBvdXIgcmV0cm91dmVyIHZvdHJlIGRhdGUgZGUgbmFpc3NhbmNlIGV0IHZvdHJlIMOiZ2UgbMOpZ2FsIGRlIGTDqXBhcnQsIGV0IGlsIG5cdTIwMTllc3QgcGFzIGNvbnNlcnbDqS4nXV0NCiAgICAgICAgICAgIC5tYXAoKHgsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzhweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE0cHgnfX0sDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzExcHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy4xNmVtJyxjb2xvcjpSRUQsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzAnKyhpKzEpKSwNCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMTYuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nfX0seFswXSksDQogICAgICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42NSxjb2xvcjpHUkVZfX0seFsxXSkpKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzIwcHgnOicyOHB4JyxwYWRkaW5nOm0/JzIwcHggMjBweCAyMnB4JzonMjZweCAzMnB4IDI4cHgnLGJhY2tncm91bmQ6TkFWWSxib3JkZXJMZWZ0Oic0cHggc29saWQgJytSRUQsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTJweCd9fSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjZmY4MDk1J319LCfDgCByZXRlbmlyJyksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6MSxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDoncmdiYSgyNTUsMjU1LDI1NSwwLjE4KSd9fSkpLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTlweCc6JzIzcHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOicjZmZmZmZmJ319LCdKZSBuZSB2b3VzIGRlbWFuZGVyYWkgamFtYWlzIHZvdHJlIHJlbGV2w6kgcGFyIGUtbWFpbCBuaSBwYXIgdMOpbMOpcGhvbmUuIFNpIHF1ZWxxdVx1MjAxOXVuIHZvdXMgbGUgcsOpY2xhbWUgYXUgbm9tIGRcdTIwMTlBRENGLCBjZSBuXHUyMDE5ZXN0IHBhcyBtb2kuJykpKV0pKTsNCg0KICAgIGNvbnN0IFJFR0lNRVM9WydSw6lnaW1lIGfDqW7DqXJhbCcsJ0FnaXJjLUFycmNvJywnTVNBJywnSVJDQU5URUMnLCdDSVBBVicsJ21pY3JvLXNvY2lhbCcsJ2ZvbmN0aW9uIHB1YmxpcXVlJywncsOpZ2ltZXMgc3DDqWNpYXV4JywncHJvZmVzc2lvbnMgbGliw6lyYWxlcycsJ2xlcyByw6lnaW1lcyBkZXMgaW5kw6lwZW5kYW50cyddOw0KICAgIGNvbnN0IHJlZ2ltZXM9c2VjdChQQVBFUixjb2wobT8nMTZweCc6JzIycHgnLFsNCiAgICAgIHRoaXMuZXllYnJvdygnTGVzIHLDqWdpbWVzJyksDQogICAgICBoMignMjIgcsOpZ2ltZXMgZGUgcmV0cmFpdGUsIDk1ICUgZGVzIHNpdHVhdGlvbnMnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3AnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4V3JhcDond3JhcCcsZ2FwOm0/JzdweCc6JzlweCd9fSwNCiAgICAgICAgUkVHSU1FUy5tYXAoZnVuY3Rpb24ocixpMil7IHJldHVybiBlbCgnc3Bhbicse2tleTppMixzdHlsZTp7ZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsaGVpZ2h0Om0/JzMycHgnOiczNnB4JyxwYWRkaW5nOm0/JzAgMTJweCc6JzAgMTVweCcsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzEzcHgnOicxNHB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSxyKTsgfSkpLA0KICAgICAgcCgnVm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUgbGVzIHJhc3NlbWJsZSB0b3VzIGVuIHVuIHNldWwgZG9jdW1lbnQuIEplIGxlIGxpcyBlbiBlbnRpZXIsIGV0IGpcdTIwMTlhbmFseXNlIGNoYXF1ZSBhbm7DqWUgZGFucyBsZSByw6lnaW1lIHF1aSBsYSBwb3J0ZS4nKSwNCiAgICAgIHAoJ0NcdTIwMTllc3QganVzdGVtZW50IGF1eCBjaGFuZ2VtZW50cyBkZSBzdGF0dXQgcXVlIGxlcyB0cmltZXN0cmVzIHNlIHBlcmRlbnRcdTAwYTA6IGNlIHF1XHUyMDE5dW4gcsOpZ2ltZSBjb21wdGUsIGxcdTIwMTlhdXRyZSBsXHUyMDE5aWdub3JlIHBhcmZvaXMuIFVuZSBjYXJyacOocmUgcXVpIGVzdCBwYXNzw6llIGR1IHNhbGFyaWF0IMOgIGxcdTIwMTlpbmTDqXBlbmRhbnQsIG91IGR1IHByaXbDqSBhdSBwdWJsaWMsIGVzdCBjZWxsZSBvw7kgaWwgeSBhIGxlIHBsdXMgw6AgdsOpcmlmaWVyLicpDQogICAgXSkse3BhZGRpbmc6bT8nMzRweCAwJzonNTBweCAwJ30pOw0KDQogICAgY29uc3QgYW5hbHlzZT1zZWN0KG51bGwsY29sKG0/JzE4cHgnOicyNnB4Jyxba2lja2VyKCdDZSBxdWUgbFx1MjAxOWFuYWx5c2UgcmVnYXJkZScpLA0KICAgICAgaDIoJ0xlcyBodWl0IGVuZHJvaXRzIG/DuSB1biByZWxldsOpIHBlcmQgZGVzIGFubsOpZXMnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAxZnInLGdhcDptPycwJzonMCA1MnB4J319LA0KICAgICAgICBSRUdBUkRFLm1hcCgocixpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTFweCc6JzE0cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE1cHggMCc6JzE4cHggMCcsYWxpZ25JdGVtczonYmFzZWxpbmUnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOm0/JzlweCc6JzExcHgnLGhlaWdodDptPyc5cHgnOicxMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Ub3A6bT8nNnB4JzonN3B4J319KSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTUuNXB4JzonMTYuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNSxtYXJnaW5Cb3R0b206JzRweCd9fSxyWzBdKSwNCiAgICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVl9fSxyWzFdKSkpKSksDQogICAgICBlbCgnZGl2Jyx7a2V5Oidwcicsc3R5bGU6e21hcmdpblRvcDptPycxMnB4JzonMThweCcscGFkZGluZ1RvcDptPycyMHB4JzonMjhweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxOHB4J319LA0KICAgICAgICBlbCgnZGl2JyxudWxsLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyM3B4JzonMzBweCcsbGluZUhlaWdodDoxLjA1LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyMmVtJyxjb2xvcjpOQVZZfX0sJ0xhcXVlbGxlIGRlIGNlcyBjYXJyacOocmVzIHJlc3NlbWJsZSDDoCBsYSB2w7R0cmVcdTAwYTA/JyksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzhweCAwIDAnOicxMHB4IDAgMCcsZm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVksbWF4V2lkdGg6JzU4Y2gnfX0sJ0Nob2lzaXNzZXogbGEgc2l0dWF0aW9uIGxhIHBsdXMgcHJvY2hlLiBMZSBkw6l0YWlsIGRlIGNlIHF1aSBlc3QgYW5hbHlzw6kgZGFucyBjZSBjYXMgc1x1MjAxOWFmZmljaGUgZW4gZGVzc291cy4nKSksDQogICAgICAgIHRoaXMucHJvZmlscyhtKSksDQogICAgICB0aGlzLnBvaW50Q2xlKG0pXSkpOw0KDQogICAgY29uc3QgZXRhcGVzPXNlY3QobnVsbCxjb2wobT8nMThweCc6JzI2cHgnLFtraWNrZXIoJ0xlIGTDqXJvdWzDqScpLA0KICAgICAgaDIoJzQgw6l0YXBlcywgdW5lIGRpemFpbmUgZGUgbWludXRlcyBkZSB2b3RyZSBjw7R0w6knKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nfX0sDQogICAgICAgIEVUQVBFUy5tYXAoKHMsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMTdweCAwJzonMjJweCAwJyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzMwcHggMWZyJzonNTJweCAxZnIgMS4yZnInLGdhcDptPycwIDEycHgnOicwIDI4cHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjNweCcsZm9udFdlaWdodDo1MDAsY29sb3I6TkFWWX19LCcwJysoaSsxKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMTcuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNX19LHNbMF0pLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPyc2cHggMCAwJzowLGdyaWRDb2x1bW46bT8nMic6J2F1dG8nLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkt9fSxzWzFdKSkpKV0pKTsNCg0KICAgIGNvbnN0IGNvbXByaXNMaXN0PWVsKCdkaXYnLHtzdHlsZTp7ZmxleDptPydub25lJzonMCAwIDQ2JScsd2lkdGg6bT8nMTAwJSc6J2F1dG8nLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbid9fSwNCiAgICAgIENPTVBSSVMubWFwKChjLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzEzcHggMCc6JzE1cHggMCcsZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDonMTZweCcsYWxpZ25JdGVtczonYmFzZWxpbmUnfX0sDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS40NX19LGNbMF0pLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpjWzFdPT09J2NvbXByaXMnPycjMTU4MDNkJzpHUkVZLGZsZXhTaHJpbms6MH19LGNbMV0pKSkpOw0KDQogICAgY29uc3QgcHJpeExlZnQ9ZWwoJ2Rpdicse3N0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MH19LGNvbChtPycxNnB4JzonMjBweCcsW2tpY2tlcignTGUgcHJpeCcpLA0KICAgICAgZWwoJ2Rpdicse2tleToncCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTJweCc6JzE2cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc1NHB4JzonNzZweCcsbGluZUhlaWdodDowLjksZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDNlbScsY29sb3I6TkFWWX19LHRoaXMucHJpY2UoKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnZW4gdW5lIGZvaXMsJyxlbCgnYnInKSwnc2FucyBhYm9ubmVtZW50JykpLA0KICAgICAgZWwoJ2Rpdicse2tleTonYyd9LHRoaXMuY3RhKG0sJ1ZvaXIgY2UgcXVlIHBvcnRlIG1vbiByZWxldsOpJywnUGFpZW1lbnQgc8OpY3VyaXPDqSBwYXIgU3RyaXBlLCBwYXMgZGUgY29tcHRlIMOgIGNyw6llci4gVm91cyBlbnZveWV6IHZvdHJlIHJlbGV2w6kganVzdGUgYXByw6hzLCBkZXB1aXMgbGEgcGFnZSBkZSBjb25maXJtYXRpb24uJyx1bmRlZmluZWQsbnVsbCwnbWlsaWV1JykpXSkpOw0KDQogICAgY29uc3Qgb2JqZWN0aW9uc09mZnJlPWVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzIycHgnOiczMHB4JyxwYWRkaW5nVG9wOm0/JzE4cHgnOicyNHB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMTZweCc6JzAgNDBweCd9fSwNCiAgICAgIFtbJ0V0IHNpIHZvdXMgbmUgdHJvdXZleiByaWVuIGNoZXogbW9pXHUwMGEwPycsJ1VuZSBjYXJyacOocmUgY29tcGzDqHRlLCAxOTIgdHJpbWVzdHJlcyB2YWxpZMOpcyBwb3VyIDE3MCByZXF1aXMsIHByb2R1aXQgcXVhbmQgbcOqbWUgZGVzIHN1amV0cyBldCBkZXMgY291cnJpZXJzLiBMZSBkb3NzaWVyIHBvcnRlIGRlcyBkcm9pdHMgw6AgZGVtYW5kZXIsIHBhcyBzZXVsZW1lbnQgZGVzIGVycmV1cnMgw6AgY29ycmlnZXIuJ10sDQogICAgICAgWydQb3VycXVvaSBuZSBwYXMgZGVtYW5kZXIgw6dhIMOgIG1hIGNhaXNzZVx1MDBhMD8nLCdMXHUyMDE5ZW50cmV0aWVuIGluZm9ybWF0aW9uIHJldHJhaXRlIGVzdCBncmF0dWl0IGV0IGlsIHZhdXQgbGEgcGVpbmUgZFx1MjAxOcOqdHJlIGRlbWFuZMOpLiBJbCBjb21tZW50ZSBjZSBxdWUgdm90cmUgY2Fpc3NlIGEgZW5yZWdpc3Ryw6kuIElsIG5lIGNoZXJjaGUgcGFzIGNlIHF1aSBtYW5xdWUsIGV0IGlsIG5cdTIwMTnDqWNyaXQgcGFzIGxlcyBjb3VycmllcnMuJ11dDQogICAgICAgIC5tYXAoZnVuY3Rpb24oeCxpMil7IHJldHVybiBlbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNnB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjM1LGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzBdKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVl9fSx4WzFdKSk7IH0pKTsNCg0KICAgIGNvbnN0IHByaXg9ZWwoJ3NlY3Rpb24nLHsnZGF0YS1vZmZyZSc6JzEnLCdkYXRhLW5hdic6J29mZnJlJyxzdHlsZTp7cGFkZGluZzptPyc0NHB4IDAnOic3MnB4IDAnLGJhY2tncm91bmQ6UEFQRVIsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX19LGlubmVyKHJvdyhmYWxzZSxbcHJpeExlZnQsY29tcHJpc0xpc3RdKSkpOw0KDQogICAgY29uc3QgcXVlc3Rpb25zPXNlY3QobnVsbCxjb2wobT8nMThweCc6JzI0cHgnLFtraWNrZXIoJ1F1ZXN0aW9ucycpLA0KICAgICAgaDIoJ0NlIHF1ZSBsXHUyMDE5b24gbWUgZGVtYW5kZSBsZSBwbHVzJyksDQogICAgICB0aGlzLmZhcUxpc3QobSxmYWxzZSldKSk7DQoNCiAgICBjb25zdCBwaWVkPWVsKCdmb290ZXInLHtzdHlsZTp7YmFja2dyb3VuZDpOQVZZLHBhZGRpbmc6bT8nNDJweCAwIDQ2cHgnOic2MnB4IDAgNjZweCd9fSwNCiAgICAgIGlubmVyKGNvbChtPycyNnB4JzonMzJweCcsWw0KICAgICAgICBlbCgnZGl2Jyx7a2V5Oid0JyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxOHB4JzonNDhweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICAgIGgyKCdWb3RyZSByZWxldsOpIGVzdCBwcsOqdC4gTGUgZG9zc2llciBzdWl0LicsdHJ1ZSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4U2hyaW5rOjB9fSx0aGlzLmN0YShtLCdWb2lyIGNlIHF1ZSBwb3J0ZSBtb24gcmVsZXbDqScsJ1VuZSBzZXVsZSBjaG9zZSDDoCBwcsOpcGFyZXLCoDogbGUgUERGIGRlIHZvdHJlIHJlbGV2w6kuJyx0cnVlLG51bGwsJ2ZpbmFsJykpKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e2hlaWdodDonMXB4JyxiYWNrZ3JvdW5kOidyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJ319KSwNCiAgICAgICAgZWwoJ2Rpdicse2tleTonbCd9LHRoaXMubGVnYWxGb290KG0sdHJ1ZSkpXSkpKTsNCg0KICAgIGNvbnN0IHRvcEJhcj1tP251bGw6ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonc3RpY2t5Jyx0b3A6MCx6SW5kZXg6MjAsYmFja2dyb3VuZDonIzA4MGMyYycsYm9yZGVyQm90dG9tOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWF4V2lkdGg6JzEwNjBweCcsbWFyZ2luOicwIGF1dG8nLHBhZGRpbmc6JzAgNjBweCcsaGVpZ2h0Oic3MHB4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzE2cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEwcHgnLG1pbldpZHRoOjAsZmxleFNocmluazowLG1hcmdpblJpZ2h0Om0/JzAnOicyOHB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzEycHgnLGhlaWdodDonMTJweCcsYm9yZGVyVG9wOicycHggc29saWQgJytSRUQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELGZsZXhTaHJpbms6MH19KSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTMuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLGNvbG9yOicjZmZmZmZmJ319LCdBRENGJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTonMTUuNXB4Jyxjb2xvcjonI2FhYjJlZScscGFkZGluZ0xlZnQ6JzE4cHgnLG1hcmdpbkxlZnQ6JzZweCcsYm9yZGVyTGVmdDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSd9fSwnQW5hbHlzZSBkdSByZWxldsOpIGRlIGNhcnJpw6hyZScpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMjBweCcsZmxleFNocmluazowfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHsnZGF0YS1wcmljZSc6JzEnLHN0eWxlOntmb250U2l6ZTonMTRweCcsY29sb3I6JyNmZmZmZmYnLGZvbnRXZWlnaHQ6NjAwLHdoaXRlU3BhY2U6J25vd3JhcCcsb3BhY2l0eTowLHRyYW5zZm9ybTondHJhbnNsYXRlWSgtM3B4KScsdHJhbnNpdGlvbjonb3BhY2l0eSAuNDVzIGVhc2UsdHJhbnNmb3JtIC40NXMgZWFzZSd9fSx0aGlzLnByaWNlKCksZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFdlaWdodDo0MDAsY29sb3I6JyNhYWIyZWUnfX0sJ1x1MDBhMCBzb3VzICcrdGhpcy5kZWxhaSgpKSksDQogICAgICAgICAgZWwoJ2EnLHtocmVmOicjb2ZmcmUnLG9uQ2xpY2s6ZT0+dGhpcy50b09mZnJlKGUpLG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fSxzdHlsZTp7dHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSwgdHJhbnNmb3JtIC4xOHMgZWFzZScsdGV4dERlY29yYXRpb246J25vbmUnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTonMTVweCcsZm9udFdlaWdodDo2MDAsaGVpZ2h0Oic0NnB4JyxwYWRkaW5nOicwIDI0cHgnLHdoaXRlU3BhY2U6J25vd3JhcCcsYm94U2hhZG93OicwIDEwcHggMjRweCAtMTJweCByZ2JhKDI0NSwzNyw3MywwLjU1KSd9fSwnT2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUnKSkpKTsNCg0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e21pbkhlaWdodDonMTAwJScsYmFja2dyb3VuZDonI2ZmZmZmZid9fSx0b3BCYXIsaGVybyxhbmFseXNlLGxpdnJhYmxlLGNvdXJyaWVycyxyZWxlY3R1cmUsZWwoJ2Rpdicse2tleTonbmF2LWRvbm5lZXMnLCdkYXRhLW5hdic6J2Rvbm5lZXMnfSxkb25uZWVzKSxldGFwZXMscHJpeCxlbCgnZGl2Jyx7a2V5OiduYXYtcXVlc3Rpb25zJywnZGF0YS1uYXYnOidxdWVzdGlvbnMnfSxxdWVzdGlvbnMpLHRoaXMubWlkQ3RhKG0sJ0lsIHZvdXMgcmVzdGUgdW5lIHF1ZXN0aW9uIHNhbnMgcsOpcG9uc2VcdTAwYTA/IMOJY3JpdmV6LW1vaS4gU2lub24sIHZvdHJlIGJpbGFuIHJldHJhaXRlIHBldXQgcGFydGlyIGF1am91cmRcdTIwMTlodWkuJyx7ZW1wOidiYW5kZV9mYXEnfSkscGllZCx0aGlzLnN0aWNreUJhcihtKSk7DQogIH0NCg0KICBzY3JvbGxlcihub2RlKXsNCiAgICB2YXIgc2MgPSBub2RlOw0KICAgIHdoaWxlIChzYyAmJiBzYyAhPT0gZG9jdW1lbnQuYm9keSkgew0KICAgICAgdmFyIG95ID0gZ2V0Q29tcHV0ZWRTdHlsZShzYykub3ZlcmZsb3dZOw0KICAgICAgaWYgKChveSA9PT0gJ2F1dG8nIHx8IG95ID09PSAnc2Nyb2xsJykgJiYgc2Muc2Nyb2xsSGVpZ2h0ID4gc2MuY2xpZW50SGVpZ2h0ICsgNCkgcmV0dXJuIHNjOw0KICAgICAgc2MgPSBzYy5wYXJlbnRFbGVtZW50Ow0KICAgIH0NCiAgICByZXR1cm4gbnVsbDsNCiAgfQ0KDQogIGdvVG8odGd0KXsNCiAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLXBhZ2UnKSB8fCBkb2N1bWVudDsNCiAgICB2YXIgc2VjcyA9IGhvc3QucXVlcnlTZWxlY3RvckFsbCgnc2VjdGlvbicpOw0KICAgIGZvciAodmFyIGk9MDtpPHNlY3MubGVuZ3RoO2krKyl7IHNlY3NbaV0uc3R5bGUub3BhY2l0eT0nMSc7IHNlY3NbaV0uc3R5bGUuYW5pbWF0aW9uPSdub25lJzsgc2Vjc1tpXS5kYXRhc2V0LnJ2PScxJzsgfQ0KICAgIHZhciBzYyA9IHRoaXMuc2Nyb2xsZXIodGd0KTsNCiAgICB2YXIgeSA9IHRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7DQogICAgaWYgKHNjKSBzYy5zY3JvbGxUbyh7IHRvcDogeSAtIHNjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHNjLnNjcm9sbFRvcCAtIDEyLCBiZWhhdmlvcjonYXV0bycgfSk7DQogICAgZWxzZSB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHkgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSAxMiwgYmVoYXZpb3I6J2F1dG8nIH0pOw0KICB9DQoNCiAganVtcFRvKGUsbmVlZGxlKXsNCiAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1wYWdlJykgfHwgZG9jdW1lbnQ7DQogICAgdmFyIHRndCA9IFtdLnNsaWNlLmNhbGwoaG9zdC5xdWVyeVNlbGVjdG9yQWxsKCdzZWN0aW9uJykpLmZpbHRlcihmdW5jdGlvbihzKXsgcmV0dXJuIChzLmlubmVyVGV4dHx8JycpLmluZGV4T2YobmVlZGxlKSA+IC0xOyB9KVswXTsNCiAgICBpZiAodGd0KSB0aGlzLmdvVG8odGd0KTsNCiAgfQ0KDQogIGxlY3R1cmUobSxwbGFjZSl7IHJldHVybiBwbGFjZT09PSdoZXJvJyA/IG51bGwgOiBfSC5jcmVhdGVFbGVtZW50KCdkaXYnLHtpZDonYWRjZi1sZWN0dXJlJyxzdHlsZTp7bWluSGVpZ2h0OicwcHgnfX0pOyB9DQoNCiAgcG9wdXBSZWxldmUobSl7DQogICAgaWYodGhpcy5zdGF0ZS5wb3B1cCE9PShtPydtJzonZCcpKSByZXR1cm4gbnVsbDsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50Ow0KICAgIGNvbnN0IE5BVlk9JyMwRTEzNEYnLCBSRUQ9JyNGNTI1NDknLCBHUkVZPScjNkM3MTc5JywgSU5LPScjMWMyMjMwJywgTElORT0nI2U1ZTdlYic7DQogICAgY29uc3QgU0VSSUY9IidOZXdzcmVhZGVyJywgR2VvcmdpYSwgc2VyaWYiOw0KICAgIGNvbnN0IGZlcm1lcj0oKT0+dGhpcy5zZXRTdGF0ZSh7cG9wdXA6ZmFsc2UscG9wdXBNYWlsT2s6ZmFsc2V9KTsNCiAgICBjb25zdCBFVEFQRVM9Ww0KICAgICAgWydBbGxleiBzdXIgJywnaW5mby1yZXRyYWl0ZS5mcicsJywgb3UgJywnbGFzc3VyYW5jZXJldHJhaXRlLmZyJywnIHNpIHZvdXMgYXZleiB0b3Vqb3VycyDDqXTDqSBzYWxhcmnDqSddLA0KICAgICAgWydDb25uZWN0ZXotdm91cyDDoCB2b3RyZSBlc3BhY2UgcGVyc29ubmVsLCAnLCdGcmFuY2VDb25uZWN0JywnIGZvbmN0aW9ubmUsIGF2ZWMgdm9zIGlkZW50aWZpYW50cyBkZXMgaW1ww7R0cyBvdSBkZSBsXOKAmUFzc3VyYW5jZSBtYWxhZGllJ10sDQogICAgICBbJ091dnJleiAnLCfCq1zCoE1vbiByZWxldsOpIGRlIGNhcnJpw6hyZVzCoMK7JywnJywnJywnJ10sDQogICAgICBbJ1TDqWzDqWNoYXJnZXogbGUgUERGLCAnLCdzYW5zIGxlIG1vZGlmaWVyIG5pIGxlIHJlbm9tbWVyJywnJywnJywnJ10NCiAgICBdOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7b25DbGljazpmZXJtZXIsc3R5bGU6e3Bvc2l0aW9uOidmaXhlZCcsaW5zZXQ6MCx6SW5kZXg6OTAwLGJhY2tncm91bmQ6J3JnYmEoMTQsMTksNzksMC41NSknLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6bT8nZmxleC1lbmQnOidmbGV4LXN0YXJ0JyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxwYWRkaW5nOm0/JzAnOiczMnB4JyxvdmVyZmxvd1k6J2F1dG8nfX0sDQogICAgICBlbCgnZGl2Jyx7b25DbGljazplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHN0eWxlOntib3hTaXppbmc6J2JvcmRlci1ib3gnLG1hcmdpbjptPycwJzonYXV0bycsd2lkdGg6JzEwMCUnLG1heFdpZHRoOm0/J25vbmUnOic1NjBweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQsYm94U2hhZG93OicwIDQwcHggOTBweCAtMzBweCByZ2JhKDE0LDE5LDc5LDAuNTUpJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzBweCAzNHB4IDMycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxNnB4JyxtYXhIZWlnaHQ6bT8nOTJ2aCc6J25vbmUnLG92ZXJmbG93WTptPydhdXRvJzondmlzaWJsZSd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidmbGV4LXN0YXJ0JyxnYXA6JzE2cHgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnT8O5IHRyb3V2ZXIgdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUnKSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOic2cHgnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnRW52aXJvbiA1IG1pbnV0ZXMsIGdyYXR1aXRlbWVudCwgc3VyIGxlIHNpdGUgb2ZmaWNpZWwuJykpLA0KICAgICAgICAgIGVsKCdidXR0b24nLHtvbkNsaWNrOmZlcm1lciwnYXJpYS1sYWJlbCc6J0Zlcm1lcicsb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2VlZjJmYic7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPU5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmZmZmJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9TElORTt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYmFja2dyb3VuZDonI2ZmZmZmZicsY3Vyc29yOidwb2ludGVyJyxmbGV4U2hyaW5rOjAsd2lkdGg6JzM0cHgnLGhlaWdodDonMzRweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxjb2xvcjpOQVZZLGZvbnRTaXplOicxN3B4JyxsaW5lSGVpZ2h0OjEsZm9udEZhbWlseTonaW5oZXJpdCcsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMThzIGVhc2UsIGJvcmRlci1jb2xvciAuMThzIGVhc2UnfX0sJ1zDlycpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LA0KICAgICAgICAgIEVUQVBFUy5tYXAoKHgsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZ2FwOm0/JzEycHgnOicxNHB4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScscGFkZGluZzptPycxMXB4IDAnOicxMnB4IDAnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX19LA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTlweCc6JzIxcHgnLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxjb2xvcjonI2M0MTczYScsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnLG1pbldpZHRoOicxNnB4J319LFN0cmluZyhpKzEpKSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwNCiAgICAgICAgICAgICAgeFswXSxlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzFdKSx4WzJdLHhbM10/ZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0seFszXSk6bnVsbCx4WzRdKSkpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMH19LCdSZXZlbmV6IGVuc3VpdGUgaWNpIGV0IGTDqXBvc2V6LWxlLicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzE0cHgnOicxNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LA0KICAgICAgICAgIHRoaXMuc3RhdGUucG9wdXBNYWlsT2sNCiAgICAgICAgICAgID8gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNXB4J319LA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdDXOKAmWVzdCBlbnZvecOpLicpLA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnVm91cyByZWNldmV6IGxhIG1hcmNoZSDDoCBzdWl2cmUgZGFucyB1biBpbnN0YW50LiBSaWVuIGRc4oCZYXV0cmUgbmUgdm91cyBzZXJhIGVudm95w6kuJykpDQogICAgICAgICAgICA6IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOXB4JzonMTBweCd9fSwNCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNS41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnVm91cyBwcsOpZsOpcmV6IGxlIGZhaXJlIHBsdXMgdGFyZFzCoD8nKSwNCiAgICAgICAgICAgICAgICBlbCgnZm9ybScse29uU3VibWl0OmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIHY9ZS50YXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXQnKTt0aGlzLnByZXZlbmlyKHY/di52YWx1ZTonJywncGFzX2RlX3JlbGV2ZScpO3RoaXMuc2V0U3RhdGUoe3BvcHVwTWFpbE9rOnRydWV9KTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LA0KICAgICAgICAgICAgICAgICAgZWwoJ2lucHV0Jyx7dHlwZTonZW1haWwnLHJlcXVpcmVkOnRydWUscGxhY2Vob2xkZXI6J1ZvdHJlIGFkcmVzc2UgZS1tYWlsJywnYXJpYS1sYWJlbCc6J1ZvdHJlIGFkcmVzc2UgZS1tYWlsJyxzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDE0cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGNvbG9yOklOSyxvdXRsaW5lOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0pLA0KICAgICAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J3N1Ym1pdCcsb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTFweCknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsZmxleFNocmluazowLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAyMHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsYm94U2hhZG93OicwIDEycHggMjZweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjYpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJ319LCdFbnZveWV6LW1vaSBsYSBtYXJjaGUgw6Agc3VpdnJlJykpLA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdVbiBzZXVsIG1lc3NhZ2UsIGF2ZWMgbGVzIMOpdGFwZXMuIFJpZW4gZFzigJlhdXRyZS4nKSkpKSk7DQogIH0NCg0KICBzY3JvbGxUb0RpYWcoZXYpew0KICAgIC8vIGxhIG1hcXVldHRlIHJlbmQgbGVzIHF1YXRyZSB2YXJpYW50ZXMgZGFucyBsZSBtw6ptZSBkb2N1bWVudCA6DQogICAgLy8gb24gcGFydCBkdSBib3V0b24gY2xpcXXDqSBwb3VyIHJlc3RlciBkYW5zIGxhIGJvbm5lIGNvbG9ubmUuDQogICAgY29uc3Qgc3JjPWV2JiZldi5jdXJyZW50VGFyZ2V0Ow0KICAgIGlmKHNyYyl7DQogICAgICBsZXQgcz1zcmMucGFyZW50RWxlbWVudDsNCiAgICAgIHdoaWxlKHMmJmdldENvbXB1dGVkU3R5bGUocykub3ZlcmZsb3dZIT09J2F1dG8nKSBzPXMucGFyZW50RWxlbWVudDsNCiAgICAgIHRoaXMuX3NjPXN8fG51bGw7IHRoaXMuX3NyYz1zcmM7DQogICAgfQ0KICAgIHNldFRpbWVvdXQoKCk9PnsNCiAgICAgIGNvbnN0IHJhY2luZT10aGlzLl9zY3x8ZG9jdW1lbnQ7DQogICAgICBjb25zdCB0Z3Q9cmFjaW5lLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpYWddJyl8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpYWddJyk7DQogICAgICBpZighdGd0KSByZXR1cm47DQogICAgICBsZXQgc2M9dGhpcy5fc2M7DQogICAgICBpZighc2MpeyBzYz10Z3QucGFyZW50RWxlbWVudDsgd2hpbGUoc2MmJmdldENvbXB1dGVkU3R5bGUoc2MpLm92ZXJmbG93WSE9PSdhdXRvJykgc2M9c2MucGFyZW50RWxlbWVudDsgfQ0KICAgICAgaWYoc2Mpew0KICAgICAgICBzYy5xdWVyeVNlbGVjdG9yQWxsKCdzZWN0aW9uJykuZm9yRWFjaChzPT57cy5zdHlsZS5vcGFjaXR5PScxJztzLnN0eWxlLmFuaW1hdGlvbj0nbm9uZSc7cy5kYXRhc2V0LnJ2PScxJzt9KTsNCiAgICAgICAgY29uc3QgdG9wPXRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Atc2MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3NjLnNjcm9sbFRvcDsNCiAgICAgICAgc2Muc2Nyb2xsVG8oe3RvcDp0b3AtMTQsYmVoYXZpb3I6J3Ntb290aCd9KTsNCiAgICAgIH1lbHNlew0KICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDp0Z3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3dpbmRvdy5zY3JvbGxZLTE0LGJlaGF2aW9yOidzbW9vdGgnfSk7DQogICAgICB9DQogICAgfSw2MCk7DQogIH0NCg0KICB0b09mZnJlKGUpew0KICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLXBhZ2UnKSB8fCBkb2N1bWVudDsNCiAgICB2YXIgdGd0ID0gaG9zdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1vZmZyZV0nKTsNCiAgICBpZiAodGd0KSB0aGlzLmdvVG8odGd0KTsNCiAgfQ0KDQogIHNldFN0YXRlKHBhdGNoKXsNCiAgICB2YXIgbmV4dCA9IHR5cGVvZiBwYXRjaCA9PT0gJ2Z1bmN0aW9uJyA/IHBhdGNoKHRoaXMuc3RhdGUpIDogcGF0Y2g7DQogICAgZm9yICh2YXIgayBpbiBuZXh0KSB0aGlzLnN0YXRlW2tdID0gbmV4dFtrXTsNCiAgICB0aGlzLnJlbmRlcih0cnVlKTsNCiAgfQ0KDQogIHJlbmRlcihrZWVwVmlzaWJsZSl7DQogICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1wYWdlJyk7DQogICAgdmFyIHkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7DQogICAgaG9zdC50ZXh0Q29udGVudCA9ICcnOw0KICAgIGhvc3QuYXBwZW5kQ2hpbGQodGhpcy5wYWdlQSh0aGlzLm1vYmlsZSkpOw0KICAgIGlmIChrZWVwVmlzaWJsZSl7IHRoaXMucmV2ZWFsQWxsKCk7IHdpbmRvdy5zY3JvbGxUbygwLCB5KTsgfQ0KICAgIGVsc2UgdGhpcy53aXJlKCk7DQogICAgdGhpcy5vblNjcm9sbCgpOw0KICB9DQoNCiAgbW91bnQoKXsNCiAgICB2YXIgX19zPXRoaXM7IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgdHJ5e19fcy53aXJlR0EoKTt9Y2F0Y2goZSl7fSB9LCAwKTsNCiAgICB2YXIgc2VsZiA9IHRoaXM7DQogICAgdmFyIG1xID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6ICcgKyAoQlJFQUstMSkgKyAncHgpJyk7DQogICAgdGhpcy5tb2JpbGUgPSBtcS5tYXRjaGVzOw0KICAgIHRoaXMucmVuZGVyKGZhbHNlKTsNCiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbigpew0KICAgICAgaWYgKG1xLm1hdGNoZXMgPT09IHNlbGYubW9iaWxlKSByZXR1cm47DQogICAgICBzZWxmLm1vYmlsZSA9IG1xLm1hdGNoZXM7DQogICAgICBzZWxmLnJlbmRlcihmYWxzZSk7DQogICAgfTsNCiAgICBpZiAobXEuYWRkRXZlbnRMaXN0ZW5lcikgbXEuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25DaGFuZ2UpOw0KICAgIGVsc2UgbXEuYWRkTGlzdGVuZXIob25DaGFuZ2UpOw0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbigpew0KICAgICAgaWYgKHNlbGYuX3JhZikgcmV0dXJuOw0KICAgICAgc2VsZi5fcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7IHNlbGYuX3JhZiA9IDA7IHNlbGYub25TY3JvbGwoKTsgfSk7DQogICAgfSwgeyBwYXNzaXZlOnRydWUgfSk7DQogICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBzZWxmLm9uU2Nyb2xsKCk7IH0sIDMwMCk7DQ0KICAgIHRoaXMud2lyZUJhcnJlKCk7CiAgfQ0KDQogIG9uU2Nyb2xsKCl7DQogICAgdmFyIGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICB2YXIgbWF4ID0gZG9jLnNjcm9sbEhlaWdodCAtIHdpbmRvdy5pbm5lckhlaWdodDsNCiAgICB2YXIgcGN0ID0gbWF4ID4gMCA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCh3aW5kb3cucGFnZVlPZmZzZXQgLyBtYXggKiAxMDApKSA6IDA7DQogICAgdmFyIGJhcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYWRjZi1wYWdlIFtkYXRhLXByb2ddJyk7DQogICAgZm9yICh2YXIgaT0wO2k8YmFycy5sZW5ndGg7aSsrKSBiYXJzW2ldLnN0eWxlLndpZHRoID0gcGN0ICsgJyUnOw0KICAgIC8vIExlIHByaXggZXQgbGUgYm91dG9uIGRlIGxhIGJhcnJlIG4nYXBwYXJhaXNzZW50IHF1J3VuZSBmb2lzIGxlIG1vZHVsZSBzb3J0aSBkdSBjaGFtcCA6DQogICAgLy8gdGFudCBxdSdlbGxlIHZvaXQgbCdhY3Rpb24sIGxhIGJhcnJlIG5lIGRvaXQgcGFzIGx1aSBlbiBwcm9wb3NlciB1bmUgZGV1eGnDqG1lLg0KICAgIHZhciBtb2QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1sZWN0dXJlIFtkYXRhLWRpYWddLCAjYWRjZi1wYWdlIFtkYXRhLWRpYWddJyk7DQogICAgdmFyIG9uOw0KICAgIGlmIChtb2QpIHsgdmFyIHIgPSBtb2QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IG9uID0gci5ib3R0b20gPCA4OyB9DQogICAgZWxzZSB7IG9uID0gd2luZG93LnBhZ2VZT2Zmc2V0ID4gd2luZG93LmlubmVySGVpZ2h0ICogMS4xNTsgfQ0KICAgIHZhciBwcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNhZGNmLXBhZ2UgW2RhdGEtcHJpY2VdLCAjYWRjZi1wYWdlIFtkYXRhLWN0YS1oYXV0XScpOw0KICAgIGZvciAodmFyIGo9MDtqPHBzLmxlbmd0aDtqKyspew0KICAgICAgcHNbal0uc3R5bGUub3BhY2l0eSA9IG9uID8gJzEnIDogJzAnOw0KICAgICAgcHNbal0uc3R5bGUudHJhbnNmb3JtID0gb24gPyAnbm9uZScgOiAndHJhbnNsYXRlWSgtM3B4KSc7DQogICAgICBwc1tqXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gb24gPyAnYXV0bycgOiAnbm9uZSc7DQogICAgICBpZiAocHNbal0uZ2V0QXR0cmlidXRlKCdkYXRhLXByaWNlJykgPT09ICdjb2xsYXBzZScpIHBzW2pdLnN0eWxlLm1heFdpZHRoID0gb24gPyAnMTEwcHgnIDogJzBweCc7DQogICAgfQ0KICAgIC8vIFByb2ZvbmRldXIgZGUgZMOpZmlsZW1lbnQgw6AgbGEgbGlnbmUgZGUgZmxvdHRhaXNvbiwgdW5lIHNldWxlIGZvaXMuDQogICAgaWYgKCF0aGlzLl9mb2xkU2VudCkgew0KICAgICAgdmFyIGZvbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1wYWdlIFtkYXRhLWZvbGRdJyk7DQogICAgICBpZiAoZm9sZCAmJiBmb2xkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNSkgew0KICAgICAgICB0aGlzLl9mb2xkU2VudCA9IHRydWU7DQogICAgICAgIHRyeSB7IHRyYWNrKCdmb2xkX3Bhc3NlJywge30pOyB9IGNhdGNoIChlKSB7fQ0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIHJldmVhbEFsbCgpew0KICAgIHZhciBzZWNzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2FkY2YtcGFnZSBzZWN0aW9uJyk7DQogICAgZm9yICh2YXIgaT0wO2k8c2Vjcy5sZW5ndGg7aSsrKXsgc2Vjc1tpXS5kYXRhc2V0LnJ2ID0gJzEnOyBzZWNzW2ldLnN0eWxlLm9wYWNpdHkgPSAnJzsgc2Vjc1tpXS5zdHlsZS5hbmltYXRpb24gPSAnJzsgfQ0KICB9DQoNCiAgd2lyZUJhcnJlKCl7DQogICAgdmFyIHNlbGY9dGhpczsNCiAgICBpZihzZWxmLl9fYmFycmUpIHJldHVybjsNCiAgICBzZWxmLl9fYmFycmU9dHJ1ZTsNCiAgICAvLyBMZSBET00gZXN0IHJlY29uc3RydWl0IMOgIGNoYXF1ZSByZW5kdSA6IG9uIHJlbGl0IGxlIGJvdXRvbiDDoCBjaGFxdWUgcGFzc2FnZQ0KICAgIC8vIHBsdXTDtHQgcXVlIGQnZW4gZ2FyZGVyIHVuZSByw6lmw6lyZW5jZSwgcXVpIGRldmllbmRyYWl0IHVuIG5vZXVkIGTDqXRhY2jDqS4NCiAgICB2YXIgbWFqPWZ1bmN0aW9uKCl7DQogICAgICB2YXIgYz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1wYWdlIGhlYWRlciBidXR0b24nKTsNCiAgICAgIHZhciBzb3J0aT1jPyhjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTwwKTood2luZG93LnBhZ2VZT2Zmc2V0PjQwMCk7DQogICAgICBpZighIXNlbGYuc3RhdGUuYmFycmVWaXNpYmxlIT09c29ydGkpeyBzZWxmLnN0YXRlLmJhcnJlVmlzaWJsZT1zb3J0aTsgdmFyIF9iYj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1wYWdlIFtkYXRhLXN0aWNreV0nKTsgaWYoX2JiKXsgX2JiLnN0eWxlLm9wYWNpdHk9c29ydGk/JzEnOicwJzsgX2JiLnN0eWxlLnRyYW5zZm9ybT1zb3J0aT8ndHJhbnNsYXRlWSgwKSc6J3RyYW5zbGF0ZVkoMTEwJSknOyBfYmIuc3R5bGUucG9pbnRlckV2ZW50cz1zb3J0aT8nYXV0byc6J25vbmUnOyB9IH0gdHJ5eyB2YXIgX21zdD0od2luZG93Ll9fYWRjZkxlY3R1cmUmJndpbmRvdy5fX2FkY2ZMZWN0dXJlLnN0YXRlKXx8e307IHZhciBfbUE9X21zdC5hcGVyY3V8fHt9OyB2YXIgX2Jmcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1wYWdlIFtkYXRhLWJhci1mcmVlXScpOyB2YXIgX2JieT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1wYWdlIFtkYXRhLWJhci1idXldJyk7IGlmKF9iZnImJl9iYnkpeyB2YXIgX3NwPV9iZnIucXVlcnlTZWxlY3RvckFsbCgnc3BhbicpOyBpZihfbXN0LmRpYWc9PT0ncmVzdWx0YXQnJiZfbUEudmVycm91aWxsZSYmIV9tQS5hZHJlc3NlX2Nvbm51ZSl7IF9iZnIuc3R5bGUuZGlzcGxheT0nZmxleCc7IGlmKF9zcFswXSlfc3BbMF0udGV4dENvbnRlbnQ9J1ZvaXIgbWVzIHBvaW50cyc7IGlmKF9zcFsxXSlfc3BbMV0udGV4dENvbnRlbnQ9J1x1MDBlMCB2XHUwMGU5cmlmaWVyJzsgX2JieS5zdHlsZS5mbGV4PScxLjI1IDEgMCc7IH0gZWxzZSBpZihfbXN0LmRpYWc9PT0ncmVzdWx0YXQnKXsgX2Jmci5zdHlsZS5kaXNwbGF5PSdub25lJzsgX2JieS5zdHlsZS5mbGV4PScxIDEgMCc7IH0gZWxzZSB7IF9iZnIuc3R5bGUuZGlzcGxheT0nZmxleCc7IGlmKF9zcFswXSlfc3BbMF0udGV4dENvbnRlbnQ9J1ByXHUwMGU5LWFuYWx5c2UnOyBpZihfc3BbMV0pX3NwWzFdLnRleHRDb250ZW50PSdncmF0dWl0ZSc7IF9iYnkuc3R5bGUuZmxleD0nMS4yNSAxIDAnOyB9IH0gfWNhdGNoKF9lKXt9DQogICAgfTsNCiAgICBtYWooKTsNCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJyxtYWose3Bhc3NpdmU6dHJ1ZX0pOw0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLG1haik7DQogIH0NCg0KICB3aXJlKCl7DQogICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpLm1hdGNoZXMpIHJldHVybjsNCiAgICB2YXIgc2VjcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNhZGNmLXBhZ2Ugc2VjdGlvbicpOw0KICAgIGZvciAodmFyIGk9MDtpPHNlY3MubGVuZ3RoO2krKyl7DQogICAgICB2YXIgc2VjID0gc2Vjc1tpXTsNCiAgICAgIGlmIChzZWMuZGF0YXNldC5ydikgY29udGludWU7DQogICAgICBzZWMuZGF0YXNldC5ydiA9ICcxJzsNCiAgICAgIGlmIChzZWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIDwgd2luZG93LmlubmVySGVpZ2h0KSBjb250aW51ZTsNCiAgICAgIHNlYy5zdHlsZS5vcGFjaXR5ID0gJzAnOw0KICAgICAgKGZ1bmN0aW9uKHRhcmdldCl7DQogICAgICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlbnRyaWVzKXsNCiAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7DQogICAgICAgICAgICBpZiAoIWUuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsNCiAgICAgICAgICAgIGUudGFyZ2V0LnN0eWxlLmFuaW1hdGlvbiA9ICdyZXZlYWxVcCAuN3MgY3ViaWMtYmV6aWVyKC4yLC43LC4zLDEpIGJvdGgnOw0KICAgICAgICAgICAgaW8udW5vYnNlcnZlKGUudGFyZ2V0KTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgfSwgeyByb290TWFyZ2luOicwcHggMHB4IC0xMiUgMHB4JywgdGhyZXNob2xkOjAuMDQgfSk7DQogICAgICAgIGlvLm9ic2VydmUodGFyZ2V0KTsNCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpew0KICAgICAgICAgIGlmICh0YXJnZXQuc3R5bGUub3BhY2l0eSA9PT0gJzAnKSB7IHRhcmdldC5zdHlsZS5vcGFjaXR5ID0gJyc7IHRhcmdldC5zdHlsZS5hbmltYXRpb24gPSAnJzsgaW8udW5vYnNlcnZlKHRhcmdldCk7IH0NCiAgICAgICAgfSwgMTYwMCk7DQogICAgICB9KShzZWMpOw0KICAgIH0NDQogICAgdGhpcy53aXJlQmFycmUoKTsKICB9DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgUFLDiS1BTkFMWVNFLCBiYWNrYm9uZSBkZSBjw6JibGFnZSAow6AgaW50w6lncmVyIGRhbnMgbGEgY2xhc3NlIFBhZ2UpDQogICBFbmRwb2ludCA6IFBPU1QgaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvYXBlcmN1IChtdWx0aXBhcnQsIDEgZmljaGllcikNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQp2YXIgQVBFUkNVX1VSTCA9ICdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy9hcGVyY3UnOw0KdmFyIFBSRVZFTklSX1VSTCA9ICdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy9hcGVyY3UvcHJldmVuaXInOw0KDQovKiAtLS0gR0E0IDogZW52b2kgZCfDqXbDqW5lbWVudCwgdG9sw6lyYW50IChndGFnIG91IGRhdGFMYXllcikgLS0tICovDQpmdW5jdGlvbiB0cmFjayhuYW1lLCBwYXJhbXMpIHsgdHJ5IHsgaWYgKHR5cGVvZiBmYnEgPT09ICdmdW5jdGlvbicpIGZicSgndHJhY2tDdXN0b20nLCBuYW1lLCBwYXJhbXMgfHwge30pOyB9IGNhdGNoKGUpIHt9DQogIHRyeSB7DQogICAgaWYgKHR5cGVvZiB3aW5kb3cuZ3RhZyA9PT0gJ2Z1bmN0aW9uJykgeyB3aW5kb3cuZ3RhZygnZXZlbnQnLCBuYW1lLCBwYXJhbXMgfHwge30pOyByZXR1cm47IH0NCiAgICB3aW5kb3cuZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTsNCiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goT2JqZWN0LmFzc2lnbih7IGV2ZW50OiBuYW1lIH0sIHBhcmFtcyB8fCB7fSkpOw0KICB9IGNhdGNoIChlKSB7fQ0KfQ0KDQovKiAtLS0gbGVjdHVyZSBkZXMgY29va2llcyBHQSBwb3VyIGwnYXR0cmlidXRpb24gU3RyaXBlIC0tLSAqLw0KZnVuY3Rpb24gY29va2llKG5hbWUpIHsNCiAgdmFyIG0gPSBkb2N1bWVudC5jb29raWUubWF0Y2goJyg/Ol58OyApJyArIG5hbWUucmVwbGFjZSgvKFsuJD8qfHt9KClcW1xdXFxcL1wrXl0pL2csICdcXCQxJykgKyAnPShbXjtdKiknKTsNCiAgcmV0dXJuIG0gPyBkZWNvZGVVUklDb21wb25lbnQobVsxXSkgOiAnJzsNCn0NCmZ1bmN0aW9uIGdhQ2xpZW50SWQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAvLyBfZ2EgPSBHQTEuMS48cDE+LjxwMj4gLT4gY2xpZW50X2lkID0gcDEucDINCiAgdmFyIHYgPSBjb29raWUoJ19nYScpOyBpZiAoIXYpIHJldHVybiAnJzsNCiAgdmFyIHAgPSB2LnNwbGl0KCcuJyk7IHJldHVybiBwLmxlbmd0aCA+PSA0ID8gcFtwLmxlbmd0aCAtIDJdICsgJy4nICsgcFtwLmxlbmd0aCAtIDFdIDogJyc7DQp9DQpmdW5jdGlvbiBnYVNlc3Npb25JZCgpIHsgICAgICAgICAgICAgICAgICAgICAgIC8vIF9nYV88Zmx1eD4gPSBHUzEuMS48c2Vzc2lvbl9pZD4uPC4uLj4NCiAgdmFyIG0gPSBkb2N1bWVudC5jb29raWUubWF0Y2goLyg/Ol58O1xzKilfZ2FfW0EtWjAtOV0rPShbXjtdKykvKTsNCiAgaWYgKCFtKSByZXR1cm4gJyc7DQogIHZhciBwID0gZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pLnNwbGl0KCcuJyk7IHJldHVybiBwLmxlbmd0aCA+PSAzID8gcFsyXSA6ICcnOw0KfQ0KDQovKiAtLS0gVVJMIGQnYWNoYXQgOiBqZXRvbiArIGF0dHJpYnV0aW9uIEdBICsgdmlhIC0tLSAqLw0KLyogTGUgYmFjayByZWxlY3R1cmUgbGl0IGNpZCwgc2lkLCBnY2xpZCwgZ2JyYWlkLCB3YnJhaWQgKHZvaXIgbWVzdXJlLmpzLCBDSEFNUFMpLiBMJ2FwZXJjdSB2b3lhZ2Ugw6AgcGFydC4gKi8NCnRyeSB7IHZhciBfdSA9IG5ldyBVUkwobG9jYXRpb24uaHJlZik7IFsnZ2NsaWQnLCdnYnJhaWQnLCd3YnJhaWQnXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IHZhciB2ID0gX3Uuc2VhcmNoUGFyYW1zLmdldChrKTsgaWYgKHYpIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oaywgdik7IH0pOyB9IGNhdGNoIChlKSB7fQpmdW5jdGlvbiBnYUNsaWMoKSB7IHZhciBvID0ge307IHRyeSB7IFsnZ2NsaWQnLCdnYnJhaWQnLCd3YnJhaWQnXS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IHZhciB2ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrKTsgaWYgKHYpIG9ba10gPSB2OyB9KTsgfSBjYXRjaCAoZSkge30gcmV0dXJuIG87IH0KUGFnZS5wcm90b3R5cGUuYnV5SHJlZiA9IGZ1bmN0aW9uICh2aWEpIHsNCiAgdmFyIHUgPSBTVFJJUEUgfHwgJyMnOw0KICBpZiAodSA9PT0gJyMnKSByZXR1cm4gdTsNCiAgdmFyIGogPSB0aGlzLnN0YXRlLmpldG9uLCBjaWQgPSBnYUNsaWVudElkKCksIHNpZCA9IGdhU2Vzc2lvbklkKCk7DQogIHZhciBzZXAgPSB1LmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nOw0KICB2YXIgZXh0cmEgPSBbXTsNCiAgaWYgKGopIGV4dHJhLnB1c2goJ2FwZXJjdT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGopKTsNCiAgaWYgKGNpZCkgZXh0cmEucHVzaCgnY2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoY2lkKSk7DQogIGlmIChzaWQpIGV4dHJhLnB1c2goJ3NpZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNpZCkpOwogIHZhciBmYnAgPSBjb29raWUoJ19mYnAnKSwgZmJjID0gY29va2llKCdfZmJjJyk7CiAgaWYgKGZicCkgZXh0cmEucHVzaCgnZmJwPScgKyBlbmNvZGVVUklDb21wb25lbnQoZmJwKSk7CiAgaWYgKGZiYykgZXh0cmEucHVzaCgnZmJjPScgKyBlbmNvZGVVUklDb21wb25lbnQoZmJjKSk7CiAgdmFyIF9jbGljID0gZ2FDbGljKCk7IGZvciAodmFyIF9rIGluIF9jbGljKSBleHRyYS5wdXNoKF9rICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KF9jbGljW19rXSkpOw0KICBleHRyYS5wdXNoKCd2aWE9JyArICh2aWEgfHwgKGogPyAncHJlYW5hbHlzZScgOiAnZGlyZWN0JykpKTsNCiAgcmV0dXJuIHUgKyBzZXAgKyBleHRyYS5qb2luKCcmJyk7DQp9Ow0KDQovKiAtLS0gY2xpYyBkJ2FjaGF0IDogw6l2w6huZW1lbnRzIHB1aXMgbmF2aWdhdGlvbiB2ZXJzIHJlbGVjdHVyZSAtLS0gKi8NClBhZ2UucHJvdG90eXBlLmdvQnV5ID0gZnVuY3Rpb24gKGVtcGxhY2VtZW50LCBlKSB7DQogIGlmIChlICYmIGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTsNCiAgdmFyIHZpYSA9IHRoaXMuc3RhdGUuamV0b24gPyAncHJlYW5hbHlzZScgOiAnZGlyZWN0JzsNCiAgdHJhY2soJ2N0YV9jbGljaycsIHsgZGVzdDogJ3N0cmlwZScsIGVtcGxhY2VtZW50OiBlbXBsYWNlbWVudCB9KTsNCiAgdHJhY2soJ2NoZWNrb3V0X29wZW4nLCB7IHZpYTogdmlhIH0pOw0KICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuYnV5SHJlZih2aWEpOw0KfTsNCg0KLyogLS0tIGVudm9pIHLDqWVsIGR1IHJlbGV2w6kgLS0tICovDQpQYWdlLnByb3RvdHlwZS5saXJlUmVsZXZlID0gZnVuY3Rpb24gKGZpbGUpIHsNCiAgaWYgKCFmaWxlKSByZXR1cm47DQogIHZhciBzZWxmID0gdGhpczsNCiAgaWYgKGZpbGUuc2l6ZSA+IDEyICogMTAyNCAqIDEwMjQpIHsgdGhpcy5zZXRTdGF0ZSh7IGRpYWc6ICdlY2hlYycsIGVjaGVjTXNnOiAndHJvcF9ncm9zJyB9KTsgdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLCB7IG1vdGlmOiAnbWF1dmFpc19maWNoaWVyJyB9KTsgcmV0dXJuOyB9DQogIHRyYWNrKCdwcmVhbmFseXNlX3N0YXJ0Jywge30pOw0KICB0aGlzLnNldFN0YXRlKHsgZGlhZzogJ2xlY3R1cmUnIH0pOw0KICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsgZmQuYXBwZW5kKCdmaWNoaWVyJywgZmlsZSk7DQogIHRyYWNrKCdwcmVhbmFseXNlX3VwbG9hZCcsIHt9KTsNCiAgZmV0Y2goQVBFUkNVX1VSTCwgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZmQgfSkNCiAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbiAoZCkgeyByZXR1cm4geyBzdGF0dXM6IHIuc3RhdHVzLCBkYXRhOiBkIH07IH0pOyB9KQ0KICAgIC50aGVuKGZ1bmN0aW9uIChyZXMpIHsNCiAgICAgIHZhciBkID0gcmVzLmRhdGEgfHwge307DQogICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDEzKSB7IHNlbGYuc2V0U3RhdGUoeyBkaWFnOiAnZWNoZWMnLCBlY2hlY01zZzogJ3Ryb3BfZ3JvcycgfSk7IHRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJywgeyBtb3RpZjogJ21hdXZhaXNfZmljaGllcicgfSk7IHJldHVybjsgfQ0KICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDQyOSkgeyBzZWxmLnNldFN0YXRlKHsgZGlhZzogJ2VjaGVjJywgZWNoZWNNc2c6ICd0cm9wX2RlX2RlbWFuZGVzJyB9KTsgdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLCB7IG1vdGlmOiAnbGVjdHVyZV9ub25fZmlhYmxlJyB9KTsgcmV0dXJuOyB9DQogICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDAwKSB7IHNlbGYuc2V0U3RhdGUoeyBkaWFnOiAnZWNoZWMnLCBlY2hlY01zZzogJ3NhbnNfZmljaGllcicgfSk7IHRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJywgeyBtb3RpZjogJ21hdXZhaXNfZmljaGllcicgfSk7IHJldHVybjsgfQ0KICAgICAgaWYgKHJlcy5zdGF0dXMgPj0gNTAwKSB7IHNlbGYuc2V0U3RhdGUoeyBkaWFnOiAnZWNoZWMnLCBlY2hlY01zZzogJ3Bhbm5lJyB9KTsgdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLCB7IG1vdGlmOiAnbGVjdHVyZV9ub25fZmlhYmxlJyB9KTsgcmV0dXJuOyB9DQogICAgICBpZiAoZC5ldGF0ID09PSAnaWxsaXNpYmxlJykgeyBzZWxmLnNldFN0YXRlKHsgZGlhZzogJ2lsbGlzaWJsZScsIGpldG9uOiBkLmpldG9uIHx8ICcnIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lY2hlYycsIHsgbW90aWY6ICdsZWN0dXJlX25vbl9maWFibGUnIH0pOyByZXR1cm47IH0NCiAgICAgIGlmIChkLmV0YXQgPT09ICdvaycpIHsNCiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IGRpYWc6ICdyZXN1bHRhdCcsIGFwZXJjdTogZCwgamV0b246IGQuamV0b24gfHwgJycgfSk7DQogICAgICAgIHZhciBjaCA9IChkLmNoaWZmcmVzIHx8IHt9KTsNCiAgICAgICAgdHJhY2soJ3ByZWFuYWx5c2VfcmVzdWx0JywgeyBzdWpldHM6IChkLnN1amV0cyAmJiBkLnN1amV0cy50b3RhbCkgfHwgMCwgdHJpbWVzdHJlczogY2gudHJpbWVzdHJlc19yZWN1cGVyYWJsZXMgfHwgMCB9KTsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgc2VsZi5zZXRTdGF0ZSh7IGRpYWc6ICdlY2hlYycsIGVjaGVjTXNnOiAncGFubmUnIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lY2hlYycsIHsgbW90aWY6ICdsZWN0dXJlX25vbl9maWFibGUnIH0pOw0KICAgIH0pDQogICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgc2VsZi5zZXRTdGF0ZSh7IGRpYWc6ICdlY2hlYycsIGVjaGVjTXNnOiAncGFubmUnIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lY2hlYycsIHsgbW90aWY6ICdsZWN0dXJlX25vbl9maWFibGUnIH0pOyB9KTsNCn07DQoNCi8qIC0tLSBjYXB0dXJlIGVtYWlsIHF1YW5kIGlsbGlzaWJsZSAtLS0gKi8NClBhZ2UucHJvdG90eXBlLnByZXZlbmlyID0gZnVuY3Rpb24gKGVtYWlsLCBtb3RpZikgew0KICBpZiAoIWVtYWlsIHx8IGVtYWlsLmluZGV4T2YoJ0AnKSA8IDApIHJldHVybjsNCiAgdmFyIHNlbGYgPSB0aGlzOw0KICB2YXIgYm9keSA9ICdqZXRvbj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc3RhdGUuamV0b24gfHwgJycpICsgJyZjb3VycmllbD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcmbW90aWY9JyArIGVuY29kZVVSSUNvbXBvbmVudChtb3RpZiB8fCAnZm9ybWF0X2luY29ubnUnKTsNCiAgZmV0Y2goUFJFVkVOSVJfVVJMLCB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LCBib2R5OiBib2R5IH0pDQogICAgLnRoZW4oZnVuY3Rpb24gKCkgeyBzZWxmLnNldFN0YXRlKHsgbWFpbE9rOiB0cnVlIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lbWFpbCcsIHt9KTsgfSkNCiAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBzZWxmLnNldFN0YXRlKHsgbWFpbE9rOiB0cnVlIH0pOyB9KTsNCn07DQoNClBhZ2UucHJvdG90eXBlLndpcmVHQSA9IGZ1bmN0aW9uKCl7DQogIHZhciBzZWxmPXRoaXMsIGhvc3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkY2YtcGFnZScpOyBpZighaG9zdCkgcmV0dXJuOw0KICBpZighc2VsZi5fX2xwKXsgc2VsZi5fX2xwPTE7IHRyYWNrKCdscF92aWV3Jyx7fSk7IH0NCiAgdHJ5ew0KICAgIHZhciBTRUNUPVtbJ0FuYWx5c2UgZHUgcmVsZXbDqSBkZSBjYXJyacOocmUnLCdoZXJvJ10sWydDZSBxdWUgbOKAmWFuYWx5c2UgcmVnYXJkZScsJ2h1aXRfZW5kcm9pdHMnXSxbJ0xlIHBvaW50IHF1aSBjaGFuZ2UgdG91dCcsJ2VuZ2FnZW1lbnQnXSxbJ1F1aSByw6lkaWdlIHZvdHJlIGJpbGFuJywnYmlvJ10sWydMZSBsaXZyYWJsZScsJ2xpdnJhYmxlJ10sWydTdXIgdm90cmUgcmVsZXbDqScsJ2FwZXJjdSddLFsnVm9zIGRvbm7DqWVzJywnZG9ubmVlcyddLFsnw4AgcXVpIGNlbGEgc+KAmWFkcmVzc2UnLCdhX3F1aSddLFsnQ2UgcXVlIGNlIHRyYXZhaWwgY2/Du3RlIGFpbGxldXJzJywnY29tcGFyYXRpZl9wcml4J10sWydMZSBkw6lyb3Vsw6knLCdkZXJvdWxlJ10sWydM4oCZYW5hbHlzZSBBRENGJywnb2ZmcmUnXSxbJ1F1ZXN0aW9ucycsJ2ZhcSddXTsNCiAgICB2YXIgYWxsPWhvc3QucXVlcnlTZWxlY3RvckFsbCgnKicpLCB0YXJnZXRzPVtdOw0KICAgIFNFQ1QuZm9yRWFjaChmdW5jdGlvbihwKXsgZm9yKHZhciBpPTA7aTxhbGwubGVuZ3RoO2krKyl7IGlmKChhbGxbaV0udGV4dENvbnRlbnR8fCcnKS5yZXBsYWNlKC9ccysvZywnICcpLnRyaW0oKT09PXBbMF0peyBhbGxbaV0uc2V0QXR0cmlidXRlKCdkYXRhLXNlY3QnLHBbMV0pOyB0YXJnZXRzLnB1c2goYWxsW2ldKTsgYnJlYWs7IH0gfSB9KTsNCiAgICB2YXIgaW89bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGVzKXtlcy5mb3JFYWNoKGZ1bmN0aW9uKGVuKXsgaWYoZW4uaXNJbnRlcnNlY3RpbmcpeyB2YXIgbj1lbi50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXNlY3QnKTsgaWYobiYmIXNlbGZbJ19fc3ZfJytuXSl7IHNlbGZbJ19fc3ZfJytuXT0xOyB0cmFjaygnc2VjdGlvbl92aWV3Jyx7c2VjdGlvbjpufSk7IGlvLnVub2JzZXJ2ZShlbi50YXJnZXQpO30gfSB9KTt9LHt0aHJlc2hvbGQ6MX0pOw0KICAgIHRhcmdldHMuZm9yRWFjaChmdW5jdGlvbih0KXtpby5vYnNlcnZlKHQpO30pOw0KICB9Y2F0Y2goZSl7fQ0KICBpZihzZWxmLl9fY2xpY2tXaXJlZCkgcmV0dXJuOyBzZWxmLl9fY2xpY2tXaXJlZD0xOw0KICBob3N0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihlKXsNCiAgICB2YXIgYT1lLnRhcmdldC5jbG9zZXN0P2UudGFyZ2V0LmNsb3Nlc3QoJ2EsYnV0dG9uJyk6bnVsbDsgaWYoIWEpcmV0dXJuOw0KICAgIHZhciBocmVmPShhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSl8fCcnOw0KICAgIHZhciBlbXA9J21pbGlldSc7DQogICAgaWYoYS5jbG9zZXN0KCdbZGF0YS1kaWFnXScpKWVtcD0ncmVzdWx0YXQnOyBlbHNlIGlmKGEuY2xvc2VzdCgnW2RhdGEtb2ZmcmVdJykpZW1wPSdvZmZyZSc7IGVsc2UgaWYoYS5jbG9zZXN0KCdoZWFkZXInKSllbXA9J2hlcm8nOyBlbHNle3ZhciBwPWEsY3M7d2hpbGUocCYmcCE9PWhvc3Qpe3RyeXtjcz1nZXRDb21wdXRlZFN0eWxlKHApO31jYXRjaChfKXtjcz1udWxsO31pZihjcyYmKGNzLnBvc2l0aW9uPT09J3N0aWNreSd8fGNzLnBvc2l0aW9uPT09J2ZpeGVkJykpe2VtcD0nc3RpY2t5JzticmVhazt9cD1wLnBhcmVudEVsZW1lbnQ7fX0NCiAgICBpZihocmVmLmluZGV4T2YoJ3JlbGVjdHVyZS5hZGNmLm9yZycpPi0xKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyB2YXIgdmlhPXNlbGYuc3RhdGUuamV0b24/J3ByZWFuYWx5c2UnOidkaXJlY3QnOyB0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDonc3RyaXBlJyxlbXBsYWNlbWVudDplbXB9KTsgdHJhY2soJ2NoZWNrb3V0X29wZW4nLHt2aWE6dmlhfSk7IHdpbmRvdy5sb2NhdGlvbi5ocmVmPXNlbGYuYnV5SHJlZih2aWEpOyByZXR1cm47IH0NCiAgICBpZihocmVmPT09JyNvZmZyZScpeyB0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDonb2ZmcmUnLGVtcGxhY2VtZW50OmVtcH0pOyB9DQogIH0sIHRydWUpOw0KfTsNCg0KdmFyIGFkY2YgPSBuZXcgUGFnZSgpOw0KYWRjZi5wcm9wcyA9IHt9Ow0KYWRjZi5tb2JpbGUgPSBmYWxzZTsNCg0KZnVuY3Rpb24gYm9vdCgpew0KICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLXBhZ2UnKSkgew0KICAgIGNvbnNvbGUud2FybignW0FEQ0ZdIExlIGNvbnRlbmV1ciA8ZGl2IGlkPSJhZGNmLXBhZ2UiPjwvZGl2PiBlc3QgYWJzZW50IDogbGUgd2lkZ2V0IEhUTUwgZG9pdCBjb250ZW5pciBsZSBibG9jIGVudGllci4nKTsNCiAgICByZXR1cm47DQogIH0NCiAgdHJ5IHsgYWRjZi5tb3VudCgpOyB9DQogIGNhdGNoIChlcnIpIHsgY29uc29sZS5lcnJvcignW0FEQ0ZdIGVycmV1ciBhdSBtb250YWdlJywgZXJyKTsgfQ0KfQ0KaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGJvb3QpOw0KZWxzZSBib290KCk7DQoNCn0pKCk7DQoNCg==
CihmdW5jdGlvbigpewoidXNlIHN0cmljdCI7CmlmICh3aW5kb3cuX19BRENGX0xFQ1RVUkVfXykgcmV0dXJuOwogd2luZG93Ll9fQURDRl9MRUNUVVJFX18gPSB0cnVlOwogd2luZG93Ll9fQURDRl9CVUlMRCA9ICdjb252LXBkZi1uYXR1cmUyLTIwMjYtMDktMTAnOwoKLypfX2FwZXJjdV91cmxfY2xlYW4qL3RyeXsgdmFyIF9qdD1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoJ2FwZXJjdScpOyBpZihfanQpeyB0cnl7IHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2FkY2ZfYXBlcmN1JywgX2p0KTsgfWNhdGNoKGUpe30gdHJ5eyB2YXIgX3U9bmV3IFVSTChsb2NhdGlvbi5ocmVmKTsgX3Uuc2VhcmNoUGFyYW1zLmRlbGV0ZSgnYXBlcmN1Jyk7IGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCBfdS5wYXRobmFtZSArIF91LnNlYXJjaCArIF91Lmhhc2gpOyB9Y2F0Y2goZSl7fSB9IH1jYXRjaChlKXt9IC8qX19nYV9sYW5kaW5nX2NhcHR1cmUqL3RyeXtbJ2djbGlkJywnZ2JyYWlkJywnd2JyYWlkJ10uZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdj1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoYyk7aWYodilzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGMsdik7fSk7fWNhdGNoKGUpe30KCmZ1bmN0aW9uIG10cmFjayhuYW1lLHBhcmFtcyl7IHRyeSB7IGlmICh0eXBlb2YgZmJxID09PSAnZnVuY3Rpb24nKSBmYnEoJ3RyYWNrQ3VzdG9tJywgbmFtZSwgcGFyYW1zIHx8IHt9KTsgfSBjYXRjaChlKSB7fSB0cnl7IGlmKHR5cGVvZiB3aW5kb3cuZ3RhZz09PSdmdW5jdGlvbicpe3dpbmRvdy5ndGFnKCdldmVudCcsbmFtZSxwYXJhbXN8fHt9KTtyZXR1cm47fSB3aW5kb3cuZGF0YUxheWVyPXdpbmRvdy5kYXRhTGF5ZXJ8fFtdOyB3aW5kb3cuZGF0YUxheWVyLnB1c2goT2JqZWN0LmFzc2lnbih7ZXZlbnQ6bmFtZX0scGFyYW1zfHx7fSkpOyB9Y2F0Y2goZSl7fSB9Cgp2YXIgU1RSSVBFID0gKHdpbmRvdy5fX0FEQ0ZfU1RSSVBFX18gfHwgJyMnKTsKdmFyIFBIT1RPICA9ICdodHRwczovL3d3dy5hZGNmLm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMy9waG90by1sZW9uYXJkLWRlaS5qcGcnOwoKdmFyIFZJR05fQSA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdScG9PQUFCWFJVSlFWbEE0SUk0T0FBRHdkZ0NkQVNwVUFlRUJQbUV3azBla0l6K2hJTlJNRy9BTUNXZHU0WEV3elhUbko3N0t6YStqZk41NlhmOGQ2Z0g2YzlSSHpBZnJwNnNuK3k5VG4rRzlRRC9BZFRYNkJmN2grbko3T1A5eC83L3BEYXM3NW4vMDNjVi9yTWVxM3Z4YzhyK0FFNmp0Qy9hVDY3MzBlb2lyU1RMdjhyL21mVlgwU2ZYUEFuOUUwcVkxYjJGNFJsTXBsTXBsTXBsTXBsSFFDMUhIcjNFNjI4VHZPb29UdldIUk9kS1NMS3Jjem1jem1jem1jem1DZ3I3bS9VVDUxZm5qQTZDME4vUnY4ZVpEazU4WDgwZjhCQnJhak1jSUh5QUw1Zkw1Zkw1Zkw1Zk1TOXJ4UHgrUHgrUHgrUHhRaml3VUJDaWh2U2dvTkRSc1ljOExvSlk3N2dWYyszblRUNHBWWFk5RDJPZzB1VEE3cDcvNzJjb2ZlS1B6TWZwQ3BLeFJMN2FKOG8rSDdheDF3R2RLci9EaDl0azRadUVsSm1nTnNLbHU0VVZtNUtoSlZXTjh6QTd1SG1vV0JpaEdVS1RHMDFENkRFMW0xNUdpVzJRS1BRL2pHRTV2VVZIakxqYUtVaGdVUTh6TjErUUNLMm5TTDh6SFNndzUzSExFVjVOejBiNnY2QmkwWEdaUFJvRnFCN1VIeXFOakRuMjgvUUVKZVdDS3NtdlhFUlBBK3pLeURZVWJPYlB1OUZ1Y2tueDZXTm44cWpZd3Jlak54azFCVzFjSW15VmxqMjgvTklMN2QrdXp4V1EwQkNpaHhPdDV3cDVLUC9TdndDZGwxQ1BuK3JuYjM4SHdVVURha2xxczVTWDBoWTN1eitGeGxrTUF5NkV5MnQ2bU5mM1pYUlBVSDVKWGhxdzU4QnUzR05kKy94VU1CNFJzZ280R3lPT3lRTjhzdloxTGhxWWF3OVNUVkk5MG1XQWZ4dVB4Q2szTWJjNUNiQmd4MThqMFNtNXNrbldBa0s0STV4Szd0SS9PUEZUY2NoWTRSY2YySkw1M3NkRHZSZ2VWMDIwNjRNTFliNzA0NTR5L3ZicEgvMVdjUnhlWVBsM1RhQmVheit3MGV1YjU5TUFqRTYwNyszYTZTRUxQUjBWWlJzV2greDBYOUo5QlNIWDd6b2JlVEpLQzBRYmJTakhmWHVPM0lUNWtkdmt0bzR0enZFNWRoSjhRSDVnNjViQ2F6by84VytZdHpCZVN4cy9sVWJHSFB0NStnSVREaStad2RYNnAzaEZrNGxrUWhZYyszbjZBaFJRNG5YT1g0VHJzWld6a25oQktLU1h4eTV5dG9vY1RZWHkyK1MvbFViR0hQdGtwZUU4TlVZRzg4QnpVZHZQMEJDaWh4T3VjdjVWR3duT3NwcXVTVnhiY3RwQ1BHeGh6N2Vmb0NGRkRpZGM1ZndTN1craCtwdmpLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWVF0Y1lNZWpZdzU5dlAwQW5FaUx5RXMxOGNhdXNLTlA2WFpsTXlZOERCc3hLZE5kSG5rM0YyRGorbmNzV3E5dStLd1AzKzlzU1FQUHBrVDNxZnhaYytwWHVIMFNUUHAxN0V5aVhScU5ScU5ScU5ScU5ScU5SbXdBQS92OXJJOFE5MHo0RXIrbDdnbGs4Sy9HRlFrSERlT0k1V0o4QUFDZ3Q5Rno3amR5WUd1bWVEWXVaZVpUc0N1SDJOMEhxREZSS1hKMzRabi9Qd2hFQkgxOVhrR0tnVXFaNTF2YnNPNGdKWmhvTmZoTE5CbWxnUHVyU0kyNXdhNE55Q1l1R0pFbjJLN3RxRU5VNGFlZ0Z4NkM1QVJaNWZCR013cWxKZXo4dEVRYTYzelQ0U05mczJvSHRwcmJSUGJhY2VkdVpXeTlQUkZ4bXdxM2E3cjhPTklwcWxsbG55NVBWL1RUbnJmMHBsbGxWMm9xc3VEK0VmT042eUdsTUtKOWZvaFovcVB5ak8waEsrUk1nSTBQU1JDQkpIbU5UcmRVTDRQemJaUWhLZzBRWEpyNXBNYUdUVk5sdVk3RmZiWkRvcGROSHlxbURPWnZiMk8xK1ZoeTg5Y2ZaaGt4NUpuaE1tTDRoc2dBSEhPMXplUE85aVRVSSsydmYvZVpyUUZYN1hMWEhIR2xCYnJpOEIxZ1RKaTJud2VKODdOUHBCbDhzSCtLWG0yeVlvNFNwZUc4RHFQUGg2RzVDSW52M0REWU4zdE9MWmg0eVplNnF2N0JTOTd2T0lVbW5BbEVpaXpvSTJSQ3ZzbVNRV21DLzVSdXdVOGhpVDRpQkw0Ukp6d3hWLzIzYy9WdEVITjA4VUlBUm9NZ3VIMUxXL0IzT0hvKzloWEFhdzFESGRjT3Z2dktGZEpha3pPUS8wMm4rbmc0OWR0bi9tZmhtWDMvRWFmQjNCZkxreUMyMlE1cmkvWi93anVYZlF1QVg3dkNoQTJ5Zm5UZjJlSGNtTnptUzBkNmEySmZYSHBKMWkzYjZTZkZUbGk3TmFzL0NTanFoU0Y3WFFUN0pVYTk3aksralljdnVrUUlDdUZ4aXJ5eFdJOGk0NFZURzE3dFFFZnovejhEK25GZ2pzam9SVEM2cnRTSThncGZpQVpvQmRxd1BxT0o5NFRCaVgyUXgrZFl3MkIyRjY4OWhaZVRuRU9nS1ZwRGpxTTJUUm5xNy9MRTBtRXNBdDZQSzgvbzN2clJxdEY5L3VqRWVzUXRtVkd6T1FSNjlSKzQ1MlgxNjhKVTBYOWlUZElMQUFyejZoUDhaUSt3SXpZamozU0Z5djJENldvRWo5dHhBOFVzZFNwWWRlcGl5ZVRNbVY1N2R5dEVudHNld0FBQUFBQUpvZENBc0ZlVU0rTFBJVnYrcnpCdGtTRFBNQmRpRkhyM2NpWFhUOHFrTkJXTDRXczdhS0h1SDBoNjRkYnRndWZpTGcwc2dYR3pmSi9MQzJGRVdVUEZzUWJOTU5TSkdRL0pid2pMMm1KSndWelR4aVA4Wm9pclI3ZkgzMVVaN0pxUWtYVTBoTTJWODM1Rys0bUJOY3RnRWhITU9Rb3NnUUZzTThDcW5ZUUFBSUw2R3lJTkxhZ1ROQUhaa3FZOUFiUThKVlh1allLd01UZ1A2MENyM2NsejQ5LzZkajIvL05tM1BGNE5QS29VMUY2KytHR3NkcXlQeC9xWkkvaDlRdDErSWVVTGFNTk9BOXJDYlB0amNOV3JXaVFQZFVOL05veVNYSUIzRmx6VW5HS2Y2T0k5S0hEdkw0M2VXMVNuaHBLZmJIWjBaRStLM0EvNVFKR2hRRkxTSHR2YlBMTFlVdlo1T0FvakgxM1pIQTZFblIvWFBDcjhCNVZLWHZUREpYb2l3OEdwbGRkWGtreCt4QlNPTWVheDA4WUx0OGhPVmVKQVBzY0NabURqazMyekp4VmUrdUlUTVVZb1hTZEpLUG9FNDJXY05zc3h6L0gxSE1pSmxIbWtSd2lUWlFGdFRGaUh4QXczMlJibFlIRVgxQUN1UlRyalBBUW9lVUVhdW93Z040RFJZQUFBQU9uU0JJRUpDN3JGZW1PQUMzM1IyYkFVSXRoaHhGUnp2QkZYcDlxcHdSQ2xRMll1NHZyeEd6cU9pSVhHREUrWGk0cllWd3FkQkRkdjhpZ2lXaE5WVFlsVTRtV3BtTStkQUUxTWQ1dFc5YUhiNEt4RVdoQnNSOTFQakVOZXpLZ0RRUWJCaGt4OS9nK2RpeFlqWGN5Q0xNVHE5ZWpaeGtDVXU5bVRTbWorVUVIOENqWlA0bGRZMVc3QklVT21JcDBhWGFTbjRtTitFb3NSRGRxM1A2b2hWNE85OGsyQmpTRmNvaGxyaGZWNWxDVXIya0gwR0pzWnpYZml4M2h5em4vTGJneDgrcjNSZEVuVEgrUnVwZDVmNEJDelkwYm5VUmpaZXpmWnFQZE4wRkpLeDVRckV5c0tTL0xMY2p3em96ZVlyOHlPbjNkTU54VnVKV2xDYU5rVXVkdnhjOVZySGE5L1UvRDZlRkFRWWR3Ykg4M21vbVFLa3BxUEF2M3hWZzJmaGxraTV4UUZnbVdBK0QrTEFWWFF3a3NtUUw4Rk1zVjJNVUtLV1FnN2lTSG1JR0syNzMrRUhHK2oxTVlHakxkbDkyc1hZVDJiUUlpanFIZG9YSGV5amR6WmJYMzJhWkVYY09CbW8wOWJKQlBMOE90cW1NVW9Md1NCU3BhQ1NxQ3N6dTJrdG9wUGd4UG1nODhUa0dhWHJ4K2doblVYNU1LUCswTnhqcVlnYld0blVmc2xueUhydHVKeU0wNDd5ekRTZUdNNGxRdHB2Y09ib0tQQ0p3V28rbjBJczJwRDZlNnJCekFEbTRaRUhJQUpZVTI3cGNzS2J4UW9mTUlmN0U2cGFRUzU3a09hMmRnOVBoR2lwZ2ppOHdOY1hDVTRsdjR0ZHc1V2c4ZUtOTjF3aFdBdUF1bm5VMG9sVjR3THdHTEN2ZVEraGMyM0FqNFdkWHdUaHdUYm1rQ0ZvQ3lrT0hPaGpHUlEwVkVRUFNsd1BHV2VCbFFybVFzT1JPcEpadGd2NGVUWktkSVRxa2hCTUdTN1hKUzFrYnpTUHorSTJrVFpLM21yRytQWGpzZ0FoWitqM2taRkpOK0ZMSGlBYjE3NWF2MTRmV01DZzNpd1pVTktKQ0ppa3lnQzEvQmJwUi8ydnptVC9lRitobWNnSnlzZ1RCQjc4ZHpOVHo4aFlrWXZCa21ManBFbVdhTWxEaHJ1NVZZVjRMdGZScE92MkpwUEM1d0FsekRBMkVGdHlCalppeUF2S2xwcVhuZ0xaOGdrSkdEa1J1ZlVGZGhrdWh3bkZXaUpPS0dKU1F0anRNUlFFZ3VILzJtajJlNmltUVFSMlN3clQ5eHhHKys3U1MvNkdCNk5HSGFvcHhYVzRlNjhuUFpNbFhVRk5RczlZN1J1RXpWb21CNndLY0RzY0tKKytHZk13cCsyR3ZMOG9oTFhRMzhmYWFNanZDUno1YW5Dai9yL2JOaktFZS8xcU5ta0lUOVEyVmRsZlpzRDVxaFFXYTB6ay9RTGpRTExoRVR5K2EwcE84NU52ZTdISkdVMzY5QWcrYitaWDN0NmphbmVVNXBLcC9TNWlIRWM4Q2VjWFhZNjI5ZnV2SjhSQjlpeTJDeWRBZUZBWEd2RHVxVDhCM21QYmVvNjRwU1lQTWtVa283ekdqa0tSUEo3QUZjazl2YWwwN0JGdWRROURnc0hNanZudG1DbTllV1lhZ3p1cmlDOThvNHJDOTFZOUh3U2x3VTcycm9jVEJHQXZVaGRQdks3QUZPSE9nRHFNOWtSOFhXVjBxMW1ZK1RjbHRIRis0cGsyS1NtaDd0b1BsNzU4ZTNYbTNqSWhwYW1iNUVna2dRMnFZSDZKNnVJSEZKWmJFeSt4eDV1M0dZbDhCaG5ZY2lGN3RqQXZRSytkV3ZzRWg4d3RiU2FhK0gvTHFkWldwbEFiQnp6THdDWEtObHh2LzFNa2gybWQ0WnlBSzlFUFRLWnRZZHNlR1FzQnFOMDFhUlRXeUNYY1RLMVhlODFmVWlnSnhtdzVWQnRMdGJFaHJlWGxhTDJnQmN0QmFyQnB1eFNoZW45V05Zdm10MXFwejRWQnkzdjhqck5hcDF4bFZGSWZUYUNpOTI1ellSMHlaU1poRDU1UTRZZWVBMUVpMXV0dmZ4MG02Wlo3cEdZcm9SQU9QaWVQOE01RXBhdnJMcktXSUsyZU1Edm5Md1l4RkMvWmZXeHAwVWtoNnNaMzFrMXJjSnk4SElBK1pvSFRZdGZzMTlrZVRmQ1FLSW9yeldEY1c2TjQwM3phMFVLTFhlUkszZnFZS2NVVm5kZE80ZlZOV21ZYWluZGphTXBqa0VXL2xxK2s0dnRFQmVUMUpUSjY4V1RubklqTU94VDlFTVJKbzZHSC9ETUFsSTVhOGo3emZXa0MrN3dXU3dReG5iTUNwQnBIY01iOU9xRXd6U0hXVjVjQmN5SEtUUVFjeHR0VnlWV1Rqa2pEcmlGNU1jS0ZLMkNCSGpSdnpNZ1VhZTU0K0wwdVA0UzJTOEtSWHQ4dUFyRkVrRE8rajhpWFJBN3hqYWtvRVN6WkRGSmp4NS9sTVpCMy9nUWtSVnRXWFdJQ0I1WWZXcGQ0OUx0MlhhSVJWempZVTk3QmxVaWZ2QWpTK3I4STVBZWg2VjVLTTBUbEZtckhHaG5yOEJlalBZd0EvTTkrKzJOMUVOYWw1a2NRcUxrcndDSHJ6WXZvMGNQSzdGempPVTdGOWtSZXFjbnBOK0JablpJQUlsdVpPSXQ4MEZGUGtMSEJBUEZ0aVdRQUFBQUFBQUFBQUFBQUFCcUxUS0h1dllUYXY4YVk1TFZxZWhHdDg1VGhvUm5LZTVrU2h2Vk13b3lFaElTR0VBR01UaDZ2TUpvNzFPZmlQMU1NTDJPbjhuYWszdnRkOTBMekFBQTFiUzJvbnVjdm9MNERtVCtDaXBMbHJzSEZMbXdrcmhkMThRQUFBQUFBQUFBQUFBQT0nOwp2YXIgVklHTl9CID0gJ2RhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JuZ3RBQUJYUlVKUVZsQTRJR3d0QUFBUTJRQ2RBU3BVQWVFQlBtRXNrVVdrSXFHWEszeDBRQVlFdExkcjBMTTlrRFVaL1dmR2cxVHZOdWRDcnoxQWZvZnZuL20vSUVQYzhRbVFEL04rZnYvWDhQWDJUMENmOHIvLzlldDZSdjhBLy8vcEhQbHNQTEcrQU1jTndrdkxQUVAvay9yRk9lZG1zbXlkQ3c1cDNYZDZlOTV2OWEvRUU3eHhQTC8vb1YyeHZSZFhsLzZkV1RBK2RmN1I2Vy9vdjhoNHo2dlM5UDlsMFBQdi8rY25aUDhUTlFoMS81QXpBdmQzOEwrOUhrUGZmSHFKeFc5Nm4rSDlRajkrK3NOOWQvb2svbS8vRjdCbitpLzlYWGM5SWdxNVl5b2hWOVgxZlY0Y3JwSHN1VUhScU1DVXdLQ1pDbi83aWVMN0x5dHNCRjVpeGJxbThWYTQrRTlOL0JKdEJ0NDBsM1pGQWJMY3h5Y1JBZ01hcTI0djk2UnVEWmJWbGZnM3pMWTF2ZzBNUDFZdG8xWnpXR0tSc3lIeUtwMkRROEg4R0p6MjlrTTUxWFdpWXI2T0tBaU9ZOS81R2U4NDhsN0YwWnpjd3JBWUNYOWJuMjZUamM5ajF2dzBSeStEdWZXeTZPYlV0TUFnWjNNVEpzdDVjWFJ6NTk3SThMNG94WWNSL1ZQNkJ6RDNTSDNCbi9BSEJGdjFOdjVWRU5Eelc4SWxzRXJFSTFqV2F2RjVkUXBzeXpZbzd5NldnUzgvbUxxSEZIdnVjRHVwQUdZeGNBajgvcUNoT3NsMVVGRVQ4WWsrWXpMWEFRMVgyU0xSNlFDaXdtaWRJZ3ZDMDdDNjdGbW5BdERtQUFrN1NzRUREUXRPbHVmZnhTeGsvLzBDU3MrSlhhVWdoNmpXekUyYnBoS0xiREpjbUxkK2xQQ2ZGdlV6UEw3ZlhwMVNxbk00N0FRVFNwSExId0lCR2dFbEF1UE41UHc2STB2YXZueWF2cjJEWlNUSXNUYVRsbDRiN05zeUR6TjZaRTNqcS9CMkZZZFN0bmM1YVBLekNhb1NqbDQ0UjZWU1grdHRKdHNtQmF2MEpzYWZ0TzE4b2g1N245cHRSMU1pODRpZzZoMjZ2QW1PZ1gzdU5haXZlY05Qa1F4dWQrd0xheE1abGhoMjJBZUdsK215NGJtMWg2QklGdEpJR2Q2SjFNWU1RZFFmYldKcS82Zm15cTdUNnhWaWEvSWxpam9tK29KOGl3dEY1dzJHTDgrTCticmVsWDF5UFBSU2tzdFBYaWdxeVV2aHJoVVBscUI2eVJDTnQ0dXNURzFSRW1reE1uczhCTVR0WTI4eUR4LzNZWnFabGsxRUxrY1FVZW9HOWpISTV1WlQ5ZzdGNkNPUk8wQkhYeThmQkdSMnZQUG5uK3NzOUE2aWxhY0NiZWtUemZocHJKL0tTbXFuNkRha2lFanI5Vit5QzYxeHljN2pFd2FqcGFpeE8vWitZODRScFRkTTk0dGVtUkRrWm1LTFA4V3A3dnp5NmFtdXBQVmtrOU9IaFFqT0lnTW5IeHNwZk1ZbUpnOUxmWlpLeDhJdDJnOUlCWnU2dUdYUnNTV3V4MGxJUThPUnh0SFJqd0RlSThFYmpLSXhTSlFYbE1Kd1RydC9VNDlKUWllanZlMmhxeG1HS3JHQVk5V3kwMUx6UHIySkhkMVY4QkJyUCtGTGkzVE5iSUhsTTVHckJaNWVua05rTllZeTV0T012N3h5MS9VRHZNVzBncytESVc1Q0piSmN5YlVCU3huVXdldUJlUHdyeUpkMWQxU2pzb2sxSDI1R24xakRYNi9sZWRIZnFEMFdGR1hic3VEQ1dyb3pyUTZLZnR1cmpaQnlSYW1QTDhOLzlib3hONnhTVnNIc3RnaUtYSG5ndUlueHdMT1l0S3c1U0ZURElzOUpOLy92WHd2TzlmYXFhS0Mrb3dMandmaFlQTEtWdm0yRXFtdCtPVE53Zjh3VTREQUN3WWwwWDVwOXJaTjR6bTBVT2xvR2RPUjZBU1VtclgvK2Q2YkVDczhGMnp4a3l3UnFCYTVKVjlCQ1NpVmNDZHBOTWMwN2JGQ3RFa2c1U2doRWdxWTlhY3daTHlhNnpHOXlxVUN2UitvdjVHNnAzb0ZDd0pHTlQxR2ZnTzdjN0hiMkwvMmMyVEdjZk8vRytQRXdVbGhBR1BwMlQ3TXBiMWJoTmVZMStvVnhGbTRZb1pZMjhtdFhlZi8rVmlZWDVsazJxdGRBNDlpT1RRNU5oSkxRMDRidnlUR1V5akd3UC9iMEp0Vyt0ZGtuMEFKRUZxMFdIRks3S1hjYUlFVGdTYitOK0wxSmxDTEtmVUZ0aWVLSmU2V0VVaXZLV3ZTanEwNkgxNFQyOW1WalA3NDRuRC9naXIvajNxZTNHRXY5K0dGRDlTTm5NZ0pPSHl2dUJSWDA0cFdzbGlBRWV2eG4wK3B6OW82MG9uUTYzTFE0MnIzdFM2M0szeDFmSHB3QzBab1ltQTZIUHhBQ2g3eEVrVHN4cEJOUlNreHJUZTY4L0h1T3V0MzJycDA4QzduaCtGY2ozNEg1YWNETnZNc3BZaVI3OCtBMjlRVVpJZ09BRHQyckRjVEZkTE5EVXRWU2JsVEU0ZXQrNGRVVTVqQ0tEdWJjNk5GcG52MlN4Yk9vamIwb21RNFdyRVhWS1hEVG5Pd2lMalBIUGRIVHF3SEJ5dnZZZy9BazRZNXBlNmJrcFhzTUV0VmNscDJYUVdwVDhSRTh2MFRlM0hDSnlXQWZReFhqUEhuNXhPN2xESnNBdERCL3ZoOFhWdkk0K0FTNU1oNkw5T1ZKMWtIc0V5OU45RTJvUEdZRml2bkYxencwci9GbW5ialA0a2RNNFhUb0xPcXc2VWFYblBnWUt2dTYzTjE3R1lFQ3BrMGdpTEVrdWpzUklwZlJESEZsWVpSUm9WQVQ5SmtZZ0JxMUNhZ2UrNGhaTEptT1orY291S0RGWEJKK0pyWnFCYjNWQ2NPQmxsU0NkZWg1aEtZTVVNZk53WGhNYjFlNE5HdlNJMWI0WjY3QkwzM0tEbzFNSkV2U0lzVkJLWUZCMGFqQWxNQ2c2TlE4QUFEKy9zeVd4TitwZHVoM0wyQzNRNWxXc0JVb1pWaFFBQUlsRGJrUEYwaHdGU3g0c1lMdkt1YXd4OHVYL0pQd01lbGhac2h4OGJGYjJUWU5RQjArU3NzeDdOTFlJRXRCWlVZM3hOcDdqVUZHeXJTbTlzVFdyWGNjRUdMR0diV1ZaSzV4UVQ1akFZNVVhNk1Ed3h3TkgyMTcweERBR3NwNHZ2alNING5GZGx5ZHZadndnYSs3ZHJaRGZENVJhTDFROTdiUjV0cEJOeStIY3c3NTdUY3dLS2FNRWpyR3cxQzhCOWs0emc2RGRuQUhqYVNiK20rY0pBenM3MUlQSlJzZVZNbkRxUTNOdEVpSzc0QS95Y1dEK1JSTDVSZUE1blozbkNBdFpyaFlTQXQwUk5qWnduNWQ3UHRJZlo2Z3p0R01zRXJ3ckh6VFhaL0NJaXlWNmFVU3oraDA1M3RKRWhXNklJeTlGT2xkM2hDUjZzYnNiZXRYbWlDT3QyRkJBa1dvYmpVZUdoMmdwTW9UUFdjSWd5MFo2MEpiRUxDc1NBRzhNdmI3L1NmQUhmYzkvMTVNUlJDT2R1UGFoTVhXU3Zjbjhkd01rbmFFRlZ2d2VjNUoycWV6RUVjSTFTMVlmUGVRa0dRS3lXWjBhTXhlSE5DQ2tITW5PYlA0TWlTVkdlSHQ0b1IzSzhOR1VNdlY2U0JkTFlocjgzZStDbEZkWHpOMkYwNDZYMGVxSnlCNnVlaXY2dGFMQmYrMEdpOTNYQW1GamJsV0lDOUdHVHNCWUVLNnhhS0tKOEdVZGtZajAzeGFBS2ErcU5pb296WE5TWjU3MEJNRGNRQlRYMVNMRTlhbHhkSVNvL0JQb3pWdlZpL05oL0kzS0NSN25HdEdRdy9nZjVCK29pZXVLRTNyTW03ZUVPS0RwY1BZeGY0aWxabG1jdDc3WWR3YzFscGtOUzhYYUUrR3VRVGNnd2FsMXI3WC90Um4vTVEveml5VFlqQ1EwdUtxcmF4dThxcUdpc2FZSnZOTkI2Vis2eTVPTW42QldqenZuL0RMcGpOYlhPaldvNDdvOGZGOVhlKzRLQmxKTGtKeWRrZ2crNVlIV3QzeXNSc0RrdThkbHBQR0JJZFpaL2hyaFZOc2NkME9lNm1aQ1JHYVA5VTBwNFRyRFRXTE9HTmxyeklsNlFOdWRLVW1lUkxxTFE2Zm83TUtnTU0wOXBwVlBhd0tYamFNMHAvNi83WXBCbEtBQlFZMWxVT3VqeGQ3V09DS3dBVmlnN1p2WE9aelQwdVZTRFZRbzYzMDhYYnFxK1ZiR0lDTG1ubUFnNmFxVFpPZ1NFRko0N0VTRlk2WnJ2dlFSY292cmRveFNRSk1lOVBaZ09DRk5jczZjbnZzVDk2dlg5NUFiOUtRWUI2YU1vMXNLQUlxMklQZ1oyamo4NlZkYkw1ME5wdUZqa0tkM2FURkdiOUtPRjZ3S1lIZDhDREF1dERWN280RHVnNTJBSVJNQWdSdDZOV2kzUnQ4cXJULzN2SWRjNXNxOGlpWUZCdjlLREhWTG8rbjhmT011ejEvZUczaVBNQnFtTHVPcDRrS0tEckFmMkRuQWdmV0FsRFZIOVA4amxhODVTc01OY1V6a1ViRVNYamdiMldZUzB4SzVjVlhxSlBJOUpaZHJtZ1FVMnRvcHFVMlBocDU3Wnd5Z00zdXJDSVYwb2UvcXdoVUR3K2JqbHZNQ1BiRDdzSFpVdndVZ1RySzZpV2tJZGRVbFFZSGdXZi9yZVczOFpkZEh1RkRMQmE2NFdDanVkeHd4UVhlT3JTeVFiRmVmVnh3WWplRy9VeGMxQzBoWnZYaDR1enRaYnM3eTBwTDQyOTh3WEhQVE5CZGFzZCtyN0p1ZU8wLzFKVFJpanEvTVFHWEY2MTU2RWcxTGNCT1R5eE9zSXFJc0FBRW9zK0Uwa3owUGNyTXdPbWdwSldtWnVaZDhBWDhPZUxSeHJsYlVOL3VmbkpiQTNHTnRNazNiSW9lS0F6N2l5Z0M0YVBmYy9LQXVQNzM0bG1ISWtaN1IrbDdLMXVoVzh4SmU1ZFdxNm9NN0p1WHlFcHd0SU1RN0FyT1JOMjlnQW5XbnVlV2pQVDlNZjUvUUcrQmlhRXhwSHB0NDFvZEpRY0dyYmJEL3RNTXU3M1JjbXJaRGxmaTliS0JGSzB6K0pSZE9haXl5MGNtTVhVQms0NVphKy9tcUh5NThodVVUYlFCOG5nb3JEK2lYZmMvZTd3amtVR0lGTWRFdjNwdnYyTE5NS29LMFNLTmhrWTRoTHdpZ0RjWmVtQ1lJNUlDRUh5Y3l4M2RhRUx0WVhUZEIzOTZXdFdPWFVUOE9vaFBEbE9LRGVNU1NiY0thRXN4KzRBVnpXeVAvNFlYa0cwdmJnVTA3SE93RFlWdDVZc3pUVzZHRjhLQzBTUFZ6K3ZJTTBzVTJPcllwV1BjNDlnMlRBUXJtM0Q2NnRQTmFDL3dxVmMra0xLZmdZWllZdnFyWmQxZXdzZjZPYXNFZmU4d1R5MUFQdEZYVWVwVllEVEJUQ3piWHF2em8yeG9MNldnN1lYTFNGdUY3RFZkdzlDM21wZHFjalVJQ3FTZEl4QmF4OVpHK0ZWbkgwR3V3RGpGbFFnQmlBSlRjUllYSWUxeGxPZFQxYVVNRFF6a0h1VjVBam05dkFBQUFGNGtucWtYbFZMcSthczdSNXJ4ck5WTUNPeEZkTzczV1pwT29FaE9Sb0NRY0w4cVgrWlNLUGhjRHFMRk1ITll6bkhmdTNHOEkwTW41TzliYktjQUJNVC82MVBIcUZ0dEFUa051Y2NxcktVWW9xYy9QeTZCYkN5UkVtVTQ5Nkd2Z3pRS0U1ZmluUEp4OEZhNXh5UlhUMjVEbDN4WWQ2ajZIeE9nSHRnWFZsT3Bzb3NzS1U5YXhDNjNBOXRrUnZmbVdYRUFOakFseUFrWVdYVnA1ZjB3OHd3WW9XdmZ2M1lueUVMRFhhQWdmSXdhTW8zMXlOVUtNWnlzWnNneXR6Yjh1bE50ZTBjaDVMRy9FTUh0RUxYaE1RUWhwOTlqQ0ROTWZKMVhHTGIxME9JS3JmNHUwSWlEZmRIR2FwMzMrZnNxMVJHMWhQNTNOREl1RWVHSlczRTJHZlRNWFhQYllZVzA4UTBsUERtNlFWaGs4VVNKdzNkZXZRMjA3SmxBUVRDS0FKOU4zb09HUmFLR2FydjF6eWNOeXl0eTMvV0tPQnF1K2UvQzFWMFl0ODRGVHFDSWxoQWRLRW00VFlneUMwVnNoSklqUDJEUXpwNWZsSEIvTURPdlpucm5WMkVSMTM5SVB0bDNrQkR6OWlQbmVMN1c1bDNqL3JQNHMwNTRTSERsT3VibEYwaUtQUWNLK3orK3NQa29CRTROWjBCek1JYU1xMDJkNFYyR3JpQ3QyVDBCNmNDNzdKdWxWcWNRakxMWTNhSXp0dFJTSXp5WmlRbzhPd2o3QytmRStHRTFlc2ZqQ1ZIeE9pUXBtVEhKc2VuMHhQWHFsNCs0cFU2NzNlcnFCMUpXQXU4UUlSWUVlOEI0WVNBSk9TRm5PNEJ0TXJxaHYxeXQ3YnNVeEpWQVIwTGNWZjQ4Z0RORmpCOXZBVmtWdWpCVEQyNlFwa2tnTU5jazlRS0pjODRGUVpJbVBSdHgyTHlTenRpbW9RSEJZTGxZSUtYNXpMTHMyMkhYajR4VmZISmtVbWZyVzJVWERNT05EdmY5b2dKWHVPMFBrUkpEdThYVDB2bjh0TUU4enRWUTczaUl4U0Zkb2dwaG9Ycyt4Y0pIOVl1SUY0V1FwM1JGSktIZFViMFBsZllFZ0hqMkxTTTNtSTlWRHNlejhvLy83eGdVY3VPUWNzOFFMUDlTMFZuZWN6T2U1eXUzbitOTmQxcWdmZFZHaUxNWHVRM2xjYnFrUnorV0R0dnZibnU3TlRHeUNWRHRhUG9DMDJuZ3RzVnVJUmNleGhlUVUwU1ZtY1B4Wit4cU9NWCtzQ2lvRy91YjY4ditKWHFQendIczI5NjR1ZEFsalVKRmpoR0lBVjF5bnQ5U3hPSi92NXpLRVJXL0xlaUhoSFZoZEFVS2pFM3ZsSTl2MmsyZkZCc3lZOUcvQlFXWVR5Tkh4UW1hSGJlZjVDTnlUYlIxVzJKNElETVdkU2pZRER5Mm5qMmNianBLYUpMNmp5UG5FdGtBSE5BUGNLS0Y5RWZSb1pHZndOZy9SOCt1WEZ4d2RIeXhzWDZzZ2czWDNPSmZ1VDRISHFTMHJTTjZZZTRNejI1NC82NXl0WUhzOE9TNUVkZ21iUWJxSWNlQWhzQTExOHJVSkhFRkV3dkFCU2ZMNkF6aUFRWE1lYnQveHlCb1VFdGdHZEZsdjJlRjRaN2NOUlNvWWtxcHpDclRhNVdqRDVNQ3dyUlJaZU9welhDNnUvYlRyNWZPWk42UDZmbDhycHNBdUpDTnN3QUt0NFJHTU5QZFRxbGxjM0o1MzdSYWJkNTBXR0JhVklFOExpUlEzR2ROdVlVTmJ3Y1VmRmpoWXRKR0kyOW0xU1VZcDEzSExvNEppMklHVGFLeHZvSUlmY0MzeGpRMTRhTzNGTDh5VW16OXNmam9CMThaL09aQkxTbG1NVCtReE5ZZjF1TUJ1a0t4TTAwR21yTDJqMkdGUlV6QWF4T2RVSEFtaFZEdGRsRDVVUlJaTkx3cTF3MHd6Z2J1UFEzYU5hcGdDZThFTVBzWHk3a0UxZVhWNXFmaU0zVEZlNno2TDB2TThsRkhJWkJDTlBrbUUvQzRXMFZVMTNVMmNDanZObC9RcEJmZm92NHpEcFN0SkRzU3FTRTBnL3ZTOUVKSHFId2EwUlhjM05GLzRWMWhNVkpack5RemhqQXRhd25NL2pTdDl0NjN1NmVwNkFrNnBEdlZ1TUF1Q2FQQ0wxVm8zaG1DeWYzTDdBRUE4dTZKNHZXZEJvRjBINmpROXNvWFdxeDRiUUtXbnlKWlJBaS9UTzlOVHdWeXUrRERwTlhORTdqb0ZlSU5Td01ueGJZSGFSMzdrdGJXSG42RUlNMElUREYxS0EwS1NIQlVhY25MZ0pvUTRXeHlmV2xaM2V3Vm9HaG9jZHN0TWRYN2tTTnl1SW5IK2VqeU5KSGIvdldNY1FoVTIrdFZReUI1NVpOWEI2b2RHaHh0RXdvV1Z1U0VFVHZyTnEyZjFHOXFPS2c3cjcyNE1TOGk5ekFWREVNaStZMjAxOFAwUEdwaUE5R1V4dFgyc2JoblNZZTlVQ1I4cDBxM29LZDBqM04zNWpobjZmZS9pQndyOEkrNHMzdmJRZHQ0WVdEanZTZ043MisvSHlXQkpLQU9ZSmRLcENUWGtlaDlaTlNzY0QxM0J1cUl6cVdtaG1YcE1ycldTcXlxQW1kcGYrMS9Xc0s0TmhoektvUSswL3BOTG9sYmdQWTFURHhJTDFxSUd4bTAzMVpDQ05tSFhsR08xMTljbXZxa04zNk1zMXVnczg3YzBocjUxejhna0Q4RlpTdU5OZ2xjdjhYdFJYVWZ0dlpDd2FDSFpZNTkrdTRubWsvNkRiTzBFTmpVMEd1RUNmRmM0ZDRlTFlNalNSemZCMlFNR3d1ek1CbzJVM2VKRHJaWnZjbWN6bEt5L3hXM1c1QjgwenRDaWNGNTdpVmNIVHJuanhZa2N6N25wWEdWUXg4ZVJzOVNwNzlSMXhQWitjaStUTjJnRG83a2Zad2Jad0tEaUhtZ0RQMVBVS2JPRHpqMVY1cjB3T2s0NWwwR214dmNIYW0ybnpqWjdsUE1mYzkxNlVqVzN2dnBDS2JVZE43SmZsSkJ4aVRvcTk5b2FkVjZPbHI0NDlIMys2TVo4Z3RaSHpKVkYya0J4a2s0ZkpDaFRCVHZuZ0FURndXTEJwMGs3Nmp3Wm1pQ3FVVXRqa2FrcngvRS85MVgydGZmMjRhaWlwOXRRbEwrZTBSMFZ4Q0lDdDBXcDl6RWdtTjB3dGNLdktQRzBGMnRwOEZQeVlWUVlXa25XZnlXanJwOHplZTQ2MEpObk5qVldDSWxiNDlxNWV5THlFVkpzN1FMTUFGckZncWh3b2hnK3pNcmdCMForYTQ0ZnlIVVRsL0FUM1RuZC9IbGl2dGdBSWFpbTdXWkxaeEdUay81NWVaYnpHZEtUWSs2a0pDQWhjSmd2RlJPQThtL1l0R3Uzd3dnQm51Z3VKcFhiUmkzNEFIWklKQjh3VnN5MkVMZGM0NTBvNHhvZlI5dDJObkk4SWlZMElRMEJ4Q1BSVDFlb1R3RTJnTUlvVlRxSURibmpQbzFlWHhEanEvbk1Yc1A3VU92Mmg0c29yeXJ4YkZuUG9DYlFXN0QyN0hWbldya2VDdEZGQUc5UmdaNlpjZGh3VFlNRmlTZ0pqQTdhYzl3TU1QQm5OWkkxbVZVdFphU2w2SlU3MHJ5Wkt6bjR2NUJjSzZQUVBJK1lFM2RBcFRnS25EQktUQmE0eTA2ZkR0aDM5Vzg4ZGg0SFFLZ1ZLNThIZ3JvY0RHc0JVTmdkdkdxczBEbTdMd1BWZm5mN2JFMnE2cUc0WWlnbEJIck8vajJZWDNTSzR5ZVIxeDJoNkpBd1F1aDBDSTU2Q3d3VVZ2ZnFrcTF0dEZYVmdKc01VcmlqSURwQ3doZ0JwSG9SYTlSRlZuNTIwSWN3SVRaN0ZrR005MWlYMDBJbUVUbTQxUnoxRlM0aVFSemlNTkJrU29PdWFrUXZvTzJrc3M3Ly8vTzRlTU5NRThzVk0xOEJZM2QzdTlSUEpwM0VWSmpEQUEwR01NVTU4N3FWNEVzODN2RTZCeUtBaE9ZMC9PTU9SRTRwdWd0K01pOWtVc2tOV002ME43ME1EcWNMWXhweGcrRHpxb0g5UEp4aFErajJPai9pd3B3UlFDeTA0QjlTa3BJd0JaYVlBK2txb2dWMy9mcEtuN0IvbWc3UWxxcmRmNzYySFdDejJBQVNSUUh1d1ljU0lVY3VMZTJuV3c1bkQ1YldHZ3JGVGYrdUlyb05rWjZNTDhTSGkwdTQvcE9IN3VJZ0V1Mnl3anJuSU9HaE1KYS9nQmtwSC9MWnhPWnVudjNvckxML1ppc0FXdmNaQUNvZCswMEJ1SmRsZ0t0NkN3NHVkdSt3TzROVmR3bVZ3VTVKajJHQUt0dlJwOWN3aDRVS2tFS3pTbzFTVHRDY0FRejJibFJEUWwxbk1rcUVhMXduT3dkdUFiSXpsZUluU1ZkNWVvZUdweGxyN0VOOEM1SkpNYkZ0akpicVdWZS8wdXF3Q3YzVmdCSDh5OXFJWG9IdXNFZVQ0YzRVOFVuVHZmbzVSVWpDS0YxaVVwSHBkK2xCSjJvTmtnaVFJSitnQkR2ZkdiMHdWc1ZERGRnRVJ0T0E0QURxeldGVHVnYTRPTGpuRFFLRzVlY05LUi9ob2NiTTRpbE9RcjAzZ3luTTZtTGZTNlc4WC9XVktVemk2a0lBRjZtWktqaEFhSVdLYy93Vm9PM2dMRGUrcmdPWkFQWlYxYkJ5WTgrcGo0VURKSGZrMUdSU2ZxVUtYamJSVXIybFN1bU4vdXNxT3Z1R1dYZXNBUkd2RU9DS2NLYWlJN2QrMnI0eUtIOGxDd0U1VkhwdUQyZGVJeUNPckViQ0tLekV3ZTdIN3M0SkJySmVDUVppNlRGSHpKY2xkUmJMTDBlRXB0aiszeHdldnZCQVkzTEtYRVBCVnhqcHI3Zy8wa1BUbFJBZTAyb044TGdGNjcrOWJpS1RYRE5wUnBzNy9UZzI1VTVoL1hWcUkzMjh3a1U1RTZBZzVvNVEvbWJmT2RvUzU2eXY3VTc1bDAyOElYUm91SXNQM2ZGaElBTXhkYWpLM0R2SlIzb3R1ZlFWd0lTQ2tiOVpOaFkyb2lNWmJnSDltZmlDZnZIMU0renF3N2RROVE5TllsVXE4S2hYMit1cGRLVTZpT1ByVGZpa01WQ0VtQk82MHRUZzVaVUt0QUpPcFBZMHl5c0ROcmxmUWZmVjZVbG1WNFY3SmlxVTFidW1WUmJQTFc3S2ZRQUZnZTFja2QzL3Zyb2tkQ3NGQmh5VXBwVlRFNWIxaFFOYjM4VGwxeWRVNHYyOVFxQ0JzN3JHRkhNVXMzcFZHdmpjZTZSbUVLMWlXbHF4VnN0Qy9NNHBwcjRSUnBMSUVNdHoyYmhFNFR2Q1ZOdERqN3hraVJENnVlb0JaeEFKY2RJRXJIYjNKeU5MNVBMcUYwb0p5ellOM1QyVFhCZkJXdmZzU1p4cDFBY01yU3kva1FIQlZ1NlRBdE8yc1JDcitvQlp3L3dSd09JaUtrQytHY2VJbzNUV29kVUFSZWlwbjlMWUZXMitkUWNCR1hyamRocEpuaktQeU1aSHZjcGExZ09OMG5oSnpvMVJ0SmljUElyaEFPMUpna2xRcXdRT3ZYb2hTeEd0NUpYQ0N0VFljV2dmcG9PaUptWDFYR3Z3VDJ5aWlmQmZseXozOXF1aktKMlRHUzhtVVoyNTlZQzNUYi9HeDA5Q0hVWWEzZFU3ZE1LOHdGaW9PeTQ3cDJNVVg2K2ZHVnlqUkxlQm1ObTA5OGVsWWNWeUt0WFVaN1NGQVZ4UExXa0VMaE1wR0YrRXpEeHhOdDFXeGxmQXpOMG9XaGFiNldDU0Y0bVNXcFFZcllTSFRmZjAzWERCTU5CQnREN2JOTTdRQnN0Tk1Ybm14WlJ4Z0JHc3FTbXZIRkNEbTF4SWNoQi9HcmgvRy9lQlUraExjajZHZW02Mldsc2ZoZDhZdGM0NDdxQVcyRjFaMHVTaWpzZDlkV1RJVk5hVjlxU21WVXU2Wmk4eVpsa1Z1N293elpqbkNWSXJGWURIUlY5Q1p2U2xFbDNWRm9IWnlGNG9BZURMNElJbkNDTmxBbWxUaHFDalV3WThUMlUyb0x2V3MyaVZSZjNpQnZ1Smg3U1dYWWRpU05mRGg5c2lLUlA2aTdCRnB1ZHhZU2w1QTZ3SXAxQVhHU2dlNFA0NU5pdzFReVBPWENmek9tUVNMaFZvOWcwM2xGbWtrRWJBR1hZcjRtWE9RZjBzaVppb2FjUmNCZEVCdWtLNStTMUhVMGJHb2RFV3RNYUtIWmwvcTQvUStLS0NYZ2F2ZTdiZy80MkJHR09QUkNoVUhuZEdWNGtlVUs3UkxUTVVkb2pmclcyTWlwOHlRa0w0RzgybXVSMXlHd2RGazR1d1NlejlEeWJFYWh4LzJpb3pDbyt6NG5kMWVKdkZyaXlVZXYxQnVLRVhkNUZadEtMVTZpTFg1bnBtWktlMHdLSHFYdGNIMkgrZ1RqWXJDaHVMMXB4ZCtnYmRIbEdGcmlPc29wZmx1aC9kV2dPWDliczIveHNNSG1XTWRWV2pLOG9XV2VJL3U3UVNTbTArYXhvdW5UdmFFSmpiL0dxNHU4ekVBMjJZUXhYVTQwK1ZHVDEzMk9URVcrbjNhSjlMWlZHQ3ZLeWJjVWxjL21EaUQ2dUtWaHhSVVo0OGZwZ1VBMUpQRjZ2QzdUUU9Xdm1aWElud3ZZKzFWZlB1Vi80TnJuQyt2QUJvQVI4SCtLSlgybkVjREYyNWx0S2FUM0JvdktmclU2eHVwZ2p1MHFndWRlajVhT0RiZU9NR2lWWEtZQWVRMmJSbG41WTlGbW8xQSszNHBLTW54VDRFREMzTTRtbkg0ZldxWndTWStBL3UzNzZubEJoNkhvZG0xcENJSTBaaDVoL3oydXdqT3BXUXZaRVR6YmIvZWo4dU1yWjBVV2hJdERxZHZXME9CTnRLZU55MVREcGFuMldZeDBjUlFDRG43cGtLVkNVdnhhK2hrSmJjQXUvMm14TmpHeExKckpkQVJVc1J3L0twSUNBWC9HWUhZWm1vK0haeHlTbk1hMEZCbEpob0xsQ3R1UzBZQTJleVRmZ1h4VEszMnFwM3AyblY5M1RGdFg0ZG5lenRkTE5ZdjJoT2srZ0hwUWtudWNCOHlMSExxWkRDanNJd2VLdEpta096R29Bak8zU04xTGtPMytlcjFpREs5WDRva1NmcDgyZ3RCS3FOZ2VTVEFqaGFjSFNneFU4dU5CRWpnd3UxWU5pM3ZtSGlUd2JhaGw2cVZFakluTnBtcDYvZ0lzQWVianMyeEpiamw1ODl0VmdnTTB4NmRKb0F6Qld1RzMvb3VRYWl5WlNqM0hpSmdFVlVNejNLVXhvWWdtenFvUm1iemhKTGN6dVZDYkJINHkxK2JuZmJHMXJEOUx1ZmMzYzdSR09NYWNKYzF4bHkwTzNOcnlmZVlSVWIvZnVmcVg5ekFYa2FHV1BPL0dmQWFXK09ZTnhVbFd1VnQvVHhnMTZIVHNRU2N1YjhHbWplL2gvRCtpQUVIWU5WdFl2OVNWaWVYbjIrY2NCRFB6TnlyRjJDcVJvZ0pMaW96dU9DY2FGTEhMMFhKY0ZHdjFUZ2N2SEpCZUQ0RVYzMFRCVWw0ajBPeEVybFFuTWVmNE5DZHRSc3Q5RUp3dS9WdndjUlExelFGeno1TGlYc0MxakJKY016dm1vejNmU2NsdmRCZG1sdVNpMFB5eUhSclpLY3RuY3hXYy9ZVXFCblpTMTNPdm9yRTR4TFJjWUdjdER1NWVMZ1JCSjRyeXd4bWF2djU3RVJiS2twYlNCbGN5V0NXb04zcm1YRkdKaTVCSXNxcUxPQ05KMDFydmZBQ2E4V2MvN3pPMTJZTmZ3N1FNa2V6WXFXNithUUVuNmt5VURFOFZwWHU0bzIwaXRQL21heWYrTHNwRlcxK0p0R0Q2R29pdTRxdmVoYmFGRmtqQnZmeTk2eVA0WFhxZ0RSNitUN3dTc0lkcTBJS1VUTHVZUzNxWUI1RUNCb2w4ZW5qUVh2eXpsT01KaitZUUVUU2Yxejh3UzUwY3pQVTZDSE16OS9yOHBFWTNRb3dkRzUrWHZpdzMvU3lMN3N4Q3JXWlNtRkUwUWUyUjM5bXBmeXh3UzFZTmR3em5hNzlQYUdrVUR5SVI3eWNQZHZNd1hSVDhCOTNFdlJ5MllPWW00cEdnZEhrSzlaVWlISjE0bzBsUERnNVF4dzFQSnMwYlRaVWNCelk0d1I1QXZya0E4Z05jWUFleFFITVlzZHlvQ0NydlJyY2wxYWRTakJROU1RZHdwMUorazNtSWdscXdZSEhJOVZvampxNXl5dHBmMG1TRzQ1OGhXTG8wakRwQll3dDBZY3B3b0x2V2ltUkNaTU95SVdKTW5ZYXdzTUVtcnRlamhEckR4OWNNSUNKaU1EcjVJWnhwR0ozbDVaL0wvNmFBKzFadUpqYmVLQmtOYS9iUlU5dTBDVThwNWw0cHQ1c0puY2swdG5KZVBFVVEyK3FNMUFLYm9BTkp3TXdmN2RldXFEVEVjb2tnOGNVZFdWOWRGU3ZVSk5vNE5VNGhuV1JUSExEVHRuQUtnYUF2cGFLSHc4MVhqVm5CdDhoVXdYMGZhbTM5UUJUWUd3VzBzVjBzbmdyYzhRR3hKSmhXb1hxYnlvMnFZby94YStGczN0cWw0YVByUUdvRlFXNndDMDBiV044NjdVa3p1VUV6dTFabzUwQlp6QVovZVJPclJGME1FaVA3NFgvTm1kRHo1cjRGK3A1dk45c29Kb3dwaC8xc0tUL3FTWU9hWVc0c2lNbjVVa0RXOEJ4S0Q2RDluLzhnWlhOcGJJWXhjazE0ODhQeUNvMGtweXk3L0lhSStjYWp3bHJXVHkrUXRsaVZCVFNhN3Q2clM2Z1cvOTR3U2lESUNDM0xFei9PUkZYOUNUWXc3WVNnRlkvUUVSNnlidjAvOTNkTURNOFVaOWI0ck5mRVRTcUI3Y3U5UVZxL2lWeC9uVFBQRTVKS1NLb3dyQ1BYRHg5amZnQXVDVDlHQkc2Wis5dUVkWWpRRnVRVGJmTUluWWorbGx3R2hYWUZVSHcyaGM0WDcrOVNzNkZCbXRzdHhkVUNyRE1uU0lGZUxHaFdsUHhTR1QzSFVpSFJZZTBKL1FIL2duV1lqVXFFeHJuOVFWWEJQVElpcTZnaWtEVkpPUXZBcDZvL0Q2ZTVBUXE4QWpNMlFhaXNTdmc1NWIzekV5cTF5Vk1EYWZOWTBQU0xaY2VCMzZ1S1ZnanVnUDQ1NmZYTjQydzZib01xZWVPQWx5V2ZIN2xzWWczNW1MaCttWmEvSjVUd0ViemN5ZkdHdy9aUFZiREl4ZEtuVGpPVkJsRzAzYWdpWTNYZlhvL2R1elhOOEZVU3VNM016WURFUVBBcjJ3aG95ZEpBZFplS2Z6cFJnOFU5cnJtQ3BlOStPcTNqaVpxUGZmR2xRS1VsUGpkNWUwSmhMbXFQcFZyMllxeUpSOHRMNjRIdWx0Rk43dHVEL2pZRVlZNDlFS0ZRZWQwWlhpUjVRcnRFdE14UjJpTit0Yll3OUs1dDEwOVpkenRMM2YvWE5RZVJtd0E1RmhWeXgzQlZNcVBXYnJVQXM0N3p1ald5RTV2aVJRNWl1MWwycGdka2ZHc1VZMmYzNElvT2VrMlJzbnF4ai9OWjRWKzFMQm4va0hjVHUrYWQzMXdZRmNDS3JDc3dWMjV6QmYxbkxmRVVBVFNEdUNLZjJpVHVkMWtMRDhqMnJibm5VQWpXazBLZ1Q0aDMwR0ZwaGFmMDJVK3RDbFRiWURlOVN1V0NMNWJXcnc2NTUrTTlkOWpreEZ2cmR4MVNaQ2lzeWFqU29jVlJhZ0VDaE82WjJoUlRnUmJuK3gvaEphcGcxcmd1dlZtMDl4WW5KTzNGWFlYZDFMMUpvYThFaU1Nd3BlQURHQWoxSGcyMEtyUWd3MStheFB3TlZqczJ1czEyY1l6QzZaVlNoOHNZY3Urak9HRXZIcjF0Tks4YjJJS3BaVTdDNDhNSXRjWktmTnZkT0ZJTTlxaTl2VndRbytLblFLbVNLWnFORTBLek01RlhteDZ1SFNQZzBKMlRiblY1bkRLbkNVOExWbEQrMXhoQjR1VDJCTnlYTlVpSW1aSDNnRFVKc3owRWhuYUNZajhWUFlrN2grMmJZVmJkT1RzT3RkejRjeEJtdzhXQ2xNSXEwNjZkMlBFR3RIbnR0THR5YnlEV2RxLzcyNXd2b0xIZ3hmS2laK1V2M09mZjRrMkk0RFdqQWZHRnE5N1ZVVDdvWEdycEs2L2FOTnZNL0ovU1hqZHVLNTRJMy9KZjlpSzR3aERlRndMRFY2aFdDbENLQzYydTdxVDMzWjdHZ3JHLzdnYkJCOGZzd2kvQ0NxUWxDa0lEK3hUT3BGd0puSnhvV2FmUFZyWWtLRUFLbWU5VE1NSGd4YTY4YW5oZ3Q1MVZ0bFNuTTliNHdvY2NEU294VjdsTVhRTXBUMVZqZERRK1gySEFPQmhyNHBXcjVGWTJpUEJwSSszSUxDeng1eVVnVnFIU252TnZNbkNTUGMvazRhcllISFpwSDV1RWZPdmJSbG1xT3hCeURZTVd5ZzBaTFZGTGd0VHBlY3E2WGo1NVloVHNYNTM0ejREUEMwWGl2Z2RRd2dBTUhHY2JRM1RVK2FFQTk2dmhMS2xYeURPSXdWYWNvL0o0cXpkT0s3dE1uMGlVRXNjVGIvK0RkVVpHZFp5UkcwSTVCY1ZFQnFDVHlZMngyakM3bEt1eEFZaG5pQ0pBd1h5a1g1Z1VRUkx5TmhhdFFvOHZldTBxZCtMTmZEVEt1cU4wZUFlSUgxTnBsWGswQVNwMU9rT2hJSW9FTnVqWGUydm9rTjVEV1BEWkZXc1E1aWRuL1JUY2c1eEljNk9PcHJOMkQxWmxNU2RRWTJ0R2Z1aTI2MktBYm14Myt0NndaazZhWlFnZndxZ2lseDF4d2JycUZvUFA3aDBpWlJiaEJvR29LTW1jVVNkcjl1TjY2N3RLK2tvdUtXVkRhZmI1WGJiZVE3cFNBcERBZkdYMzRmcTl4V2I5VzgralJrQUJLUktNaGVuZzBOUHNmcDRlSG5OaVhtSnFpOW5sK3dSSFk0czg0U2NXdnNKdjVoallnTkg0MXZnV2FqemdOZGJna1lkdVV4U0QvK1pwbENCL0NxQ3EwaTZDbEpGd1c0b2xFOXNxNGpUcGlXOXN6VERDTDY2cjd1dEhSaWNpQzNSWW8vL0NSU2lhYmVuMGJKQ2E1dGZrQjV1eHhaNlBtTklvVUVmZ0ROaUQ0K21ONlB1eTJwN1RuWEllUTlRcEMvb3ltL3dHdkNmUVpOcCtJaUJTb1ExUlUyQUlGRDh4Zk5YaXUzbGVUNnFkK2lkZ2dOS2JHRHVOamZwTFRqRUUxcWtDajErdWYwWWdiRnZyenlmeVBLdXlNcWJZUjlQSmNDZU11SXVPMVVRL01zYXp2elZab3pETEVRdVduQ1VkVFpyZXJaZEF2a2YxSncxSXliUlFzSkVyUUJ0UjA4MnUzd3BqNHdTOXl4bUtqWmtZZG1xbnJybkxKWTA5T1JCYytvTjVURUZBRk5tZkxSdGNqRkJwV250NUtoQVN4T2l3dGpaeDBuQlhMdVZNU0t4dGpwekE5UFUyYzdNNmJCbXZFZm5tN3hjc2dpMitkQUZkSzY0U0R3TUE3RXIwTWdacDkzNyt6dE5SNkg1d3RWTDNCekIzakllUTVzMWJjSkUxVW5EOGU3YUlkMGtxSXhLYVpnMENGaWEvbEdTazF0bEFVUVpJbWhBenl3MitCNUZHako3YThxQkRZTW85L2Nhd3duQ0xSTDg1SWFyRGM1YnVsNmtCYnN5VUpYVUlINXVqTXJFMGgxZ1I3d0RKV0V5M3c2YjlQRGx5alFGN2RoUjB4UnVUVU9lTWRhZGNXSzRtTHdjYnRkRjhDVUY1RXhtZy9XeFJMdkpyN3luTWVRaHNTMTduRHNIcStCbzkrWmNyMklMWXFZQ01Ma3V4eVhHMEkzWUI0RFlDVW14THdLRkdzYkRBTVZIY0Fvb1Nud0VCckFCb2Z5MVc5MDVyaUc3QzR2ZEV6TlVmTzM0WG5wV000MEdETmRpTnBiOGZic1NkWG5NYnYreFZlN2x0aWZWOEo1TnJxM3ZEMHhhR1dJNXN1bUNRQ1BQTktRVDZ0SGgvWENMSXZsQ1BTOFhFOW9pd2YzaU5YVTVnTUNpWUhMUWhrUUwzQW9Dcm1XaGluT0xkekdkNFo2OXJKbFFyeDRyb0dVbGJ5dUo2YzJkWmwxaHQ5NnFrenJOaUp2WU54NjBLUlJNY3l3eUxJbU4rb2sxWlhxZEcrS0xLVFc4UUtGWm9KS3BLZFNxZUZsbENQUkxuRUtseFkwMGpCWE9sY0ZyeVBnd1gydGxqUnBQSDhYc1pLU0N5NktTNklFRk0zRGVnN25BWTNhbGNUWjVVOXRWVjF1WVhOM0d3NEVxL2kyVWZVYjBXcnpzcWxkKzIzT1NiK2pldXNVa3lJRlkvQS94VDVzNXF6NExISWJNM202ODVDOHlGS1BRbXJ3TS9nT0ZVQjZ6ejl4YlRGK2NqQUNRdFBrUnZ6UWd5bjNEc2Ftc0YwS1N6NnYzYjU0b0RYajJhd1p4MERFSDRjK0FDV2cyd0hUQ2djZG5vbXpjMGdpSWJZRlVXbzhlbCs3TFRSVWd6d0l5dUg4ZjN6U0VKNVp6aCtjZ3VPSi9jUXNxMzNjSjNjZUhxUlppTmx1RFc4TTVLOEJLdldvSmxCREpWM3RRNWdDSmRiMHZVeWRrYlRuZ0IrUitvaE0vd0VyMEpiaVhtSEFZVEZ0TFQwQWI0S2FwSkZpZERXM1JSZmRyb0MzV3EybjlQTUdYU2x5ZUM2R082ZExBZmJzdFdmTzNsRlptYmMzYTNKT2M5ZzE2cU5UVVVDRXNmY3Ivc3c3ZDlodmRzTU9FcXYxb3NmeVRzbUFjU3dzLytheUZDcWx5bmVDVkxYbnBNeXZod0hwVWFRdzA5ditrQ25tbWNwbmt2MitCeTZ3VHVmb2J1Qzc3ejlwRE1XN1NJNkw4U2hEVE1tNnBZRTdCbmZlZUw4R21SbDFzZStma0hxTlJCaHg1MTBZTmloaHVDVnVSN3gweWhTR0c5QXAxZk9XR1hJcUxidWNrZlp6anRhcXB0Z1ZhNE5PQWZ0QldhYm5GZ2NmZzBSdEdvVXFzM2d5eEJQU29pSHVzc09tRW5XSE0yZ2VWaVJpVFdnbThRWU0xb004RmFwQ0VnQmRHK3JXRmg4RmxiRGhkZDkrTExwWVVVRCtoTWVWWTFsOUxwVHZJbm9OOWNoNzB5RWp1VXZmK2dKMG9GR1IzVTBsWVBlWEZ4b0t2dG5SUXNId0NwbTlOVG9ma3FRUFYyYjZpRlduc21FcjZuVWI3Q01NWlVadWFxemZ2Y2pDa2NsWGxHaDRmenRweXNhWGVrQnBBM0MvQUhraWJiS2FvZWtUQTJCRjVIVTVwbmpNTThnRWNvVThUUG9rNlZnQVF2RitJRDg0NDMwZWpsSS9oYnlPVzVsT1hGbEpma05UcUdQVEMzejhQVGhaYUdyRnNTRDkwWkMvNEgwaWtQU1dwRWZrdDI2aWFPcHhub2FvOVVBcWcxWERoWjFmNHhRVS82Yy9rVXhwTlVNeUFhQ2lXQ0JidHBhTzIyYW1laHhwaVhFWE1ERkdaRkdyc3N2aUdXUk5nTXI1cVoxVUxKbHNBd0lrU2lvWnczUUFVSmF3Vzg5dE5sVHk4RXhNYzcwa3lQUDY1T2pCakNMNkZIZjVFbW9BMVRiT3pPMFlQUDlCSnMxbTNlZUcxK1Y2SmF2aTh1OWNWZENDTjFNdGVvM2RTM0I3UHZ5c05NOTIva3A5aVFPbUMvOWhqRysxSElvMmxLcU5MeGhhOG8xcG43VE5POVJpTmJhYk4ydTNaaTUzYkhFQmpLSS93U3lrck5YTUZLUTdBMmx5SzUwNjVLb0JwczVYdWhXZTUxT0JRUzVwTXFlU1JhNENtR2NDYmh0VFRHbVVab2JHUURoaXRqS3Y3NjRZM0FkeXMxQUNubGFOdE11N2RpNHh0K3pZai9PWFU0NHJHL1pydTlMVXNxSzB4RUl3MWRWeUpmMUpkaW5yV0hjMDZCY2RJeHlLU05NdGZzY2tTS0dRcWdpQ0pyKzFWRW5hK01ZaUsyRGxGZFpuZ2pCbWdCWFFETU0vc1hweXlFdVNMMXY5OVN6MkJKWW4vczBKV2NVakdJbnhtM2o4OTF2T0dsQmNORXBqd01uVjliRUZCQzA5bGZhOCs5Y1MvMXVqRUJmeEZ0TThrSkNURjI5UlpBVW9qc3RNbHFVOGxpTi9tcUJaNUJHNnZuSzIxMFA2RGFwaXFPR3BPYjR1QkdwWkFQSGdlYVVQclZ3SDVZQWlmTnlxWE42bU0yT1JuWHNaK2xaZFdtRGdoMjRkWWZqbjY3UWJGeGd6R1l6SUpSZEU0VGRnRGxLV2pZUHhlc2g3RTZ3bXZHd2dWUFpwa2Y2dVJyMVhaOFVUbnVBQUFBQVFiaHg2Y0xZRFVMNlUydFBQYzdGWktEdDdFTytzbGoyQ3BJaE51VW1BUGJHek5LeWZRQnIyUE1GNDJyVDV4TGN2WUFFQUFSR2hVUzJpSFdCek5kcFVwQUFBQUFBQUFBPSc7CnZhciBCUkVBSyA9IDEwMjQ7CnZhciBVTklUTEVTUyA9IHtvcGFjaXR5OjEsekluZGV4OjEsZm9udFdlaWdodDoxLGxpbmVIZWlnaHQ6MSxmbGV4OjEsZmxleEdyb3c6MSxmbGV4U2hyaW5rOjEsb3JkZXI6MSxzdHJva2VXaWR0aDoxLGZpbGxPcGFjaXR5OjEsc3Ryb2tlT3BhY2l0eToxLHBhdGhMZW5ndGg6MX07CnZhciBTVkdUQUdTID0ge3N2ZzoxLHBhdGg6MSxsaW5lOjEsY2lyY2xlOjEscmVjdDoxLHRleHQ6MSxnOjEsZGVmczoxLHBvbHlsaW5lOjEscG9seWdvbjoxLGVsbGlwc2U6MSx0c3BhbjoxfTsKdmFyIFNWR0NBTUVMID0ge3ZpZXdCb3g6MSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOjEscGF0dGVyblVuaXRzOjEsZ3JhZGllbnRVbml0czoxLGdyYWRpZW50VHJhbnNmb3JtOjEsY2xpcFBhdGg6MSxtYXJrZXJXaWR0aDoxLG1hcmtlckhlaWdodDoxLHJlZlg6MSxyZWZZOjEsdGV4dEFuY2hvcjowLGJhc2VQcm9maWxlOjF9Owp2YXIga2ViYWIgPSBmdW5jdGlvbihrKXsgcmV0dXJuIGsucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24oYyl7IHJldHVybiAnLScrYy50b0xvd2VyQ2FzZSgpOyB9KTsgfTsKCmZ1bmN0aW9uIGFwcGx5U3R5bGUobm9kZSwgc3QpewogIGZvciAodmFyIGsgaW4gc3QpewogICAgdmFyIHYgPSBzdFtrXTsKICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBmYWxzZSkgY29udGludWU7CiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInICYmICFVTklUTEVTU1trXSkgdiA9IHYgKyAncHgnOwogICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShrZWJhYihrKSwgU3RyaW5nKHYpKTsKICB9Cn0KCmZ1bmN0aW9uIGFwcGVuZChub2RlLCBjKXsKICBpZiAoYyA9PT0gbnVsbCB8fCBjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gZmFsc2UgfHwgYyA9PT0gdHJ1ZSkgcmV0dXJuOwogIGlmIChBcnJheS5pc0FycmF5KGMpKSB7IGZvciAodmFyIGk9MDtpPGMubGVuZ3RoO2krKykgYXBwZW5kKG5vZGUsIGNbaV0pOyByZXR1cm47IH0KICBpZiAoYyBpbnN0YW5jZW9mIE5vZGUpIHsKICAgIC8vIExlIHByb3RvdHlwZSByw6l1dGlsaXNlIHVuIG3Dqm1lIMOpbMOpbWVudCAodW5lIGNvY2hlLCB1biBmaWxldCkgc3VyIHBsdXNpZXVycwogICAgLy8gbGlnbmVzLiBSZWFjdCBsZSByZWRlc3NpbmUgw6AgY2hhcXVlIGZvaXMgOyB1biBub2V1ZCBET00sIGx1aSwgc2UgZMOpcGxhY2UuCiAgICAvLyBPbiBsZSBkdXBsaXF1ZSBkb25jIGTDqHMgcXUnaWwgZXN0IGTDqWrDoCBwb3PDqSBxdWVscXVlIHBhcnQuCiAgICBub2RlLmFwcGVuZENoaWxkKGMucGFyZW50Tm9kZSA/IGMuY2xvbmVOb2RlKHRydWUpIDogYyk7CiAgICByZXR1cm47CiAgfQogIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGMpKSk7Cn0KCmZ1bmN0aW9uIGVsKHRhZywgcHJvcHMpewogIHZhciBzdmcgPSAhIVNWR1RBR1NbdGFnXTsKICB2YXIgbm9kZSA9IHN2ZyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCB0YWcpCiAgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7CiAgcHJvcHMgPSBwcm9wcyB8fCB7fTsKICBmb3IgKHZhciBrIGluIHByb3BzKXsKICAgIHZhciB2ID0gcHJvcHNba107CiAgICBpZiAoayA9PT0gJ2tleScgfHwgdiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlOwogICAgaWYgKGsgPT09ICdzdHlsZScpIHsgYXBwbHlTdHlsZShub2RlLCB2KTsgY29udGludWU7IH0KICAgIGlmIChrID09PSAnY2xhc3NOYW1lJykgeyBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2KTsgY29udGludWU7IH0KICAgIGlmIChrLmluZGV4T2YoJ29uJykgPT09IDAgJiYgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicpewogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoay5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCB2KTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoc3ZnKSBub2RlLnNldEF0dHJpYnV0ZShTVkdDQU1FTFtrXSA/IGsgOiBrZWJhYihrKSwgU3RyaW5nKHYpKTsKICAgIGVsc2Ugbm9kZS5zZXRBdHRyaWJ1dGUoay5pbmRleE9mKCctJykgPiAtMSA/IGsgOiBrZWJhYihrKSwgU3RyaW5nKHYpKTsKICB9CiAgZm9yICh2YXIgYT0yOyBhPGFyZ3VtZW50cy5sZW5ndGg7IGErKykgYXBwZW5kKG5vZGUsIGFyZ3VtZW50c1thXSk7CiAgcmV0dXJuIG5vZGU7Cn0KCnZhciBSZWFjdCA9IHsgY3JlYXRlRWxlbWVudDogZWwgfTsgICAvLyBsb2NhbCDDoCBjZSBibG9jLCBuJ8OpY3Jhc2UgcGFzIGxlIFJlYWN0IGRlIFdvcmRQcmVzcwoKLyogLS0tIGRvbm7DqWVzIGV0IGNvbXBvc2l0aW9uLCByZXByaXMgdGVscyBxdWVscyBkdSBwcm90b3R5cGUgLS0tICovCgovKiBVbmUgc2V1bGUgZGVzdGluYXRpb24gZCdhY2hhdCBwb3VyIHRvdXRlIGxhIHBhZ2UgOiBjZWxsZSBwdWJsacOpZSBwYXIgbGUgYmxvYyBkZSBwYWdlLgogICBOZSBqYW1haXMgcmVkw6ljbGFyZXIgZCdVUkwgaWNpLCBkZXV4IHZhbGV1cnMgZmluaXJhaWVudCBwYXIgZGl2ZXJnZXIuICovCgpjb25zdCBTRVJJRj0iJ05ld3NyZWFkZXInLEdlb3JnaWEsc2VyaWYiOwpjb25zdCBJTks9JyMxYjIzNTInOwpjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIFBBUEVSPScjZjhmYWZjJywgTElORT0nI2U1ZTdlYicsIFRJTlQ9JyNlZWYyZmInLCBSVElOVD0nI0ZERUNFRic7CmNvbnN0IENBUkVFUj1bWzE5ODIsMjZdLFsxOTg0LDMxXSxbMTk4NiwzNF0sWzE5ODgsMzhdLFsxOTkwLDQyXSxbMTk5Miw0NV0sWzE5OTQsNDldLFsxOTk2LDI5LDFdLFsxOTk4LDI0LDFdLFsyMDAwLDUyXSxbMjAwMSwyMSwxXSxbMjAwMyw1OF0sWzIwMDUsNjFdLFsyMDA3LDY0XSxbMjAwOSw2Nl0sWzIwMTEsNzBdLFsyMDEzLDczXSxbMjAxNSw3Nl0sWzIwMTcsNzldLFsyMDE5LDgyXSxbMjAyMCw4NF0sWzIwMjEsODZdLFsyMDIyLDg5XSxbMjAyMyw5MV0sWzIwMjQsOTNdLFsyMDI1LDk1XV07Cgpjb25zdCBBVklTID0gWwogIC8vIFtpbml0aWFsZSwgY2l0YXRpb24sIHByw6lub20gKyBkw6lwYXJ0ZW1lbnQsIGNvbnRleHRlLCBbbcOpdGFkb25uw6llc11dCiAgWydTJywnUkVNUExBQ0VSIFBBUiBTRVMgTU9UUyBFWEFDVFMnLCdQcsOpbm9tLCBkw6lwYXJ0ZW1lbnQnLCdSZWxldsOpIGRlIFhYIGFubsOpZXMnLFsnWFggc3VqZXRzJywnWCBjb3VycmllcnMnXV0sCiAgWydBJywnUkVNUExBQ0VSIFBBUiBTRVMgTU9UUyBFWEFDVFMnLCdQcsOpbm9tLCBkw6lwYXJ0ZW1lbnQnLCdSZWxldsOpIGRlIFhYIGFubsOpZXMnLFsnWFggc3VqZXRzJywnWCBjb3VycmllcnMnXV0KXTsKY29uc3QgQ09OVEVOVSA9IFsKICBbJzI4IMOgIDUxJywncGFnZXMnLCdzZWxvbiB2b3RyZSBjYXJyacOocmVcdTAwYTA6IGNvbXBvc8OpZXMsIG51bcOpcm90w6llcywgw6AgZ2FyZGVyIGRhbnMgdW4gY2xhc3NldXInXSwKICBbJzEgcGFnZScsJ3BhciBzdWpldCByZXRlbnUnLCdhdmVjIGxcdTIwMTlhbm7DqWUgY29uY2VybsOpZSwgbGUgbW90aWYgw6AgaW52b3F1ZXIgZXQgbGVzIHBpw6hjZXMgw6Agam9pbmRyZSddLAogIFsnMSBjb3VycmllcicsJ3BhciBkw6ltYXJjaGUgw6AgZW5nYWdlcicsJ2TDqWrDoCByw6lkaWfDqSDDoCB2b3RyZSBub20sIMOgIHNpZ25lciBldCBwb3N0ZXInXSwKICBbJ0VuIGV1cm9zJywnY2UgcXVlIMOnYSByZXByw6lzZW50ZScsJ2NoYXF1ZSBjb3JyZWN0aW9uIGNoaWZmcsOpZSwgZHUgYnJ1dCBhdSBuZXQsIHN1ciB2b3MgcHJvcHJlcyB0cmFuY2hlcyddCl07CmNvbnN0IEVUQVBFUyA9IFsKICBbJ1ZvdXMgZW52b3lleiBsZSBQREYgZGUgdm90cmUgcmVsZXbDqScsJ1N1ciBpbmZvLXJldHJhaXRlLmZyLCBydWJyaXF1ZSDCqyBNb24gcmVsZXbDqSBkZSBjYXJyacOocmUgwrssIGJvdXRvbiBUw6lsw6ljaGFyZ2VyLiBTaSB2b3VzIG5cdTIwMTlhdmV6IHBhcyBkZSBjb21wdGUsIGplIHZvdXMgaW5kaXF1ZSBjb21tZW50IGxlIGNyw6llci4gUmllbiBkXHUyMDE5YXV0cmUgw6AgcHLDqXBhcmVyLiddLAogIFsnVm91cyByw6lwb25kZXogw6AgcXVlbHF1ZXMgcXVlc3Rpb25zJywnU3VyIGxlcyBzZXVsZXMgYW5uw6llcyBxdWkgcG9zZW50IHF1ZXN0aW9uLiBVbmUgZGl6YWluZSBkZSBtaW51dGVzLCBlbiB1bmUgZm9pcyBvdSBlbiBwbHVzaWV1cnMuJ10sCiAgWydMZSBkb3NzaWVyIGVzdCBhbmFseXPDqSwgcHVpcyBzaWduw6knLCdMw6lvbmFyZCBEZcOvLCBmb25kYXRldXIgZFx1MjAxOUFEQ0YsIGxlIHJlcHJlbmQgbGlnbmUgw6AgbGlnbmUgZXQgw6ljYXJ0ZSBjZSBxdWkgbmUgc2UgZMOpZmVuZCBwYXMuJ10sCiAgWydWb3VzIGxlIHJlY2V2ZXogc291cyAzIGpvdXJzIG91dnLDqXMnLCdQYXIgZS1tYWlsLCBlbiBQREYuIMOAIGxpcmUgw6AgbFx1MjAxOcOpY3Jhbiwgb3Ugw6AgaW1wcmltZXIgcG91ciDDqWNyaXJlIGRlc3N1cy4nXQpdOwpjb25zdCBKQU1BSVMgPSBbCiAgWydWb3RyZSBudW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZScsJ0lsIGZpZ3VyZSBzdXIgdm90cmUgcmVsZXbDqS4gSWwgZXN0IGx1IHVuZSBmb2lzLCBwb3VyIHJldHJvdXZlciB2b3RyZSBkYXRlIGRlIG5haXNzYW5jZSBldCB2b3RyZSDDomdlIGzDqWdhbCBkZSBkw6lwYXJ0LCBldCBpbCBuXHUyMDE5ZXN0IGphbWFpcyBjb25zZXJ2w6kuIETDqXBvc2V6IGxlIHJlbGV2w6kgdGVsIHF1ZSB2b3RyZSBjYWlzc2Ugdm91cyBsXHUyMDE5YSByZW1pcywgc2FucyByaWVuIG1vZGlmaWVyLiBTdXIgbGVzIGNvdXJyaWVycywgY1x1MjAxOWVzdCB1biBjaGFtcCBsYWlzc8OpIHZpZGUgcXVlIHZvdXMgcmVtcGxpc3NleiDDoCBsYSBtYWluLiddLAogIFsnVm9zIGNvZGVzIGRcdTIwMTlhY2PDqHMnLCdOaSBjZXV4IGRlIHZvdHJlIGVzcGFjZSByZXRyYWl0ZSwgbmkgRnJhbmNlQ29ubmVjdC4gUGVyc29ubmUgbmUgc2UgY29ubmVjdGUgw6Agdm90cmUgcGxhY2UsIGphbWFpcy4nXSwKICBbJ1VuZSBjb3BpZSBkZSB2b3RyZSByZWxldsOpJywnVm90cmUgUERGIGVzdCBkw6l0cnVpdCBkw6hzIHNhIGxlY3R1cmUuIExlcyBkb25uw6llcyBxdWkgZW4gc29udCBleHRyYWl0ZXMgc29udCBjb25zZXJ2w6llcyBsZSB0ZW1wcyBkZSB2b3VzIHJlbWV0dHJlIHZvdHJlIGRvc3NpZXIsIHB1aXMgZWZmYWPDqWVzLiBDaGlmZnLDqSwgaMOpYmVyZ8OpIGVuIEZyYW5jZS4nXQpdOwpjb25zdCBDT01QUklTID0gWwogIFsnVm90cmUgZG9zc2llciBjb21wbGV0LCAyOCDDoCA1MSBwYWdlcycsJ2NvbXByaXMnXSwKICBbJ0NlIHF1ZSBjZWxhIHJlcHLDqXNlbnRlIGVuIGV1cm9zJywnY29tcHJpcyddLAogIFsnTGVzIGNvdXJyaWVycyDDoCBlbnZveWVyJywnY29tcHJpcyddLAogIFsnTGVzIGxldHRyZXMgZGUgcmVsYW5jZSBzaSBsYSBjYWlzc2UgbmUgcsOpcG9uZCBwYXMnLCdjb21wcmlzJ10sCiAgWydMXHUyMDE5ZW52b2kgZW4gcmVjb21tYW5kw6knLCcxNSDDoCAyNSDigqwsIMOgIHZvdHJlIGNoYXJnZSddCl07CmNvbnN0IFBPVVJWT1VTID0gWwogICd2b3VzIGF2ZXogdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUgc291cyBsZXMgeWV1eCBldCB1biBkb3V0ZScsCiAgJ3ZvdHJlIGNhcnJpw6hyZSBhIGRlcyB0cm91cywgZGVzIHRlbXBzIHBhcnRpZWxzLCBkZSBsXHUyMDE5aW50w6lyaW0gb3UgZGVzIHDDqXJpb2RlcyDDoCBsXHUyMDE5w6l0cmFuZ2VyJywKICAndm91cyBsaXF1aWRleiBiaWVudMO0dCBldCB2b3VzIHZvdWxleiB2w6lyaWZpZXIgYXZhbnQsIHBhcyBhcHLDqHMnLAogICd2b3VzIHByw6lwYXJleiBsZSBkb3NzaWVyIGRcdTIwMTl1biBwYXJlbnQnLAogICd2b3VzIHZvdWxleiBxdVx1MjAxOXVuZSBwZXJzb25uZSByZWdhcmRlIHZvdHJlIHJlbGV2w6ksIHBhcyBzZXVsZW1lbnQgdW4gbG9naWNpZWwnCl07CmNvbnN0IFBBU1ZPVVMgPSBbCiAgJ3ZvdXMgYXR0ZW5kZXogcXVcdTIwMTlvbiBmYXNzZSBsZXMgZMOpbWFyY2hlcyDDoCB2b3RyZSBwbGFjZSA6IGxlcyBjb3VycmllcnMgc29udCByw6lkaWfDqXMsIG1haXMgY1x1MjAxOWVzdCB2b3VzIHF1aSBzaWduZXogZXQgcG9zdGV6JywKICAndm91cyBhdHRlbmRleiB1bmUgc2ltdWxhdGlvbiBvZmZpY2llbGxlIGRlIHZvdHJlIHBlbnNpb24gOiBsZSBkb3NzaWVyIGNoaWZmcmUgY2UgcXVlIGNoYXF1ZSBjb3JyZWN0aW9uIHJlcHLDqXNlbnRlLCBpbCBuZSByZW1wbGFjZSBwYXMgbGUgY2FsY3VsIGRlIHZvdHJlIGNhaXNzZScsCiAgJ3ZvdXMgdm91bGV6IHVuZSBwcm9tZXNzZSBkZSBzb21tZSByw6ljdXDDqXLDqWUgOiBwZXJzb25uZSBuZSBwZXV0IHNhdm9pciDDoCBsXHUyMDE5YXZhbmNlIGNlIHF1ZSB2b3RyZSBjYWlzc2UgYWNjZXB0ZXJhJwpdOwpjb25zdCBBSUxMRVVSUyA9IFsKICBbJ0NvbnN1bHRhdGlvbiBzaW1wbGUsIHVuZSBoZXVyZScsJzE1MCDDoCA0MDAg4oKsJywndW4gcHJlbWllciBhdmlzIHN1ciBkZXMgcXVlc3Rpb25zIGNpYmzDqWVzJywxNTAsNDAwXSwKICBbJ0JpbGFuIHJldHJhaXRlIHN0YW5kYXJkJywnNDAwIMOgIDEgMDAwIOKCrCcsJ2FuYWx5c2UgZGUgY2FycmnDqHJlIGV0IGVzdGltYXRpb24gZGVzIGRyb2l0cycsNDAwLDEwMDBdLAogIFsnQmlsYW4gYXBwcm9mb25kaSBzdXIgbWVzdXJlJywnMSAwMDAgw6AgMiA1MDAg4oKsJywncmVjb25zdGl0dXRpb24gZMOpdGFpbGzDqWUsIHBsdXNpZXVycyByw6lnaW1lcycsMTAwMCwyNTAwXSwKICBbJ0FjY29tcGFnbmVtZW50IGp1c3F1XHUyMDE5w6AgbGEgbGlxdWlkYXRpb24nLCcxIDUwMCDDoCA1IDAwMCDigqwnLCdwcmlzZSBlbiBjaGFyZ2UgY29tcGzDqHRlIGR1IGRvc3NpZXInLDE1MDAsNTAwMF0KXTsKY29uc3QgQVBFUkNVUyA9IFsKICBbJ1VuIHN1amV0IMOgIHbDqXJpZmllcicsJ0h1aXQgYmxvY3MgOiBsZSBjb25zdGF0LCBwb3VycXVvaSBjZWxhIG3DqXJpdGUgdW5lIGRlbWFuZGUsIGNlIHF1aSBwZXV0IGxcdTIwMTlleHBsaXF1ZXIsIGxhIHBpw6hjZSDDoCBqb2luZHJlLCBsZSBnZXN0ZSDDoCBmYWlyZSwgY2UgcXVlIMOnYSBwb3J0ZSwgbGUgbml2ZWF1IGRlIGNlcnRpdHVkZSwgbGEgc291cmNlLiddLAogIFsnVm90cmUgY2FycmnDqHJlLCBhbm7DqWUgcGFyIGFubsOpZScsJ0NoYXF1ZSBhbm7DqWUgY29uZnJvbnTDqWUgYXV4IHNldWlscyBlbiB2aWd1ZXVyLCBsZXMgYW5uw6llcyDDoCB2w6lyaWZpZXIgc2lnbmFsw6llcy4nXSwKICBbJ1VuIGNvdXJyaWVyIHByw6p0IMOgIHNpZ25lcicsJ09iamV0LCBjb3JwcywgcGnDqGNlcyDDoCBqb2luZHJlLCBldCBsZXMgY2hhbXBzIGxhaXNzw6lzIHZpZGVzIHF1ZSB2b3VzIHJlbXBsaXNzZXogw6AgbGEgbWFpbi4nXQpdOwpjb25zdCBSRUdBUkRFID0gWwogIFsnVm91cyBhdmV6IHRyYXZhaWxsw6kgZW4gaW50w6lyaW0sIG91IGVuIG1pc3Npb25zIGNvdXJ0ZXMnLCdDZSBzb250IGxlcyBww6lyaW9kZXMgbGVzIHBsdXMgc291dmVudCBhYnNlbnRlcyA6IHBsdXNpZXVycyBlbXBsb3lldXJzLCBkZXMgY29udHJhdHMgZGUgcXVlbHF1ZXMgc2VtYWluZXMsIGRlcyBkw6ljbGFyYXRpb25zIGZhaXRlcyBlbiByZXRhcmQuJ10sCiAgWydWb3VzIGF2ZXogZXUgdW4gdGVtcHMgcGFydGllbCcsJ1VuIHNhbGFpcmUgcGx1cyBmYWlibGUgcGV1dCBwYXNzZXIgc291cyBsZSBzZXVpbCBxdWkgdmFsaWRlIHVuIHRyaW1lc3RyZS4gQ2hhcXVlIGFubsOpZSBlc3QgY29uZnJvbnTDqWUgYXUgc2V1aWwgcXVpIHNcdTIwMTlhcHBsaXF1YWl0IMOgIGxcdTIwMTnDqXBvcXVlLCBwYXMgw6AgY2VsdWkgZFx1MjAxOWF1am91cmRcdTIwMTlodWkuJ10sCiAgWydWb3VzIGF2ZXogw6l0w6kgZW4gYXJyw6p0LCBhdSBjaMO0bWFnZSwgZW4gY29uZ8OpIG1hdGVybml0w6knLCdDZXMgcMOpcmlvZGVzIGRvbm5lbnQgZGVzIHRyaW1lc3RyZXMsIGVuY29yZSBmYXV0LWlsIHF1XHUyMDE5ZWxsZXMgc29pZW50IGluc2NyaXRlcy4gQ1x1MjAxOWVzdCB2w6lyaWZpw6kgdW5lIHBhciB1bmUuJ10sCiAgWydWb3VzIGF2ZXogw6lsZXbDqSBkZXMgZW5mYW50cycsJ1RyaW1lc3RyZXMgZGUgbWF0ZXJuaXTDqSwgZFx1MjAxOcOpZHVjYXRpb24sIG1ham9yYXRpb24gZGUgcGVuc2lvbiwgZXQgbGVzIHRyaW1lc3RyZXMgbGnDqXMgYXV4IGFsbG9jYXRpb25zIGZhbWlsaWFsZXMgKEFWUEYpLCBzb3V2ZW50IGFic2VudHMgOiBjZSBzb250IGRlcyBkcm9pdHMgcXVpIHNlIGRlbWFuZGVudC4nXSwKICBbJ1ZvdXMgYXZleiBjaGFuZ8OpIGRlIG3DqXRpZXIgb3UgZGUgc3RhdHV0JywnU2FsYXJpw6ksIGluZMOpcGVuZGFudCwgZm9uY3Rpb25uYWlyZSwgYWdyaWNvbGUgOiBjZSBxdVx1MjAxOXVuIHLDqWdpbWUgY29tcHRlLCBsXHUyMDE5YXV0cmUgbFx1MjAxOWlnbm9yZSBwYXJmb2lzLiBMZXMgcmVjb3VwZW1lbnRzIHNvbnQgZmFpdHMuJ10sCiAgWydWb3VzIGF2ZXogdHJhdmFpbGzDqSDDoCBsXHUyMDE5w6l0cmFuZ2VyJywnRGFucyBsXHUyMDE5VW5pb24gZXVyb3DDqWVubmUgZXQgbGVzIHBheXMgc291cyBjb252ZW50aW9uLCBjZXMgYW5uw6llcyBjb21wdGVudC4gRWxsZXMgbWFucXVlbnQgcHJlc3F1ZSB0b3Vqb3VycyBhdSByZWxldsOpIGZyYW7Dp2Fpcy4nXSwKICBbJ1ZvdXMgYXZleiBkZXMgYW5uw6llcyDDoCB6w6lybywgb3UgaW5jb21wbMOodGVzJywnVW5lIGFubsOpZSDDoCBkZXV4IHRyaW1lc3RyZXMgYXUgbGlldSBkZSBxdWF0cmUgbmUgc2Ugdm9pdCBwYXMgw6AgbFx1MjAxOcWTaWwuIEVsbGUgc2UgdHJvdXZlIGVuIGNvbXBhcmFudCBsZSBzYWxhaXJlIHBvcnTDqSBhdSBzZXVpbCBkZSBsXHUyMDE5YW5uw6llLiddLAogIFsnVm91cyBuZSBzYXZleiBwYXMgw6AgcXVlbGxlIGRhdGUgdm91cyBwb3V2ZXogcGFydGlyJywnQ2UgcXVlIHZvcyB0cmltZXN0cmVzIHBlcm1ldHRlbnQsIMOgIHF1ZWxsZSBkYXRlLCBldCBjZSBxdWUgdHJvaXMgbW9pcyBkZSBwbHVzIGNoYW5nZXJhaWVudC4nXQpdOwpjb25zdCBSRUdBUkRFX09MRCA9IFsKICBbJ0xlcyBzZXVpbHMsIGFubsOpZSBwYXIgYW5uw6llJywnQ2hhcXVlIGFubsOpZSBlc3QgY29uZnJvbnTDqWUgYXUgc2FsYWlyZSBxdVx1MjAxOWlsIGZhbGxhaXQgZMOpY2xhcmVyLCBjZXR0ZSBhbm7DqWUtbMOgLCBwb3VyIHZhbGlkZXIgdW4gdHJpbWVzdHJlLiBMZXMgc2V1aWxzIG9udCBjaGFuZ8OpIGRvdXplIGZvaXMgZGVwdWlzIDE5NzIuJ10sCiAgWydMZXMgYW5uw6llcyBpbmNvbXBsw6h0ZXMnLCdVbiB0cmltZXN0cmUgbWFucXVhbnQgZW4gMTk5NiBuZSBzZSB2b2l0IHBhcyDDoCBsXHUyMDE5xZNpbC4gSWwgc2UgdHJvdXZlIGVuIGNvbmZyb250YW50IGxlIHNhbGFpcmUgcG9ydMOpIGF1IHNldWlsIGRlIGxcdTIwMTnDqXBvcXVlLiddLAogIFsnTFx1MjAxOWludMOpcmltIGV0IGxlcyBlbXBsb3lldXJzIG11bHRpcGxlcycsJ0xlcyBtaXNzaW9ucyBjb3VydGVzIGV0IGxlcyBlbXBsb3lldXJzIHF1aSBzZSBzdWNjw6hkZW50IHNvbnQgbGEgcHJlbWnDqHJlIHNvdXJjZSBkZSBww6lyaW9kZXMgb3VibGnDqWVzLiddLAogIFsnTGVzIHDDqXJpb2RlcyBhc3NpbWlsw6llcycsJ01hbGFkaWUsIG1hdGVybml0w6ksIGNow7RtYWdlLCBhY2NpZGVudCBkdSB0cmF2YWlsLCBzZXJ2aWNlIG5hdGlvbmFsIDogZWxsZXMgZG9ubmVudCBkZXMgdHJpbWVzdHJlcywgZW5jb3JlIGZhdXQtaWwgcXVcdTIwMTllbGxlcyBzb2llbnQgaW5zY3JpdGVzLiddLAogIFsnTGVzIG1ham9yYXRpb25zIHBvdXIgZW5mYW50cycsJ01hdGVybml0w6ksIMOpZHVjYXRpb24sIG1ham9yYXRpb24gZGUgcGVuc2lvbiwgZXQgbGVzIHRyaW1lc3RyZXMgQVZQRiBsacOpcyBhdXggYWxsb2NhdGlvbnMgZmFtaWxpYWxlcyA6IGRlcyBkcm9pdHMgcXVpIHNlIGRlbWFuZGVudC4nXSwKICBbJ0xlcyByw6lnaW1lcyBjcm9pc8OpcycsJ1LDqWdpbWUgZ8OpbsOpcmFsLCBjb21wbMOpbWVudGFpcmUsIGluZMOpcGVuZGFudHMsIGFncmljb2xlLCBmb25jdGlvbiBwdWJsaXF1ZSA6IGNlIHF1ZSBsXHUyMDE5dW4gY29tcHRlLCBsXHUyMDE5YXV0cmUgbFx1MjAxOWlnbm9yZSBwYXJmb2lzLiddLAogIFsnTGVzIHDDqXJpb2RlcyDDoCBsXHUyMDE5w6l0cmFuZ2VyJywnVW5pb24gZXVyb3DDqWVubmUgZXQgcGF5cyBzb3VzIGNvbnZlbnRpb24gOiBjZXMgYW5uw6llcyBjb21wdGVudCwgZXQgbWFucXVlbnQgcHJlc3F1ZSB0b3Vqb3VycyBhdSByZWxldsOpIGZyYW7Dp2Fpcy4nXSwKICBbJ0xhIGRhdGUgZGUgZMOpcGFydCcsJ0NlIHF1ZSB2b3MgdHJpbWVzdHJlcyBwZXJtZXR0ZW50LCDDoCBxdWVsbGUgZGF0ZSwgZXQgY2UgcXVlIHRyb2lzIG1vaXMgZGUgcGx1cyBjaGFuZ2VyYWllbnQuJ10KXTsKY29uc3QgUFJPRklMUyA9IFsKICBbJ0ludMOpcmltLCBtaXNzaW9ucyBjb3VydGVzLCBwbHVzaWV1cnMgZW1wbG95ZXVycycsJ0xlcyBww6lyaW9kZXMgbGVzIHBsdXMgc291dmVudCBhYnNlbnRlcyBkXHUyMDE5dW4gcmVsZXbDqS4nLAogICAgWydDaGFxdWUgbWlzc2lvbiBlc3QgcmV0cm91dsOpZSBldCByYXR0YWNow6llIGF1IGJvbiByw6lnaW1lLicsJ0xlcyBkw6ljbGFyYXRpb25zIHRhcmRpdmVzIGRcdTIwMTllbXBsb3lldXIgc29udCByZXDDqXLDqWVzIGFubsOpZSBwYXIgYW5uw6llLicsJ0xlcyBww6lyaW9kZXMgZGUgY2jDtG1hZ2UgZW50cmUgZGV1eCBtaXNzaW9ucyBzb250IHbDqXJpZmnDqWVzIHVuZSDDoCB1bmUuJ11dLAogIFsnVGVtcHMgcGFydGllbCwgb3Ugc2FsYWlyZXMgbW9kZXN0ZXMnLCdVbiBzYWxhaXJlIHBsdXMgZmFpYmxlIHBldXQgcGFzc2VyIHNvdXMgbGUgc2V1aWwgZHUgdHJpbWVzdHJlLicsCiAgICBbJ0NoYXF1ZSBhbm7DqWUgZXN0IGNvbmZyb250w6llIGF1IHNldWlsIHF1aSBzXHUyMDE5YXBwbGlxdWFpdCDDoCBsXHUyMDE5w6lwb3F1ZSwgcGFzIMOgIGNlbHVpIGRcdTIwMTlhdWpvdXJkXHUyMDE5aHVpLicsJ0xlcyBhbm7DqWVzIMOgIGRldXggb3UgdHJvaXMgdHJpbWVzdHJlcyBhdSBsaWV1IGRlIHF1YXRyZSBzb250IGlzb2zDqWVzLicsJ0xlcyBtYWpvcmF0aW9ucyBsacOpZXMgYXV4IGVuZmFudHMgZXQgw6AgbFx1MjAxOUFWUEYgc29udCBjb250csO0bMOpZXMuJ11dLAogIFsnUGx1c2lldXJzIHLDqWdpbWVzLCBvdSB1biBjaGFuZ2VtZW50IGRlIHN0YXR1dCcsJ0NlIHF1XHUyMDE5dW4gcsOpZ2ltZSBjb21wdGUsIGxcdTIwMTlhdXRyZSBsXHUyMDE5aWdub3JlIHBhcmZvaXMuJywKICAgIFsnUsOpZ2ltZSBnw6luw6lyYWwsIE1TQSwgaW5kw6lwZW5kYW50cywgZm9uY3Rpb24gcHVibGlxdWUgZXQgQWdpcmMtQXJyY28gc29udCByZWNvdXDDqXMuJywnTGVzIGFubsOpZXMgY29tcHTDqWVzIGRldXggZm9pcywgb3UgcGFyIHBlcnNvbm5lLCBzb250IHNpZ25hbMOpZXMuJywnTGVzIGRyb2l0cyBvdXZlcnRzIGRhbnMgdW4gcsOpZ2ltZSBvdWJsacOpIHNvbnQgcmVjaGVyY2jDqXMuJ11dLAogIFsnRGVzIGFubsOpZXMgw6AgbFx1MjAxOcOpdHJhbmdlcicsJ0VsbGVzIG1hbnF1ZW50IHByZXNxdWUgdG91am91cnMgYXUgcmVsZXbDqSBmcmFuw6dhaXMuJywKICAgIFsnVW5pb24gZXVyb3DDqWVubmUgZXQgcGF5cyBzb3VzIGNvbnZlbnRpb24gOiBsZXMgYW5uw6llcyBzb250IHLDqWNsYW3DqWVzIGF2ZWMgbGUgZm9ybXVsYWlyZSBhZGFwdMOpLicsJ0xlcyBww6lyaW9kZXMgbm9uIHJlcG9ydMOpZXMgc29udCBkYXTDqWVzIGV0IGRvY3VtZW50w6llcy4nLCdMXHUyMDE5ZWZmZXQgc3VyIHZvdHJlIGRhdGUgZGUgZMOpcGFydCBlc3QgY2FsY3Vsw6kuJ11dCl07CmNvbnN0IEZBUSA9IFsKICBbJ0VzdC1jZSBlbmNvcmUgdW4gb3V0aWwgcXVpIHJlY3JhY2hlIHVuIFBERiBhdXRvbWF0aXF1ZcKgPycsJ05vbiwgZXQgY1x1MjAxOWVzdCBwcsOpY2lzw6ltZW50IGxhIHJhaXNvbiBkdSBkw6lsYWkuIFVuIG1vdGV1ciBkw6lwb3VpbGxlIHZvdHJlIHJlbGV2w6ksIG1haXMgcmllbiBuZSBwYXJ0IGF2YW50IHF1ZSBMw6lvbmFyZCBEZcOvIGFpdCByZXByaXMgbGUgZG9zc2llciBsaWduZSDDoCBsaWduZSBldCBzaWduw6kgY2hhcXVlIGRlbWFuZGUuJ10sCiAgWydFdCBzaSB2b3VzIG5lIHRyb3V2ZXogcmllbiBjaGV6IG1vaSA/JywnVW5lIGNhcnJpw6hyZSBjb21wbMOodGUsIDE5MiB0cmltZXN0cmVzIHZhbGlkw6lzIHBvdXIgMTcwIHJlcXVpcywgcHJvZHVpdCBxdWFuZCBtw6ptZSBkZXMgc3VqZXRzIGV0IGRlcyBjb3VycmllcnNcdTAwYTA6IGxlIGRvc3NpZXIgcG9ydGUgZGVzIGRyb2l0cyDDoCBkZW1hbmRlciwgcGFzIHNldWxlbWVudCBkZXMgZXJyZXVycyDDoCBjb3JyaWdlci4gRXQgc2kgdm90cmUgcmVsZXbDqSBlc3QganVzdGUsIGxlIGRvc3NpZXIgbGUgZGl0LCBhdmVjIGxlcyBzZXVpbHMgYXBwbGlxdcOpcyDDoCBjaGFxdWUgYW5uw6llLiBWb3VzIHJlZmVybWV6IGxlIHN1amV0IGF1IGxpZXUgZFx1MjAxOXkgcmVwZW5zZXIgdG91cyBsZXMgc2l4IG1vaXMuJ10sCiAgWydQb3VycXVvaSBuZSBwYXMgZGVtYW5kZXIgw6dhIMOgIG1hIGNhaXNzZSA/JywnTFx1MjAxOWVudHJldGllbiBpbmZvcm1hdGlvbiByZXRyYWl0ZSBlc3QgZ3JhdHVpdCBldCBpbCB2YXV0IGxhIHBlaW5lIGRcdTIwMTnDqnRyZSBkZW1hbmTDqS4gSWwgY29tbWVudGUgY2UgcXVlIHZvdHJlIGNhaXNzZSBhIGVucmVnaXN0csOpLiBJbCBuZSBjaGVyY2hlIHBhcyBjZSBxdWkgbWFucXVlLCBldCBpbCBuXHUyMDE5w6ljcml0IHBhcyBsZXMgY291cnJpZXJzLiddLAogIFsnUXVlbHMgcsOpZ2ltZXMgcmVnYXJkZXotdm91c8KgPycsJ1RvdXMgY2V1eCBxdWkgZmlndXJlbnQgw6Agdm90cmUgcmVsZXbDqSA6IGxlIHLDqWdpbWUgZ8OpbsOpcmFsLCBsYSBNU0EsIGxlcyBpbmTDqXBlbmRhbnRzLCBsYSBmb25jdGlvbiBwdWJsaXF1ZSwgbGVzIHLDqWdpbWVzIHNww6ljaWF1eCwgZXQgbGEgY29tcGzDqW1lbnRhaXJlIEFnaXJjLUFycmNvLiBVbmUgY2FycmnDqHJlIHBhc3PDqWUgZFx1MjAxOXVuIHN0YXR1dCDDoCBsXHUyMDE5YXV0cmUgZXN0IGp1c3RlbWVudCBjZWxsZSBvw7kgbGVzIHRyaW1lc3RyZXMgc2UgcGVyZGVudC4nXSwKICBbJ01hIG3DqHJlIG5cdTIwMTlhIHBhcyBkZSBjb21wdGUgc3VyIGxcdTIwMTllc3BhY2UgcmV0cmFpdGUuJywnQ1x1MjAxOWVzdCBsZSBjYXMgbGUgcGx1cyBmcsOpcXVlbnQuIExlIGNvbXB0ZSBzZSBjcsOpZSBlbiBxdWVscXVlcyBtaW51dGVzIHN1ciBpbmZvLXJldHJhaXRlLmZyLCBhdmVjIHVuIG51bcOpcm8gZGUgc8OpY3VyaXTDqSBzb2NpYWxlIGV0IHVuZSBhZHJlc3NlIGUtbWFpbC4gTGUgcmVsZXbDqSBzZSB0w6lsw6ljaGFyZ2UgZW5zdWl0ZSBlbiB1biBjbGljLCBldCB2b3VzIHBvdXZleiBmYWlyZSBsYSBkw6ltYXJjaGUgcG91ciBlbGxlLiddLAogIFsnVm91cyBmYWl0ZXMgbGVzIGTDqW1hcmNoZXMgw6AgbWEgcGxhY2XCoD8nLCdOb24uIExlcyBjb3VycmllcnMgc29udCByw6lkaWfDqXMsIHZvdXMgbGVzIHNpZ25leiBldCBsZXMgcG9zdGV6LiBWb3RyZSBjYWlzc2UgbmUgY29ycmVzcG9uZCBxdVx1MjAxOWF2ZWMgdm91cywgZXQgbGUgZG9zc2llciByZXN0ZSB2b3RyZSBwcm9wcmnDqXTDqS4nXSwKICBbJ0NvbWJpZW4gdmFpcy1qZSByw6ljdXDDqXJlcsKgPycsJ0plIG5lIHByb21ldHMgYXVjdW5lIHNvbW1lIDogY2UgcXVlIGxhIGNhaXNzZSBhY2NlcHRlcmEgZGUgY29ycmlnZXIgbmUgc2Ugc2FpdCBxdVx1MjAxOWFwcsOocyBleGFtZW4gZGVzIHBpw6hjZXMuIExlIGRvc3NpZXIgY2hpZmZyZSBlbiByZXZhbmNoZSBjZSBxdWUgY2hhcXVlIGNvcnJlY3Rpb24gcmVwcsOpc2VudGVyYWl0IHNpIGVsbGUgYWJvdXRpdCwgZHUgYnJ1dCBhdSBuZXQsIHN1ciB2b3MgcHJvcHJlcyB0cmFuY2hlcy4nXSwKICBbJ0plIGxpcXVpZGUgZGFucyBkZXV4IG1vaXMsIGVzdC1jZSBlbmNvcmUgdXRpbGXCoD8nLCdPdWksIHRhbnQgcXVlIGxhIGxpcXVpZGF0aW9uIG5cdTIwMTllc3QgcGFzIHByb25vbmPDqWUuIENvbXB0ZXogdG91dGVmb2lzIHBsdXNpZXVycyBtb2lzIGRcdTIwMTlpbnN0cnVjdGlvbiBkdSBjw7R0w6kgZGUgbGEgY2Fpc3NlLCBldCBjZXJ0YWlucyBkw6lsYWlzIGRlIHJlY291cnMgY291cmVudCBkw6lqw6AgOiBjXHUyMDE5ZXN0IHBvdXIgY2VsYSBxdWUgbGUgZG9zc2llciBpbmRpcXVlIGRhbnMgcXVlbCBvcmRyZSB0cmFpdGVyIGxlcyBzdWpldHMuJ10sCiAgWydFc3QtY2UgcXVlIGplIHBldXggbGUgZmFpcmUgcG91ciB1biBwYXJlbnTCoD8nLCdPdWkuIEpcdTIwMTlhbmFseXNlIGxlIHJlbGV2w6kgcXVpIG1cdTIwMTllc3QgZMOpcG9zw6ksIHF1ZWwgcXVcdTIwMTllbiBzb2l0IGxlIHRpdHVsYWlyZVx1MDBhMDogaWwgdm91cyByZXZpZW50IGRlIHZvdXMgYXNzdXJlciBxdWUgbGEgcGVyc29ubmUgY29uY2VybsOpZSBlc3QgZFx1MjAxOWFjY29yZCBldCBxdWUgdm91cyBwb3V2ZXogZGlzcG9zZXIgZGUgc29uIGRvY3VtZW50LiBMZSBkb3NzaWVyIGVzdCDDqXRhYmxpIMOgIHNvbiBub20sIGV0IGxlcyBjb3VycmllcnMgc29udCDDoCBzYSBzaWduYXR1cmUuJ10sCiAgWydDb21iaWVuIGRlIHRlbXBzIGNlbGEgbWUgcHJlbmTCoD8nLCdVbmUgZGl6YWluZSBkZSBtaW51dGVzwqA6IHTDqWzDqWNoYXJnZXIgdm90cmUgcmVsZXbDqSwgbFx1MjAxOWVudm95ZXIsIHLDqXBvbmRyZSBhdXggcXVlc3Rpb25zIHBvc8OpZXMgc3VyIGxlcyBhbm7DqWVzIHF1aSBwb3NlbnQgcHJvYmzDqG1lLiBMZSByZXN0ZSBzZSBwYXNzZSBkZSBub3RyZSBjw7R0w6kuJ10sCiAgWydFdCBzaSBtYSBjYWlzc2UgcmVmdXNlIGxhIGNvcnJlY3Rpb27CoD8nLCdMZSBkb3NzaWVyIGNvbnRpZW50IGxlcyBsZXR0cmVzIGRlIHJlbGFuY2UgZXQgbGEgbWFyY2hlIMOgIHN1aXZyZSBqdXNxdVx1MjAxOcOgIGxhIGNvbW1pc3Npb24gZGUgcmVjb3VycyBhbWlhYmxlLCBhdmVjIGxlcyBkw6lsYWlzIHF1aSBjb3VyZW50LiBVbiByZWZ1cyBuXHUyMDE5ZXN0IHBhcyBsYSBmaW4gZGUgbGEgZMOpbWFyY2hlLiddLAogIFsnUHVpcy1qZSB2b3VzIGpvaW5kcmXCoD8nLCdQYXIgw6ljcml0LCDDoCBjb250YWN0QGFkY2Yub3JnLiBJbCBuXHUyMDE5eSBhIHBhcyBkZSBudW3DqXJvIGRlIHTDqWzDqXBob25lLCBldCBqZSBwcsOpZsOocmUgbFx1MjAxOcOpY3JpcmUgcGx1dMO0dCBxdWUgZGUgdm91cyBsYWlzc2VyIGNoZXJjaGVyLiddLAogIFsnVm91cyDDqnRlcyB1biBzZXJ2aWNlIHB1YmxpY8KgPycsJ05vbi4gSmUgbmUgc3VpcyBtYW5kYXTDqSBwYXIgYXVjdW5lIGNhaXNzZSBkZSByZXRyYWl0ZSBldCBqZSBuZSByZW1wbGFjZSBwYXMgbGEgdsO0dHJlLiddCl07CgoKY2xhc3MgTGVjdHVyZSB7CiAgc3RhdGUgPSB7IGRpYWc6ICdkZXBvdCcsIG1haWxPazogZmFsc2UsIHBvcHVwOiBmYWxzZSwgcG9wdXBNYWlsT2s6IGZhbHNlLCBhbm5lZTogMCwgcUluZGV4OiAwLCByZXBvbnNlczoge30sIG1hcmNoZU9rOiBmYWxzZSB9OwogIHByaWNlKCl7IHJldHVybiB0aGlzLnByb3BzLnByaWNlID8/ICh3aW5kb3cuX19BRENGX1BSSVhfXyB8fCAnMjQ5IOKCrCBUVEMnKTsgfQogIGRlbGFpKCl7IHJldHVybiB0aGlzLnByb3BzLmRlbGFpID8/ICczIGpvdXJzIG91dnLDqXMnOyB9CiAgZm91bmRlcigpeyByZXR1cm4gdGhpcy5wcm9wcy5mb3VuZGVyID8/ICdMw6lvbmFyZCBEZcOvJzsgfQoKICBzZXRTdGF0ZShwYXRjaCl7CiAgICB2YXIgbmV4dCA9IHR5cGVvZiBwYXRjaCA9PT0gJ2Z1bmN0aW9uJyA/IHBhdGNoKHRoaXMuc3RhdGUpIDogcGF0Y2g7CiAgICBmb3IgKHZhciBrIGluIG5leHQpIHRoaXMuc3RhdGVba10gPSBuZXh0W2tdOwogICAgdGhpcy5tb3VudCgpOwogIH0KCiAgbW91bnQoKXsKICAgIHZhciBoZXJvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkY2YtbGVjdHVyZS1oZXJvJyk7CiAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLWxlY3R1cmUnKTsKICAgIGlmICghaG9zdCAmJiAhaGVybykgcmV0dXJuOwogICAgdGhpcy5faG9zdCA9IGhvc3QgfHwgaGVybzsKICAgIHRoaXMubW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCBCUkVBSzsKICAgIC8vIExlIGTDqWZpbMOpIHJlLXJlbmRlciB0b3V0ZXMgbGVzIDkwIG1zIDogb24gcHLDqXNlcnZlIGxlIGNoYW1wIGUtbWFpbCBlbiBjb3VycyBkZQogICAgLy8gc2Fpc2llICh2YWxldXIsIGZvY3VzLCBjdXJzZXVyKSwgcXVlbCBxdWUgc29pdCBsZSBwb2ludCBkZSBtb250YWdlLgogICAgdmFyIGFlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CiAgICB2YXIgb2xkSW5wdXQ9KGhvc3QmJmhvc3QucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpKXx8KGhlcm8mJmhlcm8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpKTsKICAgIHZhciBzdj1udWxsLCBmb2M9ZmFsc2UsIHNlbD1udWxsOwogICAgaWYob2xkSW5wdXQpeyBzdj1vbGRJbnB1dC52YWx1ZTsgaWYoYWU9PT1vbGRJbnB1dCl7IGZvYz10cnVlOyB0cnl7IHNlbD1bb2xkSW5wdXQuc2VsZWN0aW9uU3RhcnQsb2xkSW5wdXQuc2VsZWN0aW9uRW5kXTsgfWNhdGNoKGUpe30gfSB9CgogICAgLy8gRGV1eCBwb2ludHMgZGUgbW9udGFnZSA6IGxhIGNhcnRlIGRhbnMgbGUgcHJlbWllciDDqWNyYW4sIGxhIHN1aXRlIGVuIHBsZWluZSBsYXJnZXVyLgogICAgaWYgKGhlcm8pIHsKICAgICAgaGVyby5pbm5lckhUTUwgPSAnJzsKICAgICAgdmFyIGNhcnRlSGVybyA9IHRoaXMubGVjdHVyZSh0aGlzLm1vYmlsZSwgJ2hlcm8nKTsKICAgICAgaWYgKGNhcnRlSGVybykgaGVyby5hcHBlbmRDaGlsZChjYXJ0ZUhlcm8pOwogICAgICAvLyBMYSByw6lzZXJ2YXRpb24gZGUgY2hhcmdlbWVudCBzZSBsw6h2ZSBhdSBkw6ltb250YWdlLCBzaW5vbiBsZSBow6lyb3MgZ2FyZGUgdW4gdmlkZS4KICAgICAgaGVyby5zdHlsZS5taW5IZWlnaHQgPSBjYXJ0ZUhlcm8gPyAnJyA6ICcwcHgnOwogICAgfQogICAgaWYgKGhvc3QpIHsKICAgICAgaG9zdC5pbm5lckhUTUwgPSAnJzsKICAgICAgdmFyIHBsZWluID0gdGhpcy5sZWN0dXJlKHRoaXMubW9iaWxlKTsKICAgICAgaWYgKHBsZWluKSBob3N0LmFwcGVuZENoaWxkKHBsZWluKTsKICAgICAgaG9zdC5zdHlsZS5taW5IZWlnaHQgPSBwbGVpbiA/ICcnIDogJzBweCc7CiAgICB9CiAgICB2YXIgY2libGUgPSBob3N0IHx8IGhlcm87CiAgICB2YXIgcG9wID0gdGhpcy5wb3B1cFJlbGV2ZSh0aGlzLm1vYmlsZSk7CiAgICBpZiAocG9wICYmIGNpYmxlKSBjaWJsZS5hcHBlbmRDaGlsZChwb3ApOwogICAgaWYoc3YhPW51bGwpeyB2YXIgbmk9KGNpYmxlJiZjaWJsZS5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJykpfHwoaGVybyYmaGVyby5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJykpOyBpZihuaSl7IG5pLnZhbHVlPXN2OyBpZihmb2MpeyB0cnl7IG5pLmZvY3VzKCk7IGlmKHNlbCkgbmkuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsWzBdLHNlbFsxXSk7IH1jYXRjaChlKXt9IH0gfSB9CiAgfQoKICBleWVicm93KHQsY29sb3Isc2l6ZSxudW0pewogICAgY29uc3QgZWw9UmVhY3QuY3JlYXRlRWxlbWVudCwgYmFzZT17Zm9udFNpemU6KHNpemV8fDEyKSsncHgnLGZvbnRXZWlnaHQ6NjAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxsaW5lSGVpZ2h0OjEuNH07CiAgICBpZighY29sb3J8fGNvbG9yPT09TkFWWSkgcmV0dXJuIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzExcHgnfX0sCiAgICAgIG51bT9lbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOicxNXB4Jyxmb250U3R5bGU6J2l0YWxpYycsY29sb3I6JyNjNDE3M2EnLGZsZXhTaHJpbms6MH19LG51bSk6ZWwoJ3NwYW4nLHtzdHlsZTp7d2lkdGg6JzIycHgnLGhlaWdodDonMnB4JyxiYWNrZ3JvdW5kOlJFRCxmbGV4U2hyaW5rOjB9fSksCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6T2JqZWN0LmFzc2lnbih7fSxiYXNlLHtjb2xvcjonI2M0MTczYScsd2hpdGVTcGFjZTonbm93cmFwJ30pfSx0KSk7CiAgICByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOk9iamVjdC5hc3NpZ24oe30sYmFzZSx7Y29sb3I6Y29sb3Isd2hpdGVTcGFjZTonbm93cmFwJ30pfSx0KTsKICB9CgogIC8vIGZhYy1zaW1pbMOpIGRlIGxhIGNvdXZlcnR1cmUgZHUgZG9zc2llciwgw6AgbCfDqWNoZWxsZQoKICBsZWN0dXJlKG0scGxhY2UpewogICAgY29uc3QgZWw9UmVhY3QuY3JlYXRlRWxlbWVudDsKICAgIGNvbnN0IGlubmVyPWM9PmVsKCdkaXYnLHtzdHlsZTp7bWF4V2lkdGg6bT8nbm9uZSc6JzEwNjBweCcsbWFyZ2luOicwIGF1dG8nLHBhZGRpbmc6bT8nMCAyNHB4JzonMCA2MHB4J319LGMpOwogICAgY29uc3QgZXRhdD0odGhpcy5zdGF0ZS5kaWFnJiZ0aGlzLnN0YXRlLmRpYWchPT0nZGVwb3QnKT90aGlzLnN0YXRlLmRpYWc6J2RlcG90JzsKICAgIGNvbnN0IGtpY2s9KHQsYyk9PmVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTAuNXB4JzonMTFweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOmN8fEdSRVl9fSx0KTsKCiAgICBjb25zdCBjaGlmZnJlPShuLGxhYixzdWIsZm9ydCk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzVweCcsYm9yZGVyVG9wOicycHggc29saWQgJysoZm9ydD9SRUQ6TkFWWSkscGFkZGluZ1RvcDptPycxMnB4JzonMTRweCd9fSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzMwcHgnOiczOHB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI1ZW0nLGNvbG9yOk5BVll9fSxuKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNXB4Jyxmb250V2VpZ2h0OjYwMCxsaW5lSGVpZ2h0OjEuMzUsY29sb3I6TkFWWX19LGxhYiksCiAgICAgIHN1Yj9lbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSxzdWIpOm51bGwpOwoKICAgIGNvbnN0IHN1amV0PSh0LGVuamV1KT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm0/JzEwcHgnOicxMnB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxMXB4IDAnOicxM3B4IDAnfX0sCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonOHB4JyxoZWlnaHQ6JzhweCcsYmFja2dyb3VuZDpSRUQsbWFyZ2luVG9wOic2cHgnfX0pLAogICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MCxmb250U2l6ZTptPycxNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMH19LHQpLAogICAgICAoZW5qZXUhPW51bGwpP2VsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjonI2M0MTczYScsd2hpdGVTcGFjZTonbm93cmFwJ319LGVuamV1KycgdHJpbWVzdHJlcyBlbiBqZXUnKTpudWxsKTsKCgogICAgY29uc3QgY2FydGU9KGtpZHMscHJpbmNpcGFsZSk9PmVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDoocHJpbmNpcGFsZT8nM3B4IHNvbGlkICcrUkVEOicycHggc29saWQgJytOQVZZKSxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3hTaGFkb3c6cHJpbmNpcGFsZT8nMCAzMHB4IDcwcHggLTQycHggcmdiYSgxNCwxOSw3OSwwLjM4KSc6J25vbmUnLHBhZGRpbmc6bT8ocHJpbmNpcGFsZT8nMjRweCAxOHB4IDI2cHgnOicyMHB4IDE4cHggMjJweCcpOihwcmluY2lwYWxlPyczNHB4IDM0cHggMzZweCc6JzI4cHggMjhweCAzMHB4JyksZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTJweCc6JzE0cHgnfX0sa2lkcyk7CgogICAgLy8gTGEgY2FydGUgZHUgcHJlbWllciDDqWNyYW4gOiB1bmUgc2V1bGUgem9uZSBjbGFpcmUsIGRldXggcG9ydGVzLCBsZSBwcml4IGVuIHBpZWQuCiAgICAvLyBCbG9jIGd1aWTDqSA6IG1hc3F1w6kgYXUgY2hhcmdlbWVudCwgb3V2ZXJ0IHBhciBsZSBib3V0b24gZHUgaGVyby4gVHJvaXMgw6l0YXRzLAogICAgLy8gdW5lIHNldWxlIGNvbG9ubmUgZGUgbGVjdHVyZSwgYXVjdW5lIGFjdGlvbiDDoCBtb2lucyBkZSA0OCBweC4KICAgIGNvbnN0IGdUaXRyZT0odCk9PmVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNHB4JzonMzBweCcsbGluZUhlaWdodDoxLjE1LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LHQpOwogICAgY29uc3QgZ1RleHRlPSh0KT0+ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMTdweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LHQpOwogICAgY29uc3QgZ05vdGU9KHQpPT5lbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOicxNnB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sdCk7CiAgICBjb25zdCBnUmV0b3VyPSh2ZXJzLHQpPT5lbCgnYnV0dG9uJyx7b25DbGljazooKT0+eyB0aGlzLnNldFN0YXRlKHtndWlkZTp2ZXJzfSk7IH0sCiAgICAgIG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPU5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1HUkVZO30sCiAgICAgIHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGJhY2tncm91bmQ6J3RyYW5zcGFyZW50JyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGFsaWduU2VsZjonZmxleC1zdGFydCcsZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOic5cHgnLG1pbkhlaWdodDonNDhweCcscGFkZGluZzonMCAycHgnLGZvbnRTaXplOicxNnB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpHUkVZLHRyYW5zaXRpb246J2NvbG9yIC4xOHMgZWFzZSd9fSwKICAgICAgZWwoJ3N2Zycse3dpZHRoOjE1LGhlaWdodDoxNSx2aWV3Qm94OicwIDAgMjQgMjQnLGZpbGw6J25vbmUnLHN0eWxlOntmbGV4U2hyaW5rOjB9fSxlbCgncGF0aCcse2Q6J00xNSA1bC04IDcgOCA3JyxzdHJva2U6J2N1cnJlbnRDb2xvcicsc3Ryb2tlV2lkdGg6Mi4yLHN0cm9rZUxpbmVjYXA6J3JvdW5kJyxzdHJva2VMaW5lam9pbjoncm91bmQnfSkpLHQpOwogICAgY29uc3QgZ0NhZHJlPShraWRzKT0+ZWwoJ2Rpdicse3N0eWxlOnttYXhXaWR0aDptPydub25lJzonNzAwcHgnLG1hcmdpbjonMCBhdXRvJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQsYm94U2hhZG93OicwIDMwcHggNzBweCAtNDRweCByZ2JhKDMsNiwzMiwwLjU1KScscGFkZGluZzptPycyMnB4IDIwcHggMjRweCc6JzM0cHggNDBweCAzNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxNnB4JzonMThweCd9fSxraWRzKTsKICAgIGNvbnN0IGdGZXJtZXI9ZWwoJ2J1dHRvbicse29uQ2xpY2s6KCk9PnsgdHJ5eyBtdHJhY2soJ2d1aWRlX2Zlcm1lJyx7fSk7IH1jYXRjaChlKXt9IHRoaXMuc2V0U3RhdGUoe2d1aWRlOm51bGx9KTsgfSwKICAgICAgb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9TkFWWTt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPUdSRVk7fSwKICAgICAgc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsYmFja2dyb3VuZDondHJhbnNwYXJlbnQnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsYWxpZ25TZWxmOidmbGV4LXN0YXJ0JyxtaW5IZWlnaHQ6JzQ4cHgnLHBhZGRpbmc6JzAgMnB4Jyxmb250U2l6ZTonMTZweCcsY29sb3I6R1JFWSx0ZXh0RGVjb3JhdGlvbjondW5kZXJsaW5lJyx0ZXh0VW5kZXJsaW5lT2Zmc2V0OiczcHgnLHRyYW5zaXRpb246J2NvbG9yIC4xOHMgZWFzZSd9fSwnRmVybWVyIGNldHRlIMOpdGFwZScpOwoKICAgIGNvbnN0IGdDaG9peENhcnRlPSh0aXRyZSxzb3VzLG9uQ2xpY2spPT5lbCgnYnV0dG9uJyx7b25DbGljazpvbkNsaWNrLAogICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1OQVZZO2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZjRmN2ZkJzt9LAogICAgICBvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0nI2M5Y2ZkYSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNmZmZmZmYnO30sCiAgICAgIHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRleHRBbGlnbjonbGVmdCcsd2lkdGg6JzEwMCUnLG1pbkhlaWdodDonNzJweCcscGFkZGluZzptPycxNnB4JzonMThweCAyMHB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzJweCBzb2xpZCAjYzljZmRhJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTRweCcsdHJhbnNpdGlvbjonYm9yZGVyLWNvbG9yIC4xOHMgZWFzZSwgYmFja2dyb3VuZCAuMThzIGVhc2UnfX0sCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowfX0sCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZGlzcGxheTonYmxvY2snLGZvbnRTaXplOm0/JzE3cHgnOicxOHB4JyxsaW5lSGVpZ2h0OjEuMyxmb250V2VpZ2h0OjcwMCxjb2xvcjpOQVZZfX0sdGl0cmUpLAogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2Rpc3BsYXk6J2Jsb2NrJyxtYXJnaW5Ub3A6JzRweCcsZm9udFNpemU6JzE2cHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOkdSRVl9fSxzb3VzKSksCiAgICAgIGVsKCdzdmcnLHt3aWR0aDoxOCxoZWlnaHQ6MTgsdmlld0JveDonMCAwIDI0IDI0JyxmaWxsOidub25lJyxzdHlsZTp7ZmxleFNocmluazowfX0sZWwoJ3BhdGgnLHtkOidNOSA1bDggNy04IDcnLHN0cm9rZTpSRUQsc3Ryb2tlV2lkdGg6Mi40LHN0cm9rZUxpbmVjYXA6J3JvdW5kJyxzdHJva2VMaW5lam9pbjoncm91bmQnfSkpKTsKCiAgICBjb25zdCBndWlkZUNob2l4PWdDYWRyZShbCiAgICAgIGVsKCdkaXYnLHtrZXk6J2snLHN0eWxlOntmb250U2l6ZTonMTFweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOkdSRVl9fSwnUHLDqS1hbmFseXNlIGdyYXR1aXRlJyksCiAgICAgIGdUaXRyZSgnQXZlei12b3VzIHZvdHJlIHJlbGV2w6kgZGUgY2FycmnDqHJlXHUwMGEwPycpLAogICAgICBnVGV4dGUoJ0NcdTIwMTllc3QgbGUgZG9jdW1lbnQgZGlzcG9uaWJsZSBkYW5zIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZSBxdWkgcsOpY2FwaXR1bGUgdm90cmUgY2FycmnDqHJlIGFubsOpZSBwYXIgYW5uw6llLicpLAogICAgICBlbCgnZGl2Jyx7a2V5OidjJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzE0cHgnfX0sCiAgICAgICAgZ0Nob2l4Q2FydGUoJ091aSwgalx1MjAxOWFpIG1vbiByZWxldsOpJywnSlx1MjAxOWFpIGxlIGRvY3VtZW50IGF1IGZvcm1hdCBQREYnLCgpPT57IHRyeXsgbXRyYWNrKCdndWlkZV9jaG9peCcse3ZvaWU6J2RlcG90J30pOyB9Y2F0Y2goZSl7fSB0aGlzLnNldFN0YXRlKHtndWlkZTonZGVwb3QnfSk7IH0pLAogICAgICAgIGdDaG9peENhcnRlKCdOb24sIGFpZGV6LW1vaSDDoCBsXHUyMDE5b2J0ZW5pcicsJ0plIHNvdWhhaXRlIHNhdm9pciBvw7kgbGUgdMOpbMOpY2hhcmdlcicsKCk9PnsgdHJ5eyBtdHJhY2soJ2d1aWRlX2Nob2l4Jyx7dm9pZTonYWlkZSd9KTsgfWNhdGNoKGUpe30gdGhpcy5zZXRTdGF0ZSh7Z3VpZGU6J2FpZGUnfSk7IH0pKSwKICAgICAgZ0Zlcm1lcgogICAgXSk7CgogICAgY29uc3QgZ3VpZGVEZXBvdD1nQ2FkcmUoWwogICAgICBnUmV0b3VyKCdjaG9peCcsJ1JldG91ciBhdSBjaG9peCBkdSBkb2N1bWVudCcpLAogICAgICBnVGl0cmUoJ0Nob2lzaXNzZXogdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUnKSwKICAgICAgZ1RleHRlKCdVdGlsaXNleiBsZSBQREYgdMOpbMOpY2hhcmfDqSBkZXB1aXMgdm90cmUgY29tcHRlIHJldHJhaXRlLiBVbmUgcGhvdG8gb3UgdW5lIGNhcHR1cmUgZFx1MjAxOcOpY3JhbiBuZSBwZXV0IHBhcyDDqnRyZSBsdWUuJyksCiAgICAgIGVsKCdkaXYnLHtrZXk6J3YnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6JzE0cHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnfX0sCiAgICAgICAgZWwoJ2ltZycse3NyYzpWSUdOX0EsYWx0OidFeGVtcGxlIGRlIHJlbGV2w6kgZGUgY2FycmnDqHJlJyxsb2FkaW5nOidsYXp5JyxzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOm0/JzEwNHB4JzonMTI4cHgnLGhlaWdodDonYXV0bycsZGlzcGxheTonYmxvY2snLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3hTaGFkb3c6JzAgOHB4IDIwcHggLTEycHggcmdiYSgzLDYsMzIsMC40NSknfX0pLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNnB4J319LAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTZweCcsbGluZUhlaWdodDoxLjQsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdFeGVtcGxlIGRlIHJlbGV2w6kgZGUgY2FycmnDqHJlJyksCiAgICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+eyB0cnl7IG10cmFjaygnZXhlbXBsZV9hZ3JhbmRpJyx7fSk7IH1jYXRjaChlKXt9IHRoaXMuc2V0U3RhdGUoe2V4ZW1wbGU6dHJ1ZX0pOyB9LAogICAgICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1SRUQ7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1OQVZZO30sCiAgICAgICAgICAgIHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGJhY2tncm91bmQ6J3RyYW5zcGFyZW50JyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGFsaWduU2VsZjonZmxleC1zdGFydCcsbWluSGVpZ2h0Oic0OHB4JyxwYWRkaW5nOjAsZm9udFNpemU6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVlksdGV4dERlY29yYXRpb246J3VuZGVybGluZScsdGV4dFVuZGVybGluZU9mZnNldDonM3B4Jyx0cmFuc2l0aW9uOidjb2xvciAuMThzIGVhc2UnfX0sJ0FncmFuZGlyIGxcdTIwMTlleGVtcGxlJykpKSwKICAgICAgZWwoJ2Rpdicse2tleToneicsJ2RhdGEtem9uZSc6JzEnLAogICAgICAgIG9uRHJhZ092ZXI6ZT0+e2UucHJldmVudERlZmF1bHQoKTtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9UkVEO2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmN2Y4Jzt9LAogICAgICAgIG9uRHJhZ0xlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9JyNjOWNmZGEnO2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZmJmY2ZlJzt9LAogICAgICAgIG9uRHJvcDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0nI2M5Y2ZkYSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNmYmZjZmUnO3ZhciBfZj1lLmRhdGFUcmFuc2ZlciYmZS5kYXRhVHJhbnNmZXIuZmlsZXMmJmUuZGF0YVRyYW5zZmVyLmZpbGVzWzBdO2lmKF9mKXRoaXMubGlyZVJlbGV2ZShfZik7fSwKICAgICAgICBzdHlsZTp7Ym9yZGVyOm0/J25vbmUnOicycHggZGFzaGVkICNjOWNmZGEnLGJhY2tncm91bmQ6bT8ndHJhbnNwYXJlbnQnOicjZmJmY2ZlJyxwYWRkaW5nOm0/MDonMTRweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTBweCcsdHJhbnNpdGlvbjonYm9yZGVyLWNvbG9yIC4xOHMgZWFzZSwgYmFja2dyb3VuZCAuMThzIGVhc2UnfX0sCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXhXaWR0aDonNDYwcHgnLHRleHRBbGlnbjonY2VudGVyJyxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1VuIGFwZXLDp3UgZ3JhdHVpdCBz4oCZYWZmaWNoZSBhcHLDqHMgbGEgbGVjdHVyZS4gVm90cmUgYWRyZXNzZSBlLW1haWwgc2VyYSBkZW1hbmTDqWUgcG91ciBjb25zdWx0ZXIgbGUgZMOpdGFpbCBldCByZWNldm9pciB2b3RyZSBsaWVuIGRlIHJldG91ci4nKSwgZWwoJ2xhYmVsJyx7b25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTFweCknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9LAogICAgICAgICAgc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsZ2FwOicxMXB4Jyx0ZXh0QWxpZ246J2NlbnRlcicsd2lkdGg6JzEwMCUnLG1pbkhlaWdodDptPyc1OHB4JzonNjJweCcscGFkZGluZzonMTJweCAxOHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTdweCc6JzE4cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLGxpbmVIZWlnaHQ6MS4yNSxjdXJzb3I6J3BvaW50ZXInLGJveFNoYWRvdzonMCAxNHB4IDMwcHggLTE0cHggcmdiYSgyNDUsMzcsNzMsMC42MiknLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnfX0sCiAgICAgICAgICBlbCgnc3ZnJyx7d2lkdGg6MTgsaGVpZ2h0OjE4LHZpZXdCb3g6JzAgMCAyNCAyNCcsZmlsbDonbm9uZScsc3R5bGU6e2ZsZXhTaHJpbms6MH19LGVsKCdwYXRoJyx7ZDonTTEyIDE2VjRNMTIgNGwtNCA0TTEyIDRsNCA0TTQgMTd2M2gxNnYtMycsc3Ryb2tlOicjZmZmZmZmJyxzdHJva2VXaWR0aDoyLHN0cm9rZUxpbmVjYXA6J3JvdW5kJyxzdHJva2VMaW5lam9pbjoncm91bmQnfSkpLAogICAgICAgICAgJ0Nob2lzaXIgbW9uIHJlbGV2w6kgZW4gUERGJywKICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J2ZpbGUnLGFjY2VwdDonYXBwbGljYXRpb24vcGRmJyxzdHlsZTp7ZGlzcGxheTonbm9uZSd9LG9uQ2xpY2s6KCk9PnsgdHJ5eyBtdHJhY2soJ3NlbGVjdGV1cl9vdXZlcnQnLHt9KTsgfWNhdGNoKGUpe30gfSxvbkNoYW5nZTplPT50aGlzLmxpcmVSZWxldmUoZS50YXJnZXQuZmlsZXMmJmUudGFyZ2V0LmZpbGVzWzBdKX0pKSwKICAgICAgICBtP251bGw6ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTZweCcsbGluZUhlaWdodDoxLjQsY29sb3I6R1JFWX19LCdvdSBnbGlzc2V6IGxlIFBERiBkYW5zIGNlIGNhZHJlJykpLAogICAgICBnTm90ZSgnTGEgcHLDqS1hbmFseXNlIGVzdCBncmF0dWl0ZS4gVW4gYXBlcsOndSBzXHUyMDE5YWZmaWNoZSBhcHLDqHMgbGEgbGVjdHVyZS4gUG91ciBjb25zdWx0ZXIgbGVzIHBvaW50cyDDoCB2w6lyaWZpZXIgZW4gZMOpdGFpbCBldCByZWNldm9pciB2b3RyZSBsaWVuIGRlIHJldG91ciwgdm90cmUgYWRyZXNzZSBlLW1haWwgdm91cyBzZXJhIGRlbWFuZMOpZS4nKSwKICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e3BhZGRpbmdUb3A6bT8nMTRweCc6JzE2cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonOHB4J319LAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzE2cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSwnVm90cmUgUERGIGVzdCBzdXBwcmltw6kgYXByw6hzIHNhIGxlY3R1cmUuJyksCiAgICAgICAgZWwoJ2EnLHtocmVmOicjcXVlc3Rpb25zJyxvbkNsaWNrOmU9PnsgaWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7IHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5hdj0icXVlc3Rpb25zIl0nKTsgaWYodCl0LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJyxibG9jazonc3RhcnQnfSk7IH0sCiAgICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1SRUQ7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1OQVZZO30sCiAgICAgICAgICBzdHlsZTp7YWxpZ25TZWxmOidmbGV4LXN0YXJ0Jyxmb250U2l6ZTonMTZweCcsY29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMCx0ZXh0RGVjb3JhdGlvbjondW5kZXJsaW5lJyx0ZXh0VW5kZXJsaW5lT2Zmc2V0OiczcHgnLGN1cnNvcjoncG9pbnRlcicsdHJhbnNpdGlvbjonY29sb3IgLjE4cyBlYXNlJ319LCdDb21tZW50IG1lcyBkb25uw6llcyBzb250LWVsbGVzIHV0aWxpc8OpZXNcdTAwYTA/JyksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTZweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdBRENGIGVzdCB1biBzZXJ2aWNlIHByaXbDqSBpbmTDqXBlbmRhbnQgZGVzIGNhaXNzZXMgZGUgcmV0cmFpdGUuJykpCiAgICBdKTsKCiAgICBjb25zdCBndWlkZUFpZGU9Z0NhZHJlKFsKICAgICAgZ1JldG91cignY2hvaXgnLCdSZXRvdXIgYXUgY2hvaXggZHUgZG9jdW1lbnQnKSwKICAgICAgZ1RpdHJlKCdWb2ljaSBjb21tZW50IG9idGVuaXIgdm90cmUgcmVsZXbDqScpLAogICAgICBnVGV4dGUoJ1ZvdXMgcG91dmV6IGxlIHTDqWzDqWNoYXJnZXIgZGVwdWlzIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZSBvZmZpY2llbC4nKSwKICAgICAgZWwoJ2Rpdicse2tleToncScsc3R5bGU6e2JhY2tncm91bmQ6JyNlZWYyZmInLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK05BVlkscGFkZGluZzptPycxNHB4IDE1cHgnOicxNnB4IDIwcHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnfX0sCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMTdweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0sZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjcwMCxjb2xvcjpOQVZZfX0sJ1ZvdXMgcHLDqWbDqXJleiBjb21tZW5jZXIgc2FucyBkb2N1bWVudFx1MDBhMD8nKSwnIFLDqXBvbmRleiDDoCA2IHF1ZXN0aW9ucyBwb3VyIG9idGVuaXIgdW5lIHByZW1pw6hyZSBvcmllbnRhdGlvbiDDoCBwYXJ0aXIgZGUgdm9zIHLDqXBvbnNlcy4nKSwKICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+eyB0cnl7IG10cmFjaygncXVlc3Rpb25zX291dmVydGVzJyx7ZGVwdWlzOidndWlkZV9haWRlJ30pOyB9Y2F0Y2goZSl7fSB0aGlzLnNldFN0YXRlKHtndWlkZTpudWxsLGRpYWc6J3F1ZXN0aW9ucycscUluZGV4OjAscmVwb25zZXM6e319KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgfSwKICAgICAgICAgIG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNmZmZmZmYnO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0ndHJhbnNwYXJlbnQnO30sCiAgICAgICAgICBzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxhbGlnblNlbGY6J2ZsZXgtc3RhcnQnLG1pbkhlaWdodDonNDhweCcscGFkZGluZzonMCAxOHB4JyxiYWNrZ3JvdW5kOid0cmFuc3BhcmVudCcsYm9yZGVyOicycHggc29saWQgJytOQVZZLGNvbG9yOk5BVlksZm9udFNpemU6JzE2cHgnLGZvbnRXZWlnaHQ6NzAwLHRyYW5zaXRpb246J2JhY2tncm91bmQgLjE4cyBlYXNlJ319LCdDb21tZW5jZXIgc2FucyBkb2N1bWVudCcpKSwKICAgICAgZWwoJ2Rpdicse2tleTonZScsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMnB4J319LAogICAgICAgIFsnQ29ubmVjdGV6LXZvdXMgw6Agdm90cmUgY29tcHRlIHN1ciBJbmZvIFJldHJhaXRlJywnVMOpbMOpY2hhcmdleiB2b3RyZSByZWxldsOpIGRlIGNhcnJpw6hyZSBhdSBmb3JtYXQgUERGJywnUmV2ZW5leiBzdXIgY2V0dGUgcGFnZSBwb3VyIGxlIGTDqXBvc2VyJ10KICAgICAgICAgIC5tYXAoZnVuY3Rpb24odDIsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGdhcDonMTNweCd9fSwKICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOiczMHB4JyxoZWlnaHQ6JzMwcHgnLGJvcmRlclJhZGl1czonNTAlJyxib3JkZXI6JzEuNXB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6JzE2cHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVlksYm94U2l6aW5nOidib3JkZXItYm94J319LFN0cmluZyhrKzEpKSwKICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7bWluV2lkdGg6MCxmb250U2l6ZTptPycxNnB4JzonMTdweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LLHBhZGRpbmdUb3A6JzNweCd9fSx0MikpOyB9KSksCiAgICAgIGVsKCdkaXYnLHtrZXk6J2InLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonOHB4J319LAogICAgICAgIGVsKCdhJyx7aHJlZjonaHR0cHM6Ly93d3cuaW5mby1yZXRyYWl0ZS5mci8nLHRhcmdldDonX2JsYW5rJyxyZWw6J25vb3BlbmVyJywKICAgICAgICAgIG9uQ2xpY2s6KCk9PnsgdHJ5eyBtdHJhY2soJ2luZm9fcmV0cmFpdGVfb3V2ZXJ0Jyx7fSk7IH1jYXRjaChlKXt9IH0sCiAgICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO30sCiAgICAgICAgICBzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyx0ZXh0QWxpZ246J2NlbnRlcicsbWluSGVpZ2h0Om0/JzU4cHgnOic2MnB4JyxwYWRkaW5nOicxMnB4IDIwcHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxN3B4JzonMThweCcsZm9udFdlaWdodDo3MDAsbGluZUhlaWdodDoxLjI1LHRleHREZWNvcmF0aW9uOidub25lJyxib3hTaGFkb3c6JzAgMTRweCAzMHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNjIpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlJ319LCdBY2PDqWRlciDDoCBtb24gY29tcHRlIHJldHJhaXRlJyksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTZweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOkdSRVl9fSwnT3V2cmUgbGUgc2l0ZSBvZmZpY2llbCBJbmZvIFJldHJhaXRlIGRhbnMgdW4gbm91dmVsIG9uZ2xldC4nKSksCiAgICAgIGVsKCdidXR0b24nLHtrZXk6J29rJyxvbkNsaWNrOigpPT57IHRoaXMuc2V0U3RhdGUoe2d1aWRlOidkZXBvdCd9KTsgfSwKICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZWVmMmZiJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNmZmZmZmYnO30sCiAgICAgICAgc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsd2lkdGg6JzEwMCUnLG1pbkhlaWdodDonNTJweCcscGFkZGluZzonMTBweCAxOHB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzJweCBzb2xpZCAnK05BVlksY29sb3I6TkFWWSxmb250U2l6ZTptPycxNnB4JzonMTdweCcsZm9udFdlaWdodDo3MDAsbGluZUhlaWdodDoxLjMsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMThzIGVhc2UnfX0sJ0pcdTIwMTlhaSB0w6lsw6ljaGFyZ8OpIG1vbiByZWxldsOpJyksCiAgICAgIGdGZXJtZXIKICAgIF0pOwoKICAgIGNvbnN0IGV4ZW1wbGVQbGVpbj10aGlzLnN0YXRlLmV4ZW1wbGU/ZWwoJ2Rpdicse29uQ2xpY2s6KCk9PnRoaXMuc2V0U3RhdGUoe2V4ZW1wbGU6ZmFsc2V9KSwKICAgICAgc3R5bGU6e3Bvc2l0aW9uOidmaXhlZCcsbGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsekluZGV4OjkwMDAsYmFja2dyb3VuZDoncmdiYSg0LDcsMzIsMC44NiknLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicscGFkZGluZzptPycxNnB4JzonNDBweCcsY3Vyc29yOid6b29tLW91dCcsb3ZlcmZsb3dZOidhdXRvJ319LAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMnB4JyxhbGlnbkl0ZW1zOidjZW50ZXInLG1heFdpZHRoOic3NjBweCcsd2lkdGg6JzEwMCUnfX0sCiAgICAgICAgZWwoJ2ltZycse3NyYzpWSUdOX0EsYWx0OidFeGVtcGxlIGRlIHJlbGV2w6kgZGUgY2FycmnDqHJlLCBhZ3JhbmRpJyxzdHlsZTp7d2lkdGg6JzEwMCUnLGhlaWdodDonYXV0bycsZGlzcGxheTonYmxvY2snLGJhY2tncm91bmQ6JyNmZmZmZmYnfX0pLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzE2cHgnLGNvbG9yOicjYzdjZGYyJ319LCdUb3VjaGV6IHBvdXIgZmVybWVyJykpKTpudWxsOwoKICAgIGNvbnN0IGRlcG90PWVsKCdkaXYnLG51bGwsCiAgICAgIHRoaXMuc3RhdGUuZ3VpZGU9PT0nYWlkZSc/Z3VpZGVBaWRlOnRoaXMuc3RhdGUuZ3VpZGU9PT0nZGVwb3QnP2d1aWRlRGVwb3Q6Z3VpZGVDaG9peCwKICAgICAgZXhlbXBsZVBsZWluKTsKCiAgICBjb25zdCBkaXNjbGFpbWVyPWVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzEwcHgnOicxMnB4Jyxmb250U2l6ZTptPycxMnB4JzonMTIuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjonIzhmOThkOCcsdGV4dEFsaWduOm0/J2xlZnQnOidjZW50ZXInfX0sJ0FEQ0YgZXN0IHVuIHNlcnZpY2UgcHJpdsOpLiBDZSBuXHUyMDE5ZXN0IG5pIGxhIENOQVYgbmkgdm90cmUgY2Fpc3NlIGRlIHJldHJhaXRlLicpOwoKICAgIGNvbnN0IEFOTkVFUz10aGlzLnN0YXRlLmFubmVlc3x8W107CiAgICBjb25zdCBlbkFuYWx5c2U9KHRoaXMuc3RhdGUucGhhc2UhPT0nZGVmaWxlJyl8fEFOTkVFUy5sZW5ndGg9PT0wOwogICAgY29uc3QgY3Vyc2V1cj10aGlzLnN0YXRlLmFubmVlfHwwOwogICAgY29uc3QgQT10aGlzLnN0YXRlLmFwZXJjdXx8e30sIExVPUEubHV8fHt9LCBDSD1BLmNoaWZmcmVzfHx7fSwgQ1RSTD1BLmNvbnRyb2xlc3x8e30sIFNVSj1BLnN1amV0c3x8e3RvdGFsOjAsYXV0cmVzOjAsbW9udHJlczpbXX07CiAgICBjb25zdCBQTEFGPSEhQS50cmltZXN0cmVzX2VzdF91bl9wbGFmb25kOwogICAgY29uc3QgTEFCRUxTPXt0cmltZXN0cmVzX3JlY3VwZXJhYmxlczondHJpbWVzdHJlcyByw6ljdXDDqXJhYmxlcycsYW5uZWVzX2FfdmVyaWZpZXI6J2FubsOpZXMgw6AgdsOpcmlmaWVyJyxkaXNwb3NpdGlmc19kYXRlOidkaXNwb3NpdGlmcyBwb3VyIHBhcnRpciBwbHVzIHTDtHQnLHRyaW1lc3RyZXNfbWFucXVhbnRzOidtYW5xdWFudHMgcG91ciBsZSB0YXV4IHBsZWluJ307CiAgICAvLyBUb3RhbCBldCBwb3NpdGlvbiBkw6lyaXbDqXMgZGUgbGEgbGlzdGUgOiByaWVuIGVuIGR1ci4KICAgIGNvbnN0IHRvdGFsPUFOTkVFUy5sZW5ndGg7CiAgICBjb25zdCBsdWVzPU1hdGgubWluKHRvdGFsLGN1cnNldXIrNCk7CiAgICBjb25zdCBmaW5pPWN1cnNldXI+PU1hdGgubWF4KDAsdG90YWwtNCk7CgogICAgY29uc3QgdGV0ZT1lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzEycHgnfX0sCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzE0cHgnfX0sCiAgICAgICAga2ljaygnUHLDqS1hbmFseXNlIGRlIHZvdHJlIHJlbGV2w6knKSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnLHdoaXRlU3BhY2U6J25vd3JhcCd9fSxlbkFuYWx5c2U/J3VuIGluc3RhbnRcdTIwMjYnOihsdWVzKycgYW5uw6llcyBzdXIgJyt0b3RhbCkpKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIxcHgnOiczMXB4JyxsaW5lSGVpZ2h0OjEuMDgsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDIyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sKCFlbkFuYWx5c2UmJmZpbmkpPydWb3RyZSBwcsOpLWFuYWx5c2UgZXN0IHByw6p0ZSc6J0xlY3R1cmUgYXV0b21hdGlxdWUgZGUgdm90cmUgcmVsZXbDqScpLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwoKCFlbkFuYWx5c2UmJmZpbmkpPycnOidWb3RyZSBhcGVyw6d1IHNcdTIwMTlhZmZpY2hlcmEgZMOocyBxdWUgbGEgbGVjdHVyZSBzZXJhIHRlcm1pbsOpZS4nKSksZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6JzNweCcsYmFja2dyb3VuZDonI2RmZTRlZScsb3ZlcmZsb3c6J2hpZGRlbid9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2hlaWdodDonMTAwJScsYmFja2dyb3VuZDpSRUQsd2lkdGg6KGVuQW5hbHlzZT8xODooZmluaT8xMDA6TWF0aC5yb3VuZChsdWVzL3RvdGFsKjEwMCkpKSsnJScsdHJhbnNpdGlvbjond2lkdGggLjEycyBsaW5lYXInfX0pKSk7CgogICAgY29uc3QgY29ycHNEZWZpbGU9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwKICAgICAgZW5BbmFseXNlP251bGw6ZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6JyNmZmZmZmYnLG92ZXJmbG93OidoaWRkZW4nfX0sCiAgICAgICAgQU5ORUVTLnNsaWNlKGN1cnNldXIsY3Vyc2V1cis0KS5tYXAoKHgsaTIpPT5lbCgnZGl2Jyx7a2V5OnhbMF0sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOicxNnB4JyxwYWRkaW5nOm0/JzEwcHggMTRweCc6JzEycHggMThweCcsYm9yZGVyQm90dG9tOmkyPDM/JzFweCBzb2xpZCAnK0xJTkU6J25vbmUnLG9wYWNpdHk6aTI9PT0zPzE6KGkyPT09Mj8wLjc4OihpMj09PTE/MC42OjAuNDQpKX19LAogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOXB4JyxtaW5XaWR0aDowfX0sCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonM3B4JyxoZWlnaHQ6bT8nMTVweCc6JzE3cHgnLGJhY2tncm91bmQ6aTI9PT0zP1JFRDondHJhbnNwYXJlbnQnLHRyYW5zZm9ybTondHJhbnNsYXRlWSgycHgpJ319KSwKICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjJweCcsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGNvbG9yOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sU3RyaW5nKHhbMF0pKSksCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjpHUkVZLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LHhbMV0pKSkpLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic0cHgnLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwKICAgICAgICBbJ0V4dHJhY3Rpb24gZGVzIGFubsOpZXMsIGRlcyBlbXBsb3lldXJzIGV0IGRlcyByZXZlbnVzJywnUmVjb3VwZW1lbnQgZGUgdm9zIHLDqWdpbWVzIGVudHJlIGV1eCcsJ1VuZSBzb2l4YW50YWluZSBkZSBjb250csO0bGVzIHN1ciBjZSBxdWUgbGUgcmVsZXbDqSBkw6ljbGFyZSddLm1hcCgodDIsaTIpPT5lbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzlweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6JyNjOWNmZGEnLG1hcmdpbkJvdHRvbTonNXB4J319KSwKICAgICAgICAgIGVsKCdzcGFuJyxudWxsLHQyKSkpKSk7CgogICAgY29uc3QgY2FwdHVyZT1lbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzIwcHggMThweCAyMnB4JzonMjZweCAyNnB4IDI4cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEycHgnOicxNHB4J319LAogICAgICBraWNrKHRoaXMuc3RhdGUuZGlhZz09PSdsZWN0dXJlJz8nVm90cmUgcHLDqS1hbmFseXNlJzonVm90cmUgcsOpc3VsdGF0JyksCiAgICAgIHRoaXMuc3RhdGUubWFpbE9rCiAgICAgICAgPyBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzhweCc6JzEwcHgnfX0sCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMXB4JzonMjVweCcsbGluZUhlaWdodDoxLjE0LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAxOGVtJyxjb2xvcjpOQVZZfX0sJ0NcdTIwMTllc3Qgbm90w6kuJyksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCdWb3VzIHJlY2V2cmV6IGxlIHLDqXN1bHRhdCDDoCBjZXR0ZSBhZHJlc3NlLCBkYW5zIHF1ZWxxdWVzIG1pbnV0ZXMuJykpCiAgICAgICAgOiBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxM3B4J319LAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjFweCc6JzI1cHgnLGxpbmVIZWlnaHQ6MS4xNCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMThlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwodGhpcy5zdGF0ZS5kaWFnPT09J2xlY3R1cmUnPydWb3RyZSBwcsOpLWFuYWx5c2UgZ3JhdHVpdGUnOidDb25zdWx0ZXogbGVzIHBvaW50cyDDoCB2w6lyaWZpZXIgZXQgbGVzIGFubsOpZXMgY29uY2VybsOpZXMnKSksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCh0aGlzLnN0YXRlLmRpYWc9PT0nbGVjdHVyZSc/J0FmZmljaGV6IHZvcyByw6lzdWx0YXRzIGV0IHJlY2V2ZXotZW4gdW5lIGNvcGllLiBJbmRpcXVleiB2b3RyZSBhZHJlc3NlIGUtbWFpbCBwb3VyIGNvbnN1bHRlciBsZXMgcG9pbnRzIMOgIHbDqXJpZmllciBldCBsZXMgYW5uw6llcyBjb25jZXJuw6llcy4gRMOocyBxdWUgbGEgbGVjdHVyZSBlc3QgdGVybWluw6llLCBsZXMgZMOpdGFpbHMgc1x1MjAxOWFmZmljaGVudCBpY2kgZXQgdm91cyBzb250IMOpZ2FsZW1lbnQgZW52b3nDqXMgcGFyIGUtbWFpbC4nOidWb3RyZSBkw6ljb21wdGUsIHZvcyBhbm7DqWVzIMOgIHbDqXJpZmllciBldCBsZSBsaWVuIHBvdXIgeSByZXZlbmlyLiBTYW5zIHJlZMOpcG9zZXIgdm90cmUgcmVsZXbDqS4nKSksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzVweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTBweCc6JzExcHgnfX0sCiAgICAgICAgICAgICAgWydWb3RyZSBhZHJlc3NlIG5lIHNlcnQgcXVcdTIwMTnDoCB2b3MgcsOpc3VsdGF0cyBldCBhdSBzdWl2aSBkZSB2b3RyZSBkb3NzaWVyLicsJ0phbWFpcyBkZSByZXZlbnRlLCBkw6lzaW5zY3JpcHRpb24gZW4gdW4gY2xpYy4nXS5tYXAoKHgsaTIpPT5lbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzVweCd9fSksCiAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpOQVZZfX0seCkpKSksCiAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt0aGlzLmNhcHR1cmVNYWlsKGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMHB4J319LAogICAgICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J2VtYWlsJyxyZXF1aXJlZDp0cnVlLHBsYWNlaG9sZGVyOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsJ2FyaWEtbGFiZWwnOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsb25Gb2N1czooKT0+e3RoaXMuX21haWxUb3VjaGVkPXRydWU7fSxvbklucHV0OigpPT57dGhpcy5fbWFpbFRvdWNoZWQ9dHJ1ZTt9LHN0eWxlOnt3aWR0aDonMTAwJScsYm94U2l6aW5nOidib3JkZXItYm94JyxoZWlnaHQ6bT8nNTRweCc6JzU2cHgnLG1pbkhlaWdodDptPyc1NHB4JzonNTZweCcscGFkZGluZzonMCAxNXB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNnB4JzonMTYuNXB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZSd9fSksCiAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmNhcHR1cmVNYWlsKGlucD9pbnAudmFsdWU6JycpO30sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nIzIzMmM3YSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJveFNoYWRvdz0nMCAxMnB4IDI2cHggLTEycHggcmdiYSgxNCwxOSw3OSwwLjU1KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPU5BVlk7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJveFNoYWRvdz0nbm9uZSc7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHdpZHRoOicxMDAlJyxoZWlnaHQ6bT8nNTZweCc6JzU4cHgnLGJhY2tncm91bmQ6TkFWWSxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlJ319LCh0aGlzLnN0YXRlLmRpYWc9PT0nbGVjdHVyZSc/J0FmZmljaGVyIG1hIHByw6ktYW5hbHlzZSBncmF0dWl0ZSc6J1ZvaXIgbWVzIHBvaW50cyDDoCB2w6lyaWZpZXInKSkpKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMXB4JzonMTJweCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwodGhpcy5zdGF0ZS5kaWFnPT09J2xlY3R1cmUnPydWb3RyZSBhZHJlc3NlIHBlcm1ldCDDqWdhbGVtZW50IGRlIHJldHJvdXZlciB2b3MgcsOpc3VsdGF0cyBzYW5zIHJlZMOpcG9zZXIgdm90cmUgcmVsZXbDqS4nOidTYWlzaXNzZXogdm90cmUgYWRyZXNzZSBwb3VyIGFmZmljaGVyIGxlIGTDqXRhaWwgaWNpIGV0IHJlY2V2b2lyIGxlIGxpZW4gcG91ciBsZSByZXRyb3V2ZXIuJykpKTsKCiAgICBjb25zdCBjaGFyZ2VtZW50PW0KICAgICAgPyBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksYmFja2dyb3VuZDpQQVBFUixwYWRkaW5nOicxOHB4IDE2cHggMjBweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzE2cHgnfX0sCiAgICAgICAgICB0ZXRlLGNvcnBzRGVmaWxlKQogICAgICA6IGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxiYWNrZ3JvdW5kOlBBUEVSLHBhZGRpbmc6JzM0cHggMzRweCAzNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMThweCd9fSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzEycHgnfX0sdGV0ZSxjb3Jwc0RlZmlsZSkpOwoKICAgIGNvbnN0IGFwcHVpPShuLGxhYik9PmVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nOHB4JzonOXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMXB4J319LAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjZweCc6JzMwcHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjhlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSxuKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxmb250V2VpZ2h0OjYwMCxsaW5lSGVpZ2h0OjEuMyxjb2xvcjpOQVZZfX0sbGFiKSk7CgogICAgdmFyIGFyZ3VzPWVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzExcHgnfX0sCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpOQVZZfX0sJ1N1ciAnLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9fSwoQ1RSTC50b3RhbCE9bnVsbD9DVFJMLnRvdGFsOjYwKSsnIGNvbnRyw7RsZXMnKSwnLCAnLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9fSxTdHJpbmcoQ1RSTC5hdHRlbnRlIT1udWxsP0NUUkwuYXR0ZW50ZToyNCkpLCcgblx1MjAxOW9udCBwYXMgcHUgw6p0cmUgZmFpdHNcdTAwYTA6ICcsZWwoJ3NwYW4nLHtzdHlsZTp7Y29sb3I6R1JFWX19LCdpbHMgYXR0ZW5kZW50IHZvcyByw6lwb25zZXMuIENcdTIwMTllc3QgbMOgIHF1ZSBsZSBkb3NzaWVyIHZhIHBsdXMgbG9pbiBxdWUgY2V0dGUgbGVjdHVyZS4nKSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0V0IG1hIGNhaXNzZSwgamUgbmUgcGV1eCBwYXMgbHVpIGRlbWFuZGVyIG1vaS1tw6ptZVx1MDBhMD8nKSwnIEVsbGUgcsOpcG9uZCBhdXggZGVtYW5kZXMgcXVcdTIwMTlvbiBsdWkgYWRyZXNzZSwgbW90aWYgcGFyIG1vdGlmXHUwMGEwOiBjZSBkb3NzaWVyIGVzdCBjZSBxdWkgbGVzIGFkcmVzc2UuJyksZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOXB4JzonMTFweCcsZm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSxlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnQXZhbnQgb3UgYXByw6hzIGxhIGxpcXVpZGF0aW9uXHUwMGEwPycpLCcgVW5lIHBlbnNpb24gZMOpasOgIGxpcXVpZMOpZSByZXN0ZSByw6l2aXNhYmxlLCBldCBsYSByw6l2aXNpb24gcHJlbmQgZWZmZXQgw6Agc2EgZGF0ZSBkZSBkw6lwYXJ0IGluaXRpYWxlXHUwMGEwOyBzZXVsIGxlIHJhcHBlbCBkZXMgc29tbWVzIGR1ZXMgZXN0IHBsYWZvbm7DqSDDoCBjaW5xIGFucyAoQ29kZSBjaXZpbCwgYXJ0LiAyMjI0XHUwMGEwOyBjaXJjdWxhaXJlIENuYXYgNTQvODkgZHUgMTkvMDUvMTk4OSkuIERcdTIwMTlvw7kgbFx1MjAxOWludMOpcsOqdCBkZSBjb3JyaWdlciB0w7R0LicpKTsKCiAgICBjb25zdCBfTENLPSEhKEEmJkEudmVycm91aWxsZSk7IGNvbnN0IHBhbm5lYXU9ZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQscGFkZGluZzptPycxOHB4JzonMjJweCAyNHB4IDI0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxMnB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYzQxNzNhJ319LCdMZSBiaWxhbiBjb21wbGV0JyksZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyMXB4JyxsaW5lSGVpZ2h0OjEuMTYsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDE4ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ0NlIHF1ZSBsZSBiaWxhbiBjb21wbGV0IGFqb3V0ZSDDoCBjZXR0ZSBwcmVtacOocmUgbGVjdHVyZScpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LCdWb3RyZSByZWxldsOpIG5lIGNvbnRpZW50IHBhcyB0b3V0ZXMgbGVzIGluZm9ybWF0aW9ucyBuw6ljZXNzYWlyZXMgcG91ciBleGFtaW5lciB2b3RyZSBjYXJyacOocmUuIFZvcyByw6lwb25zZXMgYXUgcXVlc3Rpb25uYWlyZSBjb21wbMOodGVudCBsZXMgdsOpcmlmaWNhdGlvbnMgcmVzdMOpZXMgb3V2ZXJ0ZXNcdTAwYTA6IGVuZmFudHMsIGFubsOpZXMgY3JldXNlcywgcMOpcmlvZGVzIMOgIGxcdTIwMTnDqXRyYW5nZXIsIGNvbnRleHRlIGRlcyBww6lyaW9kZXMgcmVww6lyw6llcy4nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSwnSmUgcmVwcmVuZHMgcGVyc29ubmVsbGVtZW50IHZvdHJlIGRvc3NpZXIgcG91ciB2b3VzIHJlbWV0dHJlXHUwMGEwOicpLGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCd9fSxbJ2NoYXF1ZSBwb2ludCBzaWduYWzDqSwgYXZlYyBjZSBxdWkgbGUgZm9uZGUsIGxlcyBleHBsaWNhdGlvbnMgcXVpIHBvdXJyYWllbnQgbFx1MjAxOcOpY2FydGVyIGV0IGxlcyBwacOoY2VzIMOgIHLDqXVuaXInLCd2b3MgZGF0ZXMgZGUgZMOpcGFydCBwb3NzaWJsZXMgZXQgdm9zIG1vbnRhbnRzIGVzdGltw6lzIHNlbG9uIGxlcyBzY8OpbmFyaW9zIMOpdHVkacOpcycsJ2xlcyBjb3VycmllcnMgYWRhcHTDqXMgYXV4IGRlbWFuZGVzIHJldGVudWVzIGV0IGxlcyDDqXRhcGVzIMOgIHN1aXZyZSddLm1hcCgoeCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOicxMHB4JyxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpSRUQsbWFyZ2luQm90dG9tOic2cHgnfX0pLGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS40NSxjb2xvcjpOQVZZfX0seCkpKSksZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMXB4JzonMTJweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOXB4JyxmbGV4V3JhcDond3JhcCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMzRweCc6JzQwcHgnLGxpbmVIZWlnaHQ6MC45Mixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMzJlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSx0aGlzLnByaWNlKCkpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsZm9udFdlaWdodDo2MDAsY29sb3I6R1JFWSxtYXhXaWR0aDonMjJjaCd9fSwnQmlsYW4gcsOpZGlnw6kgcGFyICcrdGhpcy5mb3VuZGVyKCkrJywgcmVtaXMgc291cyAnK3RoaXMuZGVsYWkoKSkpLGVsKCdhJyx7aHJlZjonaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvP3V0bV9zb3VyY2U9YWRjZiZ1dG1fbWVkaXVtPXBhZ2UtdmVudGUmdXRtX2NhbXBhaWduPWFuYWx5c2UtcmVsZXZlJnZpYT1kaXJlY3QnLG9uQ2xpY2s6ZT0+e3ZhciBqPXRoaXMuc3RhdGUuamV0b247aWYoIWopcmV0dXJuO2UucHJldmVudERlZmF1bHQoKTt2YXIgdT1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJyl8fCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8nO3ZhciBfY2s9ZnVuY3Rpb24obil7cmV0dXJuIChkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKD86Xnw7ICknK24rJz0oW147XSopJykpfHxbXSlbMV18fCcnO307dmFyIF9jaWQ9X2NrKCdfZ2EnKS5zcGxpdCgnLicpLnNsaWNlKC0yKS5qb2luKCcuJyk7dmFyIF9zaWQ9KF9jaygnX2dhX0Q5UzI0QzZKNDcnKS5zcGxpdCgnLicpWzJdKXx8Jyc7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciB2PW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChjKTtpZih2KXNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYyx2KTt9Y2F0Y2goZSl7fX0pO3ZhciBfYWRkPXthcGVyY3U6an07aWYoX2NpZClfYWRkLmNpZD1fY2lkO2lmKF9zaWQpX2FkZC5zaWQ9X3NpZDt2YXIgX2ZicD1fY2soJ19mYnAnKTtpZihfZmJwKV9hZGQuZmJwPV9mYnA7dmFyIF9mYmM9X2NrKCdfZmJjJyk7aWYoX2ZiYylfYWRkLmZiYz1fZmJjO1snZ2NsaWQnLCdnYnJhaWQnLCd3YnJhaWQnXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3RyeXt2YXIgdj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGMpO2lmKHYpX2FkZFtjXT12O31jYXRjaChlKXt9fSk7Zm9yKHZhciBfayBpbiBfYWRkKXtpZih1LmluZGV4T2YoX2srJz0nKTwwKXUrPSh1LmluZGV4T2YoJz8nKT4tMT8nJic6Jz8nKStfaysnPScrZW5jb2RlVVJJQ29tcG9uZW50KF9hZGRbX2tdKTt9bXRyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidwcmVhbmFseXNlJyxlbXBsYWNlbWVudDoncmVzdWx0YXQnfSk7bXRyYWNrKCdjaGVja291dF9vcGVuJyx7dmlhOidwcmVhbmFseXNlJ30pO3dpbmRvdy5sb2NhdGlvbi5ocmVmPXU7fSxzdHlsZTp7dGV4dERlY29yYXRpb246J25vbmUnLGJveFNpemluZzonYm9yZGVyLWJveCcsd2lkdGg6JzEwMCUnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsdGV4dEFsaWduOidjZW50ZXInLGhlaWdodDptPyc1NHB4JzonNThweCcscGFkZGluZzonMCAxNnB4Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlJyxiYWNrZ3JvdW5kOihfTENLPyd0cmFuc3BhcmVudCc6UkVEKSxjb2xvcjooX0xDSz9OQVZZOicjZmZmZmZmJyksYm9yZGVyOihfTENLPycxLjVweCBzb2xpZCAnK05BVlk6J25vbmUnKSxib3hTaGFkb3c6KF9MQ0s/J25vbmUnOicwIDE0cHggMzBweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjYpJyl9LG9uTW91c2VFbnRlcjpldj0+e2V2LmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO30sb25Nb3VzZUxlYXZlOmV2PT57ZXYuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO319LChfTENLPydMZSBiaWxhbiBjb21wbGV0LCAyNDlcdTAwYTDigqwnOidDb21tYW5kZXIgbW9uIGJpbGFuIGNvbXBsZXQnKSksZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGdhcDonN3B4Jyxmb250U2l6ZTonMTIuNXB4Jyxjb2xvcjpHUkVZfX0sZWwoJ3N2Zycse3dpZHRoOjExLGhlaWdodDoxMyx2aWV3Qm94OicwIDAgMTIgMTQnLGZpbGw6J25vbmUnfSxlbCgncGF0aCcse2Q6J00zIDZWNGEzIDMgMCAwMTYgMHYyJyxzdHJva2U6R1JFWSxzdHJva2VXaWR0aDoxLjR9KSxlbCgncmVjdCcse3g6MSx5OjYsd2lkdGg6MTAsaGVpZ2h0Ojcsc3Ryb2tlOkdSRVksc3Ryb2tlV2lkdGg6MS40fSkpLCdQYWllbWVudCBzw6ljdXJpc8OpXHUwMGEwwrcgYXVjdW4gYWJvbm5lbWVudCcpKTsKCiAgICAvLyBMZXMgYW5uw6llcyDDoCB2w6lyaWZpZXIsIHRlbGxlcyBxdWUgbGUgc2VydmV1ciBsZXMgcmVudm9pZS4gUmllbiBlbiBkdXIuCiAgICB2YXIgX2FubmVlcz0oQS5hbm5lZXNfYV92ZXJpZmllcl9saXN0ZXx8QS5hbm5lZXNfYV92ZXJpZmllcnx8KEEuY29udHJvbGVzJiZBLmNvbnRyb2xlcy5hbm5lZXMpfHxbXSk7CiAgICBpZighQXJyYXkuaXNBcnJheShfYW5uZWVzKSkgX2FubmVlcz1bXTsKICAgIF9hbm5lZXM9X2FubmVlcy5zbGljZSgwLDYpOwoKICAgIGNvbnN0IHJlc3VsdGF0PSgoKT0+ewogICAgICBmdW5jdGlvbiBjaGlwKGspeyB2YXIgdj1DSFtrXTsgdmFyIGxhYj1MQUJFTFNba118fGs7IHZhciBuPShrPT09J3RyaW1lc3RyZXNfcmVjdXBlcmFibGVzJyYmUExBRik/ZWwoJ3NwYW4nLHtzdHlsZTp7ZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzVweCd9fSxlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxMi41cHgnOicxMy41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOkdSRVl9fSwnanVzcXVcdTIwMTlcdTAwZTAnKSxTdHJpbmcodikpOlN0cmluZyh2KTsgcmV0dXJuIGFwcHVpKG4sbGFiKTsgfQogICAgICB2YXIgYmlnLHVuaXQsc3ViLGtpY2tUeHQsbm90ZSxwaHJhc2U9JycscGhyYXNlTGVhZD1mYWxzZSxWRVJSPSEhKEEmJkEudmVycm91aWxsZSkmJiEoQSYmQS5hZHJlc3NlX2Nvbm51ZSk7CiAgICAgIGlmKEEuYWNjcm9jaGU9PT0nbW9udGFudCcmJkEubW9udGFudCl7IGJpZz0nJzsgdW5pdD0nJzsgc3ViPScnOyBraWNrVHh0PSdDZSBxdWUgdm9zIGFubsOpZXMgw6AgdsOpcmlmaWVyIHJlcHLDqXNlbnRlbnQnOyBub3RlPSdNb250YW50IGJydXQuIElsIG5lIHBvcnRlIHF1ZSBzdXIgbGVzIHN1amV0cyBjaGlmZnLDqXNcdTAwYTA7IHBsdXNpZXVycyBuXHUyMDE5ZW4gcG9ydGVudCBhdWN1bi4nOyBwaHJhc2U9KEEubW9udGFudC5waHJhc2V8fCcnKTsgcGhyYXNlTGVhZD10cnVlOyB9CiAgICAgIGVsc2UgaWYoQS5hY2Nyb2NoZT09PSd0cmltZXN0cmVzJyl7IGJpZz0oUExBRj8nanVzcXVcdTIwMTlcdTAwZTAgJzonJykrKENILnRyaW1lc3RyZXNfcmVjdXBlcmFibGVzfHwwKTsgdW5pdD0ndHJpbWVzdHJlcyByXHUwMGU5Y3VwXHUwMGU5cmFibGVzJzsgc3ViPScnOyBraWNrVHh0PSdDZSBxdWUgdm9zIGFublx1MDBlOWVzIFx1MDBlMCB2XHUwMGU5cmlmaWVyIHJlcHJcdTAwZTlzZW50ZW50Jzsgbm90ZT0nQXUgbWlldXgsIHNpIHRvdXRlcyBsZXMgY29ycmVjdGlvbnMgYWJvdXRpc3NhaWVudC4gQ1x1MjAxOWVzdCB1biBjYWxjdWwsIHBhcyB1bmUgcHJvbWVzc2VcdTAwYTA6IHZvdHJlIGNhaXNzZSBkXHUwMGU5Y2lkZSwgZGVtYW5kZSBwYXIgZGVtYW5kZS4nOyB9CiAgICAgIGVsc2UgaWYoQS5hY2Nyb2NoZT09PSdjb25maXJtYXRpb24nKXsgYmlnPVN0cmluZyhMVS5hbm5lZXNfY29oZXJlbnRlcyE9bnVsbD9MVS5hbm5lZXNfY29oZXJlbnRlczonJyk7IHVuaXQ9J2Fublx1MDBlOWVzIHN1ciAnKyhMVS5hbm5lZXN8fCcnKSsnIGNvaFx1MDBlOXJlbnRlcyc7IHN1Yj0nJzsga2lja1R4dD0nQ2UgcXVlIHZvdHJlIHJlbGV2XHUwMGU5IGNvbmZpcm1lJzsgbm90ZT0nJzsgfQogICAgICBlbHNlIHsgYmlnPVN0cmluZyhDSC5kaXNwb3NpdGlmc19kYXRlIT1udWxsP0NILmRpc3Bvc2l0aWZzX2RhdGU6JycpOyB1bml0PSdkaXNwb3NpdGlmcyBwb3VyIHBhcnRpciBwbHVzIHRcdTAwZjR0Jzsgc3ViPSdxdWkgcGV1dmVudCBhdmFuY2VyIHZvdHJlIGRcdTAwZTlwYXJ0Jzsga2lja1R4dD0nQ2UgcXVlIHZvdHJlIHJlbGV2XHUwMGU5IHBlcm1ldCBzdXIgdm90cmUgZGF0ZSc7IG5vdGU9Jyc7IH0KICAgICAgdmFyIGNhcHR1cmVWZXJyPWVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nMThweCc6JzIwcHggMjJweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTFweCc6JzEycHgnfX0sdGhpcy5zdGF0ZS5tYWlsT2s/ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTZweCc6JzE3cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnQ+KAmWVzdCBwYXJ0aS4nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ09uIGTDqWJsb3F1ZSB2b3Mgc3VqZXRzLicpKTplbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxMnB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjJweCcsbGluZUhlaWdodDoxLjE2LGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sKFNVSi50b3RhbD4wPydDb25zdWx0ZXogbGVzIHBvaW50cyDDoCB2w6lyaWZpZXIgZXQgbGVzIGFubsOpZXMgY29uY2VybsOpZXMnOidDb25zdWx0ZXIgbGUgZMOpdGFpbCBkZSBjZXR0ZSBsZWN0dXJlJykpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LCdTYWlzaXNzZXogdm90cmUgYWRyZXNzZSBwb3VyIGFmZmljaGVyIGxlIGTDqXRhaWwgaWNpIGV0IHJlY2V2b2lyIGxlIGxpZW4gcG91ciBsZSByZXRyb3V2ZXIuJyksZWwoJ2Zvcm0nLHtvblN1Ym1pdDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZGV2ZXJyb3VpbGxlcihlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnZhbHVlKTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LGVsKCdpbnB1dCcse3R5cGU6J2VtYWlsJyxyZXF1aXJlZDp0cnVlLHBsYWNlaG9sZGVyOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsJ2FyaWEtbGFiZWwnOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsc3R5bGU6e2ZsZXg6bT8nMCAwIGF1dG8nOicxIDEgMCcsd2lkdGg6bT8nMTAwJSc6J2F1dG8nLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzU0cHgnOic1NnB4JyxwYWRkaW5nOicwIDE1cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGNvbG9yOklOSyxvdXRsaW5lOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0pLGVsKCdidXR0b24nLHt0eXBlOididXR0b24nLG9uQ2xpY2s6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgZm89ZS5jdXJyZW50VGFyZ2V0LmNsb3Nlc3QoJ2Zvcm0nKTt2YXIgaXA9Zm8mJmZvLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmRldmVycm91aWxsZXIoaXA/aXAudmFsdWU6JycpO30sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJzt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsZmxleFNocmluazowLGhlaWdodDptPyc1NHB4JzonNTZweCcscGFkZGluZzonMCAyNnB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDB9fSwnVm9pciBtZXMgcG9pbnRzIMOgIHbDqXJpZmllcicpKSkpOwoKICAgICAgaWYoVkVSUil7IHZhciBOQj0oU1VKJiZTVUouYV9jbGFyaWZpZXIhPW51bGwpP1NVSi5hX2NsYXJpZmllcjooKFNVSiYmU1VKLnRvdGFsIT1udWxsKT9TVUoudG90YWw6bnVsbCk7IHZhciBoYXNOQj1OQiE9bnVsbDsgdmFyIHZUaXRyZSx2QnRuLHZGb3JtLHZTb3VzOyBpZighaGFzTkIpeyB2VGl0cmU9J1ZvdHJlIHByw6ktYW5hbHlzZSBlc3QgZGlzcG9uaWJsZSc7IHZCdG49J0NvbnN1bHRlciBtYSBwcsOpLWFuYWx5c2UnOyB2Rm9ybT0nQ29uc3VsdGV6IGxlIGTDqXRhaWwgZGUgdm90cmUgcHLDqS1hbmFseXNlJzsgdlNvdXM9J0RlcyBwb2ludHMgcmVww6lyw6lzIGF1dG9tYXRpcXVlbWVudCwgw6AgZXhhbWluZXIgYXZhbnQgZGUgY29uY2x1cmUgw6AgdW5lIGNvcnJlY3Rpb24uJzsgfSBlbHNlIGlmKE5CPT09MCl7IHZUaXRyZT0nQXVjdW4gcG9pbnQgw6AgdsOpcmlmaWVyIHJlcMOpcsOpIHBhciBjZXR0ZSBsZWN0dXJlIGF1dG9tYXRpcXVlJzsgdkJ0bj0nQ29uc3VsdGVyIG1hIHByw6ktYW5hbHlzZSc7IHZGb3JtPSdDb25zdWx0ZXogbGUgZMOpdGFpbCBkZSB2b3RyZSBwcsOpLWFuYWx5c2UnOyB2U291cz0nUmV0cm91dmV6IGxlIGTDqXRhaWwgZGUgY2V0dGUgbGVjdHVyZSBldCBsZXMgdsOpcmlmaWNhdGlvbnMgcXVpIG9udCBwdSDDqnRyZSByw6lhbGlzw6llcy4nOyB9IGVsc2UgaWYoTkI9PT0xKXsgdlRpdHJlPScxIHBvaW50IMOgIHbDqXJpZmllciBkYW5zIHZvdHJlIHJlbGV2w6knOyB2QnRuPSdWb2lyIG1vbiBwb2ludCDDoCB2w6lyaWZpZXInOyB2Rm9ybT0nRMOpY291dnJleiBsZSBwb2ludCByZXDDqXLDqSBldCBsXHUyMDE5YW5uw6llIGNvbmNlcm7DqWUnOyB2U291cz0nVW4gcG9pbnQgcmVww6lyw6kgYXV0b21hdGlxdWVtZW50LCDDoCBleGFtaW5lciBhdmFudCBkZSBjb25jbHVyZSDDoCB1bmUgY29ycmVjdGlvbi4nOyB9IGVsc2UgeyB2VGl0cmU9TkIrJyBwb2ludHMgw6AgdsOpcmlmaWVyIGRhbnMgdm90cmUgcmVsZXbDqSc7IHZCdG49J1ZvaXIgbWVzIHBvaW50cyDDoCB2w6lyaWZpZXInOyB2Rm9ybT0nRMOpY291dnJleiBsZXMgcG9pbnRzIHJlcMOpcsOpcyBldCBsZXMgYW5uw6llcyBjb25jZXJuw6llcyc7IHZTb3VzPSdEZXMgcG9pbnRzIHJlcMOpcsOpcyBhdXRvbWF0aXF1ZW1lbnQsIMOgIGV4YW1pbmVyIGF2YW50IGRlIGNvbmNsdXJlIMOgIHVuZSBjb3JyZWN0aW9uLic7IH0gdmFyIF9wbHVyPWZ1bmN0aW9uKG4pe3JldHVybiBuPjE/J3MnOicnO307IHZhciBzdGF0cz1bXTsgaWYoTFUuYW5uZWVzIT1udWxsKXN0YXRzLnB1c2goW1N0cmluZyhMVS5hbm5lZXMpLCdhbm7DqWUnK19wbHVyKExVLmFubmVlcykrJyBwcsOpc2VudGUnK19wbHVyKExVLmFubmVlcykrJyBkYW5zIHZvdHJlIHJlbGV2w6knKygoTFUuZGVidXQmJkxVLmZpbik/KCcsIGRlICcrTFUuZGVidXQrJyDDoCAnK0xVLmZpbik6JycpXSk7IGlmKExVLmVtcGxveWV1cnMhPW51bGwpc3RhdHMucHVzaChbU3RyaW5nKExVLmVtcGxveWV1cnMpLCdlbXBsb3lldXInK19wbHVyKExVLmVtcGxveWV1cnMpKycgcmVjZW5zw6knK19wbHVyKExVLmVtcGxveWV1cnMpXSk7IGlmKExVLmFubmVlc19jb2hlcmVudGVzIT1udWxsKXN0YXRzLnB1c2goW1N0cmluZyhMVS5hbm5lZXNfY29oZXJlbnRlcyksJ2FubsOpZScrX3BsdXIoTFUuYW5uZWVzX2NvaGVyZW50ZXMpKycgc2FucyBpbmNvaMOpcmVuY2UgZMOpdGVjdMOpZSddKTsgdmFyIF9hdHQ9Q1RSTC5hdHRlbnRlOyB2YXIgYXR0TGluZT0oTFUuY29udHJvbGVzIT1udWxsKT8oJ0NlIHF1ZSBjZXR0ZSBsZWN0dXJlIGEgY291dmVydFx1MDBhMDogJytMVS5jb250cm9sZXMrJyBjb250csO0bGUnK19wbHVyKExVLmNvbnRyb2xlcykrJyBwcsOpdnUnK19wbHVyKExVLmNvbnRyb2xlcykrKChfYXR0IT1udWxsJiZfYXR0PjApPygnLCBkb250ICcrX2F0dCsnIMOgIHByw6ljaXNlciBhdmVjIHZvdXMnKTonJykrJy4nKTpudWxsOyB2YXIgTUI9KEEuYWNjcm9jaGU9PT0nbW9udGFudCcmJkEubW9udGFudCYmQS5tb250YW50LnBocmFzZSk/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzE2cHgnLGJhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzEzcHggMTVweCc6JzE1cHggMThweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsaW5lSGVpZ2h0OjEuMzUsY29sb3I6TkFWWX19LEEubW9udGFudC5waHJhc2UpLGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOic2cHgnLGZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwoQS5tb250YW50LmNvbmRpdGlvbnx8J0NldHRlIGVzdGltYXRpb24gbmUgcG9ydGUgcXVlIHN1ciBsZXMgc3VqZXRzIHF1aSBvbnQgcHUgw6p0cmUgY2hpZmZyw6lzLicpKSk6bnVsbDsgdmFyIGhvbmV5PWVsKCdpbnB1dCcse3R5cGU6J3RleHQnLG5hbWU6J2FkcmVzc2VfY29uZmlybWF0aW9uJyx0YWJpbmRleDonLTEnLGF1dG9jb21wbGV0ZTonb2ZmJywnYXJpYS1oaWRkZW4nOid0cnVlJyxzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OictOTk5OXB4Jyx3aWR0aDonMXB4JyxoZWlnaHQ6JzFweCcsb3BhY2l0eTowLHBvaW50ZXJFdmVudHM6J25vbmUnfX0pOyB2YXIgTEVGVD1lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEycHgnOicxNHB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjJweCcsbGluZUhlaWdodDoxLjE2LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAxOGVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LHZGb3JtKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwnU2Fpc2lzc2V6IHZvdHJlIGFkcmVzc2UgZS1tYWlsIHBvdXIgYWZmaWNoZXIgbGUgZMOpdGFpbCBpY2kgZXQgcmVjZXZvaXIgdm90cmUgbGllbiBkZSByZXRvdXIuJyksZWwoJ2Zvcm0nLHtvblN1Ym1pdDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZGV2ZXJyb3VpbGxlcihlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiZW1haWxcIl0nKS52YWx1ZSk7fSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzhweCd9fSxlbCgnbGFiZWwnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsZm9udFdlaWdodDo3MDAsY29sb3I6TkFWWX19LCdWb3RyZSBhZHJlc3NlIGUtbWFpbCcpLGhvbmV5LGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDonMTBweCd9fSxlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxhdXRvY29tcGxldGU6J2VtYWlsJyxpbnB1dG1vZGU6J2VtYWlsJyxwbGFjZWhvbGRlcjoncHJlbm9tQGV4ZW1wbGUuZnInLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxtaW5XaWR0aDowLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNXB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNnB4JzonMTYuNXB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSxlbCgnYnV0dG9uJyx7dHlwZTonYnV0dG9uJyxvbkNsaWNrOmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGZvPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlwPWZvJiZmby5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiZW1haWxcIl0nKTt0aGlzLmRldmVycm91aWxsZXIoaXA/aXAudmFsdWU6JycpO30sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJzt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsZmxleFNocmluazowLG1pbkhlaWdodDonNDhweCcsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDI0cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxib3hTaGFkb3c6JzAgMTJweCAyNnB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknLHRyYW5zaXRpb246J2ZpbHRlciAuMTVzIGVhc2UnfX0sdkJ0bikpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsY29sb3I6R1JFWX19LCdDb25zdWx0YXRpb24gZ3JhdHVpdGUgXHUwMGI3IEF1Y3VuIHBhaWVtZW50IGRlbWFuZMOpJykpLE1CKTsgdmFyIF9iZW49W1snVm9zIGNvbnN0YXRzIGV4cGxpcXXDqXMgZXQgdm9zIGTDqW1hcmNoZXMgZGUgY29ycmVjdGlvbicsJ0xlcyBmYWl0cywgbGVzIMOpbMOpbWVudHMgw6AgcsOpdW5pciBldCBsZXMgZGVtYW5kZXMgcG9zc2libGVzLCBleHBvc8OpcyBwb3VyIGNoYXF1ZSBwb2ludC4nXSxbJ1ZvcyBwb3NzaWJpbGl0w6lzIGRlIGTDqXBhcnQnLCdWb3MgZGF0ZXMgcG9zc2libGVzIGV0IHZvcyBtb250YW50cyBlc3RpbcOpcywgc2Vsb24gbGVzIHNjw6luYXJpb3Mgw6l0dWRpw6lzLiddLFsnVm9zIGTDqW1hcmNoZXMgcHLDqXBhcsOpZXMnLCdMZXMgY291cnJpZXJzIGFkYXB0w6lzIGF1eCBkZW1hbmRlcyByZXRlbnVlcywgw6Agc2lnbmVyIGV0IMOgIGVudm95ZXIuJ11dOyB2YXIgT0ZGRVI9ZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOiczcHggc29saWQgJytOQVZZLHBhZGRpbmc6bT8nMTZweCAxNnB4IDE4cHgnOicyMnB4IDIycHggMjRweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTFweCc6JzEzcHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYzQxNzNhJ319LCdMZSBiaWxhbiByZXRyYWl0ZSBjb21wbGV0JyksZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE4cHgnOicyMHB4JyxsaW5lSGVpZ2h0OjEuMTgsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDE4ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ1F1ZWxzIHBvaW50cyBjb3JyaWdlciwgcXVhbmQgcGFydGlyLCBxdWVsbGVzIGTDqW1hcmNoZXMgZW5nYWdlclx1MDBhMD8nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LCdKZSByZXByZW5kcyB2b3RyZSByZWxldsOpIGV0IHZvcyByw6lwb25zZXMgcG91ciB2b3VzIHJlbWV0dHJlIHVuIGJpbGFuIMOpY3JpdCwgYWRhcHTDqSDDoCB2b3RyZSBjYXJyacOocmUuJyksKG0/W2VsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTBweCcsZmxleFdyYXA6J3dyYXAnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNnB4JzonMzBweCcsbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyOGVtJyxjb2xvcjpOQVZZfX0sdGhpcy5wcmljZSgpKSxlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4Jyxjb2xvcjpHUkVZfX0sJ1BhaWVtZW50IHVuaXF1ZSBcdTAwYjcgQmlsYW4gcmVtaXMgc291cyAnK3RoaXMuZGVsYWkoKSkpLGVsKCdhJyx7aHJlZjonaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvP3V0bV9zb3VyY2U9YWRjZiZ1dG1fbWVkaXVtPXBhZ2UtdmVudGUmdXRtX2NhbXBhaWduPWFuYWx5c2UtcmVsZXZlJyxvbkNsaWNrOmU9Pnt2YXIgaj10aGlzLnN0YXRlLmpldG9uO2lmKCFqKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHU9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnaHJlZicpfHwnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvJzt2YXIgX2NrPWZ1bmN0aW9uKG4pe3JldHVybiAoZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyg/Ol58OyApJytuKyc9KFteO10qKScpKXx8W10pWzFdfHwnJzt9O3ZhciBfY2lkPV9jaygnX2dhJykuc3BsaXQoJy4nKS5zbGljZSgtMikuam9pbignLicpO3ZhciBfc2lkPShfY2soJ19nYV9EOVMyNEM2SjQ3Jykuc3BsaXQoJy4nKVsyXSl8fCcnO1snZ2NsaWQnLCdnYnJhaWQnLCd3YnJhaWQnXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3RyeXt2YXIgdj1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoYyk7aWYodilzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGMsdik7fWNhdGNoKGUpe319KTt2YXIgX2FkZD17YXBlcmN1Omp9O2lmKF9jaWQpX2FkZC5jaWQ9X2NpZDtpZihfc2lkKV9hZGQuc2lkPV9zaWQ7dmFyIF9mYnA9X2NrKCdfZmJwJyk7aWYoX2ZicClfYWRkLmZicD1fZmJwO3ZhciBfZmJjPV9jaygnX2ZiYycpO2lmKF9mYmMpX2FkZC5mYmM9X2ZiYztbJ2djbGlkJywnZ2JyYWlkJywnd2JyYWlkJ10uZm9yRWFjaChmdW5jdGlvbihjKXt0cnl7dmFyIHY9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShjKTtpZih2KV9hZGRbY109djt9Y2F0Y2goZSl7fX0pO2Zvcih2YXIgX2sgaW4gX2FkZCl7aWYodS5pbmRleE9mKF9rKyc9Jyk8MCl1Kz0odS5pbmRleE9mKCc/Jyk+LTE/JyYnOic/JykrX2srJz0nK2VuY29kZVVSSUNvbXBvbmVudChfYWRkW19rXSk7fW10cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDoncHJlYW5hbHlzZScsZW1wbGFjZW1lbnQ6J3Jlc3VsdGF0J30pO210cmFjaygnY2hlY2tvdXRfb3Blbicse3ZpYToncHJlYW5hbHlzZSd9KTt3aW5kb3cubG9jYXRpb24uaHJlZj11O30sc3R5bGU6e3RleHREZWNvcmF0aW9uOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnLHdpZHRoOicxMDAlJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLHRleHRBbGlnbjonY2VudGVyJyxoZWlnaHQ6bT8nNTJweCc6JzU2cHgnLHBhZGRpbmc6JzAgMTZweCcsYmFja2dyb3VuZDpOQVZZLGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJ30sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoMS4xMiknO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTFweCknO30sb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO319LCdPYnRlbmlyIG1vbiBiaWxhbiByZXRyYWl0ZScpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTJweCc6JzEyLjVweCcsY29sb3I6R1JFWSx0ZXh0QWxpZ246J2NlbnRlcid9fSwnUGFpZW1lbnQgc8OpY3VyaXPDqSBcdTAwYjcgU2FucyBhYm9ubmVtZW50JyksZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsbWFyZ2luVG9wOicycHgnfX0pLGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzhweCd9fSxfYmVuLm1hcChmdW5jdGlvbih4LGkzKXtyZXR1cm4gZWwoJ2Rpdicse2tleTppMyxzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOHB4J319LGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonMTBweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6UkVELHRyYW5zZm9ybTondHJhbnNsYXRlWSgtNHB4KSd9fSksZWwoJ2Rpdicse30sZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4Jyxmb250V2VpZ2h0OjcwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNX19LHhbMF0pLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0seFsxXSkpKTt9KSksZWwoJ2EnLHtocmVmOicjJyxvbkNsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgYng9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKSkuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiAvVm9pciA0IHBhZ2VzLy50ZXN0KHgudGV4dENvbnRlbnR8fCcnKTt9KVswXTtpZihieCl7YnguY2xpY2soKTt9fSxzdHlsZTp7YWxpZ25TZWxmOidmbGV4LXN0YXJ0Jyxmb250U2l6ZTptPycxMi41cHgnOicxM3B4Jyxjb2xvcjpOQVZZLHRleHREZWNvcmF0aW9uOid1bmRlcmxpbmUnLGN1cnNvcjoncG9pbnRlcicsdHJhbnNpdGlvbjonY29sb3IgLjE1cyBlYXNlJ30sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1SRUQ7fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPU5BVlk7fX0sJ1ZvaXIgdW4gZXhlbXBsZSBkZSBiaWxhbicpLGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTFweCc6JzEycHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMHB4J319LChQSE9UTz9lbCgnaW1nJyx7c3JjOlBIT1RPLGFsdDp0aGlzLmZvdW5kZXIoKSxzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOic0MHB4JyxoZWlnaHQ6JzQwcHgnLGJvcmRlclJhZGl1czonNTAlJyxvYmplY3RGaXQ6J2NvdmVyJyxkaXNwbGF5OidibG9jayd9fSk6bnVsbCksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ0FuYWx5c8OpIGV0IHLDqWRpZ8OpIHBhciAnLGVsKCdzdHJvbmcnLHtzdHlsZTp7Y29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMH19LHRoaXMuZm91bmRlcigpKSwnLCBmb25kYXRldXIgZFx1MjAxOUFEQ0YuJykpXTpbZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonOHB4J319LF9iZW4ubWFwKGZ1bmN0aW9uKHgsaTMpe3JldHVybiBlbCgnZGl2Jyx7a2V5OmkzLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOicxMHB4JyxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpSRUQsdHJhbnNmb3JtOid0cmFuc2xhdGVZKC00cHgpJ319KSxlbCgnZGl2Jyx7fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVlksbGluZUhlaWdodDoxLjM1fX0seFswXSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSx4WzFdKSkpO30pKSxlbCgnYScse2hyZWY6JyMnLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBieD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIC9Wb2lyIDQgcGFnZXMvLnRlc3QoeC50ZXh0Q29udGVudHx8JycpO30pWzBdO2lmKGJ4KXtieC5jbGljaygpO319LHN0eWxlOnthbGlnblNlbGY6J2ZsZXgtc3RhcnQnLGZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOk5BVlksdGV4dERlY29yYXRpb246J3VuZGVybGluZScsY3Vyc29yOidwb2ludGVyJyx0cmFuc2l0aW9uOidjb2xvciAuMTVzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPVJFRDt9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbihlKXtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9TkFWWTt9fSwnVm9pciB1biBleGVtcGxlIGRlIGJpbGFuJyksZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMXB4JzonMTJweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEwcHgnfX0sKFBIT1RPP2VsKCdpbWcnLHtzcmM6UEhPVE8sYWx0OnRoaXMuZm91bmRlcigpLHN0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzQwcHgnLGhlaWdodDonNDBweCcsYm9yZGVyUmFkaXVzOic1MCUnLG9iamVjdEZpdDonY292ZXInLGRpc3BsYXk6J2Jsb2NrJ319KTpudWxsKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnQW5hbHlzw6kgZXQgcsOpZGlnw6kgcGFyICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sdGhpcy5mb3VuZGVyKCkpLCcsIGZvbmRhdGV1ciBkXHUyMDE5QURDRi4nKSksZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMHB4JyxmbGV4V3JhcDond3JhcCd9fSxlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI4ZW0nLGNvbG9yOk5BVll9fSx0aGlzLnByaWNlKCkpLGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOkdSRVl9fSwnUGFpZW1lbnQgdW5pcXVlIFx1MDBiNyBCaWxhbiByZW1pcyBzb3VzICcrdGhpcy5kZWxhaSgpKSksZWwoJ2EnLHtocmVmOidodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8/dXRtX3NvdXJjZT1hZGNmJnV0bV9tZWRpdW09cGFnZS12ZW50ZSZ1dG1fY2FtcGFpZ249YW5hbHlzZS1yZWxldmUnLG9uQ2xpY2s6ZT0+e3ZhciBqPXRoaXMuc3RhdGUuamV0b247aWYoIWopcmV0dXJuO2UucHJldmVudERlZmF1bHQoKTt2YXIgdT1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJyl8fCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8nO3ZhciBfY2s9ZnVuY3Rpb24obil7cmV0dXJuIChkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKD86Xnw7ICknK24rJz0oW147XSopJykpfHxbXSlbMV18fCcnO307dmFyIF9jaWQ9X2NrKCdfZ2EnKS5zcGxpdCgnLicpLnNsaWNlKC0yKS5qb2luKCcuJyk7dmFyIF9zaWQ9KF9jaygnX2dhX0Q5UzI0QzZKNDcnKS5zcGxpdCgnLicpWzJdKXx8Jyc7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciB2PW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChjKTtpZih2KXNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYyx2KTt9Y2F0Y2goZSl7fX0pO3ZhciBfYWRkPXthcGVyY3U6an07aWYoX2NpZClfYWRkLmNpZD1fY2lkO2lmKF9zaWQpX2FkZC5zaWQ9X3NpZDt2YXIgX2ZicD1fY2soJ19mYnAnKTtpZihfZmJwKV9hZGQuZmJwPV9mYnA7dmFyIF9mYmM9X2NrKCdfZmJjJyk7aWYoX2ZiYylfYWRkLmZiYz1fZmJjO1snZ2NsaWQnLCdnYnJhaWQnLCd3YnJhaWQnXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3RyeXt2YXIgdj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGMpO2lmKHYpX2FkZFtjXT12O31jYXRjaChlKXt9fSk7Zm9yKHZhciBfayBpbiBfYWRkKXtpZih1LmluZGV4T2YoX2srJz0nKTwwKXUrPSh1LmluZGV4T2YoJz8nKT4tMT8nJic6Jz8nKStfaysnPScrZW5jb2RlVVJJQ29tcG9uZW50KF9hZGRbX2tdKTt9bXRyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidwcmVhbmFseXNlJyxlbXBsYWNlbWVudDoncmVzdWx0YXQnfSk7bXRyYWNrKCdjaGVja291dF9vcGVuJyx7dmlhOidwcmVhbmFseXNlJ30pO3dpbmRvdy5sb2NhdGlvbi5ocmVmPXU7fSxzdHlsZTp7dGV4dERlY29yYXRpb246J25vbmUnLGJveFNpemluZzonYm9yZGVyLWJveCcsd2lkdGg6JzEwMCUnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsdGV4dEFsaWduOidjZW50ZXInLGhlaWdodDptPyc1MnB4JzonNTZweCcscGFkZGluZzonMCAxNnB4JyxiYWNrZ3JvdW5kOk5BVlksY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE1cHgnOicxNS41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcygxLjEyKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fX0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlJyksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMnB4JzonMTIuNXB4Jyxjb2xvcjpHUkVZLHRleHRBbGlnbjonY2VudGVyJ319LCdQYWllbWVudCBzw6ljdXJpc8OpIFx1MDBiNyBTYW5zIGFib25uZW1lbnQnKV0pKTsgdmFyIF9mYXE9W1snUXVlIGNvbnRpZW50IGxhIHByw6ktYW5hbHlzZSBncmF0dWl0ZVx1MDBhMD8nLCdFbGxlIHJlcMOocmUgYXV0b21hdGlxdWVtZW50IGRlcyBwb2ludHMgw6AgdsOpcmlmaWVyIGRhbnMgdm90cmUgcmVsZXbDqS4gVm91cyBjb25zdWx0ZXogbGV1ciBkw6l0YWlsIGV0IGxlcyBhbm7DqWVzIGNvbmNlcm7DqWVzIGFwcsOocyBhdm9pciBzYWlzaSB2b3RyZSBhZHJlc3NlIGUtbWFpbC4nXSxbJ1F1XHUyMDE5ZXN0LWNlIHF1ZSBsZSBiaWxhbiBjb21wbGV0IGFwcG9ydGUgZW4gcGx1c1x1MDBhMD8nLCdKXHUyMDE5ZXhhbWluZSB2b3RyZSByZWxldsOpIGF2ZWMgdm9zIHLDqXBvbnNlcyBwb3VyIGTDqXRlcm1pbmVyIGxlcyBkZW1hbmRlcyBkZSBjb3JyZWN0aW9uIMOgIHJldGVuaXIsIGNvbXBhcmVyIHZvcyBwb3NzaWJpbGl0w6lzIGRlIGTDqXBhcnQgZXQgcHLDqXBhcmVyIGxlcyBjb3VycmllcnMgYWRhcHTDqXMgw6Agdm90cmUgc2l0dWF0aW9uLiddLFsnUHVpcy1qZSBlZmZlY3R1ZXIgbGVzIGTDqW1hcmNoZXMgbW9pLW3Dqm1lXHUwMGEwPycsJ091aS4gTGUgYmlsYW4gdm91cyBhaWRlIMOgIHNhdm9pciBxdW9pIGRlbWFuZGVyIGV0IHF1ZWxsZXMgcGnDqGNlcyBqb2luZHJlLiBMZXMgY291cnJpZXJzIHNvbnQgcHLDqXBhcsOpc1x1MDBhMDsgdm91cyBsZXMgc2lnbmV6IGV0IGxlcyBlbnZveWV6IMOgIHZvcyBjYWlzc2VzLiddXTsgdmFyIEFDQz1lbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzZweCAxOHB4IDE0cHgnOic4cHggMzRweCAyMHB4J319LF9mYXEubWFwKGZ1bmN0aW9uKHFhLGk0KXtyZXR1cm4gZWwoJ2RldGFpbHMnLHtrZXk6aTQsc3R5bGU6e2JvcmRlclRvcDppND8nMXB4IHNvbGlkICcrTElORTonbm9uZSd9fSxlbCgnc3VtbWFyeScse3N0eWxlOntsaXN0U3R5bGU6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOicxNHB4JyxwYWRkaW5nOm0/JzEzcHggMCc6JzE1cHggMCcsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNX19LHFhWzBdKSxlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMCAwIDEzcHgnOicwIDAgMTVweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LLG1heFdpZHRoOic3MGNoJ319LHFhWzFdKSk7fSkpOyByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQsYmFja2dyb3VuZDonI2ZmZmZmZicsYm94U2hhZG93OicwIDMwcHggNzBweCAtNDBweCByZ2JhKDE0LDE5LDc5LDAuNCknfX0sZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOk5BVlkscGFkZGluZzptPycxOHB4IDE4cHggMThweCc6JzI0cHggMzRweCAyNHB4J319LGtpY2soJ1ZvdHJlIHByw6ktYW5hbHlzZSBncmF0dWl0ZScsJyNmZjgwOTUnKSxlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc4cHgnOic5cHgnLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjZweCc6JzM0cHgnLGxpbmVIZWlnaHQ6MS4wOCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjhlbScsY29sb3I6JyNmZmZmZmYnLHRleHRXcmFwOidiYWxhbmNlJ319LHZUaXRyZSksZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nNnB4JzonN3B4Jyxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjonI2FhYjJlZSd9fSx2U291cyksZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzE4cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyIDFmcic6J3JlcGVhdCgnK3N0YXRzLmxlbmd0aCsnLDFmciknLGdhcDptPycxMnB4IDEwcHgnOicwJ319LHN0YXRzLm1hcChmdW5jdGlvbih4LGk1KXtyZXR1cm4gZWwoJ2Rpdicse2tleTppNSxzdHlsZTp7cGFkZGluZzptPycwJzooaTU/JzAgMCAwIDIwcHgnOicwIDIwcHggMCAwJyksYm9yZGVyTGVmdDooIW0mJmk1PjApPycxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE4KSc6J25vbmUnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicycHgnfX0sZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI1cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI4ZW0nLGNvbG9yOicjZmZmZmZmJyxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSx4WzBdKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEycHgnOicxMi41cHgnLGxpbmVIZWlnaHQ6MS4zNSxjb2xvcjonI2FhYjJlZSd9fSx4WzFdKSk7fSkpLChhdHRMaW5lP2VsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzEycHgnOicxNHB4JyxwYWRkaW5nVG9wOm0/JzEwcHgnOicxMnB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyxmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjonI2M3Y2RmMid9fSxhdHRMaW5lKTpudWxsKSksZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAzNzJweCcsZ2FwOicwJ319LGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycyMHB4IDE4cHggMjJweCc6JzI4cHggMzBweCAzMHB4Jyxib3JkZXJSaWdodDptPydub25lJzonMXB4IHNvbGlkICcrTElORSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGp1c3RpZnlDb250ZW50OidmbGV4LXN0YXJ0J319LExFRlQpLGVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixwYWRkaW5nOm0/JzE4cHgnOicyMnB4IDIwcHggMjRweCcsYm9yZGVyVG9wOm0/JzFweCBzb2xpZCAnK0xJTkU6J25vbmUnfX0sT0ZGRVIpKSxBQ0MpO30KICAgICAgICBpZighVkVSUil7IHZhciBUT1VTPShTVUomJlNVSi50b3VzJiZTVUoudG91cy5sZW5ndGgpP1NVSi50b3VzOm51bGw7IHZhciBfdU5CPShTVUomJlNVSi5hX2NsYXJpZmllciE9bnVsbCk/U1VKLmFfY2xhcmlmaWVyOigoU1VKJiZTVUoudG90YWwhPW51bGwpP1NVSi50b3RhbDpudWxsKTsgdmFyIF9hbm5DPSh0eXBlb2YgQS5hbm5lZXNfYV92ZXJpZmllcj09PSdudW1iZXInKT9BLmFubmVlc19hX3ZlcmlmaWVyOm51bGw7IHZhciBfdXBsdXI9ZnVuY3Rpb24obil7cmV0dXJuIG4+MT8ncyc6Jyc7fTsgdmFyIF9tZD1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQ9PW51bGw/Jyc6dCkucmVwbGFjZSgvXCpcKi9nLCcnKS5yZXBsYWNlKC9fXy9nLCcnKTt9OyB2YXIgX3VzdD1bXTsgaWYoTFUuYW5uZWVzIT1udWxsKV91c3QucHVzaChbU3RyaW5nKExVLmFubmVlcyksJ2FubsOpZScrX3VwbHVyKExVLmFubmVlcykrJyBwcsOpc2VudGUnK191cGx1cihMVS5hbm5lZXMpKycgZGFucyB2b3RyZSByZWxldsOpJysoKExVLmRlYnV0JiZMVS5maW4pPygnLCBkZSAnK0xVLmRlYnV0Kycgw6AgJytMVS5maW4pOicnKV0pOyBpZihMVS5lbXBsb3lldXJzIT1udWxsKV91c3QucHVzaChbU3RyaW5nKExVLmVtcGxveWV1cnMpLCdlbXBsb3lldXInK191cGx1cihMVS5lbXBsb3lldXJzKSsnIHJlY2Vuc8OpJytfdXBsdXIoTFUuZW1wbG95ZXVycyldKTsgaWYoTFUuYW5uZWVzX2NvaGVyZW50ZXMhPW51bGwpX3VzdC5wdXNoKFtTdHJpbmcoTFUuYW5uZWVzX2NvaGVyZW50ZXMpLCdhbm7DqWUnK191cGx1cihMVS5hbm5lZXNfY29oZXJlbnRlcykrJyBzYW5zIGluY29ow6lyZW5jZSBkw6l0ZWN0w6llJ10pOyB2YXIgX2dycEtleT1mdW5jdGlvbihuKXtpZihuPT09J3Bvc3NpYmlsaXRlX3NvdXNfY29uZGl0aW9ucycpcmV0dXJuICdwb3NzaWJpbGl0ZV9zb3VzX2NvbmRpdGlvbnMnO2lmKG49PT0nY29udHJvbGVfc2Fuc19lY2FydCcpcmV0dXJuICdjb250cm9sZV9zYW5zX2VjYXJ0JztpZihuPT09J2luZm9ybWF0aW9uJ3x8bj09PSdpbnRlcmRpdGUnKXJldHVybiAnaW5mb3JtYXRpb24nO3JldHVybiAnYV9jbGFyaWZpZXInO307IHZhciBfRkFNPVtbJ2FfY2xhcmlmaWVyJywnTGVzIGNvbnN0YXRzIMOgIGNsYXJpZmllciddLFsncG9zc2liaWxpdGVfc291c19jb25kaXRpb25zJywnTGVzIHBvc3NpYmlsaXTDqXMgw6Agw6l0dWRpZXInXSxbJ2NvbnRyb2xlX3NhbnNfZWNhcnQnLCdMZXMgY29udHLDtGxlcyBzYW5zIMOpY2FydCddLFsnaW5mb3JtYXRpb24nLCdMZXMgaW5mb3JtYXRpb25zIGNvbXBsw6ltZW50YWlyZXMnXV07IHZhciBfZ3JvdXBzPVRPVVM/X0ZBTS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIHtsYWJlbDpmWzFdLGl0ZW1zOlRPVVMuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiBfZ3JwS2V5KHgubmF0dXJlfHwnYV9jbGFyaWZpZXInKT09PWZbMF07fSl9O30pLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gZy5pdGVtcy5sZW5ndGg7fSk6W3tsYWJlbDonVm9zIHBvaW50cyDDoCB2w6lyaWZpZXInLGl0ZW1zOihTVUoubW9udHJlc3x8W10pfV07IHZhciBfZW1haWxMaW5lPSghKEEmJkEuYWRyZXNzZV9jb25udWUpKT8nVm90cmUgbGllbiBkZSByZXRvdXIgdm91cyBlc3QgZW52b3nDqSBwYXIgZS1tYWlsLic6bnVsbDsgdmFyIF91YmVuPVtbJ1ZvcyBjb25zdGF0cyBleHBsaXF1w6lzIGV0IHZvcyBkw6ltYXJjaGVzIGRlIGNvcnJlY3Rpb24nLCdMZXMgZmFpdHMsIGxlcyDDqWzDqW1lbnRzIMOgIHLDqXVuaXIgZXQgbGVzIGRlbWFuZGVzIHBvc3NpYmxlcywgZXhwb3PDqXMgcG91ciBjaGFxdWUgcG9pbnQuJ10sWydWb3MgcG9zc2liaWxpdMOpcyBkZSBkw6lwYXJ0JywnVm9zIGRhdGVzIHBvc3NpYmxlcyBldCB2b3MgbW9udGFudHMgZXN0aW3DqXMsIHNlbG9uIGxlcyBzY8OpbmFyaW9zIMOpdHVkacOpcy4nXSxbJ1ZvcyBkw6ltYXJjaGVzIHByw6lwYXLDqWVzJywnTGVzIGNvdXJyaWVycyBhZGFwdMOpcyBhdXggZGVtYW5kZXMgcmV0ZW51ZXMsIMOgIHNpZ25lciBldCDDoCBlbnZveWVyLiddXTsgdmFyIF91T2ZmZXI9ZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQscGFkZGluZzptPycxNnB4IDE2cHggMThweCc6JzIycHggMjJweCAyNHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMXB4JzonMTNweCd9fSxlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTAuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNjNDE3M2EnfX0sJ0xlIGJpbGFuIHJldHJhaXRlIGNvbXBsZXQnKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMThweCc6JzIwcHgnLGxpbmVIZWlnaHQ6MS4xOCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMThlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnRmFpdGVzIGV4YW1pbmVyIHZvcyBwb2ludHMgZXQgcHLDqXBhcmVyIHZvcyBkw6ltYXJjaGVzJyksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpJTkt9fSwnSmUgcmVwcmVuZHMgdm90cmUgcmVsZXbDqSBldCB2b3MgcsOpcG9uc2VzIHBvdXIgdm91cyByZW1ldHRyZSB1biBiaWxhbiDDqWNyaXQsIGFkYXB0w6kgw6Agdm90cmUgY2FycmnDqHJlLicpLChtP1tlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEwcHgnLGZsZXhXcmFwOid3cmFwJ319LGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjZweCc6JzMwcHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjhlbScsY29sb3I6TkFWWX19LHRoaXMucHJpY2UoKSksZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsY29sb3I6R1JFWX19LCdQYWllbWVudCB1bmlxdWUgXHUwMGI3IEJpbGFuIHJlbWlzIHNvdXMgJyt0aGlzLmRlbGFpKCkpKSxlbCgnYScse2hyZWY6J2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnLz91dG1fc291cmNlPWFkY2YmdXRtX21lZGl1bT1wYWdlLXZlbnRlJnV0bV9jYW1wYWlnbj1hbmFseXNlLXJlbGV2ZScsb25DbGljazplPT57dmFyIGo9dGhpcy5zdGF0ZS5qZXRvbjtpZighailyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB1PWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKXx8J2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnLyc7dmFyIF9jaz1mdW5jdGlvbihuKXtyZXR1cm4gKGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoPzpefDsgKScrbisnPShbXjtdKiknKSl8fFtdKVsxXXx8Jyc7fTt2YXIgX2NpZD1fY2soJ19nYScpLnNwbGl0KCcuJykuc2xpY2UoLTIpLmpvaW4oJy4nKTt2YXIgX3NpZD0oX2NrKCdfZ2FfRDlTMjRDNko0NycpLnNwbGl0KCcuJylbMl0pfHwnJztbJ2djbGlkJywnZ2JyYWlkJywnd2JyYWlkJ10uZm9yRWFjaChmdW5jdGlvbihjKXt0cnl7dmFyIHY9bmV3IFVSTChsb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KGMpO2lmKHYpc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjLHYpO31jYXRjaChlKXt9fSk7dmFyIF9hZGQ9e2FwZXJjdTpqfTtpZihfY2lkKV9hZGQuY2lkPV9jaWQ7aWYoX3NpZClfYWRkLnNpZD1fc2lkO3ZhciBfZmJwPV9jaygnX2ZicCcpO2lmKF9mYnApX2FkZC5mYnA9X2ZicDt2YXIgX2ZiYz1fY2soJ19mYmMnKTtpZihfZmJjKV9hZGQuZmJjPV9mYmM7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciB2PXNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYyk7aWYodilfYWRkW2NdPXY7fWNhdGNoKGUpe319KTtmb3IodmFyIF9rIGluIF9hZGQpe2lmKHUuaW5kZXhPZihfaysnPScpPDApdSs9KHUuaW5kZXhPZignPycpPi0xPycmJzonPycpK19rKyc9JytlbmNvZGVVUklDb21wb25lbnQoX2FkZFtfa10pO31tdHJhY2soJ2N0YV9jbGljaycse2Rlc3Q6J3ByZWFuYWx5c2UnLGVtcGxhY2VtZW50OidyZXN1bHRhdCd9KTttdHJhY2soJ2NoZWNrb3V0X29wZW4nLHt2aWE6J3ByZWFuYWx5c2UnfSk7d2luZG93LmxvY2F0aW9uLmhyZWY9dTt9LHN0eWxlOnt0ZXh0RGVjb3JhdGlvbjonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94Jyx3aWR0aDonMTAwJScsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyx0ZXh0QWxpZ246J2NlbnRlcicsaGVpZ2h0Om0/JzU0cHgnOic1OHB4JyxwYWRkaW5nOicwIDE2cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxib3hTaGFkb3c6JzAgMTRweCAzMHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbihlKXtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9fSwnT2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUnKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEycHgnOicxMi41cHgnLGNvbG9yOkdSRVksdGV4dEFsaWduOidjZW50ZXInfX0sJ1BhaWVtZW50IHPDqWN1cmlzw6kgXHUwMGI3IFNhbnMgYWJvbm5lbWVudCcpLGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLG1hcmdpblRvcDonMnB4J319KSxlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnfX0sX3ViZW4ubWFwKGZ1bmN0aW9uKHgsaTMpe3JldHVybiBlbCgnZGl2Jyx7a2V5OmkzLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOicxMHB4JyxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpSRUQsdHJhbnNmb3JtOid0cmFuc2xhdGVZKC00cHgpJ319KSxlbCgnZGl2Jyx7fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVlksbGluZUhlaWdodDoxLjM1fX0seFswXSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSx4WzFdKSkpO30pKSxlbCgnYScse2hyZWY6JyMnLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBieD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIC9Wb2lyIDQgcGFnZXMvLnRlc3QoeC50ZXh0Q29udGVudHx8JycpO30pWzBdO2lmKGJ4KXtieC5jbGljaygpO319LHN0eWxlOnthbGlnblNlbGY6J2ZsZXgtc3RhcnQnLGZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOk5BVlksdGV4dERlY29yYXRpb246J3VuZGVybGluZScsY3Vyc29yOidwb2ludGVyJyx0cmFuc2l0aW9uOidjb2xvciAuMTVzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPVJFRDt9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbihlKXtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9TkFWWTt9fSwnVm9pciB1biBleGVtcGxlIGRlIGJpbGFuJyksZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMXB4JzonMTJweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEwcHgnfX0sKFBIT1RPP2VsKCdpbWcnLHtzcmM6UEhPVE8sYWx0OnRoaXMuZm91bmRlcigpLHN0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzQwcHgnLGhlaWdodDonNDBweCcsYm9yZGVyUmFkaXVzOic1MCUnLG9iamVjdEZpdDonY292ZXInLGRpc3BsYXk6J2Jsb2NrJ319KTpudWxsKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnQW5hbHlzw6kgZXQgcsOpZGlnw6kgcGFyICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sdGhpcy5mb3VuZGVyKCkpLCcsIGZvbmRhdGV1ciBkXHUyMDE5QURDRi4nKSldOltlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnfX0sX3ViZW4ubWFwKGZ1bmN0aW9uKHgsaTMpe3JldHVybiBlbCgnZGl2Jyx7a2V5OmkzLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOicxMHB4JyxoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpSRUQsdHJhbnNmb3JtOid0cmFuc2xhdGVZKC00cHgpJ319KSxlbCgnZGl2Jyx7fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVlksbGluZUhlaWdodDoxLjM1fX0seFswXSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSx4WzFdKSkpO30pKSxlbCgnYScse2hyZWY6JyMnLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBieD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIC9Wb2lyIDQgcGFnZXMvLnRlc3QoeC50ZXh0Q29udGVudHx8JycpO30pWzBdO2lmKGJ4KXtieC5jbGljaygpO319LHN0eWxlOnthbGlnblNlbGY6J2ZsZXgtc3RhcnQnLGZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOk5BVlksdGV4dERlY29yYXRpb246J3VuZGVybGluZScsY3Vyc29yOidwb2ludGVyJyx0cmFuc2l0aW9uOidjb2xvciAuMTVzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPVJFRDt9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbihlKXtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9TkFWWTt9fSwnVm9pciB1biBleGVtcGxlIGRlIGJpbGFuJyksZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMXB4JzonMTJweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEwcHgnfX0sKFBIT1RPP2VsKCdpbWcnLHtzcmM6UEhPVE8sYWx0OnRoaXMuZm91bmRlcigpLHN0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzQwcHgnLGhlaWdodDonNDBweCcsYm9yZGVyUmFkaXVzOic1MCUnLG9iamVjdEZpdDonY292ZXInLGRpc3BsYXk6J2Jsb2NrJ319KTpudWxsKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnQW5hbHlzw6kgZXQgcsOpZGlnw6kgcGFyICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sdGhpcy5mb3VuZGVyKCkpLCcsIGZvbmRhdGV1ciBkXHUyMDE5QURDRi4nKSksZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMHB4JyxmbGV4V3JhcDond3JhcCd9fSxlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI4ZW0nLGNvbG9yOk5BVll9fSx0aGlzLnByaWNlKCkpLGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOkdSRVl9fSwnUGFpZW1lbnQgdW5pcXVlIFx1MDBiNyBCaWxhbiByZW1pcyBzb3VzICcrdGhpcy5kZWxhaSgpKSksZWwoJ2EnLHtocmVmOidodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8/dXRtX3NvdXJjZT1hZGNmJnV0bV9tZWRpdW09cGFnZS12ZW50ZSZ1dG1fY2FtcGFpZ249YW5hbHlzZS1yZWxldmUnLG9uQ2xpY2s6ZT0+e3ZhciBqPXRoaXMuc3RhdGUuamV0b247aWYoIWopcmV0dXJuO2UucHJldmVudERlZmF1bHQoKTt2YXIgdT1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJyl8fCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8nO3ZhciBfY2s9ZnVuY3Rpb24obil7cmV0dXJuIChkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKD86Xnw7ICknK24rJz0oW147XSopJykpfHxbXSlbMV18fCcnO307dmFyIF9jaWQ9X2NrKCdfZ2EnKS5zcGxpdCgnLicpLnNsaWNlKC0yKS5qb2luKCcuJyk7dmFyIF9zaWQ9KF9jaygnX2dhX0Q5UzI0QzZKNDcnKS5zcGxpdCgnLicpWzJdKXx8Jyc7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciB2PW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChjKTtpZih2KXNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYyx2KTt9Y2F0Y2goZSl7fX0pO3ZhciBfYWRkPXthcGVyY3U6an07aWYoX2NpZClfYWRkLmNpZD1fY2lkO2lmKF9zaWQpX2FkZC5zaWQ9X3NpZDt2YXIgX2ZicD1fY2soJ19mYnAnKTtpZihfZmJwKV9hZGQuZmJwPV9mYnA7dmFyIF9mYmM9X2NrKCdfZmJjJyk7aWYoX2ZiYylfYWRkLmZiYz1fZmJjO1snZ2NsaWQnLCdnYnJhaWQnLCd3YnJhaWQnXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3RyeXt2YXIgdj1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGMpO2lmKHYpX2FkZFtjXT12O31jYXRjaChlKXt9fSk7Zm9yKHZhciBfayBpbiBfYWRkKXtpZih1LmluZGV4T2YoX2srJz0nKTwwKXUrPSh1LmluZGV4T2YoJz8nKT4tMT8nJic6Jz8nKStfaysnPScrZW5jb2RlVVJJQ29tcG9uZW50KF9hZGRbX2tdKTt9bXRyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidwcmVhbmFseXNlJyxlbXBsYWNlbWVudDoncmVzdWx0YXQnfSk7bXRyYWNrKCdjaGVja291dF9vcGVuJyx7dmlhOidwcmVhbmFseXNlJ30pO3dpbmRvdy5sb2NhdGlvbi5ocmVmPXU7fSxzdHlsZTp7dGV4dERlY29yYXRpb246J25vbmUnLGJveFNpemluZzonYm9yZGVyLWJveCcsd2lkdGg6JzEwMCUnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsdGV4dEFsaWduOidjZW50ZXInLGhlaWdodDptPyc1NHB4JzonNThweCcscGFkZGluZzonMCAxNnB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsYm94U2hhZG93OicwIDE0cHggMzBweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjYpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJ30sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fX0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlJyksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMnB4JzonMTIuNXB4Jyxjb2xvcjpHUkVZLHRleHRBbGlnbjonY2VudGVyJ319LCdQYWllbWVudCBzw6ljdXJpc8OpIFx1MDBiNyBTYW5zIGFib25uZW1lbnQnKV0pKTsgdmFyIF91TGVmdD1lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE2cHgnOicyMHB4J319LGVsKCdkaXYnLHt9LGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMnB4JzonMjZweCcsbGluZUhlaWdodDoxLjEyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyZW0nLGNvbG9yOk5BVll9fSwnVm9zIHBvaW50cyDDoCB2w6lyaWZpZXInKSwoX2FubkMhPW51bGw/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzRweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsY29sb3I6R1JFWX19LF9hbm5DKycgYW5uw6llJytfdXBsdXIoX2FubkMpKycgY29uY2VybsOpZScrX3VwbHVyKF9hbm5DKSk6bnVsbCksKF9lbWFpbExpbmU/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzZweCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsY29sb3I6R1JFWX19LF9lbWFpbExpbmUpOm51bGwpLChUT1VTP2VsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOic2cHgnLGZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOkdSRVl9fSwnVG91cyBsZXMgY29uc3RhdHMgZGUgY2V0dGUgbGVjdHVyZSBzb250IGNvbnN1bHRhYmxlcyBncmF0dWl0ZW1lbnQuJyk6bnVsbCkpLGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sX2dyb3Vwcy5tYXAoZnVuY3Rpb24oZyxnaSl7cmV0dXJuIGVsKCdkaXYnLHtrZXk6Z2ksc3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJMZWZ0OiczcHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6UEFQRVJ9fSxlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMTJweCAxNHB4JzonMTRweCAxNnB4Jyxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVll9fSxnLmxhYmVsKycgXHUwMGI3ICcrZy5pdGVtcy5sZW5ndGgpLGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycwIDE0cHggNnB4JzonMCAxNnB4IDhweCd9fSxnLml0ZW1zLm1hcChmdW5jdGlvbihpdCxpaSl7cmV0dXJuIGVsKCdkZXRhaWxzJyx7a2V5OmlpLHN0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkV9fSxlbCgnc3VtbWFyeScse3N0eWxlOntsaXN0U3R5bGU6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonMTBweCcscGFkZGluZzptPycxMnB4IDAnOicxM3B4IDAnfX0sKGl0LmFubmVlIT1udWxsP2VsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE4cHgnOicyMXB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSxTdHJpbmcoaXQuYW5uZWUpKTooKGl0LmFubmVlcyYmaXQuYW5uZWVzLmxlbmd0aD4xKT9lbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udFNpemU6bT8nMTFweCc6JzExLjVweCcsZm9udFdlaWdodDo3MDAsY29sb3I6R1JFWSx3aGl0ZVNwYWNlOidub3dyYXAnfX0saXQuYW5uZWVzLmxlbmd0aCsnIGFubsOpZXMnKTpudWxsKSksZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuMzV9fSxfbWQoaXQudGl0cmUpKSxlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udFNpemU6bT8nMTJweCc6JzEyLjVweCcsY29sb3I6R1JFWSx3aGl0ZVNwYWNlOidub3dyYXAnfX0sJ1ZvaXIgbGUgZMOpdGFpbCcpKSxlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMCAwIDEzcHgnOicwIDAgMTRweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LF9tZChpdC5jb25zdGF0KXx8J0NlIHBvaW50IGVzdCByZXByaXMgZXQgZXhhbWluw6kgZGFucyBsZSBiaWxhbiBjb21wbGV0LicpLChpdC5wcmVjaXNpb24/ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWSxib3JkZXJMZWZ0OicycHggc29saWQgJytMSU5FLHBhZGRpbmdMZWZ0OicxMHB4J319LF9tZChpdC5wcmVjaXNpb24pKTpudWxsKSwoaXQudHJpbWVzdHJlc19lbl9qZXUhPW51bGw/ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjonI2M0MTczYSd9fSwnSnVzcXVcdTIwMTnDoCAnK2l0LnRyaW1lc3RyZXNfZW5famV1KycgdHJpbWVzdHJlJytfdXBsdXIoaXQudHJpbWVzdHJlc19lbl9qZXUpKycgcsOpY3Vww6lyYWJsZScrX3VwbHVyKGl0LnRyaW1lc3RyZXNfZW5famV1KSsnIHN1ciBjZXR0ZSBhbm7DqWUsIMOgIGNvbmZpcm1lci4nKTpudWxsKSkpO30pKSk7fSkpLGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTZweCc6JzE4cHgnfX0sZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE4cHgnOicyMXB4JyxsaW5lSGVpZ2h0OjEuMixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMThlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnUXVlbHMgcG9pbnRzIG3DqXJpdGVudCB1bmUgZGVtYW5kZSBkZSBjb3JyZWN0aW9uXHUwMGEwPycpLGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzZweCc6JzhweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sJ0plIHJlcHJlbmRzIGNlcyBjb25zdGF0cyBhdmVjIHZvdHJlIHJlbGV2w6kgZXQgdm9zIHLDqXBvbnNlcy4gTGUgYmlsYW4gZXhwbGlxdWUgY2hhcXVlIGRlbWFuZGUgcG9zc2libGUsIGNvbXBhcmUgdm9zIHBvc3NpYmlsaXTDqXMgZGUgZMOpcGFydCBldCBwcsOpcGFyZSBsZXMgY291cnJpZXJzLicpKSk7IHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3hTaGFkb3c6JzAgMzBweCA3MHB4IC00MHB4IHJnYmEoMTQsMTksNzksMC40KSd9fSxlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxwYWRkaW5nOm0/JzE4cHggMThweCAxOHB4JzonMjRweCAzNHB4IDI0cHgnfX0sa2ljaygnVm90cmUgcHLDqS1hbmFseXNlJywnI2ZmODA5NScpLGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzhweCc6JzlweCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyM3B4JzonMzBweCcsbGluZUhlaWdodDoxLjA4LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyOGVtJyxjb2xvcjonI2ZmZmZmZicsdGV4dFdyYXA6J2JhbGFuY2UnfX0sKF91TkIhPW51bGw/KF91TkIrJyBwb2ludCcrX3VwbHVyKF91TkIpKycgw6AgdsOpcmlmaWVyIGRhbnMgdm90cmUgcmVsZXbDqScpOidWb3RyZSBwcsOpLWFuYWx5c2UgZXN0IGRpc3BvbmlibGUnKSksZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzE4cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyIDFmcic6J3JlcGVhdCgnK191c3QubGVuZ3RoKycsMWZyKScsZ2FwOm0/JzEycHggMTBweCc6JzAnfX0sX3VzdC5tYXAoZnVuY3Rpb24oeCxpNSl7cmV0dXJuIGVsKCdkaXYnLHtrZXk6aTUsc3R5bGU6e3BhZGRpbmc6bT8nMCc6KGk1PycwIDAgMCAyMHB4JzonMCAyMHB4IDAgMCcpLGJvcmRlckxlZnQ6KCFtJiZpNT4wKT8nMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xOCknOidub25lJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMnB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyM3B4JzonMjhweCcsbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyOGVtJyxjb2xvcjonI2ZmZmZmZicsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0seFswXSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMnB4JzonMTIuNXB4JyxsaW5lSGVpZ2h0OjEuMzUsY29sb3I6JyNhYWIyZWUnfX0seFsxXSkpO30pKSksZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAzNzJweCcsZ2FwOicwJ319LGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycyMHB4IDE4cHggMjJweCc6JzI4cHggMzBweCAzMHB4Jyxib3JkZXJSaWdodDptPydub25lJzonMXB4IHNvbGlkICcrTElORX19LF91TGVmdCksZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOlBBUEVSLHBhZGRpbmc6bT8nMThweCc6JzIycHggMjBweCAyNHB4Jyxib3JkZXJUb3A6bT8nMXB4IHNvbGlkICcrTElORTonbm9uZSd9fSxlbCgnZGl2Jyx7c3R5bGU6bT9udWxsOntwb3NpdGlvbjonc3RpY2t5Jyx0b3A6JzI0cHgnLG1heEhlaWdodDonY2FsYygxMDB2aCAtIDQ4cHgpJyxvdmVyZmxvd1k6J2F1dG8nfX0sX3VPZmZlcikpKSk7fQogICAgICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3hTaGFkb3c6JzAgMzBweCA3MHB4IC00MHB4IHJnYmEoMTQsMTksNzksMC40KSd9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxwYWRkaW5nOm0/JzE2cHggMThweCAxOHB4JzonMjJweCAzNHB4IDI0cHgnfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxNHB4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwKICAgICAgICAgICAga2ljaygnVW5lIHByZW1pXHUwMGU4cmUgbGVjdHVyZSBhdXRvbWF0aXF1ZSBhIHBhcmNvdXJ1IHZvdHJlIHJlbGV2XHUwMGU5JywnI2ZmODA5NScpLAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250U2l6ZTonMTBweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYWFiMmVlJyxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMzIpJyxwYWRkaW5nOiczcHggOHB4J319LCdHcmF0dWl0JykpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTBweCc6JzEycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6bT8nMTBweCAyMnB4JzonMCA0NHB4J319LAogICAgICAgICAgICBbW1N0cmluZyhMVS5hbm5lZXMhPW51bGw/TFUuYW5uZWVzOicnKSwnYW5uXHUwMGU5ZXMgcHJcdTAwZTlzZW50ZXMsIGRlICcrKExVLmRlYnV0fHwnJykrJyBcdTAwZTAgJysoTFUuZmlufHwnJyldLFtTdHJpbmcoTFUuZW1wbG95ZXVycyE9bnVsbD9MVS5lbXBsb3lldXJzOicnKSwnZW1wbG95ZXVycyddLFtTdHJpbmcoTFUuY29udHJvbGVzIT1udWxsP0xVLmNvbnRyb2xlczonJyksJ2NvbnRyXHUwMGY0bGVzIHByXHUwMGU5dnVzLCBkb250ICcrKENUUkwuYXR0ZW50ZSE9bnVsbD9DVFJMLmF0dGVudGU6MjQpKycgblx1MDBlOWNlc3NpdGVudCB2b3Mgclx1MDBlOXBvbnNlcyddLFtTdHJpbmcoTFUuYW5uZWVzX2NvaGVyZW50ZXMhPW51bGw/TFUuYW5uZWVzX2NvaGVyZW50ZXM6JycpLCdhbm5cdTAwZTllcyBzYW5zIGluY29oXHUwMGU5cmVuY2UgZFx1MDBlOXRlY3RcdTAwZTllJ11dLm1hcChmdW5jdGlvbih4LGkpeyByZXR1cm4gZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic3cHgnfX0sCiAgICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNXB4JzonMzBweCcsbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyOGVtJyxjb2xvcjonI2ZmZmZmZicsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0seFswXSksCiAgICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjM1LGNvbG9yOicjYWFiMmVlJ319LHhbMV0pKTsgfSkpKSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDM5MnB4JyxnYXA6JzAnfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMjBweCAxOHB4IDIycHgnOiczMHB4IDM0cHggMzJweCcsYm9yZGVyUmlnaHQ6bT8nbm9uZSc6JzFweCBzb2xpZCAnK0xJTkUsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMThweCc6JzI0cHgnfX0sCiAgICAgICAgICAgIGVsKCdkaXYnLG51bGwsCiAgICAgICAgICAgICAga2ljayhraWNrVHh0KSwKICAgICAgICAgICAgICAoYmlnP2VsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzlweCc6JzExcHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtZW5kJyxnYXA6bT8nMTBweCc6JzE0cHgnLGZsZXhXcmFwOid3cmFwJ319LAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzU0cHgnOic4MnB4JyxsaW5lSGVpZ2h0OjAuODQsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDQyZW0nLGNvbG9yOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sYmlnKSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZ0JvdHRvbTptPyczcHgnOic3cHgnfX0sCiAgICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTZweCc6JzE5cHgnLGZvbnRXZWlnaHQ6NjAwLGxpbmVIZWlnaHQ6MS4xLGNvbG9yOk5BVll9fSx1bml0KSwKICAgICAgICAgICAgICAgICAgc3ViP2VsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuMyxjb2xvcjpHUkVZfX0sc3ViKTpudWxsKSk6bnVsbCksCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgcGhyYXNlP2VsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzhweCc6JzEycHgnLG1heFdpZHRoOic1OGNoJyxmb250U2l6ZTpwaHJhc2VMZWFkPyhtPycxOHB4JzonMjJweCcpOihtPycxNHB4JzonMTVweCcpLGxpbmVIZWlnaHQ6cGhyYXNlTGVhZD8xLjM1OjEuNSxjb2xvcjpwaHJhc2VMZWFkP05BVlk6SU5LLGZvbnRXZWlnaHQ6cGhyYXNlTGVhZD82MDA6NTAwLGxldHRlclNwYWNpbmc6cGhyYXNlTGVhZD8nLTAuMDEyZW0nOicwJ319LHBocmFzZSk6bnVsbCwgbm90ZT9lbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxMHB4JzonMTNweCcsbWF4V2lkdGg6JzU2Y2gnLGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnK1JFRCxwYWRkaW5nTGVmdDptPycxMHB4JzonMTJweCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LG5vdGUpOm51bGwsCiAgICAgICAgICAgICAgKF9hbm5lZXMubGVuZ3RoP2VsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzE0cHgnOicxOHB4JyxiYWNrZ3JvdW5kOlBBUEVSLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJMZWZ0OiczcHggc29saWQgJytSRUQscGFkZGluZzptPycxM3B4IDE1cHgnOicxNnB4IDIwcHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpHUkVZfX0sX2FubmVlcy5sZW5ndGg+MT8nVm9zIGFubsOpZXMgw6AgdsOpcmlmaWVyJzonVm90cmUgYW5uw6llIMOgIHbDqXJpZmllcicpLAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nN3B4JzonOXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4V3JhcDond3JhcCcsZ2FwOm0/JzhweCc6JzEwcHgnfX0sCiAgICAgICAgICAgICAgICAgIF9hbm5lZXMubWFwKGZ1bmN0aW9uKGFuLGkyKXsgcmV0dXJuIGVsKCdzcGFuJyx7a2V5OmkyLHN0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczMnB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI4ZW0nLGNvbG9yOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnLGJvcmRlckJvdHRvbTonMnB4IHNvbGlkICcrUkVELHBhZGRpbmdCb3R0b206JzNweCd9fSxTdHJpbmcoYW4pKTsgfSkpLAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOXB4JzonMTFweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LCdDZSBzb250IHZvcyBhbm7DqWVzLCBzdXIgdm90cmUgcmVsZXbDqS4gTGUgZG9zc2llciBkaXQgcG91ciBjaGFjdW5lIGNlIHF1aSBjbG9jaGUsIGxlIG1vdGlmIMOgIGludm9xdWVyIGV0IGxhIHBpw6hjZSDDoCBqb2luZHJlLicpKTpudWxsKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxNHB4JzonMThweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczonMWZyIDFmciAxZnInLGdhcDptPycxMHB4JzonMTZweCd9fSwKICAgICAgICAgICAgICAgIChWRVJSP1tdOihBLmNoaWZmcmVzX2FfbW9udHJlcnx8W10pKS5zbGljZSgwLDMpLm1hcChmdW5jdGlvbihrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6a30sY2hpcChrKSk7IH0pKSksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTZweCc6JzIwcHgnfX0sCiAgICAgICAgICAgICAga2ljayhWRVJSPygoU1VKLnRvdGFsfHwwKSsnIHBvaW50cyDDoCB2w6lyaWZpZXIgc3VyIHZvdHJlIHJlbGV2w6knKTooKFNVSi5tb250cmVzP1NVSi5tb250cmVzLmxlbmd0aDowKSsnIGRlcyAnKyhTVUoudG90YWx8fDApKycgcG9pbnRzIMOgIHbDqXJpZmllcicpKSxlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc1cHgnOic2cHgnLGZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnRGVzIGNvbnN0YXRzIMOgIGV4YW1pbmVyLCBwYXMgZGVzIGVycmV1cnMgY29uZmlybcOpZXMuJyksCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOHB4JzonMTBweCd9fSwKICAgICAgICAgICAgICAgIChWRVJSP1tdOihTVUoubW9udHJlc3x8W10pKS5tYXAoZnVuY3Rpb24oeCxpKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptPycxMHB4JzonMTJweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMTFweCAwJzonMTNweCAwJ319LAogICAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzhweCcsaGVpZ2h0Oic4cHgnLGJhY2tncm91bmQ6UkVELG1hcmdpblRvcDonNnB4J319KSwKICAgICAgICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSx4LnRpdHJlLHguZGVwbGFjZV9sYV9kYXRlP2VsKCdzcGFuJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NTAwLGNvbG9yOkdSRVl9fSwnXHUwMGEwXHUwMGI3IHBldXQgYXZhbmNlciB2b3RyZSBkXHUwMGU5cGFydCcpOm51bGwpLAogICAgICAgICAgICAgICAgICAoeC50cmltZXN0cmVzX2VuX2pldSE9bnVsbCk/ZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOicjYzQxNzNhJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0seC50cmltZXN0cmVzX2VuX2pldSsnIHRyaW1lc3RyZXMgZW4gamV1Jyk6bnVsbCk7IH0pKSwKICAgICAgICAgICAgICAoIVZFUlImJlNVSi5hdXRyZXM+MCk/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTBweCc6JzEycHgnLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0V0ICcrU1VKLmF1dHJlcysnIGF1dHJlcyBwb2ludHMgZGFucyBsZSBkb3NzaWVyIGNvbXBsZXQsIGF2ZWMgbGVzIGFublx1MDBlOWVzIGNvbmNlcm5cdTAwZTllcywgbGUgbW90aWYgXHUwMGUwIGludm9xdWVyIGV0IGxlcyBjb3VycmllcnMuIElscyBuZSBzb250IHBhcyBub21tXHUwMGU5cyBpY2lcdTAwYTA6IGNcdTIwMTllc3QgcHJcdTAwZTljaXNcdTAwZTltZW50IGNlIHF1XHUyMDE5b24gbmUgcGV1dCBwYXMgdHJvdXZlciBzZXVsLicpOm51bGwpLCAoIVZFUlI/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTBweCc6JzEycHgnLHBhZGRpbmdUb3A6bT8nMTBweCc6JzEycHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdDZXR0ZSBsZWN0dXJlIGF1dG9tYXRpcXVlIHJlcMOocmUgbGVzIHByZW1pZXJzIHBvaW50cyB2aXNpYmxlcyBkYW5zIGxlIGRvY3VtZW50LiBMZSBiaWxhbiBjb21wbGV0IGxlcyBleGFtaW5lIGF2ZWMgbGVzIHByw6ljaXNpb25zIHN1ciB2b3RyZSBzaXR1YXRpb24gZXQgcHLDqXBhcmUgbGVzIHNjw6luYXJpb3MgZXQgbGVzIGTDqW1hcmNoZXMgYWRhcHTDqXMgYXV4IMOpbMOpbWVudHMgcmV0ZW51cy4nKTpudWxsKSwKICAgICAgICAgICAgKFZFUlI/Y2FwdHVyZVZlcnI6KChBJiZBLmFkcmVzc2VfY29ubnVlKT9udWxsOmNhcHR1cmUpKSxhcmd1cyksCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmOGZhZmMnLHBhZGRpbmc6bT8nMThweCc6JzIycHggMjBweCAyNHB4Jyxib3JkZXJUb3A6bT8nMXB4IHNvbGlkICcrTElORTonbm9uZSd9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOm0/bnVsbDp7cG9zaXRpb246J3N0aWNreScsdG9wOicyNHB4J319LHBhbm5lYXUpKSksCgogICAgICAgIC8vIEVuY2FydCBwZXJzb25uYWxpc8OpIChzZXJ2ZXVyKSA6IGxlIGNhcyDDoCBlbGxlLCBqdXN0ZSBhcHLDqHMgbGEgc3ludGjDqHNlIGdyYXR1aXRlLCBhdmFudCBsZSBkw6l0YWlsIGxvbmcuCiAgICAgICAgKCFWRVJSJiZBLmVuY2FydCYmQS5lbmNhcnQucGhyYXNlP2VsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMjBweCAxOHB4IDIycHgnOicyNnB4IDM0cHggMjhweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzE2cHggMThweCc6JzIwcHggMjRweCd9fSwoQS5lbmNhcnQudGl0cmU/ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMHB4JyxmbGV4V3JhcDond3JhcCcsbWFyZ2luQm90dG9tOm0/JzhweCc6JzEwcHgnfX0sKEEuZW5jYXJ0LmFubmVlIT1udWxsP2VsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjJweCc6JzI2cHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjhlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSxTdHJpbmcoQS5lbmNhcnQuYW5uZWUpKTpudWxsKSxlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMXB4JzonMTEuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE0ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNjNDE3M2EnfX0sQS5lbmNhcnQudGl0cmUpKTpudWxsKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTdweCc6JzIwcHgnLGxpbmVIZWlnaHQ6MS40Mixmb250V2VpZ2h0OjUwMCxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LEEuZW5jYXJ0LnBocmFzZSkpKTpudWxsKSwKCiAgICAgICAgLy8gTm9tbWVyIGxhIG1hY2hpbmUgYXZhbnQgcXUnZWxsZSBuZSBmYXNzZSBuYcOudHJlIGxlIHNvdXDDp29uLgogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMjBweCAxOHB4IDIycHgnOicyOHB4IDM0cHggMzBweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxNnB4JzonNDBweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzhweCc6JzEwcHgnfX0sCiAgICAgICAgICAgIGtpY2soJ0NlIHF1aSBhIMOpdMOpIGZhaXQgZW4gdHJvaXMgc2Vjb25kZXMnKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkt9fSwnQ2V0dGUgcHJlbWnDqHJlIGxlY3R1cmUgZXN0IGF1dG9tYXRpcXVlLiBFbiB0cm9pcyBzZWNvbmRlcywgZWxsZSBhIHBhcmNvdXJ1IGNoYXF1ZSBhbm7DqWUgZHUgcmVsZXbDqSBldCBwYXNzw6kgbGEgY2FycmnDqHJlIGF1IGNyaWJsZSBkXHUyMDE5dW5lIHNvaXhhbnRhaW5lIGRlIGNvbnRyw7RsZXMuIEVsbGUgdm9pdCB0b3V0IGNlIHF1aSBzZSB2b2l0IHN1ciBsZSBkb2N1bWVudCBzZXVsLCBldCBjXHUyMDE5ZXN0IGV4YWN0ZW1lbnQgbMOgIHF1XHUyMDE5ZWxsZSBzXHUyMDE5YXJyw6p0ZVx1MDBhMDogdW4gcmVsZXbDqSBuZSBkaXQgcGFzIGNlIHF1ZSB2b3VzIGZhaXNpZXogY2VzIGFubsOpZXMtbMOgLiBDXHUyMDE5ZXN0IGNlIHF1ZSBsZSBiaWxhbiByZXRyYWl0ZSB2YSBjaGVyY2hlci4nKSksCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGdhcDptPycxMnB4JzonMTRweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCcsYm9yZGVyTGVmdDptPydub25lJzonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nTGVmdDptPycwJzonMjJweCcsYm9yZGVyVG9wOm0/JzJweCBzb2xpZCAnK05BVlk6J25vbmUnLHBhZGRpbmdUb3A6bT8nMTRweCc6JzAnfX0sCiAgICAgICAgICAgIChQSE9UTz9lbCgnaW1nJyx7c3JjOlBIT1RPLGFsdDp0aGlzLmZvdW5kZXIoKSxzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOm0/JzQ2cHgnOic1NHB4JyxoZWlnaHQ6bT8nNDZweCc6JzU0cHgnLGJvcmRlclJhZGl1czonNTAlJyxvYmplY3RGaXQ6J2NvdmVyJyxkaXNwbGF5OidibG9jayd9fSk6bnVsbCksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNnB4J319LAogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSwnTGUgYmlsYW4sIGNcdTIwMTllc3QgbW9uIHRyYXZhaWwuIEplIHJlcHJlbmRzIHZvdHJlIHJlbGV2w6kgYW5uw6llIHBhciBhbm7DqWUsIGplIHZvdXMgcG9zZSBsZXMgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbGUgZG9jdW1lbnQgbmUgcsOpcG9uZCBwYXMsIGplIGNvbXBhcmUgdm9zIGRhdGVzIGRlIGTDqXBhcnQgcG9zc2libGVzIGV0IGplIHByw6lwYXJlIGxlcyBkZW1hbmRlcyDDoCBhZHJlc3NlciDDoCB2b3MgY2Fpc3Nlcy4nKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS40NSxjb2xvcjpHUkVZfX0sdGhpcy5mb3VuZGVyKCkrJywgZm9uZGF0ZXVyIGRcdTIwMTlBRENGJykpKSkpOwogICAgfSkoKTsKCiAgICB2YXIgX2FwPXRoaXMuYXBlcmN1fHx7fTsKICAgIHZhciBfc2Nhbj0oX2FwLmRvY3VtZW50PT09J3VuIGRvY3VtZW50IHNjYW5uw6kgb3UgcGhvdG9ncmFwaGnDqScpOwogICAgdmFyIF9kb2NuPShfYXAuZXRhdD09PSdwYXNfdW5fcmVsZXZlJyk/X2FwLmRvY3VtZW50Om51bGw7CiAgICB2YXIgX2x1PShfYXAubHUpfHx7fTsKCiAgICAvLyBCLiBDJ2VzdCBsZSBib24gZG9jdW1lbnQsIGxhIGxlY3R1cmUgw6ljaG91ZS4gTGUgUERGIHNhbnMgdGV4dGUgYXJyaXZlIGljaS4KICAgIGNvbnN0IGlsbGlzaWJsZT1lbCgnZGl2Jyx7c3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxiYWNrZ3JvdW5kOicjZmZmZmZmJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzJweCAzNnB4IDM0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxOHB4J319LGVsKCdkaXYnLG51bGwsa2ljaygnT24gYSBiaWVuIHZvdHJlIHJlbGV2w6knLCcjYzQxNzNhJyksZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZScsbWFyZ2luVG9wOm0/JzhweCc6JzEwcHgnfX0sJ0xhIGxlY3R1cmUgZGUgY2UgcmVsZXbDqSBu4oCZZXN0IHBhcyBhc3NleiBmaWFibGUnKSxlbCgncCcse3N0eWxlOnttYXJnaW46bT8nOHB4IDAgMCc6JzEwcHggMCAwJyxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LCdMYSBsZWN0dXJlIGRlIGNlIHJlbGV2w6kgbuKAmWVzdCBwYXMgc3VmZmlzYW1tZW50IGZpYWJsZSBwb3VyIGFmZmljaGVyIHVuZSBwcsOpLWFuYWx5c2UuIEVzc2F5ZXogbGUgUERGIHTDqWzDqWNoYXJnw6kgZGVwdWlzIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZSwgc2FucyBsZSBzY2FubmVyIG5pIGxlIHBob3RvZ3JhcGhpZXIuIFZvdXMgcG91dmV6IGF1c3NpIGxhaXNzZXIgdm90cmUgYWRyZXNzZSBldCBvbiBsZSByZXByZW5kIMOgIGxhIG1haW4uJykpLHRoaXMuc3RhdGUubWFpbE9rP2VsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nMTZweCAxOHB4JzonMThweCAyMnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTZweCc6JzE3cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnQ+KAmWVzdCBub3TDqS4nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ09uIHJlcHJlbmQgdm90cmUgcmVsZXbDqSDDoCBsYSBtYWluIGV0IG9uIHZvdXMgw6ljcml0IMOgIGNldHRlIGFkcmVzc2UuJykpOmVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nMTZweCAxOHB4JzonMjBweCAyMnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMXB4JzonMTJweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1LjVweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDAsY29sb3I6TkFWWX19LCdMYWlzc2V6IHZvdHJlIGFkcmVzc2UnKSxlbCgnZm9ybScse29uU3VibWl0OmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIHY9ZS50YXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZTt0aGlzLnByZXZlbmlyKHYpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6JzEwcHgnfX0sZWwoJ2lucHV0Jyx7dHlwZTonZW1haWwnLHJlcXVpcmVkOnRydWUscGxhY2Vob2xkZXI6J1ZvdHJlIGFkcmVzc2UgZS1tYWlsJywnYXJpYS1sYWJlbCc6J1ZvdHJlIGFkcmVzc2UgZS1tYWlsJyxzdHlsZTp7ZmxleDptPycwIDAgYXV0byc6JzEgMSAwJyx3aWR0aDptPycxMDAlJzonYXV0bycsbWluV2lkdGg6MCxoZWlnaHQ6bT8nNTRweCc6JzU2cHgnLHBhZGRpbmc6JzAgMTVweCcsYm9yZGVyOicxcHggc29saWQgI2M5Y2ZkYScsYmFja2dyb3VuZDonI2ZmZmZmZicsZm9udEZhbWlseTonaW5oZXJpdCcsZm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsY29sb3I6SU5LLG91dGxpbmU6J25vbmUnLGJveFNpemluZzonYm9yZGVyLWJveCd9fSksZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmbz1lLmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgnZm9ybScpO3ZhciBpcD1mbyYmZm8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3RoaXMucHJldmVuaXIoaXA/aXAudmFsdWU6JycpO30sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJzt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsZmxleFNocmluazowLGhlaWdodDptPyc1NHB4JzonNTZweCcscGFkZGluZzonMCAyNnB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDB9fSwnTWUgcHLDqXZlbmlyJykpKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnVm91cyBhdmV6IHVuIGF1dHJlIFBERlx1MDBhMD8gJyxlbCgnbGFiZWwnLHtzdHlsZTp7Y29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMCxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUsY3Vyc29yOidwb2ludGVyJ319LCdSZWTDqXBvc2V6LWxlJyxlbCgnaW5wdXQnLHt0eXBlOidmaWxlJyxhY2NlcHQ6J2FwcGxpY2F0aW9uL3BkZicsc3R5bGU6e2Rpc3BsYXk6J25vbmUnfSxvbkNoYW5nZTplPT50aGlzLmxpcmVSZWxldmUoZS50YXJnZXQuZmlsZXMmJmUudGFyZ2V0LmZpbGVzWzBdKX0pKSwnLicpKTsKCiAgICAgICAgLy8gQy4gVHJvaXMgY2FzIGRpc3RpbmN0cyBzb3VzIGxlIG1cdTAwZWFtZSBcdTAwZTl0YXQuIE9uIG5lIGRpdCBxdWUgY2UgcXVpIGVzdCB2cmFpLgogICAgdmFyIF9tc2c9dGhpcy5zdGF0ZS5lY2hlY01zZ3x8Jyc7CiAgICB2YXIgX2x1T2s9ISEoX2x1LmRlYnV0JiZfbHUuZmluKTsKICAgIHZhciBfZmljaGllcj0oX21zZz09PSdzYW5zX2ZpY2hpZXInfHxfbXNnPT09J3Ryb3BfZ3Jvcyd8fF9tc2c9PT0ndmlkZScpOwogICAgdmFyIF9lS2ljaywgX2VUaXRyZSwgX2VDb3JwcywgX2VTdWl0ZSwgX2VCb3V0b247CiAgICBpZihfbHVPayl7CiAgICAgIF9lS2ljaz0nTGUgcHJvYmxcdTAwZThtZSB2aWVudCBkZSBtb2knOwogICAgICBfZVRpdHJlPSdWb3RyZSByZWxldlx1MDBlOSBhIFx1MDBlOXRcdTAwZTkgbHUuIENcdTIwMTllc3QgbGEgc3VpdGUgcXVpIHNcdTIwMTllc3QgYXJyXHUwMGVhdFx1MDBlOWUnOwogICAgICBfZUNvcnBzPSdKXHUyMDE5YWkgYmllbiBsdSB2b3RyZSBjYXJyaVx1MDBlOHJlLCBkZSAnK19sdS5kZWJ1dCsnIFx1MDBlMCAnK19sdS5maW4rJy4gQ1x1MjAxOWVzdCBsXHUyMDE5XHUwMGU5dGFwZSBkXHUyMDE5YXByXHUwMGU4cywgY2VsbGUgcXVpIG1ldCB0b3V0IGVuIGZvcm1lLCBxdWkgblx1MjAxOWEgcGFzIGFib3V0aS4gTGUgcHJvYmxcdTAwZThtZSB2aWVudCBkZSBtb2kuJzsKICAgICAgX2VTdWl0ZT0nUlx1MDBlOWVzc2F5ZXogZGFucyBxdWVscXVlcyBtaW51dGVzLCBvdSBsYWlzc2V6LW1vaSB2b3RyZSBhZHJlc3NlIGV0IGplIHZvdXMgcHJcdTAwZTl2aWVucyBkXHUwMGU4cyBxdWUgY1x1MjAxOWVzdCByXHUwMGU5Z2xcdTAwZTkuJzsKICAgICAgX2VCb3V0b249J1JcdTAwZTllc3NheWVyJzsKICAgIH0gZWxzZSBpZihfbXNnPT09J3ZpZGUnKXsKICAgICAgX2VLaWNrPSdMZSBmaWNoaWVyIG5cdTIwMTllc3QgcGFzIHBhc3NcdTAwZTknOwogICAgICBfZVRpdHJlPSdWb3RyZSBmaWNoaWVyIGVzdCB2aWRlJzsKICAgICAgX2VDb3Jwcz0nSWwgblx1MjAxOWEgcGFzIGRcdTAwZmIgc2UgdFx1MDBlOWxcdTAwZTljaGFyZ2VyIGNvcnJlY3RlbWVudC4nOwogICAgICBfZVN1aXRlPSdSZXByZW5leiBsZSB0XHUwMGU5bFx1MDBlOWNoYXJnZW1lbnQgc3VyIGluZm8tcmV0cmFpdGUuZnIgZXQgcmVkXHUwMGU5cG9zZXotbGUuJzsKICAgICAgX2VCb3V0b249J0Nob2lzaXIgdW4gYXV0cmUgZmljaGllcic7CiAgICB9IGVsc2UgaWYoX2ZpY2hpZXIpewogICAgICBfZUtpY2s9J0xlIGZpY2hpZXIgblx1MjAxOWVzdCBwYXMgcGFzc1x1MDBlOSc7CiAgICAgIF9lVGl0cmU9KF9tc2c9PT0ndHJvcF9ncm9zJyk/J0NlIGZpY2hpZXIgZXN0IHRyb3AgbG91cmQgcG91ciBcdTAwZWF0cmUgbHUnOidBdWN1biBmaWNoaWVyIG5cdTIwMTllc3QgYXJyaXZcdTAwZTknOwogICAgICBfZUNvcnBzPShfbXNnPT09J3Ryb3BfZ3JvcycpPydDZSBmaWNoaWVyIGRcdTAwZTlwYXNzZSBsYSB0YWlsbGUgYWNjZXB0XHUwMGU5ZS4gTGUgcmVsZXZcdTAwZTkgdFx1MDBlOWxcdTAwZTljaGFyZ1x1MDBlOSBkZXB1aXMgdm90cmUgY29tcHRlIHJldHJhaXRlIGZhaXQgZW4gZ1x1MDBlOW5cdTAwZTlyYWwgbW9pbnMgZGUgMlx1MDBhME1vXHUwMGEwOiBjXHUyMDE5ZXN0IGNlbHVpLWxcdTAwZTAgcXVcdTIwMTlpbCBmYXV0IGRcdTAwZTlwb3Nlciwgc2FucyBsZSBzY2FubmVyIG5pIGxlIHBob3RvZ3JhcGhpZXIuJzonTGUgZFx1MDBlOXBcdTAwZjR0IHNcdTIwMTllc3QgaW50ZXJyb21wdSBhdmFudCBxdWUgbGUgZmljaGllciBuZSBwYXJ0ZS4gUmllbiBuXHUyMDE5YSBcdTAwZTl0XHUwMGU5IGx1LCBldCB2b3VzIHBvdXZleiBsZSByZWRcdTAwZTlwb3NlciB0b3V0IGRlIHN1aXRlLic7CiAgICAgIF9lU3VpdGU9J1JlcHJlbmV6IGxlIFBERiB0ZWwgcXVlIHZvdHJlIGNhaXNzZSB2b3VzIGxcdTIwMTlhIHJlbWlzLCBldCByZWRcdTAwZTlwb3Nlei1sZS4nOwogICAgICBfZUJvdXRvbj0nQ2hvaXNpciB1biBhdXRyZSBmaWNoaWVyJzsKICAgIH0gZWxzZSB7CiAgICAgIF9lS2ljaz0nXHUwMGM3YSB2aWVudCBkZSBtb2knOwogICAgICBfZVRpdHJlPSdMYSBsZWN0dXJlIG5cdTIwMTlhIHBhcyBwdSBhYm91dGlyIHBvdXIgbGUgbW9tZW50JzsKICAgICAgX2VDb3Jwcz0oX21zZz09PSd0cm9wX2RlX21vbmRlJ3x8X21zZz09PSd0cm9wX2RlX2RlbWFuZGVzJyk/J0lsIHkgYSBiZWF1Y291cCBkZSBkXHUwMGU5cFx1MDBmNHRzIGVuIGNlIG1vbWVudCBldCBsYSBsZWN0dXJlIG5cdTIwMTlhIHBhcyBwdSBzZSBmYWlyZS4gUmllbiBcdTAwZTAgdm9pciBhdmVjIHZvdHJlIHJlbGV2XHUwMGU5XHUwMGEwOiBpbCBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBsdSwgZXQgdm90cmUgZmljaGllciBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBjb25zZXJ2XHUwMGU5Lic6J0xhIGNvbm5leGlvbiBzXHUyMDE5ZXN0IGludGVycm9tcHVlIGF2YW50IGxhIGZpbi4gUmllbiBcdTAwZTAgdm9pciBhdmVjIHZvdHJlIHJlbGV2XHUwMGU5XHUwMGEwOiBpbCBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBsdSwgZXQgdm90cmUgZmljaGllciBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBjb25zZXJ2XHUwMGU5Lic7CiAgICAgIF9lU3VpdGU9J1JcdTAwZTllc3NheWV6IGRhbnMgcXVlbHF1ZXMgbWludXRlcywgb3UgbGFpc3Nlei1tb2kgdm90cmUgYWRyZXNzZSBldCBqZSB2b3VzIHByXHUwMGU5dmllbnMgZFx1MDBlOHMgcXVlIGNcdTIwMTllc3Qgclx1MDBlOWdsXHUwMGU5Lic7CiAgICAgIF9lQm91dG9uPSdSXHUwMGU5ZXNzYXllcic7CiAgICB9CgogICAgdmFyIF9zb2xvPShfZmljaGllcnx8X21zZz09PSdwZGZfaWxsaXNpYmxlJ3x8X21zZz09PSdpbmNpZGVudCcpOyB2YXIgX2luY2lkZW50PShfbXNnPT09J2luY2lkZW50Jyk7IGlmKF9tc2c9PT0ncGRmX2lsbGlzaWJsZScpeyBfZUtpY2s9J0xlIGZpY2hpZXIgbuKAmWVzdCBwYXMgcGFzc8OpJzsgX2VUaXRyZT0nQ2UgUERGIG7igJlhIHBhcyBwdSDDqnRyZSBvdXZlcnQnOyBfZUNvcnBzPSdFc3NheWV6IHVuZSB2ZXJzaW9uIHJldMOpbMOpY2hhcmfDqWUgZGVwdWlzIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZS4nOyBfZVN1aXRlPScnOyBfZUJvdXRvbj0nQ2hvaXNpciB1biBhdXRyZSBmaWNoaWVyJzsgfSBpZihfbXNnPT09J2luY2lkZW50Jyl7IF9lS2ljaz0nTGUgcHJvYmzDqG1lIHZpZW50IGRlIG1vaSc7IF9lVGl0cmU9J0xhIGxlY3R1cmUgc+KAmWVzdCBhcnLDqnTDqWUgZGUgbm90cmUgY8O0dMOpJzsgX2VDb3Jwcz0nQ2UgbuKAmWVzdCBwYXMgdm90cmUgZG9jdW1lbnQuIFVuIGluY2lkZW50IGNoZXogbm91cyBhIGludGVycm9tcHUgbGEgbGVjdHVyZSwgZXQgdm90cmUgZmljaGllciBu4oCZYSBwYXMgw6l0w6kgY29uc2VydsOpLic7IF9lU3VpdGU9J09uIGxlIHJlcHJlbmQgw6AgbGEgbWFpbi4gTGFpc3NleiB2b3RyZSBhZHJlc3NlIGV0IG9uIHZvdXMgw6ljcml0IGTDqHMgcXVlIGPigJllc3QgcsOpZ2zDqS4nOyBfZUJvdXRvbj0nUsOpZXNzYXllcic7IH0gY29uc3QgZWNoZWM9ZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6JyNmZmZmZmYnLHBhZGRpbmc6bT8nMjJweCAyMHB4IDI0cHgnOiczNHB4IDM4cHggMzZweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczoobXx8X3NvbG8pPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMThweCc6JzAgNDZweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnLG1heFdpZHRoOl9zb2xvPyc3MGNoJzonbm9uZSd9fSwKICAgICAgICBraWNrKF9lS2ljayksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIzcHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDIyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sX2VUaXRyZSksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0sX2VDb3JwcyksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sX2VTdWl0ZSksCiAgICAgICAgKF9pbmNpZGVudD9udWxsOmVsKCdsYWJlbCcse29uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7fSxzdHlsZTp7YWxpZ25TZWxmOidmbGV4LXN0YXJ0JyxtYXJnaW5Ub3A6JzJweCcsZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOm0/JzAgMjJweCc6JzAgMjhweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NzAwLGN1cnNvcjoncG9pbnRlcicsdHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSd9fSwKICAgICAgICAgIF9lQm91dG9uLAogICAgICAgICAgZWwoJ2lucHV0Jyx7dHlwZTonZmlsZScsYWNjZXB0OidhcHBsaWNhdGlvbi9wZGYnLHN0eWxlOntkaXNwbGF5Oidub25lJ30sb25DaGFuZ2U6ZT0+dGhpcy5saXJlUmVsZXZlKGUudGFyZ2V0LmZpbGVzJiZlLnRhcmdldC5maWxlc1swXSl9KSkpKSwKICAgICAgX2ZpY2hpZXI/bnVsbDplbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxM3B4JyxiYWNrZ3JvdW5kOlBBUEVSLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE4cHgnOicyMnB4IDI0cHgnfX0sCiAgICAgICAgdGhpcy5zdGF0ZS5tYWlsT2sKICAgICAgICAgID8gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LAogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnQ1x1MjAxOWVzdCBub3TDqS4nKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0plIHZvdXMgw6ljcmlzIGTDqHMgcXVlIGNcdTIwMTllc3QgcsOpZ2zDqS4nKSkKICAgICAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0xhaXNzZXotbW9pIHZvdHJlIGFkcmVzc2UnKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0plIHZvdXMgcHLDqXZpZW5zIGTDqHMgcXVlIGNcdTIwMTllc3QgcsOpZ2zDqSwgZXQgcmllbiBkXHUyMDE5YXV0cmUuJyksCiAgICAgICAgICAgICAgZWwoJ2Zvcm0nLHtvblN1Ym1pdDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuY2FwdHVyZU1haWwoZS50YXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSk7fSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGZsZXhXcmFwOid3cmFwJyxnYXA6JzEwcHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDE4MHB4Jyx3aWR0aDptPycxMDAlJzonYXV0bycsbWluV2lkdGg6MCxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLG1pbkhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgICAgIGVsKCdidXR0b24nLHt0eXBlOididXR0b24nLG9uQ2xpY2s6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgZj1lLmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgnZm9ybScpO3ZhciBpbnA9ZiYmZi5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJyk7dGhpcy5jYXB0dXJlTWFpbChpbnA/aW5wLnZhbHVlOicnKTt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsZmxleFNocmluazowLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLHBhZGRpbmc6JzAgMjBweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NzAwfX0sJ01lIHByw6l2ZW5pcicpKSkpKTsKCiAgICAvLyBBLiBMZSBkb2N1bWVudCBkw6lwb3PDqSBuJ2VzdCBwYXMgdW4gcmVsZXbDqSBkZSBjYXJyacOocmUuCiAgICBjb25zdCBwYXNSZWxldmU9ZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6JyNmZmZmZmYnLHBhZGRpbmc6bT8nMjJweCAyMHB4IDI0cHgnOiczNHB4IDM4cHggMzZweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMThweCc6JzAgNDZweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sCiAgICAgICAga2ljaygnQ2Ugblx1MjAxOWVzdCBwYXMgbGUgYm9uIGRvY3VtZW50JyksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIzcHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDIyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ0NlIGRvY3VtZW50IG5cdTIwMTlhIHBhcyDDqXTDqSByZWNvbm51IGNvbW1lIHVuIHJlbGV2w6kgZGUgY2FycmnDqHJlJyksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0sX2RvY24/KCdWb3VzIGF2ZXogZMOpcG9zw6kgJytfZG9jbisnLiBMZXMgZGV1eCBkb2N1bWVudHMgblx1MjAxOW9udCByaWVuIMOgIHZvaXIsIGV0IGxhIGNvbmZ1c2lvbiBlc3QgYmFuYWxlLicpOidMZSBkb2N1bWVudCBkw6lwb3PDqSBuXHUyMDE5ZXN0IHBhcyB1biByZWxldsOpIGRlIGNhcnJpw6hyZS4gTGEgY29uZnVzaW9uIGVzdCBiYW5hbGUuJyksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sJ0xlIHJlbGV2w6kgZGUgY2FycmnDqHJlIGxpc3RlIHRvdXRlcyB2b3MgYW5uw6llcyBkZSB0cmF2YWlsIGRlcHVpcyBsYSBwcmVtacOocmUsIGF2ZWMgbGVzIHRyaW1lc3RyZXMgcmV0ZW51cyBwb3VyIGNoYWN1bmUuIElsIGZhaXQgcGx1c2lldXJzIHBhZ2VzLiBJbCBuZSB2aWVudCBwYXMgZGUgdm90cmUgZW1wbG95ZXVyIG1haXMgZGUgdm90cmUgY29tcHRlIHJldHJhaXRlLCBldCBpbCBlc3QgZ3JhdHVpdC4nKSwKICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdWw6lyaWZpZXogbFx1MjAxOWV4ZW1wbGUgY2ktZGVzc291cy4gTGUgZG9jdW1lbnQgcXVlIHZvdXMgYXZleiBkw6lwb3PDqSBlc3QgZWZmYWPDqS4nKSwKICAgICAgICBlbCgnbGFiZWwnLHtvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO30sc3R5bGU6e2FsaWduU2VsZjonZmxleC1zdGFydCcsbWFyZ2luVG9wOicycHgnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzptPycwIDIycHgnOicwIDI4cHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMnB4IHNvbGlkICcrTkFWWSxjb2xvcjpOQVZZLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NzAwLGN1cnNvcjoncG9pbnRlcicsdHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSd9fSwKICAgICAgICAgICdEw6lwb3NlciBsZSBib24gZG9jdW1lbnQnLAogICAgICAgICAgZWwoJ2lucHV0Jyx7dHlwZTonZmlsZScsYWNjZXB0OidhcHBsaWNhdGlvbi9wZGYnLHN0eWxlOntkaXNwbGF5Oidub25lJ30sb25DaGFuZ2U6ZT0+dGhpcy5saXJlUmVsZXZlKGUudGFyZ2V0LmZpbGVzJiZlLnRhcmdldC5maWxlc1swXSl9KSkpLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxM3B4JyxiYWNrZ3JvdW5kOlBBUEVSLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE4cHgnOicyMnB4IDI0cHgnfX0sCiAgICAgICAgdGhpcy5zdGF0ZS5tYWlsT2sKICAgICAgICAgID8gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LAogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnQ1x1MjAxOWVzdCBwYXJ0aS4nKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0plIHZpZW5zIGRlIHZvdXMgZW52b3llciBsYSBtYXJjaGUgw6Agc3VpdnJlLiBJbCB5IGVuIGEgcG91ciAyIG1pbnV0ZXMuJykpCiAgICAgICAgICA6IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdKZSB2b3VzIGVudm9pZSBsYSBtYXJjaGUgw6Agc3VpdnJlJyksCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdQb3VyIHLDqWN1cMOpcmVyIHZvdHJlIHJlbGV2w6kgc3VyIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZS4gSWwgeSBlbiBhIHBvdXIgMiBtaW51dGVzLicpLAogICAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt0aGlzLmNhcHR1cmVNYWlsKGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxmbGV4V3JhcDond3JhcCcsZ2FwOicxMHB4J319LAogICAgICAgICAgICAgICAgZWwoJ2lucHV0Jyx7dHlwZTonZW1haWwnLHJlcXVpcmVkOnRydWUscGxhY2Vob2xkZXI6J1ZvdHJlIGFkcmVzc2UgZS1tYWlsJywnYXJpYS1sYWJlbCc6J1ZvdHJlIGFkcmVzc2UgZS1tYWlsJyxzdHlsZTp7ZmxleDptPycwIDAgYXV0byc6JzEgMSAxODBweCcsd2lkdGg6bT8nMTAwJSc6J2F1dG8nLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxtaW5IZWlnaHQ6bT8nNTJweCc6JzU0cHgnLHBhZGRpbmc6JzAgMTRweCcsYm9yZGVyOicxcHggc29saWQgI2M5Y2ZkYScsYmFja2dyb3VuZDonI2ZmZmZmZicsZm9udEZhbWlseTonaW5oZXJpdCcsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsY29sb3I6SU5LLG91dGxpbmU6J25vbmUnLGJveFNpemluZzonYm9yZGVyLWJveCd9fSksCiAgICAgICAgICAgICAgICBlbCgnYnV0dG9uJyx7dHlwZTonYnV0dG9uJyxvbkNsaWNrOmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGY9ZS5jdXJyZW50VGFyZ2V0LmNsb3Nlc3QoJ2Zvcm0nKTt2YXIgaW5wPWYmJmYucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3RoaXMuY2FwdHVyZU1haWwoaW5wP2lucC52YWx1ZTonJyk7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZsZXhTaHJpbms6MCx3aWR0aDptPycxMDAlJzonYXV0bycsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIwcHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMH19LCdSZWNldm9pciBsYSBtYXJjaGUgw6Agc3VpdnJlJykpKSkpOwoKICAgIC8vIC0tLS0gTGVzIDYgcXVlc3Rpb25zLCBwb3VyIGNlbGxlcyBxdWkgbidvbnQgcGFzIGxldXIgcmVsZXbDqSBzb3VzIGxhIG1haW4gLS0tLQogICAgY29uc3QgQ1VSPShuZXcgRGF0ZSgpKS5nZXRGdWxsWWVhcigpOyBjb25zdCBRUz1bCiAgICAgIHtpZDonYW5uZWVfbmFpc3NhbmNlJyxxOidRdWVsbGUgZXN0IHZvdHJlIGFubsOpZSBkZSBuYWlzc2FuY2UgPycscG91cnF1b2k6J0VsbGUgYWlkZSDDoCBzaXR1ZXIgbGVzIHLDqGdsZXMgZ8OpbsOpcmFsZXMgZGUgZMOpcGFydCDDoCBsYSByZXRyYWl0ZS4nLHR5cGU6J2FubmVlJyxtaW46MTkzNSxtYXg6Q1VSLHBoOicxOTYzJ30se2lkOidzZXhlJyxxOidWb3VzIMOqdGVzIDonLHBvdXJxdW9pOidDZXR0ZSByw6lwb25zZSBhaWRlIMOgIGFkYXB0ZXIgbGVzIGluZm9ybWF0aW9ucyBzdXIgbGVzIGRyb2l0cyBsacOpcyBhdXggZW5mYW50cy4nLHR5cGU6J2Nob2l4JyxvcHRpb25zOlsnVW5lIGZlbW1lJywnVW4gaG9tbWUnXX0sCiAgICAgIAogICAgICB7aWQ6J2FubmVlX2RlYnV0JyxxOidFbiBxdWVsbGUgYW5uw6llIGF2ZXotdm91cyBjb21tZW5jw6kgw6AgdHJhdmFpbGxlciA/Jyxwb3VycXVvaTonUGVuc2V6IGF1c3NpIMOgIHZvcyBwcmVtaWVycyBlbXBsb2lzIG91IMOgIHZvdHJlIGFwcHJlbnRpc3NhZ2UuIFVuZSBhbm7DqWUgYXBwcm94aW1hdGl2ZSBzdWZmaXQgcG91ciBjZXR0ZSBwcmVtacOocmUgb3JpZW50YXRpb24uJyx0eXBlOidhbm5lZScsbWluOjE5NDUsbWF4OkNVUixwaDonMTk5MCd9LAogICAgICB7aWQ6J2VuZmFudHMnLHE6J0NvbWJpZW4gZOKAmWVuZmFudHMgYXZlei12b3VzIGV1cyBvdSDDqWxldsOpcyA/Jyxwb3VycXVvaTonSW5kaXF1ZXogMCBzaSB2b3VzIG7igJllbiBhdmV6IHBhcy4gU2kgdm91cyBow6lzaXRleiBzdXIgbGVzIGVuZmFudHMgw6AgY29tcHRlciwgdm91cyBwb3V2ZXogcGFzc2VyIGNldHRlIHF1ZXN0aW9uLicsdHlwZTonbm9tYnJlJyxtaW46MCxtYXg6MjAscGg6Jyd9LAogICAgICB7aWQ6J3RlbXBzX3BhcnRpZWwnLHE6J1RyYXZhaWxsZXotdm91cywgb3UgYXZlei12b3VzIGTDqWrDoCB0cmF2YWlsbMOpLCDDoCB0ZW1wcyBwYXJ0aWVsID8nLHBvdXJxdW9pOidDZXR0ZSByw6lwb25zZSBhaWRlIMOgIGNpYmxlciBsZXMgcMOpcmlvZGVzIGRlIHZvdHJlIGNhcnJpw6hyZSDDoCBleGFtaW5lci4nLHR5cGU6J2Nob2l4JyxvcHRpb25zOlsnT3VpJywnTm9uJ119LAogICAgICB7aWQ6J3BlcmlvZGVzJyxxOidMZXNxdWVsbGVzIGRlIGNlcyBzaXR1YXRpb25zIGF2ZXotdm91cyBjb25udWVzID8nLHBvdXJxdW9pOidWb3VzIHBvdXZleiBjb2NoZXIgcGx1c2lldXJzIHLDqXBvbnNlcy4gRWxsZXMgbm91cyBhaWRlbnQgw6AgY2libGVyIGxlcyBzdWpldHMgw6AgZXhhbWluZXIuJyx0eXBlOidjYXNlcycsb3B0aW9uczpbWydjaG9tYWdlJywnQ2jDtG1hZ2UnXSxbJ21hbGFkaWUnLCdNYWxhZGllIG91IGFjY2lkZW50J10sWydpbmRlcGVuZGFudCcsJ0FjdGl2aXTDqSBpbmTDqXBlbmRhbnRlJ10sWydpbnRlcmltJywnSW50w6lyaW0sIG1pc3Npb25zIGNvdXJ0ZXMnXSxbJ2V0cmFuZ2VyJywnVHJhdmFpbCDDoCBs4oCZw6l0cmFuZ2VyJ10sWydzZXJ2aWNlJywnU2VydmljZSBtaWxpdGFpcmUnXSxbJ2V0dWRlcycsJ8OJdHVkZXMgc3Vww6lyaWV1cmVzJ10sWydhdWN1bmUnLCdBdWN1bmUgZGUgY2VzIHNpdHVhdGlvbnMnXV19CiAgICBdOwogICAgY29uc3QgcWk9TWF0aC5taW4odGhpcy5zdGF0ZS5xSW5kZXh8fDAsUVMubGVuZ3RoKTsKICAgIGNvbnN0IHJlcD10aGlzLnN0YXRlLnJlcG9uc2VzfHx7fTsKICAgIGNvbnN0IHJlcG9uZHJlPShpZCx2YWwpPT57IHZhciByPU9iamVjdC5hc3NpZ24oe30scmVwKTsgcltpZF09dmFsOyB2YXIgbj1xaSsxOwogICAgICB0cnl7IG10cmFjaygncXVlc3Rpb25fcmVwb25kdWUnLHtyYW5nOnFpKzF9KTsgfWNhdGNoKGUpe30KICAgICAgdGhpcy5zZXRTdGF0ZSh7cmVwb25zZXM6cixxSW5kZXg6bixxRXJyOicnfSk7CiAgICAgIGlmKG4+PVFTLmxlbmd0aCl7IHRyeXsgbXRyYWNrKCdxdWVzdGlvbnNfdGVybWluZWVzJyx7fSk7IH1jYXRjaChlKXt9IHRoaXMuc291bWV0dHJlUXVlc3Rpb25zKHIpOyB9CiAgICAgIHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH07IGNvbnN0IHBhc3Nlcj0oaWQpPT57IHZhciBuPXFpKzE7IHRyeXsgbXRyYWNrKCdxdWVzdGlvbl9wYXNzZWUnLHtyYW5nOnFpKzF9KTsgfWNhdGNoKGUpe30gdGhpcy5zZXRTdGF0ZSh7cUluZGV4Om4scUVycjonJ30pOyBpZihuPj1RUy5sZW5ndGgpeyB0aGlzLnNvdW1ldHRyZVF1ZXN0aW9ucyhyZXApOyB9IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH07CgogICAgY29uc3QgUT1RU1txaV07CiAgICBjb25zdCBlY3JhblF1ZXN0aW9uPVE/Y2FydGUoWyAocWk9PT0wP2VsKCdkaXYnLHtrZXk6J3QnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LCBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjBweCc6JzIzcHgnLGxpbmVIZWlnaHQ6MS4xOCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMThlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnTGVzIHBvaW50cyDDoCBleGFtaW5lciBkYW5zIHZvdHJlIHBhcmNvdXJzJyksIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnU2l4IHF1ZXN0aW9ucyBwb3VyIHNpdHVlciBsZXMgc3VqZXRzIMOgIHbDqXJpZmllciBkYW5zIHZvdHJlIGNhcnJpw6hyZS4gVm91cyBwb3V2ZXogcGFzc2VyIHVuZSBxdWVzdGlvbiBzaSB2b3VzIGjDqXNpdGV6LicpKTpudWxsKSwKICAgICAgZWwoJ2Rpdicse2tleToncCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMnB4J319LAogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpHUkVZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSwnUXVlc3Rpb24gJysocWkrMSkrJyBzdXIgJytRUy5sZW5ndGgpLAogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXg6MSxoZWlnaHQ6JzNweCcsYmFja2dyb3VuZDonI2U5ZWNmMyd9fSxlbCgnc3Bhbicse3N0eWxlOntkaXNwbGF5OidibG9jaycsaGVpZ2h0OicxMDAlJyx3aWR0aDpNYXRoLnJvdW5kKHFpL1FTLmxlbmd0aCoxMDApKyclJyxiYWNrZ3JvdW5kOlJFRCx0cmFuc2l0aW9uOid3aWR0aCAuMjVzIGVhc2UnfX0pKSksCiAgICAgIGVsKCdkaXYnLHtrZXk6J3EnLHN0eWxlOntmb250U2l6ZTptPycxOXB4JzonMjFweCcsbGluZUhlaWdodDoxLjI1LGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LFEucSksCiAgICAgIGVsKCdkaXYnLHtrZXk6J3cnLHN0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LFEucG91cnF1b2kpLAogICAgICAoUS50eXBlPT09J2FubmVlJ3x8US50eXBlPT09J25vbWJyZScpCiAgICAgICAgPyBlbCgnZm9ybScse2tleTonZicsb25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgdj1lLnRhcmdldC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnZhbHVlO2lmKHY9PT0nJ3x8dj09bnVsbCl7cmV0dXJuO312YXIgbj1wYXJzZUludCh2LDEwKTtpZihRLnR5cGU9PT0nYW5uZWUnKXtpZihuPFEubWlufHxuPlEubWF4KXt0aGlzLnNldFN0YXRlKHtxRXJyOidDZXR0ZSBhbm7DqWUgc29ydCBkdSBww6lyaW3DqHRyZSBhdHRlbmR1LiBWb3VzIHBvdXZleiBjb3JyaWdlciwgb3UgcGFzc2VyIGNldHRlIHF1ZXN0aW9uLid9KTtyZXR1cm47fWlmKFEuaWQ9PT0nYW5uZWVfZGVidXQnJiZyZXAuYW5uZWVfbmFpc3NhbmNlJiZuPD1wYXJzZUludChyZXAuYW5uZWVfbmFpc3NhbmNlLDEwKSl7dGhpcy5zZXRTdGF0ZSh7cUVycjonQ2V0dGUgYW5uw6llIGRlIGTDqWJ1dCBlc3QgYW50w6lyaWV1cmUgb3Ugw6lnYWxlIMOgIHZvdHJlIGFubsOpZSBkZSBuYWlzc2FuY2UuIENvcnJpZ2V6LCBvdSBwYXNzZXouJ30pO3JldHVybjt9fXRoaXMuc2V0U3RhdGUoe3FFcnI6Jyd9KTtyZXBvbmRyZShRLmlkLHYpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6JzEwcHgnLG1hcmdpblRvcDptPycycHgnOic0cHgnfX0sCiAgICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J251bWJlcicsbWluOlN0cmluZyhRLm1pbiksbWF4OlN0cmluZyhRLm1heCkscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjpRLnBofHwnJywnYXJpYS1sYWJlbCc6US5xLHN0eWxlOntmbGV4OicxIDEgMTQwcHgnLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzU2cHgnOic1OHB4JyxwYWRkaW5nOicwIDE1cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE3cHgnOicxOHB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J3N1Ym1pdCcsc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzU2cHgnOic1OHB4JyxwYWRkaW5nOicwIDI2cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNnB4JzonMTdweCcsZm9udFdlaWdodDo3MDB9fSwnQ29udGludWVyJykpCiAgICAgICAgOiBRLnR5cGU9PT0nY2FzZXMnCiAgICAgICAgPyBlbCgnZGl2Jyx7a2V5OidjJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzhweCcsbWFyZ2luVG9wOm0/JzJweCc6JzRweCd9fSwKICAgICAgICAgICAgUS5vcHRpb25zLm1hcCgobyxpMik9Pnt2YXIgc2VsPShyZXBbUS5pZF18fFtdKS5pbmRleE9mKG9bMF0pPi0xO3JldHVybiBlbCgnYnV0dG9uJyx7a2V5OmkyLG9uQ2xpY2s6KCk9Pnt2YXIgYXJyPShyZXBbUS5pZF18fFtdKS5zbGljZSgpO3ZhciBrPWFyci5pbmRleE9mKG9bMF0pO2lmKGs+LTEpe2Fyci5zcGxpY2UoaywxKTt9ZWxzZXtpZihvWzBdPT09J2F1Y3VuZScpe2Fycj1bJ2F1Y3VuZSddO31lbHNle2Fyci5wdXNoKG9bMF0pO2Fycj1hcnIuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4IT09J2F1Y3VuZSc7fSk7fX12YXIgcj1PYmplY3QuYXNzaWduKHt9LHJlcCk7cltRLmlkXT1hcnI7dGhpcy5zZXRTdGF0ZSh7cmVwb25zZXM6cixxRXJyOicnfSk7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0Jyx0ZXh0QWxpZ246J2xlZnQnLHdpZHRoOicxMDAlJyxtaW5IZWlnaHQ6bT8nNDhweCc6JzUwcHgnLHBhZGRpbmc6bT8nMCAxNHB4JzonMCAxOHB4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTJweCcsYmFja2dyb3VuZDpzZWw/JyNlZWYyZmInOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnKyhzZWw/TkFWWTonI2M5Y2ZkYScpLGNvbG9yOk5BVlksZm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo2MDAsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMTVzIGVhc2UsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOicxOXB4JyxoZWlnaHQ6JzE5cHgnLGJvcmRlclJhZGl1czonNHB4Jyxib3JkZXI6JzJweCBzb2xpZCAnKyhzZWw/TkFWWTonI2M5Y2ZkYScpLGJhY2tncm91bmQ6c2VsP05BVlk6JyNmZmZmZmYnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOicxMnB4Jyxmb250V2VpZ2h0OjgwMH19LHNlbD8n4pyTJzonJyksb1sxXSk7fSksCiAgICAgICAgICAgIGVsKCdidXR0b24nLHtrZXk6J2N0JyxvbkNsaWNrOigpPT57dmFyIHNlbD0ocmVwW1EuaWRdfHxbXSk7aWYoc2VsLmxlbmd0aD09PTApe3RoaXMuc2V0U3RhdGUoe3FFcnI6J0NvY2hleiBhdSBtb2lucyB1bmUgc2l0dWF0aW9uLCBvdSBjaG9pc2lzc2V6IMKrIEF1Y3VuZSBkZSBjZXMgc2l0dWF0aW9ucyDCuywgb3UgcGFzc2V6Lid9KTtyZXR1cm47fXJlcG9uZHJlKFEuaWQsc2VsKTt9LHN0eWxlOnttYXJnaW5Ub3A6JzRweCcsYXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGhlaWdodDptPyc1NHB4JzonNTZweCcscGFkZGluZzonMCAyNnB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDB9fSwnVm9pciBsZXMgcG9pbnRzIMOgIGV4YW1pbmVyJykpCiAgICAgICAgOiBlbCgnZGl2Jyx7a2V5OidvJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzlweCcsbWFyZ2luVG9wOm0/JzJweCc6JzRweCd9fSwKICAgICAgICAgICAgUS5vcHRpb25zLm1hcCgobyxpMik9PmVsKCdidXR0b24nLHtrZXk6aTIsb25DbGljazooKT0+cmVwb25kcmUoUS5pZCxvKSxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZWVmMmZiJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9TkFWWTt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNmZmZmZmYnO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0nI2M5Y2ZkYSc7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0Jyx0ZXh0QWxpZ246J2xlZnQnLHdpZHRoOicxMDAlJyxtaW5IZWlnaHQ6bT8nNTRweCc6JzU2cHgnLHBhZGRpbmc6bT8nMCAxNnB4JzonMCAyMHB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxjb2xvcjpOQVZZLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NjAwLHRyYW5zaXRpb246J2JhY2tncm91bmQgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlJ319LG8pKSksCiAgICAgICh0aGlzLnN0YXRlLnFFcnI/ZWwoJ2Rpdicse2tleTonZScsc3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOicjYzQxNzNhJ319LHRoaXMuc3RhdGUucUVycik6bnVsbCksIGVsKCdidXR0b24nLHtrZXk6J3NraXAnLG9uQ2xpY2s6KCk9PnBhc3NlcihRLmlkKSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxiYWNrZ3JvdW5kOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGFsaWduU2VsZjonZmxleC1zdGFydCcscGFkZGluZzowLG1hcmdpblRvcDonMnB4Jyxmb250U2l6ZTptPycxMy41cHgnOicxNHB4Jyxjb2xvcjpHUkVZLHRleHREZWNvcmF0aW9uOid1bmRlcmxpbmUnfX0sKHthbm5lZV9uYWlzc2FuY2U6J0plIHByw6lmw6hyZSBwYXNzZXInLHNleGU6J0plIHByw6lmw6hyZSBuZSBwYXMgcsOpcG9uZHJlJyxhbm5lZV9kZWJ1dDonSmUgbmUgc2FpcyBwbHVzLCBwYXNzZXInLGVuZmFudHM6J0plIHByw6lmw6hyZSBwYXNzZXInLHRlbXBzX3BhcnRpZWw6J0plIHByw6lmw6hyZSBwYXNzZXInLHBlcmlvZGVzOidQYXNzZXIgY2V0dGUgcXVlc3Rpb24gZXQgdm9pciBsYSBzdWl0ZSd9KVtRLmlkXXx8J0plIHByw6lmw6hyZSBwYXNzZXInKSwgcWk+MD9lbCgnYnV0dG9uJyx7a2V5OidyJyxvbkNsaWNrOigpPT57dGhpcy5zZXRTdGF0ZSh7cUluZGV4OnFpLTF9KTt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6J25vbmUnLGJhY2tncm91bmQ6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsYWxpZ25TZWxmOidmbGV4LXN0YXJ0JyxwYWRkaW5nOjAsbWFyZ2luVG9wOicycHgnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGNvbG9yOkdSRVksdGV4dERlY29yYXRpb246J3VuZGVybGluZSd9fSwnUmV2ZW5pciDDoCBsYSBxdWVzdGlvbiBwcsOpY8OpZGVudGUnKTpudWxsCiAgICBdLHRydWUpOm51bGw7CgogICAgLy8gQmlsYW4gZGVzIDYgcXVlc3Rpb25zIDogamFtYWlzIHVuIHNjb3JlLCB0b3Vqb3VycyB1biBmYWl0IHF1J2VsbGUgaWdub3JhaXQuCiAgICBjb25zdCBhUmVnYXJkZXI9W107CiAgICBpZihyZXAuZW5mYW50cz09PSdPdWknKSBhUmVnYXJkZXIucHVzaCgnbGVzIGVuZmFudHMnKTsKICAgIGlmKHJlcC5wYXJ0aWVsPT09J091aScpIGFSZWdhcmRlci5wdXNoKCdsZSB0ZW1wcyBwYXJ0aWVsJyk7CiAgICBpZihyZXAuYXV0cmU9PT0nVW5lIGFjdGl2aXTDqSBpbmTDqXBlbmRhbnRlJ3x8cmVwLmF1dHJlPT09J0xlcyBkZXV4JykgYVJlZ2FyZGVyLnB1c2goJ3VuZSBww6lyaW9kZSBkXHUyMDE5aW5kw6lwZW5kYW50Jyk7CiAgICBpZihyZXAubWlsaXRhaXJlPT09J091aScpIGFSZWdhcmRlci5wdXNoKCdsZSBzZXJ2aWNlIG1pbGl0YWlyZScpOwogICAgY29uc3QgbmJSZWdhcmRlcj1hUmVnYXJkZXIubGVuZ3RoOwogICAgY29uc3QgbGlzdGVSZWdhcmRlcj1uYlJlZ2FyZGVyPjE/YVJlZ2FyZGVyLnNsaWNlKDAsLTEpLmpvaW4oJywgJykrJyBldCAnK2FSZWdhcmRlclthUmVnYXJkZXIubGVuZ3RoLTFdOihhUmVnYXJkZXJbMF18fCcnKTsKCiAgICBjb25zdCBiaWxhbj0oZnVuY3Rpb24oc2VsZil7CiAgICAgIHZhciBRRD1zZWxmLnN0YXRlLnFEYXRhLCBsb2FkaW5nPShzZWxmLnN0YXRlLnFFbnZvaXx8IVFEKTsKICAgICAgaWYobG9hZGluZyl7IHJldHVybiBjYXJ0ZShbCiAgICAgICAgZWwoJ2Rpdicse2tleTonbCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnLHBhZGRpbmc6bT8nMTJweCAwJzonMTZweCAwJ319LAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIxcHgnOicyNHB4Jyxmb250V2VpZ2h0OjUwMCxjb2xvcjpOQVZZfX0sJ0FuYWx5c2UgZGUgdm9zIHLDqXBvbnNlcyBlbiBjb3VycycpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4Jyxjb2xvcjpHUkVZfX0sJ1F1ZWxxdWVzIHNlY29uZGVzLicpKV0pOyB9CiAgICAgIHZhciBRQj1RRC5iYXJlbWUsIFFOPVFELmFubmVlX25haXNzYW5jZSwgZXN0Rj0oc2VsZi5zdGF0ZS5yZXBvbnNlcyYmc2VsZi5zdGF0ZS5yZXBvbnNlcy5zZXhlPT09J1VuZSBmZW1tZScpOwogICAgICB2YXIgUFI9UUQucHJvbWVzc2VzfHxbXSwgTUs9UUQubWFycXVlZXN8fDAsIFBWPVFELnByZXV2ZXx8e307CiAgICAgIHZhciBjaGFtcE1haWw9c2VsZi5zdGF0ZS5tYWlsT2sKICAgICAgICA/IGVsKCdkaXYnLHtrZXk6J29rJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCd9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdWb3VzIGFsbGV6IHJlY2V2b2lyIGxlcyDDqXRhcGVzIHBhciBlLW1haWwuJyksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnTGUgbWVzc2FnZSBjb250aWVudCB2b3RyZSBsaWVuIGRlIHJldG91csKgOiB2b3VzIHBvdXJyZXogcmVwcmVuZHJlIGF2ZWMgdm9zIHLDqXBvbnNlcyBkw6lqw6AgZW5yZWdpc3Ryw6llcy4nKSkKICAgICAgICA6IGVsKCdmb3JtJyx7a2V5OidmJyxvblN1Ym1pdDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB2PWUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWU7c2VsZi5jYXB0dXJlTWFpbCh2KTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LAogICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxtaW5XaWR0aDowLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmbz1lLmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgnZm9ybScpO3ZhciBpcD1mbyYmZm8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3NlbGYuY2FwdHVyZU1haWwoaXA/aXAudmFsdWU6JycpO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIycHgnLGJhY2tncm91bmQ6TkFWWSxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo3MDB9fSwnUmVjZXZvaXIgbGVzIMOpdGFwZXMgcGFyIGUtbWFpbCcpKTsKICAgICAgdmFyIFJFUD1zZWxmLnN0YXRlLnJlcG9uc2VzfHx7fTsgdmFyIF9hbj1wYXJzZUludChSRVAuYW5uZWVfbmFpc3NhbmNlLDEwKSwgX2FkPXBhcnNlSW50KFJFUC5hbm5lZV9kZWJ1dCwxMCk7IHZhciBfcGVyPVJFUC5wZXJpb2Rlc3x8W107IHZhciBUSEVNRVM9W107IGlmKF9hZCYmX2FuJiYoX2FkLV9hbik+MCYmKF9hZC1fYW4pPD0yMClUSEVNRVMucHVzaChbJ1VuIGTDqXBhcnQgYW50aWNpcMOpIGVzdC1pbCBlbnZpc2FnZWFibGVcdTAwYTA/JywnVm91cyBhdmV6IGluZGlxdcOpIGF2b2lyIGNvbW1lbmPDqSDDoCB0cmF2YWlsbGVyIGpldW5lLiBMZSBiaWxhbiBleGFtaW5lcmEgdm90cmUgZMOpYnV0IGRlIGNhcnJpw6hyZSBldCBsZXMgY29uZGl0aW9ucyBkZSBkw6lwYXJ0IGFwcGxpY2FibGVzIMOgIHZvdHJlIHNpdHVhdGlvbi4nXSk7IGlmKFJFUC5lbmZhbnRzJiZwYXJzZUludChSRVAuZW5mYW50cywxMCk+MClUSEVNRVMucHVzaChbJ1ZvcyBlbmZhbnRzIG9udC1pbHMgw6l0w6kgcHJpcyBlbiBjb21wdGUgZGFucyB2b3MgZHJvaXRzXHUwMGEwPycsJ0xlIGJpbGFuIGV4YW1pbmVyYSBsZXMgZHJvaXRzIGxpw6lzIMOgIHZvcyBlbmZhbnRzIGV0IGxlcyDDqWzDqW1lbnRzIMOgIHbDqXJpZmllciBhdXByw6hzIGRlcyBjYWlzc2VzLiddKTsgaWYoUkVQLnRlbXBzX3BhcnRpZWw9PT0nT3VpJylUSEVNRVMucHVzaChbJ1F1ZSBjaGFuZ2Ugdm90cmUgdGVtcHMgcGFydGllbCBwb3VyIHZvdHJlIHJldHJhaXRlXHUwMGEwPycsJ0xlIGJpbGFuIGV4YW1pbmVyYSBsZXMgcMOpcmlvZGVzIGNvbmNlcm7DqWVzIGV0IGxlcyBkcm9pdHMgcmVwb3J0w6lzIGRhbnMgbGVzIGVzdGltYXRpb25zIHByb3Bvc8OpZXMuJ10pOyBpZihfcGVyLmluZGV4T2YoJ2V0dWRlcycpPi0xKVRIRU1FUy5wdXNoKFsnVW4gcmFjaGF0IGF1cmFpdC1pbCB1biBpbnTDqXLDqnQgZGFucyB2b3RyZSBzaXR1YXRpb25cdTAwYTA/JywnVm91cyBhdmV6IGluZGlxdcOpIGF2b2lyIHN1aXZpIGRlcyDDqXR1ZGVzIHN1cMOpcmlldXJlcy4gTGUgYmlsYW4gZXhhbWluZXJhIGxhIHBvc3NpYmlsaXTDqSBkXHUyMDE5dW4gcmFjaGF0IGV0IHNvbiBpbnTDqXLDqnQgZGFucyBsZXMgc2PDqW5hcmlvcyBkZSBkw6lwYXJ0IMOpdHVkacOpcy4nXSk7IGlmKF9wZXIuaW5kZXhPZignZXRyYW5nZXInKT4tMSlUSEVNRVMucHVzaChbJ1F1ZWxzIMOpbMOpbWVudHMgdsOpcmlmaWVyIHBvdXIgdm9zIHDDqXJpb2RlcyDDoCBsXHUyMDE5w6l0cmFuZ2VyXHUwMGEwPycsJ0xlIGJpbGFuIHByw6ljaXNlcmEgbGVzIGluZm9ybWF0aW9ucyDDoCByw6l1bmlyIGV0IGxlcyB2w6lyaWZpY2F0aW9ucyBhZGFwdMOpZXMgYXV4IHDDqXJpb2RlcyBkw6ljbGFyw6llcy4nXSk7IGlmKF9wZXIuaW5kZXhPZignY2hvbWFnZScpPi0xfHxfcGVyLmluZGV4T2YoJ21hbGFkaWUnKT4tMSlUSEVNRVMucHVzaChbJ0NvbW1lbnQgY2VzIHDDqXJpb2RlcyBzb250LWVsbGVzIHByaXNlcyBlbiBjb21wdGVcdTAwYTA/JywnTGUgYmlsYW4gcmFwcHJvY2hlcmEgbGVzIHDDqXJpb2RlcyBkw6ljbGFyw6llcyBkZXMgaW5mb3JtYXRpb25zIGZpZ3VyYW50IHN1ciB2b3RyZSByZWxldsOpLiddKTsgaWYoX3Blci5pbmRleE9mKCdpbmRlcGVuZGFudCcpPi0xKVRIRU1FUy5wdXNoKFsnVm90cmUgcGFyY291cnMgZXN0LWlsIGJpZW4gcmV0cmFjw6kgbWFsZ3LDqSBsZXMgY2hhbmdlbWVudHMgZFx1MjAxOWFjdGl2aXTDqVx1MDBhMD8nLCdMZSBiaWxhbiBleGFtaW5lcmEgbGVzIHDDqXJpb2RlcyBldCBsZXMgaW5mb3JtYXRpb25zIGRlcyByw6lnaW1lcyBjb25jZXJuw6lzLiddKTsgaWYoX3Blci5pbmRleE9mKCdpbnRlcmltJyk+LTEpVEhFTUVTLnB1c2goWydWb3MgZGlmZsOpcmVudHMgZW1wbG9pcyBzb250LWlscyBiaWVuIHJldHJhY8Opc1x1MDBhMD8nLCdMZSBiaWxhbiB2w6lyaWZpZXJhIGxlcyBww6lyaW9kZXMgY29ycmVzcG9uZGFudGVzIGRhbnMgdm90cmUgcmVsZXbDqS4nXSk7IGlmKF9wZXIuaW5kZXhPZignc2VydmljZScpPi0xKVRIRU1FUy5wdXNoKFsnVm90cmUgc2VydmljZSBtaWxpdGFpcmUgZXN0LWlsIHByaXMgZW4gY29tcHRlXHUwMGEwPycsJ0xlIGJpbGFuIHJhcHByb2NoZXJhIGxhIHDDqXJpb2RlIGTDqWNsYXLDqWUgZGVzIMOpbMOpbWVudHMgZHUgcmVsZXbDqSBldCBkZXMganVzdGlmaWNhdGlmcy4nXSk7IFRIRU1FUz1USEVNRVMuc2xpY2UoMCwzKTsgcmV0dXJuIGNhcnRlKFtlbCgnc3Bhbicse2tleTonaycsc3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2M0MTczYSd9fSwnVm90cmUgb3JpZW50YXRpb24gZ3JhdHVpdGUnKSxlbCgnZGl2Jyx7a2V5Oid0aScsc3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjJweCc6JzI2cHgnLGxpbmVIZWlnaHQ6MS4xNCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdWb3RyZSByZXRyYWl0ZVx1MDBhMDogbGVzIHN1amV0cyDDoCBleGFtaW5lciBkYW5zIHZvdHJlIHNpdHVhdGlvbicpLGVsKCdkaXYnLHtrZXk6J2luJyxzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCdWb3MgcsOpcG9uc2VzIG9yaWVudGVudCBsZXMgdsOpcmlmaWNhdGlvbnMgw6AgbWVuZXIuIFZvaWNpIGxlcyBxdWVzdGlvbnMgcXVcdTIwMTl1biBleGFtZW4gZGUgdm90cmUgY2FycmnDqHJlIHBlcm1ldHRyYSBkZSBwcsOpY2lzZXIuJyksKFRIRU1FUy5sZW5ndGg/ZWwoJ2Rpdicse2tleTondGgnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMXB4JzonMTNweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE0cHgnfX0sVEhFTUVTLm1hcChmdW5jdGlvbih0LGkyKXtyZXR1cm4gZWwoJ2Rpdicse2tleTppMixzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzNweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zfX0sdFswXSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6SU5LfX0sdFsxXSkpO30pKTplbCgnZGl2Jyx7a2V5Oid0aDAnLHN0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMnB4JzonMTRweCcsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sJ1ZvcyByw6lwb25zZXMgbmUgZm9udCBwYXMgcmVzc29ydGlyIGRlIHN1amV0IHBhcnRpY3VsaWVyIMOgIGNlIHN0YWRlLiBMXHUyMDE5ZXhhbWVuIGRlIHZvdHJlIHJlbGV2w6kgcGVybWV0dHJhIGRlIHByw6ljaXNlciBsZXMgdsOpcmlmaWNhdGlvbnMgdXRpbGVzLicpKSwoUUI/ZWwoJ2Rpdicse2tleToncmVnJyxzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrTkFWWSxwYWRkaW5nOm0/JzEwcHggMTNweCc6JzEycHggMTZweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzJweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVll9fSwnUmVww6hyZXMgZHUgcsOpZ2ltZSBnw6luw6lyYWwgcG91ciB2b3RyZSBnw6luw6lyYXRpb24nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGNvbG9yOklOS319LCfDgmdlIGzDqWdhbFx1MDBhMDogJyxlbCgnc3Ryb25nJyx7c3R5bGU6e2NvbG9yOk5BVll9fSxTdHJpbmcoUUIuYWdlX2xpc2libGUpKSwnIFx1MDBiNyBEdXLDqWUgZFx1MjAxOWFzc3VyYW5jZSByZXF1aXNlXHUwMGEwOiAnLGVsKCdzdHJvbmcnLHtzdHlsZTp7Y29sb3I6TkFWWX19LFN0cmluZyhRQi50cmltZXN0cmVzX3JlcXVpcykrJyB0cmltZXN0cmVzJykpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTJweCc6JzEyLjVweCcsY29sb3I6R1JFWX19LCdDZXMgcmVww6hyZXMgbmUgZMOpdGVybWluZW50IHBhcyB2b3RyZSBkYXRlIHBlcnNvbm5lbGxlIGRlIGTDqXBhcnQuJykpOm51bGwpLGVsKCdkaXYnLHtrZXk6J2NvbScsc3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzE2cHggMTZweCAxOHB4JzonMjJweCAyNHB4IDI0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxMnB4J319LGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMTZlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2M0MTczYSd9fSwnTGUgYmlsYW4gcmV0cmFpdGUgY29tcGxldCcpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOHB4JzonMjBweCcsbGluZUhlaWdodDoxLjE4LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAxOGVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdVbiBiaWxhbiDDqWNyaXQgcG91ciBjaG9pc2lyIHZvdHJlIGTDqXBhcnQgZXQgcHLDqXBhcmVyIHZvcyBkw6ltYXJjaGVzJyksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpJTkt9fSwnSmUgcmVwcmVuZHMgdm90cmUgcmVsZXbDqSBhbm7DqWUgcGFyIGFubsOpZSwgYXZlYyB2b3MgcsOpcG9uc2VzLiBWb3VzIHJlY2V2ZXogdW4gZG9zc2llciBhZGFwdMOpIMOgIHZvdHJlIGNhcnJpw6hyZSBwb3VyIGNvbXBhcmVyIHZvcyBwb3NzaWJpbGl0w6lzIGV0IHNhdm9pciBxdWVsbGVzIGTDqW1hcmNoZXMgZW5nYWdlci4nKSxlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnfX0sW1snVm90cmUgY2FycmnDqHJlIHbDqXJpZmnDqWUnLCdMZXMgcG9pbnRzIGV4YW1pbsOpcywgbGVzIGV4cGxpY2F0aW9ucyBldCBsZXMganVzdGlmaWNhdGlmcyDDoCByw6l1bmlyIHBvdXIgbGVzIGRlbWFuZGVzIHJldGVudWVzLiddLFsnVm9zIHBvc3NpYmlsaXTDqXMgZGUgZMOpcGFydCBjb21wYXLDqWVzJywnTGVzIGRhdGVzIMOpdHVkacOpZXMgZXQgbGVzIG1vbnRhbnRzIGRlIHBlbnNpb24gZXN0aW3DqXMgcG91ciBjaGFxdWUgc2PDqW5hcmlvLiddLFsnVm9zIGRlbWFuZGVzIHByw6lwYXLDqWVzJywnTGVzIGNvdXJyaWVycyBhZGFwdMOpcyDDoCB2b3RyZSBzaXR1YXRpb24sIMOgIHNpZ25lciBldCDDoCBlbnZveWVyIGF1eCBjYWlzc2VzLiddXS5tYXAoZnVuY3Rpb24oeCxpMyl7cmV0dXJuIGVsKCdkaXYnLHtrZXk6aTMsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzhweCd9fSxlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzZweCd9fSksZWwoJ2Rpdicse30sZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4Jyxmb250V2VpZ2h0OjcwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zNX19LHhbMF0pLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0seFsxXSkpKTt9KSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4Jyxjb2xvcjpHUkVZfX0sJ0FuYWx5c8OpIGV0IHLDqWRpZ8OpIHBhciBMw6lvbmFyZCBEZcOvLCBmb25kYXRldXIgZFx1MjAxOUFEQ0YuJyksZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI4ZW0nLGNvbG9yOk5BVll9fSwnMjQ5IOKCrCBUVEMnKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOkdSRVl9fSwnUGFpZW1lbnQgdW5pcXVlIFx1MDBiNyBCaWxhbiByZW1pcyBzb3VzIDMgam91cnMgb3V2csOpcycpLGVsKCdhJyx7aHJlZjonaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvP3V0bV9zb3VyY2U9YWRjZiZ1dG1fbWVkaXVtPXBhZ2UtdmVudGUmdXRtX2NhbXBhaWduPWFuYWx5c2UtcmVsZXZlJnZpYT1xdWVzdGlvbm5haXJlJyxvbkNsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgdT1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJyk7dmFyIF9jaz1mdW5jdGlvbihuKXtyZXR1cm4gKGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoPzpefDsgKScrbisnPShbXjtdKiknKSl8fFtdKVsxXXx8Jyc7fTt2YXIgX2NpZD1fY2soJ19nYScpLnNwbGl0KCcuJykuc2xpY2UoLTIpLmpvaW4oJy4nKTt2YXIgX3NpZD0oX2NrKCdfZ2FfRDlTMjRDNko0NycpLnNwbGl0KCcuJylbMl0pfHwnJzt2YXIgX2FkZD17fTtpZihfY2lkKV9hZGQuY2lkPV9jaWQ7aWYoX3NpZClfYWRkLnNpZD1fc2lkO3ZhciBfZmJwPV9jaygnX2ZicCcpO2lmKF9mYnApX2FkZC5mYnA9X2ZicDt2YXIgX2ZiYz1fY2soJ19mYmMnKTtpZihfZmJjKV9hZGQuZmJjPV9mYmM7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciB2PW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChjKXx8c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShjKTtpZih2KV9hZGRbY109djt9Y2F0Y2goZSl7fX0pO2Zvcih2YXIgX2sgaW4gX2FkZCl7aWYodS5pbmRleE9mKF9rKyc9Jyk8MCl1Kz0odS5pbmRleE9mKCc/Jyk+LTE/JyYnOic/JykrX2srJz0nK2VuY29kZVVSSUNvbXBvbmVudChfYWRkW19rXSk7fXRyeXttdHJhY2soJ2N0YV9jbGljaycse2Rlc3Q6J3N0cmlwZScsZW1wbGFjZW1lbnQ6J3F1ZXN0aW9ubmFpcmUnfSk7bXRyYWNrKCdjaGVja291dF9vcGVuJyx7dmlhOidxdWVzdGlvbm5haXJlJ30pO31jYXRjaChlKXt9d2luZG93LmxvY2F0aW9uLmhyZWY9dTt9LHN0eWxlOnt0ZXh0RGVjb3JhdGlvbjonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94Jyx3aWR0aDonMTAwJScsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyx0ZXh0QWxpZ246J2NlbnRlcicsaGVpZ2h0Om0/JzU0cHgnOic1OHB4JyxwYWRkaW5nOicwIDE2cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxib3hTaGFkb3c6JzAgMTRweCAzMHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbihlKXtlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSdub25lJzt9fSwnRMOpY291dnJpciBsZSBiaWxhbiBjb21wbGV0IFx1MDBiNyAyNDkg4oKsIFRUQycpLGVsKCdhJyx7aHJlZjonIycsb25DbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIGJ4PVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJykpLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4gL1ZvaXIgNCBwYWdlcy8udGVzdCh4LnRleHRDb250ZW50fHwnJyk7fSlbMF07aWYoYngpe2J4LmNsaWNrKCk7fX0sc3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGNvbG9yOk5BVlksdGV4dEFsaWduOidjZW50ZXInLHRleHREZWNvcmF0aW9uOid1bmRlcmxpbmUnLGN1cnNvcjoncG9pbnRlcicsdHJhbnNpdGlvbjonY29sb3IgLjE1cyBlYXNlJ30sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1SRUQ7fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPU5BVlk7fX0sJ1ZvaXIgdW4gZXhlbXBsZSBkZSBiaWxhbicpLGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nOXB4JzonMTBweCcsZm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdMZSBiaWxhbiBjb21wbGV0IG7DqWNlc3NpdGUgdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUuIEJlc29pbiBkXHUyMDE5YWlkZSBwb3VyIGxcdTIwMTlvYnRlbmlyXHUwMGEwPyAnLGVsKCdhJyx7aHJlZjonaHR0cHM6Ly93d3cuaW5mby1yZXRyYWl0ZS5mci8nLHRhcmdldDonX2JsYW5rJyxyZWw6J25vb3BlbmVyJyxzdHlsZTp7Y29sb3I6TkFWWSx0ZXh0RGVjb3JhdGlvbjondW5kZXJsaW5lJ319LCdWb2lyIGxlcyDDqXRhcGVzLicpKSksZWwoJ2Rpdicse2tleTonZnJlZScsc3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzE0cHgnOicxNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1LjVweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDAsY29sb3I6TkFWWX19LCdWb3VzIHByw6lmw6lyZXogY29tbWVuY2VyIGdyYXR1aXRlbWVudFx1MDBhMD8nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LCdPYnRlbmV6IHZvdHJlIHJlbGV2w6kgZGUgY2FycmnDqHJlLCBwdWlzIGxhbmNleiBzYSBwcsOpLWFuYWx5c2UgZ3JhdHVpdGUgcG91ciBkw6ljb3V2cmlyIGxlcyBwcmVtaWVycyBwb2ludHMgw6AgdsOpcmlmaWVyIGRhbnMgbGUgZG9jdW1lbnQuJyksZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4V3JhcDond3JhcCcsZ2FwOicxMnB4JyxhbGlnbkl0ZW1zOidjZW50ZXInfX0sZWwoJ2EnLHtocmVmOidodHRwczovL3d3dy5pbmZvLXJldHJhaXRlLmZyLycsdGFyZ2V0OidfYmxhbmsnLHJlbDonbm9vcGVuZXInLHN0eWxlOntkaXNwbGF5OidpbmxpbmUtZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxoZWlnaHQ6bT8nNDhweCc6JzUwcHgnLHBhZGRpbmc6JzAgMjBweCcsYm9yZGVyOicxLjVweCBzb2xpZCAnK05BVlksY29sb3I6TkFWWSxmb250U2l6ZTptPycxNC41cHgnOicxNXB4Jyxmb250V2VpZ2h0OjcwMCx0ZXh0RGVjb3JhdGlvbjonbm9uZScsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMTVzIGVhc2UnfSxvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oZSl7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNlZWYyZmInO30sb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPSd0cmFuc3BhcmVudCc7fX0sJ01cdTIwMTlhaWRlciDDoCBvYnRlbmlyIG1vbiByZWxldsOpJyksZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazooKT0+c2VsZi5zZXRTdGF0ZSh7ZGlhZzonZGVwb3QnLHFEYXRhOm51bGx9KSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxiYWNrZ3JvdW5kOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGNvbG9yOkdSRVksdGV4dERlY29yYXRpb246J3VuZGVybGluZScsdHJhbnNpdGlvbjonY29sb3IgLjE1cyBlYXNlJ30sb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1OQVZZO30sb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKGUpe2UuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvcj1HUkVZO319LCdKXHUyMDE5YWkgbWFpbnRlbmFudCBtb24gcmVsZXbDqScpKSxlbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMTJweCAxM3B4JzonMTRweCAxNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonOHB4J319LGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsZm9udFdlaWdodDo3MDAsY29sb3I6TkFWWX19LCdWb3VzIHJlcHJlbmRyZXogcGx1cyB0YXJkXHUwMGEwPycpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LCdSZWNldmV6IGxlcyDDqXRhcGVzIHBvdXIgb2J0ZW5pciB2b3RyZSByZWxldsOpIGV0IHVuIGxpZW4gcG91ciByZXZlbmlyIGF2ZWMgdm9zIHLDqXBvbnNlcyBkw6lqw6AgZW5yZWdpc3Ryw6llcy4nKSxjaGFtcE1haWwpLGVsKCdkaXYnLHtrZXk6J3B2JyxzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnU3VyIHVuIMOpY2hhbnRpbGxvbiBkZSA0MCByZWxldsOpcyBsdXMgcGFyIG5vdHJlIG91dGlsLCBlbnRyZSA5IGV0IDIyIHBvaW50cyDDoCB2w6lyaWZpZXIgb250IMOpdMOpIHJlcMOpcsOpcyBwYXIgcmVsZXbDqS4gQ2VzIHBvaW50cyBkb2l2ZW50IMOqdHJlIGV4YW1pbsOpcyBhdmFudCBkZSBjb25jbHVyZSDDoCB1bmUgY29ycmVjdGlvbi4nKSldKTsKICAgIH0pKHRoaXMpOwoKICAgIGNvbnN0IGVjcmFuUXVlc3Rpb25zPWVsKCdkaXYnLG51bGwsUT9lY3JhblF1ZXN0aW9uOmJpbGFuKTsKCiAgICBjb25zdCBibG9jPWV0YXQ9PT0ncXVlc3Rpb25zJz9lY3JhblF1ZXN0aW9uczpldGF0PT09J2xlY3R1cmUnP2NoYXJnZW1lbnQ6ZXRhdD09PSdyZXN1bHRhdCc/cmVzdWx0YXQ6ZXRhdD09PSdwYXNfcmVsZXZlJz9wYXNSZWxldmU6ZXRhdD09PSdpbGxpc2libGUnP2lsbGlzaWJsZTpldGF0PT09J2VjaGVjJz9lY2hlYzpkZXBvdDsKCiAgICBjb25zdCBwaWVnZT1lbCgnaW5wdXQnLHt0eXBlOid0ZXh0JyxuYW1lOidhZHJlc3NlX2NvbmZpcm1hdGlvbicsdGFiaW5kZXg6Jy0xJyxhdXRvY29tcGxldGU6J29mZicsJ2FyaWEtaGlkZGVuJzondHJ1ZScsc3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDonLTk5OTlweCcsb3BhY2l0eTowLHdpZHRoOicxcHgnLGhlaWdodDonMXB4J319KTsKCiAgICAvLyBMZSBibG9jIGd1aWTDqSBuJ2V4aXN0ZSBwYXMgdGFudCBxdWUgbGUgaGVybyBuZSBsJ2EgcGFzIG91dmVydCA6IGlsIHNlIGdsaXNzZQogICAgLy8gc291cyBsZSBoZXJvIGV0IHBvdXNzZSBsZSBjb250ZW51LCBpbCBuZSByZW1wbGFjZSByaWVuLgogICAgaWYoZXRhdD09PSdkZXBvdCcgJiYgIXRoaXMuc3RhdGUuZ3VpZGUpIHJldHVybiBudWxsOwoKICAgIHJldHVybiBlbCgnc2VjdGlvbicseydkYXRhLWd1aWRlJzonMScsc3R5bGU6e2JhY2tncm91bmQ6UEFQRVIsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzI2cHggMCAzMnB4JzonNDRweCAwIDU2cHgnfX0sCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMThweCc6JzI0cHgnfX0sCiAgICAgICAgZWwoJ2RpdicseydkYXRhLWRpYWcnOicxJ30sYmxvYyksCiAgICAgICAgcGllZ2UpKSk7CiAgfQoKICBvdXZyaXJHdWlkZShldGFwZSl7CiAgICB2YXIgc2VsZj10aGlzOwogICAgdGhpcy5zZXRTdGF0ZSh7Z3VpZGU6ZXRhcGV8fCdjaG9peCcsZGlhZzonZGVwb3QnfSk7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgIHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWd1aWRlXScpOwogICAgICBpZighdCkgcmV0dXJuOwogICAgICB2YXIgYmFyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhZGNmLXBhZ2UgW2RhdGEtYmFyXScpOwogICAgICB2YXIgb2ZmPShiYXImJmdldENvbXB1dGVkU3R5bGUoYmFyKS5wb3NpdGlvbj09PSdzdGlja3knKT9iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0OjA7CiAgICAgIHZhciB5PXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3dpbmRvdy5wYWdlWU9mZnNldC1vZmYtMTY7CiAgICAgIHRyeXsgd2luZG93LnNjcm9sbFRvKHt0b3A6eSxiZWhhdmlvcjonc21vb3RoJ30pOyB9Y2F0Y2goZSl7IHdpbmRvdy5zY3JvbGxUbygwLHkpOyB9CiAgICAgIHZhciBmPXQucXVlcnlTZWxlY3RvcignYnV0dG9uLGEsbGFiZWwsaW5wdXQnKTsKICAgICAgaWYoZiYmZi5mb2N1cykgdHJ5eyBmLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRydWV9KTsgfWNhdGNoKGUpe30KICAgIH0sNjApOwogIH0KCiAgcG9wdXBSZWxldmUobSl7CiAgICAvLyBsZXMgcXVhdHJlIHZhcmlhbnRlcyBjb2hhYml0ZW50IGRhbnMgbGUgbcOqbWUgZG9jdW1lbnQgOiB1bmUgc2V1bGUgZmVuw6p0cmUgw6AgbGEgZm9pcwogICAgaWYodGhpcy5zdGF0ZS5wb3B1cCE9PShtPydtJzonZCcpKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGVsPVJlYWN0LmNyZWF0ZUVsZW1lbnQ7CiAgICBjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIElOSz0nIzFjMjIzMCcsIExJTkU9JyNlNWU3ZWInOwogICAgY29uc3QgU0VSSUY9IidOZXdzcmVhZGVyJywgR2VvcmdpYSwgc2VyaWYiOwogICAgY29uc3QgZmVybWVyPSgpPT50aGlzLnNldFN0YXRlKHtwb3B1cDpmYWxzZSxwb3B1cE1haWxPazpmYWxzZX0pOwogICAgY29uc3QgRVRBUEVTPVsKICAgICAgWydBbGxleiBzdXIgJywnaW5mby1yZXRyYWl0ZS5mcicsJywgb3UgJywnaW5mby1yZXRyYWl0ZS5mcicsJyBzaSB2b3VzIGF2ZXogdG91am91cnMgw6l0w6kgc2FsYXJpw6knXSwKICAgICAgWydDb25uZWN0ZXotdm91cyDDoCB2b3RyZSBlc3BhY2UgcGVyc29ubmVsLCAnLCdGcmFuY2VDb25uZWN0JywnIGZvbmN0aW9ubmUsIGF2ZWMgdm9zIGlkZW50aWZpYW50cyBkZXMgaW1ww7R0cyBvdSBkZSBsXHUyMDE5QXNzdXJhbmNlIG1hbGFkaWUnXSwKICAgICAgWydPdXZyZXogJywnwqtcdTAwYTBNb24gcmVsZXbDqSBkZSBjYXJyacOocmVcdTAwYTDCuycsJycsJycsJyddLAogICAgICBbJ1TDqWzDqWNoYXJnZXogbGUgUERGLCAnLCdzYW5zIGxlIG1vZGlmaWVyIG5pIGxlIHJlbm9tbWVyJywnJywnJywnJ10KICAgIF07CiAgICByZXR1cm4gZWwoJ2Rpdicse29uQ2xpY2s6ZmVybWVyLHN0eWxlOntwb3NpdGlvbjonZml4ZWQnLGluc2V0OjAsekluZGV4OjkwMCxiYWNrZ3JvdW5kOidyZ2JhKDE0LDE5LDc5LDAuNTUpJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOm0/J2ZsZXgtZW5kJzonZmxleC1zdGFydCcsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicscGFkZGluZzptPycwJzonMzJweCcsb3ZlcmZsb3dZOidhdXRvJ319LAogICAgICBlbCgnZGl2Jyx7b25DbGljazplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHN0eWxlOntib3hTaXppbmc6J2JvcmRlci1ib3gnLG1hcmdpbjptPycwJzonYXV0bycsd2lkdGg6JzEwMCUnLG1heFdpZHRoOm0/J25vbmUnOic1NjBweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQsYm94U2hhZG93OicwIDQwcHggOTBweCAtMzBweCByZ2JhKDE0LDE5LDc5LDAuNTUpJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzBweCAzNHB4IDMycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxNnB4JyxtYXhIZWlnaHQ6bT8nOTJ2aCc6J25vbmUnLG92ZXJmbG93WTptPydhdXRvJzondmlzaWJsZSd9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGdhcDonMTZweCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnT8O5IHRyb3V2ZXIgdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUnKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzZweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdFbnZpcm9uIDUgbWludXRlcywgZ3JhdHVpdGVtZW50LCBzdXIgbGUgc2l0ZSBvZmZpY2llbC4nKSksCiAgICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazpmZXJtZXIsJ2FyaWEtbGFiZWwnOidGZXJtZXInLG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNlZWYyZmInO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1OQVZZO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2ZmZmZmZic7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPUxJTkU7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJhY2tncm91bmQ6JyNmZmZmZmYnLGN1cnNvcjoncG9pbnRlcicsZmxleFNocmluazowLHdpZHRoOiczNHB4JyxoZWlnaHQ6JzM0cHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsY29sb3I6TkFWWSxmb250U2l6ZTonMTdweCcsbGluZUhlaWdodDoxLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRyYW5zaXRpb246J2JhY2tncm91bmQgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlJ319LCdcdTAwZDcnKSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LAogICAgICAgICAgRVRBUEVTLm1hcCgoeCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTJweCc6JzE0cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxwYWRkaW5nOm0/JzExcHggMCc6JzEycHggMCcsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FfX0sCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyMXB4Jyxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsY29sb3I6JyNjNDE3M2EnLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJyxtaW5XaWR0aDonMTZweCd9fSxTdHJpbmcoaSsxKSksCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwKICAgICAgICAgICAgICB4WzBdLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbMV0pLHhbMl0seFszXT9lbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzNdKTpudWxsLHhbNF0pKSkpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSwnUmV2ZW5leiBlbnN1aXRlIGljaSBldCBkw6lwb3Nlei1sZS4nKSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzE0cHgnOicxNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LAogICAgICAgICAgdGhpcy5zdGF0ZS5wb3B1cE1haWxPawogICAgICAgICAgICA/IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzVweCd9fSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdDXHUyMDE5ZXN0IGVudm95w6kuJyksCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ1ZvdXMgcmVjZXZleiBsYSBtYXJjaGUgw6Agc3VpdnJlIGRhbnMgdW4gaW5zdGFudC4gUmllbiBkXHUyMDE5YXV0cmUgbmUgdm91cyBzZXJhIGVudm95w6kuJykpCiAgICAgICAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ1ZvdXMgcHLDqWbDqXJleiBsZSBmYWlyZSBwbHVzIHRhcmRcdTAwYTA/JyksCiAgICAgICAgICAgICAgICBlbCgnZm9ybScse29uU3VibWl0OmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGlucD1lLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3RoaXMuZW52b3llck1hcmNoZShpbnA/aW5wLnZhbHVlOicnKTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LAogICAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLGZsZXhTaHJpbms6MCx3aWR0aDptPycxMDAlJzonYXV0bycsbWluV2lkdGg6MCxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLG1pbkhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmVudm95ZXJNYXJjaGUoaW5wP2lucC52YWx1ZTonJyk7fSxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsd2lkdGg6bT8nMTAwJSc6J2F1dG8nLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAyMHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsYm94U2hhZG93OicwIDEycHggMjZweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjYpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJ319LCdFbnZveWV6LW1vaSBsYSBtYXJjaGUgw6Agc3VpdnJlJykpLAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1VuIHNldWwgbWVzc2FnZSwgYXZlYyBsZXMgw6l0YXBlcy4gUmllbiBkXHUyMDE5YXV0cmUuJykpKSkpOwogIH0KCiAgLy8gQW5uw6llcyBkdSByZWxldsOpLCDDoCBhbGltZW50ZXIgcGFyIGxhIHLDqXBvbnNlIGR1IG1vdGV1ci4KICBhbm5lZXNMdWVzKCl7CiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hbm5lZXMgfHwgW1sxOTgyLCcyIHRyaW1lc3RyZXMnXSxbMTk4MywnNCB0cmltZXN0cmVzJ10sWzE5ODQsJzQgdHJpbWVzdHJlcyddLFsxOTg1LCcxIHRyaW1lc3RyZSddLFsxOTg2LCc0IHRyaW1lc3RyZXMnXSxbMTk4NywnNCB0cmltZXN0cmVzJ10sWzE5ODgsJzQgdHJpbWVzdHJlcyddLFsxOTg5LCczIHRyaW1lc3RyZXMnXSxbMTk5MCwnNCB0cmltZXN0cmVzJ10sWzE5OTEsJzQgdHJpbWVzdHJlcyddLFsxOTkyLCc0IHRyaW1lc3RyZXMnXSxbMTk5MywnMiB0cmltZXN0cmVzJ10sWzE5OTQsJzQgdHJpbWVzdHJlcyddLFsxOTk1LCc0IHRyaW1lc3RyZXMnXSxbMTk5NywnNCB0cmltZXN0cmVzJ10sWzE5OTgsJzQgdHJpbWVzdHJlcyddLFsxOTk5LCc0IHRyaW1lc3RyZXMnXSxbMjAwMCwnNCB0cmltZXN0cmVzJ10sWzIwMDEsJzQgdHJpbWVzdHJlcyddLFsyMDAyLCc0IHRyaW1lc3RyZXMnXSxbMjAwMywnNCB0cmltZXN0cmVzJ10sWzIwMDQsJzQgdHJpbWVzdHJlcyddLFsyMDA2LCc0IHRyaW1lc3RyZXMnXSxbMjAwNywnNCB0cmltZXN0cmVzJ10sWzIwMDgsJzQgdHJpbWVzdHJlcyddLFsyMDA5LCc0IHRyaW1lc3RyZXMnXSxbMjAxMCwnNCB0cmltZXN0cmVzJ10sWzIwMTEsJzMgdHJpbWVzdHJlcyddLFsyMDEyLCc0IHRyaW1lc3RyZXMnXSxbMjAxMywnNCB0cmltZXN0cmVzJ10sWzIwMTQsJzQgdHJpbWVzdHJlcyddLFsyMDE1LCc0IHRyaW1lc3RyZXMnXSxbMjAxNiwnNCB0cmltZXN0cmVzJ10sWzIwMTcsJzQgdHJpbWVzdHJlcyddLFsyMDE4LCc0IHRyaW1lc3RyZXMnXSxbMjAxOSwnNCB0cmltZXN0cmVzJ10sWzIwMjAsJzQgdHJpbWVzdHJlcyddLFsyMDIxLCc0IHRyaW1lc3RyZXMnXSxbMjAyMiwnNCB0cmltZXN0cmVzJ10sWzIwMjMsJzQgdHJpbWVzdHJlcyddLFsyMDI0LCc0IHRyaW1lc3RyZXMnXSxbMjAyNSwnNCB0cmltZXN0cmVzJ11dOwogIH0KCiAgY2FwdHVyZU1haWwoKXsKICAgIHRoaXMuc2V0U3RhdGUoe21haWxPazp0cnVlfSk7CiAgICAvLyDDiXbDqW5lbWVudCBkZSBtZXN1cmUsIGF1IG1vbWVudCBvw7kgbCdhZHJlc3NlIGVzdCB2YWxpZMOpZS4KICAgIHRyeXsKICAgICAgaWYodHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnKXsKICAgICAgICBpZih0eXBlb2Ygd2luZG93LmRhdGFMYXllciE9PSd1bmRlZmluZWQnKSB3aW5kb3cuZGF0YUxheWVyLnB1c2goe2V2ZW50OidwcmVhbmFseXNlX2VtYWlsJ30pOwogICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuY2xhcml0eT09PSdmdW5jdGlvbicpIHdpbmRvdy5jbGFyaXR5KCdldmVudCcsJ3ByZWFuYWx5c2VfZW1haWwnKTsKICAgICAgICBpZih0eXBlb2Ygd2luZG93Lmd0YWc9PT0nZnVuY3Rpb24nKSB3aW5kb3cuZ3RhZygnZXZlbnQnLCdwcmVhbmFseXNlX2VtYWlsJyk7CiAgICAgIH0KICAgIH1jYXRjaChlKXt9CiAgfQoKICBvdXZyaXJRdWVzdGlvbnMoKXsKICAgIHRoaXMuc2V0U3RhdGUoe2RpYWc6J3F1ZXN0aW9ucycscUluZGV4OjAscmVwb25zZXM6e319KTsKICB9CgogIHNjcm9sbFRvRGlhZyhldil7CiAgICAvLyBUYW50IHF1ZSBsZSBtb2R1bGUgdml0IGRhbnMgbGUgaMOpcm9zLCBpbCBlc3QgZMOpasOgIMOgIGwnw6ljcmFuIDogbmUgcGFzIGTDqWZpbGVyLgogICAgdmFyIF9oPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLWxlY3R1cmUtaGVybycpOwogICAgaWYoX2ggJiYgX2guY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm47CiAgICAvLyBsYSBtYXF1ZXR0ZSByZW5kIGxlcyBxdWF0cmUgdmFyaWFudGVzIGRhbnMgbGUgbcOqbWUgZG9jdW1lbnQgOgogICAgLy8gb24gcGFydCBkdSBib3V0b24gY2xpcXXDqSBwb3VyIHJlc3RlciBkYW5zIGxhIGJvbm5lIGNvbG9ubmUuCiAgICBjb25zdCBzcmM9ZXYmJmV2LmN1cnJlbnRUYXJnZXQ7CiAgICBpZihzcmMpewogICAgICBsZXQgcz1zcmMucGFyZW50RWxlbWVudDsKICAgICAgd2hpbGUocyYmZ2V0Q29tcHV0ZWRTdHlsZShzKS5vdmVyZmxvd1khPT0nYXV0bycpIHM9cy5wYXJlbnRFbGVtZW50OwogICAgICB0aGlzLl9zYz1zfHxudWxsOyB0aGlzLl9zcmM9c3JjOwogICAgfQogICAgc2V0VGltZW91dCgoKT0+ewogICAgICBjb25zdCByYWNpbmU9dGhpcy5fc2N8fGRvY3VtZW50OwogICAgICBjb25zdCB0Z3Q9cmFjaW5lLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpYWddJyl8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpYWddJyk7CiAgICAgIGlmKCF0Z3QpIHJldHVybjsKICAgICAgbGV0IHNjPXRoaXMuX3NjOwogICAgICBpZighc2MpeyBzYz10Z3QucGFyZW50RWxlbWVudDsgd2hpbGUoc2MmJmdldENvbXB1dGVkU3R5bGUoc2MpLm92ZXJmbG93WSE9PSdhdXRvJykgc2M9c2MucGFyZW50RWxlbWVudDsgfQogICAgICBpZihzYyl7CiAgICAgICAgc2MucXVlcnlTZWxlY3RvckFsbCgnc2VjdGlvbicpLmZvckVhY2gocz0+e3Muc3R5bGUub3BhY2l0eT0nMSc7cy5zdHlsZS5hbmltYXRpb249J25vbmUnO3MuZGF0YXNldC5ydj0nMSc7fSk7CiAgICAgICAgY29uc3QgdG9wPXRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Atc2MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3NjLnNjcm9sbFRvcDsKICAgICAgICBzYy5zY3JvbGxUbyh7dG9wOnRvcC0xNCxiZWhhdmlvcjonc21vb3RoJ30pOwogICAgICB9ZWxzZXsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDp0Z3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3dpbmRvdy5zY3JvbGxZLTE0LGJlaGF2aW9yOidzbW9vdGgnfSk7CiAgICAgIH0KICAgIH0sNjApOwogIH0KCiAgbGlyZVJlbGV2ZShmaWxlKXsKICAgIGlmKCFmaWxlKSByZXR1cm47CiAgICAvLyBVbiBub3V2ZWF1IGTDqXDDtHQgcmVwYXJ0IGRlIHrDqXJvIDogYXVjdW4gbW90aWYgbmkgYXBlcsOndSBkJ3VuZSB0ZW50YXRpdmUgcHLDqWPDqWRlbnRlLgogICAgdGhpcy5hcGVyY3U9bnVsbDsKICAgIHRoaXMuc2V0U3RhdGUoe2RpYWc6J2xlY3R1cmUnLG5vbTpmaWxlLm5hbWUsZWNoZWNNc2c6bnVsbH0pOwogICAgdGhpcy5zY3JvbGxUb0RpYWcoKTsKICAgIGxldCBjbG9zPWZhbHNlOwogICAgY29uc3QgdDA9RGF0ZS5ub3coKTsKICAgIC8vIEwnw6ljcmFuIGQnYXR0ZW50ZSBlc3QgdGVudSBQTEFOQ0hFUiA6IGxlIHRlbXBzIHF1ZSBzZXMgYW5uw6llcyBkw6lmaWxlbnQKICAgIC8vIGV0IHF1J2VsbGUgcHVpc3NlIGxhaXNzZXIgdW5lIGFkcmVzc2UuIExlIHLDqXN1bHRhdCBzJ2FmZmljaGUgZW5zdWl0ZSwKICAgIC8vIHNlbG9uIGzigJlhY2PDqHMuCiAgICBjb25zdCBQTEFOQ0hFUj05MDAwOwogICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgdGhpcy5zZXRTdGF0ZSh7YW5uZWU6MH0pOwogICAgLy8gTGUgZMOpZmlsw6kgcGFyY291cnQgdG91dGUgbGEgY2FycmnDqHJlLCA0IGFubsOpZXMgdmlzaWJsZXMgw6AgbGEgZm9pcywgZXQgc2UKICAgIC8vIHRlcm1pbmUgYXZlYyBsJ2F0dGVudGUgOiBsYSBjYWRlbmNlIGVzdCBkw6lyaXbDqWUgZGUgUExBTkNIRVIsIHBhcyDDqWNyaXRlCiAgICAvLyBlbiBkdXIuIElsIHMnYXJyw6p0ZSBzdXIgbGEgZGVybmnDqHJlIGFubsOpZSBhdSBsaWV1IGRlIHJlY29tbWVuY2VyLgogICAgY29uc3QgcGFzPU1hdGgubWF4KDEsdGhpcy5hbm5lZXNMdWVzKCkubGVuZ3RoLTMpOwogICAgLy8gTGUgY3Vyc2V1ciBlc3QgY2FsY3Vsw6kgZGVwdWlzIGxlIHRlbXBzIMOpY291bMOpLCBqYW1haXMgaW5jcsOpbWVudMOpIDogaWwKICAgIC8vIHMnYXV0by1jb3JyaWdlIHNpIGxlIG5hdmlnYXRldXIgcmFsZW50aXQsIGV0IGZpbml0IHBpbGUgw6AgUExBTkNIRVIuCiAgICB0aGlzLl9kZWZpbGU9c2V0SW50ZXJ2YWwoKCk9PnsKICAgICAgY29uc3QgYXY9TWF0aC5taW4ocGFzLTEsTWF0aC5mbG9vcigoRGF0ZS5ub3coKS10MCkvUExBTkNIRVIqcGFzKSk7CiAgICAgIGlmKGF2Pj1wYXMtMSkgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgICB0aGlzLnNldFN0YXRlKHthbm5lZTphdn0pOwogICAgfSw5MCk7CiAgICBjb25zdCBwb3NlPShldGF0KT0+eyBpZihjbG9zKSByZXR1cm47IGNsb3M9dHJ1ZTsgY2xlYXJUaW1lb3V0KGdhcmRlKTsKICAgICAgY29uc3QgcmVzdGU9TWF0aC5tYXgoMCxQTEFOQ0hFUi0oRGF0ZS5ub3coKS10MCkpOwogICAgICBzZXRUaW1lb3V0KCgpPT57IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzpldGF0fSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0scmVzdGUpOyB9OwogICAgY29uc3QgZmluPXBvc2U7CiAgICAvLyBHYXJkZS1mb3UgcsOpc2VhdSA6IGlsIGRvaXQgdG91am91cnMgcmVzdGVyIGF1LWRlbMOgIGRlIFBMQU5DSEVSLgogICAgY29uc3QgZ2FyZGU9c2V0VGltZW91dCgoKT0+eyBjbG9zPXRydWU7IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzonZWNoZWMnfSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0sMTIwMDApOwogICAgY29uc3QgZmQ9bmV3IEZvcm1EYXRhKCk7IGZkLmFwcGVuZCgncmVsZXZlJyxmaWxlKTsKICAgIHZhciBfaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7IGZkLmFwcGVuZCgnYWRyZXNzZV9jb25maXJtYXRpb24nLF9ocD9faHAudmFsdWU6JycpOwogICAgLy8gQXBwZWwgYXN5bmNocm9uZSB2ZXJzIGxlIG1vdGV1ciA6IGF1Y3VuZSBuYXZpZ2F0aW9uIGR1IG5hdmlnYXRldXIuCiAgICB0cnl7CiAgICAgIGNvbnN0IGN0cmw9KHR5cGVvZiBBYm9ydENvbnRyb2xsZXIhPT0ndW5kZWZpbmVkJyk/bmV3IEFib3J0Q29udHJvbGxlcigpOm51bGw7CiAgICAgIGlmKGN0cmwpIHNldFRpbWVvdXQoKCk9Pnt0cnl7Y3RybC5hYm9ydCgpO31jYXRjaChlKXt9fSw2ODAwKTsKICAgICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdScse21ldGhvZDonUE9TVCcsYm9keTpmZCxzaWduYWw6Y3RybD9jdHJsLnNpZ25hbDp1bmRlZmluZWR9KQogICAgICAgIC50aGVuKHI9PnIuanNvbigpLnRoZW4oZD0+KHtzdGF0dXM6ci5zdGF0dXMsZGF0YTpkfSksKCk9Pih7c3RhdHVzOnIuc3RhdHVzLGRhdGE6e319KSkpCiAgICAgICAgLnRoZW4ocmVzPT50aGlzLnJlY2V2b2lyQXBlcmN1KHJlcyxmaW4pKQogICAgICAgIC5jYXRjaCgoKT0+c2V0VGltZW91dCgoKT0+ZmluKCdyZXN1bHRhdCcpLDY1MCkpOwogICAgfWNhdGNoKGVycil7IHNldFRpbWVvdXQoKCk9PmZpbigncmVzdWx0YXQnKSw2NTApOyB9CiAgfQoKCiAgYW5uZWVzTHVlcygpewogICAgcmV0dXJuIHRoaXMuc3RhdGUuYW5uZWVzIHx8IFtbMTk4MiwnMiB0cmltZXN0cmVzJ10sWzE5ODMsJzQgdHJpbWVzdHJlcyddLFsxOTg0LCc0IHRyaW1lc3RyZXMnXSxbMTk4NSwnMSB0cmltZXN0cmUnXSxbMTk4NiwnNCB0cmltZXN0cmVzJ10sWzE5ODcsJzQgdHJpbWVzdHJlcyddLFsxOTg4LCc0IHRyaW1lc3RyZXMnXSxbMTk4OSwnMyB0cmltZXN0cmVzJ10sWzE5OTAsJzQgdHJpbWVzdHJlcyddLFsxOTkxLCc0IHRyaW1lc3RyZXMnXSxbMTk5MiwnNCB0cmltZXN0cmVzJ10sWzE5OTMsJzIgdHJpbWVzdHJlcyddLFsxOTk0LCc0IHRyaW1lc3RyZXMnXSxbMTk5NSwnNCB0cmltZXN0cmVzJ10sWzE5OTcsJzQgdHJpbWVzdHJlcyddLFsxOTk4LCc0IHRyaW1lc3RyZXMnXSxbMTk5OSwnNCB0cmltZXN0cmVzJ10sWzIwMDAsJzQgdHJpbWVzdHJlcyddLFsyMDAxLCc0IHRyaW1lc3RyZXMnXSxbMjAwMiwnNCB0cmltZXN0cmVzJ10sWzIwMDMsJzQgdHJpbWVzdHJlcyddLFsyMDA0LCc0IHRyaW1lc3RyZXMnXSxbMjAwNiwnNCB0cmltZXN0cmVzJ10sWzIwMDcsJzQgdHJpbWVzdHJlcyddLFsyMDA4LCc0IHRyaW1lc3RyZXMnXSxbMjAwOSwnNCB0cmltZXN0cmVzJ10sWzIwMTAsJzQgdHJpbWVzdHJlcyddLFsyMDExLCczIHRyaW1lc3RyZXMnXSxbMjAxMiwnNCB0cmltZXN0cmVzJ10sWzIwMTMsJzQgdHJpbWVzdHJlcyddLFsyMDE0LCc0IHRyaW1lc3RyZXMnXSxbMjAxNSwnNCB0cmltZXN0cmVzJ10sWzIwMTYsJzQgdHJpbWVzdHJlcyddLFsyMDE3LCc0IHRyaW1lc3RyZXMnXSxbMjAxOCwnNCB0cmltZXN0cmVzJ10sWzIwMTksJzQgdHJpbWVzdHJlcyddLFsyMDIwLCc0IHRyaW1lc3RyZXMnXSxbMjAyMSwnNCB0cmltZXN0cmVzJ10sWzIwMjIsJzQgdHJpbWVzdHJlcyddLFsyMDIzLCc0IHRyaW1lc3RyZXMnXSxbMjAyNCwnNCB0cmltZXN0cmVzJ10sWzIwMjUsJzQgdHJpbWVzdHJlcyddXTsKICB9CgoKICBjYXB0dXJlTWFpbCgpewogICAgdGhpcy5zZXRTdGF0ZSh7bWFpbE9rOnRydWV9KTsKICAgIC8vIMOJdsOpbmVtZW50IGRlIG1lc3VyZSwgYXUgbW9tZW50IG/DuSBsJ2FkcmVzc2UgZXN0IHZhbGlkw6llLgogICAgdHJ5ewogICAgICBpZih0eXBlb2Ygd2luZG93IT09J3VuZGVmaW5lZCcpewogICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuZGF0YUxheWVyIT09J3VuZGVmaW5lZCcpIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7ZXZlbnQ6J3ByZWFuYWx5c2VfZW1haWwnfSk7CiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5jbGFyaXR5PT09J2Z1bmN0aW9uJykgd2luZG93LmNsYXJpdHkoJ2V2ZW50JywncHJlYW5hbHlzZV9lbWFpbCcpOwogICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuZ3RhZz09PSdmdW5jdGlvbicpIHdpbmRvdy5ndGFnKCdldmVudCcsJ3ByZWFuYWx5c2VfZW1haWwnKTsKICAgICAgfQogICAgfWNhdGNoKGUpe30KICB9CgoKICBzY3JvbGxlcihub2RlKXsKICAgIHZhciBzYyA9IG5vZGU7CiAgICB3aGlsZSAoc2MgJiYgc2MgIT09IGRvY3VtZW50LmJvZHkpIHsKICAgICAgdmFyIG95ID0gZ2V0Q29tcHV0ZWRTdHlsZShzYykub3ZlcmZsb3dZOwogICAgICBpZiAoKG95ID09PSAnYXV0bycgfHwgb3kgPT09ICdzY3JvbGwnKSAmJiBzYy5zY3JvbGxIZWlnaHQgPiBzYy5jbGllbnRIZWlnaHQgKyA0KSByZXR1cm4gc2M7CiAgICAgIHNjID0gc2MucGFyZW50RWxlbWVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCgogIG91dnJpclF1ZXN0aW9ucygpewogICAgdGhpcy5zZXRTdGF0ZSh7ZGlhZzoncXVlc3Rpb25zJyxxSW5kZXg6MCxyZXBvbnNlczp7fX0pOwogIH0KCiAgc2Nyb2xsVG9EaWFnKGV2KXsKICAgIC8vIGxhIG1hcXVldHRlIHJlbmQgbGVzIHF1YXRyZSB2YXJpYW50ZXMgZGFucyBsZSBtw6ptZSBkb2N1bWVudCA6CiAgICAvLyBvbiBwYXJ0IGR1IGJvdXRvbiBjbGlxdcOpIHBvdXIgcmVzdGVyIGRhbnMgbGEgYm9ubmUgY29sb25uZS4KICAgIGNvbnN0IHNyYz1ldiYmZXYuY3VycmVudFRhcmdldDsKICAgIGlmKHNyYyl7CiAgICAgIGxldCBzPXNyYy5wYXJlbnRFbGVtZW50OwogICAgICB3aGlsZShzJiZnZXRDb21wdXRlZFN0eWxlKHMpLm92ZXJmbG93WSE9PSdhdXRvJykgcz1zLnBhcmVudEVsZW1lbnQ7CiAgICAgIHRoaXMuX3NjPXN8fG51bGw7IHRoaXMuX3NyYz1zcmM7CiAgICB9CiAgICBzZXRUaW1lb3V0KCgpPT57CiAgICAgIGNvbnN0IHJhY2luZT10aGlzLl9zY3x8ZG9jdW1lbnQ7CiAgICAgIGNvbnN0IHRndD1yYWNpbmUucXVlcnlTZWxlY3RvcignW2RhdGEtZGlhZ10nKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZGlhZ10nKTsKICAgICAgaWYoIXRndCkgcmV0dXJuOwogICAgICBsZXQgc2M9dGhpcy5fc2M7CiAgICAgIGlmKCFzYyl7IHNjPXRndC5wYXJlbnRFbGVtZW50OyB3aGlsZShzYyYmZ2V0Q29tcHV0ZWRTdHlsZShzYykub3ZlcmZsb3dZIT09J2F1dG8nKSBzYz1zYy5wYXJlbnRFbGVtZW50OyB9CiAgICAgIGlmKHNjKXsKICAgICAgICBzYy5xdWVyeVNlbGVjdG9yQWxsKCdzZWN0aW9uJykuZm9yRWFjaChzPT57cy5zdHlsZS5vcGFjaXR5PScxJztzLnN0eWxlLmFuaW1hdGlvbj0nbm9uZSc7cy5kYXRhc2V0LnJ2PScxJzt9KTsKICAgICAgICBjb25zdCB0b3A9dGd0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1zYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Arc2Muc2Nyb2xsVG9wOwogICAgICAgIHNjLnNjcm9sbFRvKHt0b3A6dG9wLTE0LGJlaGF2aW9yOidzbW9vdGgnfSk7CiAgICAgIH1lbHNlewogICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wOnRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ard2luZG93LnNjcm9sbFktMTQsYmVoYXZpb3I6J3Ntb290aCd9KTsKICAgICAgfQogICAgfSw2MCk7CiAgfQoKCiAgbGlyZVJlbGV2ZShmaWxlKXsKICAgIGlmKCFmaWxlKSByZXR1cm47CiAgICAvLyBVbiBub3V2ZWF1IGTDqXDDtHQgcmVwYXJ0IGRlIHrDqXJvIDogYXVjdW4gbW90aWYgbmkgYXBlcsOndSBkJ3VuZSB0ZW50YXRpdmUgcHLDqWPDqWRlbnRlLgogICAgdGhpcy5hcGVyY3U9bnVsbDsKICAgIHRoaXMuc2V0U3RhdGUoe2RpYWc6J2xlY3R1cmUnLG5vbTpmaWxlLm5hbWUsZWNoZWNNc2c6bnVsbH0pOwogICAgdGhpcy5zY3JvbGxUb0RpYWcoKTsKICAgIGxldCBjbG9zPWZhbHNlOwogICAgY29uc3QgdDA9RGF0ZS5ub3coKTsKICAgIC8vIEwnw6ljcmFuIGQnYXR0ZW50ZSBlc3QgdGVudSBQTEFOQ0hFUiA6IGxlIHRlbXBzIHF1ZSBzZXMgYW5uw6llcyBkw6lmaWxlbnQKICAgIC8vIGV0IHF1J2VsbGUgcHVpc3NlIGxhaXNzZXIgdW5lIGFkcmVzc2UuIExlIHLDqXN1bHRhdCBzJ2FmZmljaGUgZW5zdWl0ZSwKICAgIC8vIHNlbG9uIGzigJlhY2PDqHMuCiAgICBjb25zdCBQTEFOQ0hFUj05MDAwOwogICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgdGhpcy5zZXRTdGF0ZSh7YW5uZWU6MH0pOwogICAgLy8gTGUgZMOpZmlsw6kgcGFyY291cnQgdG91dGUgbGEgY2FycmnDqHJlLCA0IGFubsOpZXMgdmlzaWJsZXMgw6AgbGEgZm9pcywgZXQgc2UKICAgIC8vIHRlcm1pbmUgYXZlYyBsJ2F0dGVudGUgOiBsYSBjYWRlbmNlIGVzdCBkw6lyaXbDqWUgZGUgUExBTkNIRVIsIHBhcyDDqWNyaXRlCiAgICAvLyBlbiBkdXIuIElsIHMnYXJyw6p0ZSBzdXIgbGEgZGVybmnDqHJlIGFubsOpZSBhdSBsaWV1IGRlIHJlY29tbWVuY2VyLgogICAgY29uc3QgcGFzPU1hdGgubWF4KDEsdGhpcy5hbm5lZXNMdWVzKCkubGVuZ3RoLTMpOwogICAgLy8gTGUgY3Vyc2V1ciBlc3QgY2FsY3Vsw6kgZGVwdWlzIGxlIHRlbXBzIMOpY291bMOpLCBqYW1haXMgaW5jcsOpbWVudMOpIDogaWwKICAgIC8vIHMnYXV0by1jb3JyaWdlIHNpIGxlIG5hdmlnYXRldXIgcmFsZW50aXQsIGV0IGZpbml0IHBpbGUgw6AgUExBTkNIRVIuCiAgICB0aGlzLl9kZWZpbGU9c2V0SW50ZXJ2YWwoKCk9PnsKICAgICAgY29uc3QgYXY9TWF0aC5taW4ocGFzLTEsTWF0aC5mbG9vcigoRGF0ZS5ub3coKS10MCkvUExBTkNIRVIqcGFzKSk7CiAgICAgIGlmKGF2Pj1wYXMtMSkgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgICB0aGlzLnNldFN0YXRlKHthbm5lZTphdn0pOwogICAgfSw5MCk7CiAgICBjb25zdCBwb3NlPShldGF0KT0+eyBpZihjbG9zKSByZXR1cm47IGNsb3M9dHJ1ZTsgY2xlYXJUaW1lb3V0KGdhcmRlKTsKICAgICAgY29uc3QgcmVzdGU9TWF0aC5tYXgoMCxQTEFOQ0hFUi0oRGF0ZS5ub3coKS10MCkpOwogICAgICBzZXRUaW1lb3V0KCgpPT57IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzpldGF0fSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0scmVzdGUpOyB9OwogICAgY29uc3QgZmluPXBvc2U7CiAgICAvLyBHYXJkZS1mb3UgcsOpc2VhdSA6IGlsIGRvaXQgdG91am91cnMgcmVzdGVyIGF1LWRlbMOgIGRlIFBMQU5DSEVSLgogICAgY29uc3QgZ2FyZGU9c2V0VGltZW91dCgoKT0+eyBjbG9zPXRydWU7IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzonZWNoZWMnfSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0sMTIwMDApOwogICAgY29uc3QgZmQ9bmV3IEZvcm1EYXRhKCk7IGZkLmFwcGVuZCgncmVsZXZlJyxmaWxlKTsKICAgIHZhciBfaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7IGZkLmFwcGVuZCgnYWRyZXNzZV9jb25maXJtYXRpb24nLF9ocD9faHAudmFsdWU6JycpOwogICAgLy8gQXBwZWwgYXN5bmNocm9uZSB2ZXJzIGxlIG1vdGV1ciA6IGF1Y3VuZSBuYXZpZ2F0aW9uIGR1IG5hdmlnYXRldXIuCiAgICB0cnl7CiAgICAgIGNvbnN0IGN0cmw9KHR5cGVvZiBBYm9ydENvbnRyb2xsZXIhPT0ndW5kZWZpbmVkJyk/bmV3IEFib3J0Q29udHJvbGxlcigpOm51bGw7CiAgICAgIGlmKGN0cmwpIHNldFRpbWVvdXQoKCk9Pnt0cnl7Y3RybC5hYm9ydCgpO31jYXRjaChlKXt9fSw2ODAwKTsKICAgICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdScse21ldGhvZDonUE9TVCcsYm9keTpmZCxzaWduYWw6Y3RybD9jdHJsLnNpZ25hbDp1bmRlZmluZWR9KQogICAgICAgIC50aGVuKHI9PnIuanNvbigpLnRoZW4oZD0+KHtzdGF0dXM6ci5zdGF0dXMsZGF0YTpkfSksKCk9Pih7c3RhdHVzOnIuc3RhdHVzLGRhdGE6e319KSkpCiAgICAgICAgLnRoZW4ocmVzPT50aGlzLnJlY2V2b2lyQXBlcmN1KHJlcyxmaW4pKQogICAgICAgIC5jYXRjaCgoKT0+c2V0VGltZW91dCgoKT0+ZmluKCdyZXN1bHRhdCcpLDY1MCkpOwogICAgfWNhdGNoKGVycil7IHNldFRpbWVvdXQoKCk9PmZpbigncmVzdWx0YXQnKSw2NTApOyB9CiAgfQoKCiAgcG9wdXBSZWxldmUobSl7CiAgICAvLyBsZXMgcXVhdHJlIHZhcmlhbnRlcyBjb2hhYml0ZW50IGRhbnMgbGUgbcOqbWUgZG9jdW1lbnQgOiB1bmUgc2V1bGUgZmVuw6p0cmUgw6AgbGEgZm9pcwogICAgaWYodGhpcy5zdGF0ZS5wb3B1cCE9PShtPydtJzonZCcpKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGVsPVJlYWN0LmNyZWF0ZUVsZW1lbnQ7CiAgICBjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIElOSz0nIzFjMjIzMCcsIExJTkU9JyNlNWU3ZWInOwogICAgY29uc3QgU0VSSUY9IidOZXdzcmVhZGVyJywgR2VvcmdpYSwgc2VyaWYiOwogICAgY29uc3QgZmVybWVyPSgpPT50aGlzLnNldFN0YXRlKHtwb3B1cDpmYWxzZSxwb3B1cE1haWxPazpmYWxzZX0pOwogICAgY29uc3QgRVRBUEVTPVsKICAgICAgWydBbGxleiBzdXIgJywnaW5mby1yZXRyYWl0ZS5mcicsJywgb3UgJywnaW5mby1yZXRyYWl0ZS5mcicsJyBzaSB2b3VzIGF2ZXogdG91am91cnMgw6l0w6kgc2FsYXJpw6knXSwKICAgICAgWydDb25uZWN0ZXotdm91cyDDoCB2b3RyZSBlc3BhY2UgcGVyc29ubmVsLCAnLCdGcmFuY2VDb25uZWN0JywnIGZvbmN0aW9ubmUsIGF2ZWMgdm9zIGlkZW50aWZpYW50cyBkZXMgaW1ww7R0cyBvdSBkZSBsXHUyMDE5QXNzdXJhbmNlIG1hbGFkaWUnXSwKICAgICAgWydPdXZyZXogJywnwqtcdTAwYTBNb24gcmVsZXbDqSBkZSBjYXJyacOocmVcdTAwYTDCuycsJycsJycsJyddLAogICAgICBbJ1TDqWzDqWNoYXJnZXogbGUgUERGLCAnLCdzYW5zIGxlIG1vZGlmaWVyIG5pIGxlIHJlbm9tbWVyJywnJywnJywnJ10KICAgIF07CiAgICByZXR1cm4gZWwoJ2Rpdicse29uQ2xpY2s6ZmVybWVyLHN0eWxlOntwb3NpdGlvbjonZml4ZWQnLGluc2V0OjAsekluZGV4OjkwMCxiYWNrZ3JvdW5kOidyZ2JhKDE0LDE5LDc5LDAuNTUpJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOm0/J2ZsZXgtZW5kJzonZmxleC1zdGFydCcsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicscGFkZGluZzptPycwJzonMzJweCcsb3ZlcmZsb3dZOidhdXRvJ319LAogICAgICBlbCgnZGl2Jyx7b25DbGljazplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHN0eWxlOntib3hTaXppbmc6J2JvcmRlci1ib3gnLG1hcmdpbjptPycwJzonYXV0bycsd2lkdGg6JzEwMCUnLG1heFdpZHRoOm0/J25vbmUnOic1NjBweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQsYm94U2hhZG93OicwIDQwcHggOTBweCAtMzBweCByZ2JhKDE0LDE5LDc5LDAuNTUpJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzBweCAzNHB4IDMycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxNnB4JyxtYXhIZWlnaHQ6bT8nOTJ2aCc6J25vbmUnLG92ZXJmbG93WTptPydhdXRvJzondmlzaWJsZSd9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGdhcDonMTZweCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnT8O5IHRyb3V2ZXIgdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUnKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzZweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdFbnZpcm9uIDUgbWludXRlcywgZ3JhdHVpdGVtZW50LCBzdXIgbGUgc2l0ZSBvZmZpY2llbC4nKSksCiAgICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazpmZXJtZXIsJ2FyaWEtbGFiZWwnOidGZXJtZXInLG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNlZWYyZmInO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1OQVZZO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2ZmZmZmZic7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPUxJTkU7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJhY2tncm91bmQ6JyNmZmZmZmYnLGN1cnNvcjoncG9pbnRlcicsZmxleFNocmluazowLHdpZHRoOiczNHB4JyxoZWlnaHQ6JzM0cHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsY29sb3I6TkFWWSxmb250U2l6ZTonMTdweCcsbGluZUhlaWdodDoxLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRyYW5zaXRpb246J2JhY2tncm91bmQgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlJ319LCdcdTAwZDcnKSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LAogICAgICAgICAgRVRBUEVTLm1hcCgoeCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTJweCc6JzE0cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxwYWRkaW5nOm0/JzExcHggMCc6JzEycHggMCcsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FfX0sCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyMXB4Jyxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsY29sb3I6JyNjNDE3M2EnLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJyxtaW5XaWR0aDonMTZweCd9fSxTdHJpbmcoaSsxKSksCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwKICAgICAgICAgICAgICB4WzBdLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbMV0pLHhbMl0seFszXT9lbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzNdKTpudWxsLHhbNF0pKSkpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSwnUmV2ZW5leiBlbnN1aXRlIGljaSBldCBkw6lwb3Nlei1sZS4nKSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzE0cHgnOicxNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LAogICAgICAgICAgdGhpcy5zdGF0ZS5wb3B1cE1haWxPawogICAgICAgICAgICA/IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzVweCd9fSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdDXHUyMDE5ZXN0IGVudm95w6kuJyksCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ1ZvdXMgcmVjZXZleiBsYSBtYXJjaGUgw6Agc3VpdnJlIGRhbnMgdW4gaW5zdGFudC4gUmllbiBkXHUyMDE5YXV0cmUgbmUgdm91cyBzZXJhIGVudm95w6kuJykpCiAgICAgICAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ1ZvdXMgcHLDqWbDqXJleiBsZSBmYWlyZSBwbHVzIHRhcmRcdTAwYTA/JyksCiAgICAgICAgICAgICAgICBlbCgnZm9ybScse29uU3VibWl0OmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGlucD1lLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3RoaXMuZW52b3llck1hcmNoZShpbnA/aW5wLnZhbHVlOicnKTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LAogICAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLGZsZXhTaHJpbms6MCx3aWR0aDptPycxMDAlJzonYXV0bycsbWluV2lkdGg6MCxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLG1pbkhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmVudm95ZXJNYXJjaGUoaW5wP2lucC52YWx1ZTonJyk7fSxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsd2lkdGg6bT8nMTAwJSc6J2F1dG8nLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAyMHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsYm94U2hhZG93OicwIDEycHggMjZweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjYpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJ319LCdFbnZveWV6LW1vaSBsYSBtYXJjaGUgw6Agc3VpdnJlJykpLAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1VuIHNldWwgbWVzc2FnZSwgYXZlYyBsZXMgw6l0YXBlcy4gUmllbiBkXHUyMDE5YXV0cmUuJykpKSkpOwogIH0KCiAgLy8gQW5uw6llcyBkdSByZWxldsOpLCDDoCBhbGltZW50ZXIgcGFyIGxhIHLDqXBvbnNlIGR1IG1vdGV1ci4KICBhbm5lZXNMdWVzKCl7CiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hbm5lZXMgfHwgW1sxOTgyLCcyIHRyaW1lc3RyZXMnXSxbMTk4MywnNCB0cmltZXN0cmVzJ10sWzE5ODQsJzQgdHJpbWVzdHJlcyddLFsxOTg1LCcxIHRyaW1lc3RyZSddLFsxOTg2LCc0IHRyaW1lc3RyZXMnXSxbMTk4NywnNCB0cmltZXN0cmVzJ10sWzE5ODgsJzQgdHJpbWVzdHJlcyddLFsxOTg5LCczIHRyaW1lc3RyZXMnXSxbMTk5MCwnNCB0cmltZXN0cmVzJ10sWzE5OTEsJzQgdHJpbWVzdHJlcyddLFsxOTkyLCc0IHRyaW1lc3RyZXMnXSxbMTk5MywnMiB0cmltZXN0cmVzJ10sWzE5OTQsJzQgdHJpbWVzdHJlcyddLFsxOTk1LCc0IHRyaW1lc3RyZXMnXSxbMTk5NywnNCB0cmltZXN0cmVzJ10sWzE5OTgsJzQgdHJpbWVzdHJlcyddLFsxOTk5LCc0IHRyaW1lc3RyZXMnXSxbMjAwMCwnNCB0cmltZXN0cmVzJ10sWzIwMDEsJzQgdHJpbWVzdHJlcyddLFsyMDAyLCc0IHRyaW1lc3RyZXMnXSxbMjAwMywnNCB0cmltZXN0cmVzJ10sWzIwMDQsJzQgdHJpbWVzdHJlcyddLFsyMDA2LCc0IHRyaW1lc3RyZXMnXSxbMjAwNywnNCB0cmltZXN0cmVzJ10sWzIwMDgsJzQgdHJpbWVzdHJlcyddLFsyMDA5LCc0IHRyaW1lc3RyZXMnXSxbMjAxMCwnNCB0cmltZXN0cmVzJ10sWzIwMTEsJzMgdHJpbWVzdHJlcyddLFsyMDEyLCc0IHRyaW1lc3RyZXMnXSxbMjAxMywnNCB0cmltZXN0cmVzJ10sWzIwMTQsJzQgdHJpbWVzdHJlcyddLFsyMDE1LCc0IHRyaW1lc3RyZXMnXSxbMjAxNiwnNCB0cmltZXN0cmVzJ10sWzIwMTcsJzQgdHJpbWVzdHJlcyddLFsyMDE4LCc0IHRyaW1lc3RyZXMnXSxbMjAxOSwnNCB0cmltZXN0cmVzJ10sWzIwMjAsJzQgdHJpbWVzdHJlcyddLFsyMDIxLCc0IHRyaW1lc3RyZXMnXSxbMjAyMiwnNCB0cmltZXN0cmVzJ10sWzIwMjMsJzQgdHJpbWVzdHJlcyddLFsyMDI0LCc0IHRyaW1lc3RyZXMnXSxbMjAyNSwnNCB0cmltZXN0cmVzJ11dOwogIH0KCiAgY2FwdHVyZU1haWwoKXsKICAgIHRoaXMuc2V0U3RhdGUoe21haWxPazp0cnVlfSk7CiAgICAvLyDDiXbDqW5lbWVudCBkZSBtZXN1cmUsIGF1IG1vbWVudCBvw7kgbCdhZHJlc3NlIGVzdCB2YWxpZMOpZS4KICAgIHRyeXsKICAgICAgaWYodHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnKXsKICAgICAgICBpZih0eXBlb2Ygd2luZG93LmRhdGFMYXllciE9PSd1bmRlZmluZWQnKSB3aW5kb3cuZGF0YUxheWVyLnB1c2goe2V2ZW50OidwcmVhbmFseXNlX2VtYWlsJ30pOwogICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuY2xhcml0eT09PSdmdW5jdGlvbicpIHdpbmRvdy5jbGFyaXR5KCdldmVudCcsJ3ByZWFuYWx5c2VfZW1haWwnKTsKICAgICAgICBpZih0eXBlb2Ygd2luZG93Lmd0YWc9PT0nZnVuY3Rpb24nKSB3aW5kb3cuZ3RhZygnZXZlbnQnLCdwcmVhbmFseXNlX2VtYWlsJyk7CiAgICAgIH0KICAgIH1jYXRjaChlKXt9CiAgfQoKICBvdXZyaXJRdWVzdGlvbnMoKXsKICAgIHRoaXMuc2V0U3RhdGUoe2RpYWc6J3F1ZXN0aW9ucycscUluZGV4OjAscmVwb25zZXM6e319KTsKICB9CgogIHNjcm9sbFRvRGlhZyhldil7CiAgICAvLyBsYSBtYXF1ZXR0ZSByZW5kIGxlcyBxdWF0cmUgdmFyaWFudGVzIGRhbnMgbGUgbcOqbWUgZG9jdW1lbnQgOgogICAgLy8gb24gcGFydCBkdSBib3V0b24gY2xpcXXDqSBwb3VyIHJlc3RlciBkYW5zIGxhIGJvbm5lIGNvbG9ubmUuCiAgICBjb25zdCBzcmM9ZXYmJmV2LmN1cnJlbnRUYXJnZXQ7CiAgICBpZihzcmMpewogICAgICBsZXQgcz1zcmMucGFyZW50RWxlbWVudDsKICAgICAgd2hpbGUocyYmZ2V0Q29tcHV0ZWRTdHlsZShzKS5vdmVyZmxvd1khPT0nYXV0bycpIHM9cy5wYXJlbnRFbGVtZW50OwogICAgICB0aGlzLl9zYz1zfHxudWxsOyB0aGlzLl9zcmM9c3JjOwogICAgfQogICAgc2V0VGltZW91dCgoKT0+ewogICAgICBjb25zdCByYWNpbmU9dGhpcy5fc2N8fGRvY3VtZW50OwogICAgICBjb25zdCB0Z3Q9cmFjaW5lLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpYWddJyl8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRpYWddJyk7CiAgICAgIGlmKCF0Z3QpIHJldHVybjsKICAgICAgbGV0IHNjPXRoaXMuX3NjOwogICAgICBpZighc2MpeyBzYz10Z3QucGFyZW50RWxlbWVudDsgd2hpbGUoc2MmJmdldENvbXB1dGVkU3R5bGUoc2MpLm92ZXJmbG93WSE9PSdhdXRvJykgc2M9c2MucGFyZW50RWxlbWVudDsgfQogICAgICBpZihzYyl7CiAgICAgICAgc2MucXVlcnlTZWxlY3RvckFsbCgnc2VjdGlvbicpLmZvckVhY2gocz0+e3Muc3R5bGUub3BhY2l0eT0nMSc7cy5zdHlsZS5hbmltYXRpb249J25vbmUnO3MuZGF0YXNldC5ydj0nMSc7fSk7CiAgICAgICAgY29uc3QgdG9wPXRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Atc2MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3NjLnNjcm9sbFRvcDsKICAgICAgICBzYy5zY3JvbGxUbyh7dG9wOnRvcC0xNCxiZWhhdmlvcjonc21vb3RoJ30pOwogICAgICB9ZWxzZXsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDp0Z3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK3dpbmRvdy5zY3JvbGxZLTE0LGJlaGF2aW9yOidzbW9vdGgnfSk7CiAgICAgIH0KICAgIH0sNjApOwogIH0KCiAgLy8gPT09PT0gUExPTUJFUklFIEPDgkJMw4lFIEFVIENPTlRSQVQgKGdhZ25lIHN1ciBsZXMgZG91YmxvbnMgbW9jayBjaS1kZXNzdXMpID09PT09CiAgbGlyZVJlbGV2ZShmaWxlKXsKICAgIGlmKCFmaWxlKSByZXR1cm47CiAgICBpZihmaWxlLnNpemU9PT0wKXsgdGhpcy5fZWNoZWMoJ3ZpZGUnKTsgcmV0dXJuOyB9CiAgICB2YXIgc2VsZj10aGlzOwogICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOyBpZih0aGlzLl9nYXJkZSkgY2xlYXJUaW1lb3V0KHRoaXMuX2dhcmRlKTsKICAgIGlmKHRoaXMuX2hvbGRUaW1lb3V0KXtjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO3RoaXMuX2hvbGRUaW1lb3V0PW51bGw7fQogICAgdGhpcy5fbWFpbFRvdWNoZWQ9ZmFsc2U7IHRoaXMuX2RlZmlsZUZpbmk9ZmFsc2U7IHRoaXMuX2hvbGRSZXN1bHQ9ZmFsc2U7CiAgICB0aGlzLmFwZXJjdT1udWxsOyB0aGlzLmpldG9uQ291cmFudD0nJzsKICAgIHRoaXMuc2V0U3RhdGUoe2RpYWc6J2xlY3R1cmUnLCBwaGFzZTonYW5hbHlzZScsIG5vbTpmaWxlLm5hbWUsIGFubmVlczpudWxsLCBhbm5lZTowLCBtYWlsT2s6ZmFsc2UsIG1haWxFcnI6bnVsbCwgZWNoZWNNc2c6bnVsbH0pOwogICAgdGhpcy5zY3JvbGxUb0RpYWcoKTsKICAgIG10cmFjaygncHJlYW5hbHlzZV9zdGFydCcse30pOwogICAgdmFyIHQwPURhdGUubm93KCk7CiAgICB0aGlzLl9nYXJkZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNlbGYuX2VjaGVjKCdwYW5uZScpOyB9LCAxNTAwMCk7CiAgICB2YXIgZmQ9bmV3IEZvcm1EYXRhKCk7CiAgICBmZC5hcHBlbmQoJ3JlbGV2ZScsIGZpbGUpOwogICAgdmFyIGhwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhZGNmLWxlY3R1cmUgaW5wdXRbbmFtZT0iYWRyZXNzZV9jb25maXJtYXRpb24iXScpOwogICAgZmQuYXBwZW5kKCdhZHJlc3NlX2NvbmZpcm1hdGlvbicsIGhwP2hwLnZhbHVlOicnKTsKICAgIG10cmFjaygncHJlYW5hbHlzZV91cGxvYWQnLHt9KTsKICAgIGZldGNoKCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy9hcGVyY3UnLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4ge3N0YXR1czpyLnN0YXR1cyxkYXRhOmR9O30sIGZ1bmN0aW9uKCl7cmV0dXJuIHtzdGF0dXM6ci5zdGF0dXMsZGF0YTp7fX07fSk7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYoc2VsZi5fZ2FyZGUpIGNsZWFyVGltZW91dChzZWxmLl9nYXJkZSk7CiAgICAgICAgdmFyIHJlc3RlPU1hdGgubWF4KDAsIDEzMDAtKERhdGUubm93KCktdDApKTsgLy8gbGFpc3NlciB2b2lyIGwnZWNyYW4gZCdhbmFseXNlIHVuIGNvdXJ0IGluc3RhbnQKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNlbGYucmVjZXZvaXJBcGVyY3UyKHJlcyk7IH0sIHJlc3RlKTsKICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IGlmKHNlbGYuX2dhcmRlKSBjbGVhclRpbWVvdXQoc2VsZi5fZ2FyZGUpOyBzZWxmLl9lY2hlYygncGFubmUnKTsgfSk7CiAgfQogIHJlY2V2b2lyQXBlcmN1MihyZXMpewogICAgdmFyIHNlbGY9dGhpcywgc3Q9cmVzLnN0YXR1cywgZD1yZXMuZGF0YXx8e307CiAgICBpZihzdD09PTQwMCkgcmV0dXJuIHRoaXMuX2VjaGVjKCdzYW5zX2ZpY2hpZXInKTsKICAgIGlmKHN0PT09NDEzKSByZXR1cm4gdGhpcy5fZWNoZWMoJ3Ryb3BfZ3JvcycpOwogICAgaWYoc3Q9PT00MjkpIHJldHVybiB0aGlzLl9lY2hlYygndHJvcF9kZV9kZW1hbmRlcycpOwogICAgaWYoc3Q9PT01MDMpIHJldHVybiB0aGlzLl9lY2hlYygndHJvcF9kZV9tb25kZScpOwogICAgaWYoc3Q+PTUwMCkgcmV0dXJuIHRoaXMuX2VjaGVjKCdwYW5uZScpOwogICAgaWYoZCAmJiBkLmV0YXQ9PT0ncGFzX3VuX3JlbGV2ZScpeyB0aGlzLmpldG9uQ291cmFudD1kLmpldG9ufHwnJzsgdGhpcy5hcGVyY3U9ZDsKICAgICAgICAgIC8vIFVuIFBERiBzYW5zIHRleHRlIGVzdCBsZSBib24gZG9jdW1lbnQgbWFsIG51bcOpcmlzw6kgOiBpbCBwYXJ0IHN1ciBsJ8OpY3JhbiBkZSByZXByaXNlLgogICAgICAgICAgdmFyIF9zYW5zVGV4dGU9KGQuZG9jdW1lbnQ9PT0ndW4gZG9jdW1lbnQgc2Nhbm7DqSBvdSBwaG90b2dyYXBoacOpJyk7CiAgICAgICAgICBtdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLHttb3RpZjpfc2Fuc1RleHRlPydsZWN0dXJlX25vbl9maWFibGUnOidtYXV2YWlzX2ZpY2hpZXInLCBzZXJ2ZXVyOlN0cmluZyhkLm1vdGlmfHxkLmV0YXR8fCcnKX0pOwogICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7amV0b246ZC5qZXRvbnx8JycsIGRpYWc6X3NhbnNUZXh0ZT8naWxsaXNpYmxlJzoncGFzX3JlbGV2ZSd9KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgcmV0dXJuOyB9CiAgICBpZihkICYmIGQuZXRhdD09PSdsZWN0dXJlX25vbl9maWFibGUnKXsgdGhpcy5qZXRvbkNvdXJhbnQ9ZC5qZXRvbnx8Jyc7IHRoaXMuYXBlcmN1PWQ7IG10cmFjaygncHJlYW5hbHlzZV9lY2hlYycse21vdGlmOidsZWN0dXJlX25vbl9maWFibGUnLCBzZXJ2ZXVyOidsZWN0dXJlX25vbl9maWFibGUnfSk7IHRoaXMuc2V0U3RhdGUoe2pldG9uOmQuamV0b258fCcnLCBkaWFnOidpbGxpc2libGUnfSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IHJldHVybjsgfSBpZihkICYmIGQuZXRhdD09PSdpbGxpc2libGUnKXsgbXRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJyx7bW90aWY6J21hdXZhaXNfZmljaGllcicsIHNlcnZldXI6J2lsbGlzaWJsZSd9KTsgcmV0dXJuIHRoaXMuX2VjaGVjKCdwZGZfaWxsaXNpYmxlJyk7IH0gaWYoZCAmJiBkLmV0YXQ9PT0ndGV4dGVfaW50ZXJkaXQnKXsgbXRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJyx7bW90aWY6J2xlY3R1cmVfbm9uX2ZpYWJsZScsIHNlcnZldXI6J3RleHRlX2ludGVyZGl0J30pOyByZXR1cm4gdGhpcy5fZWNoZWMoJ2luY2lkZW50Jyk7IH0gaWYoZCAmJiBkLmV0YXQ9PT0ncGFubmUnKXsgcmV0dXJuIHRoaXMuX2VjaGVjKCdwYW5uZScpOyB9CiAgICBpZighZCB8fCAhZC5hbm5lZXMpeyByZXR1cm4gdGhpcy5fZWNoZWMoJ3Bhbm5lJyk7IH0KICAgIHRoaXMuYXBlcmN1PWQ7IHRoaXMuamV0b25Db3VyYW50PWQuamV0b258fCcnOwogICAgdmFyIGFycj10aGlzLmZvcm1hdEFubmVlcyhkLmFubmVlcyl8fFtdOwogICAgdGhpcy5zZXRTdGF0ZSh7YXBlcmN1OmQsIGpldG9uOmQuamV0b258fCcnLCBhbm5lZXM6YXJyLCBwaGFzZTonZGVmaWxlJywgYW5uZWU6MH0pOwogICAgbXRyYWNrKCdwcmVhbmFseXNlX3Jlc3VsdCcse3N1amV0czooZC5zdWpldHMmJmQuc3VqZXRzLnRvdGFsKXx8MCwgdHJpbWVzdHJlczooZC5jaGlmZnJlcyYmZC5jaGlmZnJlcy50cmltZXN0cmVzX3JlY3VwZXJhYmxlcyl8fDB9KTsKICAgIHZhciB0b3RhbD1hcnIubGVuZ3RoOwogICAgaWYodG90YWw8PTQpeyB0aGlzLnNldFN0YXRlKHtkaWFnOidyZXN1bHRhdCd9KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgcmV0dXJuOyB9CiAgICB2YXIgcGFzPXRvdGFsLTMsIHQxPURhdGUubm93KCksIERVUj1NYXRoLm1pbigxMDAwMCwgTWF0aC5tYXgoODAwMCwgcGFzKjIwMCkpOwogICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgdGhpcy5fZGVmaWxlPXNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgIHZhciBhdj1NYXRoLm1pbihwYXMtMSwgTWF0aC5mbG9vcigoRGF0ZS5ub3coKS10MSkvRFVSKnBhcykpOwogICAgICBzZWxmLnNldFN0YXRlKHthbm5lZTphdn0pOwogICAgICBpZihhdj49cGFzLTEpeyBjbGVhckludGVydmFsKHNlbGYuX2RlZmlsZSk7IHNlbGYuX2RlZmlsZUZpbmk9dHJ1ZTsgc2VsZi5fcGV1dEFmZmljaGVyUmVzdWx0YXQoKTsgfQogICAgfSwgOTApOwogIH0KICBmb3JtYXRBbm5lZXMoYXJyKXsKICAgIGlmKCFhcnIgfHwgIWFyci5sZW5ndGgpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24oYSl7CiAgICAgIGlmKGEuYWJzZW50ZSkgcmV0dXJuIFthLmFubmVlLCAnYWJzZW50ZSBkZSB2b3RyZSByZWxldsOpJ107CiAgICAgIHZhciB0PShhLnRyaW1lc3RyZXM9PW51bGwpPzA6YS50cmltZXN0cmVzOwogICAgICByZXR1cm4gW2EuYW5uZWUsIHQrJyB0cmltZXN0cmUnKyh0PjE/J3MnOicnKV07CiAgICB9KTsKICB9CiAgX2VjaGVjKG1zZyl7IHRyeXsgbXRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJyx7bW90aWY6KG1zZz09PSdzYW5zX2ZpY2hpZXInfHxtc2c9PT0ndHJvcF9ncm9zJ3x8bXNnPT09J3ZpZGUnKT8nbWF1dmFpc19maWNoaWVyJzonbGVjdHVyZV9ub25fZmlhYmxlJ30pOyB9Y2F0Y2goZSl7fSBpZih0aGlzLl9nYXJkZSkgY2xlYXJUaW1lb3V0KHRoaXMuX2dhcmRlKTsgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOyB0aGlzLnNldFN0YXRlKHtkaWFnOidlY2hlYycsIGVjaGVjTXNnOm1zZ30pOyB0aGlzLnNjcm9sbFRvRGlhZygpOyB9CiAgX3BldXRBZmZpY2hlclJlc3VsdGF0KCl7CiAgICB2YXIgc2VsZj10aGlzOwogICAgaWYoIXRoaXMuX2RlZmlsZUZpbmkpIHJldHVybjsKICAgIC8vIFNpIGVsbGUgYSBjb21tZW5jw6kgw6Agc2Fpc2lyIHNvbiBtYWlsIHNhbnMgbGUgdmFsaWRlciA6IG9uIFJFVElFTlQgbGUgcsOpc3VsdGF0IGxlIHRlbXBzIHF1J2VsbGUgdmFsaWRlLgogICAgaWYodGhpcy5fbWFpbFRvdWNoZWQgJiYgIXRoaXMuc3RhdGUubWFpbE9rKXsKICAgICAgdGhpcy5faG9sZFJlc3VsdD10cnVlOwogICAgICBpZighdGhpcy5faG9sZFRpbWVvdXQpeyB0aGlzLl9ob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNlbGYuX2hvbGRSZXN1bHQ9ZmFsc2U7IHNlbGYuX2hvbGRUaW1lb3V0PW51bGw7IHNlbGYuc2V0U3RhdGUoe2RpYWc6J3Jlc3VsdGF0J30pOyBzZWxmLnNjcm9sbFRvRGlhZygpOyB9LCAyMjAwMCk7IH0gLy8gZmlsZXQgOiBvbiBuJ2VuZmVybWUgamFtYWlzCiAgICAgIHJldHVybjsKICAgIH0KICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2VsZi5zZXRTdGF0ZSh7ZGlhZzoncmVzdWx0YXQnfSk7IHNlbGYuc2Nyb2xsVG9EaWFnKCk7IH0sIDQ1MCk7CiAgfQogIGVudm95ZXJNYXJjaGUoZW1haWwsb3JpZ2luZSl7CiAgICB2YXIgc2VsZj10aGlzOwogICAgdmFyIGNoYW1wPShvcmlnaW5lPT09J3F1ZXN0aW9ucycpPydtYXJjaGVPayc6J3BvcHVwTWFpbE9rJzsKICAgIGVtYWlsPShlbWFpbHx8JycpLnRyaW0oKTsKICAgIHZhciBvaz17fTsgb2tbY2hhbXBdPXRydWU7IG9rLnBvcHVwTWFpbEVycj1udWxsOyB0aGlzLnNldFN0YXRlKG9rKTsKICAgIG10cmFjaygncHJlYW5hbHlzZV9lbWFpbCcse29yaWdpbmU6b3JpZ2luZXx8J3BvcHVwJ30pOwogICAgaWYoIWVtYWlsIHx8IGVtYWlsLmluZGV4T2YoJ0AnKTwxKXsgdmFyIGtvPXt9OyBrb1tjaGFtcF09ZmFsc2U7IHRoaXMuc2V0U3RhdGUoa28pOyByZXR1cm47IH0KICAgIHZhciBocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1sZWN0dXJlIGlucHV0W25hbWU9ImFkcmVzc2VfY29uZmlybWF0aW9uIl0nKTsKICAgIHZhciBib2R5PSdjb3VycmllbD0nK2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCkrJyZhZHJlc3NlX2NvbmZpcm1hdGlvbj0nK2VuY29kZVVSSUNvbXBvbmVudChocD9ocC52YWx1ZTonJykrJyZvcmlnaW5lPScrZW5jb2RlVVJJQ29tcG9uZW50KG9yaWdpbmV8fCdwb3B1cCcpKycmcHJvZmlsPScrZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUucmVwb25zZXN8fHt9KSk7CiAgICBmZXRjaCgnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvYXBlcmN1L21hcmNoZS1hLXN1aXZyZScsIHttZXRob2Q6J1BPU1QnLCBoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sIGJvZHk6Ym9keX0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4ge3M6ci5zdGF0dXMsZDpkfTt9LCBmdW5jdGlvbigpe3JldHVybiB7czpyLnN0YXR1cyxkOnt9fTt9KTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24oeCl7IGlmKHgucz09PTQwMCAmJiB4LmQgJiYgeC5kLmV0YXQ9PT0nYWRyZXNzZV9pbnZhbGlkZScpeyBzZWxmLnNldFN0YXRlKHtwb3B1cE1haWxPazpmYWxzZX0pOyB9IH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbigpe30pOwogIH0KICBzb3VtZXR0cmVRdWVzdGlvbnMocmVwKXsKICAgIHZhciBzZWxmPXRoaXM7IHJlcD1yZXB8fHt9OwogICAgdmFyIGhwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhZGNmLWxlY3R1cmUgaW5wdXRbbmFtZT0iYWRyZXNzZV9jb25maXJtYXRpb24iXScpOwogICAgdmFyIHNleGU9KHJlcC5zZXhlPT09J1VuZSBmZW1tZScpPydGJzoocmVwLnNleGU9PT0nVW4gaG9tbWUnPydIJzonJyk7CiAgICB2YXIgcGVyPUFycmF5LmlzQXJyYXkocmVwLnBlcmlvZGVzKT9yZXAucGVyaW9kZXMuam9pbignLCcpOicnOwogICAgdmFyIGVuZj0ocmVwLmVuZmFudHMhPW51bGwmJnJlcC5lbmZhbnRzIT09JycpP3JlcC5lbmZhbnRzOjA7CiAgICB2YXIgYm9keT0nYW5uZWVfbmFpc3NhbmNlPScrZW5jb2RlVVJJQ29tcG9uZW50KHJlcC5hbm5lZV9uYWlzc2FuY2V8fCcnKSsnJnNleGU9JytlbmNvZGVVUklDb21wb25lbnQoc2V4ZSkrJyZhbm5lZV9kZWJ1dD0nK2VuY29kZVVSSUNvbXBvbmVudChyZXAuYW5uZWVfZGVidXR8fCcnKSsnJmVuZmFudHM9JytlbmNvZGVVUklDb21wb25lbnQoZW5mKSsnJnRlbXBzX3BhcnRpZWw9JytlbmNvZGVVUklDb21wb25lbnQocmVwLnRlbXBzX3BhcnRpZWw9PT0nT3VpJz8nb3VpJzonbm9uJykrJyZwZXJpb2Rlcz0nK2VuY29kZVVSSUNvbXBvbmVudChwZXIpKycmYWRyZXNzZV9jb25maXJtYXRpb249JytlbmNvZGVVUklDb21wb25lbnQoaHA/aHAudmFsdWU6JycpOwogICAgdGhpcy5zZXRTdGF0ZSh7cUVudm9pOnRydWUscUVycjpudWxsLHFEYXRhOm51bGx9KTsgdmFyIF9zZWxmPXRoaXM7IHZhciBfZ2FyZGU9c2V0VGltZW91dChmdW5jdGlvbigpeyBpZihfc2VsZi5zdGF0ZS5xRW52b2kpIF9zZWxmLnNldFN0YXRlKHtxRW52b2k6ZmFsc2UscUVycjonZW52b2knfSk7IH0sMTIwMDApOwogICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdS9xdWVzdGlvbnMnLHttZXRob2Q6J1BPU1QnLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSxib2R5OmJvZHl9KQogICAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpLnRoZW4oZnVuY3Rpb24oZCl7cmV0dXJuIHtzOnIuc3RhdHVzLGQ6ZH07fSxmdW5jdGlvbigpe3JldHVybiB7czpyLnN0YXR1cyxkOnt9fTt9KTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24oeCl7IGlmKHgucz49MjAwJiZ4LnM8MzAwJiZ4LmQpeyBzZWxmLmpldG9uQ291cmFudD14LmQuamV0b258fCcnOyBjbGVhclRpbWVvdXQoX2dhcmRlKTsgc2VsZi5zZXRTdGF0ZSh7amV0b246eC5kLmpldG9ufHwnJyxxRGF0YTp4LmQscUVudm9pOmZhbHNlLHFFcnI6bnVsbH0pOyBzZWxmLnNjcm9sbFRvRGlhZygpOyB0cnl7IG10cmFjaygncXVlc3Rpb25zX3Jlc3VsdGF0Jyx7bWFycXVlZXM6eC5kLm1hcnF1ZWVzfHwwfSk7IH1jYXRjaChlKXt9IHJldHVybjsgfSBjbGVhclRpbWVvdXQoX2dhcmRlKTsgc2VsZi5zZXRTdGF0ZSh7cUVudm9pOmZhbHNlLHFFcnI6J2Vudm9pJ30pOyB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgY2xlYXJUaW1lb3V0KF9nYXJkZSk7IHNlbGYuc2V0U3RhdGUoe3FFbnZvaTpmYWxzZSxxRXJyOidlbnZvaSd9KTsgfSk7CiAgfQoKICBkZXZlcnJvdWlsbGVyKGVtYWlsKXsKICAgIHZhciBzZWxmPXRoaXM7IGVtYWlsPShlbWFpbHx8JycpLnRyaW0oKTsKICAgIGlmKCFlbWFpbCB8fCBlbWFpbC5pbmRleE9mKCdAJyk8MSl7IHRoaXMuc2V0U3RhdGUoe21haWxPazpmYWxzZSxtYWlsRXJyOidhZHJlc3NlX2ludmFsaWRlJ30pOyByZXR1cm47IH0KICAgIHRoaXMuc2V0U3RhdGUoe21haWxFcnI6bnVsbH0pOwogICAgdmFyIGpldG9uPXRoaXMuamV0b25Db3VyYW50fHx0aGlzLnN0YXRlLmpldG9ufHwnJzsKICAgIGZldGNoKCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy9hcGVyY3UvY291cnJpZWwnLHttZXRob2Q6J1BPU1QnLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSxib2R5OignamV0b249JytlbmNvZGVVUklDb21wb25lbnQoamV0b24pKycmY291cnJpZWw9JytlbmNvZGVVUklDb21wb25lbnQoZW1haWwpKycmYWRyZXNzZV9jb25maXJtYXRpb249JytlbmNvZGVVUklDb21wb25lbnQoKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhZGNmLWxlY3R1cmUgaW5wdXRbbmFtZT0iYWRyZXNzZV9jb25maXJtYXRpb24iXScpfHx7fSkudmFsdWV8fCcnKSl9KQogICAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpLnRoZW4oZnVuY3Rpb24oZCl7cmV0dXJuIHtzOnIuc3RhdHVzLGQ6ZH07fSxmdW5jdGlvbigpe3JldHVybiB7czpyLnN0YXR1cyxkOnt9fTt9KTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24oeCl7IGlmKHgucz49MjAwJiZ4LnM8MzAwJiZ4LmQmJnguZC5ldGF0PT09J29rJyl7IGlmKHguZC5hcGVyY3UpeyBzZWxmLmFwZXJjdT14LmQuYXBlcmN1OyB9IHNlbGYuc2V0U3RhdGUoe2FwZXJjdTpzZWxmLmFwZXJjdSxtYWlsT2s6dHJ1ZSxtYWlsRXJyOm51bGx9KTsgdHJ5eyBtdHJhY2soJ3ByZWFuYWx5c2VfZW1haWwnLHt9KTsgfWNhdGNoKGUpe30gcmV0dXJuOyB9IHNlbGYuc2V0U3RhdGUoe21haWxPazpmYWxzZSxtYWlsRXJyOidlbnZvaSd9KTsgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IHNlbGYuc2V0U3RhdGUoe21haWxPazpmYWxzZSxtYWlsRXJyOidlbnZvaSd9KTsgfSk7CiAgfQoKICBwcmV2ZW5pcihlbWFpbCl7CiAgICB2YXIgc2VsZj10aGlzOyBlbWFpbD0oZW1haWx8fCcnKS50cmltKCk7CiAgICBpZighZW1haWwgfHwgZW1haWwuaW5kZXhPZignQCcpPDEpeyB0aGlzLnNldFN0YXRlKHttYWlsT2s6ZmFsc2UsbWFpbEVycjonYWRyZXNzZV9pbnZhbGlkZSd9KTsgcmV0dXJuOyB9CiAgICB0aGlzLnNldFN0YXRlKHttYWlsRXJyOm51bGx9KTsKICAgIHZhciBqZXRvbj10aGlzLmpldG9uQ291cmFudHx8dGhpcy5zdGF0ZS5qZXRvbnx8Jyc7CiAgICB2YXIgaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7CiAgICB2YXIgYm9keT0namV0b249JytlbmNvZGVVUklDb21wb25lbnQoamV0b24pKycmY291cnJpZWw9JytlbmNvZGVVUklDb21wb25lbnQoZW1haWwpKycmYWRyZXNzZV9jb25maXJtYXRpb249JytlbmNvZGVVUklDb21wb25lbnQoaHA/aHAudmFsdWU6JycpOwogICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdS9wcmV2ZW5pcicse21ldGhvZDonUE9TVCcsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LGJvZHk6Ym9keX0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyBpZihyLnN0YXR1cz49MjAwJiZyLnN0YXR1czwzMDApeyBzZWxmLnNldFN0YXRlKHttYWlsT2s6dHJ1ZSxtYWlsRXJyOm51bGx9KTsgdHJ5eyBtdHJhY2soJ3ByZWFuYWx5c2VfZW1haWwnLHt9KTsgfWNhdGNoKGUpe30gfSBlbHNlIHsgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLG1haWxFcnI6J2Vudm9pJ30pOyB9IH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbigpeyBzZWxmLnNldFN0YXRlKHttYWlsT2s6ZmFsc2UsbWFpbEVycjonZW52b2knfSk7IH0pOwogIH0KCiAgY2FwdHVyZU1haWwoZW1haWwpewogICAgdmFyIHNlbGY9dGhpczsKICAgIGVtYWlsPShlbWFpbHx8JycpLnRyaW0oKTsKICAgIGlmKCFlbWFpbCB8fCBlbWFpbC5pbmRleE9mKCdAJyk8MSl7IHRoaXMuc2V0U3RhdGUoe21haWxPazpmYWxzZSwgbWFpbEVycjonYWRyZXNzZV9pbnZhbGlkZSd9KTsgcmV0dXJuOyB9CiAgICB0aGlzLnNldFN0YXRlKHttYWlsRXJyOm51bGx9KTsKICAgIGlmKHRoaXMuX2hvbGRSZXN1bHQpeyB0aGlzLl9ob2xkUmVzdWx0PWZhbHNlOyBpZih0aGlzLl9ob2xkVGltZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTt0aGlzLl9ob2xkVGltZW91dD1udWxsO30gc2V0VGltZW91dChmdW5jdGlvbigpeyBzZWxmLnNldFN0YXRlKHtkaWFnOidyZXN1bHRhdCd9KTsgc2VsZi5zY3JvbGxUb0RpYWcoKTsgfSwgNTUwKTsgfQogICAgdmFyIGpldG9uPXRoaXMuamV0b25Db3VyYW50fHx0aGlzLnN0YXRlLmpldG9ufHwnJzsKICAgIHZhciBocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1sZWN0dXJlIGlucHV0W25hbWU9ImFkcmVzc2VfY29uZmlybWF0aW9uIl0nKTsKICAgIHZhciBib2R5PSdqZXRvbj0nK2VuY29kZVVSSUNvbXBvbmVudChqZXRvbikrJyZjb3VycmllbD0nK2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCkrJyZhZHJlc3NlX2NvbmZpcm1hdGlvbj0nK2VuY29kZVVSSUNvbXBvbmVudChocD9ocC52YWx1ZTonJyk7CiAgICBmZXRjaCgnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvYXBlcmN1L2NvdXJyaWVsJywge21ldGhvZDonUE9TVCcsIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwgYm9keTpib2R5fSkKICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiB7czpyLnN0YXR1cyxkOmR9O30sIGZ1bmN0aW9uKCl7cmV0dXJuIHtzOnIuc3RhdHVzLGQ6e319O30pOyB9KQogICAgICAudGhlbihmdW5jdGlvbih4KXsKICAgICAgICBpZih4LnM9PT00MDAgJiYgeC5kICYmIHguZC5ldGF0PT09J2FkcmVzc2VfaW52YWxpZGUnKXsgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLCBtYWlsRXJyOidhZHJlc3NlX2ludmFsaWRlJ30pOyByZXR1cm47IH0KICAgICAgICBpZih4LnM+PTIwMCAmJiB4LnM8MzAwKXsgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOnRydWUsIG1haWxFcnI6bnVsbH0pOyB0cnl7IGlmKHR5cGVvZiB3aW5kb3cuZ3RhZz09PSdmdW5jdGlvbicpIHdpbmRvdy5ndGFnKCdldmVudCcsJ3ByZWFuYWx5c2VfZW1haWwnKTsgZWxzZSBpZih3aW5kb3cuZGF0YUxheWVyKSB3aW5kb3cuZGF0YUxheWVyLnB1c2goe2V2ZW50OidwcmVhbmFseXNlX2VtYWlsJ30pOyB9Y2F0Y2goZSl7fSByZXR1cm47IH0KICAgICAgICBzZWxmLnNldFN0YXRlKHttYWlsT2s6ZmFsc2UsIG1haWxFcnI6J2Vudm9pJ30pOwogICAgICB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLCBtYWlsRXJyOidlbnZvaSd9KTsgfSk7CiAgfQoKfQoKdmFyIGFkY2YgPSBuZXcgTGVjdHVyZSgpOwp0cnl7IHdpbmRvdy5fX2FkY2ZMZWN0dXJlID0gYWRjZjsgfWNhdGNoKGUpe30KYWRjZi5wcm9wcyA9IHt9OwphZGNmLm1vYmlsZSA9IGZhbHNlOwoKLyogTGllbiBkZSByZXRvdXIgZS1tYWlsIDogP2FwZXJjdT08amV0b24+IHJlY2hhcmdlIGxhIHByw6ktYW5hbHlzZSBldCBhZmZpY2hlIGxlIHLDqXN1bHRhdCAqLwp0cnl7IHZhciBfYXBVPW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCgnYXBlcmN1Jyl8fChmdW5jdGlvbigpe3RyeXtyZXR1cm4gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWRjZl9hcGVyY3UnKTt9Y2F0Y2goZSl7cmV0dXJuIG51bGw7fX0pKCk7IGlmKF9hcFUpeyBmZXRjaCgnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvYXBlcmN1LycrZW5jb2RlVVJJQ29tcG9uZW50KF9hcFUpLHttZXRob2Q6J0dFVCd9KS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiB7czpyLnN0YXR1cyxkOmR9O30sZnVuY3Rpb24oKXtyZXR1cm4ge3M6ci5zdGF0dXMsZDp7fX07fSk7fSkudGhlbihmdW5jdGlvbih4KXsgaWYoeC5zPj0yMDAmJnguczwzMDAmJnguZCYmeC5kLmFubmVlcyl7IGFkY2YuYXBlcmN1PXguZDsgYWRjZi5qZXRvbkNvdXJhbnQ9KHguZC5qZXRvbnx8X2FwVSk7IHRyeXsgbXRyYWNrKCdhcGVyY3Vfb3Blbicse3ZpYTonbGllbl9lbWFpbCd9KTsgfWNhdGNoKGUpe30gYWRjZi5zZXRTdGF0ZSh7YXBlcmN1OnguZCxqZXRvbjooeC5kLmpldG9ufHxfYXBVKSxkaWFnOidyZXN1bHRhdCd9KTsgdHJ5e2FkY2Yuc2Nyb2xsVG9EaWFnKCk7fWNhdGNoKGUpe30gfSB9KS5jYXRjaChmdW5jdGlvbigpe30pOyB9IH1jYXRjaChlKXt9CgpmdW5jdGlvbiBlbnN1cmUoKXsgdmFyIGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkY2YtbGVjdHVyZScpfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1sZWN0dXJlLWhlcm8nKTsgaWYoaCAmJiBoIT09YWRjZi5faG9zdCl7IHRyeXsgYWRjZi5tb3VudCgpOyB9Y2F0Y2goZSl7fSB9IH0KaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGVuc3VyZSk7CmVsc2UgZW5zdXJlKCk7CnRyeXsgaWYodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIhPT0ndW5kZWZpbmVkJykgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZW5zdXJlKS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7Y2hpbGRMaXN0OnRydWUsc3VidHJlZTp0cnVlfSk7IH1jYXRjaChlKXt9Cgp2YXIgX3Q7CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbigpewogIGNsZWFyVGltZW91dChfdCk7CiAgX3QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGlmIChhZGNmLm1vYmlsZSAhPT0gKHdpbmRvdy5pbm5lcldpZHRoIDwgQlJFQUspKSBhZGNmLm1vdW50KCk7IH0sIDE2MCk7Cn0pOwoKfSkoKTsK