DQooZnVuY3Rpb24oKXsNCiJ1c2Ugc3RyaWN0IjsNCmlmICh3aW5kb3cuX19BRENGX0xPQURFRF9fKSByZXR1cm47DQp3aW5kb3cuX19BRENGX0xPQURFRF9fID0gdHJ1ZTsNCg0KdmFyIFNUUklQRSA9ICdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8/dXRtX3NvdXJjZT1hZGNmJnV0bV9tZWRpdW09cGFnZS12ZW50ZSZ1dG1fY2FtcGFpZ249YW5hbHlzZS1yZWxldmUnOw0KdHJ5eyB3aW5kb3cuX19BRENGX1NUUklQRV9fID0gU1RSSVBFOyB9Y2F0Y2goZSl7fQ0KdHJ5eyB3aW5kb3cuX19BRENGX1BSSVhfXyA9ICcyNDkg4oKsIFRUQyc7IH1jYXRjaChlKXt9DQp2YXIgUEhPVE8gID0gJ2h0dHBzOi8vd3d3LmFkY2Yub3JnL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAzL3Bob3RvLWxlb25hcmQtZGVpLmpwZyc7DQoNCnZhciBCUkVBSyA9IDEwMjQ7DQp2YXIgVU5JVExFU1MgPSB7b3BhY2l0eToxLHpJbmRleDoxLGZvbnRXZWlnaHQ6MSxsaW5lSGVpZ2h0OjEsZmxleDoxLGZsZXhHcm93OjEsZmxleFNocmluazoxLG9yZGVyOjEsc3Ryb2tlV2lkdGg6MSxmaWxsT3BhY2l0eToxLHN0cm9rZU9wYWNpdHk6MSxwYXRoTGVuZ3RoOjF9Ow0KdmFyIFNWR1RBR1MgPSB7c3ZnOjEscGF0aDoxLGxpbmU6MSxjaXJjbGU6MSxyZWN0OjEsdGV4dDoxLGc6MSxkZWZzOjEscG9seWxpbmU6MSxwb2x5Z29uOjEsZWxsaXBzZToxLHRzcGFuOjF9Ow0KdmFyIFNWR0NBTUVMID0ge3ZpZXdCb3g6MSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOjEscGF0dGVyblVuaXRzOjEsZ3JhZGllbnRVbml0czoxLGdyYWRpZW50VHJhbnNmb3JtOjEsY2xpcFBhdGg6MSxtYXJrZXJXaWR0aDoxLG1hcmtlckhlaWdodDoxLHJlZlg6MSxyZWZZOjEsdGV4dEFuY2hvcjowLGJhc2VQcm9maWxlOjF9Ow0KdmFyIGtlYmFiID0gZnVuY3Rpb24oayl7IHJldHVybiBrLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKGMpeyByZXR1cm4gJy0nK2MudG9Mb3dlckNhc2UoKTsgfSk7IH07DQoNCmZ1bmN0aW9uIGFwcGx5U3R5bGUobm9kZSwgc3Qpew0KICBmb3IgKHZhciBrIGluIHN0KXsNCiAgICB2YXIgdiA9IHN0W2tdOw0KICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBmYWxzZSkgY29udGludWU7DQogICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiAhVU5JVExFU1Nba10pIHYgPSB2ICsgJ3B4JzsNCiAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KGtlYmFiKGspLCBTdHJpbmcodikpOw0KICB9DQp9DQoNCmZ1bmN0aW9uIGFwcGVuZChub2RlLCBjKXsNCiAgaWYgKGMgPT09IG51bGwgfHwgYyA9PT0gdW5kZWZpbmVkIHx8IGMgPT09IGZhbHNlIHx8IGMgPT09IHRydWUpIHJldHVybjsNCiAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHsgZm9yICh2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKSBhcHBlbmQobm9kZSwgY1tpXSk7IHJldHVybjsgfQ0KICBpZiAoYyBpbnN0YW5jZW9mIE5vZGUpIHsNCiAgICBub2RlLmFwcGVuZENoaWxkKGMucGFyZW50Tm9kZSA/IGMuY2xvbmVOb2RlKHRydWUpIDogYyk7DQogICAgcmV0dXJuOw0KICB9DQogIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGMpKSk7DQp9DQoNCmZ1bmN0aW9uIGVsKHRhZywgcHJvcHMpew0KICB2YXIgc3ZnID0gISFTVkdUQUdTW3RhZ107DQogIHZhciBub2RlID0gc3ZnID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIHRhZykNCiAgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7DQogIHByb3BzID0gcHJvcHMgfHwge307DQogIGZvciAodmFyIGsgaW4gcHJvcHMpew0KICAgIHZhciB2ID0gcHJvcHNba107DQogICAgaWYgKGsgPT09ICdrZXknIHx8IHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsNCiAgICBpZiAoayA9PT0gJ3N0eWxlJykgeyBhcHBseVN0eWxlKG5vZGUsIHYpOyBjb250aW51ZTsgfQ0KICAgIGlmIChrID09PSAnY2xhc3NOYW1lJykgeyBub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB2KTsgY29udGludWU7IH0NCiAgICBpZiAoay5pbmRleE9mKCdvbicpID09PSAwICYmIHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nKXsNCiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihrLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCksIHYpOw0KICAgICAgY29udGludWU7DQogICAgfQ0KICAgIGlmIChzdmcpIG5vZGUuc2V0QXR0cmlidXRlKFNWR0NBTUVMW2tdID8gayA6IGtlYmFiKGspLCBTdHJpbmcodikpOw0KICAgIGVsc2Ugbm9kZS5zZXRBdHRyaWJ1dGUoay5pbmRleE9mKCctJykgPiAtMSA/IGsgOiBrZWJhYihrKSwgU3RyaW5nKHYpKTsNCiAgfQ0KICBmb3IgKHZhciBhPTI7IGE8YXJndW1lbnRzLmxlbmd0aDsgYSsrKSBhcHBlbmQobm9kZSwgYXJndW1lbnRzW2FdKTsNCiAgcmV0dXJuIG5vZGU7DQp9DQoNCnZhciBfSCA9IHsgY3JlYXRlRWxlbWVudDogZWwgfTsgICAvLyBsb2NhbCDDoCBjZSBibG9jLCBuJ8OpY3Jhc2UgcGFzIGxlIFJlYWN0IGRlIFdvcmRQcmVzcw0KDQpjb25zdCBTRVJJRj0iJ05ld3NyZWFkZXInLEdlb3JnaWEsc2VyaWYiOw0KY29uc3QgSU5LPScjMWIyMzUyJzsNCmNvbnN0IE5BVlk9JyMwRTEzNEYnLCBSRUQ9JyNGNTI1NDknLCBHUkVZPScjNkM3MTc5JywgUEFQRVI9JyNmOGZhZmMnLCBMSU5FPScjZTVlN2ViJywgVElOVD0nI2VlZjJmYicsIFJUSU5UPScjRkRFQ0VGJzsNCmNvbnN0IENBUkVFUj1bWzE5ODIsMjZdLFsxOTg0LDMxXSxbMTk4NiwzNF0sWzE5ODgsMzhdLFsxOTkwLDQyXSxbMTk5Miw0NV0sWzE5OTQsNDldLFsxOTk2LDI5LDFdLFsxOTk4LDI0LDFdLFsyMDAwLDUyXSxbMjAwMSwyMSwxXSxbMjAwMyw1OF0sWzIwMDUsNjFdLFsyMDA3LDY0XSxbMjAwOSw2Nl0sWzIwMTEsNzBdLFsyMDEzLDczXSxbMjAxNSw3Nl0sWzIwMTcsNzldLFsyMDE5LDgyXSxbMjAyMCw4NF0sWzIwMjEsODZdLFsyMDIyLDg5XSxbMjAyMyw5MV0sWzIwMjQsOTNdLFsyMDI1LDk1XV07DQoNCmNvbnN0IEFWSVMgPSBbDQogIFsnUycsJ0plIHBlbnNhaXMgcXVlIG1vbiByZWxldsOpIGRlIGNhcnJpw6hyZSDDqXRhaXQgY29ycmVjdCwgbWFpcyBsXHUyMDE5YW5hbHlzZSBhIHBlcm1pcyBkZSByZXDDqXJlciBwbHVzaWV1cnMgcMOpcmlvZGVzIHF1aSBtw6lyaXRhaWVudCBkXHUyMDE5w6p0cmUgdsOpcmlmacOpZXMuIExlIHJhcHBvcnQgZXN0IGNsYWlyLCBkw6l0YWlsbMOpIGV0IHN1cnRvdXQgZmFjaWxlIMOgIGNvbXByZW5kcmUuIEplIHN1aXMgdnJhaW1lbnQgdHLDqHMgc2F0aXNmYWl0ZSBkdSBzZXJ2aWNlLicsJ1Byw6lub20sIGTDqXBhcnRlbWVudCcsJ1JlbGV2w6kgZGUgWFggYW5uw6llcycsWydYWCBzdWpldHMnLCdYIGNvdXJyaWVycyddXSwNCiAgWydBJywnVHLDqHMgYm9ubmUgZXhww6lyaWVuY2UuIExcdTIwMTlhbmFseXNlIGRlIG1vbiByZWxldsOpIGRlIGNhcnJpw6hyZSBtXHUyMDE5YSBwZXJtaXMgZFx1MjAxOXkgdm9pciBiZWF1Y291cCBwbHVzIGNsYWlyIGF2YW50IG1vbiBkw6lwYXJ0IMOgIGxhIHJldHJhaXRlLiBMZXMgZXhwbGljYXRpb25zIHNvbnQgcHLDqWNpc2VzIGV0IGxlcyBwb2ludHMgw6AgY29udHLDtGxlciBzb250IGNsYWlyZW1lbnQgaWRlbnRpZmnDqXMuIFVuIHNlcnZpY2Ugc8OpcmlldXggcXVlIGplIHJlY29tbWFuZGUuJywnUHLDqW5vbSwgZMOpcGFydGVtZW50JywnUmVsZXbDqSBkZSBYWCBhbm7DqWVzJyxbJ1hYIHN1amV0cycsJ1ggY291cnJpZXJzJ11dDQpdOw0KY29uc3QgQ09OVEVOVSA9IFsNCiAgWydVbiBkb3NzaWVyJywnY29tcG9zw6kgZXQgbnVtw6lyb3TDqScsJ8OgIGxpcmUgw6AgbFx1MjAxOcOpY3JhbiBvdSDDoCBpbXByaW1lciwgZXQgw6AgZ2FyZGVyIGRhbnMgdW4gY2xhc3NldXInXSwNCiAgWycxIHBhZ2UnLCdwYXIgc3VqZXQgcmV0ZW51JywnYXZlYyBs4oCZYW5uw6llIGNvbmNlcm7DqWUsIGxlIG1vdGlmIMOgIGludm9xdWVyIGV0IGxlcyBwacOoY2VzIMOgIGpvaW5kcmUnXSwNCiAgWycxIGNvdXJyaWVyJywncGFyIGTDqW1hcmNoZSDDoCBlbmdhZ2VyJywnZMOpasOgIHLDqWRpZ8OpIMOgIHZvdHJlIG5vbSwgw6Agc2lnbmVyIGV0IHBvc3RlciddLA0KICBbJ0VuIGV1cm9zJywnY2UgcXVlIMOnYSByZXByw6lzZW50ZScsJ2NoYXF1ZSBjb3JyZWN0aW9uIGNoaWZmcsOpZSwgZHUgYnJ1dCBhdSBuZXQsIHN1ciB2b3MgcHJvcHJlcyB0cmFuY2hlcyddDQpdOw0KY29uc3QgRVRBUEVTID0gWw0KICBbJ1ZvdXMgZMOpcG9zZXogbGUgUERGIGRlIHZvdHJlIHJlbGV2w6knLCdTdXIgaW5mby1yZXRyYWl0ZS5mciwgcnVicmlxdWUgwqsgTW9uIHJlbGV2w6kgZGUgY2FycmnDqHJlIMK7LCBib3V0b24gVMOpbMOpY2hhcmdlci4gU2kgdm91cyBuXHUyMDE5YXZleiBwYXMgZGUgY29tcHRlLCBqZSB2b3VzIGluZGlxdWUgY29tbWVudCBsZSBjcsOpZXIuIFJpZW4gZFx1MjAxOWF1dHJlIMOgIHByw6lwYXJlci4nXSwNCiAgWydWb3VzIHLDqXBvbmRleiDDoCBxdWVscXVlcyBxdWVzdGlvbnMnLCdTdXIgbGVzIHNldWxlcyBhbm7DqWVzIHF1aSBwb3NlbnQgcXVlc3Rpb24uIFVuZSBkaXphaW5lIGRlIG1pbnV0ZXMsIGVuIHVuZSBmb2lzIG91IGVuIHBsdXNpZXVycy4nXSwNCiAgWydKXHUyMDE5YW5hbHlzZSB2b3RyZSByZWxldsOpIGV0IGpcdTIwMTnDqWNyaXMgdm90cmUgYmlsYW4nLCdKXHUyMDE5ZXhhbWluZSBjaGFxdWUgcMOpcmlvZGUgYXZlYyBsZXMgcsOoZ2xlcyBxdWkgbHVpIGNvcnJlc3BvbmRlbnQsIGV0IGpcdTIwMTnDqWNhcnRlIGNlIHF1aSBuZSBzZSBkw6lmZW5kIHBhcyBkZXZhbnQgdW5lIGNhaXNzZS4nXSwNCiAgWydWb3VzIHJlY2V2ZXogdW4gZS1tYWlsIGF2ZWMgbGUgbGllbiBwb3VyIHTDqWzDqWNoYXJnZXIgdm90cmUgZG9zc2llcicsJ1NvdXMgMyBqb3VycyBvdXZyw6lzLiDDgCBsaXJlIMOgIGxcdTIwMTnDqWNyYW4sIG91IMOgIGltcHJpbWVyIHBvdXIgw6ljcmlyZSBkZXNzdXMuJ10NCl07DQpjb25zdCBKQU1BSVMgPSBbDQogIFsnVm90cmUgbnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGUnLCdJbCBmaWd1cmUgc3VyIHZvdHJlIHJlbGV2w6kuIElsIGVzdCBsdSB1bmUgZm9pcywgcG91ciByZXRyb3V2ZXIgdm90cmUgZGF0ZSBkZSBuYWlzc2FuY2UgZXQgdm90cmUgw6JnZSBsw6lnYWwgZGUgZMOpcGFydCwgZXQgaWwgblx1MjAxOWVzdCBqYW1haXMgY29uc2VydsOpLiBEw6lwb3NleiBsZSByZWxldsOpIHRlbCBxdWUgdm90cmUgY2Fpc3NlIHZvdXMgbFx1MjAxOWEgcmVtaXMsIHNhbnMgcmllbiBtb2RpZmllci4gU3VyIGxlcyBjb3VycmllcnMsIGNcdTIwMTllc3QgdW4gY2hhbXAgbGFpc3PDqSB2aWRlIHF1ZSB2b3VzIHJlbXBsaXNzZXogw6AgbGEgbWFpbi4nXSwNCiAgWydWb3MgY29kZXMgZFx1MjAxOWFjY8OocycsJ05pIGNldXggZGUgdm90cmUgZXNwYWNlIHJldHJhaXRlLCBuaSBGcmFuY2VDb25uZWN0LiBQZXJzb25uZSBuZSBzZSBjb25uZWN0ZSDDoCB2b3RyZSBwbGFjZSwgamFtYWlzLiddLA0KICBbJ1VuZSBjb3BpZSBkZSB2b3RyZSByZWxldsOpJywnVm90cmUgUERGIGVzdCBkw6l0cnVpdCBkw6hzIHNhIGxlY3R1cmUuIExlcyBkb25uw6llcyBxdWkgZW4gc29udCBleHRyYWl0ZXMgc29udCBjb25zZXJ2w6llcyBsZSB0ZW1wcyBkZSB2b3VzIHJlbWV0dHJlIHZvdHJlIGRvc3NpZXIsIHB1aXMgZWZmYWPDqWVzLiBDaGlmZnLDqSwgaMOpYmVyZ8OpIGVuIEZyYW5jZS4nXQ0KXTsNCmNvbnN0IENPTVBSSVMgPSBbDQogIFsnUHJpeCcsJzI0OSDigqwgVFRDLCB1bmUgc2V1bGUgZm9pcyddLA0KICBbJ1BhaWVtZW50JywnZW4gbGlnbmUsIHBhciBjYXJ0ZSwgc2FucyBjb21wdGUgw6AgY3LDqWVyJ10sDQogIFsnRm9ybWF0JywndW4gUERGIMOgIHTDqWzDqWNoYXJnZXIsIMOgIGxpcmUgw6AgbFx1MjAxOcOpY3JhbiBvdSDDoCBpbXByaW1lciddLA0KICBbJ0Fib25uZW1lbnQnLCdhdWN1biddLA0KICBbJ1Jlc3RlIMOgIHZvdHJlIGNoYXJnZScsJ2xcdTIwMTllbnZvaSBkZXMgY291cnJpZXJzIGVuIHJlY29tbWFuZMOpLCBkZSBsXHUyMDE5b3JkcmUgZGUgNiDDoCA3IOKCrCBwYXIgY291cnJpZXInXQ0KXTsNCmNvbnN0IFBPVVJWT1VTID0gWw0KICAndm91cyBhdmV6IHZvdHJlIHJlbGV2w6kgZGUgY2FycmnDqHJlIHNvdXMgbGVzIHlldXggZXQgdW4gZG91dGUnLA0KICAndm90cmUgY2FycmnDqHJlIGEgZGVzIHRyb3VzLCBkZXMgdGVtcHMgcGFydGllbHMsIGRlIGxcdTIwMTlpbnTDqXJpbSBvdSBkZXMgcMOpcmlvZGVzIMOgIGxcdTIwMTnDqXRyYW5nZXInLA0KICAndm91cyBsaXF1aWRleiBiaWVudMO0dCBldCB2b3VzIHZvdWxleiB2w6lyaWZpZXIgYXZhbnQsIHBhcyBhcHLDqHMnLA0KICAndm91cyBwcsOpcGFyZXogbGUgZG9zc2llciBkXHUyMDE5dW4gcGFyZW50JywNCiAgJ3ZvdXMgdm91bGV6IHF1XHUyMDE5dW5lIHBlcnNvbm5lIHJlZ2FyZGUgdm90cmUgcmVsZXbDqSwgcGFzIHNldWxlbWVudCB1biBsb2dpY2llbCcNCl07DQpjb25zdCBQQVNWT1VTID0gWw0KICAndm91cyBhdHRlbmRleiBxdVx1MjAxOW9uIGZhc3NlIGxlcyBkw6ltYXJjaGVzIMOgIHZvdHJlIHBsYWNlIDogbGVzIGNvdXJyaWVycyBzb250IHLDqWRpZ8OpcywgbWFpcyBjXHUyMDE5ZXN0IHZvdXMgcXVpIHNpZ25leiBldCBwb3N0ZXonLA0KICAndm91cyBhdHRlbmRleiB1bmUgc2ltdWxhdGlvbiBvZmZpY2llbGxlIGRlIHZvdHJlIHBlbnNpb24gOiBsZSBkb3NzaWVyIGNoaWZmcmUgY2UgcXVlIGNoYXF1ZSBjb3JyZWN0aW9uIHJlcHLDqXNlbnRlLCBpbCBuZSByZW1wbGFjZSBwYXMgbGUgY2FsY3VsIGRlIHZvdHJlIGNhaXNzZScsDQogICd2b3VzIHZvdWxleiB1bmUgcHJvbWVzc2UgZGUgc29tbWUgcsOpY3Vww6lyw6llIDogcGVyc29ubmUgbmUgcGV1dCBzYXZvaXIgw6AgbFx1MjAxOWF2YW5jZSBjZSBxdWUgdm90cmUgY2Fpc3NlIGFjY2VwdGVyYScNCl07DQpjb25zdCBBSUxMRVVSUyA9IFsNCiAgWydDb25zdWx0YXRpb24gc2ltcGxlLCB1bmUgaGV1cmUnLCcxNTAgw6AgNDAwIOKCrCcsJ3VuIHByZW1pZXIgYXZpcyBzdXIgZGVzIHF1ZXN0aW9ucyBjaWJsw6llcycsMTUwLDQwMF0sDQogIFsnQmlsYW4gcmV0cmFpdGUgc3RhbmRhcmQnLCc0MDAgw6AgMSAwMDAg4oKsJywnYW5hbHlzZSBkZSBjYXJyacOocmUgZXQgZXN0aW1hdGlvbiBkZXMgZHJvaXRzJyw0MDAsMTAwMF0sDQogIFsnQmlsYW4gYXBwcm9mb25kaSBzdXIgbWVzdXJlJywnMSAwMDAgw6AgMiA1MDAg4oKsJywncmVjb25zdGl0dXRpb24gZMOpdGFpbGzDqWUsIHBsdXNpZXVycyByw6lnaW1lcycsMTAwMCwyNTAwXSwNCiAgWydBY2NvbXBhZ25lbWVudCBqdXNxdVx1MjAxOcOgIGxhIGxpcXVpZGF0aW9uJywnMSA1MDAgw6AgNSAwMDAg4oKsJywncHJpc2UgZW4gY2hhcmdlIGNvbXBsw6h0ZSBkdSBkb3NzaWVyJywxNTAwLDUwMDBdDQpdOw0KY29uc3QgQVBFUkNVUyA9IFsNCiAgWydVbiBzdWpldCDDoCB2w6lyaWZpZXInLCdIdWl0IGJsb2NzIDogbGUgY29uc3RhdCwgcG91cnF1b2kgY2VsYSBtw6lyaXRlIHVuZSBkZW1hbmRlLCBjZSBxdWkgcGV1dCBsXHUyMDE5ZXhwbGlxdWVyLCBsYSBwacOoY2Ugw6Agam9pbmRyZSwgbGUgZ2VzdGUgw6AgZmFpcmUsIGNlIHF1ZSDDp2EgcG9ydGUsIGxlIG5pdmVhdSBkZSBjZXJ0aXR1ZGUsIGxhIHNvdXJjZS4nXSwNCiAgWydWb3RyZSBjYXJyacOocmUsIGFubsOpZSBwYXIgYW5uw6llJywnQ2hhcXVlIGFubsOpZSBjb25mcm9udMOpZSBhdXggc2V1aWxzIGVuIHZpZ3VldXIsIGxlcyBhbm7DqWVzIMOgIHbDqXJpZmllciBzaWduYWzDqWVzLiddLA0KICBbJ1VuIGNvdXJyaWVyIHByw6p0IMOgIHNpZ25lcicsJ09iamV0LCBjb3JwcywgcGnDqGNlcyDDoCBqb2luZHJlLCBldCBsZXMgY2hhbXBzIGxhaXNzw6lzIHZpZGVzIHF1ZSB2b3VzIHJlbXBsaXNzZXogw6AgbGEgbWFpbi4nXQ0KXTsNCmNvbnN0IFJFR0FSREUgPSBbDQogIFsnVm91cyBhdmV6IHRyYXZhaWxsw6kgZW4gaW50w6lyaW0sIG91IGVuIG1pc3Npb25zIGNvdXJ0ZXMnLCdDZSBzb250IGxlcyBww6lyaW9kZXMgbGVzIHBsdXMgc291dmVudCBhYnNlbnRlcyA6IHBsdXNpZXVycyBlbXBsb3lldXJzLCBkZXMgY29udHJhdHMgZGUgcXVlbHF1ZXMgc2VtYWluZXMsIGRlcyBkw6ljbGFyYXRpb25zIGZhaXRlcyBlbiByZXRhcmQuJ10sDQogIFsnVm91cyBhdmV6IGV1IHVuIHRlbXBzIHBhcnRpZWwnLCdVbiBzYWxhaXJlIHBsdXMgZmFpYmxlIHBldXQgcGFzc2VyIHNvdXMgbGUgc2V1aWwgcXVpIHZhbGlkZSB1biB0cmltZXN0cmUuIENoYXF1ZSBhbm7DqWUgZXN0IGNvbmZyb250w6llIGF1IHNldWlsIHF1aSBzXHUyMDE5YXBwbGlxdWFpdCDDoCBsXHUyMDE5w6lwb3F1ZSwgcGFzIMOgIGNlbHVpIGRcdTIwMTlhdWpvdXJkXHUyMDE5aHVpLiddLA0KICBbJ1ZvdXMgYXZleiDDqXTDqSBlbiBhcnLDqnQsIGF1IGNow7RtYWdlLCBlbiBjb25nw6kgbWF0ZXJuaXTDqScsJ0NlcyBww6lyaW9kZXMgZG9ubmVudCBkZXMgdHJpbWVzdHJlcywgZW5jb3JlIGZhdXQtaWwgcXVcdTIwMTllbGxlcyBzb2llbnQgaW5zY3JpdGVzLiBDaGFxdWUgYW5uw6llIGVzdCBwYXNzw6llIGF1IGNyaWJsZS4nXSwNCiAgWydWb3VzIGF2ZXogw6lsZXbDqSBkZXMgZW5mYW50cycsJ1RyaW1lc3RyZXMgZGUgbWF0ZXJuaXTDqSwgZFx1MjAxOcOpZHVjYXRpb24sIG1ham9yYXRpb24gZGUgcGVuc2lvbiwgZXQgbGVzIHRyaW1lc3RyZXMgbGnDqXMgYXV4IGFsbG9jYXRpb25zIGZhbWlsaWFsZXMgKEFWUEYpLCBzb3V2ZW50IGFic2VudHMgOiBjZSBzb250IGRlcyBkcm9pdHMgcXVpIHNlIGRlbWFuZGVudC4nXSwNCiAgWydWb3VzIGF2ZXogY2hhbmfDqSBkZSBtw6l0aWVyIG91IGRlIHN0YXR1dCcsJ1NhbGFyacOpLCBpbmTDqXBlbmRhbnQsIGZvbmN0aW9ubmFpcmUsIGFncmljb2xlIDogY2UgcXVcdTIwMTl1biByw6lnaW1lIGNvbXB0ZSwgbFx1MjAxOWF1dHJlIGxcdTIwMTlpZ25vcmUgcGFyZm9pcy4gTGVzIHJlY291cGVtZW50cyBzb250IGZhaXRzLiddLA0KICBbJ1ZvdXMgYXZleiB0cmF2YWlsbMOpIMOgIGxcdTIwMTnDqXRyYW5nZXInLCdEYW5zIGxcdTIwMTlVbmlvbiBldXJvcMOpZW5uZSBldCBsZXMgcGF5cyBzb3VzIGNvbnZlbnRpb24sIGNlcyBhbm7DqWVzIGNvbXB0ZW50LiBFbGxlcyBtYW5xdWVudCBwcmVzcXVlIHRvdWpvdXJzIGF1IHJlbGV2w6kgZnJhbsOnYWlzLiddLA0KICBbJ1ZvdXMgYXZleiBkZXMgYW5uw6llcyDDoCB6w6lybywgb3UgaW5jb21wbMOodGVzJywnVW5lIGFubsOpZSDDoCBkZXV4IHRyaW1lc3RyZXMgYXUgbGlldSBkZSBxdWF0cmUgbmUgc2Ugdm9pdCBwYXMgw6AgbFx1MjAxOcWTaWwuIEVsbGUgc2UgdHJvdXZlIGVuIGNvbXBhcmFudCBsZSBzYWxhaXJlIHBvcnTDqSBhdSBzZXVpbCBkZSBsXHUyMDE5YW5uw6llLiddLA0KICBbJ1ZvdXMgbmUgc2F2ZXogcGFzIMOgIHF1ZWxsZSBkYXRlIHZvdXMgcG91dmV6IHBhcnRpcicsJ0NlIHF1ZSB2b3MgdHJpbWVzdHJlcyBwZXJtZXR0ZW50LCDDoCBxdWVsbGUgZGF0ZSwgZXQgY2UgcXVlIHRyb2lzIG1vaXMgZGUgcGx1cyBjaGFuZ2VyYWllbnQuJ10NCl07DQpjb25zdCBSRUdBUkRFX09MRCA9IFsNCiAgWydMZXMgc2V1aWxzLCBhbm7DqWUgcGFyIGFubsOpZScsJ0NoYXF1ZSBhbm7DqWUgZXN0IGNvbmZyb250w6llIGF1IHNhbGFpcmUgcXVcdTIwMTlpbCBmYWxsYWl0IGTDqWNsYXJlciwgY2V0dGUgYW5uw6llLWzDoCwgcG91ciB2YWxpZGVyIHVuIHRyaW1lc3RyZS4gTGVzIHNldWlscyBvbnQgY2hhbmfDqSBkb3V6ZSBmb2lzIGRlcHVpcyAxOTcyLiddLA0KICBbJ0xlcyBhbm7DqWVzIGluY29tcGzDqHRlcycsJ1VuIHRyaW1lc3RyZSBtYW5xdWFudCBlbiAxOTk2IG5lIHNlIHZvaXQgcGFzIMOgIGxcdTIwMTnFk2lsLiBJbCBzZSB0cm91dmUgZW4gY29uZnJvbnRhbnQgbGUgc2FsYWlyZSBwb3J0w6kgYXUgc2V1aWwgZGUgbFx1MjAxOcOpcG9xdWUuJ10sDQogIFsnTFx1MjAxOWludMOpcmltIGV0IGxlcyBlbXBsb3lldXJzIG11bHRpcGxlcycsJ0xlcyBtaXNzaW9ucyBjb3VydGVzIGV0IGxlcyBlbXBsb3lldXJzIHF1aSBzZSBzdWNjw6hkZW50IHNvbnQgbGEgcHJlbWnDqHJlIHNvdXJjZSBkZSBww6lyaW9kZXMgb3VibGnDqWVzLiddLA0KICBbJ0xlcyBww6lyaW9kZXMgYXNzaW1pbMOpZXMnLCdNYWxhZGllLCBtYXRlcm5pdMOpLCBjaMO0bWFnZSwgYWNjaWRlbnQgZHUgdHJhdmFpbCwgc2VydmljZSBuYXRpb25hbCA6IGVsbGVzIGRvbm5lbnQgZGVzIHRyaW1lc3RyZXMsIGVuY29yZSBmYXV0LWlsIHF1XHUyMDE5ZWxsZXMgc29pZW50IGluc2NyaXRlcy4nXSwNCiAgWydMZXMgbWFqb3JhdGlvbnMgcG91ciBlbmZhbnRzJywnTWF0ZXJuaXTDqSwgw6lkdWNhdGlvbiwgbWFqb3JhdGlvbiBkZSBwZW5zaW9uLCBldCBsZXMgdHJpbWVzdHJlcyBBVlBGIGxpw6lzIGF1eCBhbGxvY2F0aW9ucyBmYW1pbGlhbGVzIDogZGVzIGRyb2l0cyBxdWkgc2UgZGVtYW5kZW50LiddLA0KICBbJ0xlcyByw6lnaW1lcyBjcm9pc8OpcycsJ1LDqWdpbWUgZ8OpbsOpcmFsLCBjb21wbMOpbWVudGFpcmUsIGluZMOpcGVuZGFudHMsIGFncmljb2xlLCBmb25jdGlvbiBwdWJsaXF1ZSA6IGNlIHF1ZSBsXHUyMDE5dW4gY29tcHRlLCBsXHUyMDE5YXV0cmUgbFx1MjAxOWlnbm9yZSBwYXJmb2lzLiddLA0KICBbJ0xlcyBww6lyaW9kZXMgw6AgbFx1MjAxOcOpdHJhbmdlcicsJ1VuaW9uIGV1cm9ww6llbm5lIGV0IHBheXMgc291cyBjb252ZW50aW9uIDogY2VzIGFubsOpZXMgY29tcHRlbnQsIGV0IG1hbnF1ZW50IHByZXNxdWUgdG91am91cnMgYXUgcmVsZXbDqSBmcmFuw6dhaXMuJ10sDQogIFsnTGEgZGF0ZSBkZSBkw6lwYXJ0JywnQ2UgcXVlIHZvcyB0cmltZXN0cmVzIHBlcm1ldHRlbnQsIMOgIHF1ZWxsZSBkYXRlLCBldCBjZSBxdWUgdHJvaXMgbW9pcyBkZSBwbHVzIGNoYW5nZXJhaWVudC4nXQ0KXTsNCmNvbnN0IFBST0ZJTFMgPSBbDQogIFsnSW50w6lyaW0sIG1pc3Npb25zIGNvdXJ0ZXMsIHBsdXNpZXVycyBlbXBsb3lldXJzJywnTGVzIHDDqXJpb2RlcyBsZXMgcGx1cyBzb3V2ZW50IGFic2VudGVzIGRcdTIwMTl1biByZWxldsOpLicsDQogICAgWydDaGFxdWUgbWlzc2lvbiBlc3QgcmV0cm91dsOpZSBldCByYXR0YWNow6llIGF1IGJvbiByw6lnaW1lLicsJ0xlcyBkw6ljbGFyYXRpb25zIHRhcmRpdmVzIGRcdTIwMTllbXBsb3lldXIgc29udCByZXDDqXLDqWVzIGFubsOpZSBwYXIgYW5uw6llLicsJ0xlcyBww6lyaW9kZXMgZGUgY2jDtG1hZ2UgZW50cmUgZGV1eCBtaXNzaW9ucyBzb250IHBhc3PDqWVzIGF1IGNyaWJsZSB1bmUgw6AgdW5lLiddXSwNCiAgWydUZW1wcyBwYXJ0aWVsLCBvdSBzYWxhaXJlcyBtb2Rlc3RlcycsJ1VuIHNhbGFpcmUgcGx1cyBmYWlibGUgcGV1dCBwYXNzZXIgc291cyBsZSBzZXVpbCBkdSB0cmltZXN0cmUuJywNCiAgICBbJ0NoYXF1ZSBhbm7DqWUgZXN0IGNvbmZyb250w6llIGF1IHNldWlsIHF1aSBzXHUyMDE5YXBwbGlxdWFpdCDDoCBsXHUyMDE5w6lwb3F1ZSwgcGFzIMOgIGNlbHVpIGRcdTIwMTlhdWpvdXJkXHUyMDE5aHVpLicsJ0xlcyBhbm7DqWVzIMOgIGRldXggb3UgdHJvaXMgdHJpbWVzdHJlcyBhdSBsaWV1IGRlIHF1YXRyZSBzb250IGlzb2zDqWVzLicsJ0xlcyBtYWpvcmF0aW9ucyBsacOpZXMgYXV4IGVuZmFudHMgZXQgw6AgbFx1MjAxOUFWUEYgc29udCBjb250csO0bMOpZXMuJ11dLA0KICBbJ1BsdXNpZXVycyByw6lnaW1lcywgb3UgdW4gY2hhbmdlbWVudCBkZSBzdGF0dXQnLCdDZSBxdVx1MjAxOXVuIHLDqWdpbWUgY29tcHRlLCBsXHUyMDE5YXV0cmUgbFx1MjAxOWlnbm9yZSBwYXJmb2lzLicsDQogICAgWydSw6lnaW1lIGfDqW7DqXJhbCwgTVNBLCBpbmTDqXBlbmRhbnRzLCBmb25jdGlvbiBwdWJsaXF1ZSBldCBBZ2lyYy1BcnJjbyBzb250IHJlY291cMOpcy4nLCdMZXMgYW5uw6llcyBjb21wdMOpZXMgZGV1eCBmb2lzLCBvdSBwYXIgcGVyc29ubmUsIHNvbnQgc2lnbmFsw6llcy4nLCdMZXMgZHJvaXRzIG91dmVydHMgZGFucyB1biByw6lnaW1lIG91Ymxpw6kgc29udCByZWNoZXJjaMOpcy4nXV0sDQogIFsnRGVzIGFubsOpZXMgw6AgbFx1MjAxOcOpdHJhbmdlcicsJ0VsbGVzIG1hbnF1ZW50IHByZXNxdWUgdG91am91cnMgYXUgcmVsZXbDqSBmcmFuw6dhaXMuJywNCiAgICBbJ1VuaW9uIGV1cm9ww6llbm5lIGV0IHBheXMgc291cyBjb252ZW50aW9uIDogbGVzIGFubsOpZXMgc29udCByw6ljbGFtw6llcyBhdmVjIGxlIGZvcm11bGFpcmUgYWRhcHTDqS4nLCdMZXMgcMOpcmlvZGVzIG5vbiByZXBvcnTDqWVzIHNvbnQgZGF0w6llcyBldCBkb2N1bWVudMOpZXMuJywnTFx1MjAxOWVmZmV0IHN1ciB2b3RyZSBkYXRlIGRlIGTDqXBhcnQgZXN0IGNhbGN1bMOpLiddXQ0KXTsNCmNvbnN0IEZBUSA9IFsNCiAgWydDb21iaWVuIHZhaXMtamUgcsOpY3Vww6lyZXLCoD8nLCdKZSBuZSBwcm9tZXRzIGF1Y3VuZSBzb21tZSA6IGNlIHF1ZSBsYSBjYWlzc2UgYWNjZXB0ZXJhIGRlIGNvcnJpZ2VyIG5lIHNlIHNhaXQgcXVcdTIwMTlhcHLDqHMgZXhhbWVuIGRlcyBwacOoY2VzLiBMZSBkb3NzaWVyIGNoaWZmcmUgZW4gcmV2YW5jaGUgY2UgcXVlIGNoYXF1ZSBjb3JyZWN0aW9uIHJlcHLDqXNlbnRlcmFpdCBzaSBlbGxlIGFib3V0aXQsIGR1IGJydXQgYXUgbmV0LCBzdXIgdm9zIHByb3ByZXMgdHJhbmNoZXMuJ10sDQogIFsnRXN0LWNlIGVuY29yZSB1biBvdXRpbCBxdWkgcmVjcmFjaGUgdW4gUERGIGF1dG9tYXRpcXVlwqA/JywnTm9uLCBldCBjXHUyMDE5ZXN0IHByw6ljaXPDqW1lbnQgbGEgcmFpc29uIGR1IGTDqWxhaS4gVW5lIHByZW1pw6hyZSBsZWN0dXJlIHJlcMOocmUgbGVzIHBvaW50cyDDoCByZWdhcmRlciwgbWFpcyByaWVuIG5lIHBhcnQgYXZhbnQgcXVlIGpcdTIwMTlhaWUgYW5hbHlzw6kgdm90cmUgcmVsZXbDqSBhbm7DqWUgcGFyIGFubsOpZSBldCDDqWNhcnTDqSBjZSBxdWkgbmUgc2UgZMOpZmVuZCBwYXMgZGV2YW50IHVuZSBjYWlzc2UuJ10sDQogIFsnRXQgc2kgdm91cyBuZSB0cm91dmV6IHJpZW4gY2hleiBtb2kgPycsJ1F1XHUyMDE5b24gdHJvdXZlIGRpeCBlcnJldXJzIG91IGF1Y3VuZSwgdm91cyBzb3J0ZXogYXZlYyBsYSBtw6ptZSBjaG9zZVx1MDBhMDogbGEgY2VydGl0dWRlLiBMZSBkb3NzaWVyIHZvdXMgZGl0IGNlIHF1aSBhIMOpdMOpIHbDqXJpZmnDqSwgc2V1aWwgcGFyIHNldWlsIGV0IGFubsOpZSBwYXIgYW5uw6llLCBldCBpbCBjb21wYXJlIHZvcyBkYXRlcyBkZSBkw6lwYXJ0IHBvc3NpYmxlcy4gVm91cyBjZXNzZXogZGUgdm91cyBkZW1hbmRlci4nXSwNCiAgWydQb3VycXVvaSBuZSBwYXMgZGVtYW5kZXIgw6dhIMOgIG1hIGNhaXNzZSA/JywnTFx1MjAxOWVudHJldGllbiBpbmZvcm1hdGlvbiByZXRyYWl0ZSBlc3QgZ3JhdHVpdCBldCBpbCB2YXV0IGxhIHBlaW5lIGRcdTIwMTnDqnRyZSBkZW1hbmTDqS4gTGUgYmlsYW4gZmFpdCBhdXRyZSBjaG9zZVx1MDBhMDogaWwgY29uZnJvbnRlIGNoYXF1ZSBhbm7DqWUgZGUgdm90cmUgY2FycmnDqHJlIGF1eCByw6hnbGVzIHF1aSBzXHUyMDE5YXBwbGlxdWFpZW50IMOgIGVsbGUsIGlsIGNvbXBhcmUgdm9zIHNjw6luYXJpb3MgZGUgZMOpcGFydCBjaGlmZnLDqXMsIGV0IGlsIHZvdXMgcmVtZXQgbGVzIGNvdXJyaWVycyDDqWNyaXRzIGF2ZWMgbGVzIHBpw6hjZXMgw6Agam9pbmRyZS4gTGVzIGRldXggc2UgY29tcGzDqHRlbnQuJ10sDQogIFsnUXVlbHMgcsOpZ2ltZXMgcmVnYXJkZXotdm91c8KgPycsJ1RvdXMgY2V1eCBxdWkgZmlndXJlbnQgw6Agdm90cmUgcmVsZXbDqSA6IGxlIHLDqWdpbWUgZ8OpbsOpcmFsLCBsYSBNU0EsIGxlcyBpbmTDqXBlbmRhbnRzLCBsYSBmb25jdGlvbiBwdWJsaXF1ZSwgbGVzIHLDqWdpbWVzIHNww6ljaWF1eCwgZXQgbGEgY29tcGzDqW1lbnRhaXJlIEFnaXJjLUFycmNvLiBVbmUgY2FycmnDqHJlIHBhc3PDqWUgZFx1MjAxOXVuIHN0YXR1dCDDoCBsXHUyMDE5YXV0cmUgZXN0IGp1c3RlbWVudCBjZWxsZSBvw7kgbGVzIHRyaW1lc3RyZXMgc2UgcGVyZGVudC4nXSwNCiAgWydNYSBtw6hyZSBuXHUyMDE5YSBwYXMgZGUgY29tcHRlIHN1ciBsXHUyMDE5ZXNwYWNlIHJldHJhaXRlLicsJ0NcdTIwMTllc3QgbGUgY2FzIGxlIHBsdXMgZnLDqXF1ZW50LiBMZSBjb21wdGUgc2UgY3LDqWUgZW4gcXVlbHF1ZXMgbWludXRlcyBzdXIgaW5mby1yZXRyYWl0ZS5mciwgYXZlYyB1biBudW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZSBldCB1bmUgYWRyZXNzZSBlLW1haWwuIExlIHJlbGV2w6kgc2UgdMOpbMOpY2hhcmdlIGVuc3VpdGUgZW4gdW4gY2xpYywgZXQgdm91cyBwb3V2ZXogZmFpcmUgbGEgZMOpbWFyY2hlIHBvdXIgZWxsZS4nXSwNCiAgWydWb3VzIGZhaXRlcyBsZXMgZMOpbWFyY2hlcyDDoCBtYSBwbGFjZcKgPycsJ05vbi4gTGVzIGNvdXJyaWVycyBzb250IHLDqWRpZ8Opcywgdm91cyBsZXMgc2lnbmV6IGV0IGxlcyBwb3N0ZXouIFZvdHJlIGNhaXNzZSBuZSBjb3JyZXNwb25kIHF1XHUyMDE5YXZlYyB2b3VzLCBldCBsZSBkb3NzaWVyIHJlc3RlIHZvdHJlIHByb3ByacOpdMOpLiddLA0KICBbJ1ZvcyBkb25uw6llcywgcXVlIGRldmllbm5lbnQtZWxsZXMgPycsJ1ZvdHJlIFBERiBlc3QgZWZmYWPDqSBkw6hzIHF1XHUyMDE5aWwgZXN0IGx1LCBldCB2b3RyZSBudW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZSBuXHUyMDE5ZXN0IHBhcyBjb25zZXJ2w6kuIExlIGRvc3NpZXIsIGx1aSwgbmUgcGFydCBqYW1haXMgZW4gcGnDqGNlIGpvaW50ZVx1MDBhMDogdm91cyByZWNldmV6IHVuIGxpZW4gcGVyc29ubmVsLCBxdWkgZXhwaXJlLiBJbCBwb3J0ZSBkZXMgZG9ubsOpZXMgZGUgc2FudMOpIGF1IHNlbnMgZGUgbFx1MjAxOWFydGljbGUgOSBkdSBSR1BELCBldCBpbCBlc3QgdHJhaXTDqSBjb21tZSB0ZWwuIFZvdXMgcG91dmV6IGVuIGRlbWFuZGVyIGxcdTIwMTllZmZhY2VtZW50IMOgIGNvbnRhY3RAYWRjZi5vcmcsIHNhbnMgbW90aWYsIGV0IGlsIGVzdCBmYWl0IHNvdXMgMzAgam91cnMuJ10sDQogIFsnSmUgbGlxdWlkZSBkYW5zIGRldXggbW9pcywgZXN0LWNlIGVuY29yZSB1dGlsZcKgPycsJ091aSwgdGFudCBxdWUgbGEgbGlxdWlkYXRpb24gblx1MjAxOWVzdCBwYXMgcHJvbm9uY8OpZS4gQ29tcHRleiB0b3V0ZWZvaXMgcGx1c2lldXJzIG1vaXMgZFx1MjAxOWluc3RydWN0aW9uIGR1IGPDtHTDqSBkZSBsYSBjYWlzc2UsIGV0IGNlcnRhaW5zIGTDqWxhaXMgZGUgcmVjb3VycyBjb3VyZW50IGTDqWrDoCA6IGNcdTIwMTllc3QgcG91ciBjZWxhIHF1ZSBsZSBkb3NzaWVyIGluZGlxdWUgZGFucyBxdWVsIG9yZHJlIHRyYWl0ZXIgbGVzIHN1amV0cy4nXSwNCiAgWydFc3QtY2UgcXVlIGplIHBldXggbGUgZmFpcmUgcG91ciB1biBwYXJlbnTCoD8nLCdPdWkuIEpcdTIwMTlhbmFseXNlIGxlIHJlbGV2w6kgcXVpIG1cdTIwMTllc3QgZMOpcG9zw6ksIHF1ZWwgcXVcdTIwMTllbiBzb2l0IGxlIHRpdHVsYWlyZVx1MDBhMDogaWwgdm91cyByZXZpZW50IGRlIHZvdXMgYXNzdXJlciBxdWUgbGEgcGVyc29ubmUgY29uY2VybsOpZSBlc3QgZFx1MjAxOWFjY29yZCBldCBxdWUgdm91cyBwb3V2ZXogZGlzcG9zZXIgZGUgc29uIGRvY3VtZW50LiBMZSBkb3NzaWVyIGVzdCDDqXRhYmxpIMOgIHNvbiBub20sIGV0IGxlcyBjb3VycmllcnMgc29udCDDoCBzYSBzaWduYXR1cmUuJ10sDQogIFsnQ29tYmllbiBkZSB0ZW1wcyBjZWxhIG1lIHByZW5kwqA/JywnVW5lIGRpemFpbmUgZGUgbWludXRlc8KgOiB0w6lsw6ljaGFyZ2VyIHZvdHJlIHJlbGV2w6ksIGxcdTIwMTllbnZveWVyLCByw6lwb25kcmUgYXV4IHF1ZXN0aW9ucyBwb3PDqWVzIHN1ciBsZXMgYW5uw6llcyBxdWkgcG9zZW50IHByb2Jsw6htZS4gTGUgcmVzdGUgc2UgcGFzc2UgZGUgbm90cmUgY8O0dMOpLiddLA0KICBbJ0V0IHNpIG1hIGNhaXNzZSByZWZ1c2UgbGEgY29ycmVjdGlvbsKgPycsJ0xlIGRvc3NpZXIgY29udGllbnQgbGVzIGxldHRyZXMgZGUgcmVsYW5jZSBldCBsYSBtYXJjaGUgw6Agc3VpdnJlIGp1c3F1XHUyMDE5w6AgbGEgY29tbWlzc2lvbiBkZSByZWNvdXJzIGFtaWFibGUsIGF2ZWMgbGVzIGTDqWxhaXMgcXVpIGNvdXJlbnQuIFVuIHJlZnVzIG5cdTIwMTllc3QgcGFzIGxhIGZpbiBkZSBsYSBkw6ltYXJjaGUuJ10sDQogIFsnUHVpcy1qZSB2b3VzIGpvaW5kcmXCoD8nLCdQYXIgw6ljcml0LCDDoCBjb250YWN0QGFkY2Yub3JnLiBJbCBuXHUyMDE5eSBhIHBhcyBkZSBudW3DqXJvIGRlIHTDqWzDqXBob25lLCBldCBqZSBwcsOpZsOocmUgbFx1MjAxOcOpY3JpcmUgcGx1dMO0dCBxdWUgZGUgdm91cyBsYWlzc2VyIGNoZXJjaGVyLiddLA0KICBbJ1ZvdXMgw6p0ZXMgdW4gc2VydmljZSBwdWJsaWPCoD8nLCdOb24uIEplIG5lIHN1aXMgbWFuZGF0w6kgcGFyIGF1Y3VuZSBjYWlzc2UgZGUgcmV0cmFpdGUgZXQgamUgbmUgcmVtcGxhY2UgcGFzIGxhIHbDtHRyZS4nXQ0KXTsNCg0KY2xhc3MgUGFnZSB7DQogIHN0YXRlID0geyBwcm9maWw6IDAgfTsNCiAgcHJpY2UoKXsgcmV0dXJuIHRoaXMucHJvcHMucHJpY2UgPz8gJzI0OSDigqwgVFRDJzsgfQ0KICBkZWxhaSgpeyByZXR1cm4gdGhpcy5wcm9wcy5kZWxhaSA/PyAnMyBqb3VycyBvdXZyw6lzJzsgfQ0KICBmb3VuZGVyKCl7IHJldHVybiB0aGlzLnByb3BzLmZvdW5kZXIgPz8gJ0zDqW9uYXJkIERlw68nOyB9DQoNCiAgZXllYnJvdyh0LGNvbG9yLHNpemUsbnVtKXsNCiAgICBjb25zdCBlbD1fSC5jcmVhdGVFbGVtZW50LCBiYXNlPXtmb250U2l6ZTooc2l6ZXx8MTIpKydweCcsZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGxpbmVIZWlnaHQ6MS40fTsNCiAgICBpZighY29sb3J8fGNvbG9yPT09TkFWWSkgcmV0dXJuIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzExcHgnfX0sDQogICAgICBudW0/ZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTonMTVweCcsZm9udFN0eWxlOidpdGFsaWMnLGNvbG9yOicjYzQxNzNhJyxmbGV4U2hyaW5rOjB9fSxudW0pOmVsKCdzcGFuJyx7c3R5bGU6e3dpZHRoOicyMnB4JyxoZWlnaHQ6JzJweCcsYmFja2dyb3VuZDpSRUQsZmxleFNocmluazowfX0pLA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTpPYmplY3QuYXNzaWduKHt9LGJhc2Use2NvbG9yOicjYzQxNzNhJyx3aGl0ZVNwYWNlOidub3dyYXAnfSl9LHQpKTsNCiAgICByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOk9iamVjdC5hc3NpZ24oe30sYmFzZSx7Y29sb3I6Y29sb3Isd2hpdGVTcGFjZTonbm93cmFwJ30pfSx0KTsNCiAgfQ0KDQogIGNvdmVyKHcpew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQsIGs9dy8yMTAsIG1tPXY9PisodiprKS50b0ZpeGVkKDIpKydweCcsIGg9dyoxLjQxNDsNCiAgICBjb25zdCBpdGVtPShuLHR4dCk9PmVsKCdkaXYnLHtrZXk6bixzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMS40KX19LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm1tKDUpLGxpbmVIZWlnaHQ6MSxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjY1KSd9fSxuKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bW0oMi41KSxsaW5lSGVpZ2h0OjEuMjUsY29sb3I6JyNmZmZmZmYnLGZvbnRXZWlnaHQ6NTAwfX0sdHh0KSk7DQogICAgY29uc3Qgc3BpbmU9ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6Jy05cHgnLHRvcDonM3B4Jyxib3R0b206Jy0zcHgnLHdpZHRoOic5cHgnLGJhY2tncm91bmQ6J2xpbmVhci1ncmFkaWVudCg5MGRlZywjMDcwYjJiIDAlLCMwYjEwMzkgNTUlLCMxNDFiNTcgMTAwJSknLHRyYW5zZm9ybTonc2tld1koNmRlZyknLHRyYW5zZm9ybU9yaWdpbjoncmlnaHQgY2VudGVyJ319KTsNCiAgICBjb25zdCBzdGFjaz1bNyw0LjUsMl0ubWFwKChvLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDooLW8pKydweCcsdG9wOm8qMC41KydweCcsd2lkdGg6dysncHgnLGhlaWdodDpoKydweCcsYmFja2dyb3VuZDppPT09Mj8nI2YyZjRmOSc6JyNkZmUzZWUnLGJveFNoYWRvdzonaW5zZXQgLTFweCAwIDAgcmdiYSgxNCwxOSw3OSwwLjE2KSd9fSkpOw0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidyZWxhdGl2ZScsd2lkdGg6dysncHgnLGhlaWdodDpoKydweCcsZmxleFNocmluazowLGZpbHRlcjonZHJvcC1zaGFkb3coOHB4IDEycHggMTRweCByZ2JhKDQsNiwyNCwwLjUpKSBkcm9wLXNoYWRvdyg0MHB4IDU0cHggNjRweCByZ2JhKDQsNiwyNCwwLjU1KSknfX0sDQogICAgICBzdGFjayxzcGluZSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxpbnNldDowLGJhY2tncm91bmQ6TkFWWSxvdmVyZmxvdzonaGlkZGVuJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGluc2V0Om1tKDExKSxib3JkZXI6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMyknLHBvaW50ZXJFdmVudHM6J25vbmUnfX0pLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6bW0oMTEpLHRvcDptbSgxMSksd2lkdGg6bW0oOSksaGVpZ2h0Om1tKDkpLGJvcmRlclRvcDonMnB4IHNvbGlkICcrUkVELGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnK1JFRCxwb2ludGVyRXZlbnRzOidub25lJ319KSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxpbnNldDowLHBhZGRpbmc6bW0oMTkpKycgJyttbSgyNCkrJyAnK21tKDExKSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGJveFNpemluZzonYm9yZGVyLWJveCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptbSg2KX19LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm1tKDIuNiksZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yZW0nLGNvbG9yOicjZmZmZmZmJ319LCdBRENGJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bW0oMi40KSxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyM5YWEzZDgnfX0sJ0Rvc3NpZXIgZFx1MjAxOWFuYWx5c2UnKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOidhdXRvJ319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bW0oMi41KSxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjNlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpSRUR9fSwnw4l0YWJsaSBwb3VyJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm1tKDgpLGxpbmVIZWlnaHQ6MSxtYXJnaW5Ub3A6bW0oNSksY29sb3I6JyNjN2NkZjInfX0sJ0NsYWlyZScpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptbSgyNiksbGluZUhlaWdodDowLjkyLGxldHRlclNwYWNpbmc6Jy0wLjAzNWVtJyxtYXJnaW5Ub3A6bW0oMSksY29sb3I6JyNmZmZmZmYnfX0sJ0RVUE9OVCcpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6bW0oMjQpLGhlaWdodDonMnB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Ub3A6bW0oOCl9fSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bW0oNiksZm9udFNpemU6bW0oNCksbGluZUhlaWdodDoxLjYsY29sb3I6JyNjN2NkZjInLG1heFdpZHRoOm1tKDEyMCl9fSwnSlx1MjAxOWFpIGFuYWx5c8OpIHZvcyA0MiBhbm7DqWVzIGRlIGNhcnJpw6hyZSwgdW5lIHBhciB1bmUuICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjonI2ZmZmZmZicsZm9udFdlaWdodDo2MDB9fSwnMTMgc3VqZXRzIHNvbnQgw6AgZmFpcmUgdsOpcmlmaWVyIHBhciB2b3RyZSBjYWlzc2UuJykpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bW0oMTApLG1hcmdpbkJvdHRvbTptbSgxMCl9fSx0aGlzLmN1cnZlKHctdyowLjIzLGgqMC4yLHRydWUpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6J2F1dG8nLG1hcmdpbkxlZnQ6bW0oLTEzKSxtYXJnaW5SaWdodDptbSgtMTMpLGJhY2tncm91bmQ6UkVELHBhZGRpbmc6bW0oNikrJyAnK21tKDEzKX19LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bW0oMi43KSxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjJlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2ZmZmZmZid9fSwnQ2V0dGUgc2VtYWluZSwgdHJvaXMgY2hvc2VzJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOidyZXBlYXQoMywxZnIpJyxnYXA6bW0oOCksbWFyZ2luVG9wOm1tKDQpfX0sDQogICAgICAgICAgICBpdGVtKCcwMScsJ1NpZ25lciBsZSBjb3VycmllciAxJyksaXRlbSgnMDInLCdEZW1hbmRlciB2b3MgYnVsbGV0aW5zIDE5OTYnKSxpdGVtKCcwMycsJ1Bvc3RlciBlbiByZWNvbW1hbmTDqScpKSkpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDowLHRvcDowLGJvdHRvbTowLHdpZHRoOm1tKDMuNCksYmFja2dyb3VuZDonbGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkscmdiYSgyNTUsMjU1LDI1NSwwKSA3MCUpJyxwb2ludGVyRXZlbnRzOidub25lJ319KSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGluc2V0OjAsYmFja2dyb3VuZDonbGluZWFyLWdyYWRpZW50KDEwNGRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMDkpIDAlLHJnYmEoMjU1LDI1NSwyNTUsMCkgMzQlLHJnYmEoMCwwLDAsMC4xNikgMTAwJSknLHBvaW50ZXJFdmVudHM6J25vbmUnfX0pKSk7DQogIH0NCg0KICB2ZXJpZkNhcmQobSl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICBjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIExJTkU9JyNlNWU3ZWInLCBSVElOVD0nI0ZERUNFRic7DQogICAgY29uc3Qgcm93PShsYWIsdmFsLHJlZCk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzE0cHgnLHBhZGRpbmc6bT8nMTFweCAwJzonMTNweCAwJyxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkV9fSwNCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/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/JzQ0cHggMCA0NnB4JzonNzhweCAwIDgwcHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDonLTEwJScsdG9wOictNDAlJyx3aWR0aDonNzAlJyxoZWlnaHQ6JzE4MCUnLGJhY2tncm91bmQ6J3JhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzAlIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMDcpLHJnYmEoMjU1LDI1NSwyNTUsMCkgNjIlKScscG9pbnRlckV2ZW50czonbm9uZSd9fSksDQogICAgICBpbm5lcihlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidyZWxhdGl2ZScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyNnB4JzonNTZweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonZmxleC1zdGFydCd9fSxnYXVjaGUsY2FydGUpKSk7DQogIH0NCg0KICBzdGlja3lCYXIobSl7DQogICAgaWYoIW0pIHJldHVybiBudWxsOw0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQ7DQogICAgcmV0dXJuIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J3N0aWNreScsYm90dG9tOjAsekluZGV4OjMwLGJhY2tncm91bmQ6J3JnYmEoMjU1LDI1NSwyNTUsMC45NCknLGJhY2tkcm9wRmlsdGVyOidibHVyKDEwcHgpJyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzonMTBweCAxNnB4IDIycHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J3N0cmV0Y2gnLGdhcDonMTBweCcsYm94U2hhZG93OicwIC0xMHB4IDMwcHggLTE4cHggcmdiYSgxNCwxOSw3OSwwLjQ1KSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OjAscmlnaHQ6MCx0b3A6MCxoZWlnaHQ6JzNweCcsYmFja2dyb3VuZDonI2U5ZWNmMyd9fSxlbCgnZGl2Jyx7J2RhdGEtcHJvZyc6JzEnLHN0eWxlOntoZWlnaHQ6JzEwMCUnLHdpZHRoOicwJScsYmFja2dyb3VuZDpSRUR9fSkpLA0KICAgICAgZWwoJ2EnLHtocmVmOicjZGlhZycsb25DbGljazplPT57aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7dHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidwcmVhbmFseXNlJyxlbXBsYWNlbWVudDonYmFycmVfY29sbGFudGUnfSk7fWNhdGNoKF8pe310aGlzLnNjcm9sbFRvRGlhZyhlKTt9LHN0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MCx0ZXh0RGVjb3JhdGlvbjonbm9uZScsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGdhcDonMXB4Jyxib3JkZXI6JzJweCBzb2xpZCAnK05BVlksYmFja2dyb3VuZDonI2ZmZmZmZicsaGVpZ2h0Oic1NHB4JyxwYWRkaW5nOicwIDhweCd9fSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzE0LjVweCcsZm9udFdlaWdodDo3MDAsbGluZUhlaWdodDoxLjE1LGNvbG9yOk5BVlksdGV4dEFsaWduOidjZW50ZXInfX0sJ0xlY3R1cmUgZ3JhdHVpdGUnKSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzExcHgnLGxpbmVIZWlnaHQ6MS4yLGNvbG9yOkdSRVl9fSwnZGUgbW9uIHJlbGV2w6knKSksDQogICAgICBlbCgnYScse2hyZWY6U1RSSVBFPT09JyMnPycjZGlhZyc6U1RSSVBFLG9uQ2xpY2s6ZT0+e3RyeXt0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDpTVFJJUEU9PT0nIyc/J3ByZWFuYWx5c2UnOidzdHJpcGUnLGVtcGxhY2VtZW50OidiYXJyZV9jb2xsYW50ZSd9KTt9Y2F0Y2goXyl7fSBpZihTVFJJUEU9PT0nIycpe2lmKGUmJmUucHJldmVudERlZmF1bHQpZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0aGlzLnNjcm9sbFRvRGlhZyhlKTt9fSxzdHlsZTp7ZmxleDonMS4yNSAxIDAnLG1pbldpZHRoOjAsdGV4dERlY29yYXRpb246J25vbmUnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxnYXA6JzFweCcsYmFja2dyb3VuZDpSRUQsaGVpZ2h0Oic1NHB4JyxwYWRkaW5nOicwIDhweCcsYm94U2hhZG93OicwIDEycHggMjhweCAtMTRweCByZ2JhKDI0NSwzNyw3MywwLjUpJ319LA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTQuNXB4Jyxmb250V2VpZ2h0OjcwMCxsaW5lSGVpZ2h0OjEuMTUsY29sb3I6JyNmZmZmZmYnLHRleHRBbGlnbjonY2VudGVyJ319LCdPYnRlbmlyIG1vbiBiaWxhbiByZXRyYWl0ZScpLA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTFweCcsbGluZUhlaWdodDoxLjIsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC44NSknfX0sdGhpcy5wcmljZSgpKSkpOw0KICB9DQoNCiAgbWluaShraW5kLHcpew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQsIGs9dy8yMTAsIG1tPXY9PisodiprKS50b0ZpeGVkKDIpKydweCcsIGg9dyoxLjQxNDsNCiAgICBjb25zdCBmcz12PT5NYXRoLm1heCg2LCsodiprKjEuNSkudG9GaXhlZCgyKSkrJ3B4JzsNCiAgICBjb25zdCBsYmw9dHh0PT5lbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOmZzKDIuMyksZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjOGI5MGEwJ319LHR4dCk7DQogICAgY29uc3QgYm9keT10eHQ9PmVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6ZnMoMi45KSxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkssdGV4dFdyYXA6J3ByZXR0eSd9fSx0eHQpOw0KICAgIGxldCBjb3JlOw0KICAgIGlmKGtpbmQ9PT0wKSBjb3JlPWVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMyl9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptbSgzKX19LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6ZnMoOSksbGluZUhlaWdodDowLjksY29sb3I6TkFWWX19LCcxOTk2JyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6ZnMoMi42KSxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjFlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2M0MTczYSd9fSwnMiB0cmltZXN0cmVzIHN1ciA0JykpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgxLjIpfX0sbGJsKCdMZSBjb25zdGF0JyksYm9keSgnVm90cmUgcmVsZXbDqSBuZSBjb21wdGUgcXVlIGRldXggdHJpbWVzdHJlcyBwb3VyIDE5OTYsIGFsb3JzIHF1ZSB2b3MgYnVsbGV0aW5zIGNvdXZyZW50IGxcdTIwMTlhbm7DqWUgZW50acOocmUuJykpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgxLjIpfX0sbGJsKCdDZSBxdWkgcGV1dCBsXHUyMDE5ZXhwbGlxdWVyJyksYm9keSgnVW4gZW1wbG95ZXVyIGF5YW50IGTDqWNsYXLDqSB0YXJkaXZlbWVudCwgb3UgdW5lIG1pc3Npb24gZFx1MjAxOWludMOpcmltIHJhdHRhY2jDqWUgYXUgbWF1dmFpcyByw6lnaW1lLicpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptbSgzKSxiYWNrZ3JvdW5kOlJUSU5ULGJvcmRlckxlZnQ6JzJweCBzb2xpZCAnK1JFRCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgxLjIpfX0sbGJsKCdMZSBnZXN0ZSDDoCBmYWlyZScpLGJvZHkoJ0pvaW5kcmUgdm9zIGJ1bGxldGlucyBkZSAxOTk2IGF1IGNvdXJyaWVyIDIsIGVuIHJlY29tbWFuZMOpLicpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMS4yKX19LGxibCgnTm90cmUgc291cmNlJyksYm9keSgnTGUgdGV4dGUgYXBwbGlxdcOpLCByZXByb2R1aXQgZW4gZW50aWVyIGRhbnMgbFx1MjAxOWFubmV4ZSwgcGFnZSAyNC4nKSkpOw0KICAgIGVsc2UgaWYoa2luZD09PTEpIGNvcmU9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSgzLjQpfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDEuNCl9fSxsYmwoJ1ZvcyB0cmltZXN0cmVzIGFjcXVpcycpLHRoaXMuY3VydmUody13KjAuMTgsaCowLjI2LGZhbHNlKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm1tKDEuNil9fSwNCiAgICAgICAgW1snMTk5NicsJzIgdHJpbS4nLCfDoCB2w6lyaWZpZXInXSxbJzE5OTgnLCcyIHRyaW0uJywnw6AgdsOpcmlmaWVyJ10sWycyMDAxJywnMCB0cmltLicsJ8OgIHbDqXJpZmllciddLFsnMjAwMycsJzQgdHJpbS4nLCdjb25mb3JtZSddXS5tYXAoKHIsaSk9Pg0KICAgICAgICAgIGVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczonMWZyIDFmciAxZnInLGdhcDptbSgyKSxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptbSgxLjQpLGZvbnRTaXplOmZzKDIuNyksY29sb3I6aT09PTM/SU5LOicjYzQxNzNhJ319LA0KICAgICAgICAgICAgZWwoJ3NwYW4nLG51bGwsclswXSksZWwoJ3NwYW4nLG51bGwsclsxXSksZWwoJ3NwYW4nLHtzdHlsZTp7dGV4dEFsaWduOidyaWdodCd9fSxyWzJdKSkpKSk7DQogICAgZWxzZSBjb3JlPWVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bW0oMyl9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7YWxpZ25TZWxmOidmbGV4LWVuZCcsdGV4dEFsaWduOidyaWdodCcsZm9udFNpemU6ZnMoMi43KSxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpJTkt9fSwnQ2Fpc3NlIHLDqWdpb25hbGUnLGVsKCdicicpLCdTZXJ2aWNlIHLDqWd1bGFyaXNhdGlvbicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTpmcygyLjkpLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVll9fSwnT2JqZXRcdTAwYTA6IHLDqWd1bGFyaXNhdGlvbiBkZSBsXHUyMDE5YW5uw6llIDE5OTYnKSwNCiAgICAgIGJvZHkoJ01hZGFtZSwgTW9uc2lldXIsJyksDQogICAgICBib2R5KCdKZSB2b3VzIHByaWUgZGUgYmllbiB2b3Vsb2lyIHByb2PDqWRlciDDoCBsYSByw6lndWxhcmlzYXRpb24gZGUgbW9uIHJlbGV2w6kgZGUgY2FycmnDqHJlIHBvdXIgbFx1MjAxOWFubsOpZSAxOTk2LCBwb3VyIGxhcXVlbGxlIGRldXggdHJpbWVzdHJlcyBzZXVsZW1lbnQgc29udCBpbnNjcml0cy4nKSwNCiAgICAgIGJvZHkoJ1ZvdXMgdHJvdXZlcmV6IGNpLWpvaW50IGxhIGNvcGllIGRlIG1lcyBidWxsZXRpbnMgZGUgc2FsYWlyZSBjb3V2cmFudCBsYSBww6lyaW9kZS4nKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptbSgzKSxiYWNrZ3JvdW5kOlJUSU5ULGJvcmRlcjonMXB4IGRhc2hlZCAnK1JFRCxmb250U2l6ZTpmcygyLjYpLGNvbG9yOk5BVll9fSwnTsKwIGRlIHPDqWN1cml0w6kgc29jaWFsZVx1MDBhMDogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4nKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm1tKDIpLGFsaWduU2VsZjonZmxleC1lbmQnLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6ZnMoNSksY29sb3I6TkFWWSxvcGFjaXR5OjAuNSx0cmFuc2Zvcm06J3JvdGF0ZSgtNGRlZyknfX0sJ3NpZ25hdHVyZScpKTsNCiAgICByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLHdpZHRoOncrJ3B4JyxoZWlnaHQ6aCsncHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3hTaGFkb3c6JzAgMjJweCA1MHB4IC0yNnB4IHJnYmEoMTQsMTksNzksMC40NSknLGJveFNpemluZzonYm9yZGVyLWJveCcscGFkZGluZzptbSgxMSkrJyAnK21tKDEzKSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptbSg0KSxvdmVyZmxvdzonaGlkZGVuJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptbSg0KSxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ0JvdHRvbTptbSgyLjUpfX0sDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOmZzKDIuNCksY29sb3I6R1JFWSx3aGl0ZVNwYWNlOidub3dyYXAnfX0sJ0Rvc3NpZXIgZFx1MjAxOWFuYWx5c2UnKSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6ZnMoMi40KSxmb250V2VpZ2h0OjYwMCxsZXR0ZXJTcGFjaW5nOicwLjFlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpHUkVZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSxraW5kPT09MD8nU3VqZXQgMSAvIDEzJzpraW5kPT09MT8nQW5uw6llIHBhciBhbm7DqWUnOidDb3VycmllciAyIC8gNCcpKSwNCiAgICAgIGNvcmUpOw0KICB9DQoNCiAgcGFnZUEobSl7DQogICAgY29uc3QgZWw9X0guY3JlYXRlRWxlbWVudDsNCiAgICBjb25zdCBpbm5lcj1jPT5lbCgnZGl2Jyx7c3R5bGU6e21heFdpZHRoOm0/J25vbmUnOicxMDYwcHgnLG1hcmdpbjonMCBhdXRvJyxwYWRkaW5nOm0/JzAgMjRweCc6JzAgNjBweCd9fSxjKTsNCiAgICBjb25zdCBzZWN0PShiZyxjaGlsZHJlbixleHRyYSk9PmVsKCdzZWN0aW9uJyx7c3R5bGU6T2JqZWN0LmFzc2lnbih7cGFkZGluZzptPyc0OHB4IDAnOic4NHB4IDAnLGJhY2tncm91bmQ6Ymd8fCd0cmFuc3BhcmVudCd9LGV4dHJhfHx7fSl9LGlubmVyKGNoaWxkcmVuKSk7DQogICAgY29uc3QgY29sPShnYXAsa2lkcyk9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6Z2FwfX0sa2lkcyk7DQogICAgY29uc3QgaDI9KHR4dCxkYXJrLHIpPT5lbCgnaDInLHtzdHlsZTp7bWFyZ2luOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyhyPyczNHB4JzonMjZweCcpOihyPyc2MnB4JzonMzhweCcpLGxpbmVIZWlnaHQ6MS4wMixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjZlbScsY29sb3I6ZGFyaz8nI2ZmZmZmZic6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSx0eHQpOw0KICAgIGNvbnN0IHA9KHR4dCxkYXJrKT0+ZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTZweCc6JzE3LjVweCcsbGluZUhlaWdodDoxLjY4LGNvbG9yOmRhcms/J3JnYmEoMjU1LDI1NSwyNTUsMC44MiknOklOSyxtYXhXaWR0aDonNjBjaCcsdGV4dFdyYXA6J3ByZXR0eSd9fSx0eHQpOw0KICAgIGNvbnN0IHJ1bGVSb3c9KGtpZHMpPT5lbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE3cHggMCc6JzIycHggMCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycyOHB4IDFmcic6JzQ2cHggMWZyIDEuMmZyJyxnYXA6bT8nMCAxMnB4JzonMCAzMHB4JyxhbGlnbkl0ZW1zOidzdGFydCd9fSxraWRzKTsNCg0KICAgIGNvbnN0IE5BVkxJTktTPVtbJ0xlIGRvc3NpZXInLCdyZWNvaXMnXSxbJ0xlIHByaXgnLCdvZmZyZSddLFsnUXVlc3Rpb25zJywncXVlc3Rpb25zJ11dOw0KICAgIGNvbnN0IHZlbmRhYmxlPShTVFJJUEUgJiYgU1RSSVBFIT09JyMnICYmICEvUkVNUExBQ0VSLy50ZXN0KFNUUklQRSkpOw0KICAgIGNvbnN0IGJhcj1lbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOm0/J3N0YXRpYyc6J3N0aWNreScsdG9wOm0/J2F1dG8nOjAsekluZGV4OjIwLGJhY2tncm91bmQ6JyMwODBjMmMnLGJvcmRlckJvdHRvbTonMnB4IHNvbGlkICcrUkVELHBhZGRpbmdUb3A6bT8nNDZweCc6MH19LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXhXaWR0aDptPydub25lJzonMTEwMHB4JyxtYXJnaW46JzAgYXV0bycscGFkZGluZzptPycxMnB4IDIycHgnOicwIDQwcHgnLGhlaWdodDptPydhdXRvJzonNzBweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOm0/JzE0cHgnOicyNHB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMHB4JyxtaW5XaWR0aDowLGZsZXhTaHJpbms6MH19LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzEycHgnLGhlaWdodDonMTJweCcsYm9yZGVyVG9wOicycHggc29saWQgJytSRUQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELGZsZXhTaHJpbms6MH19KSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLGNvbG9yOicjZmZmZmZmJ319LCdBRENGJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxM3B4JzonMTUuNXB4Jyxjb2xvcjonI2FhYjJlZScscGFkZGluZ0xlZnQ6bT8nMTFweCc6JzE2cHgnLG1hcmdpbkxlZnQ6bT8nNHB4JzonNnB4Jyxib3JkZXJMZWZ0OicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0sJ0JpbGFuIHJldHJhaXRlJykpLA0KICAgICAgICBtP251bGw6ZWwoJ25hdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMjBweCcsZmxleFNocmluazowfX0sDQogICAgICAgICAgTkFWTElOS1MubWFwKGZ1bmN0aW9uKHgsaTIpeyByZXR1cm4gZWwoJ2EnLHtrZXk6aTIsaHJlZjonIycreFsxXSxvbkNsaWNrOmZ1bmN0aW9uKGUpeyBpZihlJiZlLnByZXZlbnREZWZhdWx0KWUucHJldmVudERlZmF1bHQoKTsgdHJ5eyB0cmFjaygnbmF2X2NsaWNrJyx7Y2libGU6eFsxXX0pOyB9Y2F0Y2goXyl7fQ0KICAgICAgICAgICAgICB2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1uYXY9IicreFsxXSsnIl0nKTsgaWYodCkgdC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsYmxvY2s6J3N0YXJ0J30pOyB9LA0KICAgICAgICAgICAgb25Nb3VzZUVudGVyOmZ1bmN0aW9uKGUpeyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9JyNmZmZmZmYnOyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQm90dG9tQ29sb3I9UkVEOyB9LA0KICAgICAgICAgICAgb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKGUpeyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9JyNhYWIyZWUnOyBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQm90dG9tQ29sb3I9J3RyYW5zcGFyZW50JzsgfSwNCiAgICAgICAgICAgIHN0eWxlOntmb250U2l6ZTonMTRweCcsZm9udFdlaWdodDo1MDAsY29sb3I6JyNhYWIyZWUnLHRleHREZWNvcmF0aW9uOidub25lJyx3aGl0ZVNwYWNlOidub3dyYXAnLGN1cnNvcjoncG9pbnRlcicscGFkZGluZ0JvdHRvbTonM3B4Jyxib3JkZXJCb3R0b206JzJweCBzb2xpZCB0cmFuc3BhcmVudCcsdHJhbnNpdGlvbjonY29sb3IgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlJ319LHhbMF0pOyB9KSksDQogICAgICAgIG0/bnVsbDplbCgnYScse2hyZWY6dmVuZGFibGU/U1RSSVBFOicjb2ZmcmUnLG9uQ2xpY2s6ZT0+e3RyeXt0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDp2ZW5kYWJsZT8nc3RyaXBlJzonb2ZmcmUnLGVtcGxhY2VtZW50OidiYXJyZV9oYXV0J30pO31jYXRjaChfKXt9IGlmKCF2ZW5kYWJsZSl7IGlmKGUmJmUucHJldmVudERlZmF1bHQpZS5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnRvT2ZmcmUoZSk7IH19LG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7fSxzdHlsZTp7ZmxleFNocmluazowLHRleHREZWNvcmF0aW9uOidub25lJyxkaXNwbGF5OidpbmxpbmUtZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzlweCcsYmFja2dyb3VuZDpSRUQsaGVpZ2h0Oic0NnB4JyxwYWRkaW5nOicwIDIwcHgnLHdoaXRlU3BhY2U6J25vd3JhcCcsYm94U2hhZG93OicwIDEwcHggMjRweCAtMTJweCByZ2JhKDI0NSwzNyw3MywwLjU1KScsdHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTVweCcsZm9udFdlaWdodDo3MDAsY29sb3I6JyNmZmZmZmYnfX0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEzLjVweCcsZm9udFdlaWdodDo1MDAsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC44MiknLHBhZGRpbmdMZWZ0Oic5cHgnLGJvcmRlckxlZnQ6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMzUpJ319LHRoaXMucHJpY2UoKSkpKSk7DQoNCiAgICBjb25zdCBsaWduZUxlb25hcmQ9ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzIwcHgnLHBhZGRpbmdUb3A6bT8nMTRweCc6JzE4cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKScsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6bT8nMTJweCc6JzE0cHgnfX0sDQogICAgICAoUEhPVE8NCiAgICAgICAgPyBlbCgnaW1nJyx7c3JjOlBIT1RPLGFsdDp0aGlzLmZvdW5kZXIoKSxzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOic0OHB4JyxoZWlnaHQ6JzQ4cHgnLGJvcmRlclJhZGl1czonNTAlJyxvYmplY3RGaXQ6J2NvdmVyJyxkaXNwbGF5OidibG9jayd9fSkNCiAgICAgICAgOiBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonNDhweCcsaGVpZ2h0Oic0OHB4Jyxib3JkZXJSYWRpdXM6JzUwJScsYmFja2dyb3VuZDoncmdiYSgyNTUsMjU1LDI1NSwwLjEyKScsYm9yZGVyOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpJ319KSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjAsZm9udFNpemU6bT8nMTMuNXB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6JyNhYWIyZWUnfX0sDQogICAgICAgIGVsKCdzdHJvbmcnLHtzdHlsZTp7Y29sb3I6JyNmZmZmZmYnLGZvbnRXZWlnaHQ6NjAwfX0sdGhpcy5mb3VuZGVyKCkrJyBhbmFseXNlIHZvdHJlIHJlbGV2w6kgZXQgcsOpZGlnZSB2b3RyZSBiaWxhbiByZXRyYWl0ZS4nKSwnIENocm9uaXF1ZXVyIGF1IEpvdXJuYWwgZHUgTmV0LicpKTsNCg0KICAgIC8vIEh1aXQgcsOpc3VsdGF0cywgdmVyYmUgZW4gdMOqdGUsIHVuZSBsaWduZSBjaGFjdW4uIFJpZW4gZW4gc2VyaWYgaWNpIDogbGUgdGl0cmUNCiAgICAvLyBkb2l0IHJlc3RlciBsZSBzZXVsIGRpc3BsYXkgZGUgbCfDqWNyYW4uDQogICAgY29uc3QgU0FWT0lSPVsNCiAgICAgICdDZSBxdWUgdm90cmUgcmVsZXbDqSBjb21wdGUgdnJhaW1lbnQsIGFubsOpZSBwYXIgYW5uw6llJywNCiAgICAgICdMZXMgYW5uw6llcyBxdWkgbWFucXVlbnQsIGV0IGNlIHF1aSBwZXV0IGxcdTIwMTlleHBsaXF1ZXInLA0KICAgICAgJ0NlIHF1ZSBjaGFxdWUgY29ycmVjdGlvbiBham91dGVyYWl0LCBzaSB2b3RyZSBjYWlzc2UgbGEgcmV0aWVudCcsDQogICAgICAnw4AgcXVlbGxlIGRhdGUgdm91cyBwb3VycmlleiBwYXJ0aXIsIGV0IGNlIHF1ZSA2IG1vaXMgZGUgcGx1cyBjaGFuZ2VyYWllbnQnLA0KICAgICAgJ1NpIHZvdHJlIGNhcnJpw6hyZSBlbnRyZSBkYW5zIGxlcyBjb25kaXRpb25zIGRcdTIwMTl1biBkw6lwYXJ0IGFudGljaXDDqScsDQogICAgICAnU2kgcmFjaGV0ZXIgZGVzIHRyaW1lc3RyZXMgYSB1biBpbnTDqXLDqnQgY2hleiB2b3VzJywNCiAgICAgICdDZSBxdWUgdm90cmUgcmV0cmFpdGUgcG91cnJhaXQgb3V2cmlyIMOgIHZvdHJlIGNvbmpvaW50LCBldCBzb3VzIHF1ZWxsZXMgY29uZGl0aW9ucycsDQogICAgICAnTGVzIGNvdXJyaWVycyBkw6lqw6Agw6ljcml0cywgw6Agc2lnbmVyIGV0IMOgIHBvc3RlcicNCiAgICBdOw0KICAgIC8vIDMgYsOpbsOpZmljZXMgY291cnRzIHNldWxlbWVudCA6IGxlcyA4IGTDqXRhaWxsw6lzIHZpdmVudCBkYW5zIGxhIHNlY3Rpb24gZHUgYmlsYW4uDQogICAgY29uc3Qgc2F2b2lyPWVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzE0cHgnOicyMHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc3cHgnOic4cHgnfX0sDQogICAgICBbU0FWT0lSWzFdLFNBVk9JUlszXSxTQVZPSVJbN11dLm1hcChmdW5jdGlvbih0MixpMil7IHJldHVybiBlbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMHB4J319LA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzZweCd9fSksDQogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOicjZGZlM2ZiJ319LHQyKSk7IH0pKTsNCg0KICAgIGNvbnN0IGNvbG9ubmVBcmd1bWVudD1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA0NiUnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMC41cHgnOicxMS41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYWFiMmVlJ319LCdCaWxhbiByZXRyYWl0ZScpLA0KICAgICAgZWwoJ2gxJyx7c3R5bGU6e21hcmdpbjptPycxMnB4IDAgMCc6JzE2cHggMCAwJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI5cHgnOic1MnB4JyxsaW5lSGVpZ2h0Om0/MS4xOjEuMDQsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzptPyctMC4wMjRlbSc6Jy0wLjAzZW0nLGNvbG9yOicjZmZmZmZmJ319LCdMZXMgYW5uw6llcyBxdWkgbWFucXVlbnQgc29udCB0b3Vqb3VycyBsZXMgbcOqbWVzLicpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnt3aWR0aDonNTRweCcsaGVpZ2h0OicycHgnLGJhY2tncm91bmQ6UkVELG1hcmdpblRvcDptPycxNHB4JzonMjBweCd9fSksDQogICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nMTRweCAwIDAnOicyMHB4IDAgMCcsZm9udFNpemU6bT8nMTVweCc6JzE3cHgnLGxpbmVIZWlnaHQ6MS41OCxjb2xvcjonI2M3Y2RmMicsbWF4V2lkdGg6JzQ2Y2gnfX0sbQ0KICAgICAgICA/ICdVbiBjb25nw6kgcGFyZW50YWwsIHVuIHRlbXBzIHBhcnRpZWwsIHVuZSBtaXNzaW9uIGRcdTIwMTlpbnTDqXJpbVx1MDBhMDogY2Ugc29udCBjZXMgYW5uw6llcy1sw6AgcXVpIG1hbnF1ZW50IHN1ciB1biByZWxldsOpLiBFdCB1bmUgYW5uw6llIGVuIG1vaW5zLCBjXHUyMDE5ZXN0IHVuZSBwZW5zaW9uIHBsdXMgYmFzc2UgdG91cyBsZXMgbW9pcy4nDQogICAgICAgIDogJ1VuIGNvbmfDqSBwYXJlbnRhbCwgdW4gdGVtcHMgcGFydGllbCwgdW5lIG1pc3Npb24gZFx1MjAxOWludMOpcmltLCB1bmUgcMOpcmlvZGUgc291cyBhbGxvY2F0aW9ucyBmYW1pbGlhbGVzXHUwMGEwOiBjZSBzb250IGNlcyBhbm7DqWVzLWzDoCBxdWkgbWFucXVlbnQgc3VyIHVuIHJlbGV2w6kgZGUgY2FycmnDqHJlLiBFdCB1bmUgYW5uw6llIGVuIG1vaW5zLCBjZSBuXHUyMDE5ZXN0IHBhcyB1bmUgbGlnbmUgc3VyIHVuIHBhcGllciwgY1x1MjAxOWVzdCB1bmUgcGVuc2lvbiBwbHVzIGJhc3NlIHRvdXMgbGVzIG1vaXMsIHBlbmRhbnQgdG91dGUgdm90cmUgcmV0cmFpdGUuJyksDQogICAgICBzYXZvaXIsDQogICAgICBsaWduZUxlb25hcmQpOw0KDQogICAgY29uc3QgY29sb25uZUFjdGlvbj1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA0NiUnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJ319LHRoaXMubGVjdHVyZShtLCdoZXJvJykpOw0KDQogICAgY29uc3QgaGVybz1lbCgnaGVhZGVyJyx7J2RhdGEtZm9sZCc6JzEnLHN0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLG92ZXJmbG93OidoaWRkZW4nLGJhY2tncm91bmQ6TkFWWSxiYWNrZ3JvdW5kSW1hZ2U6J3JhZGlhbC1ncmFkaWVudCgxMjAlIDkwJSBhdCAxOCUgMCUsICMxYjI0NzggMCUsIHJnYmEoMjcsMzYsMTIwLDApIDU4JSksIHJhZGlhbC1ncmFkaWVudCg5MCUgNzAlIGF0IDEwMCUgMTAwJSwgIzA3MGEyNiAwJSwgcmdiYSg3LDEwLDM4LDApIDYyJSknLHBhZGRpbmc6bT8nMjZweCAwIDMycHgnOic1NnB4IDAgNzZweCd9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyMnB4JzonOCUnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sDQogICAgICAgIGNvbG9ubmVBcmd1bWVudCwNCiAgICAgICAgY29sb25uZUFjdGlvbikpKTsNCg0KICAgIC8vIE1pbmlhdHVyZXMgZGVzIHBhZ2VzIHLDqWVsbGVzIGR1IGRvc3NpZXIgOiBtw6ptZXMgcHJvcG9ydGlvbnMsIG3Dqm1lIGNoYXJ0ZSwNCiAgICAvLyBjb250ZW51cyByZXByaXMgZGVzIGdhYmFyaXRzIGQnaW1wcmVzc2lvbi4NCiAgICBjb25zdCBtRmV1aWxsZT0oa2lkcyk9PmVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzEwMCUnLGFzcGVjdFJhdGlvOicyMTAgLyAyOTcnLGJhY2tncm91bmQ6JyNmZmZmZmYnLHBhZGRpbmc6bT8nOHB4IDdweCA3cHgnOicxMnB4IDExcHggMTBweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxjb2xvcjpOQVZZLGJveFNpemluZzonYm9yZGVyLWJveCcsb3ZlcmZsb3c6J2hpZGRlbid9fSxraWRzKTsNCiAgICBjb25zdCBtVGV0ZT0oZHJvaXRlKT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonNnB4Jyxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ0JvdHRvbTptPyczcHgnOic0cHgnLGZvbnRTaXplOm0/JzMuOHB4JzonNS4ycHgnLGNvbG9yOkdSRVl9fSwNCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e3doaXRlU3BhY2U6J25vd3JhcCcsb3ZlcmZsb3c6J2hpZGRlbicsdGV4dE92ZXJmbG93OidlbGxpcHNpcyd9fSwnQ2xhaXJlIERVUE9OVCDCtyBEb3NzaWVyIGRcdTIwMTlhbmFseXNlJyksDQogICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4wOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnfX0sZHJvaXRlKSk7DQogICAgY29uc3QgbUJhcz0objIpPT5lbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDonYXV0bycscGFkZGluZ1RvcDptPyc0cHgnOic1cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxkaXNwbGF5OidmbGV4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZm9udFNpemU6bT8nMy42cHgnOic1cHgnLGNvbG9yOkdSRVl9fSwNCiAgICAgIGVsKCdzcGFuJyxudWxsLCdBRENGJyksZWwoJ3NwYW4nLG51bGwsbjIpKTsNCiAgICBjb25zdCBtVHJhaXRzPShsaXN0KT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycyLjVweCc6JzMuNXB4J319LA0KICAgICAgbGlzdC5tYXAoZnVuY3Rpb24odyxrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6ayxzdHlsZTp7aGVpZ2h0Om0/JzEuNnB4JzonMi4ycHgnLHdpZHRoOncrJyUnLGJhY2tncm91bmQ6JyNlM2U3ZjAnfX0pOyB9KSk7DQoNCiAgICBjb25zdCBwYWdlQ291dj1lbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOicxMDAlJyxhc3BlY3RSYXRpbzonMjEwIC8gMjk3JyxiYWNrZ3JvdW5kOk5BVlksYmFja2dyb3VuZEltYWdlOidsaW5lYXItZ3JhZGllbnQoMTUwZGVnLCMxNDFjNjMgMCUsIzBiMTA0MCA2MCUpJyxwYWRkaW5nOm0/JzlweCA4cHgnOicxM3B4IDEycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsYm94U2l6aW5nOidib3JkZXItYm94JyxvdmVyZmxvdzonaGlkZGVuJ319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPyczLjZweCc6JzVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yNGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjZmY4MDk1J319LCfDiXRhYmxpIHBvdXInKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzZweCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc5cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEsY29sb3I6JyNjN2NkZjInfX0sJ0NsYWlyZScpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE3cHgnOicyNXB4JyxsaW5lSGVpZ2h0OjAuOTQsbGV0dGVyU3BhY2luZzonLTAuMDM1ZW0nLGNvbG9yOicjZmZmZmZmJ319LCdEVVBPTlQnKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6bT8nMTZweCc6JzIycHgnLGhlaWdodDonMnB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Ub3A6bT8nNnB4JzonOHB4J319KSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzZweCc6JzhweCcsZm9udFNpemU6bT8nNHB4JzonNS40cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjonI2M3Y2RmMid9fSwnNDIgYW5uw6llcyBhbmFseXPDqWVzLCB1bmUgcGFyIHVuZS4gJyxlbCgnc3Bhbicse3N0eWxlOntjb2xvcjonI2ZmZmZmZicsZm9udFdlaWdodDo2MDB9fSwnMTMgc3VqZXRzIMOgIGZhaXJlIHbDqXJpZmllci4nKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDonYXV0bycsbWFyZ2luQm90dG9tOm0/JzZweCc6JzhweCcscG9zaXRpb246J3JlbGF0aXZlJyxoZWlnaHQ6bT8nMjZweCc6JzM4cHgnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCknfX0sDQogICAgICAgIFtbNiw0Ml0sWzE0LDU4XSxbMjMsMzZdLFszMSw3MF0sWzM4LDUyXSxbNDYsNzhdLFs1NCw0NF0sWzYyLDY2XSxbNzAsODRdLFs3OCw1OF0sWzg2LDcyXSxbOTQsNjJdXQ0KICAgICAgICAgIC5tYXAoZnVuY3Rpb24ocHQsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDpwdFswXSsnJScsYm90dG9tOjAsd2lkdGg6bT8nMnB4JzonM3B4JyxoZWlnaHQ6cHRbMV0rJyUnLGJhY2tncm91bmQ6WzEsNSw5XS5pbmRleE9mKGspPj0wP1JFRDoncmdiYSgyNTUsMjU1LDI1NSwwLjQyKSd9fSk7IH0pKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luTGVmdDptPyctOHB4JzonLTEycHgnLG1hcmdpblJpZ2h0Om0/Jy04cHgnOictMTJweCcsYmFja2dyb3VuZDpSRUQscGFkZGluZzptPyc1cHggOHB4JzonN3B4IDEycHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMy40cHgnOic0LjZweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNmZmZmZmYnfX0sJ0NldHRlIHNlbWFpbmUsIHRyb2lzIGNob3NlcycpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyczcHgnOic0cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6J3JlcGVhdCgzLDFmciknLGdhcDptPyc0cHgnOic2cHgnfX0sDQogICAgICAgICAgWydTaWduZXIgbGUgY291cnJpZXIgMScsJ0RlbWFuZGVyIHZvcyBidWxsZXRpbnMnLCdQb3N0ZXIgZW4gcmVjb21tYW5kw6knXS5tYXAoZnVuY3Rpb24odDIsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2ZvbnRTaXplOm0/JzMuNHB4JzonNC42cHgnLGxpbmVIZWlnaHQ6MS4zNSxjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjkyKSd9fSx0Mik7IH0pKSkpOw0KDQogICAgY29uc3QgcGFnZVN1amV0PW1GZXVpbGxlKFsNCiAgICAgIG1UZXRlKCdJSSDCtyBTdWpldCAzIC8gMTMnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3QnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNXB4JzonN3B4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidmbGV4LWVuZCcsZ2FwOm0/JzVweCc6JzdweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyN3B4Jyxmb250V2VpZ2h0OjYwMCxsaW5lSGVpZ2h0OjAuNzgsbGV0dGVyU3BhY2luZzonLTAuMDRlbSd9fSwnMTk4MicpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6MSxwYWRkaW5nQm90dG9tOicxcHgnLG1pbldpZHRoOjB9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzMuNHB4JzonNC42cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMTZlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonIzU3NjA2ZCd9fSwnU3VqZXQgblx1MDBiMCAzJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzZweCc6JzhweCcsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLjI1LGxldHRlclNwYWNpbmc6Jy0wLjAxNWVtJyxtYXJnaW5Ub3A6JzFweCd9fSwnRGVzIHBvaW50cywgbWFpcyBhdWN1biB0cmltZXN0cmUnKSkpLA0KICAgICAgZWwoJ2Rpdicse2tleTonYicsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnLGJvcmRlclRvcDonMS41cHggc29saWQgJytOQVZZLGJvcmRlckJvdHRvbTonMS41cHggc29saWQgJytOQVZZLHBhZGRpbmc6bT8nM3B4IDAnOic0cHggMCcsZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDonNnB4J319LA0KICAgICAgICBbWycxNycsJ3BvaW50cyBJcmNhbnRlYyddLFsnMCcsJ3RyaW1lc3RyZSBkZSBiYXNlJ10sWyc0IDYzOCBGJywncmV2ZW51IHBvcnTDqSddXS5tYXAoZnVuY3Rpb24oeCxrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6a30sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzZweCc6JzhweCcsbGluZUhlaWdodDoxLGNvbG9yOms9PT0xPycjYzQxNzNhJzpOQVZZfX0seFswXSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPyczLjRweCc6JzQuNnB4Jyxjb2xvcjpHUkVZLG1hcmdpblRvcDonMXB4J319LHhbMV0pKTsgfSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncCcsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnLGZvbnRTaXplOm0/JzMuOXB4JzonNS4zcHgnLGxpbmVIZWlnaHQ6MS41NX19LCdMXHUyMDE5YW5uw6llIDE5ODIgcG9ydGUgMTcgcG9pbnRzIGRlIHJldHJhaXRlIGNvbXBsw6ltZW50YWlyZSwgY2UgcXVpIHN1cHBvc2UgdW5lIGFjdGl2aXTDqSByw6ltdW7DqXLDqWUsIG1haXMgYXVjdW4gdHJpbWVzdHJlIGRlIGJhc2UuJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzVweCd9fSxtVHJhaXRzKFs5Niw4OCw5NCw3Ml0pKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3MnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNnB4JyxiYWNrZ3JvdW5kOicjRkRFQ0VGJyxib3JkZXJMZWZ0OicycHggc29saWQgJytSRUQscGFkZGluZzptPyczcHggNHB4JzonNHB4IDZweCcsZm9udFNpemU6bT8nMy43cHgnOic1cHgnLGxpbmVIZWlnaHQ6MS41fX0sJ1NldWlsIDE5ODJcdTAwYTA6IDMgNjMwIEYgZW4gbcOpdHJvcG9sZSwgMiA3NjggRiDDoCBMYSBSw6l1bmlvbi4gTGUgcmV2ZW51IHBvcnTDqSBkw6lwYXNzYWl0IGxlIHNldWlsIHBhcnRvdXQuJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidsMicsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnfX0sbVRyYWl0cyhbOTIsODAsODZdKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidyJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzVweCcsZm9udFNpemU6bT8nMy41cHgnOic0LjhweCcsY29sb3I6R1JFWX19LCdSw6hnbGVzIGFwcGxpcXXDqWVzXHUwMGEwOiBSMDMsIFIzNy4nKSwNCiAgICAgIG1CYXMoJ1BhZ2UgNicpDQogICAgXSk7DQoNCiAgICBjb25zdCBwYWdlQ291cnJpZXI9bUZldWlsbGUoWw0KICAgICAgbVRldGUoJ0lWIMK3IENvdXJyaWVyIDEgLyA1JyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidhJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzZweCc6JzhweCcsYWxpZ25TZWxmOidmbGV4LWVuZCcsdGV4dEFsaWduOidyaWdodCcsZm9udFNpemU6bT8nMy43cHgnOic1cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnQ2Fpc3NlIGRcdTIwMTlhc3N1cmFuY2UgcmV0cmFpdGUnLGVsKCdicicpLCdldCBkZSBsYSBzYW50w6kgYXUgdHJhdmFpbCcpLA0KICAgICAgZWwoJ2Rpdicse2tleTonbycsc3R5bGU6e21hcmdpblRvcDptPyc2cHgnOic4cHgnLGZvbnRTaXplOm0/JzQuMXB4JzonNS42cHgnLGZvbnRXZWlnaHQ6NzAwfX0sJ09iamV0XHUwMGEwOiBkZW1hbmRlIGRcdTIwMTllbnRyZXRpZW4gaW5mb3JtYXRpb24gcmV0cmFpdGUnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2MnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNnB4Jyxmb250U2l6ZTptPyczLjlweCc6JzUuM3B4JyxsaW5lSGVpZ2h0OjEuNn19LCdNYWRhbWUsIE1vbnNpZXVyLCcpLA0KICAgICAgZWwoJ2Rpdicse2tleTonYzInLHN0eWxlOnttYXJnaW5Ub3A6bT8nM3B4JzonNHB4Jyxmb250U2l6ZTptPyczLjlweCc6JzUuM3B4JyxsaW5lSGVpZ2h0OjEuNn19LCdDb25mb3Jtw6ltZW50IMOgIGxcdTIwMTlhcnRpY2xlIEQuMTYxLTItMS04LTMgZHUgY29kZSBkZSBsYSBzw6ljdXJpdMOpIHNvY2lhbGUsIGplIHNvbGxpY2l0ZSB1biBlbnRyZXRpZW4gaW5mb3JtYXRpb24gcmV0cmFpdGUuJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidjMycsc3R5bGU6e21hcmdpblRvcDptPyczcHgnOic0cHgnfX0sbVRyYWl0cyhbOTgsOTQsODgsOTYsNzJdKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidjaCcsc3R5bGU6e21hcmdpblRvcDptPyc1cHgnOic3cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzNweCc6JzRweCd9fSwNCiAgICAgICAgWydOb20gZXQgcHLDqW5vbScsJ051bcOpcm8gZGUgc8OpY3VyaXTDqSBzb2NpYWxlJywnRGF0ZSBldCBzaWduYXR1cmUnXS5tYXAoZnVuY3Rpb24odDIsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzVweCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udFNpemU6bT8nMy40cHgnOic0LjZweCcsY29sb3I6R1JFWSx3aWR0aDptPyczNHB4JzonNDZweCd9fSx0MiksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleDoxLGJvcmRlckJvdHRvbTonMXB4IGRvdHRlZCAjYjljMWQ2JyxoZWlnaHQ6bT8nNnB4JzonOHB4J319KSk7IH0pKSwNCiAgICAgIG1CYXMoJ1BhZ2UgMjEnKQ0KICAgIF0pOw0KDQogICAgY29uc3QgcGFnZUV1cm9zPW1GZXVpbGxlKFsNCiAgICAgIG1UZXRlKCdJIMK3IExcdTIwMTllc3NlbnRpZWwnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2gnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNXB4JzonN3B4Jyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzhweCc6JzExcHgnLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MS4xNSxsZXR0ZXJTcGFjaW5nOictMC4wMmVtJ319LCdDZSBxdWUgY2VsYSByZXByw6lzZW50ZSBlbiBldXJvcycpLA0KICAgICAgZWwoJ2Rpdicse2tleTondycsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnLGJvcmRlcjonMS41cHggc29saWQgI2I4MTgzMyd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOicjYjgxODMzJyxjb2xvcjonI2ZmZmZmZicscGFkZGluZzptPycycHggNHB4JzonM3B4IDZweCcsZm9udFNpemU6bT8nMy4zcHgnOic0LjRweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4wNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnfX0sJ0RlcyBlc3RpbWF0aW9ucywgcGFzIHVuZSBkw6ljaXNpb24nKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nOm0/JzNweCA0cHgnOic0cHggNnB4JyxiYWNrZ3JvdW5kOicjRkRFQ0VGJyxmb250U2l6ZTptPyczLjZweCc6JzQuOXB4JyxsaW5lSGVpZ2h0OjEuNX19LCdDYWxjdWzDqWVzIGF2ZWMgbGEgZm9ybXVsZSBvZmZpY2llbGxlLCDDoCBwYXJ0aXIgZGVzIHNhbGFpcmVzIHF1ZSB2b3RyZSByZWxldsOpIHBvcnRlIGF1am91cmRcdTIwMTlodWkuJykpLA0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDptPyc1cHgnOic2cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6JzFmciAxZnInLGdhcDptPyc0cHgnOic2cHgnfX0sDQogICAgICAgIFtbJzQgMzc5IOKCrCcsJ3BhciBtb2lzLCBhdWpvdXJkXHUyMDE5aHVpJ10sWyc1IDE5OSDigqwnLCdzaSBsZXMgZGVtYW5kZXMgYWJvdXRpc3NlbnQnXV0ubWFwKGZ1bmN0aW9uKHgsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2JvcmRlclRvcDonMS41cHggc29saWQgJysoaz9SRUQ6TkFWWSkscGFkZGluZ1RvcDptPyczcHgnOic0cHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzlweCc6JzEycHgnLGxpbmVIZWlnaHQ6MSxjb2xvcjprPycjYzQxNzNhJzpOQVZZfX0seFswXSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPyczLjRweCc6JzQuNnB4Jyxjb2xvcjpHUkVZLG1hcmdpblRvcDonMXB4JyxsaW5lSGVpZ2h0OjEuMzV9fSx4WzFdKSk7IH0pKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3AnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNXB4JzonNnB4Jyxmb250U2l6ZTptPyczLjlweCc6JzUuM3B4JyxsaW5lSGVpZ2h0OjEuNTV9fSwnUmV2ZW51IGFubnVlbCBtb3llbiBkZSA0NCA0MzQg4oKsLCBzdXIgdm9zIDI1IG1laWxsZXVyZXMgYW5uw6llcy4gVm90cmUgdGF1eCBlc3QgZGUgNDAsNjMgJSBsw6Agb8O5IGlsIHBsYWZvbm5lIMOgIDUwICVcdTAwYTA6IGlsIHZvdXMgcmVzdGUgMTUgdHJpbWVzdHJlcyDDoCBvYnRlbmlyLicpLA0KICAgICAgZWwoJ2Rpdicse2tleTonbCcsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic1cHgnfX0sbVRyYWl0cyhbOTQsODYsOTIsNzgsODhdKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidzJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzVweCcsYmFja2dyb3VuZDonI2VlZjJmYicscGFkZGluZzptPyczcHggNHB4JzonNHB4IDZweCcsZm9udFNpemU6bT8nMy43cHgnOic1cHgnLGxpbmVIZWlnaHQ6MS41fX0sJ0NoYXF1ZSB0cmltZXN0cmUgcMOoc2UgNjgg4oKsIHBhciBtb2lzLCDDoCB2aWUuIExlcyBkZW1hbmRlcyBkZSBjZSBkb3NzaWVyIGVuIHZpc2VudCAxMiwgc29pdCA4MjAg4oKsIGRlIHBsdXMgY2hhcXVlIG1vaXMuJyksDQogICAgICBtQmFzKCdQYWdlIDEyJykNCiAgICBdKTsNCg0KICAgICAgICBjb25zdCBSRUNVPVsNCiAgICAgIFsnwqsgw4AgcXVlbGxlIGRhdGUgZXN0LWNlIHF1ZSBqZSBwZXV4IHBhcnRpclx1MDBhMD8gwrsnLCdWb3RyZSBkYXRlLCBjYWxjdWzDqWUgc3VyIHZvcyB0cmltZXN0cmVzIHLDqWVscyBldCBzdXIgbGVzIGRpc3Bvc2l0aWZzIHF1aSBwZXJtZXR0ZW50IGRlIHBhcnRpciBwbHVzIHTDtHRcdTAwYTA6IGNhcnJpw6hyZSBsb25ndWUsIGluYXB0aXR1ZGUsIGNvbXB0ZSBww6luaWJpbGl0w6kuIEF2ZWMgZGV1eCBoeXBvdGjDqHNlcyBjw7R0ZSDDoCBjw7R0ZSwgc2kgdm91cyB2b3VzIGFycsOqdGV6IGRlIHRyYXZhaWxsZXIgZFx1MjAxOWljaSBsw6AgZXQgc2kgdm91cyBjb250aW51ZXouIEV0IGNlIHF1ZSAzIG1vaXMgZGUgcGx1cyBvdSBkZSBtb2lucyBjaGFuZ2VudC4nXSwNCiAgICAgIFsnwqsgQ29tYmllbiBlc3QtY2UgcXVlIGplIHZhaXMgdG91Y2hlclx1MDBhMD8gwrsnLCdMZSBtb250YW50IG1lbnN1ZWwsIGV0IGNvbW1lbnQgaWwgYm91Z2Ugc2Vsb24gbGUgbW9tZW50IG/DuSB2b3VzIHBhcnRlei4gRFx1MjAxOW/DuSB2aWVudCBsYSBwYXJ0IGRlIGJhc2UgZXQgZFx1MjAxOW/DuSB2aWVudCBsYSBjb21wbMOpbWVudGFpcmUuIEV0IGNlIHF1ZSBjZSBjYWxjdWwgc3VwcG9zZSwgw6ljcml0IG5vaXIgc3VyIGJsYW5jLCBwYXJjZSBxdVx1MjAxOXVuZSBlc3RpbWF0aW9uIHNhbnMgc2VzIGh5cG90aMOoc2VzIG5lIHZhdXQgcmllbi4nXSwNCiAgICAgIFsnwqsgUXVcdTIwMTllc3QtY2UgcXVpIG1hbnF1ZSBzdXIgbW9uIHJlbGV2w6lcdTAwYTA/IMK7JywnQ2hhcXVlIHN1amV0IG5vbW3DqSwgYXZlYyBsXHUyMDE5YW5uw6llIGNvbmNlcm7DqWUgZXQgbGVzIHBpw6hjZXMgw6Agam9pbmRyZS4gUGFzIHVuIGNvbXB0ZXVyXHUwMGEwOiBkZXMgdGl0cmVzIGNvbW1lIMKrIHVuZSBww6lyaW9kZSBkZSBjaMO0bWFnZSByZWNvbm51ZSBwYXIgdW4gcsOpZ2ltZSwgcGFzIHBhciBsXHUyMDE5YXV0cmUgwrsgb3UgwqsgbGUgc2V1aWwgZGVzIDEyMCB0cmltZXN0cmVzIGNvdGlzw6lzLCBldCBsZSBwacOoZ2UgcXVpIGxlIGZhaXQgcGVyZHJlIMK7LiddLA0KICAgICAgWyfCqyBFdCBzaSBtYSBjYWlzc2UgbmUgcsOpcG9uZCBwYXNcdTAwYTA/IMK7JywnTGEgc3VpdGUgZXN0IMOpY3JpdGUgYXVzc2lcdTAwYTA6IGxhIHJlbGFuY2UsIMOgIHF1ZWxsZSBkYXRlLCBsZSBtw6lkaWF0ZXVyIGRlIHZvdHJlIGNhaXNzZSByw6lnaW9uYWxlLCBwdWlzIGxhIGNvbW1pc3Npb24gZGUgcmVjb3VycyBhbWlhYmxlIGV0IHNvbiBkw6lsYWkgZGUgMiBtb2lzLiBBdmVjIHVuIHRhYmxlYXUgcG91ciBzdWl2cmUgb8O5IGVuIGVzdCBjaGFxdWUgZGVtYW5kZSwgZXQgY29tbWVudCBsaXJlIGxhIHLDqXBvbnNlIHF1YW5kIGVsbGUgYXJyaXZlLiddLA0KICAgICAgWyfCqyBFdCBzaSB0b3V0IHZhIGJpZW4gY2hleiBtb2lcdTAwYTA/IMK7JywnQWxvcnMgbGUgZG9zc2llciB2b3VzIGxlIGRpdCwgZXQgaWwgZGl0IGNlIHF1aSBhIMOpdMOpIHbDqXJpZmnDqSBwb3VyIGxcdTIwMTlhZmZpcm1lciwgc2V1aWwgcGFyIHNldWlsIGV0IGFubsOpZSBwYXIgYW5uw6llLiBWb3VzIHJlZmVybWV6IGxlIHN1amV0IGF1IGxpZXUgZFx1MjAxOXkgcmVwZW5zZXIgdG91cyBsZXMgNiBtb2lzLiddLA0KICAgICAgWyfCqyBFdCBtb24gY29uam9pbnRcdTAwYTA/IMK7JywnQ2UgcXVlIHZvdHJlIHJldHJhaXRlIGx1aSBvdXZyaXJhaXQsIGV0IHNvdXMgcXVlbGxlcyBjb25kaXRpb25zLiddDQogICAgXTsNCiAgICBjb25zdCByZWN1PXNlY3QobnVsbCxlbCgnZGl2JyxudWxsLFsNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2gnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzEwcHgnOic0NnB4JyxhbGlnbkl0ZW1zOm0/J2ZsZXgtc3RhcnQnOidmbGV4LWVuZCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LHRoaXMuZXllYnJvdygnQ2UgcXVlIHZvdXMgcmVjZXZleicsbnVsbCxudWxsLCdJJyksDQogICAgICAgICAgZWwoJ2gyJyx7c3R5bGU6e21hcmdpbjptPycxMHB4IDAgMCc6JzEycHggMCAwJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI2cHgnOiczOHB4JyxsaW5lSGVpZ2h0OjEuMDIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI2ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ0xlcyBxdWVzdGlvbnMgYXV4cXVlbGxlcyB2b3RyZSBkb3NzaWVyIHLDqXBvbmQnKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVksbWF4V2lkdGg6JzI2Y2gnfX0sJ0RhbnMgdm9zIG1vdHMsIGV0IGRhbnMgY2V0IG9yZHJlLicpKSwNCg0KICAgICAgZWwoJ2Rpdicse2tleTonYWN0JyxzdHlsZTp7bWFyZ2luVG9wOm0/JzIwcHgnOiczMHB4JyxiYWNrZ3JvdW5kOk5BVlksYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQscGFkZGluZzptPycyMHB4IDE4cHggMjJweCc6JzMycHggNDBweCAzNHB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAyNTBweCcsZ2FwOm0/JzE2cHgnOicwIDQ2cHgnLGFsaWduSXRlbXM6J2NlbnRlcid9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMnB4J319LA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxNXB4JzonMTdweCcsbGluZUhlaWdodDoxLjIsZm9udFdlaWdodDo1MDAsY29sb3I6JyNmZjgwOTUnLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LCcwMScpLA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4yZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNmZjgwOTUnfX0sJ0xlIGPFk3VyIGR1IGRvc3NpZXInKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOHB4JzonMTFweCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNHB4JzonMzRweCcsbGluZUhlaWdodDoxLjA4LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNmVtJyxjb2xvcjonI2ZmZmZmZicsdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ8KrIEV0IGNvbmNyw6h0ZW1lbnQsIGplIGZhaXMgcXVvaVx1MDBhMD8gwrsnKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nOXB4IDAgMCc6JzEzcHggMCAwJyxtYXhXaWR0aDonNTJjaCcsZm9udFNpemU6bT8nMTVweCc6JzE2LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6JyNjN2NkZjInfX0sJ1ZvcyBjb3VycmllcnMsIGTDqWrDoCDDqWNyaXRzLCBjaGFjdW4gYWRyZXNzw6kgw6AgbGEgY2Fpc3NlIHF1aSBkb2l0IGxlIHJlY2V2b2lyLiBWb3VzIGxlcyBzaWduZXogZXQgdm91cyBsZXMgcG9zdGV6LicpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowLGJvcmRlclRvcDptPycxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSc6J25vbmUnLGJvcmRlckxlZnQ6bT8nbm9uZSc6JzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMjIpJyxwYWRkaW5nVG9wOm0/JzE0cHgnOicwJyxwYWRkaW5nTGVmdDptPycwJzonMzRweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nNDJweCc6JzU2cHgnLGxpbmVIZWlnaHQ6MC45LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzNWVtJyxjb2xvcjonI2ZmZmZmZid9fSwnMyDDoCA1JyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonNnB4Jyxmb250U2l6ZTptPycxM3B4JzonMTRweCcsbGluZUhlaWdodDoxLjQsY29sb3I6JyNhYWIyZWUnfX0sJ2NvdXJyaWVycyBzZWxvbiB2b3RyZSBjYXJyacOocmUsIHByw6p0cyDDoCBwb3N0ZXInKSkpLA0KDQogICAgICBlbCgnZGl2Jyx7a2V5OidnJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzIycHgnOiczNHB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVll9fSwNCiAgICAgICAgUkVDVS5tYXAoZnVuY3Rpb24oeCxrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6ayxzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicyNnB4IDFmciAxLjVmcicsZ2FwOm0/JzZweCc6JzAgMzBweCcsYWxpZ25JdGVtczonc3RhcnQnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE2cHggMCc6JzIwcHggMCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTVweCc6JzE3cHgnLGxpbmVIZWlnaHQ6MS4zNSxmb250V2VpZ2h0OjUwMCxjb2xvcjpSRUQsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzAnKyhrKzIpKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMThweCc6JzIwcHgnLGxpbmVIZWlnaHQ6MS4yMixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMTRlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSx4WzBdKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0seFsxXSkpOyB9KSkNCiAgICBdKSx7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nNDRweCAwJzonODBweCAwJ30pOw0KDQogICAgY29uc3QgZG9zc2llcj1lbCgnc2VjdGlvbicse3N0eWxlOntiYWNrZ3JvdW5kOlBBUEVSLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzMwcHggMCAzMnB4JzonNTJweCAwIDU2cHgnfX0sDQogICAgICBpbm5lcihlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE2cHgnOicyMnB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nOHB4JzonNDBweCcsYWxpZ25JdGVtczptPydmbGV4LXN0YXJ0JzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LA0KICAgICAgICAgICAgdGhpcy5leWVicm93KCdKdWdleiBzdXIgcGnDqGNlcycpLA0KICAgICAgICAgICAgZWwoJ2gyJyx7c3R5bGU6e21hcmdpbjptPycxMHB4IDAgMCc6JzEycHggMCAwJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI3cHgnOiczOHB4JyxsaW5lSGVpZ2h0OjEuMDUsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI2ZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJzQgcGFnZXMsIHRlbGxlcyBxdVx1MjAxOWVsbGVzIHNvcnRlbnQnKSksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsbWF4V2lkdGg6bT8nbm9uZSc6JzQwY2gnLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCdMYSBjb3V2ZXJ0dXJlLCB1bmUgcGFnZSBkZSBzdWpldCwgdW4gY291cnJpZXIgcHLDqnQgw6Agc2lnbmVyLCBldCBsYSBwYWdlIHF1aSBleHBsaXF1ZSBjb21tZW50IGxpcmUgbGEgcsOpcG9uc2UgcXVlIHZvdXMgcmVjZXZyZXouJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyIDFmcic6J3JlcGVhdCg0LDFmciknLGdhcDptPycxMnB4JzonMjBweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sDQogICAgICAgICAgWw0KICAgICAgICAgICAgW3BhZ2VDb3V2LCdMYSBjb3V2ZXJ0dXJlJ10sDQogICAgICAgICAgICBbcGFnZVN1amV0LCdVbmUgcGFnZSBkZSBzdWpldCddLA0KICAgICAgICAgICAgW3BhZ2VDb3VycmllciwnVW4gY291cnJpZXIgcHLDqnQgw6Agc2lnbmVyJ10sDQogICAgICAgICAgICBbcGFnZUV1cm9zLCdDZSBxdWUgY2VsYSByZXByw6lzZW50ZSBlbiBldXJvcyddDQogICAgICAgICAgXS5tYXAoKHgsaTIpPT5lbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc3cHgnOic5cHgnfX0sDQogICAgICAgICAgICAgIGVsKCdidXR0b24nLHtvbkNsaWNrOigpPT57IHRyeXt0cmFjaygnYXBlcmN1X2FncmFuZGknLHtwYWdlOnhbMV19KTt9Y2F0Y2goXyl7fSB0aGlzLnNldFN0YXRlKHt6b29tOmkyfSk7IH0sDQogICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9TkFWWTt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPUxJTkU7fSwNCiAgICAgICAgICAgICAgICBzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScscGFkZGluZzowLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxjdXJzb3I6J3pvb20taW4nLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJveFNoYWRvdzonMCAxNnB4IDM2cHggLTI2cHggcmdiYSgxNCwxOSw3OSwwLjQ1KScsb3ZlcmZsb3c6J2hpZGRlbicsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonc3RyZXRjaCcsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcid9fSx4WzBdKSwNCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMS41cHgnOicxMi41cHgnLGxpbmVIZWlnaHQ6MS40LGNvbG9yOkdSRVksdGV4dEFsaWduOidjZW50ZXInfX0seFsxXSkpKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsZm9udFN0eWxlOidpdGFsaWMnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ1VuIGRvc3NpZXIgcsOpZWwsIGFub255bWlzw6lcdTAwYTA6IGNlIGRvc3NpZXItbMOgLCA0MiBhbm7DqWVzIHJlcHJpc2VzLCAxMyBzdWpldHMsIDI4IHBhZ2VzLiBDbGlxdWV6IHN1ciB1bmUgcGFnZSBwb3VyIGxcdTIwMTlhZ3JhbmRpci4nKSkpKTsNCg0KICAgIGNvbnN0IHByZXV2ZT1lbCgnc2VjdGlvbicse3N0eWxlOntiYWNrZ3JvdW5kOk5BVlkscGFkZGluZzptPycyOHB4IDAgMzBweCc6JzQ2cHggMCA0OHB4J319LA0KICAgICAgaW5uZXIoZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMnB4JzonMTZweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTAuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNmZjgwOTUnfX0sJ1N1ciBtZXMgMTEgZGVybmllcnMgcmVsZXbDqXMgbHVzJyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6JyM4Zjk4ZDgnfX0sJzQwIGFubsOpZXMgcmVwcmlzZXMgcGFyIHJlbGV2w6ksIGRlIGxhIHByZW1pw6hyZSBsaWduZSDDoCBsYSBkZXJuacOocmUuJyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzRweCc6JzhweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptPycxM3B4JzonMThweCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyc1MnB4JzonNzZweCcsbGluZUhlaWdodDowLjg2LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzNmVtJyxjb2xvcjonI2ZmZmZmZicsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzcnKSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOnttaW5XaWR0aDowfX0sDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntkaXNwbGF5OidibG9jaycsZm9udFNpemU6bT8nMTZweCc6JzE5cHgnLGxpbmVIZWlnaHQ6MS4yNSxmb250V2VpZ2h0OjYwMCxjb2xvcjonI2ZmZmZmZid9fSwndHJpbWVzdHJlcyBlbiBqZXUgZW4gbW95ZW5uZSwganVzcXVcdTIwMTnDoCAyMCBzdXIgdW4gc2V1bCByZWxldsOpLicpLA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZGlzcGxheTonYmxvY2snLG1hcmdpblRvcDonNHB4Jyxmb250U2l6ZTptPycxNHB4JzonMTVweCcsbGluZUhlaWdodDoxLjQsY29sb3I6JyNjN2NkZjInfX0sJ1NvaXQgcHLDqHMgZGUgMiBhbnMgZGUgY290aXNhdGlvbiDDoCBmYWlyZSB2w6lyaWZpZXIuJykpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nNnB4JzonMTBweCcscGFkZGluZ1RvcDptPycxMnB4JzonMTVweCcsYm9yZGVyVG9wOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIpJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm0/JzExcHgnOicxNHB4J319LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzMwcHgnOiczOHB4JyxsaW5lSGVpZ2h0OjAuOTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDNlbScsY29sb3I6JyNmZmZmZmYnLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LCczJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTZweCcsbGluZUhlaWdodDoxLjM1LGZvbnRXZWlnaHQ6NjAwLGNvbG9yOicjZmZmZmZmJ319LCdhbm7DqWVzIHF1aSBuZSBjb2xsZW50IHBhcywgZW4gbW95ZW5uZSwgc3VyIHVuIG3Dqm1lIHJlbGV2w6kuJykpLA0KICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nMTRweCAwIDAnOicyMHB4IDAgMCcscGFkZGluZ1RvcDptPycxNHB4JzonMThweCcsYm9yZGVyVG9wOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKScsbWF4V2lkdGg6Jzc0Y2gnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOicjYzdjZGYyJ319LCdDZXJ0YWlucyBkb3NzaWVycyBwb3J0YWllbnQgYmVhdWNvdXAgZGUgc3VqZXRzIMOgIGZhaXJlIHbDqXJpZmllciwgZFx1MjAxOWF1dHJlcyB0csOocyBwZXUuIEF1Y3VuIHJlbGV2w6kgbmUgcmVzc2VtYmxlIMOgIHVuIGF1dHJlLCBldCBqZSBuZSBzYWlzIHBhcyBjZSBxdWUgcG9ydGUgbGUgdsO0dHJlIGF2YW50IGRlIGxcdTIwMTlhdm9pciBsdS4nKSkpKTsNCg0KICAgIGNvbnN0IHBhc3NlcmVsbGU9ZWwoJ3NlY3Rpb24nLHtzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FLHBhZGRpbmc6bT8nMjRweCAwJzonMzZweCAwJ319LA0KICAgICAgaW5uZXIoZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzIwcHgnOic0NHB4JyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidjZW50ZXInfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMjBweCAxZnIgMjBweCAxZnInLGdhcDptPycxNHB4JzonMCcsYWxpZ25JdGVtczonY2VudGVyJ319LA0KICAgICAgICAgIFtbJ0NlIHF1ZSB2b3VzIGTDqXBvc2V6JywnbGUgUERGIGRlIHZvdHJlIHJlbGV2w6ksIHJpZW4gZFx1MjAxOWF1dHJlJ10sWydDZSBxdWUgdm91cyByZWNldmV6Jywndm90cmUgZG9zc2llciBldCB2b3MgY291cnJpZXJzLCBwcsOqdHMgw6AgcG9zdGVyJ10sWydRdWFuZCcsJ2plIGxlIHLDqWRpZ2Ugc291cyAnK3RoaXMuZGVsYWkoKV1dDQogICAgICAgICAgICAuZmxhdE1hcCgoeCxpKT0+ew0KICAgICAgICAgICAgICBjb25zdCBjZWxsPWVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzVweCcscGFkZGluZ0xlZnQ6bT8nMTJweCc6JzE0cHgnLHBhZGRpbmdSaWdodDptPycwJzonMTRweCcsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrKGk9PT0yP1JFRDpMSU5FKX19LA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxNXB4JzonMTZweCcsY29sb3I6aT09PTI/JyNjNDE3M2EnOkdSRVl9fSx4WzBdKSwNCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6TkFWWX19LHhbMV0pKTsNCiAgICAgICAgICAgICAgaWYobXx8aT09PTIpIHJldHVybiBbY2VsbF07DQogICAgICAgICAgICAgIHJldHVybiBbY2VsbCxlbCgnc3ZnJyx7a2V5OidhJytpLHdpZHRoOjE0LGhlaWdodDoxNCx2aWV3Qm94OicwIDAgMjQgMjQnLGZpbGw6J25vbmUnLHN0eWxlOntvdmVyZmxvdzondmlzaWJsZSd9fSxlbCgncGF0aCcse2Q6J004IDRsOSA4LTkgOCcsc3Ryb2tlOicjYWViNWM2JyxzdHJva2VXaWR0aDoyLjYsc3Ryb2tlTGluZWNhcDoncm91bmQnLHN0cm9rZUxpbmVqb2luOidyb3VuZCd9KSldOw0KICAgICAgICAgICAgfSkpLA0KICAgICAgICBudWxsKSkpOw0KDQogICAgY29uc3Qgb2JqZWN0aW9uPXRoaXMuZW5nYWdlbWVudChtLGlubmVyKTsNCg0KICAgIGNvbnN0IHBob3RvPWVsKCdkaXYnLHtjbGFzc05hbWU6J2FkY2YtcGhvdG8nLHN0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6bT8nMTAwJSc6JzMwMHB4JyxtYXhXaWR0aDonMTAwJScsbWluV2lkdGg6MCxib3hTaXppbmc6J2JvcmRlci1ib3gnLGhlaWdodDptPycyNTBweCc6JzM2OHB4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInfX0sDQogICAgICBQSE9UTz9lbCgnaW1nJyx7c3JjOlBIT1RPLGFsdDonTMOpb25hcmQgRGXDrywgZm9uZGF0ZXVyIGRcdTIwMTlBRENGJ30pDQogICAgICAgICAgIDplbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTNweCcsbGV0dGVyU3BhY2luZzonLjA4ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyM4YjkzYTgnLHRleHRBbGlnbjonY2VudGVyJyxwYWRkaW5nOicwIDE2cHgnfX0sJ1Bob3RvIGRlIEzDqW9uYXJkIERlw68nKSk7DQoNCiAgICBjb25zdCBsZXR0cmU9c2VjdChudWxsLGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyNnB4JzonNjBweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCcsbWF4V2lkdGg6bT8nbm9uZSc6JzkwMHB4J319LFsNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3AnLHN0eWxlOnt3aWR0aDptPycxMDAlJzonYXV0bycsbWluV2lkdGg6MCxtYXhXaWR0aDonMTAwJSd9fSxwaG90byksDQogICAgICBlbCgnZGl2Jyx7a2V5Oid0JyxzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxjb2wobT8nMTZweCc6JzIwcHgnLFsNCiAgICAgICAgdGhpcy5leWVicm93KCdRdWkgcsOpZGlnZSB2b3RyZSBiaWxhbicpLA0KICAgICAgICBoMignSlx1MjAxOWV4YW1pbmUgdm90cmUgY2FycmnDqHJlLCBhbm7DqWUgcGFyIGFubsOpZS4nLGZhbHNlLDEpLA0KICAgICAgICBwKCdKZSBzdWlzICcrdGhpcy5mb3VuZGVyKCkrJywgZm9uZGF0ZXVyIGRcdTIwMTlBRENGLiBBbmNpZW4gY29uc3VsdGFudCBlbiBjeWJlcnPDqWN1cml0w6ksIG1vbiBtw6l0aWVyIGNvbnNpc3RhaXQgw6AgZXhhbWluZXIgZGVzIHN5c3TDqG1lcyBjb21wbGV4ZXMgcG91ciByZXDDqXJlciBjZSBxdWkgcGFzc2FpdCBpbmFwZXLDp3UuIEpcdTIwMTllbiBhaSBnYXJkw6kgdW5lIGV4aWdlbmNlXHUwMGEwOiBjcm9pc2VyIGxlcyBpbmZvcm1hdGlvbnMgZXQgdsOpcmlmaWVyIGF2YW50IGRlIGNvbmNsdXJlLicpLA0KICAgICAgICBwKCdKXHUyMDE5YWkgdnUgZGVzIHBlcnNvbm5lcyBkw6ljb3V2cmlyLCBhcHLDqHMgNDAgYW5zIGRlIHRyYXZhaWwgZXQgw6AgcXVlbHF1ZXMgbW9pcyBkdSBkw6lwYXJ0LCBxdWUgZGV1eCBhbm7DqWVzIG1hbnF1YWllbnQgw6AgbGV1ciByZWxldsOpLiBQZXJzb25uZSBuZSBsZXVyIGF2YWl0IGV4cGxpcXXDqSBxdW9pIHJlZ2FyZGVyLicpLA0KICAgICAgICBwKCdBdWpvdXJkXHUyMDE5aHVpLCBqZSByZXByZW5kcyBwZXJzb25uZWxsZW1lbnQgY2hhcXVlIGJpbGFuIHJldHJhaXRlLiBKZSBtXHUyMDE5YXBwdWllIHN1ciBsZXMgY29udHLDtGxlcyBhdXRvbWF0aXF1ZXMgZXQgdm9zIHLDqXBvbnNlcyBhdSBxdWVzdGlvbm5haXJlIHBvdXIgZXhhbWluZXIgY2hhcXVlIHDDqXJpb2RlIGF2ZWMgbGVzIHLDqGdsZXMgcXVpIGx1aSBjb3JyZXNwb25kZW50LiBMZXMgZW5mYW50cywgbGUgdHJhdmFpbCDDoCBsXHUyMDE5w6l0cmFuZ2VyIG91IGxlcyBhbm7DqWVzIGNyZXVzZXMgYXBwb3J0ZW50IGRlcyBpbmZvcm1hdGlvbnMgcXVlIGxlIHJlbGV2w6kgc2V1bCBuZSBkb25uZSBwYXMuJyksDQogICAgICAgIHAoJ0F2YW50IGRlIHJldGVuaXIgdW4gcG9pbnQgw6Agc2lnbmFsZXIsIGpcdTIwMTlleGFtaW5lIGNlIHF1aSBwb3VycmFpdCBsXHUyMDE5ZXhwbGlxdWVyLiBWb3RyZSBkb3NzaWVyIHByw6ljaXNlIGNlIHF1aSBlc3QgY29uZm9ybWUsIGNlIHF1aSBtw6lyaXRlIHVuZSBkZW1hbmRlIGV0IGNlIHF1aSByZXN0ZSDDoCBjb25maXJtZXIuJyksDQogICAgICAgIHAoJ0plIHLDqWRpZ2Ugdm90cmUgYmlsYW4gYXZlYyBsZXMgY29uY2x1c2lvbnMgZXhwbGlxdcOpZXMsIGxlcyBkYXRlcyBldCBtb250YW50cyBlc3RpbcOpcyBhY2NvbXBhZ27DqXMgZGUgbGV1cnMgaHlwb3Row6hzZXMsIGV0IGxlcyBjb3VycmllcnMgYWRhcHTDqXMgYXV4IGRlbWFuZGVzIHJldGVudWVzLiBWb3VzIHNhdmV6IHF1ZWxsZXMgcGnDqGNlcyByw6l1bmlyLCDDoCBxdWkgw6ljcmlyZSBldCBkYW5zIHF1ZWwgb3JkcmUgYWdpci4nKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleToncycsc3R5bGU6e21hcmdpblRvcDptPyc2cHgnOicxMnB4JyxwYWRkaW5nVG9wOm0/JzE0cHgnOicyMHB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCcsdGV4dEFsaWduOidsZWZ0JyxtYXhXaWR0aDonNjBjaCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjhweCc6JzM0cHgnLGZvbnRTdHlsZTonaXRhbGljJyxjb2xvcjpOQVZZLG9wYWNpdHk6MC43OCx0cmFuc2Zvcm06J3JvdGF0ZSgtMi41ZGVnKScsdHJhbnNmb3JtT3JpZ2luOidsZWZ0J319LHRoaXMuZm91bmRlcigpKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDonOHB4Jyxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxjb2xvcjpHUkVZfX0sJ0ZvbmRhdGV1ciBkXHUyMDE5QURDRiwgY2hyb25pcXVldXIgYXUgSm91cm5hbCBkdSBOZXQuJykpXSkpXSkse2JvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX0pOw0KDQogICAgY29uc3QgY29udGVudT1zZWN0KG51bGwsZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzI4cHgnOic1NnB4JyxhbGlnbkl0ZW1zOidmbGV4LXN0YXJ0J319LFsNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MH19LGNvbChtPycxOHB4JzonMjRweCcsWw0KICAgICAgICB0aGlzLmV5ZWJyb3coJ0xlIGxpdnJhYmxlJyksDQogICAgICAgIGgyKCdVbiBkb3NzaWVyIMOgIGxhIHRhaWxsZSBkZSB2b3RyZSBjYXJyacOocmUnLGZhbHNlLDEpLA0KICAgICAgICBlbCgnZGl2Jyx7a2V5Oiducicsc3R5bGU6e3BhZGRpbmc6bT8nMTRweCAxNnB4JzonMTZweCAyMHB4JyxiYWNrZ3JvdW5kOicjZWVmMmZiJyxib3JkZXJMZWZ0OiczcHggc29saWQgJytOQVZZLGZvbnRTaXplOm0/JzE1cHgnOicxNnB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpOQVZZfX0sJ1ZvdXMgblx1MjAxOWF2ZXogcGFzIMOgIHRvdXQgbGlyZS4gTGEgcHJlbWnDqHJlIHBhZ2UgZG9ubmUgbGVzIHRyb2lzIGNob3NlcyDDoCBmYWlyZSBjZXR0ZSBzZW1haW5lLCBkYW5zIGxcdTIwMTlvcmRyZS4gTGUgcmVzdGUgZXN0IGzDoCBxdWFuZCB2b3VzIGVuIGF2ZXogYmVzb2luLicpLA0KICAgICAgICBwKCdTYSB0YWlsbGUgZMOpcGVuZCBkZSBsYSB2w7R0cmXCoDogdW5lIGNhcnJpw6hyZSBjb3VydGUgZXQgbGluw6lhaXJlIGRvbm5lIHVuIGRvc3NpZXIgcGx1cyBtaW5jZSBxdVx1MjAxOXVuZSBjYXJyacOocmUgZGUgNDAgYW5zIGF2ZWMgZGVzIHRyb3VzLiBDaGFxdWUgc3VqZXQgdGllbnQgc3VyIHVuZSBwYWdlLCBlbiBodWl0IGJsb2NzXHUwMGEwOiBsZSBjb25zdGF0LCBwb3VycXVvaSBjZWxhIG3DqXJpdGUgdW5lIGRlbWFuZGUsIGNlIHF1aSBwZXV0IGxcdTIwMTlleHBsaXF1ZXIsIGNlIHF1ZSDDp2EgcG9ydGUsIGxhIHBpw6hjZSDDoCBqb2luZHJlLCBsZSBnZXN0ZSDDoCBmYWlyZSwgbGUgbml2ZWF1IGRlIGNlcnRpdHVkZSwgZXQgbGUgdGV4dGUgcXVpIGxcdTIwMTlhcHB1aWUuJyksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonOHB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOidyZXBlYXQoMywxZnIpJyxnYXA6bT8nMCc6JzM0cHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxib3JkZXJCb3R0b206bT8nbm9uZSc6JzFweCBzb2xpZCAnK0xJTkV9fSwNCiAgICAgICAgICAgIENPTlRFTlUuc2xpY2UoMCwzKS5tYXAoKGMsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7cGFkZGluZzptPycxNXB4IDAnOicyMHB4IDAnLGJvcmRlckJvdHRvbTptPycxcHggc29saWQgJytMSU5FOidub25lJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J3Jvdyc6J2NvbHVtbicsZ2FwOm0/JzE0cHgnOic3cHgnLGFsaWduSXRlbXM6bT8nYmFzZWxpbmUnOidmbGV4LXN0YXJ0J319LA0KICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjdweCc6JzM0cHgnLGxpbmVIZWlnaHQ6MC45LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLGNvbG9yOk5BVlksbWluV2lkdGg6bT8nOTZweCc6J2F1dG8nLHdoaXRlU3BhY2U6J25vd3JhcCd9fSxjWzBdKSwNCiAgICAgICAgICAgICAgZWwoJ2RpdicsbnVsbCwNCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLG1hcmdpbkJvdHRvbTonM3B4J319LGNbMV0pLA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSxjWzJdKSkpKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzE4cHgnLHBhZGRpbmc6bT8nMTVweCAxNnB4JzonMThweCAyMnB4JyxiYWNrZ3JvdW5kOicjZWVmMmZiJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzZweCc6JzE4cHgnLGFsaWduSXRlbXM6bT8nZmxleC1zdGFydCc6J2Jhc2VsaW5lJ319LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyMXB4Jyxmb250V2VpZ2h0OjUwMCxjb2xvcjpOQVZZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSwnRXQgZW4gZXVyb3MnKSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LCdjaGFxdWUgY29ycmVjdGlvbiBjaGlmZnLDqWUsIGR1IGJydXQgYXUgbmV0LCBzdXIgdm9zIHByb3ByZXMgdHJhbmNoZXMuJykpKSwNCiAgICAgICAgZWwoJ3AnLHtrZXk6J25vdGUnLHN0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZLGZvbnRTdHlsZTonaXRhbGljJ319LCdDZXMgZm91cmNoZXR0ZXMgc29udCBjZWxsZXMgZGVzIGRvc3NpZXJzIGTDqWrDoCBjb21wb3PDqXMuIFNpIHZvdHJlIHJlbGV2w6kgZXN0IGp1c3RlLCBsZSBkb3NzaWVyIGxlIGRpdCBhdXNzaSwgYW5uw6llIHBhciBhbm7DqWUuJyldKSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidyJyxzdHlsZTp7ZmxleDptPydub25lJzonMCAwIDQ0JScsd2lkdGg6bT8nMTAwJSc6J2F1dG8nfX0sdGhpcy5kb2NTdGFjayhtKSldKSk7DQoNCiAgICBjb25zdCBhcGVyY3VzPXNlY3QoUEFQRVIsY29sKG0/JzIycHgnOiczNHB4JyxbDQogICAgICB0aGlzLmV5ZWJyb3coJ0p1Z2V6IHN1ciBwacOoY2VzJyksDQogICAgICBoMignVHJvaXMgcGFnZXMsIHRlbGxlcyBxdVx1MjAxOWVsbGVzIHNvcnRlbnQnLGZhbHNlLDEpLA0KICAgICAgcCgnVW4gc3VqZXQgw6AgdsOpcmlmaWVyLCB2b3RyZSBjYXJyacOocmUgYW5uw6llIHBhciBhbm7DqWUsIHVuIGNvdXJyaWVyIHByw6p0IMOgIHNpZ25lciwgZGFucyBsZXVyIGNvbXBvc2l0aW9uIHLDqWVsbGUuJyksDQogICAgICBtDQogICAgICAgID8gZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicyNnB4JyxtYXJnaW5Ub3A6JzJweCd9fSwNCiAgICAgICAgICAgIEFQRVJDVVMubWFwKChhcCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMTJweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSwNCiAgICAgICAgICAgICAgdGhpcy5taW5pKGksMzAwKSwNCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LGFwWzBdKSwNCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTRweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sYXBbMV0pKSkpDQogICAgICAgIDogZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDonMTRweCd9fSwNCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsYWxpZ25JdGVtczonZmxleC1lbmQnLGhlaWdodDonNTQwcHgnfX0sDQogICAgICAgICAgICAgIEFQRVJDVVMubWFwKChhcCxpKT0+ew0KICAgICAgICAgICAgICAgIGNvbnN0IGc9W1stOSwwLDAsMSwzMDBdLFsxLjIsLTY2LDMwLDMsMzM4XSxbNy42LC03MiwwLDIsMzA2XV1baV07DQogICAgICAgICAgICAgICAgcmV0dXJuIGVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7bWFyZ2luTGVmdDppP2dbMV0rJ3B4JzowLG1hcmdpbkJvdHRvbTpnWzJdKydweCcsekluZGV4OmdbM10sdHJhbnNmb3JtOidyb3RhdGUoJytnWzBdKydkZWcpJyx0cmFuc2Zvcm1PcmlnaW46J2JvdHRvbSBjZW50ZXInLGZpbHRlcjonZHJvcC1zaGFkb3coMCAyNnB4IDM0cHggcmdiYSgxNCwxOSw3OSwwLjI4KSknfX0sdGhpcy5taW5pKGksZ1s0XSkpOw0KICAgICAgICAgICAgICB9KSksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDonMTRweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczoncmVwZWF0KDMsMWZyKScsZ2FwOiczMHB4J319LA0KICAgICAgICAgICAgICBBUEVSQ1VTLm1hcCgoYXAsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6JzEycHgnfX0sDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic5cHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTonMTVweCcsZm9udFN0eWxlOidpdGFsaWMnLGNvbG9yOicjYzQxNzNhJ319LFN0cmluZyhpKzEpKSxlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LGFwWzBdKSksDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpJTkt9fSxhcFsxXSkpKSkpXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPyc0OHB4IDAnOicxMjBweCAwJ30pOw0KDQogICAgY29uc3QgcmVsZWN0dXJlPWVsKCdzZWN0aW9uJyx7c3R5bGU6e2JhY2tncm91bmQ6TkFWWSxwYWRkaW5nOm0/JzQ4cHggMCc6JzgycHggMCd9fSwNCiAgICAgIGlubmVyKGNvbChtPycyMHB4JzonMjhweCcsWw0KICAgICAgICB0aGlzLmV5ZWJyb3coJ0xlIHBvaW50IHF1aSBjaGFuZ2UgdG91dCcsJyNhYWIyZWUnLG0/MTE6MTIpLA0KICAgICAgICBlbCgnaDInLHtrZXk6J2gnLHN0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzMzcHgnOic1NnB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDNlbScsY29sb3I6JyNmZmZmZmYnLHRleHRXcmFwOidiYWxhbmNlJ319LCdMZSBkb3NzaWVyIG5lIHBhcnQgcGFzIHNhbnMgcXVlIHF1ZWxxdVx1MjAxOXVuIGxcdTIwMTlhaXQgbHUnKSwNCiAgICAgICAgcCgnVW4gbW90ZXVyIGTDqXBvdWlsbGUgdm90cmUgcmVsZXbDqSBldCBwb3NlIGxlcyBxdWVzdGlvbnMgdXRpbGVzLiBFbnN1aXRlICcrdGhpcy5mb3VuZGVyKCkrJyByZXByZW5kIGxlIGRvc3NpZXIgbGlnbmUgw6AgbGlnbmUsIMOpY2FydGUgY2UgcXVpIG5lIHNlIGTDqWZlbmQgcGFzIGRldmFudCB1bmUgY2Fpc3NlLCBldCBsZSB2YWxpZGUuJyx0cnVlKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleTonYicsc3R5bGU6e21hcmdpblRvcDptPyc4cHgnOicxNHB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOm0/JzFmcic6JzFmciAxZnInLGdhcDptPycxNnB4JzonMzBweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMjJweCc6JzMwcHgnLGJvcmRlcjonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yMiknLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRH19LA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOiczMnB4JyxsaW5lSGVpZ2h0OjEuMTUsZm9udFdlaWdodDo1MDAsY29sb3I6JyNmZmZmZmYnLG1hcmdpbkJvdHRvbTonMTBweCd9fSwnUmVtaXMgc291cyAnK3RoaXMuZGVsYWkoKSksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC43MiknfX0sJ0plIHLDqWRpZ2Ugdm90cmUgYmlsYW4gcmV0cmFpdGUgcGVuZGFudCBjZSB0ZW1wcy1sw6AuIENcdTIwMTllc3QgcHLDqWNpc8OpbWVudCBjZSBxdWUgdm91cyBhY2hldGV6LicpKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6bT8nMjJweCc6JzMwcHgnLGJvcmRlcjonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yMiknfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjRweCc6JzMycHgnLGxpbmVIZWlnaHQ6MS4xNSxmb250V2VpZ2h0OjUwMCxjb2xvcjonI2ZmZmZmZicsbWFyZ2luQm90dG9tOicxMHB4J319LCdQdWlzIGlsIGVzdCDDoCB2b3VzJyksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC43MiknfX0sJ1ZvdXMgcG91dmV6IGxlIHRyYW5zbWV0dHJlIMOgIHZvdHJlIGNhaXNzZSwgw6AgdW4gcHJvY2hlIG91IMOgIHVuIGNvbnNlaWwsIHNhbnMgbVx1MjAxOWVuIGluZm9ybWVyLicpKSldKSkpOw0KDQogICAgY29uc3QgcmVnYXJkZUxpc3Q9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nfX0sDQogICAgICBSRUdBUkRFLm1hcCgocixpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntib3JkZXJUb3A6aT8nMXB4IHNvbGlkICcrTElORTonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nOm0/JzE1cHggMCc6JzE4cHggMCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTFweCc6JzE0cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJ319LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDptPyc5cHgnOicxMXB4JyxoZWlnaHQ6bT8nOXB4JzonMTFweCcsYmFja2dyb3VuZDpSRUQsbWFyZ2luVG9wOm0/JzZweCc6JzdweCd9fSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE2cHgnOicxNy41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVlksbGluZUhlaWdodDoxLjM1LG1hcmdpbkJvdHRvbTonNHB4J319LHJbMF0pLA0KICAgICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOkdSRVl9fSxyWzFdKSkpKSkpOw0KDQogICAgY29uc3QgUkVHSU1FUz1bJ1LDqWdpbWUgZ8OpbsOpcmFsJywnQWdpcmMtQXJyY28nLCdNU0EnLCdJUkNBTlRFQycsJ0NJUEFWJywnbWljcm8tc29jaWFsJywnZm9uY3Rpb24gcHVibGlxdWUnLCdyw6lnaW1lcyBzcMOpY2lhdXgnLCdwcm9mZXNzaW9ucyBsaWLDqXJhbGVzJywnbGVzIHLDqWdpbWVzIGRlcyBpbmTDqXBlbmRhbnRzJ107DQogICAgY29uc3QgcmVnaW1lcz1zZWN0KFBBUEVSLGNvbChtPycxNnB4JzonMjJweCcsWw0KICAgICAgdGhpcy5leWVicm93KCdMZXMgcsOpZ2ltZXMnKSwNCiAgICAgIGgyKCcyMiByw6lnaW1lcyBkZSByZXRyYWl0ZSwgOTUgJSBkZXMgc2l0dWF0aW9ucycpLA0KICAgICAgZWwoJ2Rpdicse2tleToncCcsc3R5bGU6e21hcmdpblRvcDptPycycHgnOic2cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6bT8nN3B4JzonOXB4J319LA0KICAgICAgICBSRUdJTUVTLm1hcChmdW5jdGlvbihyLGkyKXsgcmV0dXJuIGVsKCdzcGFuJyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidpbmxpbmUtZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxoZWlnaHQ6bT8nMzJweCc6JzM2cHgnLHBhZGRpbmc6bT8nMCAxMnB4JzonMCAxNXB4Jyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYmFja2dyb3VuZDonI2ZmZmZmZicsZm9udFNpemU6bT8nMTNweCc6JzE0cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVlksd2hpdGVTcGFjZTonbm93cmFwJ319LHIpOyB9KSksDQogICAgICBwKCdWb3RyZSByZWxldsOpIGRlIGNhcnJpw6hyZSBsZXMgcmFzc2VtYmxlIHRvdXMgZW4gdW4gc2V1bCBkb2N1bWVudC4gSmUgbGUgbGlzIGVuIGVudGllciwgZXQgalx1MjAxOWFuYWx5c2UgY2hhcXVlIGFubsOpZSBkYW5zIGxlIHLDqWdpbWUgcXVpIGxhIHBvcnRlLicpLA0KICAgICAgcCgnQ1x1MjAxOWVzdCBqdXN0ZW1lbnQgYXV4IGNoYW5nZW1lbnRzIGRlIHN0YXR1dCBxdWUgbGVzIHRyaW1lc3RyZXMgc2UgcGVyZGVudFx1MDBhMDogY2UgcXVcdTIwMTl1biByw6lnaW1lIGNvbXB0ZSwgbFx1MjAxOWF1dHJlIGxcdTIwMTlpZ25vcmUgcGFyZm9pcy4gVW5lIGNhcnJpw6hyZSBxdWkgZXN0IHBhc3PDqWUgZHUgc2FsYXJpYXQgw6AgbFx1MjAxOWluZMOpcGVuZGFudCwgb3UgZHUgcHJpdsOpIGF1IHB1YmxpYywgZXN0IGNlbGxlIG/DuSBpbCB5IGEgbGUgcGx1cyDDoCB2w6lyaWZpZXIuJykNCiAgICBdKSx7cGFkZGluZzptPyczNHB4IDAnOic1MHB4IDAnfSk7DQoNCiAgICBjb25zdCBhbmFseXNlPXNlY3QobnVsbCxjb2wobT8nMjBweCc6JzMwcHgnLFsNCiAgICAgIHRoaXMuZXllYnJvdygnQ2UgcXVlIGxcdTIwMTlhbmFseXNlIHJlZ2FyZGUnLG51bGwsbnVsbCwnSUknKSwNCiAgICAgIGgyKCdMZXMgOCBlbmRyb2l0cyBvw7kgdW4gcmVsZXbDqSBwZXJkIGRlcyBhbm7DqWVzJyxmYWxzZSwxKSwNCiAgICAgIHAoJ1JlZ2FyZGV6IHNpIGxcdTIwMTl1bmUgZGUgY2VzIHNpdHVhdGlvbnMgZXN0IGxhIHbDtHRyZS4gQ2hhY3VuZSBlc3QgcGFzc8OpZSBhdSBjcmlibGUgYW5uw6llIHBhciBhbm7DqWUsIGF2YW50IHF1ZSB2b3RyZSBkb3NzaWVyIG5lIHNvaXQgw6ljcml0LiBNb24gYW5hbHlzZSBuZSBjaGVyY2hlIHBhcyBzZXVsZW1lbnQgZGVzIGVycmV1cnNcdTAwYTA6IGVsbGUgY2hlcmNoZSBhdXNzaSBkZXMgZHJvaXRzIHF1aSBuZSBzZSBkw6ljbGVuY2hlbnQgcXVlIHNpIG9uIGxlcyBkZW1hbmRlLicpLA0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDptPycycHgnOic4cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMjZweCc6JzU0cHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnfX0sDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MH19LHJlZ2FyZGVMaXN0KSwNCiAgICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCAzNiUnLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwNCiAgICAgICAgICB0aGlzLnZlcmlmQ2FyZChtKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnVW4gZXhlbXBsZSBjaGlmZnLDqSwgcG91ciBtb250cmVyIGNvbW1lbnQgdW5lIGFubsOpZSBlc3QgcGFzc8OpZSBhdSBjcmlibGVcdTAwYTA6IGxlIHNhbGFpcmUgcG9ydMOpIGF1IHJlbGV2w6ksIGNvbmZyb250w6kgYXUgc2V1aWwgcXVpIHZhbGlkYWl0IHVuIHRyaW1lc3RyZSBjZXR0ZSBhbm7DqWUtbMOgLicpKSksDQogICAgICBlbCgnZGl2Jyx7a2V5Oidwcicsc3R5bGU6e21hcmdpblRvcDptPycxMnB4JzonMjBweCcscGFkZGluZ1RvcDptPycyMnB4JzonMzBweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxOHB4J319LA0KICAgICAgICBlbCgnZGl2JyxudWxsLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNHB4JzonMzJweCcsbGluZUhlaWdodDoxLjA1LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyMmVtJyxjb2xvcjpOQVZZfX0sJ0xhcXVlbGxlIGRlIGNlcyBjYXJyacOocmVzIHJlc3NlbWJsZSDDoCBsYSB2w7R0cmVcdTAwYTA/JyksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzhweCAwIDAnOicxMHB4IDAgMCcsZm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVksbWF4V2lkdGg6JzU4Y2gnfX0sJ0Nob2lzaXNzZXogbGEgc2l0dWF0aW9uIGxhIHBsdXMgcHJvY2hlLiBMZSBkw6l0YWlsIGRlIGNlIHF1aSBlc3QgYW5hbHlzw6kgZGFucyBjZSBjYXMgc1x1MjAxOWFmZmljaGUgZW4gZGVzc291cy4nKSksDQogICAgICAgIHRoaXMucHJvZmlscyhtKSksDQogICAgICB0aGlzLnBvaW50Q2xlKG0pXSkpOzsNCg0KICAgIGNvbnN0IGRvbm5lZXM9c2VjdChudWxsLGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyMHB4JzonNTBweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleFNocmluazowLG1pbldpZHRoOjB9fSxjb2wobT8nMTBweCc6JzEycHgnLFt0aGlzLmV5ZWJyb3coJ1ZvcyBkb25uw6llcycsbnVsbCxudWxsLCdWSUknKSxoMignQ2UgcXVlIGplIG5lIHZvdXMgZGVtYW5kZSBqYW1haXMnKV0pKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOXB4JzonMTFweCd9fSwNCiAgICAgICAgW1snVm9zIGlkZW50aWZpYW50cy4nLCdOaSBjZXV4IGRlIHZvdHJlIGVzcGFjZSByZXRyYWl0ZSwgbmkgRnJhbmNlQ29ubmVjdC4gUGVyc29ubmUgbmUgc2UgY29ubmVjdGUgw6Agdm90cmUgcGxhY2UuJ10sWydWb3RyZSBudW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZSwgY29uc2VydsOpLicsJ0lsIGVzdCBsdSB1bmUgZm9pcywgcG91ciB2b3RyZSBkYXRlIGRlIG5haXNzYW5jZSBldCB2b3RyZSDDomdlIGzDqWdhbCBkZSBkw6lwYXJ0LiBTdXIgbGVzIGNvdXJyaWVycywgY1x1MjAxOWVzdCB1biBjaGFtcCBxdWUgdm91cyByZW1wbGlzc2V6IMOgIGxhIG1haW4uJ10sWydWb3RyZSByZWxldsOpLCBnYXJkw6kuJywnTGUgUERGIGVzdCBlZmZhY8OpIGTDqHMgcXVcdTIwMTlpbCBlc3QgbHUuIENlIHF1ZSBqXHUyMDE5ZW4gYWkgbHUgcmVzdGUgY2hpZmZyw6ksIGjDqWJlcmfDqSBlbiBGcmFuY2UsIGV0IHNcdTIwMTllZmZhY2UgZW5zdWl0ZS4nXV0NCiAgICAgICAgICAubWFwKGZ1bmN0aW9uKHgsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTBweCc6JzEycHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzlweCc6JzExcHgnfX0sDQogICAgICAgICAgICBlbCgnc3ZnJyx7d2lkdGg6bT8xNToxNixoZWlnaHQ6bT8xNToxNix2aWV3Qm94OicwIDAgMjQgMjQnLGZpbGw6J25vbmUnLHN0eWxlOntmbGV4U2hyaW5rOjAsbWFyZ2luVG9wOiczcHgnfX0sZWwoJ2NpcmNsZScse2N4OjEyLGN5OjEyLHI6MTAsc3Ryb2tlOlJFRCxzdHJva2VXaWR0aDoxLjh9KSxlbCgncGF0aCcse2Q6J004IDhsOCA4TTE2IDhsLTggOCcsc3Ryb2tlOlJFRCxzdHJva2VXaWR0aDoxLjh9KSksDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbMF0pLCcgJyx4WzFdKSk7IH0pLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycycHgnOic0cHgnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0plIG5lIHZvdXMgZGVtYW5kZXJhaSBqYW1haXMgdm90cmUgcmVsZXbDqSBwYXIgZS1tYWlsIG5pIHBhciB0w6lsw6lwaG9uZS4gU2kgcXVlbHF1XHUyMDE5dW4gdm91cyBsZSByw6ljbGFtZSBhdSBub20gZFx1MjAxOUFEQ0YsIGNlIG5cdTIwMTllc3QgcGFzIG1vaS4nKSwNCiAgICAgICAgZWwoJ2RldGFpbHMnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzZweCc6JzhweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nOXB4JzonMTFweCd9fSwNCiAgICAgICAgICBlbCgnc3VtbWFyeScse3N0eWxlOntsaXN0U3R5bGU6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDonMTRweCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwNCiAgICAgICAgICAgIGVsKCdzcGFuJyxudWxsLCdFdCBsZSBkb3NzaWVyLCB1bmUgZm9pcyDDqWNyaXRcdTAwYTA/IExlIGTDqXRhaWwnKSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nVG9wOm0/JzhweCc6JzEwcHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzExcHgnfX0sDQogICAgICAgICAgICBbWydJbCBuZSBwYXJ0IGphbWFpcyBlbiBwacOoY2Ugam9pbnRlLicsJ1ZvdXMgcmVjZXZleiB1biBsaWVuIHBlcnNvbm5lbCBwb3VyIGxlIHTDqWzDqWNoYXJnZXIsIHF1aSBleHBpcmUuIFVuIGUtbWFpbCByZXN0ZSBkZXMgYW5uw6llcyBkYW5zIHVuZSBib8OudGUsIHZvdHJlIGRvc3NpZXIgbm9uLiddLFsnSWwgcG9ydGUgZGVzIGRvbm7DqWVzIGRlIHNhbnTDqS4nLCdBcnLDqnRzIGRlIHRyYXZhaWwsIGFjY2lkZW50cyBkdSB0cmF2YWlsLCBpbnZhbGlkaXTDqSwgbWF0ZXJuaXTDqVx1MDBhMDogY2Ugc29udCBkZXMgZG9ubsOpZXMgc2Vuc2libGVzIGF1IHNlbnMgZGUgbFx1MjAxOWFydGljbGUgOSBkdSBSR1BELCBldCBlbGxlcyBzb250IHRyYWl0w6llcyBjb21tZSB0ZWxsZXMuJ10sWydWb3VzIHBvdXZleiB0b3V0IGZhaXJlIGVmZmFjZXIuJywnVW5lIGRlbWFuZGUgw6AgY29udGFjdEBhZGNmLm9yZyBzdWZmaXQsIHNhbnMgbW90aWYgw6AgZG9ubmVyLCBldCBsXHUyMDE5ZWZmYWNlbWVudCBlc3QgZmFpdCBzb3VzIDMwIGpvdXJzLiddXQ0KICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHgsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSxlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzBdKSwnICcseFsxXSk7IH0pKSkpKSwNCiAgICAgIHtib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPyczNHB4IDAnOic1NnB4IDAnfSk7DQogICAgY29uc3QgbGlzdEJsb2NrPSh0aXRsZSxpdGVtcyxvayk9PmVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTZweCc6JzIwcHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEycHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrKG9rP05BVlk6TElORSkscGFkZGluZ1RvcDptPycxMnB4JzonMTRweCd9fSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTFweCc6JzExLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOm9rP05BVlk6R1JFWX19LHRpdGxlKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEycHgnOicxNHB4J319LA0KICAgICAgICBpdGVtcy5tYXAoZnVuY3Rpb24odCxrKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6ayxzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDptPycxMHB4JzonMTJweCd9fSwNCiAgICAgICAgICBvaw0KICAgICAgICAgICAgPyBlbCgnc3ZnJyx7d2lkdGg6bT8xNToxNixoZWlnaHQ6bT8xNToxNix2aWV3Qm94OicwIDAgMjQgMjQnLGZpbGw6J25vbmUnLHN0eWxlOntmbGV4U2hyaW5rOjAsbWFyZ2luVG9wOic0cHgnfX0sZWwoJ3BhdGgnLHtkOidNNCAxMi41bDUgNUwyMCA2LjUnLHN0cm9rZTpSRUQsc3Ryb2tlV2lkdGg6Mi4yfSkpDQogICAgICAgICAgICA6IGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDptPycxMXB4JzonMTJweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6JyNiOWMxZDYnLG1hcmdpblRvcDptPycxMHB4JzonMTFweCd9fSksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LHQpKTsgfSkpKTsNCg0KICAgIGNvbnN0IHBvdXJxdWk9c2VjdChQQVBFUixjb2wobT8nMjBweCc6JzI4cHgnLFsNCiAgICAgIHRoaXMuZXllYnJvdygnw4AgcXVpIGNlbGEgc1x1MjAxOWFkcmVzc2UnLG51bGwsbnVsbCwnSVYnKSwNCiAgICAgIGgyKCdDZSBkb3NzaWVyIG5cdTIwMTllc3QgcGFzIGZhaXQgcG91ciB0b3V0IGxlIG1vbmRlJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidnJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPyczMHB4JzonNTZweCcsbWFyZ2luVG9wOm0/JzRweCc6JzEwcHgnfX0sDQogICAgICAgIGxpc3RCbG9jaygnRmFpdCBwb3VyIHZvdXMgc2knLFBPVVJWT1VTLHRydWUpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e3dpZHRoOicxcHgnLGJhY2tncm91bmQ6TElORSxhbGlnblNlbGY6J3N0cmV0Y2gnLGRpc3BsYXk6bT8nbm9uZSc6J2Jsb2NrJ319KSwNCiAgICAgICAgbGlzdEJsb2NrKCdTYW5zIGRvdXRlIHBhcyBzaScsUEFTVk9VUyxmYWxzZSkpXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzQ0cHggMCc6Jzg0cHggMCd9KTsNCg0KICAgIGNvbnN0IFNDQUxFPTMwMDAsIHBvcz12PT4oTWF0aC5taW4odixTQ0FMRSkvU0NBTEUqMTAwKSsnJScsIHBvc1Jhdz12PT4odi9TQ0FMRSoxMDApKyclJzsNCiAgICBjb25zdCBheGlzQ2VsbD0oZnJvbSx0byxtaW5lKT0+ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLHdpZHRoOicxMDAlJyxmbGV4OicxIDEgYXV0bycsYWxpZ25TZWxmOidzdHJldGNoJyxtaW5IZWlnaHQ6bT8nNDBweCc6JzU0cHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDowLHJpZ2h0OjAsdG9wOic1MCUnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOm1pbmU/J3JnYmEoMTQsMTksNzksMC4xNCknOicjZWNlZmY1J319KSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OnBvcyhmcm9tKSx3aWR0aDonY2FsYygnK3BvcyhNYXRoLm1pbih0byxTQ0FMRSkpKycgLSAnK3Bvcyhmcm9tKSsodG8+U0NBTEU/JyAtIDE2cHgnOicnKSsnKScsdG9wOic1MCUnLHRyYW5zZm9ybTondHJhbnNsYXRlWSgtNTAlKScsaGVpZ2h0Om1pbmU/KG0/JzE0cHgnOicxNnB4Jyk6KG0/JzEwcHgnOicxMnB4JyksYmFja2dyb3VuZDptaW5lP1JFRDonIzlhYTJjNCd9fSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidhYnNvbHV0ZScsbGVmdDpwb3MoMjQ5KSx0b3A6MCxib3R0b206MCx3aWR0aDonMXB4JyxiYWNrZ3JvdW5kOm1pbmU/J3RyYW5zcGFyZW50JzoncmdiYSgyNDUsMzcsNzMsMC41NSknfX0pLA0KICAgICAgbWluZT9udWxsOmVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OnBvcyhmcm9tKSx0b3A6JzUwJScsdHJhbnNmb3JtOid0cmFuc2xhdGUoLTUwJSwtNTAlKScsd2lkdGg6JzFweCcsaGVpZ2h0Om0/JzE5cHgnOicyMnB4JyxiYWNrZ3JvdW5kOicjNmE3NGE2J319KSwNCiAgICAgIG1pbmV8fHRvPlNDQUxFP251bGw6ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6cG9zKHRvKSx0b3A6JzUwJScsdHJhbnNmb3JtOid0cmFuc2xhdGUoLTUwJSwtNTAlKScsd2lkdGg6JzFweCcsaGVpZ2h0Om0/JzE5cHgnOicyMnB4JyxiYWNrZ3JvdW5kOicjNmE3NGE2J319KSwNCiAgICAgIG1pbmV8fHRvPlNDQUxFP251bGw6ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6J2NhbGMoJytwb3MoTWF0aC5taW4odG8sU0NBTEUpKSsnICsgOHB4KScscmlnaHQ6MCx0b3A6JzUwJScsYm9yZGVyVG9wOicxcHggZG90dGVkICNjOWNlZGInfX0pLA0KICAgICAgdG8+U0NBTEU/ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLHJpZ2h0Oic0cHgnLHRvcDonNTAlJyx0cmFuc2Zvcm06J3RyYW5zbGF0ZVkoLTUwJSknLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyVG9wOihtPyc4cHgnOic5cHgnKSsnIHNvbGlkIHRyYW5zcGFyZW50Jyxib3JkZXJCb3R0b206KG0/JzhweCc6JzlweCcpKycgc29saWQgdHJhbnNwYXJlbnQnLGJvcmRlckxlZnQ6KG0/JzlweCc6JzEwcHgnKSsnIHNvbGlkICM5YWEyYzQnfX0pOm51bGwpOw0KDQogICAgY29uc3QgTUlORT1bJ0xcdTIwMTlhbmFseXNlIEFEQ0YnLHRoaXMucHJpY2UoKSwnY291cnJpZXJzIGV0IHJlbGFuY2VzIGluY2x1cycsMCwyNDksdHJ1ZV07DQogICAgY29uc3QgTElHTkVTPVtNSU5FXS5jb25jYXQoQUlMTEVVUlMpOw0KICAgIGNvbnN0IHJhbmdlZT0oYTIsaSk9Pntjb25zdCBtaW5lPSEhYTJbNV0sIGJnPW1pbmU/JyNlZWYyZmInOid0cmFuc3BhcmVudCcsIGJkPScxcHggc29saWQgJysobWluZT8ncmdiYSgxNCwxOSw3OSwwLjE0KSc6TElORSk7DQogICAgICByZXR1cm4gWw0KICAgICAgICBlbCgnZGl2Jyx7a2V5OidsJytpLHN0eWxlOntncmlkQ29sdW1uOm0/JzEgLyAtMSc6J2F1dG8nLGJhY2tncm91bmQ6YmcscGFkZGluZzptPyhtaW5lPycxNHB4IDE0cHggNnB4JzonMTRweCAwIDZweCcpOicxNnB4IDMwcHggMTZweCAnKyhtaW5lPycxOHB4JzonMCcpLGJvcmRlckxlZnQ6bWluZT8nM3B4IHNvbGlkICcrUkVEOidub25lJyxib3JkZXJUb3A6YmQsYWxpZ25TZWxmOidzdHJldGNoJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonM3B4JyxqdXN0aWZ5Q29udGVudDonY2VudGVyJ319LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6bWluZT82MDA6NDAwfX0sYTJbMF0pLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGNvbG9yOicjNWI2MTZiJyxmb250U3R5bGU6J2l0YWxpYycsbGluZUhlaWdodDoxLjQ1fX0sYTJbMl0pLA0KICAgICAgICAgIGk9PT0zP2VsKCdzcGFuJyx7c3R5bGU6e21hcmdpblRvcDonNHB4Jyxmb250U2l6ZTptPycxMnB4JzonMTIuNXB4Jyxmb250V2VpZ2h0OjYwMCxsaW5lSGVpZ2h0OjEuNCxjb2xvcjonI0MyMTgzQSd9fSwnXHUyMTkxIG3Dqm1lIHDDqXJpbcOodHJlIHF1ZSBsXHUyMDE5YW5hbHlzZSBBRENGJyk6bnVsbCksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J2EnK2ksc3R5bGU6e2dyaWRDb2x1bW46bT8nMSAvIC0xJzonYXV0bycsYmFja2dyb3VuZDpiZyxhbGlnblNlbGY6J3N0cmV0Y2gnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsYm9yZGVyVG9wOm0/J25vbmUnOmJkLHBhZGRpbmc6bT8nMCAxNHB4IDhweCc6MH19LGF4aXNDZWxsKGEyWzNdLGEyWzRdLG1pbmUpKSwNCiAgICAgICAgZWwoJ3NwYW4nLHtrZXk6J3YnK2ksc3R5bGU6e2dyaWRDb2x1bW46bT8nMSAvIC0xJzonYXV0bycsYmFja2dyb3VuZDpiZyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm1pbmU/KG0/JzI4cHgnOiczNHB4Jyk6KG0/JzE4cHgnOicyMHB4JyksY29sb3I6bWluZT9OQVZZOicjNWI2MTZiJyx3aGl0ZVNwYWNlOidub3dyYXAnLHRleHRBbGlnbjptPydsZWZ0JzoncmlnaHQnLGFsaWduU2VsZjonc3RyZXRjaCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDptPydmbGV4LXN0YXJ0JzonZmxleC1lbmQnLGJvcmRlclRvcDptPydub25lJzpiZCxwYWRkaW5nOm0/JzAgMTRweCAxNHB4JzonMTZweCAnKyhtaW5lPycxOHB4JzonMCcpKycgMTZweCAzMHB4J319LGEyWzFdKQ0KICAgICAgXTt9Ow0KDQogICAgY29uc3QgVEFSSUZTPVsNCiAgICAgIFsnTW9uIGJpbGFuIHJldHJhaXRlLCBjb3VycmllcnMgZXQgcmVsYW5jZXMgY29tcHJpcycsJzI0OSDigqwgVFRDJyx0cnVlXSwNCiAgICAgIFsnVW4gZW50cmV0aWVuIGRcdTIwMTl1bmUgaGV1cmUgYXZlYyB1biBleHBlcnQnLCcyOTAg4oKsIEhULCBzb2l0IDM0OCDigqwgVFRDJyxmYWxzZV0sDQogICAgICBbJ1VuZSBhbmFseXNlIGVuIGxpZ25lLCBzYW5zIGVudHJldGllbicsJzM0NSDigqwnLGZhbHNlXSwNCiAgICAgIFsnVW5lIGFuYWx5c2UgZW4gbGlnbmUsIGF2ZWMgdW5lIGhldXJlIGRcdTIwMTlleHBlcnQnLCc2OTAg4oKsJyxmYWxzZV0sDQogICAgICBbJ0xhIHByaXNlIGVuIGNoYXJnZSBkZXMgZMOpbWFyY2hlcyBzZXVsZXMnLCfDoCBwYXJ0aXIgZGUgODI4IOKCrCcsZmFsc2VdLA0KICAgICAgWydVbmUgw6l0dWRlIGNvbXBsw6h0ZSBlbiBjYWJpbmV0Jywnw6AgcGFydGlyIGRlIDEgNjA4IOKCrCcsZmFsc2VdDQogICAgXTsNCiAgICBjb25zdCBhaWxsZXVycz1zZWN0KFBBUEVSLGNvbChtPycxOHB4JzonMjZweCcsWw0KICAgICAgdGhpcy5leWVicm93KCdDZSBxdWUgY2UgdHJhdmFpbCBjb8O7dGUgYWlsbGV1cnMnLG51bGwsbnVsbCwnSVYnKSwNCiAgICAgIGgyKCdDZSBxdWUgY2UgdHJhdmFpbCBjb8O7dGUgYWlsbGV1cnMnKSwNCiAgICAgIGVsKCdwJyx7a2V5OidzcmMnLHN0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxMy41cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVl9fSwnVGFyaWZzIHB1YmxpY3MsIHJlbGV2w6lzIGxlIDYgc2VwdGVtYnJlIDIwMjYgc3VyIGxlcyBzaXRlcyBkZSA0IHByZXN0YXRhaXJlcy4nKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3QnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNnB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkV9fSwNCiAgICAgICAgVEFSSUZTLm1hcChmdW5jdGlvbih4LGkyKXsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6aTIsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOm0/JzE0cHgnOiczMnB4JyxwYWRkaW5nOm0/JzEycHggMTRweCc6JzE1cHggMjRweCcsYm9yZGVyVG9wOmkyPycxcHggc29saWQgJytMSU5FOidub25lJyxiYWNrZ3JvdW5kOnhbMl0/JyNGREVDRUYnOid0cmFuc3BhcmVudCd9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjp4WzJdP05BVlk6R1JFWSxmb250V2VpZ2h0OnhbMl0/NzAwOjQwMH19LHhbMF0pLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/KHhbMl0/JzIxcHgnOicxN3B4Jyk6KHhbMl0/JzI1cHgnOicxOXB4JyksbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOnhbMl0/JyNjNDE3M2EnOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnLHdoaXRlU3BhY2U6J25vd3JhcCd9fSx4WzFdKSk7IH0pKSwNCiAgICAgIGVsKCdwJyx7a2V5OiduMScsc3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOkdSRVl9fSwnMyBkZSBjZXMgNCBvZmZyZXMgbmUgc2UgY29uY2x1ZW50IHBhcyBlbiBsaWduZVx1MDBhMDogaWwgZmF1dCBwYXNzZXIgcGFyIHVuIGRldmlzIG91IHBhciB1biByZW5kZXotdm91cy4gTFx1MjAxOXVuZSBhbm5vbmNlIHVuIGTDqWxhaSBkZSAyIG1vaXMuIEF1Y3VuZSBuZSBtZW50aW9ubmUgZGUgY291cnJpZXJzIHByw6p0cyDDoCBzaWduZXIuJyksDQogICAgICBlbCgncCcse2tleTonbjInLHN0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkt9fSwnSWNpLCBsZSBwcml4IGVzdCBhZmZpY2jDqSwgbFx1MjAxOWFjaGF0IHNlIGZhaXQgZW4gbGlnbmUsIGV0IGxlIGRvc3NpZXIgdm91cyBlc3QgcmVtaXMgYXZlYyBzZXMgY291cnJpZXJzLicpLA0KICAgICAgZWwoJ2Rpdicse2tleTonbjMnLHN0eWxlOntib3JkZXJMZWZ0OicycHggc29saWQgJytSRUQscGFkZGluZ0xlZnQ6bT8nMTJweCc6JzE1cHgnLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOklOSyxtYXhXaWR0aDonNzBjaCd9fSwnU2kgamUgc3VpcyBtb2lucyBjaGVyLCBjZSBuXHUyMDE5ZXN0IHBhcyBwYXJjZSBxdWUgalx1MjAxOWVuIGZhaXMgbW9pbnMuIENcdTIwMTllc3QgcXVlIHZvdXMgbmUgcGF5ZXogcGFzIHVuZSBoZXVyZSBkZSBtb24gdGVtcHMgZW4gcmVuZGV6LXZvdXNcdTAwYTA6IHZvdXMgcGF5ZXogdW4gZG9zc2llciDDqWNyaXQgc3VyIHZvdHJlIHJlbGV2w6ksIHF1ZSB2b3VzIGdhcmRleiBldCBxdWUgdm91cyBwb3V2ZXogcG9zdGVyIHRlbCBxdWVsLicpDQogICAgXSkse3BhZGRpbmc6bT8nNDBweCAwJzonNThweCAwJ30pOw0KDQogICAgY29uc3QgZXRhcGVzPXNlY3QobnVsbCxjb2wobT8nMThweCc6JzI2cHgnLFsNCiAgICAgIHRoaXMuZXllYnJvdygnTGUgZMOpcm91bMOpJyxudWxsLG51bGwsJ0lJSScpLA0KICAgICAgaDIoJzQgw6l0YXBlcywgdW5lIGRpemFpbmUgZGUgbWludXRlcyBkZSB2b3RyZSBjw7R0w6knKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOntwb3NpdGlvbjoncmVsYXRpdmUnLG1hcmdpblRvcDptPyc0cHgnOicxMnB4JyxwYWRkaW5nTGVmdDptPyc0MHB4JzonNTRweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonYWJzb2x1dGUnLGxlZnQ6bT8nMTNweCc6JzE3cHgnLHRvcDptPycxMnB4JzonMTZweCcsYm90dG9tOm0/JzE4cHgnOicyMnB4Jyx3aWR0aDonMXB4JyxiYWNrZ3JvdW5kOidsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCcrTkFWWSsnIDAlLCAjYzljZWRiIDEwMCUpJ319KSwNCiAgICAgICAgRVRBUEVTLm1hcCgoc3QsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7cG9zaXRpb246J3JlbGF0aXZlJyxwYWRkaW5nVG9wOmk/KG0/JzIycHgnOiczMHB4Jyk6MH19LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0Om0/Jy00MHB4JzonLTU0cHgnLHRvcDppPyhtPycyMnB4JzonMzBweCcpOjAsd2lkdGg6bT8nMjdweCc6JzM2cHgnLGhlaWdodDptPycyN3B4JzonMzZweCcsYm9yZGVyUmFkaXVzOic1MCUnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMS41cHggc29saWQgJytOQVZZLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxNHB4JzonMTdweCcsZm9udFdlaWdodDo1MDAsY29sb3I6TkFWWSxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0sU3RyaW5nKGkrMSkpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMS4yNWZyJyxnYXA6bT8nNnB4JzonMzBweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE2cHgnOicxOHB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGxpbmVIZWlnaHQ6MS4zfX0sc3RbMF0pLA0KICAgICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOklOS319LHN0WzFdKSkpKSldKSx7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX0pOw0KDQogICAgY29uc3QgdGljaz1lbCgnc3ZnJyx7d2lkdGg6MTUsaGVpZ2h0OjE1LHZpZXdCb3g6JzAgMCAyNCAyNCcsZmlsbDonbm9uZScsc3R5bGU6e2ZsZXhTaHJpbms6MCxtYXJnaW5Ub3A6JzNweCd9fSwNCiAgICAgIGVsKCdwYXRoJyx7ZDonTTQgMTIuNWw1IDVMMjAgNi41JyxzdHJva2U6JyMxNTgwM2QnLHN0cm9rZVdpZHRoOjIuNCxzdHJva2VMaW5lY2FwOidyb3VuZCcsc3Ryb2tlTGluZWpvaW46J3JvdW5kJ30pKTsNCiAgICBjb25zdCBsaWduZT0oYyxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOicxNXB4IDFmcicsZ2FwOm0/JzAgMTFweCc6JzAgMTNweCcsYWxpZ25JdGVtczonc3RhcnQnLHBhZGRpbmc6bT8nOXB4IDAnOicxMHB4IDAnfX0sDQogICAgICBjWzFdPT09J2NvbXByaXMnP3RpY2s6ZWwoJ3NwYW4nLHtzdHlsZTp7bWFyZ2luVG9wOic2cHgnLHdpZHRoOic5cHgnLGhlaWdodDonMS41cHgnLGJhY2tncm91bmQ6R1JFWSxtYXJnaW5MZWZ0OiczcHgnfX0pLA0KICAgICAgZWwoJ2RpdicsbnVsbCwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6TkFWWX19LGNbMF0pLA0KICAgICAgICBjWzFdPT09J2NvbXByaXMnP251bGw6ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6R1JFWSxtYXJnaW5Ub3A6JzJweCd9fSxjWzFdKSkpOw0KICAgIGNvbnN0IG9iamVjdGlvbnNPZmZyZT1lbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycyMnB4JzonMzBweCcscGFkZGluZ1RvcDptPycxOHB4JzonMjRweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDFmcicsZ2FwOm0/JzE2cHgnOicwIDQwcHgnfX0sDQogICAgICBbWydFdCBzaSB2b3VzIG5lIHRyb3V2ZXogcmllbiBjaGV6IG1vaVx1MDBhMD8nLCdVbmUgY2FycmnDqHJlIGNvbXBsw6h0ZSwgMTkyIHRyaW1lc3RyZXMgdmFsaWTDqXMgcG91ciAxNzAgcmVxdWlzLCBwcm9kdWl0IHF1YW5kIG3Dqm1lIGRlcyBzdWpldHMgZXQgZGVzIGNvdXJyaWVycy4gTGUgZG9zc2llciBwb3J0ZSBkZXMgZHJvaXRzIMOgIGRlbWFuZGVyLCBwYXMgc2V1bGVtZW50IGRlcyBlcnJldXJzIMOgIGNvcnJpZ2VyLiddLA0KICAgICAgIFsnUG91cnF1b2kgbmUgcGFzIGRlbWFuZGVyIMOnYSDDoCBtYSBjYWlzc2VcdTAwYTA/JywnTFx1MjAxOWVudHJldGllbiBpbmZvcm1hdGlvbiByZXRyYWl0ZSBlc3QgZ3JhdHVpdCBldCBpbCB2YXV0IGxhIHBlaW5lIGRcdTIwMTnDqnRyZSBkZW1hbmTDqS4gSWwgY29tbWVudGUgY2UgcXVlIHZvdHJlIGNhaXNzZSBhIGVucmVnaXN0csOpLiBJbCBuZSBjaGVyY2hlIHBhcyBjZSBxdWkgbWFucXVlLCBldCBpbCBuXHUyMDE5w6ljcml0IHBhcyBsZXMgY291cnJpZXJzLiddXQ0KICAgICAgICAubWFwKGZ1bmN0aW9uKHgsaTIpeyByZXR1cm4gZWwoJ2Rpdicse2tleTppMixzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS4zNSxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0seFswXSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0seFsxXSkpOyB9KSk7DQoNDQogICAgY29uc3QgT0ZGUkU9Ww0KICAgICAgJ1ZvdHJlIGNhcnJpw6hyZSBleGFtaW7DqWUgYW5uw6llIHBhciBhbm7DqWUsIGF2ZWMgbGVzIHBvaW50cyDDoCB2w6lyaWZpZXIgZXQgbGVzIGNvbmNsdXNpb25zIGV4cGxpcXXDqWVzLicsDQogICAgICAnVm9zIGRhdGVzIGRlIGTDqXBhcnQgcG9zc2libGVzLCB5IGNvbXByaXMgdW4gw6l2ZW50dWVsIGTDqXBhcnQgYW50aWNpcMOpLCBldCB2b3MgbW9udGFudHMgZXN0aW3DqXMgc2Vsb24gbGVzIHNjw6luYXJpb3Mgw6l0dWRpw6lzLicsDQogICAgICAnTGVzIGNvdXJyaWVycyBhZGFwdMOpcyBhdXggZGVtYW5kZXMgcmV0ZW51ZXMsIGxlcyBwacOoY2VzIMOgIHLDqXVuaXIgZXQgbGVzIMOpdGFwZXMgw6Agc3VpdnJlLicNCiAgICBdOw0KICAgIGNvbnN0IG9mZnJlVGV4dGU9ZWwoJ2Rpdicse3N0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxNnB4JzonMjJweCd9fSwNCiAgICAgIHRoaXMuZXllYnJvdygnTFx1MjAxOWFuYWx5c2UgQURDRicsbnVsbCxudWxsLCdWJyksDQogICAgICBlbCgnaDInLHtzdHlsZTp7bWFyZ2luOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPyczMHB4JzonNTJweCcsbGluZUhlaWdodDoxLjAyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ1ZvdHJlIGJpbGFuIHJldHJhaXRlIHBlcnNvbm5hbGlzw6knKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTZweCc6JzE4cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOklOS319LCdWb3MgZHJvaXRzLCB2b3RyZSBkw6lwYXJ0IGV0IGxlcyBkw6ltYXJjaGVzIMOgIGVuZ2FnZXIuJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nVG9wOm0/JzE0cHgnOicxOHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwNCiAgICAgICAgT0ZGUkUubWFwKGZ1bmN0aW9uKHQyLGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMXB4J319LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonMTJweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6UkVELG1hcmdpbkJvdHRvbTonN3B4J319KSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LHQyKSk7IH0pKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTRweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOkdSRVl9fSwnQmlsYW4gcmVwcmlzIGV0IHLDqWRpZ8OpIHBlcnNvbm5lbGxlbWVudCBwYXIgJyxlbCgnc3Ryb25nJyx7c3R5bGU6e2NvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSx0aGlzLmZvdW5kZXIoKSksJy4gUmVtaXNlIHNvdXMgJyxlbCgnc3Ryb25nJyx7c3R5bGU6e2NvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSx0aGlzLmRlbGFpKCkpLCcuJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzE2cHgnOicyMHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZmxleFdyYXA6J3dyYXAnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2ZsZXgtZW5kJyxnYXA6bT8nMTZweCc6JzI0cHggNDBweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOHB4Jyx3aGl0ZVNwYWNlOidub3dyYXAnfX0sDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzUycHgnOic4MHB4JyxsaW5lSGVpZ2h0OjAuODYsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDQyZW0nLGNvbG9yOk5BVll9fSwnMjQ5IOKCrCcpLA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE4cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOkdSRVl9fSwnVFRDJykpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1VuIHNldWwgcGFpZW1lbnQsIHNhbnMgYWJvbm5lbWVudC4nKSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTptP3tmbGV4OicwIDAgYXV0bycsd2lkdGg6JzEwMCUnfTp7ZmxleDonMSAxIDMwMHB4J319LHRoaXMuY3RhKG0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlJywnUGFpZW1lbnQgc8OpY3VyaXPDqSBwYXIgU3RyaXBlLiBBdWN1biBjb21wdGUgw6AgY3LDqWVyLicsdW5kZWZpbmVkLG51bGwsJ29mZnJlJykpKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE1cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzhweCc6JzlweCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ0FwcsOocyB2b3RyZSBjb21tYW5kZSwgdW4gcXVlc3Rpb25uYWlyZSBjb21wbMOodGUgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSByZWxldsOpLiBWb3VzIHJlY2V2ZXogdm90cmUgZG9zc2llciBwZXJzb25uYWxpc8OpIGF1IGZvcm1hdCBQREYsIMOgIGNvbnN1bHRlciBvdSDDoCBpbXByaW1lci4gU2kgdm91cyBhdmV6IGTDqWrDoCBkw6lwb3PDqSB2b3RyZSByZWxldsOpIHBsdXMgaGF1dCwgaWwgdm91cyBzdWl0XHUwMGEwOiB2b3VzIG5cdTIwMTlhdmV6IHJpZW4gw6AgcmVkw6lwb3Nlci4nKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ1ZvdXMgc2lnbmV6IGV0IGVudm95ZXogbGVzIGNvdXJyaWVycy4gTGVzIMOpdmVudHVlbHMgZnJhaXMgZFx1MjAxOWVudm9pIHJlc3RlbnQgw6Agdm90cmUgY2hhcmdlLCBkZSBsXHUyMDE5b3JkcmUgZGUgNiDDoCA3IOKCrCBwYXIgcmVjb21tYW5kw6kuJykpKTsNCg0KICAgIGNvbnN0IG9mZnJlVmlzdWVsPWVsKCdkaXYnLHtzdHlsZTp7ZmxleFNocmluazowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEycHgnOicxNnB4JyxhbGlnbkl0ZW1zOidjZW50ZXInLHBlcnNwZWN0aXZlOicxNTAwcHgnfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e3RyYW5zZm9ybTptPydub25lJzoncm90YXRlWSg5ZGVnKSByb3RhdGVYKDEuNWRlZykgcm90YXRlWigxZGVnKScsdHJhbnNmb3JtU3R5bGU6J3ByZXNlcnZlLTNkJ319LHRoaXMuY292ZXIobT8yMzA6MzAwKSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzLjVweCcsZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4wMmVtJyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpOQVZZLHRleHRBbGlnbjonY2VudGVyJ319LCdWb3RyZSBkb3NzaWVyIHBlcnNvbm5hbGlzw6knKSk7DQoNCiAgICAvLyBTdXIgdMOpbMOpcGhvbmUsIGxlcyBiw6luw6lmaWNlcywgbGUgcHJpeCBldCBsZSBib3V0b24gcGFzc2VudCBhdmFudCBsYSBjb3V2ZXJ0dXJlLg0KICAgIGNvbnN0IHByaXg9ZWwoJ3NlY3Rpb24nLHsnZGF0YS1vZmZyZSc6JzEnLHN0eWxlOntwYWRkaW5nOm0/JzQ0cHggMCA0OHB4JzonOTZweCAwIDEwNHB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVll9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyOHB4JzonNzBweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonY2VudGVyJ319LA0KICAgICAgICBtP1tvZmZyZVRleHRlLG9mZnJlVmlzdWVsXTpbb2ZmcmVWaXN1ZWwsb2ZmcmVUZXh0ZV0pKSk7DQoKICAgIGNvbnN0IHF1ZXN0aW9ucz1zZWN0KFBBUEVSLGNvbChtPycxOHB4JzonMjZweCcsWw0KICAgICAgdGhpcy5leWVicm93KCdRdWVzdGlvbnMnLG51bGwsbnVsbCwnVkknKSwNCiAgICAgIGgyKCdDZSBxdWUgbFx1MjAxOW9uIG1lIGRlbWFuZGUgbGUgcGx1cycpLA0KICAgICAgdGhpcy5mYXFMaXN0KG0sZmFsc2UsMyksDQogICAgICBlbCgnZGl2Jyx7a2V5Oidtb3JlJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzhweCc6JzE2cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDFmcicsZ2FwOm0/JzAnOicwIDQ0cHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LA0KICAgICAgICBGQVEuc2xpY2UoMykubWFwKChmLGkpPT5lbCgnZGV0YWlscycse2tleTppLHN0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkV9fSwNCiAgICAgICAgICBlbCgnc3VtbWFyeScse3N0eWxlOntsaXN0U3R5bGU6J25vbmUnLGN1cnNvcjoncG9pbnRlcicscGFkZGluZzptPycxNXB4IDAnOicxNnB4IDAnLGRpc3BsYXk6J2ZsZXgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzE2cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE3cHgnOicxOHB4JyxsaW5lSGVpZ2h0OjEuMyxmb250V2VpZ2h0OjUwMCxjb2xvcjpOQVZZfX0sDQogICAgICAgICAgICBlbCgnc3BhbicsbnVsbCxmWzBdKSwNCiksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAscGFkZGluZzptPycwIDAgMTZweCc6JzAgMCAyMHB4JyxtYXhXaWR0aDonNjJjaCcsZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjY1LGNvbG9yOklOS319LGZbMV0pKSkpXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzQ0cHggMCc6JzcycHggMCd9KTsNCg0KICAgIGNvbnN0IHBpZWQ9ZWwoJ2Zvb3Rlcicse3N0eWxlOntiYWNrZ3JvdW5kOk5BVlkscGFkZGluZzptPyc0OHB4IDAnOic3MnB4IDAnfX0sDQogICAgICBpbm5lcihjb2wobT8nMjZweCc6JzM0cHgnLFsNCiAgICAgICAgZWwoJ2Rpdicse2tleTondCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMjBweCc6JzUycHgnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2ZsZXgtZW5kJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwNCiAgICAgICAgICBlbCgnaDInLHtzdHlsZTp7bWFyZ2luOjAsbWF4V2lkdGg6JzIwY2gnLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMzJweCc6JzU2cHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wM2VtJyxjb2xvcjonI2ZmZmZmZicsdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ1ZvdHJlIHJlbGV2w6kgZXN0IHByw6p0LiBMZSBkb3NzaWVyIHN1aXQuJyksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4U2hyaW5rOjB9fSx0aGlzLmN0YShtLCdWb2lyIGNlIHF1ZSBwb3J0ZSBtb24gcmVsZXbDqScsJ1VuZSBzZXVsZSBjaG9zZSDDoCBwcsOpcGFyZXLCoDogbGUgUERGIGRlIHZvdHJlIHJlbGV2w6kuJyx0cnVlLG51bGwsJ21pbGlldScpKSksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J3BzJyxzdHlsZTp7cGFkZGluZzptPycyMHB4IDAgMCc6JzI2cHggMCAwJyxib3JkZXJUb3A6JzJweCBzb2xpZCAnK1JFRCxmb250U2l6ZTptPycxNS41cHgnOicxN3B4JyxsaW5lSGVpZ2h0OjEuNjUsY29sb3I6J3JnYmEoMjU1LDI1NSwyNTUsMC45KScsbWF4V2lkdGg6JzY2Y2gnfX0sDQogICAgICAgICAgZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjonI2ZmZmZmZicsZm9udFdlaWdodDo3MDB9fSwnUC4tUy4nKSwnIHBsdXMgbFx1MjAxOWFuYWx5c2UgZXN0IGZhaXRlIHTDtHQsIHBsdXMgaWwgcmVzdGUgZGUgdGVtcHMgcG91ciByZXRyb3V2ZXIgbGVzIGp1c3RpZmljYXRpZnMgZXQgZmFpcmUgY29ycmlnZXIgdW5lIGFubsOpZSBhdmFudCBsZSBkw6lwYXJ0LiBBcHLDqHMgbGEgbGlxdWlkYXRpb24sIGNlcnRhaW5lcyBjb3JyZWN0aW9ucyBuZSBzZSByYXR0cmFwZW50IHBsdXMuJyksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J2wnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMTJweCc6JzIwcHgnLHBhZGRpbmdUb3A6bT8nMjBweCc6JzI2cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xOCknfX0sdGhpcy5sZWdhbEZvb3QobSx0cnVlKSldKSkpOw0KDQogICAgY29uc3QgZmluQ3RhPWVsKCdzZWN0aW9uJyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nOm0/JzI2cHggMCAzMHB4JzonMzhweCAwIDQ0cHgnfX0sDQogICAgICBpbm5lcihlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6bT8nMTZweCc6JzQwcHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMXB4JzonMjdweCcsbGluZUhlaWdodDoxLjE0LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJyxtYXhXaWR0aDonMzJjaCd9fSwnVm90cmUgYmlsYW4gcmV0cmFpdGUgcGV1dCBwYXJ0aXIgYXVqb3VyZFx1MjAxOWh1aS4nKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4U2hyaW5rOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidmbGV4LWVuZCd9fSwNCiAgICAgICAgICBlbCgnYScse2hyZWY6KFNUUklQRSAmJiBTVFJJUEUhPT0nIycgJiYgIS9SRU1QTEFDRVIvLnRlc3QoU1RSSVBFKSk/U1RSSVBFOicjb2ZmcmUnLA0KICAgICAgICAgICAgb25DbGljazplPT57dmFyIHY9KFNUUklQRSAmJiBTVFJJUEUhPT0nIycgJiYgIS9SRU1QTEFDRVIvLnRlc3QoU1RSSVBFKSk7IHRyeXt0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDp2PydzdHJpcGUnOidvZmZyZScsZW1wbGFjZW1lbnQ6J2JhbmRlX2ZhcSd9KTt9Y2F0Y2goXyl7fSBpZighdil7IGlmKGUmJmUucHJldmVudERlZmF1bHQpZS5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnRvT2ZmcmUoZSk7IH19LA0KICAgICAgICAgICAgb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTFweCknO30sDQogICAgICAgICAgICBvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO30sDQogICAgICAgICAgICBzdHlsZTp7dHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSwgdHJhbnNmb3JtIC4xOHMgZWFzZScsdGV4dERlY29yYXRpb246J25vbmUnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGhlaWdodDptPyc1NnB4JzonNjBweCcscGFkZGluZzptPycwIDI0cHgnOicwIDM0cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNi41cHgnOicxN3B4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyx3aGl0ZVNwYWNlOidub3dyYXAnLGJveFNoYWRvdzonMCAxNHB4IDMwcHggLTE0cHggcmdiYSgyNDUsMzcsNzMsMC42KSd9fSwnT2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUsICcrdGhpcy5wcmljZSgpKSwNCiAgICAgICAgICBlbCgnYScse2hyZWY6JyNkaWFnJyxvbkNsaWNrOmU9PntpZihlJiZlLnByZXZlbnREZWZhdWx0KWUucHJldmVudERlZmF1bHQoKTsgdHJ5e3RyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidwcmVhbmFseXNlJyxlbXBsYWNlbWVudDonYmFuZGVfZmFxX2xpZW5fZ3JhdHVpdCd9KTt9Y2F0Y2goXyl7fSB0aGlzLnNjcm9sbFRvRGlhZyhlKTt9LA0KICAgICAgICAgICAgb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuY29sb3I9TkFWWTt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yPUdSRVk7fSwNCiAgICAgICAgICAgIHN0eWxlOnttYXJnaW5Ub3A6JzlweCcsYWxpZ25TZWxmOm0/J2ZsZXgtc3RhcnQnOidmbGV4LWVuZCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjQ1LGNvbG9yOkdSRVksdGV4dERlY29yYXRpb246J25vbmUnLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxjdXJzb3I6J3BvaW50ZXInfX0sJ291IGZhaXJlIGxpcmUgbW9uIHJlbGV2w6kgZ3JhdHVpdGVtZW50LCBkXHUyMDE5YWJvcmQnKSkpKSk7DQoNCiAgICAvLyBVbmUgc2V1bGUgcHLDqXNlbnRhdGlvbiBkdSBiaWxhbiBwYXlhbnQgOiBlbGxlIGFic29yYmUgwqsgbGVzIHF1ZXN0aW9ucyBhdXhxdWVsbGVzDQogICAgLy8gdm90cmUgZG9zc2llciByw6lwb25kIMK7LCBldCBsZXMgNCBwYWdlcyBuZSBzb250IHBsdXMgdW5lIHNlY3Rpb24sIG9uIHkgYWNjw6hkZSBkJ2ljaS4NCiAgICBjb25zdCBHUk9VUEVTPVsNCiAgICAgIFsnVm9zIGRyb2l0cyB2w6lyaWZpw6lzJyxbDQogICAgICAgICdjZSBxdWUgdm90cmUgcmVsZXbDqSBjb21wdGUgdnJhaW1lbnQsIGFubsOpZSBwYXIgYW5uw6llJywNCiAgICAgICAgJ2xlcyBhbm7DqWVzIHF1aSBtYW5xdWVudCwgZXQgY2UgcXVpIHBldXQgbFx1MjAxOWV4cGxpcXVlcicsDQogICAgICAgICdjZSBxdWUgY2hhcXVlIGNvcnJlY3Rpb24gYWpvdXRlcmFpdCwgc2kgdm90cmUgY2Fpc3NlIGxhIHJldGllbnQnLA0KICAgICAgICAnY2UgcXVlIHZvdHJlIHJldHJhaXRlIHBvdXJyYWl0IG91dnJpciDDoCB2b3RyZSBjb25qb2ludCwgZXQgc291cyBxdWVsbGVzIGNvbmRpdGlvbnMnDQogICAgICBdLCdRdVx1MjAxOW9uIHRyb3V2ZSBkaXggZXJyZXVycyBvdSBhdWN1bmUsIHZvdXMgc29ydGV6IGF2ZWMgbGEgbcOqbWUgY2hvc2VcdTAwYTA6IGxhIGNlcnRpdHVkZS4nXSwNCiAgICAgIFsnVm9zIHBvc3NpYmlsaXTDqXMgZGUgZMOpcGFydCcsWw0KICAgICAgICAnw6AgcXVlbGxlIGRhdGUgdm91cyBwb3VycmlleiBwYXJ0aXIsIGV0IGNlIHF1ZSA2IG1vaXMgZGUgcGx1cyBjaGFuZ2VyYWllbnQnLA0KICAgICAgICAnY29tYmllbiB2b3VzIHRvdWNoZXJleiBjaGFxdWUgbW9pcywgc2Vsb24gbGUgbW9tZW50IG/DuSB2b3VzIHBhcnRleicsDQogICAgICAgICdzaSB2b3RyZSBjYXJyacOocmUgZW50cmUgZGFucyBsZXMgY29uZGl0aW9ucyBkXHUyMDE5dW4gZMOpcGFydCBhbnRpY2lww6knLA0KICAgICAgICAnc2kgcmFjaGV0ZXIgZGVzIHRyaW1lc3RyZXMgYSB1biBpbnTDqXLDqnQgY2hleiB2b3VzJw0KICAgICAgXSxudWxsXSwNCiAgICAgIFsnVm9zIGTDqW1hcmNoZXMgcHLDqXBhcsOpZXMnLFsNCiAgICAgICAgJ2xlcyBjb3VycmllcnMgZMOpasOgIMOpY3JpdHMsIGFkcmVzc8OpcyDDoCBsYSBib25uZSBjYWlzc2UsIMOgIHNpZ25lciBldCDDoCBwb3N0ZXInLA0KICAgICAgICAnbGVzIHBpw6hjZXMgw6AgcsOpdW5pciBwb3VyIGNoYWN1bicsDQogICAgICAgICdsXHUyMDE5b3JkcmUgZGVzIGRlbWFuZGVzLCBsYSBwbHVzIGTDqXRlcm1pbmFudGUgZW4gcHJlbWllcicsDQogICAgICAgICdsYSByZWxhbmNlLCBsZSBtw6lkaWF0ZXVyLCBsYSBjb21taXNzaW9uIGRlIHJlY291cnMgYW1pYWJsZScNCiAgICAgIF0sbnVsbF0NCiAgICBdOw0KICAgIGNvbnN0IGJlbmVmaWNlcz1zZWN0KFBBUEVSLGVsKCdkaXYnLG51bGwsWw0KICAgICAgZWwoJ2Rpdicse2tleTonaCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMTBweCc6JzQ2cHgnLGFsaWduSXRlbXM6bT8nZmxleC1zdGFydCc6J2ZsZXgtZW5kJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sdGhpcy5leWVicm93KCdDZSBxdWUgdm91cyBhcHBvcnRlIGxlIGJpbGFuIGNvbXBsZXQnLG51bGwsbnVsbCwnSScpLA0KICAgICAgICAgIGVsKCdoMicse3N0eWxlOnttYXJnaW46bT8nMTBweCAwIDAnOicxMnB4IDAgMCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNnB4JzonMzhweCcsbGluZUhlaWdodDoxLjAyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdWb3MgZHJvaXRzLCB2b3RyZSBkYXRlIGRlIGTDqXBhcnQsIHZvcyBkw6ltYXJjaGVzJykpLA0KICAgICAgICBudWxsKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMjJweCc6JzMycHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzoncmVwZWF0KDMsMWZyKScsZ2FwOm0/JzIycHgnOicwIDQwcHgnfX0sDQogICAgICAgIEdST1VQRVMubWFwKGZ1bmN0aW9uKGcsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2JvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nVG9wOm0/JzEycHgnOicxNXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEwcHgnfX0sDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE1cHgnOicxN3B4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsY29sb3I6UkVELGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LCcwJysoaysxKSksDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTYuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxjb2xvcjpOQVZZfX0sZ1swXSkpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nN3B4JzonOHB4J319LA0KICAgICAgICAgICAgZ1sxXS5tYXAoZnVuY3Rpb24odDIsazIpeyByZXR1cm4gZWwoJ2Rpdicse2tleTprMixzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOXB4J319LA0KICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOicjYzljZmRhJyxtYXJnaW5Cb3R0b206JzZweCd9fSksDQogICAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0sdDIpKTsgfSkpLA0KICAgICAgICAgIGdbMl0/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonM3B4JyxwYWRkaW5nVG9wOm0/JzlweCc6JzEwcHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LGdbMl0pOm51bGwpOyB9KSksDQogICAgICBlbCgnZGl2Jyx7a2V5OidmJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzIwcHgnOicyOHB4JyxwYWRkaW5nVG9wOm0/JzE0cHgnOicxOHB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxMnB4JzonNDBweCcsYWxpZ25JdGVtczptPydmbGV4LXN0YXJ0JzonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWSxtYXhXaWR0aDonNjJjaCd9fSwnSlx1MjAxOWFuYWx5c2UsIGplIHLDqWRpZ2UgZXQgamUgcHLDqXBhcmUgdm9zIGRlbWFuZGVzLiBWb3VzIHNpZ25leiBldCB2b3VzIGVudm95ZXouIENcdTIwMTllc3Qgdm90cmUgY2Fpc3NlIHF1aSBkw6ljaWRlLicpLA0KICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+eyB0cnl7dHJhY2soJ2FwZXJjdV9hZ3JhbmRpJyx7cGFnZTonZGVwdWlzX2JlbmVmaWNlcyd9KTt9Y2F0Y2goXyl7fSB0aGlzLnNldFN0YXRlKHt6b29tOjB9KTsgfSwNCiAgICAgICAgICBvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1OQVZZO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9JyNjOWNmZGEnO30sDQogICAgICAgICAgc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsZmxleFNocmluazowLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTBweCcsaGVpZ2h0Om0/JzQ4cHgnOic1MHB4JyxwYWRkaW5nOicwIDIwcHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGNvbG9yOk5BVlksZm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsZm9udFdlaWdodDo2MDB9fSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOnt3aWR0aDonMTJweCcsaGVpZ2h0OicxNnB4Jyxib3JkZXI6JzFweCBzb2xpZCAnK05BVlksZGlzcGxheTonaW5saW5lLWJsb2NrJ319KSwNCiAgICAgICAgICAnVm9pciA0IHBhZ2VzIGRcdTIwMTl1biBkb3NzaWVyIHLDqWVsJykpDQogICAgXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORX0pOw0KDQogICAgLy8gVHJvaXMgw6l0YXBlcyA6IGxlIGNvdXJyaWVyIG4nZXN0IHBhcyB1bmUgcsOpY29tcGVuc2UgZGUgZmluIGRlIHBhcmNvdXJzLCBpbCBlc3QgcG9zw6kNCiAgICAvLyDDoCBjw7R0w6kgZHUgcmFpc29ubmVtZW50IHF1aSBsZSBqdXN0aWZpZS4NCiAgICBjb25zdCBjYXNUZXRlPShuLHQpPT5lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEwcHgnfX0sDQogICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE1cHgnOicxN3B4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsY29sb3I6UkVELGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LG4pLA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTAuNXB4JzonMTFweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOkdSRVl9fSx0KSk7DQogICAgY29uc3QgY2FzUGFyYT0odCk9PmVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE1cHgnOicxNnB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0sdCk7DQoNCiAgICBjb25zdCBjYXNDb3Vycmllcj1lbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZzptPycxOHB4IDE4cHggMjBweCc6JzI4cHggMzJweCAzMHB4Jyxib3hTaGFkb3c6JzAgMjRweCA2MHB4IC00MHB4IHJnYmEoMTQsMTksNzksMC4zNSknfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzExLjVweCc6JzEycHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVksdGV4dEFsaWduOidyaWdodCd9fSwnQ2Fpc3NlIGRcdTIwMTlhc3N1cmFuY2UgcmV0cmFpdGUnLGVsKCdicicpLCdldCBkZSBsYSBzYW50w6kgYXUgdHJhdmFpbCcpLA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzE4cHgnLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsZm9udFdlaWdodDo3MDAsY29sb3I6TkFWWX19LCdPYmpldFx1MDBhMDogZGVtYW5kZSBkZSByw6lndWxhcmlzYXRpb24gZGUgbFx1MjAxOWFubsOpZSAxOTgzJyksDQogICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nMTJweCAwIDAnOicxNnB4IDAgMCcsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNyxjb2xvcjpJTkt9fSwnTWFkYW1lLCBNb25zaWV1ciwnKSwNCiAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPyc4cHggMCAwJzonMTBweCAwIDAnLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjcsY29sb3I6SU5LfX0sJ01vbiByZWxldsOpIGRlIGNhcnJpw6hyZSBwb3J0ZSwgcG91ciBsXHUyMDE5YW5uw6llIDE5ODMsIHVuZSBhY3Rpdml0w6kgcsOpbXVuw6lyw6llIHNhbnMgcXVcdTIwMTlhdWN1biB0cmltZXN0cmUgbmUgc29pdCByZXRlbnUgYXUgcsOpZ2ltZSBkZSBiYXNlLiBDZXR0ZSBhbm7DqWUgY29uZGl0aW9ubmUgcGFyIGFpbGxldXJzIGxcdTIwMTlleGFtZW4gZGUgbWVzIGRyb2l0cyDDoCB1biBkw6lwYXJ0IGFudGljaXDDqS4nKSwNCiAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPyc4cHggMCAwJzonMTBweCAwIDAnLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjcsY29sb3I6SU5LfX0sJ0plIHZvdXMgZGVtYW5kZSBkZSBiaWVuIHZvdWxvaXIgcHJvY8OpZGVyIGF1IHLDqWV4YW1lbiBkZSBjZXR0ZSBhbm7DqWUgYXUgdnUgZGVzIHBpw6hjZXMgam9pbnRlcywgZXQgZGUgcG9ydGVyIMOgIG1vbiBjb21wdGUgbGVzIHRyaW1lc3RyZXMgY29ycmVzcG9uZGFudHMuJyksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxNHB4JzonMThweCcscGFkZGluZ1RvcDptPycxMnB4JzonMTVweCcsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzExcHgnfX0sDQogICAgICAgIFsnTm9tIGV0IHByw6lub20nLCdOdW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZScsJ0RhdGUgZXQgc2lnbmF0dXJlJ10ubWFwKGZ1bmN0aW9uKHQyLGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOicxMHB4J319LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDptPycxMTJweCc6JzEzMnB4Jyxmb250U2l6ZTptPycxMnB4JzonMTIuNXB4Jyxjb2xvcjpHUkVZfX0sdDIpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXg6MSxib3JkZXJCb3R0b206JzFweCBkb3R0ZWQgI2I5YzFkNicsaGVpZ2h0Om0/JzE0cHgnOicxNnB4J319KSk7IH0pKSk7DQoNCiAgICBjb25zdCBjYXNHYXVjaGU9ZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzIwcHgnOicyNnB4J319LA0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZ1RvcDptPycxMnB4JzonMTVweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sDQogICAgICAgIGNhc1RldGUoJzEnLCdDZSBxdWUgbGUgcmVsZXbDqSBpbmRpcXVhaXQnKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm0/JzEycHgnOicxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYmFja2dyb3VuZDonI2ZmZmZmZicscGFkZGluZzptPycxMXB4IDEzcHgnOicxM3B4IDE2cHgnfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyOHB4JzonMzRweCcsbGluZUhlaWdodDowLjksZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDM1ZW0nLGNvbG9yOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzE5ODMnKSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsY29sb3I6R1JFWX19LCfCtycpLA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjhweCc6JzM0cHgnLGxpbmVIZWlnaHQ6MC45LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzNWVtJyxjb2xvcjpSRUQsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sJzAgdHJpbWVzdHJlJykpLA0KICAgICAgICBjYXNQYXJhKCdDZXR0ZSBhbm7DqWUtbMOgIGF2YWl0IHByb2R1aXQgZGVzIGRyb2l0cyDDoCBsYSByZXRyYWl0ZSBjb21wbMOpbWVudGFpcmUsIGRvbmMgaWwgeSBhdmFpdCBldSBkdSB0cmF2YWlsIHLDqW11bsOpcsOpLiBFdCBwYXMgdW4gc2V1bCB0cmltZXN0cmUgdmFsaWTDqSBhdSByw6lnaW1lIGRlIGJhc2UuIFVuZSBsaWduZSBwYXJtaSBxdWFyYW50ZSwgcXVlIHJpZW4gbmUgbWV0IGVuIMOpdmlkZW5jZS4nKSksDQoNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE1cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxM3B4J319LA0KICAgICAgICBjYXNUZXRlKCcyJywnQ2UgcXVlIGxcdTIwMTlleGFtZW4gYSBwcsOpY2lzw6knKSwNCiAgICAgICAgY2FzUGFyYSgnQ2V0dGUgYW5uw6llIHBvcnRhaXQgZGVzIGRyb2l0cyDDoCBsYSByZXRyYWl0ZSBjb21wbMOpbWVudGFpcmUsIGRvbmMgdW4gc2FsYWlyZSwgZXQgYXVjdW4gdHJpbWVzdHJlIGRlIGJhc2UuIFVuIGTDqWNhbGFnZSBxdWkgYXBwZWxsZSB1biBleGFtZW4sIHBhcyB1bmUgY29uY2x1c2lvbi4nKSwNCiAgICAgICAgY2FzUGFyYSgnVHJvaXMgc2l0dWF0aW9ucyBwZXV2ZW50IGxcdTIwMTlleHBsaXF1ZXIgc2FucyBlcnJldXIgZGUgbGEgY2Fpc3NlXHUwMGEwOiB1biBwcmVtaWVyIGVtcGxvaSBkZSBxdWVscXVlcyBzZW1haW5lcywgdW4gYXBwcmVudGlzc2FnZSwgb3UgdW4gc2FsYWlyZSB0cm9wIGJhcyDDoCB1bmUgw6lwb3F1ZSBvw7kgbGUgc2V1aWwgZGUgdmFsaWRhdGlvbiDDqXRhaXQgYmllbiBwbHVzIMOpbGV2w6kgcXVcdTIwMTlhdWpvdXJkXHUyMDE5aHVpLiBBdWN1bmUgbmUgcGV1dCDDqnRyZSBleGNsdWUgc3VyIGxlIHNldWwgZG9jdW1lbnQuIENcdTIwMTllc3QgcHLDqWNpc8OpbWVudCBjZSBxdWkganVzdGlmaWUgdW5lIGRlbWFuZGUgZGUgdsOpcmlmaWNhdGlvbi4nKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNHB4Jyxib3JkZXJMZWZ0OiczcHggc29saWQgJytSRUQscGFkZGluZ0xlZnQ6bT8nMTNweCc6JzE2cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzhweCc6JzEwcHgnfX0sDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjRweCcsbGluZUhlaWdodDoxLjIyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J3ByZXR0eSd9fSwnU2VwdCBhbm7DqWVzIGRlIHNvbiByZWxldsOpIGFwcGVsYWllbnQgdW5lIHbDqXJpZmljYXRpb24uIFNpeCB2YWxlbnQgZGVzIHRyaW1lc3RyZXMuIENlbGxlLWNpIGVzdCBsYSBzZXVsZSDDoCBzZSBzaXR1ZXIgYXZhbnQgbGEgYm9ybmUgZFx1MjAxOcOiZ2UgZGUgZMOpYnV0IGRcdTIwMTlhY3Rpdml0w6kgcXVpIG91dnJlIGxhIGNhcnJpw6hyZSBsb25ndWUsIGJvcm5lIHF1XHUyMDE5ZWxsZSBuXHUyMDE5YXR0ZWludCBwYXMgYXVqb3VyZFx1MjAxOWh1aS4gQ1x1MjAxOWVzdCBkb25jICcsZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjcwMH19LCdsYSBzZXVsZSBkb250IGxhIHLDqWd1bGFyaXNhdGlvbiBwZXV0IGF2YW5jZXIgc2EgZGF0ZSBkZSBkw6lwYXJ0JyksJywgZXQgcGFzIHNldWxlbWVudCBhdWdtZW50ZXIgc2EgcGVuc2lvbi4gRWxsZSBlc3QgcGFzc8OpZSBlbiB0w6p0ZSBkdSBjb3VycmllciBwb3VyIGNldHRlIHJhaXNvbi4nKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxMy41cHgnOicxNC41cHgnLGZvbnRTdHlsZTonaXRhbGljJyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdMYSBjYXJyacOocmUgbG9uZ3VlIGV4aWdlIHVuZSBzZWNvbmRlIGNvbmRpdGlvbiwgbGEgZHVyw6llIGNvdGlzw6llLCBxdWkgbmUgZmlndXJlIHBhcyBzdXIgdW4gcmVsZXbDqS4gQ1x1MjAxOWVzdCBzYSBjYWlzc2UgcXVpIHRyYW5jaGUuJykpLA0KICAgICAgICBlbCgnZGV0YWlscycse3N0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNHB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMHB4JzonMTJweCd9fSwNCiAgICAgICAgICBlbCgnc3VtbWFyeScse3N0eWxlOntjdXJzb3I6J3BvaW50ZXInLGxpc3RTdHlsZTonbm9uZScsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdMZXMgZMOpdGFpbHMgZGUgbGEgbcOpdGhvZGUnKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nOXB4IDAgMCc6JzExcHggMCAwJyxmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ0xcdTIwMTlhbm7DqWUgMTk4MyBuXHUyMDE5YSBwYXMgw6l0w6kganVnw6llIGF2ZWMgbGVzIHLDqGdsZXMgZGUgMjAyNiwgbWFpcyBhdmVjIGxlIHNldWlsIGRlIHZhbGlkYXRpb24gcXVpIHNcdTIwMTlhcHBsaXF1YWl0IGNldHRlIGFubsOpZS1sw6AsIGV0IGNlbHVpIGRlIHNvbiB0ZXJyaXRvaXJlLiBDZXMgc2V1aWxzIG9udCBjaGFuZ8OpIDIgZm9pcyBkZXB1aXMgMTk0NywgZXQgcGVuZGFudCAyMyBhbnMgaWxzIG5cdTIwMTlvbnQgcGFzIMOpdMOpIGxlcyBtw6ptZXMgZW4gbcOpdHJvcG9sZSBldCBvdXRyZS1tZXIuJyksDQogICAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOm0/JzhweCAwIDAnOicxMHB4IDAgMCcsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6R1JFWX19LCczIGTDqXRlY3Rpb25zIG9udCDDqXTDqSDDqWNyaXRlcywgdsOpcmlmacOpZXMsIHB1aXMgZMOpc2FjdGl2w6llc1x1MDBhMDogZWxsZXMgYXVyYWllbnQgYWxhcm3DqSDDoCB0b3J0IGxhIHBsdXBhcnQgZGVzIG3DqHJlcyBkZSBmYW1pbGxlLiBFbGxlcyBzb250IHRvdWpvdXJzIGRhbnMgbm9zIGZpY2hpZXJzLCBhdmVjIGxhIHJhaXNvbiDDqWNyaXRlIGRlIGxldXIgbWlzZSDDoCBsXHUyMDE5w6ljYXJ0LicpKSksDQoNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE1cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxMnB4J319LA0KICAgICAgICBjYXNUZXRlKCczJywnQ2UgcXVcdTIwMTllbGxlIGEgcmXDp3UnKSwNCiAgICAgICAgY2FzUGFyYSgnTGUgY291cnJpZXIsIMOpY3JpdCwgYWRyZXNzw6kgw6AgbGEgYm9ubmUgY2Fpc3NlLCBhdmVjIGNldHRlIGFubsOpZSBwbGFjw6llIGVuIHTDqnRlIGRlIGRlbWFuZGUgZXQgbGVzIHNpeCBhdXRyZXMgw6AgbGEgc3VpdGUuIEVsbGUgblx1MjAxOWEgcGx1cyBxdVx1MjAxOcOgIGxlIHNpZ25lciBldCDDoCBsXHUyMDE5ZW52b3llciBlbiByZWNvbW1hbmTDqS4nKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc3cHgnOic4cHgnfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOklOS319LCdFdCBsYSBsaXN0ZSBub21pbmF0aXZlIGRlcyBwacOoY2VzIMOgIGpvaW5kcmVcdTAwYTA6JyksDQogICAgICAgICAgWydzZXMgYnVsbGV0aW5zIGRlIHBhaWUgZGUgbFx1MjAxOWFubsOpZScsJ3NvbiBjb250cmF0IG91IHNvbiBjZXJ0aWZpY2F0IGRlIHRyYXZhaWwnLCdsZSBjb250cmF0IGRcdTIwMTlhcHByZW50aXNzYWdlIGxlIGNhcyDDqWNow6lhbnQnXS5tYXAoZnVuY3Rpb24odDIsayl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omssc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEwcHgnfX0sDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEycHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzVweCd9fSksDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOk5BVll9fSx0MikpOyB9KSksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnTGUgZG9zc2llciBjaXRlIHNlcyBzb3VyY2VzXHUwMGEwOiB1biBkw6ljcmV0IGRlIDIwMjMsIHVuIGFydGljbGUgZHUgY29kZSBkZSBsYSBzw6ljdXJpdMOpIHNvY2lhbGUsIGV0IHVuZSBjaXJjdWxhaXJlIGRlIGxhIENuYXYgZGUganVpbiAyMDI2LicpKSk7DQoNCiAgICBjb25zdCBjYXM9c2VjdChudWxsLGVsKCdkaXYnLG51bGwsWw0KICAgICAgZWwoJ2Rpdicse2tleTonaCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMTBweCc6JzQ2cHgnLGFsaWduSXRlbXM6bT8nZmxleC1zdGFydCc6J2ZsZXgtZW5kJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sdGhpcy5leWVicm93KCdVbiBjYXMgY29uY3JldCcsbnVsbCxudWxsLCdJSScpLA0KICAgICAgICAgIGVsKCdoMicse3N0eWxlOnttYXJnaW46bT8nMTBweCAwIDAnOicxMnB4IDAgMCcsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyNnB4JzonMzhweCcsbGluZUhlaWdodDoxLjAyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyNmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdVbmUgbGlnbmUgZGUgMTk4MywgZHUgcmVsZXbDqSBqdXNxdVx1MjAxOWF1IGNvdXJyaWVyJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZLG1heFdpZHRoOicyNmNoJ319LCdMZSBtw6ptZSByYWlzb25uZW1lbnQsIHRlbnUgc3VyIGNoYWN1bmUgZGUgdm9zIGFubsOpZXMuJykpLA0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e21hcmdpblRvcDptPycyMnB4JzonMzJweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxLjI1ZnIgMWZyJyxnYXA6bT8nMjJweCc6JzAgNDRweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sDQogICAgICAgIGNhc0dhdWNoZSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sbT9jYXNDb3VycmllcjplbCgnZGl2Jyx7c3R5bGU6e3Bvc2l0aW9uOidzdGlja3knLHRvcDonMjRweCd9fSxjYXNDb3VycmllcikpKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2N0YScsc3R5bGU6e21hcmdpblRvcDptPycyNHB4JzonMzRweCcscGFkZGluZ1RvcDptPycxOHB4JzonMjRweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxhbGlnbkl0ZW1zOm0/J3N0cmV0Y2gnOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6bT8nMTZweCc6JzQwcHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMHB4JzonMjVweCcsbGluZUhlaWdodDoxLjE1LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnLG1heFdpZHRoOiczNGNoJ319LCdDZSByYWlzb25uZW1lbnQsIHRlbnUgc3VyIGNoYWN1bmUgZGUgdm9zIGFubsOpZXMsIGNcdTIwMTllc3Qgdm90cmUgYmlsYW4gcmV0cmFpdGUuJyksDQogICAgICAgIGVsKCdhJyx7aHJlZjooU1RSSVBFICYmIFNUUklQRSE9PScjJyAmJiAhL1JFTVBMQUNFUi8udGVzdChTVFJJUEUpKT9TVFJJUEU6JyNvZmZyZScsDQogICAgICAgICAgb25DbGljazplPT57dmFyIHY9KFNUUklQRSAmJiBTVFJJUEUhPT0nIycgJiYgIS9SRU1QTEFDRVIvLnRlc3QoU1RSSVBFKSk7IHRyeXt0cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDp2PydzdHJpcGUnOidvZmZyZScsZW1wbGFjZW1lbnQ6J2JhbmRlX2Nhcyd9KTt9Y2F0Y2goXyl7fSBpZighdil7IGlmKGUmJmUucHJldmVudERlZmF1bHQpZS5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnRvT2ZmcmUoZSk7IH19LA0KICAgICAgICAgIG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LA0KICAgICAgICAgIG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fSwNCiAgICAgICAgICBzdHlsZTp7dHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSwgdHJhbnNmb3JtIC4xOHMgZWFzZScsZmxleFNocmluazowLHRleHREZWNvcmF0aW9uOidub25lJyxkaXNwbGF5OidpbmxpbmUtZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxoZWlnaHQ6bT8nNTZweCc6JzYwcHgnLHBhZGRpbmc6bT8nMCAyNHB4JzonMCAzNHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTYuNXB4JzonMTdweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsd2hpdGVTcGFjZTonbm93cmFwJyxib3hTaGFkb3c6JzAgMTRweCAzMHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknfX0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlLCAnK3RoaXMucHJpY2UoKSkpDQogICAgXSkse2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORX0pOw0KDQogICAgLy8gTGVzIDQgcGFnZXMgc29udCB0cm9wIHBldGl0ZXMgcG91ciDDqnRyZSBsdWVzIDogdW4gY2xpYyBsZXMgYWdyYW5kaXQgw6AgbCfDqWNoZWxsZS4NCiAgICBjb25zdCB6b29tSWR4PSh0aGlzLnN0YXRlJiZ0aGlzLnN0YXRlLnpvb20hPW51bGwpP3RoaXMuc3RhdGUuem9vbTpudWxsOw0KICAgIGNvbnN0IFpQPVtbcGFnZUNvdXYsJ0xhIGNvdXZlcnR1cmUnXSxbcGFnZVN1amV0LCdVbmUgcGFnZSBkZSBzdWpldCddLFtwYWdlQ291cnJpZXIsJ1VuIGNvdXJyaWVyIHByw6p0IMOgIHNpZ25lciddLFtwYWdlRXVyb3MsJ0NlIHF1ZSBjZWxhIHJlcHLDqXNlbnRlIGVuIGV1cm9zJ11dOw0KICAgIC8vIEwnw6ljaGVsbGUgc2UgY2FsY3VsZSBzdXIgbGEgcGxhY2UgZGlzcG9uaWJsZSwgamFtYWlzIHN1ciB1bmUgY29uc3RhbnRlIDogbGUgY29ycHMNCiAgICAvLyBkZXMgcGFnZXMgKDMsNyDDoCA0LDYgcHggZGFucyBsZSBnYWJhcml0KSBkb2l0IHJlc3NvcnRpciDDoCAxMiBweCBhdSBtaW5pbXVtLg0KICAgIGNvbnN0IEJBU0U9bT8xNTA6MjE2Ow0KICAgIGNvbnN0IF92dz0odHlwZW9mIHdpbmRvdyE9PSd1bmRlZmluZWQnP3dpbmRvdy5pbm5lcldpZHRoOjEyMDApLCBfdmg9KHR5cGVvZiB3aW5kb3chPT0ndW5kZWZpbmVkJz93aW5kb3cuaW5uZXJIZWlnaHQ6ODAwKTsNCiAgICBjb25zdCBfY2libGU9TWF0aC5taW4oX3Z3KjAuOTQsX3ZoKjAuODYqMjEwLzI5Nyw4NjApOw0KICAgIGNvbnN0IGt6PU1hdGgubWF4KDMuNixfY2libGUvQkFTRSk7DQogICAgY29uc3QgdmlzaW9ubmV1c2U9KHpvb21JZHg9PW51bGwpP251bGw6ZWwoJ2Rpdicse29uQ2xpY2s6KCk9PnRoaXMuc2V0U3RhdGUoe3pvb206bnVsbH0pLA0KICAgICAgc3R5bGU6e3Bvc2l0aW9uOidmaXhlZCcsbGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsekluZGV4OjEyMCxiYWNrZ3JvdW5kOidyZ2JhKDcsMTAsMzgsMC44NiknLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxnYXA6bT8nMTJweCc6JzE2cHgnLHBhZGRpbmc6bT8nMTZweCc6JzI4cHgnLGN1cnNvcjonem9vbS1vdXQnfX0sDQogICAgICBlbCgnZGl2Jyx7b25DbGljazplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDptPycxMHB4JzonMTZweCcsY3Vyc29yOidkZWZhdWx0J319LA0KICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+dGhpcy5zZXRTdGF0ZSh7em9vbTooem9vbUlkeCszKSU0fSksc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsd2lkdGg6bT8nMzRweCc6JzM4cHgnLGhlaWdodDptPyczNHB4JzonMzhweCcsYm9yZGVyOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQpJyxiYWNrZ3JvdW5kOid0cmFuc3BhcmVudCcsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOicxNnB4JyxsaW5lSGVpZ2h0OjF9fSwnXHUyMDM5JyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6bT8nMTUwcHgnOicyMjBweCcsdGV4dEFsaWduOidjZW50ZXInLGZvbnRTaXplOm0/JzExLjVweCc6JzEyLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xNmVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjYWFiMmVlJ319LFpQW3pvb21JZHhdWzFdKydcdTAwYTDCtyAnKyh6b29tSWR4KzEpKycgc3VyIDQnKSwNCiAgICAgICAgZWwoJ2J1dHRvbicse29uQ2xpY2s6KCk9PnRoaXMuc2V0U3RhdGUoe3pvb206KHpvb21JZHgrMSklNH0pLHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHdpZHRoOm0/JzM0cHgnOiczOHB4JyxoZWlnaHQ6bT8nMzRweCc6JzM4cHgnLGJvcmRlcjonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC40KScsYmFja2dyb3VuZDondHJhbnNwYXJlbnQnLGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTonMTZweCcsbGluZUhlaWdodDoxfX0sJ1x1MjAzYScpKSwNCiAgICAgIGVsKCdkaXYnLHtvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpO30sc3R5bGU6e3dpZHRoOk1hdGgucm91bmQoQkFTRSpreikrJ3B4JyxtYXhXaWR0aDonOTR2dycsaGVpZ2h0Ok1hdGgucm91bmQoQkFTRSpreioyOTcvMjEwKSsncHgnLG1heEhlaWdodDonODZ2aCcsb3ZlcmZsb3c6J2F1dG8nLFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOid0b3VjaCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm94U2hhZG93OicwIDQwcHggOTBweCAtMzBweCByZ2JhKDAsMCwwLDAuNiknLGN1cnNvcjonZGVmYXVsdCd9fSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnt3aWR0aDpCQVNFKydweCcsdHJhbnNmb3JtOidzY2FsZSgnK2t6KycpJyx0cmFuc2Zvcm1PcmlnaW46J3RvcCBsZWZ0J319LFpQW3pvb21JZHhdWzBdKSksDQogICAgICBlbCgnYnV0dG9uJyx7b25DbGljazooKT0+dGhpcy5zZXRTdGF0ZSh7em9vbTpudWxsfSksc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsYm9yZGVyOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjQpJyxiYWNrZ3JvdW5kOid0cmFuc3BhcmVudCcsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGZvbnRXZWlnaHQ6NjAwLHBhZGRpbmc6bT8nMTBweCAxOHB4JzonMTFweCAyMnB4J319LCdGZXJtZXInKSk7DQoNCiAgICByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOnttaW5IZWlnaHQ6JzEwMCUnLGJhY2tncm91bmQ6JyNmZmZmZmYnfX0sYmFyLGhlcm8sdGhpcy5sZWN0dXJlKG0pLGVsKCdkaXYnLHtrZXk6J25hdi1yZWNvaXMnLCdkYXRhLW5hdic6J3JlY29pcyd9LGJlbmVmaWNlcyksY2FzLHByZXV2ZSxsZXR0cmUscmVnaW1lcyxldGFwZXMsYWlsbGV1cnMscHJpeCxlbCgnZGl2Jyx7a2V5OiduYXYtcXVlc3Rpb25zJywnZGF0YS1uYXYnOidxdWVzdGlvbnMnfSxxdWVzdGlvbnMpLGZpbkN0YSxwaWVkLHRoaXMuc3RpY2t5QmFyKG0pLHZpc2lvbm5ldXNlKTsNCiAgfQ0KDQogIHBhZ2VCKG0pew0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQ7DQogICAgY29uc3QgaW5uZXI9Yz0+bT9lbCgnZGl2Jyx7c3R5bGU6e3BhZGRpbmc6JzAgMjRweCd9fSxjKTplbCgnZGl2Jyx7c3R5bGU6e21heFdpZHRoOicxMDAwcHgnLG1hcmdpbjonMCBhdXRvJyxwYWRkaW5nOicwIDY0cHgnfX0sYyk7DQogICAgY29uc3Qga2lja2VyPSh0LGRhcmspPT50aGlzLmV5ZWJyb3codCxkYXJrPycjYWFiMmVlJzpOQVZZLG0/MTEuNToxMi41KTsNCiAgICBjb25zdCBoMj0odCxkYXJrKT0+ZWwoJ2gyJyx7c3R5bGU6e21hcmdpbjowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjhweCc6JzQ0cHgnLGxpbmVIZWlnaHQ6MS4wNSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjRlbScsY29sb3I6ZGFyaz8nI2ZmZmZmZic6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSx0KTsNCiAgICBjb25zdCBwPSh0LGRhcmspPT5lbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxNS41cHgnOicxNy41cHgnLGxpbmVIZWlnaHQ6MS42OCxjb2xvcjpkYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuODIpJzpJTkssbWF4V2lkdGg6JzU4Y2gnLHRleHRXcmFwOidwcmV0dHknfX0sdCk7DQogICAgY29uc3QgY2FwdGlvbj0odCxkYXJrKT0+ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpkYXJrPydyZ2JhKDI1NSwyNTUsMjU1LDAuNiknOkdSRVkscGFkZGluZ1RvcDptPycxMHB4JzonMTJweCcsYm9yZGVyVG9wOicxcHggc29saWQgJysoZGFyaz8ncmdiYSgyNTUsMjU1LDI1NSwwLjE4KSc6TElORSl9fSx0KTsNCiAgICBjb25zdCBjb2w9KGdhcCxjaGlsZHJlbik9PmVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6Z2FwfX0sY2hpbGRyZW4pOw0KICAgIGNvbnN0IHJvdz0ocmV2LGNoaWxkcmVuKT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6KHJldj8ncm93LXJldmVyc2UnOidyb3cnKSxnYXA6bT8nMjZweCc6JzU2cHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnfX0sY2hpbGRyZW4pOw0KICAgIGNvbnN0IHNlY3Q9KGJnLGNoaWxkcmVuLGV4dHJhKT0+ZWwoJ3NlY3Rpb24nLHtzdHlsZTpPYmplY3QuYXNzaWduKHtwYWRkaW5nOm0/JzQ0cHggMCc6JzcycHggMCcsYmFja2dyb3VuZDpiZ3x8J3RyYW5zcGFyZW50J30sZXh0cmF8fHt9KX0saW5uZXIoY2hpbGRyZW4pKTsNCg0KICAgIGNvbnN0IGJyYW5kPWVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzlweCcsbWFyZ2luQm90dG9tOm0/JzJweCc6JzZweCd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzEzcHgnLGhlaWdodDonMTNweCcsYm9yZGVyVG9wOicycHggc29saWQgJytSRUQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVEfX0pLA0KICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6JzEzcHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMTZlbScsY29sb3I6JyNmZmZmZmYnfX0sJ0FEQ0YnKSk7DQoNCiAgICBjb25zdCBoZXJvTGVmdD1jb2wobT8nMTZweCc6JzIycHgnLFticmFuZCwNCiAgICAgIGVsKCdoMScse3N0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzM3cHgnOic2NnB4JyxsaW5lSGVpZ2h0OjAuOTgsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDMyZW0nLGNvbG9yOicjZmZmZmZmJyx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnU3VyIGNlIHJlbGV2w6kgZGUgNDIgYW5uw6llcywgMTMgc3VqZXRzIMOgIGZhaXJlIHbDqXJpZmllci4nKSwNCiAgICAgIHAoJ0xlcyBwb2ludHMgcm91Z2VzIHNvbnQgbGVzIGFubsOpZXMgb8O5IGxlIGNvbXB0ZSBuZSB0b21iZSBwYXMganVzdGUuJyx0cnVlKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2MnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNHB4JzonOHB4J319LHRoaXMuY3RhKG0sJ0FuYWx5c2VyIG1vbiBkb3NzaWVyJywnTGVjdHVyZSBncmF0dWl0ZSwgcsOpc3VsdGF0IGVuIHF1ZWxxdWVzIHNlY29uZGVzLiBMZSBiaWxhbiByZXRyYWl0ZSBjb21wbGV0XHUwMGEwOiAyNDkg4oKsIFRUQywgdW5lIHNldWxlIGZvaXMuJyx0cnVlLCdkaWFnJywnbWlsaWV1JykpXSk7DQoNCiAgICBjb25zdCBoZXJvUmlnaHQ9ZWwoJ2Rpdicse3N0eWxlOntmbGV4Om0/J25vbmUnOicxIDEgMCcsbWluV2lkdGg6MCxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMTBweCd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzE0cHgnfX0sDQogICAgICAgIHRoaXMuZXllYnJvdygnVm9zIHRyaW1lc3RyZXMsIGFubsOpZSBwYXIgYW5uw6llJywnI2FhYjJlZScsbT8xMToxMS41KSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsZm9udFdlaWdodDo2MDAsY29sb3I6JyNhYWIyZWUnLGZsZXhTaHJpbms6MH19LCczIGNyZXV4JykpLA0KICAgICAgdGhpcy5jdXJ2ZShtPzMzMDo2MDAsbT8xNjA6MjUwLHRydWUpLA0KICAgICAgY2FwdGlvbignTGVjdHVyZSBkXHUyMDE5dW4gcmVsZXbDqSBkZSBjYXJyacOocmUgYW5vbnltaXPDqSwgMTk4MiDDoCAyMDI1LiBMZSB0cmFjw6kgc3VpdCBsZXMgdHJpbWVzdHJlcyBhY3F1aXMsIGxlcyByZXDDqHJlcyByb3VnZXMgc2lnbmFsZW50IGxlcyBhbm7DqWVzIMOgIHbDqXJpZmllci4nLHRydWUpKTsNCg0KICAgIGNvbnN0IGhlcm89ZWwoJ2hlYWRlcicse3N0eWxlOntiYWNrZ3JvdW5kOk5BVlkscGFkZGluZ1RvcDptPyc2MnB4JzonMzRweCcscGFkZGluZ0JvdHRvbTptPyc0MHB4JzonNjJweCd9fSwNCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycyNnB4JzonNTZweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonY2VudGVyJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowfX0saGVyb0xlZnQpLGhlcm9SaWdodCkpKTsNCg0KICAgIGNvbnN0IGNoaXBzPWVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleFdyYXA6J3dyYXAnLGdhcDptPycxMHB4JzonMTJweCcsbWFyZ2luVG9wOic0cHgnfX0sDQogICAgICBDT05URU5VLm1hcCgoYyxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntwYWRkaW5nOm0/JzlweCAxM3B4JzonMTFweCAxNnB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyUmFkaXVzOic5OXB4Jyxmb250U2l6ZTptPycxMy41cHgnOicxNC41cHgnLGNvbG9yOk5BVll9fSwNCiAgICAgICAgZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjcwMH19LGNbMF0pLCcgJyxjWzFdKSkpOw0KDQogICAgY29uc3QgbGl2cmFibGU9c2VjdChQQVBFUixyb3coZmFsc2UsWw0KICAgICAgZWwoJ2Rpdicse2tleTonbCcsc3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowfX0sY29sKG0/JzE2cHgnOicyMHB4Jyxba2lja2VyKCdMZSBsaXZyYWJsZScpLA0KICAgICAgICBoMignVW4gZG9zc2llciDDoCBsYSB0YWlsbGUgZGUgdm90cmUgY2FycmnDqHJlJyksDQogICAgICAgIHAoJ0NoYXF1ZSBzdWpldCB0aWVudCBzdXIgdW5lIHBhZ2UsIGVuIGh1aXQgYmxvY3NcdTAwYTA6IGR1IGNvbnN0YXQgYXUgZ2VzdGUgw6AgZmFpcmUsIGp1c3F1XHUyMDE5YXUgdGV4dGUgZGUgbG9pIHF1aSBsXHUyMDE5YXBwdWllLiBMZSByZXN0ZSBkdSBkb3NzaWVyIHJlcHJlbmQgdm90cmUgY2FycmnDqHJlLCB1bmUgYW5uw6llIGFwcsOocyBsXHUyMDE5YXV0cmUuJyksDQogICAgICAgIGNoaXBzXSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA0NCUnLHdpZHRoOm0/JzEwMCUnOidhdXRvJ319LHRoaXMuZG9jU3RhY2sobSkpXSkse2JvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX0pOw0KDQogICAgY29uc3QgY291cnJpZXJzPXNlY3QobnVsbCxyb3codHJ1ZSxbDQogICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxjb2wobT8nMTZweCc6JzIwcHgnLFtraWNrZXIoJ0xlcyBjb3VycmllcnMnKSwNCiAgICAgICAgaDIoJ0TDqWrDoCByw6lkaWfDqXMuIFZvdXMgc2lnbmV6LCB2b3VzIHBvc3Rlei4nKSwNCiAgICAgICAgcCgnVHJvaXMgw6AgY2lucSBjb3VycmllcnMgc2Vsb24gbGVzIHN1amV0cyB0cm91dsOpc8KgOiBsYSBkZW1hbmRlIGRlIHLDqWd1bGFyaXNhdGlvbiwgbGVzIHBpw6hjZXMgw6AgcsOpY2xhbWVyLCBsYSByZWxhbmNlIHNpIGxhIGNhaXNzZSBuZSByw6lwb25kIHBhcy4gUmllbiDDoCBmb3JtdWxlciB2b3VzLW3Dqm1lLicpLA0KICAgICAgICBlbCgnZGl2Jyx7a2V5OiduJyxzdHlsZTp7cGFkZGluZzptPycxNHB4IDE2cHgnOicxOHB4IDIwcHgnLGJhY2tncm91bmQ6UlRJTlQsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrUkVELGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6TkFWWX19LCdMZSBjaGFtcCBkdSBudW3DqXJvIGRlIHPDqWN1cml0w6kgc29jaWFsZSByZXN0ZSB2aWRlIHN1ciBub3MgY291cnJpZXJzLiBJbCBmaWd1cmUgc3VyIHZvdHJlIHJlbGV2w6ksIGRvbmMgaWwgZXN0IGx1LCBtYWlzIGlsIG5cdTIwMTllc3QgamFtYWlzIGNvbnNlcnbDqcKgOiB2b3VzIGxcdTIwMTnDqWNyaXZleiDDoCBsYSBtYWluIGF2YW50IGRlIHBvc3Rlci4nKV0pKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3InLHN0eWxlOntmbGV4Om0/J25vbmUnOicwIDAgNDAlJyx3aWR0aDptPycxMDAlJzonYXV0byd9fSx0aGlzLmxldHRlckNhcmQobSkpXSkpOw0KDQogICAgY29uc3QgYm94PSh0aXRsZSx0ZXh0LGFjY2VudCk9PmVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycyMHB4JzonMjhweCcsYm9yZGVyOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKScsYm9yZGVyTGVmdDphY2NlbnQ/JzNweCBzb2xpZCAnK1JFRDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yMiknfX0sDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjJweCc6JzI3cHgnLGxpbmVIZWlnaHQ6MS4yLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOicjZmZmZmZmJyxtYXJnaW5Cb3R0b206JzlweCd9fSx0aXRsZSksDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjoncmdiYSgyNTUsMjU1LDI1NSwwLjcpJ319LHRleHQpKTsNCg0KICAgIGNvbnN0IHJlbGVjdHVyZT1lbCgnc2VjdGlvbicse3N0eWxlOntiYWNrZ3JvdW5kOk5BVlkscGFkZGluZzptPyc0NnB4IDAnOic3NnB4IDAnfX0sDQogICAgICBpbm5lcihjb2wobT8nMjBweCc6JzI2cHgnLFtraWNrZXIoJ0F2YW50IGxhIHJlbWlzZScsdHJ1ZSksDQogICAgICAgIGgyKCdBbmFseXPDqSwgcHVpcyByw6lkaWfDqSBwYXIgc29uIGF1dGV1cicsdHJ1ZSksDQogICAgICAgIHAoJ1VuIG1vdGV1ciBkw6lwb3VpbGxlIHZvdHJlIHJlbGV2w6kgZXQgcG9zZSBsZXMgcXVlc3Rpb25zIHV0aWxlcy4gRW5zdWl0ZSAnK3RoaXMuZm91bmRlcigpKycsIGZvbmRhdGV1ciBkXHUyMDE5QURDRiwgcmVwcmVuZCBsZSBkb3NzaWVyIGxpZ25lIMOgIGxpZ25lLCDDqWNhcnRlIGNlIHF1aSBuZSBzZSBkw6lmZW5kIHBhcyBkZXZhbnQgdW5lIGNhaXNzZSwgZXQgbGUgdmFsaWRlLicsdHJ1ZSksDQogICAgICAgIGVsKCdkaXYnLHtrZXk6J2cnLHN0eWxlOnttYXJnaW5Ub3A6bT8nNnB4JzonMTBweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMTZweCc6JzI4cHgnfX0sDQogICAgICAgICAgYm94KCdSw6lkaWfDqSBzb3VzICcrdGhpcy5kZWxhaSgpLCdKZSByw6lkaWdlIHZvdHJlIGJpbGFuIHJldHJhaXRlIHBlbmRhbnQgY2UgdGVtcHMtbMOgLiBDXHUyMDE5ZXN0IHByw6ljaXPDqW1lbnQgY2UgcXVlIHZvdXMgYWNoZXRlei4nLHRydWUpLA0KICAgICAgICAgIGJveCgnUHVpcyBpbCBlc3Qgw6Agdm91cycsJ1ZvdXMgcG91dmV6IGxlIHRyYW5zbWV0dHJlIMOgIHZvdHJlIGNhaXNzZSwgw6AgdW4gcHJvY2hlIG91IMOgIHVuIGNvbnNlaWwsIHNhbnMgbVx1MjAxOWVuIGluZm9ybWVyLicsZmFsc2UpKV0pKSk7DQoNCiAgICBjb25zdCBkb25uZWVzPXNlY3QoUEFQRVIsY29sKG0/JzE4cHgnOicyNnB4Jyxba2lja2VyKCdWb3MgZG9ubsOpZXMnKSwNCiAgICAgIGgyKCdDZSBxdWUgamUgbmUgdm91cyBkZW1hbmRlIGphbWFpcycpLA0KICAgICAgZWwoJ2Rpdicse2tleTonZycsc3R5bGU6e2Rpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzoncmVwZWF0KDMsMWZyKScsZ2FwOm0/JzE0cHgnOicyNnB4J319LA0KICAgICAgICBKQU1BSVMubWFwKChqLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzJweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzE4cHgnOicyMnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonOHB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuMzV9fSxqWzBdKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42Mixjb2xvcjpJTkt9fSxqWzFdKSkpKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3MnLHN0eWxlOnttYXJnaW5Ub3A6bT8nMTJweCc6JzIwcHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nVG9wOm0/JzIwcHgnOicyOHB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjVweCc6JzM0cHgnLGxpbmVIZWlnaHQ6MS4xLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyZW0nLGNvbG9yOk5BVll9fSwnRXQgdm90cmUgZG9zc2llciwgdW5lIGZvaXMgw6ljcml0JyksDQogICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPycxMHB4IDAgMCc6JzEycHggMCAwJyxmb250U2l6ZTptPycxNS41cHgnOicxNi41cHgnLGxpbmVIZWlnaHQ6MS42NSxjb2xvcjpJTkssbWF4V2lkdGg6JzYyY2gnfX0sJ1VuIGRvc3NpZXIgZFx1MjAxOWFuYWx5c2UgcG9ydGUgdm90cmUgbm9tLCB2b3Mgc2FsYWlyZXMgYW5uw6llIHBhciBhbm7DqWUsIGV0IGxlcyBww6lyaW9kZXMgZGUgbWFsYWRpZSwgZFx1MjAxOWFjY2lkZW50IGR1IHRyYXZhaWwsIGRlIG1hdGVybml0w6kgb3UgZFx1MjAxOWludmFsaWRpdMOpIGluc2NyaXRlcyDDoCB2b3RyZSByZWxldsOpLiBDZSBzb250IGRlcyBkb25uw6llcyBkZSBzYW50w6kuIElsIGVzdCB0cmFpdMOpIGNvbW1lIHRlbC4nKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMThweCc6JzI0cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzoncmVwZWF0KDMsMWZyKScsZ2FwOm0/JzE2cHgnOiczMHB4J319LA0KICAgICAgICAgIFtbJ1VuIGxpZW4gcGVyc29ubmVsLCBxdWkgZXhwaXJlJywnVm90cmUgZG9zc2llciBuXHUyMDE5ZXN0IHBhcyBlbnZvecOpIGVuIHBpw6hjZSBqb2ludGUgZFx1MjAxOXVuIGUtbWFpbCwgb8O5IGlsIHJlc3RlcmFpdCBkZXMgYW5uw6llcy4gVm91cyBsZSB0w6lsw6ljaGFyZ2V6IGRlcHVpcyB1biBsaWVuIHZhbGFibGUgcG91ciB2b3VzIHNldWwsIGV0IHF1aSBjZXNzZSBkZSBsXHUyMDE5w6p0cmUuJ10sDQogICAgICAgICAgIFsnSmFtYWlzIHZvdHJlIHJlbGV2w6kgcGFyIGUtbWFpbCcsJ0lsIHNcdTIwMTllbnZvaWUgcGFyIGxlIGZvcm11bGFpcmUgY2hpZmZyw6ksIGphbWFpcyBwYXIgbWVzc2FnZXJpZS4gRXQgaWwgbmUgdm91cyBzZXJhIGphbWFpcyByZWRlbWFuZMOpIHVuZSBzZWNvbmRlIGZvaXMuJ10sDQogICAgICAgICAgIFsnRMOpcG9zZXogbGUgcmVsZXbDqSB0ZWwgcXVlbCcsJ05lIG1vZGlmaWV6IHJpZW4gYXZhbnQgZGUgbGUgZMOpcG9zZXJcdTAwYTA6IGxlIG51bcOpcm8gZXN0IGx1IHVuZSBmb2lzLCBwb3VyIHJldHJvdXZlciB2b3RyZSBkYXRlIGRlIG5haXNzYW5jZSBldCB2b3RyZSDDomdlIGzDqWdhbCBkZSBkw6lwYXJ0LCBldCBpbCBuXHUyMDE5ZXN0IHBhcyBjb25zZXJ2w6kuJ11dDQogICAgICAgICAgICAubWFwKCh4LGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic4cHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxwYWRkaW5nVG9wOm0/JzEycHgnOicxNHB4J319LA0KICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOicxMXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicuMTZlbScsY29sb3I6UkVELGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LCcwJysoaSsxKSksDQogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuMyxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJ319LHhbMF0pLA0KICAgICAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNjUsY29sb3I6R1JFWX19LHhbMV0pKSkpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycyMHB4JzonMjhweCcscGFkZGluZzptPycyMHB4IDIwcHggMjJweCc6JzI2cHggMzJweCAyOHB4JyxiYWNrZ3JvdW5kOk5BVlksYm9yZGVyTGVmdDonNHB4IHNvbGlkICcrUkVELGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxMnB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEycHgnfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2ZmODA5NSd9fSwnw4AgcmV0ZW5pcicpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4OjEsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6J3JnYmEoMjU1LDI1NSwyNTUsMC4xOCknfX0pKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyM3B4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjonI2ZmZmZmZid9fSwnSmUgbmUgdm91cyBkZW1hbmRlcmFpIGphbWFpcyB2b3RyZSByZWxldsOpIHBhciBlLW1haWwgbmkgcGFyIHTDqWzDqXBob25lLiBTaSBxdWVscXVcdTIwMTl1biB2b3VzIGxlIHLDqWNsYW1lIGF1IG5vbSBkXHUyMDE5QURDRiwgY2Ugblx1MjAxOWVzdCBwYXMgbW9pLicpKSldKSk7DQoNCiAgICBjb25zdCBSRUdJTUVTPVsnUsOpZ2ltZSBnw6luw6lyYWwnLCdBZ2lyYy1BcnJjbycsJ01TQScsJ0lSQ0FOVEVDJywnQ0lQQVYnLCdtaWNyby1zb2NpYWwnLCdmb25jdGlvbiBwdWJsaXF1ZScsJ3LDqWdpbWVzIHNww6ljaWF1eCcsJ3Byb2Zlc3Npb25zIGxpYsOpcmFsZXMnLCdsZXMgcsOpZ2ltZXMgZGVzIGluZMOpcGVuZGFudHMnXTsNCiAgICBjb25zdCByZWdpbWVzPXNlY3QoUEFQRVIsY29sKG0/JzE2cHgnOicyMnB4JyxbDQogICAgICB0aGlzLmV5ZWJyb3coJ0xlcyByw6lnaW1lcycpLA0KICAgICAgaDIoJzIyIHLDqWdpbWVzIGRlIHJldHJhaXRlLCA5NSAlIGRlcyBzaXR1YXRpb25zJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidwJyxzdHlsZTp7bWFyZ2luVG9wOm0/JzJweCc6JzZweCcsZGlzcGxheTonZmxleCcsZmxleFdyYXA6J3dyYXAnLGdhcDptPyc3cHgnOic5cHgnfX0sDQogICAgICAgIFJFR0lNRVMubWFwKGZ1bmN0aW9uKHIsaTIpeyByZXR1cm4gZWwoJ3NwYW4nLHtrZXk6aTIsc3R5bGU6e2Rpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGhlaWdodDptPyczMnB4JzonMzZweCcscGFkZGluZzptPycwIDEycHgnOicwIDE1cHgnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250U2l6ZTptPycxM3B4JzonMTRweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSx3aGl0ZVNwYWNlOidub3dyYXAnfX0scik7IH0pKSwNCiAgICAgIHAoJ1ZvdHJlIHJlbGV2w6kgZGUgY2FycmnDqHJlIGxlcyByYXNzZW1ibGUgdG91cyBlbiB1biBzZXVsIGRvY3VtZW50LiBKZSBsZSBsaXMgZW4gZW50aWVyLCBldCBqXHUyMDE5YW5hbHlzZSBjaGFxdWUgYW5uw6llIGRhbnMgbGUgcsOpZ2ltZSBxdWkgbGEgcG9ydGUuJyksDQogICAgICBwKCdDXHUyMDE5ZXN0IGp1c3RlbWVudCBhdXggY2hhbmdlbWVudHMgZGUgc3RhdHV0IHF1ZSBsZXMgdHJpbWVzdHJlcyBzZSBwZXJkZW50XHUwMGEwOiBjZSBxdVx1MjAxOXVuIHLDqWdpbWUgY29tcHRlLCBsXHUyMDE5YXV0cmUgbFx1MjAxOWlnbm9yZSBwYXJmb2lzLiBVbmUgY2FycmnDqHJlIHF1aSBlc3QgcGFzc8OpZSBkdSBzYWxhcmlhdCDDoCBsXHUyMDE5aW5kw6lwZW5kYW50LCBvdSBkdSBwcml2w6kgYXUgcHVibGljLCBlc3QgY2VsbGUgb8O5IGlsIHkgYSBsZSBwbHVzIMOgIHbDqXJpZmllci4nKQ0KICAgIF0pLHtwYWRkaW5nOm0/JzM0cHggMCc6JzUwcHggMCd9KTsNCg0KICAgIGNvbnN0IGFuYWx5c2U9c2VjdChudWxsLGNvbChtPycxOHB4JzonMjZweCcsW2tpY2tlcignQ2UgcXVlIGxcdTIwMTlhbmFseXNlIHJlZ2FyZGUnKSwNCiAgICAgIGgyKCdMZXMgaHVpdCBlbmRyb2l0cyBvw7kgdW4gcmVsZXbDqSBwZXJkIGRlcyBhbm7DqWVzJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidnJyxzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMCc6JzAgNTJweCd9fSwNCiAgICAgICAgUkVHQVJERS5tYXAoKHIsaSk9PmVsKCdkaXYnLHtrZXk6aSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZ2FwOm0/JzExcHgnOicxNHB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxNXB4IDAnOicxOHB4IDAnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJ319LA0KICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDptPyc5cHgnOicxMXB4JyxoZWlnaHQ6bT8nOXB4JzonMTFweCcsYmFja2dyb3VuZDpSRUQsbWFyZ2luVG9wOm0/JzZweCc6JzdweCd9fSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1LjVweCc6JzE2LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuMzUsbWFyZ2luQm90dG9tOic0cHgnfX0sclswXSksDQogICAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46MCxmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sclsxXSkpKSkpLA0KICAgICAgZWwoJ2Rpdicse2tleToncHInLHN0eWxlOnttYXJnaW5Ub3A6bT8nMTJweCc6JzE4cHgnLHBhZGRpbmdUb3A6bT8nMjBweCc6JzI4cHgnLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxNHB4JzonMThweCd9fSwNCiAgICAgICAgZWwoJ2RpdicsbnVsbCwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjNweCc6JzMwcHgnLGxpbmVIZWlnaHQ6MS4wNSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjJlbScsY29sb3I6TkFWWX19LCdMYXF1ZWxsZSBkZSBjZXMgY2FycmnDqHJlcyByZXNzZW1ibGUgw6AgbGEgdsO0dHJlXHUwMGEwPycpLA0KICAgICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjptPyc4cHggMCAwJzonMTBweCAwIDAnLGZvbnRTaXplOm0/JzE1cHgnOicxNnB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZLG1heFdpZHRoOic1OGNoJ319LCdDaG9pc2lzc2V6IGxhIHNpdHVhdGlvbiBsYSBwbHVzIHByb2NoZS4gTGUgZMOpdGFpbCBkZSBjZSBxdWkgZXN0IGFuYWx5c8OpIGRhbnMgY2UgY2FzIHNcdTIwMTlhZmZpY2hlIGVuIGRlc3NvdXMuJykpLA0KICAgICAgICB0aGlzLnByb2ZpbHMobSkpLA0KICAgICAgdGhpcy5wb2ludENsZShtKV0pKTsNCg0KICAgIGNvbnN0IGV0YXBlcz1zZWN0KG51bGwsY29sKG0/JzE4cHgnOicyNnB4Jyxba2lja2VyKCdMZSBkw6lyb3Vsw6knKSwNCiAgICAgIGgyKCc0IMOpdGFwZXMsIHVuZSBkaXphaW5lIGRlIG1pbnV0ZXMgZGUgdm90cmUgY8O0dMOpJyksDQogICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LA0KICAgICAgICBFVEFQRVMubWFwKChzLGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE3cHggMCc6JzIycHggMCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPyczMHB4IDFmcic6JzUycHggMWZyIDEuMmZyJyxnYXA6bT8nMCAxMnB4JzonMCAyOHB4JyxhbGlnbkl0ZW1zOidzdGFydCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTlweCc6JzIzcHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVll9fSwnMCcrKGkrMSkpLA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTZweCc6JzE3LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuMzV9fSxzWzBdKSwNCiAgICAgICAgICBlbCgncCcse3N0eWxlOnttYXJnaW46bT8nNnB4IDAgMCc6MCxncmlkQ29sdW1uOm0/JzInOidhdXRvJyxmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0sc1sxXSkpKSldKSk7DQoNCiAgICBjb25zdCBjb21wcmlzTGlzdD1lbCgnZGl2Jyx7c3R5bGU6e2ZsZXg6bT8nbm9uZSc6JzAgMCA0NiUnLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nfX0sDQogICAgICBDT01QUklTLm1hcCgoYyxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxM3B4IDAnOicxNXB4IDAnLGRpc3BsYXk6J2ZsZXgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzE2cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJ319LA0KICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuNDV9fSxjWzBdKSwNCiAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsZm9udFdlaWdodDo2MDAsY29sb3I6Y1sxXT09PSdjb21wcmlzJz8nIzE1ODAzZCc6R1JFWSxmbGV4U2hyaW5rOjB9fSxjWzFdKSkpKTsNCg0KICAgIGNvbnN0IHByaXhMZWZ0PWVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjB9fSxjb2wobT8nMTZweCc6JzIwcHgnLFtraWNrZXIoJ0xlIHByaXgnKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J3AnLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm0/JzEycHgnOicxNnB4J319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nNTRweCc6Jzc2cHgnLGxpbmVIZWlnaHQ6MC45LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAzZW0nLGNvbG9yOk5BVll9fSx0aGlzLnByaWNlKCkpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ2VuIHVuZSBmb2lzLCcsZWwoJ2JyJyksJ3NhbnMgYWJvbm5lbWVudCcpKSwNCiAgICAgIGVsKCdkaXYnLHtrZXk6J2MnfSx0aGlzLmN0YShtLCdWb2lyIGNlIHF1ZSBwb3J0ZSBtb24gcmVsZXbDqScsJ1BhaWVtZW50IHPDqWN1cmlzw6kgcGFyIFN0cmlwZSwgcGFzIGRlIGNvbXB0ZSDDoCBjcsOpZXIuIFZvdXMgZW52b3lleiB2b3RyZSByZWxldsOpIGp1c3RlIGFwcsOocywgZGVwdWlzIGxhIHBhZ2UgZGUgY29uZmlybWF0aW9uLicsdW5kZWZpbmVkLG51bGwsJ21pbGlldScpKV0pKTsNCg0KICAgIGNvbnN0IG9iamVjdGlvbnNPZmZyZT1lbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycyMnB4JzonMzBweCcscGFkZGluZ1RvcDptPycxOHB4JzonMjRweCcsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDFmcicsZ2FwOm0/JzE2cHgnOicwIDQwcHgnfX0sDQogICAgICBbWydFdCBzaSB2b3VzIG5lIHRyb3V2ZXogcmllbiBjaGV6IG1vaVx1MDBhMD8nLCdVbmUgY2FycmnDqHJlIGNvbXBsw6h0ZSwgMTkyIHRyaW1lc3RyZXMgdmFsaWTDqXMgcG91ciAxNzAgcmVxdWlzLCBwcm9kdWl0IHF1YW5kIG3Dqm1lIGRlcyBzdWpldHMgZXQgZGVzIGNvdXJyaWVycy4gTGUgZG9zc2llciBwb3J0ZSBkZXMgZHJvaXRzIMOgIGRlbWFuZGVyLCBwYXMgc2V1bGVtZW50IGRlcyBlcnJldXJzIMOgIGNvcnJpZ2VyLiddLA0KICAgICAgIFsnUG91cnF1b2kgbmUgcGFzIGRlbWFuZGVyIMOnYSDDoCBtYSBjYWlzc2VcdTAwYTA/JywnTFx1MjAxOWVudHJldGllbiBpbmZvcm1hdGlvbiByZXRyYWl0ZSBlc3QgZ3JhdHVpdCBldCBpbCB2YXV0IGxhIHBlaW5lIGRcdTIwMTnDqnRyZSBkZW1hbmTDqS4gSWwgY29tbWVudGUgY2UgcXVlIHZvdHJlIGNhaXNzZSBhIGVucmVnaXN0csOpLiBJbCBuZSBjaGVyY2hlIHBhcyBjZSBxdWkgbWFucXVlLCBldCBpbCBuXHUyMDE5w6ljcml0IHBhcyBsZXMgY291cnJpZXJzLiddXQ0KICAgICAgICAubWFwKGZ1bmN0aW9uKHgsaTIpeyByZXR1cm4gZWwoJ2Rpdicse2tleTppMixzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCd9fSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS4zNSxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0seFswXSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0seFsxXSkpOyB9KSk7DQoNCiAgICBjb25zdCBwcml4PWVsKCdzZWN0aW9uJyx7J2RhdGEtb2ZmcmUnOicxJyxzdHlsZTp7cGFkZGluZzptPyc0NHB4IDAnOic3MnB4IDAnLGJhY2tncm91bmQ6UEFQRVIsYm9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORX19LGlubmVyKHJvdyhmYWxzZSxbcHJpeExlZnQsY29tcHJpc0xpc3RdKSkpOw0KDQogICAgY29uc3QgcXVlc3Rpb25zPXNlY3QobnVsbCxjb2wobT8nMThweCc6JzI0cHgnLFtraWNrZXIoJ1F1ZXN0aW9ucycpLA0KICAgICAgaDIoJ0NlIHF1ZSBsXHUyMDE5b24gbWUgZGVtYW5kZSBsZSBwbHVzJyksDQogICAgICB0aGlzLmZhcUxpc3QobSxmYWxzZSldKSk7DQoNCiAgICBjb25zdCBwaWVkPWVsKCdmb290ZXInLHtzdHlsZTp7YmFja2dyb3VuZDpOQVZZLHBhZGRpbmc6bT8nNDJweCAwIDQ2cHgnOic2MnB4IDAgNjZweCd9fSwNCiAgICAgIGlubmVyKGNvbChtPycyNnB4JzonMzJweCcsWw0KICAgICAgICBlbCgnZGl2Jyx7a2V5Oid0JyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDptPycxOHB4JzonNDhweCcsYWxpZ25JdGVtczptPydzdHJldGNoJzonZmxleC1lbmQnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LA0KICAgICAgICAgIGgyKCdWb3RyZSByZWxldsOpIGVzdCBwcsOqdC4gTGUgZG9zc2llciBzdWl0LicsdHJ1ZSksDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4U2hyaW5rOjB9fSx0aGlzLmN0YShtLCdWb2lyIGNlIHF1ZSBwb3J0ZSBtb24gcmVsZXbDqScsJ1VuZSBzZXVsZSBjaG9zZSDDoCBwcsOpcGFyZXLCoDogbGUgUERGIGRlIHZvdHJlIHJlbGV2w6kuJyx0cnVlLG51bGwsJ2ZpbmFsJykpKSwNCiAgICAgICAgZWwoJ2Rpdicse2tleToncicsc3R5bGU6e2hlaWdodDonMXB4JyxiYWNrZ3JvdW5kOidyZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJ319KSwNCiAgICAgICAgZWwoJ2Rpdicse2tleTonbCd9LHRoaXMubGVnYWxGb290KG0sdHJ1ZSkpXSkpKTsNCg0KICAgIGNvbnN0IHRvcEJhcj1tP251bGw6ZWwoJ2Rpdicse3N0eWxlOntwb3NpdGlvbjonc3RpY2t5Jyx0b3A6MCx6SW5kZXg6MjAsYmFja2dyb3VuZDonIzA4MGMyYycsYm9yZGVyQm90dG9tOicxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSd9fSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWF4V2lkdGg6JzEwNjBweCcsbWFyZ2luOicwIGF1dG8nLHBhZGRpbmc6JzAgNjBweCcsaGVpZ2h0Oic3MHB4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJyxnYXA6JzE2cHgnfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEwcHgnLG1pbldpZHRoOjAsZmxleFNocmluazowLG1hcmdpblJpZ2h0Om0/JzAnOicyOHB4J319LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7d2lkdGg6JzEycHgnLGhlaWdodDonMTJweCcsYm9yZGVyVG9wOicycHggc29saWQgJytSRUQsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELGZsZXhTaHJpbms6MH19KSwNCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTMuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLGNvbG9yOicjZmZmZmZmJ319LCdBRENGJyksDQogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTonMTUuNXB4Jyxjb2xvcjonI2FhYjJlZScscGFkZGluZ0xlZnQ6JzE4cHgnLG1hcmdpbkxlZnQ6JzZweCcsYm9yZGVyTGVmdDonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSd9fSwnQW5hbHlzZSBkdSByZWxldsOpIGRlIGNhcnJpw6hyZScpKSwNCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMjBweCcsZmxleFNocmluazowfX0sDQogICAgICAgICAgZWwoJ3NwYW4nLHsnZGF0YS1wcmljZSc6JzEnLHN0eWxlOntmb250U2l6ZTonMTRweCcsY29sb3I6JyNmZmZmZmYnLGZvbnRXZWlnaHQ6NjAwLHdoaXRlU3BhY2U6J25vd3JhcCcsb3BhY2l0eTowLHRyYW5zZm9ybTondHJhbnNsYXRlWSgtM3B4KScsdHJhbnNpdGlvbjonb3BhY2l0eSAuNDVzIGVhc2UsdHJhbnNmb3JtIC40NXMgZWFzZSd9fSx0aGlzLnByaWNlKCksZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFdlaWdodDo0MDAsY29sb3I6JyNhYWIyZWUnfX0sJ1x1MDBhMCBzb3VzICcrdGhpcy5kZWxhaSgpKSksDQogICAgICAgICAgZWwoJ2EnLHtocmVmOicjb2ZmcmUnLG9uQ2xpY2s6ZT0+dGhpcy50b09mZnJlKGUpLG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fSxzdHlsZTp7dHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSwgdHJhbnNmb3JtIC4xOHMgZWFzZScsdGV4dERlY29yYXRpb246J25vbmUnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTonMTVweCcsZm9udFdlaWdodDo2MDAsaGVpZ2h0Oic0NnB4JyxwYWRkaW5nOicwIDI0cHgnLHdoaXRlU3BhY2U6J25vd3JhcCcsYm94U2hhZG93OicwIDEwcHggMjRweCAtMTJweCByZ2JhKDI0NSwzNyw3MywwLjU1KSd9fSwnT2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUnKSkpKTsNCg0KICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6e21pbkhlaWdodDonMTAwJScsYmFja2dyb3VuZDonI2ZmZmZmZid9fSx0b3BCYXIsaGVybyxhbmFseXNlLGxpdnJhYmxlLGNvdXJyaWVycyxyZWxlY3R1cmUsZWwoJ2Rpdicse2tleTonbmF2LWRvbm5lZXMnLCdkYXRhLW5hdic6J2Rvbm5lZXMnfSxkb25uZWVzKSxldGFwZXMscHJpeCxlbCgnZGl2Jyx7a2V5OiduYXYtcXVlc3Rpb25zJywnZGF0YS1uYXYnOidxdWVzdGlvbnMnfSxxdWVzdGlvbnMpLHRoaXMubWlkQ3RhKG0sJ0lsIHZvdXMgcmVzdGUgdW5lIHF1ZXN0aW9uIHNhbnMgcsOpcG9uc2VcdTAwYTA/IMOJY3JpdmV6LW1vaS4gU2lub24sIHZvdHJlIGJpbGFuIHJldHJhaXRlIHBldXQgcGFydGlyIGF1am91cmRcdTIwMTlodWkuJyx7ZW1wOidiYW5kZV9mYXEnfSkscGllZCx0aGlzLnN0aWNreUJhcihtKSk7DQogIH0NCg0KICBzY3JvbGxlcihub2RlKXsNCiAgICB2YXIgc2MgPSBub2RlOw0KICAgIHdoaWxlIChzYyAmJiBzYyAhPT0gZG9jdW1lbnQuYm9keSkgew0KICAgICAgdmFyIG95ID0gZ2V0Q29tcHV0ZWRTdHlsZShzYykub3ZlcmZsb3dZOw0KICAgICAgaWYgKChveSA9PT0gJ2F1dG8nIHx8IG95ID09PSAnc2Nyb2xsJykgJiYgc2Muc2Nyb2xsSGVpZ2h0ID4gc2MuY2xpZW50SGVpZ2h0ICsgNCkgcmV0dXJuIHNjOw0KICAgICAgc2MgPSBzYy5wYXJlbnRFbGVtZW50Ow0KICAgIH0NCiAgICByZXR1cm4gbnVsbDsNCiAgfQ0KDQogIGdvVG8odGd0KXsNCiAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLXBhZ2UnKSB8fCBkb2N1bWVudDsNCiAgICB2YXIgc2VjcyA9IGhvc3QucXVlcnlTZWxlY3RvckFsbCgnc2VjdGlvbicpOw0KICAgIGZvciAodmFyIGk9MDtpPHNlY3MubGVuZ3RoO2krKyl7IHNlY3NbaV0uc3R5bGUub3BhY2l0eT0nMSc7IHNlY3NbaV0uc3R5bGUuYW5pbWF0aW9uPSdub25lJzsgc2Vjc1tpXS5kYXRhc2V0LnJ2PScxJzsgfQ0KICAgIHZhciBzYyA9IHRoaXMuc2Nyb2xsZXIodGd0KTsNCiAgICB2YXIgeSA9IHRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7DQogICAgaWYgKHNjKSBzYy5zY3JvbGxUbyh7IHRvcDogeSAtIHNjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHNjLnNjcm9sbFRvcCAtIDEyLCBiZWhhdmlvcjonYXV0bycgfSk7DQogICAgZWxzZSB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHkgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSAxMiwgYmVoYXZpb3I6J2F1dG8nIH0pOw0KICB9DQoNCiAganVtcFRvKGUsbmVlZGxlKXsNCiAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1wYWdlJykgfHwgZG9jdW1lbnQ7DQogICAgdmFyIHRndCA9IFtdLnNsaWNlLmNhbGwoaG9zdC5xdWVyeVNlbGVjdG9yQWxsKCdzZWN0aW9uJykpLmZpbHRlcihmdW5jdGlvbihzKXsgcmV0dXJuIChzLmlubmVyVGV4dHx8JycpLmluZGV4T2YobmVlZGxlKSA+IC0xOyB9KVswXTsNCiAgICBpZiAodGd0KSB0aGlzLmdvVG8odGd0KTsNCiAgfQ0KDQogIGxlY3R1cmUobSxwbGFjZSl7IHJldHVybiBwbGFjZT09PSdoZXJvJyA/IF9ILmNyZWF0ZUVsZW1lbnQoJ2Rpdicse2lkOidhZGNmLWxlY3R1cmUtaGVybycsc3R5bGU6e21pbkhlaWdodDptPyczMDBweCc6JzQzMHB4J319KSA6IF9ILmNyZWF0ZUVsZW1lbnQoJ2Rpdicse2lkOidhZGNmLWxlY3R1cmUnLHN0eWxlOnttaW5IZWlnaHQ6JzBweCd9fSk7IH0NCg0KICBwb3B1cFJlbGV2ZShtKXsNCiAgICBpZih0aGlzLnN0YXRlLnBvcHVwIT09KG0/J20nOidkJykpIHJldHVybiBudWxsOw0KICAgIGNvbnN0IGVsPV9ILmNyZWF0ZUVsZW1lbnQ7DQogICAgY29uc3QgTkFWWT0nIzBFMTM0RicsIFJFRD0nI0Y1MjU0OScsIEdSRVk9JyM2QzcxNzknLCBJTks9JyMxYzIyMzAnLCBMSU5FPScjZTVlN2ViJzsNCiAgICBjb25zdCBTRVJJRj0iJ05ld3NyZWFkZXInLCBHZW9yZ2lhLCBzZXJpZiI7DQogICAgY29uc3QgZmVybWVyPSgpPT50aGlzLnNldFN0YXRlKHtwb3B1cDpmYWxzZSxwb3B1cE1haWxPazpmYWxzZX0pOw0KICAgIGNvbnN0IEVUQVBFUz1bDQogICAgICBbJ0FsbGV6IHN1ciAnLCdpbmZvLXJldHJhaXRlLmZyJywnLCBvdSAnLCdsYXNzdXJhbmNlcmV0cmFpdGUuZnInLCcgc2kgdm91cyBhdmV6IHRvdWpvdXJzIMOpdMOpIHNhbGFyacOpJ10sDQogICAgICBbJ0Nvbm5lY3Rlei12b3VzIMOgIHZvdHJlIGVzcGFjZSBwZXJzb25uZWwsICcsJ0ZyYW5jZUNvbm5lY3QnLCcgZm9uY3Rpb25uZSwgYXZlYyB2b3MgaWRlbnRpZmlhbnRzIGRlcyBpbXDDtHRzIG91IGRlIGxc4oCZQXNzdXJhbmNlIG1hbGFkaWUnXSwNCiAgICAgIFsnT3V2cmV6ICcsJ8KrXMKgTW9uIHJlbGV2w6kgZGUgY2FycmnDqHJlXMKgwrsnLCcnLCcnLCcnXSwNCiAgICAgIFsnVMOpbMOpY2hhcmdleiBsZSBQREYsICcsJ3NhbnMgbGUgbW9kaWZpZXIgbmkgbGUgcmVub21tZXInLCcnLCcnLCcnXQ0KICAgIF07DQogICAgcmV0dXJuIGVsKCdkaXYnLHtvbkNsaWNrOmZlcm1lcixzdHlsZTp7cG9zaXRpb246J2ZpeGVkJyxpbnNldDowLHpJbmRleDo5MDAsYmFja2dyb3VuZDoncmdiYSgxNCwxOSw3OSwwLjU1KScsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczptPydmbGV4LWVuZCc6J2ZsZXgtc3RhcnQnLGp1c3RpZnlDb250ZW50OidjZW50ZXInLHBhZGRpbmc6bT8nMCc6JzMycHgnLG92ZXJmbG93WTonYXV0byd9fSwNCiAgICAgIGVsKCdkaXYnLHtvbkNsaWNrOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCksc3R5bGU6e2JveFNpemluZzonYm9yZGVyLWJveCcsbWFyZ2luOm0/JzAnOidhdXRvJyx3aWR0aDonMTAwJScsbWF4V2lkdGg6bT8nbm9uZSc6JzU2MHB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxib3hTaGFkb3c6JzAgNDBweCA5MHB4IC0zMHB4IHJnYmEoMTQsMTksNzksMC41NSknLHBhZGRpbmc6bT8nMjJweCAyMHB4IDI0cHgnOiczMHB4IDM0cHggMzJweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTRweCc6JzE2cHgnLG1heEhlaWdodDptPyc5MnZoJzonbm9uZScsb3ZlcmZsb3dZOm0/J2F1dG8nOid2aXNpYmxlJ319LA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGdhcDonMTZweCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sDQogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sDQogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjRweCc6JzI5cHgnLGxpbmVIZWlnaHQ6MS4xMixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdPw7kgdHJvdXZlciB2b3RyZSByZWxldsOpIGRlIGNhcnJpw6hyZScpLA0KICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzZweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdFbnZpcm9uIDUgbWludXRlcywgZ3JhdHVpdGVtZW50LCBzdXIgbGUgc2l0ZSBvZmZpY2llbC4nKSksDQogICAgICAgICAgZWwoJ2J1dHRvbicse29uQ2xpY2s6ZmVybWVyLCdhcmlhLWxhYmVsJzonRmVybWVyJyxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZWVmMmZiJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9TkFWWTt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNmZmZmZmYnO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1MSU5FO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxiYWNrZ3JvdW5kOicjZmZmZmZmJyxjdXJzb3I6J3BvaW50ZXInLGZsZXhTaHJpbms6MCx3aWR0aDonMzRweCcsaGVpZ2h0OiczNHB4JyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGNvbG9yOk5BVlksZm9udFNpemU6JzE3cHgnLGxpbmVIZWlnaHQ6MSxmb250RmFtaWx5Oidpbmhlcml0Jyx0cmFuc2l0aW9uOidiYWNrZ3JvdW5kIC4xOHMgZWFzZSwgYm9yZGVyLWNvbG9yIC4xOHMgZWFzZSd9fSwnXMOXJykpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nfX0sDQogICAgICAgICAgRVRBUEVTLm1hcCgoeCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTJweCc6JzE0cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxwYWRkaW5nOm0/JzExcHggMCc6JzEycHggMCcsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FfX0sDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjFweCcsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGNvbG9yOicjYzQxNzNhJyxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcycsbWluV2lkdGg6JzE2cHgnfX0sU3RyaW5nKGkrMSkpLA0KICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LA0KICAgICAgICAgICAgICB4WzBdLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbMV0pLHhbMl0seFszXT9lbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzNdKTpudWxsLHhbNF0pKSkpLA0KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sJ1JldmVuZXogZW5zdWl0ZSBpY2kgZXQgZMOpcG9zZXotbGUuJyksDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTRweCc6JzE2cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzEwcHgnfX0sDQogICAgICAgICAgdGhpcy5zdGF0ZS5wb3B1cE1haWxPaw0KICAgICAgICAgICAgPyBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic1cHgnfX0sDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0Nc4oCZZXN0IGVudm95w6kuJyksDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdWb3VzIHJlY2V2ZXogbGEgbWFyY2hlIMOgIHN1aXZyZSBkYW5zIHVuIGluc3RhbnQuIFJpZW4gZFzigJlhdXRyZSBuZSB2b3VzIHNlcmEgZW52b3nDqS4nKSkNCiAgICAgICAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LA0KICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdWb3VzIHByw6lmw6lyZXogbGUgZmFpcmUgcGx1cyB0YXJkXMKgPycpLA0KICAgICAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgdj1lLnRhcmdldC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO3RoaXMucHJldmVuaXIodj92LnZhbHVlOicnLCdwYXNfZGVfcmVsZXZlJyk7dGhpcy5zZXRTdGF0ZSh7cG9wdXBNYWlsT2s6dHJ1ZX0pO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6JzEwcHgnfX0sDQogICAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MCxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLHBhZGRpbmc6JzAgMTRweCcsYm9yZGVyOicxcHggc29saWQgI2M5Y2ZkYScsYmFja2dyb3VuZDonI2ZmZmZmZicsZm9udEZhbWlseTonaW5oZXJpdCcsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsY29sb3I6SU5LLG91dGxpbmU6J25vbmUnLGJveFNpemluZzonYm9yZGVyLWJveCd9fSksDQogICAgICAgICAgICAgICAgICBlbCgnYnV0dG9uJyx7dHlwZTonc3VibWl0Jyxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIwcHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxib3hTaGFkb3c6JzAgMTJweCAyNnB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnfX0sJ0Vudm95ZXotbW9pIGxhIG1hcmNoZSDDoCBzdWl2cmUnKSksDQogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1VuIHNldWwgbWVzc2FnZSwgYXZlYyBsZXMgw6l0YXBlcy4gUmllbiBkXOKAmWF1dHJlLicpKSkpKTsNCiAgfQ0KDQogIHNjcm9sbFRvRGlhZyhldil7DQogICAgLy8gbGEgbWFxdWV0dGUgcmVuZCBsZXMgcXVhdHJlIHZhcmlhbnRlcyBkYW5zIGxlIG3Dqm1lIGRvY3VtZW50IDoNCiAgICAvLyBvbiBwYXJ0IGR1IGJvdXRvbiBjbGlxdcOpIHBvdXIgcmVzdGVyIGRhbnMgbGEgYm9ubmUgY29sb25uZS4NCiAgICBjb25zdCBzcmM9ZXYmJmV2LmN1cnJlbnRUYXJnZXQ7DQogICAgaWYoc3JjKXsNCiAgICAgIGxldCBzPXNyYy5wYXJlbnRFbGVtZW50Ow0KICAgICAgd2hpbGUocyYmZ2V0Q29tcHV0ZWRTdHlsZShzKS5vdmVyZmxvd1khPT0nYXV0bycpIHM9cy5wYXJlbnRFbGVtZW50Ow0KICAgICAgdGhpcy5fc2M9c3x8bnVsbDsgdGhpcy5fc3JjPXNyYzsNCiAgICB9DQogICAgc2V0VGltZW91dCgoKT0+ew0KICAgICAgY29uc3QgcmFjaW5lPXRoaXMuX3NjfHxkb2N1bWVudDsNCiAgICAgIGNvbnN0IHRndD1yYWNpbmUucXVlcnlTZWxlY3RvcignW2RhdGEtZGlhZ10nKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZGlhZ10nKTsNCiAgICAgIGlmKCF0Z3QpIHJldHVybjsNCiAgICAgIGxldCBzYz10aGlzLl9zYzsNCiAgICAgIGlmKCFzYyl7IHNjPXRndC5wYXJlbnRFbGVtZW50OyB3aGlsZShzYyYmZ2V0Q29tcHV0ZWRTdHlsZShzYykub3ZlcmZsb3dZIT09J2F1dG8nKSBzYz1zYy5wYXJlbnRFbGVtZW50OyB9DQogICAgICBpZihzYyl7DQogICAgICAgIHNjLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlY3Rpb24nKS5mb3JFYWNoKHM9PntzLnN0eWxlLm9wYWNpdHk9JzEnO3Muc3R5bGUuYW5pbWF0aW9uPSdub25lJztzLmRhdGFzZXQucnY9JzEnO30pOw0KICAgICAgICBjb25zdCB0b3A9dGd0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1zYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Arc2Muc2Nyb2xsVG9wOw0KICAgICAgICBzYy5zY3JvbGxUbyh7dG9wOnRvcC0xNCxiZWhhdmlvcjonc21vb3RoJ30pOw0KICAgICAgfWVsc2V7DQogICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wOnRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ard2luZG93LnNjcm9sbFktMTQsYmVoYXZpb3I6J3Ntb290aCd9KTsNCiAgICAgIH0NCiAgICB9LDYwKTsNCiAgfQ0KDQogIHRvT2ZmcmUoZSl7DQogICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkY2YtcGFnZScpIHx8IGRvY3VtZW50Ow0KICAgIHZhciB0Z3QgPSBob3N0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW9mZnJlXScpOw0KICAgIGlmICh0Z3QpIHRoaXMuZ29Ubyh0Z3QpOw0KICB9DQoNCiAgc2V0U3RhdGUocGF0Y2gpew0KICAgIHZhciBuZXh0ID0gdHlwZW9mIHBhdGNoID09PSAnZnVuY3Rpb24nID8gcGF0Y2godGhpcy5zdGF0ZSkgOiBwYXRjaDsNCiAgICBmb3IgKHZhciBrIGluIG5leHQpIHRoaXMuc3RhdGVba10gPSBuZXh0W2tdOw0KICAgIHRoaXMucmVuZGVyKHRydWUpOw0KICB9DQoNCiAgcmVuZGVyKGtlZXBWaXNpYmxlKXsNCiAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLXBhZ2UnKTsNCiAgICB2YXIgeSA9IHdpbmRvdy5wYWdlWU9mZnNldDsNCiAgICBob3N0LnRleHRDb250ZW50ID0gJyc7DQogICAgaG9zdC5hcHBlbmRDaGlsZCh0aGlzLnBhZ2VBKHRoaXMubW9iaWxlKSk7DQogICAgaWYgKGtlZXBWaXNpYmxlKXsgdGhpcy5yZXZlYWxBbGwoKTsgd2luZG93LnNjcm9sbFRvKDAsIHkpOyB9DQogICAgZWxzZSB0aGlzLndpcmUoKTsNCiAgICB0aGlzLm9uU2Nyb2xsKCk7DQogIH0NCg0KICBtb3VudCgpew0KICAgIHZhciBfX3M9dGhpczsgc2V0VGltZW91dChmdW5jdGlvbigpeyB0cnl7X19zLndpcmVHQSgpO31jYXRjaChlKXt9IH0sIDApOw0KICAgIHZhciBzZWxmID0gdGhpczsNCiAgICB2YXIgbXEgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDogJyArIChCUkVBSy0xKSArICdweCknKTsNCiAgICB0aGlzLm1vYmlsZSA9IG1xLm1hdGNoZXM7DQogICAgdGhpcy5yZW5kZXIoZmFsc2UpOw0KICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uKCl7DQogICAgICBpZiAobXEubWF0Y2hlcyA9PT0gc2VsZi5tb2JpbGUpIHJldHVybjsNCiAgICAgIHNlbGYubW9iaWxlID0gbXEubWF0Y2hlczsNCiAgICAgIHNlbGYucmVuZGVyKGZhbHNlKTsNCiAgICB9Ow0KICAgIGlmIChtcS5hZGRFdmVudExpc3RlbmVyKSBtcS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7DQogICAgZWxzZSBtcS5hZGRMaXN0ZW5lcihvbkNoYW5nZSk7DQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKCl7DQogICAgICBpZiAoc2VsZi5fcmFmKSByZXR1cm47DQogICAgICBzZWxmLl9yYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXsgc2VsZi5fcmFmID0gMDsgc2VsZi5vblNjcm9sbCgpOyB9KTsNCiAgICB9LCB7IHBhc3NpdmU6dHJ1ZSB9KTsNCiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNlbGYub25TY3JvbGwoKTsgfSwgMzAwKTsNCiAgfQ0KDQogIG9uU2Nyb2xsKCl7DQogICAgdmFyIGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICB2YXIgbWF4ID0gZG9jLnNjcm9sbEhlaWdodCAtIHdpbmRvdy5pbm5lckhlaWdodDsNCiAgICB2YXIgcGN0ID0gbWF4ID4gMCA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCh3aW5kb3cucGFnZVlPZmZzZXQgLyBtYXggKiAxMDApKSA6IDA7DQogICAgdmFyIGJhcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYWRjZi1wYWdlIFtkYXRhLXByb2ddJyk7DQogICAgZm9yICh2YXIgaT0wO2k8YmFycy5sZW5ndGg7aSsrKSBiYXJzW2ldLnN0eWxlLndpZHRoID0gcGN0ICsgJyUnOw0KICAgIC8vIExlIHByaXggZXQgbGUgYm91dG9uIGRlIGxhIGJhcnJlIG4nYXBwYXJhaXNzZW50IHF1J3VuZSBmb2lzIGxlIG1vZHVsZSBzb3J0aSBkdSBjaGFtcCA6DQogICAgLy8gdGFudCBxdSdlbGxlIHZvaXQgbCdhY3Rpb24sIGxhIGJhcnJlIG5lIGRvaXQgcGFzIGx1aSBlbiBwcm9wb3NlciB1bmUgZGV1eGnDqG1lLg0KICAgIHZhciBtb2QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1sZWN0dXJlIFtkYXRhLWRpYWddLCAjYWRjZi1wYWdlIFtkYXRhLWRpYWddJyk7DQogICAgdmFyIG9uOw0KICAgIGlmIChtb2QpIHsgdmFyIHIgPSBtb2QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IG9uID0gci5ib3R0b20gPCA4OyB9DQogICAgZWxzZSB7IG9uID0gd2luZG93LnBhZ2VZT2Zmc2V0ID4gd2luZG93LmlubmVySGVpZ2h0ICogMS4xNTsgfQ0KICAgIHZhciBwcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNhZGNmLXBhZ2UgW2RhdGEtcHJpY2VdLCAjYWRjZi1wYWdlIFtkYXRhLWN0YS1oYXV0XScpOw0KICAgIGZvciAodmFyIGo9MDtqPHBzLmxlbmd0aDtqKyspew0KICAgICAgcHNbal0uc3R5bGUub3BhY2l0eSA9IG9uID8gJzEnIDogJzAnOw0KICAgICAgcHNbal0uc3R5bGUudHJhbnNmb3JtID0gb24gPyAnbm9uZScgOiAndHJhbnNsYXRlWSgtM3B4KSc7DQogICAgICBwc1tqXS5zdHlsZS5wb2ludGVyRXZlbnRzID0gb24gPyAnYXV0bycgOiAnbm9uZSc7DQogICAgICBpZiAocHNbal0uZ2V0QXR0cmlidXRlKCdkYXRhLXByaWNlJykgPT09ICdjb2xsYXBzZScpIHBzW2pdLnN0eWxlLm1heFdpZHRoID0gb24gPyAnMTEwcHgnIDogJzBweCc7DQogICAgfQ0KICAgIC8vIFByb2ZvbmRldXIgZGUgZMOpZmlsZW1lbnQgw6AgbGEgbGlnbmUgZGUgZmxvdHRhaXNvbiwgdW5lIHNldWxlIGZvaXMuDQogICAgaWYgKCF0aGlzLl9mb2xkU2VudCkgew0KICAgICAgdmFyIGZvbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1wYWdlIFtkYXRhLWZvbGRdJyk7DQogICAgICBpZiAoZm9sZCAmJiBmb2xkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNSkgew0KICAgICAgICB0aGlzLl9mb2xkU2VudCA9IHRydWU7DQogICAgICAgIHRyeSB7IHRyYWNrKCdmb2xkX3Bhc3NlJywge30pOyB9IGNhdGNoIChlKSB7fQ0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIHJldmVhbEFsbCgpew0KICAgIHZhciBzZWNzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2FkY2YtcGFnZSBzZWN0aW9uJyk7DQogICAgZm9yICh2YXIgaT0wO2k8c2Vjcy5sZW5ndGg7aSsrKXsgc2Vjc1tpXS5kYXRhc2V0LnJ2ID0gJzEnOyBzZWNzW2ldLnN0eWxlLm9wYWNpdHkgPSAnJzsgc2Vjc1tpXS5zdHlsZS5hbmltYXRpb24gPSAnJzsgfQ0KICB9DQoNCiAgd2lyZSgpew0KICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzKSByZXR1cm47DQogICAgdmFyIHNlY3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYWRjZi1wYWdlIHNlY3Rpb24nKTsNCiAgICBmb3IgKHZhciBpPTA7aTxzZWNzLmxlbmd0aDtpKyspew0KICAgICAgdmFyIHNlYyA9IHNlY3NbaV07DQogICAgICBpZiAoc2VjLmRhdGFzZXQucnYpIGNvbnRpbnVlOw0KICAgICAgc2VjLmRhdGFzZXQucnYgPSAnMSc7DQogICAgICBpZiAoc2VjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8IHdpbmRvdy5pbm5lckhlaWdodCkgY29udGludWU7DQogICAgICBzZWMuc3R5bGUub3BhY2l0eSA9ICcwJzsNCiAgICAgIChmdW5jdGlvbih0YXJnZXQpew0KICAgICAgICB2YXIgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcyl7DQogICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpew0KICAgICAgICAgICAgaWYgKCFlLmlzSW50ZXJzZWN0aW5nKSByZXR1cm47DQogICAgICAgICAgICBlLnRhcmdldC5zdHlsZS5hbmltYXRpb24gPSAncmV2ZWFsVXAgLjdzIGN1YmljLWJlemllciguMiwuNywuMywxKSBib3RoJzsNCiAgICAgICAgICAgIGlvLnVub2JzZXJ2ZShlLnRhcmdldCk7DQogICAgICAgICAgfSk7DQogICAgICAgIH0sIHsgcm9vdE1hcmdpbjonMHB4IDBweCAtMTIlIDBweCcsIHRocmVzaG9sZDowLjA0IH0pOw0KICAgICAgICBpby5vYnNlcnZlKHRhcmdldCk7DQogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsNCiAgICAgICAgICBpZiAodGFyZ2V0LnN0eWxlLm9wYWNpdHkgPT09ICcwJykgeyB0YXJnZXQuc3R5bGUub3BhY2l0eSA9ICcnOyB0YXJnZXQuc3R5bGUuYW5pbWF0aW9uID0gJyc7IGlvLnVub2JzZXJ2ZSh0YXJnZXQpOyB9DQogICAgICAgIH0sIDE2MDApOw0KICAgICAgfSkoc2VjKTsNCiAgICB9DQogIH0NCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICBQUsOJLUFOQUxZU0UsIGJhY2tib25lIGRlIGPDomJsYWdlICjDoCBpbnTDqWdyZXIgZGFucyBsYSBjbGFzc2UgUGFnZSkNCiAgIEVuZHBvaW50IDogUE9TVCBodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy9hcGVyY3UgKG11bHRpcGFydCwgMSBmaWNoaWVyKQ0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCnZhciBBUEVSQ1VfVVJMID0gJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdSc7DQp2YXIgUFJFVkVOSVJfVVJMID0gJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdS9wcmV2ZW5pcic7DQoNCi8qIC0tLSBHQTQgOiBlbnZvaSBkJ8OpdsOpbmVtZW50LCB0b2zDqXJhbnQgKGd0YWcgb3UgZGF0YUxheWVyKSAtLS0gKi8NCmZ1bmN0aW9uIHRyYWNrKG5hbWUsIHBhcmFtcykgew0KICB0cnkgew0KICAgIGlmICh0eXBlb2Ygd2luZG93Lmd0YWcgPT09ICdmdW5jdGlvbicpIHsgd2luZG93Lmd0YWcoJ2V2ZW50JywgbmFtZSwgcGFyYW1zIHx8IHt9KTsgcmV0dXJuOyB9DQogICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107DQogICAgd2luZG93LmRhdGFMYXllci5wdXNoKE9iamVjdC5hc3NpZ24oeyBldmVudDogbmFtZSB9LCBwYXJhbXMgfHwge30pKTsNCiAgfSBjYXRjaCAoZSkge30NCn0NCg0KLyogLS0tIGxlY3R1cmUgZGVzIGNvb2tpZXMgR0EgcG91ciBsJ2F0dHJpYnV0aW9uIFN0cmlwZSAtLS0gKi8NCmZ1bmN0aW9uIGNvb2tpZShuYW1lKSB7DQogIHZhciBtID0gZG9jdW1lbnQuY29va2llLm1hdGNoKCcoPzpefDsgKScgKyBuYW1lLnJlcGxhY2UoLyhbLiQ/Knx7fSgpXFtcXVxcXC9cK15dKS9nLCAnXFwkMScpICsgJz0oW147XSopJyk7DQogIHJldHVybiBtID8gZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pIDogJyc7DQp9DQpmdW5jdGlvbiBnYUNsaWVudElkKCkgeyAgICAgICAgICAgICAgICAgICAgICAgLy8gX2dhID0gR0ExLjEuPHAxPi48cDI+IC0+IGNsaWVudF9pZCA9IHAxLnAyDQogIHZhciB2ID0gY29va2llKCdfZ2EnKTsgaWYgKCF2KSByZXR1cm4gJyc7DQogIHZhciBwID0gdi5zcGxpdCgnLicpOyByZXR1cm4gcC5sZW5ndGggPj0gNCA/IHBbcC5sZW5ndGggLSAyXSArICcuJyArIHBbcC5sZW5ndGggLSAxXSA6ICcnOw0KfQ0KZnVuY3Rpb24gZ2FTZXNzaW9uSWQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAvLyBfZ2FfPGZsdXg+ID0gR1MxLjEuPHNlc3Npb25faWQ+LjwuLi4+DQogIHZhciBtID0gZG9jdW1lbnQuY29va2llLm1hdGNoKC8oPzpefDtccyopX2dhX1tBLVowLTldKz0oW147XSspLyk7DQogIGlmICghbSkgcmV0dXJuICcnOw0KICB2YXIgcCA9IGRlY29kZVVSSUNvbXBvbmVudChtWzFdKS5zcGxpdCgnLicpOyByZXR1cm4gcC5sZW5ndGggPj0gMyA/IHBbMl0gOiAnJzsNCn0NCg0KLyogLS0tIFVSTCBkJ2FjaGF0IDogamV0b24gKyBhdHRyaWJ1dGlvbiBHQSArIHZpYSAtLS0gKi8NCi8qIExlIGJhY2sgcmVsZWN0dXJlIGxpdCBjaWQsIHNpZCwgZ2NsaWQsIGdicmFpZCwgd2JyYWlkICh2b2lyIG1lc3VyZS5qcywgQ0hBTVBTKS4gTCdhcGVyY3Ugdm95YWdlIMOgIHBhcnQuICovDQp0cnkgeyB2YXIgX3UgPSBuZXcgVVJMKGxvY2F0aW9uLmhyZWYpOyBbJ2djbGlkJywnZ2JyYWlkJywnd2JyYWlkJ10uZm9yRWFjaChmdW5jdGlvbiAoaykgeyB2YXIgdiA9IF91LnNlYXJjaFBhcmFtcy5nZXQoayk7IGlmICh2KSBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGssIHYpOyB9KTsgfSBjYXRjaCAoZSkge30KZnVuY3Rpb24gZ2FDbGljKCkgeyB2YXIgbyA9IHt9OyB0cnkgeyBbJ2djbGlkJywnZ2JyYWlkJywnd2JyYWlkJ10uZm9yRWFjaChmdW5jdGlvbiAoaykgeyB2YXIgdiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oayk7IGlmICh2KSBvW2tdID0gdjsgfSk7IH0gY2F0Y2ggKGUpIHt9IHJldHVybiBvOyB9ClBhZ2UucHJvdG90eXBlLmJ1eUhyZWYgPSBmdW5jdGlvbiAodmlhKSB7DQogIHZhciB1ID0gU1RSSVBFIHx8ICcjJzsNCiAgaWYgKHUgPT09ICcjJykgcmV0dXJuIHU7DQogIHZhciBqID0gdGhpcy5zdGF0ZS5qZXRvbiwgY2lkID0gZ2FDbGllbnRJZCgpLCBzaWQgPSBnYVNlc3Npb25JZCgpOw0KICB2YXIgc2VwID0gdS5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JzsNCiAgdmFyIGV4dHJhID0gW107DQogIGlmIChqKSBleHRyYS5wdXNoKCdhcGVyY3U9JyArIGVuY29kZVVSSUNvbXBvbmVudChqKSk7DQogIGlmIChjaWQpIGV4dHJhLnB1c2goJ2NpZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGNpZCkpOw0KICBpZiAoc2lkKSBleHRyYS5wdXNoKCdzaWQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChzaWQpKTsKICB2YXIgX2NsaWMgPSBnYUNsaWMoKTsgZm9yICh2YXIgX2sgaW4gX2NsaWMpIGV4dHJhLnB1c2goX2sgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoX2NsaWNbX2tdKSk7DQogIGV4dHJhLnB1c2goJ3ZpYT0nICsgKHZpYSB8fCAoaiA/ICdwcmVhbmFseXNlJyA6ICdkaXJlY3QnKSkpOw0KICByZXR1cm4gdSArIHNlcCArIGV4dHJhLmpvaW4oJyYnKTsNCn07DQoNCi8qIC0tLSBjbGljIGQnYWNoYXQgOiDDqXbDqG5lbWVudHMgcHVpcyBuYXZpZ2F0aW9uIHZlcnMgcmVsZWN0dXJlIC0tLSAqLw0KUGFnZS5wcm90b3R5cGUuZ29CdXkgPSBmdW5jdGlvbiAoZW1wbGFjZW1lbnQsIGUpIHsNCiAgaWYgKGUgJiYgZS5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICB2YXIgdmlhID0gdGhpcy5zdGF0ZS5qZXRvbiA/ICdwcmVhbmFseXNlJyA6ICdkaXJlY3QnOw0KICB0cmFjaygnY3RhX2NsaWNrJywgeyBkZXN0OiAnc3RyaXBlJywgZW1wbGFjZW1lbnQ6IGVtcGxhY2VtZW50IH0pOw0KICB0cmFjaygnY2hlY2tvdXRfb3BlbicsIHsgdmlhOiB2aWEgfSk7DQogIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5idXlIcmVmKHZpYSk7DQp9Ow0KDQovKiAtLS0gZW52b2kgcsOpZWwgZHUgcmVsZXbDqSAtLS0gKi8NClBhZ2UucHJvdG90eXBlLmxpcmVSZWxldmUgPSBmdW5jdGlvbiAoZmlsZSkgew0KICBpZiAoIWZpbGUpIHJldHVybjsNCiAgdmFyIHNlbGYgPSB0aGlzOw0KICBpZiAoZmlsZS5zaXplID4gMTIgKiAxMDI0ICogMTAyNCkgeyB0aGlzLnNldFN0YXRlKHsgZGlhZzogJ2VjaGVjJywgZWNoZWNNc2c6ICd0cm9wX2dyb3MnIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lY2hlYycsIHsgbW90aWY6ICdtYXV2YWlzX2ZpY2hpZXInIH0pOyByZXR1cm47IH0NCiAgdHJhY2soJ3ByZWFuYWx5c2Vfc3RhcnQnLCB7fSk7DQogIHRoaXMuc2V0U3RhdGUoeyBkaWFnOiAnbGVjdHVyZScgfSk7DQogIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOyBmZC5hcHBlbmQoJ2ZpY2hpZXInLCBmaWxlKTsNCiAgdHJhY2soJ3ByZWFuYWx5c2VfdXBsb2FkJywge30pOw0KICBmZXRjaChBUEVSQ1VfVVJMLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmZCB9KQ0KICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLmpzb24oKS50aGVuKGZ1bmN0aW9uIChkKSB7IHJldHVybiB7IHN0YXR1czogci5zdGF0dXMsIGRhdGE6IGQgfTsgfSk7IH0pDQogICAgLnRoZW4oZnVuY3Rpb24gKHJlcykgew0KICAgICAgdmFyIGQgPSByZXMuZGF0YSB8fCB7fTsNCiAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MTMpIHsgc2VsZi5zZXRTdGF0ZSh7IGRpYWc6ICdlY2hlYycsIGVjaGVjTXNnOiAndHJvcF9ncm9zJyB9KTsgdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLCB7IG1vdGlmOiAnbWF1dmFpc19maWNoaWVyJyB9KTsgcmV0dXJuOyB9DQogICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDI5KSB7IHNlbGYuc2V0U3RhdGUoeyBkaWFnOiAnZWNoZWMnLCBlY2hlY01zZzogJ3Ryb3BfZGVfZGVtYW5kZXMnIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lY2hlYycsIHsgbW90aWY6ICdsZWN0dXJlX25vbl9maWFibGUnIH0pOyByZXR1cm47IH0NCiAgICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDApIHsgc2VsZi5zZXRTdGF0ZSh7IGRpYWc6ICdlY2hlYycsIGVjaGVjTXNnOiAnc2Fuc19maWNoaWVyJyB9KTsgdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLCB7IG1vdGlmOiAnbWF1dmFpc19maWNoaWVyJyB9KTsgcmV0dXJuOyB9DQogICAgICBpZiAocmVzLnN0YXR1cyA+PSA1MDApIHsgc2VsZi5zZXRTdGF0ZSh7IGRpYWc6ICdlY2hlYycsIGVjaGVjTXNnOiAncGFubmUnIH0pOyB0cmFjaygncHJlYW5hbHlzZV9lY2hlYycsIHsgbW90aWY6ICdsZWN0dXJlX25vbl9maWFibGUnIH0pOyByZXR1cm47IH0NCiAgICAgIGlmIChkLmV0YXQgPT09ICdpbGxpc2libGUnKSB7IHNlbGYuc2V0U3RhdGUoeyBkaWFnOiAnaWxsaXNpYmxlJywgamV0b246IGQuamV0b24gfHwgJycgfSk7IHRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJywgeyBtb3RpZjogJ2xlY3R1cmVfbm9uX2ZpYWJsZScgfSk7IHJldHVybjsgfQ0KICAgICAgaWYgKGQuZXRhdCA9PT0gJ29rJykgew0KICAgICAgICBzZWxmLnNldFN0YXRlKHsgZGlhZzogJ3Jlc3VsdGF0JywgYXBlcmN1OiBkLCBqZXRvbjogZC5qZXRvbiB8fCAnJyB9KTsNCiAgICAgICAgdmFyIGNoID0gKGQuY2hpZmZyZXMgfHwge30pOw0KICAgICAgICB0cmFjaygncHJlYW5hbHlzZV9yZXN1bHQnLCB7IHN1amV0czogKGQuc3VqZXRzICYmIGQuc3VqZXRzLnRvdGFsKSB8fCAwLCB0cmltZXN0cmVzOiBjaC50cmltZXN0cmVzX3JlY3VwZXJhYmxlcyB8fCAwIH0pOw0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICBzZWxmLnNldFN0YXRlKHsgZGlhZzogJ2VjaGVjJywgZWNoZWNNc2c6ICdwYW5uZScgfSk7IHRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJywgeyBtb3RpZjogJ2xlY3R1cmVfbm9uX2ZpYWJsZScgfSk7DQogICAgfSkNCiAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBzZWxmLnNldFN0YXRlKHsgZGlhZzogJ2VjaGVjJywgZWNoZWNNc2c6ICdwYW5uZScgfSk7IHRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJywgeyBtb3RpZjogJ2xlY3R1cmVfbm9uX2ZpYWJsZScgfSk7IH0pOw0KfTsNCg0KLyogLS0tIGNhcHR1cmUgZW1haWwgcXVhbmQgaWxsaXNpYmxlIC0tLSAqLw0KUGFnZS5wcm90b3R5cGUucHJldmVuaXIgPSBmdW5jdGlvbiAoZW1haWwsIG1vdGlmKSB7DQogIGlmICghZW1haWwgfHwgZW1haWwuaW5kZXhPZignQCcpIDwgMCkgcmV0dXJuOw0KICB2YXIgc2VsZiA9IHRoaXM7DQogIHZhciBib2R5ID0gJ2pldG9uPScgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdGF0ZS5qZXRvbiB8fCAnJykgKyAnJmNvdXJyaWVsPScgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJyZtb3RpZj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG1vdGlmIHx8ICdmb3JtYXRfaW5jb25udScpOw0KICBmZXRjaChQUkVWRU5JUl9VUkwsIHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sIGJvZHk6IGJvZHkgfSkNCiAgICAudGhlbihmdW5jdGlvbiAoKSB7IHNlbGYuc2V0U3RhdGUoeyBtYWlsT2s6IHRydWUgfSk7IHRyYWNrKCdwcmVhbmFseXNlX2VtYWlsJywge30pOyB9KQ0KICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IHNlbGYuc2V0U3RhdGUoeyBtYWlsT2s6IHRydWUgfSk7IH0pOw0KfTsNCg0KUGFnZS5wcm90b3R5cGUud2lyZUdBID0gZnVuY3Rpb24oKXsNCiAgdmFyIHNlbGY9dGhpcywgaG9zdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1wYWdlJyk7IGlmKCFob3N0KSByZXR1cm47DQogIGlmKCFzZWxmLl9fbHApeyBzZWxmLl9fbHA9MTsgdHJhY2soJ2xwX3ZpZXcnLHt9KTsgfQ0KICB0cnl7DQogICAgdmFyIFNFQ1Q9W1snQW5hbHlzZSBkdSByZWxldsOpIGRlIGNhcnJpw6hyZScsJ2hlcm8nXSxbJ0NlIHF1ZSBs4oCZYW5hbHlzZSByZWdhcmRlJywnaHVpdF9lbmRyb2l0cyddLFsnTGUgcG9pbnQgcXVpIGNoYW5nZSB0b3V0JywnZW5nYWdlbWVudCddLFsnUXVpIHLDqWRpZ2Ugdm90cmUgYmlsYW4nLCdiaW8nXSxbJ0xlIGxpdnJhYmxlJywnbGl2cmFibGUnXSxbJ1N1ciB2b3RyZSByZWxldsOpJywnYXBlcmN1J10sWydWb3MgZG9ubsOpZXMnLCdkb25uZWVzJ10sWyfDgCBxdWkgY2VsYSBz4oCZYWRyZXNzZScsJ2FfcXVpJ10sWydDZSBxdWUgY2UgdHJhdmFpbCBjb8O7dGUgYWlsbGV1cnMnLCdjb21wYXJhdGlmX3ByaXgnXSxbJ0xlIGTDqXJvdWzDqScsJ2Rlcm91bGUnXSxbJ0zigJlhbmFseXNlIEFEQ0YnLCdvZmZyZSddLFsnUXVlc3Rpb25zJywnZmFxJ11dOw0KICAgIHZhciBhbGw9aG9zdC5xdWVyeVNlbGVjdG9yQWxsKCcqJyksIHRhcmdldHM9W107DQogICAgU0VDVC5mb3JFYWNoKGZ1bmN0aW9uKHApeyBmb3IodmFyIGk9MDtpPGFsbC5sZW5ndGg7aSsrKXsgaWYoKGFsbFtpXS50ZXh0Q29udGVudHx8JycpLnJlcGxhY2UoL1xzKy9nLCcgJykudHJpbSgpPT09cFswXSl7IGFsbFtpXS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2VjdCcscFsxXSk7IHRhcmdldHMucHVzaChhbGxbaV0pOyBicmVhazsgfSB9IH0pOw0KICAgIHZhciBpbz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZXMpe2VzLmZvckVhY2goZnVuY3Rpb24oZW4peyBpZihlbi5pc0ludGVyc2VjdGluZyl7IHZhciBuPWVuLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2VjdCcpOyBpZihuJiYhc2VsZlsnX19zdl8nK25dKXsgc2VsZlsnX19zdl8nK25dPTE7IHRyYWNrKCdzZWN0aW9uX3ZpZXcnLHtzZWN0aW9uOm59KTsgaW8udW5vYnNlcnZlKGVuLnRhcmdldCk7fSB9IH0pO30se3RocmVzaG9sZDoxfSk7DQogICAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lvLm9ic2VydmUodCk7fSk7DQogIH1jYXRjaChlKXt9DQogIGlmKHNlbGYuX19jbGlja1dpcmVkKSByZXR1cm47IHNlbGYuX19jbGlja1dpcmVkPTE7DQogIGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpew0KICAgIHZhciBhPWUudGFyZ2V0LmNsb3Nlc3Q/ZS50YXJnZXQuY2xvc2VzdCgnYSxidXR0b24nKTpudWxsOyBpZighYSlyZXR1cm47DQogICAgdmFyIGhyZWY9KGEuZ2V0QXR0cmlidXRlJiZhLmdldEF0dHJpYnV0ZSgnaHJlZicpKXx8Jyc7DQogICAgdmFyIGVtcD0nbWlsaWV1JzsNCiAgICBpZihhLmNsb3Nlc3QoJ1tkYXRhLWRpYWddJykpZW1wPSdyZXN1bHRhdCc7IGVsc2UgaWYoYS5jbG9zZXN0KCdbZGF0YS1vZmZyZV0nKSllbXA9J29mZnJlJzsgZWxzZSBpZihhLmNsb3Nlc3QoJ2hlYWRlcicpKWVtcD0naGVybyc7IGVsc2V7dmFyIHA9YSxjczt3aGlsZShwJiZwIT09aG9zdCl7dHJ5e2NzPWdldENvbXB1dGVkU3R5bGUocCk7fWNhdGNoKF8pe2NzPW51bGw7fWlmKGNzJiYoY3MucG9zaXRpb249PT0nc3RpY2t5J3x8Y3MucG9zaXRpb249PT0nZml4ZWQnKSl7ZW1wPSdzdGlja3knO2JyZWFrO31wPXAucGFyZW50RWxlbWVudDt9fQ0KICAgIGlmKGhyZWYuaW5kZXhPZigncmVsZWN0dXJlLmFkY2Yub3JnJyk+LTEpeyBlLnByZXZlbnREZWZhdWx0KCk7IHZhciB2aWE9c2VsZi5zdGF0ZS5qZXRvbj8ncHJlYW5hbHlzZSc6J2RpcmVjdCc7IHRyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidzdHJpcGUnLGVtcGxhY2VtZW50OmVtcH0pOyB0cmFjaygnY2hlY2tvdXRfb3Blbicse3ZpYTp2aWF9KTsgd2luZG93LmxvY2F0aW9uLmhyZWY9c2VsZi5idXlIcmVmKHZpYSk7IHJldHVybjsgfQ0KICAgIGlmKGhyZWY9PT0nI29mZnJlJyl7IHRyYWNrKCdjdGFfY2xpY2snLHtkZXN0OidvZmZyZScsZW1wbGFjZW1lbnQ6ZW1wfSk7IH0NCiAgfSwgdHJ1ZSk7DQp9Ow0KDQp2YXIgYWRjZiA9IG5ldyBQYWdlKCk7DQphZGNmLnByb3BzID0ge307DQphZGNmLm1vYmlsZSA9IGZhbHNlOw0KDQpmdW5jdGlvbiBib290KCl7DQogIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkY2YtcGFnZScpKSB7DQogICAgY29uc29sZS53YXJuKCdbQURDRl0gTGUgY29udGVuZXVyIDxkaXYgaWQ9ImFkY2YtcGFnZSI+PC9kaXY+IGVzdCBhYnNlbnQgOiBsZSB3aWRnZXQgSFRNTCBkb2l0IGNvbnRlbmlyIGxlIGJsb2MgZW50aWVyLicpOw0KICAgIHJldHVybjsNCiAgfQ0KICB0cnkgeyBhZGNmLm1vdW50KCk7IH0NCiAgY2F0Y2ggKGVycikgeyBjb25zb2xlLmVycm9yKCdbQURDRl0gZXJyZXVyIGF1IG1vbnRhZ2UnLCBlcnIpOyB9DQp9DQppZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgYm9vdCk7DQplbHNlIGJvb3QoKTsNCg0KfSkoKTsNCg0K
CihmdW5jdGlvbigpewoidXNlIHN0cmljdCI7CmlmICh3aW5kb3cuX19BRENGX0xFQ1RVUkVfXykgcmV0dXJuOwogd2luZG93Ll9fQURDRl9MRUNUVVJFX18gPSB0cnVlOwogd2luZG93Ll9fQURDRl9CVUlMRCA9ICdtZXJnZS1kZXNpZ24tdjItMjAyNi0wOS0wOCc7CgovKl9fZ2FfbGFuZGluZ19jYXB0dXJlKi90cnl7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHY9bmV3IFVSTChsb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KGMpO2lmKHYpc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjLHYpO30pO31jYXRjaChlKXt9CgpmdW5jdGlvbiBtdHJhY2sobmFtZSxwYXJhbXMpeyB0cnl7IGlmKHR5cGVvZiB3aW5kb3cuZ3RhZz09PSdmdW5jdGlvbicpe3dpbmRvdy5ndGFnKCdldmVudCcsbmFtZSxwYXJhbXN8fHt9KTtyZXR1cm47fSB3aW5kb3cuZGF0YUxheWVyPXdpbmRvdy5kYXRhTGF5ZXJ8fFtdOyB3aW5kb3cuZGF0YUxheWVyLnB1c2goT2JqZWN0LmFzc2lnbih7ZXZlbnQ6bmFtZX0scGFyYW1zfHx7fSkpOyB9Y2F0Y2goZSl7fSB9Cgp2YXIgU1RSSVBFID0gKHdpbmRvdy5fX0FEQ0ZfU1RSSVBFX18gfHwgJyMnKTsKdmFyIFBIT1RPICA9ICdodHRwczovL3d3dy5hZGNmLm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wMy9waG90by1sZW9uYXJkLWRlaS5qcGcnOwoKdmFyIEJSRUFLID0gMTAyNDsKdmFyIFVOSVRMRVNTID0ge29wYWNpdHk6MSx6SW5kZXg6MSxmb250V2VpZ2h0OjEsbGluZUhlaWdodDoxLGZsZXg6MSxmbGV4R3JvdzoxLGZsZXhTaHJpbms6MSxvcmRlcjoxLHN0cm9rZVdpZHRoOjEsZmlsbE9wYWNpdHk6MSxzdHJva2VPcGFjaXR5OjEscGF0aExlbmd0aDoxfTsKdmFyIFNWR1RBR1MgPSB7c3ZnOjEscGF0aDoxLGxpbmU6MSxjaXJjbGU6MSxyZWN0OjEsdGV4dDoxLGc6MSxkZWZzOjEscG9seWxpbmU6MSxwb2x5Z29uOjEsZWxsaXBzZToxLHRzcGFuOjF9Owp2YXIgU1ZHQ0FNRUwgPSB7dmlld0JveDoxLHByZXNlcnZlQXNwZWN0UmF0aW86MSxwYXR0ZXJuVW5pdHM6MSxncmFkaWVudFVuaXRzOjEsZ3JhZGllbnRUcmFuc2Zvcm06MSxjbGlwUGF0aDoxLG1hcmtlcldpZHRoOjEsbWFya2VySGVpZ2h0OjEscmVmWDoxLHJlZlk6MSx0ZXh0QW5jaG9yOjAsYmFzZVByb2ZpbGU6MX07CnZhciBrZWJhYiA9IGZ1bmN0aW9uKGspeyByZXR1cm4gay5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihjKXsgcmV0dXJuICctJytjLnRvTG93ZXJDYXNlKCk7IH0pOyB9OwoKZnVuY3Rpb24gYXBwbHlTdHlsZShub2RlLCBzdCl7CiAgZm9yICh2YXIgayBpbiBzdCl7CiAgICB2YXIgdiA9IHN0W2tdOwogICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IGZhbHNlKSBjb250aW51ZTsKICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgIVVOSVRMRVNTW2tdKSB2ID0gdiArICdweCc7CiAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KGtlYmFiKGspLCBTdHJpbmcodikpOwogIH0KfQoKZnVuY3Rpb24gYXBwZW5kKG5vZGUsIGMpewogIGlmIChjID09PSBudWxsIHx8IGMgPT09IHVuZGVmaW5lZCB8fCBjID09PSBmYWxzZSB8fCBjID09PSB0cnVlKSByZXR1cm47CiAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHsgZm9yICh2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKSBhcHBlbmQobm9kZSwgY1tpXSk7IHJldHVybjsgfQogIGlmIChjIGluc3RhbmNlb2YgTm9kZSkgewogICAgLy8gTGUgcHJvdG90eXBlIHLDqXV0aWxpc2UgdW4gbcOqbWUgw6lsw6ltZW50ICh1bmUgY29jaGUsIHVuIGZpbGV0KSBzdXIgcGx1c2lldXJzCiAgICAvLyBsaWduZXMuIFJlYWN0IGxlIHJlZGVzc2luZSDDoCBjaGFxdWUgZm9pcyA7IHVuIG5vZXVkIERPTSwgbHVpLCBzZSBkw6lwbGFjZS4KICAgIC8vIE9uIGxlIGR1cGxpcXVlIGRvbmMgZMOocyBxdSdpbCBlc3QgZMOpasOgIHBvc8OpIHF1ZWxxdWUgcGFydC4KICAgIG5vZGUuYXBwZW5kQ2hpbGQoYy5wYXJlbnROb2RlID8gYy5jbG9uZU5vZGUodHJ1ZSkgOiBjKTsKICAgIHJldHVybjsKICB9CiAgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoYykpKTsKfQoKZnVuY3Rpb24gZWwodGFnLCBwcm9wcyl7CiAgdmFyIHN2ZyA9ICEhU1ZHVEFHU1t0YWddOwogIHZhciBub2RlID0gc3ZnID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsIHRhZykKICAgICAgICAgICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsKICBwcm9wcyA9IHByb3BzIHx8IHt9OwogIGZvciAodmFyIGsgaW4gcHJvcHMpewogICAgdmFyIHYgPSBwcm9wc1trXTsKICAgIGlmIChrID09PSAna2V5JyB8fCB2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkgY29udGludWU7CiAgICBpZiAoayA9PT0gJ3N0eWxlJykgeyBhcHBseVN0eWxlKG5vZGUsIHYpOyBjb250aW51ZTsgfQogICAgaWYgKGsgPT09ICdjbGFzc05hbWUnKSB7IG5vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsIHYpOyBjb250aW51ZTsgfQogICAgaWYgKGsuaW5kZXhPZignb24nKSA9PT0gMCAmJiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihrLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCksIHYpOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChzdmcpIG5vZGUuc2V0QXR0cmlidXRlKFNWR0NBTUVMW2tdID8gayA6IGtlYmFiKGspLCBTdHJpbmcodikpOwogICAgZWxzZSBub2RlLnNldEF0dHJpYnV0ZShrLmluZGV4T2YoJy0nKSA+IC0xID8gayA6IGtlYmFiKGspLCBTdHJpbmcodikpOwogIH0KICBmb3IgKHZhciBhPTI7IGE8YXJndW1lbnRzLmxlbmd0aDsgYSsrKSBhcHBlbmQobm9kZSwgYXJndW1lbnRzW2FdKTsKICByZXR1cm4gbm9kZTsKfQoKdmFyIFJlYWN0ID0geyBjcmVhdGVFbGVtZW50OiBlbCB9OyAgIC8vIGxvY2FsIMOgIGNlIGJsb2MsIG4nw6ljcmFzZSBwYXMgbGUgUmVhY3QgZGUgV29yZFByZXNzCgovKiAtLS0gZG9ubsOpZXMgZXQgY29tcG9zaXRpb24sIHJlcHJpcyB0ZWxzIHF1ZWxzIGR1IHByb3RvdHlwZSAtLS0gKi8KCi8qIFVuZSBzZXVsZSBkZXN0aW5hdGlvbiBkJ2FjaGF0IHBvdXIgdG91dGUgbGEgcGFnZSA6IGNlbGxlIHB1Ymxpw6llIHBhciBsZSBibG9jIGRlIHBhZ2UuCiAgIE5lIGphbWFpcyByZWTDqWNsYXJlciBkJ1VSTCBpY2ksIGRldXggdmFsZXVycyBmaW5pcmFpZW50IHBhciBkaXZlcmdlci4gKi8KCmNvbnN0IFNFUklGPSInTmV3c3JlYWRlcicsR2VvcmdpYSxzZXJpZiI7CmNvbnN0IElOSz0nIzFiMjM1Mic7CmNvbnN0IE5BVlk9JyMwRTEzNEYnLCBSRUQ9JyNGNTI1NDknLCBHUkVZPScjNkM3MTc5JywgUEFQRVI9JyNmOGZhZmMnLCBMSU5FPScjZTVlN2ViJywgVElOVD0nI2VlZjJmYicsIFJUSU5UPScjRkRFQ0VGJzsKY29uc3QgQ0FSRUVSPVtbMTk4MiwyNl0sWzE5ODQsMzFdLFsxOTg2LDM0XSxbMTk4OCwzOF0sWzE5OTAsNDJdLFsxOTkyLDQ1XSxbMTk5NCw0OV0sWzE5OTYsMjksMV0sWzE5OTgsMjQsMV0sWzIwMDAsNTJdLFsyMDAxLDIxLDFdLFsyMDAzLDU4XSxbMjAwNSw2MV0sWzIwMDcsNjRdLFsyMDA5LDY2XSxbMjAxMSw3MF0sWzIwMTMsNzNdLFsyMDE1LDc2XSxbMjAxNyw3OV0sWzIwMTksODJdLFsyMDIwLDg0XSxbMjAyMSw4Nl0sWzIwMjIsODldLFsyMDIzLDkxXSxbMjAyNCw5M10sWzIwMjUsOTVdXTsKCmNvbnN0IEFWSVMgPSBbCiAgLy8gW2luaXRpYWxlLCBjaXRhdGlvbiwgcHLDqW5vbSArIGTDqXBhcnRlbWVudCwgY29udGV4dGUsIFttw6l0YWRvbm7DqWVzXV0KICBbJ1MnLCdSRU1QTEFDRVIgUEFSIFNFUyBNT1RTIEVYQUNUUycsJ1Byw6lub20sIGTDqXBhcnRlbWVudCcsJ1JlbGV2w6kgZGUgWFggYW5uw6llcycsWydYWCBzdWpldHMnLCdYIGNvdXJyaWVycyddXSwKICBbJ0EnLCdSRU1QTEFDRVIgUEFSIFNFUyBNT1RTIEVYQUNUUycsJ1Byw6lub20sIGTDqXBhcnRlbWVudCcsJ1JlbGV2w6kgZGUgWFggYW5uw6llcycsWydYWCBzdWpldHMnLCdYIGNvdXJyaWVycyddXQpdOwpjb25zdCBDT05URU5VID0gWwogIFsnMjggw6AgNTEnLCdwYWdlcycsJ3NlbG9uIHZvdHJlIGNhcnJpw6hyZVx1MDBhMDogY29tcG9zw6llcywgbnVtw6lyb3TDqWVzLCDDoCBnYXJkZXIgZGFucyB1biBjbGFzc2V1ciddLAogIFsnMSBwYWdlJywncGFyIHN1amV0IHJldGVudScsJ2F2ZWMgbFx1MjAxOWFubsOpZSBjb25jZXJuw6llLCBsZSBtb3RpZiDDoCBpbnZvcXVlciBldCBsZXMgcGnDqGNlcyDDoCBqb2luZHJlJ10sCiAgWycxIGNvdXJyaWVyJywncGFyIGTDqW1hcmNoZSDDoCBlbmdhZ2VyJywnZMOpasOgIHLDqWRpZ8OpIMOgIHZvdHJlIG5vbSwgw6Agc2lnbmVyIGV0IHBvc3RlciddLAogIFsnRW4gZXVyb3MnLCdjZSBxdWUgw6dhIHJlcHLDqXNlbnRlJywnY2hhcXVlIGNvcnJlY3Rpb24gY2hpZmZyw6llLCBkdSBicnV0IGF1IG5ldCwgc3VyIHZvcyBwcm9wcmVzIHRyYW5jaGVzJ10KXTsKY29uc3QgRVRBUEVTID0gWwogIFsnVm91cyBlbnZveWV6IGxlIFBERiBkZSB2b3RyZSByZWxldsOpJywnU3VyIGluZm8tcmV0cmFpdGUuZnIsIHJ1YnJpcXVlIMKrIE1vbiByZWxldsOpIGRlIGNhcnJpw6hyZSDCuywgYm91dG9uIFTDqWzDqWNoYXJnZXIuIFNpIHZvdXMgblx1MjAxOWF2ZXogcGFzIGRlIGNvbXB0ZSwgamUgdm91cyBpbmRpcXVlIGNvbW1lbnQgbGUgY3LDqWVyLiBSaWVuIGRcdTIwMTlhdXRyZSDDoCBwcsOpcGFyZXIuJ10sCiAgWydWb3VzIHLDqXBvbmRleiDDoCBxdWVscXVlcyBxdWVzdGlvbnMnLCdTdXIgbGVzIHNldWxlcyBhbm7DqWVzIHF1aSBwb3NlbnQgcXVlc3Rpb24uIFVuZSBkaXphaW5lIGRlIG1pbnV0ZXMsIGVuIHVuZSBmb2lzIG91IGVuIHBsdXNpZXVycy4nXSwKICBbJ0xlIGRvc3NpZXIgZXN0IGFuYWx5c8OpLCBwdWlzIHNpZ27DqScsJ0zDqW9uYXJkIERlw68sIGZvbmRhdGV1ciBkXHUyMDE5QURDRiwgbGUgcmVwcmVuZCBsaWduZSDDoCBsaWduZSBldCDDqWNhcnRlIGNlIHF1aSBuZSBzZSBkw6lmZW5kIHBhcy4nXSwKICBbJ1ZvdXMgbGUgcmVjZXZleiBzb3VzIDMgam91cnMgb3V2csOpcycsJ1BhciBlLW1haWwsIGVuIFBERi4gw4AgbGlyZSDDoCBsXHUyMDE5w6ljcmFuLCBvdSDDoCBpbXByaW1lciBwb3VyIMOpY3JpcmUgZGVzc3VzLiddCl07CmNvbnN0IEpBTUFJUyA9IFsKICBbJ1ZvdHJlIG51bcOpcm8gZGUgc8OpY3VyaXTDqSBzb2NpYWxlJywnSWwgZmlndXJlIHN1ciB2b3RyZSByZWxldsOpLiBJbCBlc3QgbHUgdW5lIGZvaXMsIHBvdXIgcmV0cm91dmVyIHZvdHJlIGRhdGUgZGUgbmFpc3NhbmNlIGV0IHZvdHJlIMOiZ2UgbMOpZ2FsIGRlIGTDqXBhcnQsIGV0IGlsIG5cdTIwMTllc3QgamFtYWlzIGNvbnNlcnbDqS4gRMOpcG9zZXogbGUgcmVsZXbDqSB0ZWwgcXVlIHZvdHJlIGNhaXNzZSB2b3VzIGxcdTIwMTlhIHJlbWlzLCBzYW5zIHJpZW4gbW9kaWZpZXIuIFN1ciBsZXMgY291cnJpZXJzLCBjXHUyMDE5ZXN0IHVuIGNoYW1wIGxhaXNzw6kgdmlkZSBxdWUgdm91cyByZW1wbGlzc2V6IMOgIGxhIG1haW4uJ10sCiAgWydWb3MgY29kZXMgZFx1MjAxOWFjY8OocycsJ05pIGNldXggZGUgdm90cmUgZXNwYWNlIHJldHJhaXRlLCBuaSBGcmFuY2VDb25uZWN0LiBQZXJzb25uZSBuZSBzZSBjb25uZWN0ZSDDoCB2b3RyZSBwbGFjZSwgamFtYWlzLiddLAogIFsnVW5lIGNvcGllIGRlIHZvdHJlIHJlbGV2w6knLCdWb3RyZSBQREYgZXN0IGTDqXRydWl0IGTDqHMgc2EgbGVjdHVyZS4gTGVzIGRvbm7DqWVzIHF1aSBlbiBzb250IGV4dHJhaXRlcyBzb250IGNvbnNlcnbDqWVzIGxlIHRlbXBzIGRlIHZvdXMgcmVtZXR0cmUgdm90cmUgZG9zc2llciwgcHVpcyBlZmZhY8OpZXMuIENoaWZmcsOpLCBow6liZXJnw6kgZW4gRnJhbmNlLiddCl07CmNvbnN0IENPTVBSSVMgPSBbCiAgWydWb3RyZSBkb3NzaWVyIGNvbXBsZXQsIDI4IMOgIDUxIHBhZ2VzJywnY29tcHJpcyddLAogIFsnQ2UgcXVlIGNlbGEgcmVwcsOpc2VudGUgZW4gZXVyb3MnLCdjb21wcmlzJ10sCiAgWydMZXMgY291cnJpZXJzIMOgIGVudm95ZXInLCdjb21wcmlzJ10sCiAgWydMZXMgbGV0dHJlcyBkZSByZWxhbmNlIHNpIGxhIGNhaXNzZSBuZSByw6lwb25kIHBhcycsJ2NvbXByaXMnXSwKICBbJ0xcdTIwMTllbnZvaSBlbiByZWNvbW1hbmTDqScsJzE1IMOgIDI1IOKCrCwgw6Agdm90cmUgY2hhcmdlJ10KXTsKY29uc3QgUE9VUlZPVVMgPSBbCiAgJ3ZvdXMgYXZleiB2b3RyZSByZWxldsOpIGRlIGNhcnJpw6hyZSBzb3VzIGxlcyB5ZXV4IGV0IHVuIGRvdXRlJywKICAndm90cmUgY2FycmnDqHJlIGEgZGVzIHRyb3VzLCBkZXMgdGVtcHMgcGFydGllbHMsIGRlIGxcdTIwMTlpbnTDqXJpbSBvdSBkZXMgcMOpcmlvZGVzIMOgIGxcdTIwMTnDqXRyYW5nZXInLAogICd2b3VzIGxpcXVpZGV6IGJpZW50w7R0IGV0IHZvdXMgdm91bGV6IHbDqXJpZmllciBhdmFudCwgcGFzIGFwcsOocycsCiAgJ3ZvdXMgcHLDqXBhcmV6IGxlIGRvc3NpZXIgZFx1MjAxOXVuIHBhcmVudCcsCiAgJ3ZvdXMgdm91bGV6IHF1XHUyMDE5dW5lIHBlcnNvbm5lIHJlZ2FyZGUgdm90cmUgcmVsZXbDqSwgcGFzIHNldWxlbWVudCB1biBsb2dpY2llbCcKXTsKY29uc3QgUEFTVk9VUyA9IFsKICAndm91cyBhdHRlbmRleiBxdVx1MjAxOW9uIGZhc3NlIGxlcyBkw6ltYXJjaGVzIMOgIHZvdHJlIHBsYWNlIDogbGVzIGNvdXJyaWVycyBzb250IHLDqWRpZ8OpcywgbWFpcyBjXHUyMDE5ZXN0IHZvdXMgcXVpIHNpZ25leiBldCBwb3N0ZXonLAogICd2b3VzIGF0dGVuZGV6IHVuZSBzaW11bGF0aW9uIG9mZmljaWVsbGUgZGUgdm90cmUgcGVuc2lvbiA6IGxlIGRvc3NpZXIgY2hpZmZyZSBjZSBxdWUgY2hhcXVlIGNvcnJlY3Rpb24gcmVwcsOpc2VudGUsIGlsIG5lIHJlbXBsYWNlIHBhcyBsZSBjYWxjdWwgZGUgdm90cmUgY2Fpc3NlJywKICAndm91cyB2b3VsZXogdW5lIHByb21lc3NlIGRlIHNvbW1lIHLDqWN1cMOpcsOpZSA6IHBlcnNvbm5lIG5lIHBldXQgc2F2b2lyIMOgIGxcdTIwMTlhdmFuY2UgY2UgcXVlIHZvdHJlIGNhaXNzZSBhY2NlcHRlcmEnCl07CmNvbnN0IEFJTExFVVJTID0gWwogIFsnQ29uc3VsdGF0aW9uIHNpbXBsZSwgdW5lIGhldXJlJywnMTUwIMOgIDQwMCDigqwnLCd1biBwcmVtaWVyIGF2aXMgc3VyIGRlcyBxdWVzdGlvbnMgY2libMOpZXMnLDE1MCw0MDBdLAogIFsnQmlsYW4gcmV0cmFpdGUgc3RhbmRhcmQnLCc0MDAgw6AgMSAwMDAg4oKsJywnYW5hbHlzZSBkZSBjYXJyacOocmUgZXQgZXN0aW1hdGlvbiBkZXMgZHJvaXRzJyw0MDAsMTAwMF0sCiAgWydCaWxhbiBhcHByb2ZvbmRpIHN1ciBtZXN1cmUnLCcxIDAwMCDDoCAyIDUwMCDigqwnLCdyZWNvbnN0aXR1dGlvbiBkw6l0YWlsbMOpZSwgcGx1c2lldXJzIHLDqWdpbWVzJywxMDAwLDI1MDBdLAogIFsnQWNjb21wYWduZW1lbnQganVzcXVcdTIwMTnDoCBsYSBsaXF1aWRhdGlvbicsJzEgNTAwIMOgIDUgMDAwIOKCrCcsJ3ByaXNlIGVuIGNoYXJnZSBjb21wbMOodGUgZHUgZG9zc2llcicsMTUwMCw1MDAwXQpdOwpjb25zdCBBUEVSQ1VTID0gWwogIFsnVW4gc3VqZXQgw6AgdsOpcmlmaWVyJywnSHVpdCBibG9jcyA6IGxlIGNvbnN0YXQsIHBvdXJxdW9pIGNlbGEgbcOpcml0ZSB1bmUgZGVtYW5kZSwgY2UgcXVpIHBldXQgbFx1MjAxOWV4cGxpcXVlciwgbGEgcGnDqGNlIMOgIGpvaW5kcmUsIGxlIGdlc3RlIMOgIGZhaXJlLCBjZSBxdWUgw6dhIHBvcnRlLCBsZSBuaXZlYXUgZGUgY2VydGl0dWRlLCBsYSBzb3VyY2UuJ10sCiAgWydWb3RyZSBjYXJyacOocmUsIGFubsOpZSBwYXIgYW5uw6llJywnQ2hhcXVlIGFubsOpZSBjb25mcm9udMOpZSBhdXggc2V1aWxzIGVuIHZpZ3VldXIsIGxlcyBhbm7DqWVzIMOgIHbDqXJpZmllciBzaWduYWzDqWVzLiddLAogIFsnVW4gY291cnJpZXIgcHLDqnQgw6Agc2lnbmVyJywnT2JqZXQsIGNvcnBzLCBwacOoY2VzIMOgIGpvaW5kcmUsIGV0IGxlcyBjaGFtcHMgbGFpc3PDqXMgdmlkZXMgcXVlIHZvdXMgcmVtcGxpc3NleiDDoCBsYSBtYWluLiddCl07CmNvbnN0IFJFR0FSREUgPSBbCiAgWydWb3VzIGF2ZXogdHJhdmFpbGzDqSBlbiBpbnTDqXJpbSwgb3UgZW4gbWlzc2lvbnMgY291cnRlcycsJ0NlIHNvbnQgbGVzIHDDqXJpb2RlcyBsZXMgcGx1cyBzb3V2ZW50IGFic2VudGVzIDogcGx1c2lldXJzIGVtcGxveWV1cnMsIGRlcyBjb250cmF0cyBkZSBxdWVscXVlcyBzZW1haW5lcywgZGVzIGTDqWNsYXJhdGlvbnMgZmFpdGVzIGVuIHJldGFyZC4nXSwKICBbJ1ZvdXMgYXZleiBldSB1biB0ZW1wcyBwYXJ0aWVsJywnVW4gc2FsYWlyZSBwbHVzIGZhaWJsZSBwZXV0IHBhc3NlciBzb3VzIGxlIHNldWlsIHF1aSB2YWxpZGUgdW4gdHJpbWVzdHJlLiBDaGFxdWUgYW5uw6llIGVzdCBjb25mcm9udMOpZSBhdSBzZXVpbCBxdWkgc1x1MjAxOWFwcGxpcXVhaXQgw6AgbFx1MjAxOcOpcG9xdWUsIHBhcyDDoCBjZWx1aSBkXHUyMDE5YXVqb3VyZFx1MjAxOWh1aS4nXSwKICBbJ1ZvdXMgYXZleiDDqXTDqSBlbiBhcnLDqnQsIGF1IGNow7RtYWdlLCBlbiBjb25nw6kgbWF0ZXJuaXTDqScsJ0NlcyBww6lyaW9kZXMgZG9ubmVudCBkZXMgdHJpbWVzdHJlcywgZW5jb3JlIGZhdXQtaWwgcXVcdTIwMTllbGxlcyBzb2llbnQgaW5zY3JpdGVzLiBDXHUyMDE5ZXN0IHbDqXJpZmnDqSB1bmUgcGFyIHVuZS4nXSwKICBbJ1ZvdXMgYXZleiDDqWxldsOpIGRlcyBlbmZhbnRzJywnVHJpbWVzdHJlcyBkZSBtYXRlcm5pdMOpLCBkXHUyMDE5w6lkdWNhdGlvbiwgbWFqb3JhdGlvbiBkZSBwZW5zaW9uLCBldCBsZXMgdHJpbWVzdHJlcyBsacOpcyBhdXggYWxsb2NhdGlvbnMgZmFtaWxpYWxlcyAoQVZQRiksIHNvdXZlbnQgYWJzZW50cyA6IGNlIHNvbnQgZGVzIGRyb2l0cyBxdWkgc2UgZGVtYW5kZW50LiddLAogIFsnVm91cyBhdmV6IGNoYW5nw6kgZGUgbcOpdGllciBvdSBkZSBzdGF0dXQnLCdTYWxhcmnDqSwgaW5kw6lwZW5kYW50LCBmb25jdGlvbm5haXJlLCBhZ3JpY29sZSA6IGNlIHF1XHUyMDE5dW4gcsOpZ2ltZSBjb21wdGUsIGxcdTIwMTlhdXRyZSBsXHUyMDE5aWdub3JlIHBhcmZvaXMuIExlcyByZWNvdXBlbWVudHMgc29udCBmYWl0cy4nXSwKICBbJ1ZvdXMgYXZleiB0cmF2YWlsbMOpIMOgIGxcdTIwMTnDqXRyYW5nZXInLCdEYW5zIGxcdTIwMTlVbmlvbiBldXJvcMOpZW5uZSBldCBsZXMgcGF5cyBzb3VzIGNvbnZlbnRpb24sIGNlcyBhbm7DqWVzIGNvbXB0ZW50LiBFbGxlcyBtYW5xdWVudCBwcmVzcXVlIHRvdWpvdXJzIGF1IHJlbGV2w6kgZnJhbsOnYWlzLiddLAogIFsnVm91cyBhdmV6IGRlcyBhbm7DqWVzIMOgIHrDqXJvLCBvdSBpbmNvbXBsw6h0ZXMnLCdVbmUgYW5uw6llIMOgIGRldXggdHJpbWVzdHJlcyBhdSBsaWV1IGRlIHF1YXRyZSBuZSBzZSB2b2l0IHBhcyDDoCBsXHUyMDE5xZNpbC4gRWxsZSBzZSB0cm91dmUgZW4gY29tcGFyYW50IGxlIHNhbGFpcmUgcG9ydMOpIGF1IHNldWlsIGRlIGxcdTIwMTlhbm7DqWUuJ10sCiAgWydWb3VzIG5lIHNhdmV6IHBhcyDDoCBxdWVsbGUgZGF0ZSB2b3VzIHBvdXZleiBwYXJ0aXInLCdDZSBxdWUgdm9zIHRyaW1lc3RyZXMgcGVybWV0dGVudCwgw6AgcXVlbGxlIGRhdGUsIGV0IGNlIHF1ZSB0cm9pcyBtb2lzIGRlIHBsdXMgY2hhbmdlcmFpZW50LiddCl07CmNvbnN0IFJFR0FSREVfT0xEID0gWwogIFsnTGVzIHNldWlscywgYW5uw6llIHBhciBhbm7DqWUnLCdDaGFxdWUgYW5uw6llIGVzdCBjb25mcm9udMOpZSBhdSBzYWxhaXJlIHF1XHUyMDE5aWwgZmFsbGFpdCBkw6ljbGFyZXIsIGNldHRlIGFubsOpZS1sw6AsIHBvdXIgdmFsaWRlciB1biB0cmltZXN0cmUuIExlcyBzZXVpbHMgb250IGNoYW5nw6kgZG91emUgZm9pcyBkZXB1aXMgMTk3Mi4nXSwKICBbJ0xlcyBhbm7DqWVzIGluY29tcGzDqHRlcycsJ1VuIHRyaW1lc3RyZSBtYW5xdWFudCBlbiAxOTk2IG5lIHNlIHZvaXQgcGFzIMOgIGxcdTIwMTnFk2lsLiBJbCBzZSB0cm91dmUgZW4gY29uZnJvbnRhbnQgbGUgc2FsYWlyZSBwb3J0w6kgYXUgc2V1aWwgZGUgbFx1MjAxOcOpcG9xdWUuJ10sCiAgWydMXHUyMDE5aW50w6lyaW0gZXQgbGVzIGVtcGxveWV1cnMgbXVsdGlwbGVzJywnTGVzIG1pc3Npb25zIGNvdXJ0ZXMgZXQgbGVzIGVtcGxveWV1cnMgcXVpIHNlIHN1Y2PDqGRlbnQgc29udCBsYSBwcmVtacOocmUgc291cmNlIGRlIHDDqXJpb2RlcyBvdWJsacOpZXMuJ10sCiAgWydMZXMgcMOpcmlvZGVzIGFzc2ltaWzDqWVzJywnTWFsYWRpZSwgbWF0ZXJuaXTDqSwgY2jDtG1hZ2UsIGFjY2lkZW50IGR1IHRyYXZhaWwsIHNlcnZpY2UgbmF0aW9uYWwgOiBlbGxlcyBkb25uZW50IGRlcyB0cmltZXN0cmVzLCBlbmNvcmUgZmF1dC1pbCBxdVx1MjAxOWVsbGVzIHNvaWVudCBpbnNjcml0ZXMuJ10sCiAgWydMZXMgbWFqb3JhdGlvbnMgcG91ciBlbmZhbnRzJywnTWF0ZXJuaXTDqSwgw6lkdWNhdGlvbiwgbWFqb3JhdGlvbiBkZSBwZW5zaW9uLCBldCBsZXMgdHJpbWVzdHJlcyBBVlBGIGxpw6lzIGF1eCBhbGxvY2F0aW9ucyBmYW1pbGlhbGVzIDogZGVzIGRyb2l0cyBxdWkgc2UgZGVtYW5kZW50LiddLAogIFsnTGVzIHLDqWdpbWVzIGNyb2lzw6lzJywnUsOpZ2ltZSBnw6luw6lyYWwsIGNvbXBsw6ltZW50YWlyZSwgaW5kw6lwZW5kYW50cywgYWdyaWNvbGUsIGZvbmN0aW9uIHB1YmxpcXVlIDogY2UgcXVlIGxcdTIwMTl1biBjb21wdGUsIGxcdTIwMTlhdXRyZSBsXHUyMDE5aWdub3JlIHBhcmZvaXMuJ10sCiAgWydMZXMgcMOpcmlvZGVzIMOgIGxcdTIwMTnDqXRyYW5nZXInLCdVbmlvbiBldXJvcMOpZW5uZSBldCBwYXlzIHNvdXMgY29udmVudGlvbiA6IGNlcyBhbm7DqWVzIGNvbXB0ZW50LCBldCBtYW5xdWVudCBwcmVzcXVlIHRvdWpvdXJzIGF1IHJlbGV2w6kgZnJhbsOnYWlzLiddLAogIFsnTGEgZGF0ZSBkZSBkw6lwYXJ0JywnQ2UgcXVlIHZvcyB0cmltZXN0cmVzIHBlcm1ldHRlbnQsIMOgIHF1ZWxsZSBkYXRlLCBldCBjZSBxdWUgdHJvaXMgbW9pcyBkZSBwbHVzIGNoYW5nZXJhaWVudC4nXQpdOwpjb25zdCBQUk9GSUxTID0gWwogIFsnSW50w6lyaW0sIG1pc3Npb25zIGNvdXJ0ZXMsIHBsdXNpZXVycyBlbXBsb3lldXJzJywnTGVzIHDDqXJpb2RlcyBsZXMgcGx1cyBzb3V2ZW50IGFic2VudGVzIGRcdTIwMTl1biByZWxldsOpLicsCiAgICBbJ0NoYXF1ZSBtaXNzaW9uIGVzdCByZXRyb3V2w6llIGV0IHJhdHRhY2jDqWUgYXUgYm9uIHLDqWdpbWUuJywnTGVzIGTDqWNsYXJhdGlvbnMgdGFyZGl2ZXMgZFx1MjAxOWVtcGxveWV1ciBzb250IHJlcMOpcsOpZXMgYW5uw6llIHBhciBhbm7DqWUuJywnTGVzIHDDqXJpb2RlcyBkZSBjaMO0bWFnZSBlbnRyZSBkZXV4IG1pc3Npb25zIHNvbnQgdsOpcmlmacOpZXMgdW5lIMOgIHVuZS4nXV0sCiAgWydUZW1wcyBwYXJ0aWVsLCBvdSBzYWxhaXJlcyBtb2Rlc3RlcycsJ1VuIHNhbGFpcmUgcGx1cyBmYWlibGUgcGV1dCBwYXNzZXIgc291cyBsZSBzZXVpbCBkdSB0cmltZXN0cmUuJywKICAgIFsnQ2hhcXVlIGFubsOpZSBlc3QgY29uZnJvbnTDqWUgYXUgc2V1aWwgcXVpIHNcdTIwMTlhcHBsaXF1YWl0IMOgIGxcdTIwMTnDqXBvcXVlLCBwYXMgw6AgY2VsdWkgZFx1MjAxOWF1am91cmRcdTIwMTlodWkuJywnTGVzIGFubsOpZXMgw6AgZGV1eCBvdSB0cm9pcyB0cmltZXN0cmVzIGF1IGxpZXUgZGUgcXVhdHJlIHNvbnQgaXNvbMOpZXMuJywnTGVzIG1ham9yYXRpb25zIGxpw6llcyBhdXggZW5mYW50cyBldCDDoCBsXHUyMDE5QVZQRiBzb250IGNvbnRyw7Rsw6llcy4nXV0sCiAgWydQbHVzaWV1cnMgcsOpZ2ltZXMsIG91IHVuIGNoYW5nZW1lbnQgZGUgc3RhdHV0JywnQ2UgcXVcdTIwMTl1biByw6lnaW1lIGNvbXB0ZSwgbFx1MjAxOWF1dHJlIGxcdTIwMTlpZ25vcmUgcGFyZm9pcy4nLAogICAgWydSw6lnaW1lIGfDqW7DqXJhbCwgTVNBLCBpbmTDqXBlbmRhbnRzLCBmb25jdGlvbiBwdWJsaXF1ZSBldCBBZ2lyYy1BcnJjbyBzb250IHJlY291cMOpcy4nLCdMZXMgYW5uw6llcyBjb21wdMOpZXMgZGV1eCBmb2lzLCBvdSBwYXIgcGVyc29ubmUsIHNvbnQgc2lnbmFsw6llcy4nLCdMZXMgZHJvaXRzIG91dmVydHMgZGFucyB1biByw6lnaW1lIG91Ymxpw6kgc29udCByZWNoZXJjaMOpcy4nXV0sCiAgWydEZXMgYW5uw6llcyDDoCBsXHUyMDE5w6l0cmFuZ2VyJywnRWxsZXMgbWFucXVlbnQgcHJlc3F1ZSB0b3Vqb3VycyBhdSByZWxldsOpIGZyYW7Dp2Fpcy4nLAogICAgWydVbmlvbiBldXJvcMOpZW5uZSBldCBwYXlzIHNvdXMgY29udmVudGlvbiA6IGxlcyBhbm7DqWVzIHNvbnQgcsOpY2xhbcOpZXMgYXZlYyBsZSBmb3JtdWxhaXJlIGFkYXB0w6kuJywnTGVzIHDDqXJpb2RlcyBub24gcmVwb3J0w6llcyBzb250IGRhdMOpZXMgZXQgZG9jdW1lbnTDqWVzLicsJ0xcdTIwMTllZmZldCBzdXIgdm90cmUgZGF0ZSBkZSBkw6lwYXJ0IGVzdCBjYWxjdWzDqS4nXV0KXTsKY29uc3QgRkFRID0gWwogIFsnRXN0LWNlIGVuY29yZSB1biBvdXRpbCBxdWkgcmVjcmFjaGUgdW4gUERGIGF1dG9tYXRpcXVlwqA/JywnTm9uLCBldCBjXHUyMDE5ZXN0IHByw6ljaXPDqW1lbnQgbGEgcmFpc29uIGR1IGTDqWxhaS4gVW4gbW90ZXVyIGTDqXBvdWlsbGUgdm90cmUgcmVsZXbDqSwgbWFpcyByaWVuIG5lIHBhcnQgYXZhbnQgcXVlIEzDqW9uYXJkIERlw68gYWl0IHJlcHJpcyBsZSBkb3NzaWVyIGxpZ25lIMOgIGxpZ25lIGV0IHNpZ27DqSBjaGFxdWUgZGVtYW5kZS4nXSwKICBbJ0V0IHNpIHZvdXMgbmUgdHJvdXZleiByaWVuIGNoZXogbW9pID8nLCdVbmUgY2FycmnDqHJlIGNvbXBsw6h0ZSwgMTkyIHRyaW1lc3RyZXMgdmFsaWTDqXMgcG91ciAxNzAgcmVxdWlzLCBwcm9kdWl0IHF1YW5kIG3Dqm1lIGRlcyBzdWpldHMgZXQgZGVzIGNvdXJyaWVyc1x1MDBhMDogbGUgZG9zc2llciBwb3J0ZSBkZXMgZHJvaXRzIMOgIGRlbWFuZGVyLCBwYXMgc2V1bGVtZW50IGRlcyBlcnJldXJzIMOgIGNvcnJpZ2VyLiBFdCBzaSB2b3RyZSByZWxldsOpIGVzdCBqdXN0ZSwgbGUgZG9zc2llciBsZSBkaXQsIGF2ZWMgbGVzIHNldWlscyBhcHBsaXF1w6lzIMOgIGNoYXF1ZSBhbm7DqWUuIFZvdXMgcmVmZXJtZXogbGUgc3VqZXQgYXUgbGlldSBkXHUyMDE5eSByZXBlbnNlciB0b3VzIGxlcyBzaXggbW9pcy4nXSwKICBbJ1BvdXJxdW9pIG5lIHBhcyBkZW1hbmRlciDDp2Egw6AgbWEgY2Fpc3NlID8nLCdMXHUyMDE5ZW50cmV0aWVuIGluZm9ybWF0aW9uIHJldHJhaXRlIGVzdCBncmF0dWl0IGV0IGlsIHZhdXQgbGEgcGVpbmUgZFx1MjAxOcOqdHJlIGRlbWFuZMOpLiBJbCBjb21tZW50ZSBjZSBxdWUgdm90cmUgY2Fpc3NlIGEgZW5yZWdpc3Ryw6kuIElsIG5lIGNoZXJjaGUgcGFzIGNlIHF1aSBtYW5xdWUsIGV0IGlsIG5cdTIwMTnDqWNyaXQgcGFzIGxlcyBjb3VycmllcnMuJ10sCiAgWydRdWVscyByw6lnaW1lcyByZWdhcmRlei12b3VzwqA/JywnVG91cyBjZXV4IHF1aSBmaWd1cmVudCDDoCB2b3RyZSByZWxldsOpIDogbGUgcsOpZ2ltZSBnw6luw6lyYWwsIGxhIE1TQSwgbGVzIGluZMOpcGVuZGFudHMsIGxhIGZvbmN0aW9uIHB1YmxpcXVlLCBsZXMgcsOpZ2ltZXMgc3DDqWNpYXV4LCBldCBsYSBjb21wbMOpbWVudGFpcmUgQWdpcmMtQXJyY28uIFVuZSBjYXJyacOocmUgcGFzc8OpZSBkXHUyMDE5dW4gc3RhdHV0IMOgIGxcdTIwMTlhdXRyZSBlc3QganVzdGVtZW50IGNlbGxlIG/DuSBsZXMgdHJpbWVzdHJlcyBzZSBwZXJkZW50LiddLAogIFsnTWEgbcOocmUgblx1MjAxOWEgcGFzIGRlIGNvbXB0ZSBzdXIgbFx1MjAxOWVzcGFjZSByZXRyYWl0ZS4nLCdDXHUyMDE5ZXN0IGxlIGNhcyBsZSBwbHVzIGZyw6lxdWVudC4gTGUgY29tcHRlIHNlIGNyw6llIGVuIHF1ZWxxdWVzIG1pbnV0ZXMgc3VyIGluZm8tcmV0cmFpdGUuZnIsIGF2ZWMgdW4gbnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGUgZXQgdW5lIGFkcmVzc2UgZS1tYWlsLiBMZSByZWxldsOpIHNlIHTDqWzDqWNoYXJnZSBlbnN1aXRlIGVuIHVuIGNsaWMsIGV0IHZvdXMgcG91dmV6IGZhaXJlIGxhIGTDqW1hcmNoZSBwb3VyIGVsbGUuJ10sCiAgWydWb3VzIGZhaXRlcyBsZXMgZMOpbWFyY2hlcyDDoCBtYSBwbGFjZcKgPycsJ05vbi4gTGVzIGNvdXJyaWVycyBzb250IHLDqWRpZ8Opcywgdm91cyBsZXMgc2lnbmV6IGV0IGxlcyBwb3N0ZXouIFZvdHJlIGNhaXNzZSBuZSBjb3JyZXNwb25kIHF1XHUyMDE5YXZlYyB2b3VzLCBldCBsZSBkb3NzaWVyIHJlc3RlIHZvdHJlIHByb3ByacOpdMOpLiddLAogIFsnQ29tYmllbiB2YWlzLWplIHLDqWN1cMOpcmVywqA/JywnSmUgbmUgcHJvbWV0cyBhdWN1bmUgc29tbWUgOiBjZSBxdWUgbGEgY2Fpc3NlIGFjY2VwdGVyYSBkZSBjb3JyaWdlciBuZSBzZSBzYWl0IHF1XHUyMDE5YXByw6hzIGV4YW1lbiBkZXMgcGnDqGNlcy4gTGUgZG9zc2llciBjaGlmZnJlIGVuIHJldmFuY2hlIGNlIHF1ZSBjaGFxdWUgY29ycmVjdGlvbiByZXByw6lzZW50ZXJhaXQgc2kgZWxsZSBhYm91dGl0LCBkdSBicnV0IGF1IG5ldCwgc3VyIHZvcyBwcm9wcmVzIHRyYW5jaGVzLiddLAogIFsnSmUgbGlxdWlkZSBkYW5zIGRldXggbW9pcywgZXN0LWNlIGVuY29yZSB1dGlsZcKgPycsJ091aSwgdGFudCBxdWUgbGEgbGlxdWlkYXRpb24gblx1MjAxOWVzdCBwYXMgcHJvbm9uY8OpZS4gQ29tcHRleiB0b3V0ZWZvaXMgcGx1c2lldXJzIG1vaXMgZFx1MjAxOWluc3RydWN0aW9uIGR1IGPDtHTDqSBkZSBsYSBjYWlzc2UsIGV0IGNlcnRhaW5zIGTDqWxhaXMgZGUgcmVjb3VycyBjb3VyZW50IGTDqWrDoCA6IGNcdTIwMTllc3QgcG91ciBjZWxhIHF1ZSBsZSBkb3NzaWVyIGluZGlxdWUgZGFucyBxdWVsIG9yZHJlIHRyYWl0ZXIgbGVzIHN1amV0cy4nXSwKICBbJ0VzdC1jZSBxdWUgamUgcGV1eCBsZSBmYWlyZSBwb3VyIHVuIHBhcmVudMKgPycsJ091aS4gSlx1MjAxOWFuYWx5c2UgbGUgcmVsZXbDqSBxdWkgbVx1MjAxOWVzdCBkw6lwb3PDqSwgcXVlbCBxdVx1MjAxOWVuIHNvaXQgbGUgdGl0dWxhaXJlXHUwMGEwOiBpbCB2b3VzIHJldmllbnQgZGUgdm91cyBhc3N1cmVyIHF1ZSBsYSBwZXJzb25uZSBjb25jZXJuw6llIGVzdCBkXHUyMDE5YWNjb3JkIGV0IHF1ZSB2b3VzIHBvdXZleiBkaXNwb3NlciBkZSBzb24gZG9jdW1lbnQuIExlIGRvc3NpZXIgZXN0IMOpdGFibGkgw6Agc29uIG5vbSwgZXQgbGVzIGNvdXJyaWVycyBzb250IMOgIHNhIHNpZ25hdHVyZS4nXSwKICBbJ0NvbWJpZW4gZGUgdGVtcHMgY2VsYSBtZSBwcmVuZMKgPycsJ1VuZSBkaXphaW5lIGRlIG1pbnV0ZXPCoDogdMOpbMOpY2hhcmdlciB2b3RyZSByZWxldsOpLCBsXHUyMDE5ZW52b3llciwgcsOpcG9uZHJlIGF1eCBxdWVzdGlvbnMgcG9zw6llcyBzdXIgbGVzIGFubsOpZXMgcXVpIHBvc2VudCBwcm9ibMOobWUuIExlIHJlc3RlIHNlIHBhc3NlIGRlIG5vdHJlIGPDtHTDqS4nXSwKICBbJ0V0IHNpIG1hIGNhaXNzZSByZWZ1c2UgbGEgY29ycmVjdGlvbsKgPycsJ0xlIGRvc3NpZXIgY29udGllbnQgbGVzIGxldHRyZXMgZGUgcmVsYW5jZSBldCBsYSBtYXJjaGUgw6Agc3VpdnJlIGp1c3F1XHUyMDE5w6AgbGEgY29tbWlzc2lvbiBkZSByZWNvdXJzIGFtaWFibGUsIGF2ZWMgbGVzIGTDqWxhaXMgcXVpIGNvdXJlbnQuIFVuIHJlZnVzIG5cdTIwMTllc3QgcGFzIGxhIGZpbiBkZSBsYSBkw6ltYXJjaGUuJ10sCiAgWydQdWlzLWplIHZvdXMgam9pbmRyZcKgPycsJ1BhciDDqWNyaXQsIMOgIGNvbnRhY3RAYWRjZi5vcmcuIElsIG5cdTIwMTl5IGEgcGFzIGRlIG51bcOpcm8gZGUgdMOpbMOpcGhvbmUsIGV0IGplIHByw6lmw6hyZSBsXHUyMDE5w6ljcmlyZSBwbHV0w7R0IHF1ZSBkZSB2b3VzIGxhaXNzZXIgY2hlcmNoZXIuJ10sCiAgWydWb3VzIMOqdGVzIHVuIHNlcnZpY2UgcHVibGljwqA/JywnTm9uLiBKZSBuZSBzdWlzIG1hbmRhdMOpIHBhciBhdWN1bmUgY2Fpc3NlIGRlIHJldHJhaXRlIGV0IGplIG5lIHJlbXBsYWNlIHBhcyBsYSB2w7R0cmUuJ10KXTsKCgpjbGFzcyBMZWN0dXJlIHsKICBzdGF0ZSA9IHsgZGlhZzogJ2RlcG90JywgbWFpbE9rOiBmYWxzZSwgcG9wdXA6IGZhbHNlLCBwb3B1cE1haWxPazogZmFsc2UsIGFubmVlOiAwLCBxSW5kZXg6IDAsIHJlcG9uc2VzOiB7fSwgbWFyY2hlT2s6IGZhbHNlIH07CiAgcHJpY2UoKXsgcmV0dXJuIHRoaXMucHJvcHMucHJpY2UgPz8gKHdpbmRvdy5fX0FEQ0ZfUFJJWF9fIHx8ICcyNDkg4oKsIFRUQycpOyB9CiAgZGVsYWkoKXsgcmV0dXJuIHRoaXMucHJvcHMuZGVsYWkgPz8gJzMgam91cnMgb3V2csOpcyc7IH0KICBmb3VuZGVyKCl7IHJldHVybiB0aGlzLnByb3BzLmZvdW5kZXIgPz8gJ0zDqW9uYXJkIERlw68nOyB9CgogIHNldFN0YXRlKHBhdGNoKXsKICAgIHZhciBuZXh0ID0gdHlwZW9mIHBhdGNoID09PSAnZnVuY3Rpb24nID8gcGF0Y2godGhpcy5zdGF0ZSkgOiBwYXRjaDsKICAgIGZvciAodmFyIGsgaW4gbmV4dCkgdGhpcy5zdGF0ZVtrXSA9IG5leHRba107CiAgICB0aGlzLm1vdW50KCk7CiAgfQoKICBtb3VudCgpewogICAgdmFyIGhlcm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1sZWN0dXJlLWhlcm8nKTsKICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkY2YtbGVjdHVyZScpOwogICAgaWYgKCFob3N0ICYmICFoZXJvKSByZXR1cm47CiAgICB0aGlzLl9ob3N0ID0gaG9zdCB8fCBoZXJvOwogICAgdGhpcy5tb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IEJSRUFLOwogICAgLy8gTGUgZMOpZmlsw6kgcmUtcmVuZGVyIHRvdXRlcyBsZXMgOTAgbXMgOiBvbiBwcsOpc2VydmUgbGUgY2hhbXAgZS1tYWlsIGVuIGNvdXJzIGRlCiAgICAvLyBzYWlzaWUgKHZhbGV1ciwgZm9jdXMsIGN1cnNldXIpLCBxdWVsIHF1ZSBzb2l0IGxlIHBvaW50IGRlIG1vbnRhZ2UuCiAgICB2YXIgYWU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgIHZhciBvbGRJbnB1dD0oaG9zdCYmaG9zdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJykpfHwoaGVybyYmaGVyby5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJykpOwogICAgdmFyIHN2PW51bGwsIGZvYz1mYWxzZSwgc2VsPW51bGw7CiAgICBpZihvbGRJbnB1dCl7IHN2PW9sZElucHV0LnZhbHVlOyBpZihhZT09PW9sZElucHV0KXsgZm9jPXRydWU7IHRyeXsgc2VsPVtvbGRJbnB1dC5zZWxlY3Rpb25TdGFydCxvbGRJbnB1dC5zZWxlY3Rpb25FbmRdOyB9Y2F0Y2goZSl7fSB9IH0KCiAgICAvLyBEZXV4IHBvaW50cyBkZSBtb250YWdlIDogbGEgY2FydGUgZGFucyBsZSBwcmVtaWVyIMOpY3JhbiwgbGEgc3VpdGUgZW4gcGxlaW5lIGxhcmdldXIuCiAgICBpZiAoaGVybykgewogICAgICBoZXJvLmlubmVySFRNTCA9ICcnOwogICAgICB2YXIgY2FydGVIZXJvID0gdGhpcy5sZWN0dXJlKHRoaXMubW9iaWxlLCAnaGVybycpOwogICAgICBpZiAoY2FydGVIZXJvKSBoZXJvLmFwcGVuZENoaWxkKGNhcnRlSGVybyk7CiAgICAgIC8vIExhIHLDqXNlcnZhdGlvbiBkZSBjaGFyZ2VtZW50IHNlIGzDqHZlIGF1IGTDqW1vbnRhZ2UsIHNpbm9uIGxlIGjDqXJvcyBnYXJkZSB1biB2aWRlLgogICAgICBoZXJvLnN0eWxlLm1pbkhlaWdodCA9IGNhcnRlSGVybyA/ICcnIDogJzBweCc7CiAgICB9CiAgICBpZiAoaG9zdCkgewogICAgICBob3N0LmlubmVySFRNTCA9ICcnOwogICAgICB2YXIgcGxlaW4gPSB0aGlzLmxlY3R1cmUodGhpcy5tb2JpbGUpOwogICAgICBpZiAocGxlaW4pIGhvc3QuYXBwZW5kQ2hpbGQocGxlaW4pOwogICAgICBob3N0LnN0eWxlLm1pbkhlaWdodCA9IHBsZWluID8gJycgOiAnMHB4JzsKICAgIH0KICAgIHZhciBjaWJsZSA9IGhvc3QgfHwgaGVybzsKICAgIHZhciBwb3AgPSB0aGlzLnBvcHVwUmVsZXZlKHRoaXMubW9iaWxlKTsKICAgIGlmIChwb3AgJiYgY2libGUpIGNpYmxlLmFwcGVuZENoaWxkKHBvcCk7CiAgICBpZihzdiE9bnVsbCl7IHZhciBuaT0oY2libGUmJmNpYmxlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKSl8fChoZXJvJiZoZXJvLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKSk7IGlmKG5pKXsgbmkudmFsdWU9c3Y7IGlmKGZvYyl7IHRyeXsgbmkuZm9jdXMoKTsgaWYoc2VsKSBuaS5zZXRTZWxlY3Rpb25SYW5nZShzZWxbMF0sc2VsWzFdKTsgfWNhdGNoKGUpe30gfSB9IH0KICB9CgogIGV5ZWJyb3codCxjb2xvcixzaXplLG51bSl7CiAgICBjb25zdCBlbD1SZWFjdC5jcmVhdGVFbGVtZW50LCBiYXNlPXtmb250U2l6ZTooc2l6ZXx8MTIpKydweCcsZm9udFdlaWdodDo2MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGxpbmVIZWlnaHQ6MS40fTsKICAgIGlmKCFjb2xvcnx8Y29sb3I9PT1OQVZZKSByZXR1cm4gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGdhcDonMTFweCd9fSwKICAgICAgbnVtP2VsKCdzcGFuJyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6JzE1cHgnLGZvbnRTdHlsZTonaXRhbGljJyxjb2xvcjonI2M0MTczYScsZmxleFNocmluazowfX0sbnVtKTplbCgnc3Bhbicse3N0eWxlOnt3aWR0aDonMjJweCcsaGVpZ2h0OicycHgnLGJhY2tncm91bmQ6UkVELGZsZXhTaHJpbms6MH19KSwKICAgICAgZWwoJ3NwYW4nLHtzdHlsZTpPYmplY3QuYXNzaWduKHt9LGJhc2Use2NvbG9yOicjYzQxNzNhJyx3aGl0ZVNwYWNlOidub3dyYXAnfSl9LHQpKTsKICAgIHJldHVybiBlbCgnZGl2Jyx7c3R5bGU6T2JqZWN0LmFzc2lnbih7fSxiYXNlLHtjb2xvcjpjb2xvcix3aGl0ZVNwYWNlOidub3dyYXAnfSl9LHQpOwogIH0KCiAgLy8gZmFjLXNpbWlsw6kgZGUgbGEgY291dmVydHVyZSBkdSBkb3NzaWVyLCDDoCBsJ8OpY2hlbGxlCgogIGxlY3R1cmUobSxwbGFjZSl7CiAgICBjb25zdCBlbD1SZWFjdC5jcmVhdGVFbGVtZW50OwogICAgY29uc3QgaW5uZXI9Yz0+ZWwoJ2Rpdicse3N0eWxlOnttYXhXaWR0aDptPydub25lJzonMTA2MHB4JyxtYXJnaW46JzAgYXV0bycscGFkZGluZzptPycwIDI0cHgnOicwIDYwcHgnfX0sYyk7CiAgICBjb25zdCBldGF0PSh0aGlzLnN0YXRlLmRpYWcmJnRoaXMuc3RhdGUuZGlhZyE9PSdkZXBvdCcpP3RoaXMuc3RhdGUuZGlhZzonZGVwb3QnOwogICAgY29uc3Qga2ljaz0odCxjKT0+ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMC41cHgnOicxMXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6Y3x8R1JFWX19LHQpOwoKICAgIGNvbnN0IGNoaWZmcmU9KG4sbGFiLHN1Yixmb3J0KT0+ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNXB4Jyxib3JkZXJUb3A6JzJweCBzb2xpZCAnKyhmb3J0P1JFRDpOQVZZKSxwYWRkaW5nVG9wOm0/JzEycHgnOicxNHB4J319LAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMzBweCc6JzM4cHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjVlbScsY29sb3I6TkFWWX19LG4pLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGZvbnRXZWlnaHQ6NjAwLGxpbmVIZWlnaHQ6MS4zNSxjb2xvcjpOQVZZfX0sbGFiKSwKICAgICAgc3ViP2VsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LHN1Yik6bnVsbCk7CgogICAgY29uc3Qgc3VqZXQ9KHQsZW5qZXUpPT5lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6bT8nMTBweCc6JzEycHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzExcHggMCc6JzEzcHggMCd9fSwKICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOic4cHgnLGhlaWdodDonOHB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Ub3A6JzZweCd9fSksCiAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXg6JzEgMSAwJyxtaW5XaWR0aDowLGZvbnRTaXplOm0/JzE1cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS40NSxjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sdCksCiAgICAgIChlbmpldSE9bnVsbCk/ZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOicjYzQxNzNhJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0sZW5qZXUrJyB0cmltZXN0cmVzIGVuIGpldScpOm51bGwpOwoKCiAgICBjb25zdCBjYXJ0ZT0oa2lkcyxwcmluY2lwYWxlKT0+ZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOihwcmluY2lwYWxlPyczcHggc29saWQgJytSRUQ6JzJweCBzb2xpZCAnK05BVlkpLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJveFNoYWRvdzpwcmluY2lwYWxlPycwIDMwcHggNzBweCAtNDJweCByZ2JhKDE0LDE5LDc5LDAuMzgpJzonbm9uZScscGFkZGluZzptPyhwcmluY2lwYWxlPycyNHB4IDE4cHggMjZweCc6JzIwcHggMThweCAyMnB4Jyk6KHByaW5jaXBhbGU/JzM0cHggMzRweCAzNnB4JzonMjhweCAyOHB4IDMwcHgnKSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMnB4JzonMTRweCd9fSxraWRzKTsKCiAgICAvLyBMYSBjYXJ0ZSBkdSBwcmVtaWVyIMOpY3JhbiA6IHVuZSBzZXVsZSB6b25lIGNsYWlyZSwgZGV1eCBwb3J0ZXMsIGxlIHByaXggZW4gcGllZC4KICAgIGNvbnN0IGRlcG90PWVsKCdkaXYnLHtvbkRyYWdPdmVyOmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIHo9ZS5jdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXpvbmVdJyk7aWYoeil7ei5zdHlsZS5ib3JkZXJDb2xvcj1SRUQ7ei5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmN2Y4Jzt9fSxvbkRyYWdMZWF2ZTplPT57dmFyIHo9ZS5jdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXpvbmVdJyk7aWYoeil7ei5zdHlsZS5ib3JkZXJDb2xvcj0nI2M5Y2ZkYSc7ei5zdHlsZS5iYWNrZ3JvdW5kPScjZmJmY2ZlJzt9fSxvbkRyb3A6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgej1lLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcignW2RhdGEtem9uZV0nKTtpZih6KXt6LnN0eWxlLmJvcmRlckNvbG9yPScjYzljZmRhJzt6LnN0eWxlLmJhY2tncm91bmQ9JyNmYmZjZmUnO312YXIgX2Y9ZS5kYXRhVHJhbnNmZXImJmUuZGF0YVRyYW5zZmVyLmZpbGVzJiZlLmRhdGFUcmFuc2Zlci5maWxlc1swXTtpZihfZil0aGlzLmxpcmVSZWxldmUoX2YpO30sDQogICAgICBzdHlsZTp7Ym9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDonM3B4IHNvbGlkICcrUkVELGJhY2tncm91bmQ6JyNmZmZmZmYnLGJveFNoYWRvdzonMCAzNHB4IDgwcHggLTQwcHggcmdiYSgzLDYsMzIsMC42NSknLHBhZGRpbmc6bT8nMjBweCAxOHB4IDIycHgnOiczMHB4IDMwcHggMjhweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTNweCc6JzE2cHgnfX0sDQoNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOicjNkM3MTc5J319LCdQcsOpLWFuYWx5c2UgYXV0b21hdGlxdWUgZ3JhdHVpdGUnKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTlweCc6JzIxcHgnLGxpbmVIZWlnaHQ6MS4yNSxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMTJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnRMOpcG9zZXogdm90cmUgcmVsZXbDqS4gVm91cyB2ZXJyZXogY2UgcXVcdTIwMTlpbCBwb3J0ZS4nKSwNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnVW5lIGxlY3R1cmUgYXV0b21hdGlxdWUgcGFzc2UgNjAgY29udHLDtGxlcyBzdXIgY2hhcXVlIGFubsOpZSBkZSB2b3RyZSBjYXJyacOocmUgZXQgcmVww6hyZSBsZXMgcHJlbWllcnMgcG9pbnRzIMOgIHbDqXJpZmllci4gUsOpc3VsdGF0IGltbcOpZGlhdCwgw6AgbFx1MjAxOcOpY3Jhbi4nKSwNCg0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc4cHgnOic5cHgnfX0sZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nOHB4JzonMTBweCcsYWxpZ25JdGVtczonZmxleC1zdGFydCd9fSxlbCgnaW1nJyx7c3JjOidkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdScG9PQUFCWFJVSlFWbEE0SUk0T0FBRHdkZ0NkQVNwVUFlRUJQbUV3azBla0l6K2hJTlJNRy9BTUNXZHU0WEV3elhUbko3N0t6YStqZk41NlhmOGQ2Z0g2YzlSSHpBZnJwNnNuK3k5VG4rRzlRRC9BZFRYNkJmN2grbko3T1A5eC83L3BEYXM3NW4vMDNjVi9yTWVxM3Z4YzhyK0FFNmp0Qy9hVDY3MzBlb2lyU1RMdjhyL21mVlgwU2ZYUEFuOUUwcVkxYjJGNFJsTXBsTXBsTXBsTXBsSFFDMUhIcjNFNjI4VHZPb29UdldIUk9kS1NMS3Jjem1jem1jem1jem1DZ3I3bS9VVDUxZm5qQTZDME4vUnY4ZVpEazU4WDgwZjhCQnJhak1jSUh5QUw1Zkw1Zkw1Zkw1Zk1TOXJ4UHgrUHgrUHgrUHhRaml3VUJDaWh2U2dvTkRSc1ljOExvSlk3N2dWYyszblRUNHBWWFk5RDJPZzB1VEE3cDcvNzJjb2ZlS1B6TWZwQ3BLeFJMN2FKOG8rSDdheDF3R2RLci9EaDl0azRadUVsSm1nTnNLbHU0VVZtNUtoSlZXTjh6QTd1SG1vV0JpaEdVS1RHMDFENkRFMW0xNUdpVzJRS1BRL2pHRTV2VVZIakxqYUtVaGdVUTh6TjErUUNLMm5TTDh6SFNndzUzSExFVjVOejBiNnY2QmkwWEdaUFJvRnFCN1VIeXFOakRuMjgvUUVKZVdDS3NtdlhFUlBBK3pLeURZVWJPYlB1OUZ1Y2tueDZXTm44cWpZd3Jlak54azFCVzFjSW15VmxqMjgvTklMN2QrdXp4V1EwQkNpaHhPdDV3cDVLUC9TdndDZGwxQ1BuK3JuYjM4SHdVVURha2xxczVTWDBoWTN1eitGeGxrTUF5NkV5MnQ2bU5mM1pYUlBVSDVKWGhxdzU4QnUzR05kKy94VU1CNFJzZ280R3lPT3lRTjhzdloxTGhxWWF3OVNUVkk5MG1XQWZ4dVB4Q2szTWJjNUNiQmd4MThqMFNtNXNrbldBa0s0STV4Szd0SS9PUEZUY2NoWTRSY2YySkw1M3NkRHZSZ2VWMDIwNjRNTFliNzA0NTR5L3ZicEgvMVdjUnhlWVBsM1RhQmVheit3MGV1YjU5TUFqRTYwNyszYTZTRUxQUjBWWlJzV2greDBYOUo5QlNIWDd6b2JlVEpLQzBRYmJTakhmWHVPM0lUNWtkdmt0bzR0enZFNWRoSjhRSDVnNjViQ2F6by84VytZdHpCZVN4cy9sVWJHSFB0NStnSVREaStad2RYNnAzaEZrNGxrUWhZYyszbjZBaFJRNG5YT1g0VHJzWld6a25oQktLU1h4eTV5dG9vY1RZWHkyK1MvbFViR0hQdGtwZUU4TlVZRzg4QnpVZHZQMEJDaWh4T3VjdjVWR3duT3NwcXVTVnhiY3RwQ1BHeGh6N2Vmb0NGRkRpZGM1ZndTN1craCtwdmpLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWlRLWVF0Y1lNZWpZdzU5dlAwQW5FaUx5RXMxOGNhdXNLTlA2WFpsTXlZOERCc3hLZE5kSG5rM0YyRGorbmNzV3E5dStLd1AzKzlzU1FQUHBrVDNxZnhaYytwWHVIMFNUUHAxN0V5aVhScU5ScU5ScU5ScU5ScU5SbXdBQS92OXJJOFE5MHo0RXIrbDdnbGs4Sy9HRlFrSERlT0k1V0o4QUFDZ3Q5Rno3amR5WUd1bWVEWXVaZVpUc0N1SDJOMEhxREZSS1hKMzRabi9Qd2hFQkgxOVhrR0tnVXFaNTF2YnNPNGdKWmhvTmZoTE5CbWxnUHVyU0kyNXdhNE55Q1l1R0pFbjJLN3RxRU5VNGFlZ0Z4NkM1QVJaNWZCR013cWxKZXo4dEVRYTYzelQ0U05mczJvSHRwcmJSUGJhY2VkdVpXeTlQUkZ4bXdxM2E3cjhPTklwcWxsbG55NVBWL1RUbnJmMHBsbGxWMm9xc3VEK0VmT042eUdsTUtKOWZvaFovcVB5ak8waEsrUk1nSTBQU1JDQkpIbU5UcmRVTDRQemJaUWhLZzBRWEpyNXBNYUdUVk5sdVk3RmZiWkRvcGROSHlxbURPWnZiMk8xK1ZoeTg5Y2ZaaGt4NUpuaE1tTDRoc2dBSEhPMXplUE85aVRVSSsydmYvZVpyUUZYN1hMWEhIR2xCYnJpOEIxZ1RKaTJud2VKODdOUHBCbDhzSCtLWG0yeVlvNFNwZUc4RHFQUGg2RzVDSW52M0REWU4zdE9MWmg0eVplNnF2N0JTOTd2T0lVbW5BbEVpaXpvSTJSQ3ZzbVNRV21DLzVSdXdVOGhpVDRpQkw0Ukp6d3hWLzIzYy9WdEVITjA4VUlBUm9NZ3VIMUxXL0IzT0hvKzloWEFhdzFESGRjT3Z2dktGZEpha3pPUS8wMm4rbmc0OWR0bi9tZmhtWDMvRWFmQjNCZkxreUMyMlE1cmkvWi93anVYZlF1QVg3dkNoQTJ5Zm5UZjJlSGNtTnptUzBkNmEySmZYSHBKMWkzYjZTZkZUbGk3TmFzL0NTanFoU0Y3WFFUN0pVYTk3aksralljdnVrUUlDdUZ4aXJ5eFdJOGk0NFZURzE3dFFFZnovejhEK25GZ2pzam9SVEM2cnRTSThncGZpQVpvQmRxd1BxT0o5NFRCaVgyUXgrZFl3MkIyRjY4OWhaZVRuRU9nS1ZwRGpxTTJUUm5xNy9MRTBtRXNBdDZQSzgvbzN2clJxdEY5L3VqRWVzUXRtVkd6T1FSNjlSKzQ1MlgxNjhKVTBYOWlUZElMQUFyejZoUDhaUSt3SXpZamozU0Z5djJENldvRWo5dHhBOFVzZFNwWWRlcGl5ZVRNbVY1N2R5dEVudHNld0FBQUFBQUpvZENBc0ZlVU0rTFBJVnYrcnpCdGtTRFBNQmRpRkhyM2NpWFhUOHFrTkJXTDRXczdhS0h1SDBoNjRkYnRndWZpTGcwc2dYR3pmSi9MQzJGRVdVUEZzUWJOTU5TSkdRL0pid2pMMm1KSndWelR4aVA4Wm9pclI3ZkgzMVVaN0pxUWtYVTBoTTJWODM1Rys0bUJOY3RnRWhITU9Rb3NnUUZzTThDcW5ZUUFBSUw2R3lJTkxhZ1ROQUhaa3FZOUFiUThKVlh1allLd01UZ1A2MENyM2NsejQ5LzZkajIvL05tM1BGNE5QS29VMUY2KytHR3NkcXlQeC9xWkkvaDlRdDErSWVVTGFNTk9BOXJDYlB0amNOV3JXaVFQZFVOL05veVNYSUIzRmx6VW5HS2Y2T0k5S0hEdkw0M2VXMVNuaHBLZmJIWjBaRStLM0EvNVFKR2hRRkxTSHR2YlBMTFlVdlo1T0FvakgxM1pIQTZFblIvWFBDcjhCNVZLWHZUREpYb2l3OEdwbGRkWGtreCt4QlNPTWVheDA4WUx0OGhPVmVKQVBzY0NabURqazMyekp4VmUrdUlUTVVZb1hTZEpLUG9FNDJXY05zc3h6L0gxSE1pSmxIbWtSd2lUWlFGdFRGaUh4QXczMlJibFlIRVgxQUN1UlRyalBBUW9lVUVhdW93Z040RFJZQUFBQU9uU0JJRUpDN3JGZW1PQUMzM1IyYkFVSXRoaHhGUnp2QkZYcDlxcHdSQ2xRMll1NHZyeEd6cU9pSVhHREUrWGk0cllWd3FkQkRkdjhpZ2lXaE5WVFlsVTRtV3BtTStkQUUxTWQ1dFc5YUhiNEt4RVdoQnNSOTFQakVOZXpLZ0RRUWJCaGt4OS9nK2RpeFlqWGN5Q0xNVHE5ZWpaeGtDVXU5bVRTbWorVUVIOENqWlA0bGRZMVc3QklVT21JcDBhWGFTbjRtTitFb3NSRGRxM1A2b2hWNE85OGsyQmpTRmNvaGxyaGZWNWxDVXIya0gwR0pzWnpYZml4M2h5em4vTGJneDgrcjNSZEVuVEgrUnVwZDVmNEJDelkwYm5VUmpaZXpmWnFQZE4wRkpLeDVRckV5c0tTL0xMY2p3em96ZVlyOHlPbjNkTU54VnVKV2xDYU5rVXVkdnhjOVZySGE5L1UvRDZlRkFRWWR3Ykg4M21vbVFLa3BxUEF2M3hWZzJmaGxraTV4UUZnbVdBK0QrTEFWWFF3a3NtUUw4Rk1zVjJNVUtLV1FnN2lTSG1JR0syNzMrRUhHK2oxTVlHakxkbDkyc1hZVDJiUUlpanFIZG9YSGV5amR6WmJYMzJhWkVYY09CbW8wOWJKQlBMOE90cW1NVW9Md1NCU3BhQ1NxQ3N6dTJrdG9wUGd4UG1nODhUa0dhWHJ4K2doblVYNU1LUCswTnhqcVlnYld0blVmc2xueUhydHVKeU0wNDd5ekRTZUdNNGxRdHB2Y09ib0tQQ0p3V28rbjBJczJwRDZlNnJCekFEbTRaRUhJQUpZVTI3cGNzS2J4UW9mTUlmN0U2cGFRUzU3a09hMmRnOVBoR2lwZ2ppOHdOY1hDVTRsdjR0ZHc1V2c4ZUtOTjF3aFdBdUF1bm5VMG9sVjR3THdHTEN2ZVEraGMyM0FqNFdkWHdUaHdUYm1rQ0ZvQ3lrT0hPaGpHUlEwVkVRUFNsd1BHV2VCbFFybVFzT1JPcEpadGd2NGVUWktkSVRxa2hCTUdTN1hKUzFrYnpTUHorSTJrVFpLM21yRytQWGpzZ0FoWitqM2taRkpOK0ZMSGlBYjE3NWF2MTRmV01DZzNpd1pVTktKQ0ppa3lnQzEvQmJwUi8ydnptVC9lRitobWNnSnlzZ1RCQjc4ZHpOVHo4aFlrWXZCa21ManBFbVdhTWxEaHJ1NVZZVjRMdGZScE92MkpwUEM1d0FsekRBMkVGdHlCalppeUF2S2xwcVhuZ0xaOGdrSkdEa1J1ZlVGZGhrdWh3bkZXaUpPS0dKU1F0anRNUlFFZ3VILzJtajJlNmltUVFSMlN3clQ5eHhHKys3U1MvNkdCNk5HSGFvcHhYVzRlNjhuUFpNbFhVRk5RczlZN1J1RXpWb21CNndLY0RzY0tKKytHZk13cCsyR3ZMOG9oTFhRMzhmYWFNanZDUno1YW5Dai9yL2JOaktFZS8xcU5ta0lUOVEyVmRsZlpzRDVxaFFXYTB6ay9RTGpRTExoRVR5K2EwcE84NU52ZTdISkdVMzY5QWcrYitaWDN0NmphbmVVNXBLcC9TNWlIRWM4Q2VjWFhZNjI5ZnV2SjhSQjlpeTJDeWRBZUZBWEd2RHVxVDhCM21QYmVvNjRwU1lQTWtVa283ekdqa0tSUEo3QUZjazl2YWwwN0JGdWRROURnc0hNanZudG1DbTllV1lhZ3p1cmlDOThvNHJDOTFZOUh3U2x3VTcycm9jVEJHQXZVaGRQdks3QUZPSE9nRHFNOWtSOFhXVjBxMW1ZK1RjbHRIRis0cGsyS1NtaDd0b1BsNzU4ZTNYbTNqSWhwYW1iNUVna2dRMnFZSDZKNnVJSEZKWmJFeSt4eDV1M0dZbDhCaG5ZY2lGN3RqQXZRSytkV3ZzRWg4d3RiU2FhK0gvTHFkWldwbEFiQnp6THdDWEtObHh2LzFNa2gybWQ0WnlBSzlFUFRLWnRZZHNlR1FzQnFOMDFhUlRXeUNYY1RLMVhlODFmVWlnSnhtdzVWQnRMdGJFaHJlWGxhTDJnQmN0QmFyQnB1eFNoZW45V05Zdm10MXFwejRWQnkzdjhqck5hcDF4bFZGSWZUYUNpOTI1ellSMHlaU1poRDU1UTRZZWVBMUVpMXV0dmZ4MG02Wlo3cEdZcm9SQU9QaWVQOE01RXBhdnJMcktXSUsyZU1Edm5Md1l4RkMvWmZXeHAwVWtoNnNaMzFrMXJjSnk4SElBK1pvSFRZdGZzMTlrZVRmQ1FLSW9yeldEY1c2TjQwM3phMFVLTFhlUkszZnFZS2NVVm5kZE80ZlZOV21ZYWluZGphTXBqa0VXL2xxK2s0dnRFQmVUMUpUSjY4V1RubklqTU94VDlFTVJKbzZHSC9ETUFsSTVhOGo3emZXa0MrN3dXU3dReG5iTUNwQnBIY01iOU9xRXd6U0hXVjVjQmN5SEtUUVFjeHR0VnlWV1Rqa2pEcmlGNU1jS0ZLMkNCSGpSdnpNZ1VhZTU0K0wwdVA0UzJTOEtSWHQ4dUFyRkVrRE8rajhpWFJBN3hqYWtvRVN6WkRGSmp4NS9sTVpCMy9nUWtSVnRXWFdJQ0I1WWZXcGQ0OUx0MlhhSVJWempZVTk3QmxVaWZ2QWpTK3I4STVBZWg2VjVLTTBUbEZtckhHaG5yOEJlalBZd0EvTTkrKzJOMUVOYWw1a2NRcUxrcndDSHJ6WXZvMGNQSzdGempPVTdGOWtSZXFjbnBOK0JablpJQUlsdVpPSXQ4MEZGUGtMSEJBUEZ0aVdRQUFBQUFBQUFBQUFBQUFCcUxUS0h1dllUYXY4YVk1TFZxZWhHdDg1VGhvUm5LZTVrU2h2Vk13b3lFaElTR0VBR01UaDZ2TUpvNzFPZmlQMU1NTDJPbjhuYWszdnRkOTBMekFBQTFiUzJvbnVjdm9MNERtVCtDaXBMbHJzSEZMbXdrcmhkMThRQUFBQUFBQUFBQUFBQT0nLGFsdDonUHJlbWnDqHJlIHBhZ2UgZOKAmXVuIHJlbGV2w6kgZGUgY2FycmnDqHJlJyxsb2FkaW5nOidsYXp5JyxzdHlsZTp7d2lkdGg6JzUwJScsaGVpZ2h0OidhdXRvJyxkaXNwbGF5OidibG9jaycsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclJhZGl1czonM3B4Jyxib3hTaGFkb3c6JzAgOHB4IDIwcHggLTEycHggcmdiYSgzLDYsMzIsMC40NSknfX0pLGVsKCdpbWcnLHtzcmM6J2RhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JuZ3RBQUJYUlVKUVZsQTRJR3d0QUFBUTJRQ2RBU3BVQWVFQlBtRXNrVVdrSXFHWEszeDBRQVlFdExkcjBMTTlrRFVaL1dmR2cxVHZOdWRDcnoxQWZvZnZuL20vSUVQYzhRbVFEL04rZnYvWDhQWDJUMENmOHIvLzlldDZSdjhBLy8vcEhQbHNQTEcrQU1jTndrdkxQUVAvay9yRk9lZG1zbXlkQ3c1cDNYZDZlOTV2OWEvRUU3eHhQTC8vb1YyeHZSZFhsLzZkV1RBK2RmN1I2Vy9vdjhoNHo2dlM5UDlsMFBQdi8rY25aUDhUTlFoMS81QXpBdmQzOEwrOUhrUGZmSHFKeFc5Nm4rSDlRajkrK3NOOWQvb2svbS8vRjdCbitpLzlYWGM5SWdxNVl5b2hWOVgxZlY0Y3JwSHN1VUhScU1DVXdLQ1pDbi83aWVMN0x5dHNCRjVpeGJxbThWYTQrRTlOL0JKdEJ0NDBsM1pGQWJMY3h5Y1JBZ01hcTI0djk2UnVEWmJWbGZnM3pMWTF2ZzBNUDFZdG8xWnpXR0tSc3lIeUtwMkRROEg4R0p6MjlrTTUxWFdpWXI2T0tBaU9ZOS81R2U4NDhsN0YwWnpjd3JBWUNYOWJuMjZUamM5ajF2dzBSeStEdWZXeTZPYlV0TUFnWjNNVEpzdDVjWFJ6NTk3SThMNG94WWNSL1ZQNkJ6RDNTSDNCbi9BSEJGdjFOdjVWRU5Eelc4SWxzRXJFSTFqV2F2RjVkUXBzeXpZbzd5NldnUzgvbUxxSEZIdnVjRHVwQUdZeGNBajgvcUNoT3NsMVVGRVQ4WWsrWXpMWEFRMVgyU0xSNlFDaXdtaWRJZ3ZDMDdDNjdGbW5BdERtQUFrN1NzRUREUXRPbHVmZnhTeGsvLzBDU3MrSlhhVWdoNmpXekUyYnBoS0xiREpjbUxkK2xQQ2ZGdlV6UEw3ZlhwMVNxbk00N0FRVFNwSExId0lCR2dFbEF1UE41UHc2STB2YXZueWF2cjJEWlNUSXNUYVRsbDRiN05zeUR6TjZaRTNqcS9CMkZZZFN0bmM1YVBLekNhb1NqbDQ0UjZWU1grdHRKdHNtQmF2MEpzYWZ0TzE4b2g1N245cHRSMU1pODRpZzZoMjZ2QW1PZ1gzdU5haXZlY05Qa1F4dWQrd0xheE1abGhoMjJBZUdsK215NGJtMWg2QklGdEpJR2Q2SjFNWU1RZFFmYldKcS82Zm15cTdUNnhWaWEvSWxpam9tK29KOGl3dEY1dzJHTDgrTCticmVsWDF5UFBSU2tzdFBYaWdxeVV2aHJoVVBscUI2eVJDTnQ0dXNURzFSRW1reE1uczhCTVR0WTI4eUR4LzNZWnFabGsxRUxrY1FVZW9HOWpISTV1WlQ5ZzdGNkNPUk8wQkhYeThmQkdSMnZQUG5uK3NzOUE2aWxhY0NiZWtUemZocHJKL0tTbXFuNkRha2lFanI5Vit5QzYxeHljN2pFd2FqcGFpeE8vWitZODRScFRkTTk0dGVtUkRrWm1LTFA4V3A3dnp5NmFtdXBQVmtrOU9IaFFqT0lnTW5IeHNwZk1ZbUpnOUxmWlpLeDhJdDJnOUlCWnU2dUdYUnNTV3V4MGxJUThPUnh0SFJqd0RlSThFYmpLSXhTSlFYbE1Kd1RydC9VNDlKUWllanZlMmhxeG1HS3JHQVk5V3kwMUx6UHIySkhkMVY4QkJyUCtGTGkzVE5iSUhsTTVHckJaNWVua05rTllZeTV0T012N3h5MS9VRHZNVzBncytESVc1Q0piSmN5YlVCU3huVXdldUJlUHdyeUpkMWQxU2pzb2sxSDI1R24xakRYNi9sZWRIZnFEMFdGR1hic3VEQ1dyb3pyUTZLZnR1cmpaQnlSYW1QTDhOLzlib3hONnhTVnNIc3RnaUtYSG5ndUlueHdMT1l0S3c1U0ZURElzOUpOLy92WHd2TzlmYXFhS0Mrb3dMandmaFlQTEtWdm0yRXFtdCtPVE53Zjh3VTREQUN3WWwwWDVwOXJaTjR6bTBVT2xvR2RPUjZBU1VtclgvK2Q2YkVDczhGMnp4a3l3UnFCYTVKVjlCQ1NpVmNDZHBOTWMwN2JGQ3RFa2c1U2doRWdxWTlhY3daTHlhNnpHOXlxVUN2UitvdjVHNnAzb0ZDd0pHTlQxR2ZnTzdjN0hiMkwvMmMyVEdjZk8vRytQRXdVbGhBR1BwMlQ3TXBiMWJoTmVZMStvVnhGbTRZb1pZMjhtdFhlZi8rVmlZWDVsazJxdGRBNDlpT1RRNU5oSkxRMDRidnlUR1V5akd3UC9iMEp0Vyt0ZGtuMEFKRUZxMFdIRks3S1hjYUlFVGdTYitOK0wxSmxDTEtmVUZ0aWVLSmU2V0VVaXZLV3ZTanEwNkgxNFQyOW1WalA3NDRuRC9naXIvajNxZTNHRXY5K0dGRDlTTm5NZ0pPSHl2dUJSWDA0cFdzbGlBRWV2eG4wK3B6OW82MG9uUTYzTFE0MnIzdFM2M0szeDFmSHB3QzBab1ltQTZIUHhBQ2g3eEVrVHN4cEJOUlNreHJUZTY4L0h1T3V0MzJycDA4QzduaCtGY2ozNEg1YWNETnZNc3BZaVI3OCtBMjlRVVpJZ09BRHQyckRjVEZkTE5EVXRWU2JsVEU0ZXQrNGRVVTVqQ0tEdWJjNk5GcG52MlN4Yk9vamIwb21RNFdyRVhWS1hEVG5Pd2lMalBIUGRIVHF3SEJ5dnZZZy9BazRZNXBlNmJrcFhzTUV0VmNscDJYUVdwVDhSRTh2MFRlM0hDSnlXQWZReFhqUEhuNXhPN2xESnNBdERCL3ZoOFhWdkk0K0FTNU1oNkw5T1ZKMWtIc0V5OU45RTJvUEdZRml2bkYxencwci9GbW5ialA0a2RNNFhUb0xPcXc2VWFYblBnWUt2dTYzTjE3R1lFQ3BrMGdpTEVrdWpzUklwZlJESEZsWVpSUm9WQVQ5SmtZZ0JxMUNhZ2UrNGhaTEptT1orY291S0RGWEJKK0pyWnFCYjNWQ2NPQmxsU0NkZWg1aEtZTVVNZk53WGhNYjFlNE5HdlNJMWI0WjY3QkwzM0tEbzFNSkV2U0lzVkJLWUZCMGFqQWxNQ2c2TlE4QUFEKy9zeVd4TitwZHVoM0wyQzNRNWxXc0JVb1pWaFFBQUlsRGJrUEYwaHdGU3g0c1lMdkt1YXd4OHVYL0pQd01lbGhac2h4OGJGYjJUWU5RQjArU3NzeDdOTFlJRXRCWlVZM3hOcDdqVUZHeXJTbTlzVFdyWGNjRUdMR0diV1ZaSzV4UVQ1akFZNVVhNk1Ed3h3TkgyMTcweERBR3NwNHZ2alNING5GZGx5ZHZadndnYSs3ZHJaRGZENVJhTDFROTdiUjV0cEJOeStIY3c3NTdUY3dLS2FNRWpyR3cxQzhCOWs0emc2RGRuQUhqYVNiK20rY0pBenM3MUlQSlJzZVZNbkRxUTNOdEVpSzc0QS95Y1dEK1JSTDVSZUE1blozbkNBdFpyaFlTQXQwUk5qWnduNWQ3UHRJZlo2Z3p0R01zRXJ3ckh6VFhaL0NJaXlWNmFVU3oraDA1M3RKRWhXNklJeTlGT2xkM2hDUjZzYnNiZXRYbWlDT3QyRkJBa1dvYmpVZUdoMmdwTW9UUFdjSWd5MFo2MEpiRUxDc1NBRzhNdmI3L1NmQUhmYzkvMTVNUlJDT2R1UGFoTVhXU3Zjbjhkd01rbmFFRlZ2d2VjNUoycWV6RUVjSTFTMVlmUGVRa0dRS3lXWjBhTXhlSE5DQ2tITW5PYlA0TWlTVkdlSHQ0b1IzSzhOR1VNdlY2U0JkTFlocjgzZStDbEZkWHpOMkYwNDZYMGVxSnlCNnVlaXY2dGFMQmYrMEdpOTNYQW1GamJsV0lDOUdHVHNCWUVLNnhhS0tKOEdVZGtZajAzeGFBS2ErcU5pb296WE5TWjU3MEJNRGNRQlRYMVNMRTlhbHhkSVNvL0JQb3pWdlZpL05oL0kzS0NSN25HdEdRdy9nZjVCK29pZXVLRTNyTW03ZUVPS0RwY1BZeGY0aWxabG1jdDc3WWR3YzFscGtOUzhYYUUrR3VRVGNnd2FsMXI3WC90Um4vTVEveml5VFlqQ1EwdUtxcmF4dThxcUdpc2FZSnZOTkI2Vis2eTVPTW42QldqenZuL0RMcGpOYlhPaldvNDdvOGZGOVhlKzRLQmxKTGtKeWRrZ2crNVlIV3QzeXNSc0RrdThkbHBQR0JJZFpaL2hyaFZOc2NkME9lNm1aQ1JHYVA5VTBwNFRyRFRXTE9HTmxyeklsNlFOdWRLVW1lUkxxTFE2Zm83TUtnTU0wOXBwVlBhd0tYamFNMHAvNi83WXBCbEtBQlFZMWxVT3VqeGQ3V09DS3dBVmlnN1p2WE9aelQwdVZTRFZRbzYzMDhYYnFxK1ZiR0lDTG1ubUFnNmFxVFpPZ1NFRko0N0VTRlk2WnJ2dlFSY292cmRveFNRSk1lOVBaZ09DRk5jczZjbnZzVDk2dlg5NUFiOUtRWUI2YU1vMXNLQUlxMklQZ1oyamo4NlZkYkw1ME5wdUZqa0tkM2FURkdiOUtPRjZ3S1lIZDhDREF1dERWN280RHVnNTJBSVJNQWdSdDZOV2kzUnQ4cXJULzN2SWRjNXNxOGlpWUZCdjlLREhWTG8rbjhmT011ejEvZUczaVBNQnFtTHVPcDRrS0tEckFmMkRuQWdmV0FsRFZIOVA4amxhODVTc01OY1V6a1ViRVNYamdiMldZUzB4SzVjVlhxSlBJOUpaZHJtZ1FVMnRvcHFVMlBocDU3Wnd5Z00zdXJDSVYwb2UvcXdoVUR3K2JqbHZNQ1BiRDdzSFpVdndVZ1RySzZpV2tJZGRVbFFZSGdXZi9yZVczOFpkZEh1RkRMQmE2NFdDanVkeHd4UVhlT3JTeVFiRmVmVnh3WWplRy9VeGMxQzBoWnZYaDR1enRaYnM3eTBwTDQyOTh3WEhQVE5CZGFzZCtyN0p1ZU8wLzFKVFJpanEvTVFHWEY2MTU2RWcxTGNCT1R5eE9zSXFJc0FBRW9zK0Uwa3owUGNyTXdPbWdwSldtWnVaZDhBWDhPZUxSeHJsYlVOL3VmbkpiQTNHTnRNazNiSW9lS0F6N2l5Z0M0YVBmYy9LQXVQNzM0bG1ISWtaN1IrbDdLMXVoVzh4SmU1ZFdxNm9NN0p1WHlFcHd0SU1RN0FyT1JOMjlnQW5XbnVlV2pQVDlNZjUvUUcrQmlhRXhwSHB0NDFvZEpRY0dyYmJEL3RNTXU3M1JjbXJaRGxmaTliS0JGSzB6K0pSZE9haXl5MGNtTVhVQms0NVphKy9tcUh5NThodVVUYlFCOG5nb3JEK2lYZmMvZTd3amtVR0lGTWRFdjNwdnYyTE5NS29LMFNLTmhrWTRoTHdpZ0RjWmVtQ1lJNUlDRUh5Y3l4M2RhRUx0WVhUZEIzOTZXdFdPWFVUOE9vaFBEbE9LRGVNU1NiY0thRXN4KzRBVnpXeVAvNFlYa0cwdmJnVTA3SE93RFlWdDVZc3pUVzZHRjhLQzBTUFZ6K3ZJTTBzVTJPcllwV1BjNDlnMlRBUXJtM0Q2NnRQTmFDL3dxVmMra0xLZmdZWllZdnFyWmQxZXdzZjZPYXNFZmU4d1R5MUFQdEZYVWVwVllEVEJUQ3piWHF2em8yeG9MNldnN1lYTFNGdUY3RFZkdzlDM21wZHFjalVJQ3FTZEl4QmF4OVpHK0ZWbkgwR3V3RGpGbFFnQmlBSlRjUllYSWUxeGxPZFQxYVVNRFF6a0h1VjVBam05dkFBQUFGNGtucWtYbFZMcSthczdSNXJ4ck5WTUNPeEZkTzczV1pwT29FaE9Sb0NRY0w4cVgrWlNLUGhjRHFMRk1ITll6bkhmdTNHOEkwTW41TzliYktjQUJNVC82MVBIcUZ0dEFUa051Y2NxcktVWW9xYy9QeTZCYkN5UkVtVTQ5Nkd2Z3pRS0U1ZmluUEp4OEZhNXh5UlhUMjVEbDN4WWQ2ajZIeE9nSHRnWFZsT3Bzb3NzS1U5YXhDNjNBOXRrUnZmbVdYRUFOakFseUFrWVdYVnA1ZjB3OHd3WW9XdmZ2M1lueUVMRFhhQWdmSXdhTW8zMXlOVUtNWnlzWnNneXR6Yjh1bE50ZTBjaDVMRy9FTUh0RUxYaE1RUWhwOTlqQ0ROTWZKMVhHTGIxME9JS3JmNHUwSWlEZmRIR2FwMzMrZnNxMVJHMWhQNTNOREl1RWVHSlczRTJHZlRNWFhQYllZVzA4UTBsUERtNlFWaGs4VVNKdzNkZXZRMjA3SmxBUVRDS0FKOU4zb09HUmFLR2FydjF6eWNOeXl0eTMvV0tPQnF1K2UvQzFWMFl0ODRGVHFDSWxoQWRLRW00VFlneUMwVnNoSklqUDJEUXpwNWZsSEIvTURPdlpucm5WMkVSMTM5SVB0bDNrQkR6OWlQbmVMN1c1bDNqL3JQNHMwNTRTSERsT3VibEYwaUtQUWNLK3orK3NQa29CRTROWjBCek1JYU1xMDJkNFYyR3JpQ3QyVDBCNmNDNzdKdWxWcWNRakxMWTNhSXp0dFJTSXp5WmlRbzhPd2o3QytmRStHRTFlc2ZqQ1ZIeE9pUXBtVEhKc2VuMHhQWHFsNCs0cFU2NzNlcnFCMUpXQXU4UUlSWUVlOEI0WVNBSk9TRm5PNEJ0TXJxaHYxeXQ3YnNVeEpWQVIwTGNWZjQ4Z0RORmpCOXZBVmtWdWpCVEQyNlFwa2tnTU5jazlRS0pjODRGUVpJbVBSdHgyTHlTenRpbW9RSEJZTGxZSUtYNXpMTHMyMkhYajR4VmZISmtVbWZyVzJVWERNT05EdmY5b2dKWHVPMFBrUkpEdThYVDB2bjh0TUU4enRWUTczaUl4U0Zkb2dwaG9Ycyt4Y0pIOVl1SUY0V1FwM1JGSktIZFViMFBsZllFZ0hqMkxTTTNtSTlWRHNlejhvLy83eGdVY3VPUWNzOFFMUDlTMFZuZWN6T2U1eXUzbitOTmQxcWdmZFZHaUxNWHVRM2xjYnFrUnorV0R0dnZibnU3TlRHeUNWRHRhUG9DMDJuZ3RzVnVJUmNleGhlUVUwU1ZtY1B4Wit4cU9NWCtzQ2lvRy91YjY4ditKWHFQendIczI5NjR1ZEFsalVKRmpoR0lBVjF5bnQ5U3hPSi92NXpLRVJXL0xlaUhoSFZoZEFVS2pFM3ZsSTl2MmsyZkZCc3lZOUcvQlFXWVR5Tkh4UW1hSGJlZjVDTnlUYlIxVzJKNElETVdkU2pZRER5Mm5qMmNianBLYUpMNmp5UG5FdGtBSE5BUGNLS0Y5RWZSb1pHZndOZy9SOCt1WEZ4d2RIeXhzWDZzZ2czWDNPSmZ1VDRISHFTMHJTTjZZZTRNejI1NC82NXl0WUhzOE9TNUVkZ21iUWJxSWNlQWhzQTExOHJVSkhFRkV3dkFCU2ZMNkF6aUFRWE1lYnQveHlCb1VFdGdHZEZsdjJlRjRaN2NOUlNvWWtxcHpDclRhNVdqRDVNQ3dyUlJaZU9welhDNnUvYlRyNWZPWk42UDZmbDhycHNBdUpDTnN3QUt0NFJHTU5QZFRxbGxjM0o1MzdSYWJkNTBXR0JhVklFOExpUlEzR2ROdVlVTmJ3Y1VmRmpoWXRKR0kyOW0xU1VZcDEzSExvNEppMklHVGFLeHZvSUlmY0MzeGpRMTRhTzNGTDh5VW16OXNmam9CMThaL09aQkxTbG1NVCtReE5ZZjF1TUJ1a0t4TTAwR21yTDJqMkdGUlV6QWF4T2RVSEFtaFZEdGRsRDVVUlJaTkx3cTF3MHd6Z2J1UFEzYU5hcGdDZThFTVBzWHk3a0UxZVhWNXFmaU0zVEZlNno2TDB2TThsRkhJWkJDTlBrbUUvQzRXMFZVMTNVMmNDanZObC9RcEJmZm92NHpEcFN0SkRzU3FTRTBnL3ZTOUVKSHFId2EwUlhjM05GLzRWMWhNVkpack5RemhqQXRhd25NL2pTdDl0NjN1NmVwNkFrNnBEdlZ1TUF1Q2FQQ0wxVm8zaG1DeWYzTDdBRUE4dTZKNHZXZEJvRjBINmpROXNvWFdxeDRiUUtXbnlKWlJBaS9UTzlOVHdWeXUrRERwTlhORTdqb0ZlSU5Td01ueGJZSGFSMzdrdGJXSG42RUlNMElUREYxS0EwS1NIQlVhY25MZ0pvUTRXeHlmV2xaM2V3Vm9HaG9jZHN0TWRYN2tTTnl1SW5IK2VqeU5KSGIvdldNY1FoVTIrdFZReUI1NVpOWEI2b2RHaHh0RXdvV1Z1U0VFVHZyTnEyZjFHOXFPS2c3cjcyNE1TOGk5ekFWREVNaStZMjAxOFAwUEdwaUE5R1V4dFgyc2JoblNZZTlVQ1I4cDBxM29LZDBqM04zNWpobjZmZS9pQndyOEkrNHMzdmJRZHQ0WVdEanZTZ043MisvSHlXQkpLQU9ZSmRLcENUWGtlaDlaTlNzY0QxM0J1cUl6cVdtaG1YcE1ycldTcXlxQW1kcGYrMS9Xc0s0TmhoektvUSswL3BOTG9sYmdQWTFURHhJTDFxSUd4bTAzMVpDQ05tSFhsR08xMTljbXZxa04zNk1zMXVnczg3YzBocjUxejhna0Q4RlpTdU5OZ2xjdjhYdFJYVWZ0dlpDd2FDSFpZNTkrdTRubWsvNkRiTzBFTmpVMEd1RUNmRmM0ZDRlTFlNalNSemZCMlFNR3d1ek1CbzJVM2VKRHJaWnZjbWN6bEt5L3hXM1c1QjgwenRDaWNGNTdpVmNIVHJuanhZa2N6N25wWEdWUXg4ZVJzOVNwNzlSMXhQWitjaStUTjJnRG83a2Zad2Jad0tEaUhtZ0RQMVBVS2JPRHpqMVY1cjB3T2s0NWwwR214dmNIYW0ybnpqWjdsUE1mYzkxNlVqVzN2dnBDS2JVZE43SmZsSkJ4aVRvcTk5b2FkVjZPbHI0NDlIMys2TVo4Z3RaSHpKVkYya0J4a2s0ZkpDaFRCVHZuZ0FURndXTEJwMGs3Nmp3Wm1pQ3FVVXRqa2FrcngvRS85MVgydGZmMjRhaWlwOXRRbEwrZTBSMFZ4Q0lDdDBXcDl6RWdtTjB3dGNLdktQRzBGMnRwOEZQeVlWUVlXa25XZnlXanJwOHplZTQ2MEpObk5qVldDSWxiNDlxNWV5THlFVkpzN1FMTUFGckZncWh3b2hnK3pNcmdCMForYTQ0ZnlIVVRsL0FUM1RuZC9IbGl2dGdBSWFpbTdXWkxaeEdUay81NWVaYnpHZEtUWSs2a0pDQWhjSmd2RlJPQThtL1l0R3Uzd3dnQm51Z3VKcFhiUmkzNEFIWklKQjh3VnN5MkVMZGM0NTBvNHhvZlI5dDJObkk4SWlZMElRMEJ4Q1BSVDFlb1R3RTJnTUlvVlRxSURibmpQbzFlWHhEanEvbk1Yc1A3VU92Mmg0c29yeXJ4YkZuUG9DYlFXN0QyN0hWbldya2VDdEZGQUc5UmdaNlpjZGh3VFlNRmlTZ0pqQTdhYzl3TU1QQm5OWkkxbVZVdFphU2w2SlU3MHJ5Wkt6bjR2NUJjSzZQUVBJK1lFM2RBcFRnS25EQktUQmE0eTA2ZkR0aDM5Vzg4ZGg0SFFLZ1ZLNThIZ3JvY0RHc0JVTmdkdkdxczBEbTdMd1BWZm5mN2JFMnE2cUc0WWlnbEJIck8vajJZWDNTSzR5ZVIxeDJoNkpBd1F1aDBDSTU2Q3d3VVZ2ZnFrcTF0dEZYVmdKc01VcmlqSURwQ3doZ0JwSG9SYTlSRlZuNTIwSWN3SVRaN0ZrR005MWlYMDBJbUVUbTQxUnoxRlM0aVFSemlNTkJrU29PdWFrUXZvTzJrc3M3Ly8vTzRlTU5NRThzVk0xOEJZM2QzdTlSUEpwM0VWSmpEQUEwR01NVTU4N3FWNEVzODN2RTZCeUtBaE9ZMC9PTU9SRTRwdWd0K01pOWtVc2tOV002ME43ME1EcWNMWXhweGcrRHpxb0g5UEp4aFErajJPai9pd3B3UlFDeTA0QjlTa3BJd0JaYVlBK2txb2dWMy9mcEtuN0IvbWc3UWxxcmRmNzYySFdDejJBQVNSUUh1d1ljU0lVY3VMZTJuV3c1bkQ1YldHZ3JGVGYrdUlyb05rWjZNTDhTSGkwdTQvcE9IN3VJZ0V1Mnl3anJuSU9HaE1KYS9nQmtwSC9MWnhPWnVudjNvckxML1ppc0FXdmNaQUNvZCswMEJ1SmRsZ0t0NkN3NHVkdSt3TzROVmR3bVZ3VTVKajJHQUt0dlJwOWN3aDRVS2tFS3pTbzFTVHRDY0FRejJibFJEUWwxbk1rcUVhMXduT3dkdUFiSXpsZUluU1ZkNWVvZUdweGxyN0VOOEM1SkpNYkZ0akpicVdWZS8wdXF3Q3YzVmdCSDh5OXFJWG9IdXNFZVQ0YzRVOFVuVHZmbzVSVWpDS0YxaVVwSHBkK2xCSjJvTmtnaVFJSitnQkR2ZkdiMHdWc1ZERGRnRVJ0T0E0QURxeldGVHVnYTRPTGpuRFFLRzVlY05LUi9ob2NiTTRpbE9RcjAzZ3luTTZtTGZTNlc4WC9XVktVemk2a0lBRjZtWktqaEFhSVdLYy93Vm9PM2dMRGUrcmdPWkFQWlYxYkJ5WTgrcGo0VURKSGZrMUdSU2ZxVUtYamJSVXIybFN1bU4vdXNxT3Z1R1dYZXNBUkd2RU9DS2NLYWlJN2QrMnI0eUtIOGxDd0U1VkhwdUQyZGVJeUNPckViQ0tLekV3ZTdIN3M0SkJySmVDUVppNlRGSHpKY2xkUmJMTDBlRXB0aiszeHdldnZCQVkzTEtYRVBCVnhqcHI3Zy8wa1BUbFJBZTAyb044TGdGNjcrOWJpS1RYRE5wUnBzNy9UZzI1VTVoL1hWcUkzMjh3a1U1RTZBZzVvNVEvbWJmT2RvUzU2eXY3VTc1bDAyOElYUm91SXNQM2ZGaElBTXhkYWpLM0R2SlIzb3R1ZlFWd0lTQ2tiOVpOaFkyb2lNWmJnSDltZmlDZnZIMU0renF3N2RROVE5TllsVXE4S2hYMit1cGRLVTZpT1ByVGZpa01WQ0VtQk82MHRUZzVaVUt0QUpPcFBZMHl5c0ROcmxmUWZmVjZVbG1WNFY3SmlxVTFidW1WUmJQTFc3S2ZRQUZnZTFja2QzL3Zyb2tkQ3NGQmh5VXBwVlRFNWIxaFFOYjM4VGwxeWRVNHYyOVFxQ0JzN3JHRkhNVXMzcFZHdmpjZTZSbUVLMWlXbHF4VnN0Qy9NNHBwcjRSUnBMSUVNdHoyYmhFNFR2Q1ZOdERqN3hraVJENnVlb0JaeEFKY2RJRXJIYjNKeU5MNVBMcUYwb0p5ellOM1QyVFhCZkJXdmZzU1p4cDFBY01yU3kva1FIQlZ1NlRBdE8yc1JDcitvQlp3L3dSd09JaUtrQytHY2VJbzNUV29kVUFSZWlwbjlMWUZXMitkUWNCR1hyamRocEpuaktQeU1aSHZjcGExZ09OMG5oSnpvMVJ0SmljUElyaEFPMUpna2xRcXdRT3ZYb2hTeEd0NUpYQ0N0VFljV2dmcG9PaUptWDFYR3Z3VDJ5aWlmQmZseXozOXF1aktKMlRHUzhtVVoyNTlZQzNUYi9HeDA5Q0hVWWEzZFU3ZE1LOHdGaW9PeTQ3cDJNVVg2K2ZHVnlqUkxlQm1ObTA5OGVsWWNWeUt0WFVaN1NGQVZ4UExXa0VMaE1wR0YrRXpEeHhOdDFXeGxmQXpOMG9XaGFiNldDU0Y0bVNXcFFZcllTSFRmZjAzWERCTU5CQnREN2JOTTdRQnN0Tk1Ybm14WlJ4Z0JHc3FTbXZIRkNEbTF4SWNoQi9HcmgvRy9lQlUraExjajZHZW02Mldsc2ZoZDhZdGM0NDdxQVcyRjFaMHVTaWpzZDlkV1RJVk5hVjlxU21WVXU2Wmk4eVpsa1Z1N293elpqbkNWSXJGWURIUlY5Q1p2U2xFbDNWRm9IWnlGNG9BZURMNElJbkNDTmxBbWxUaHFDalV3WThUMlUyb0x2V3MyaVZSZjNpQnZ1Smg3U1dYWWRpU05mRGg5c2lLUlA2aTdCRnB1ZHhZU2w1QTZ3SXAxQVhHU2dlNFA0NU5pdzFReVBPWENmek9tUVNMaFZvOWcwM2xGbWtrRWJBR1hZcjRtWE9RZjBzaVppb2FjUmNCZEVCdWtLNStTMUhVMGJHb2RFV3RNYUtIWmwvcTQvUStLS0NYZ2F2ZTdiZy80MkJHR09QUkNoVUhuZEdWNGtlVUs3UkxUTVVkb2pmclcyTWlwOHlRa0w0RzgybXVSMXlHd2RGazR1d1NlejlEeWJFYWh4LzJpb3pDbyt6NG5kMWVKdkZyaXlVZXYxQnVLRVhkNUZadEtMVTZpTFg1bnBtWktlMHdLSHFYdGNIMkgrZ1RqWXJDaHVMMXB4ZCtnYmRIbEdGcmlPc29wZmx1aC9kV2dPWDliczIveHNNSG1XTWRWV2pLOG9XV2VJL3U3UVNTbTArYXhvdW5UdmFFSmpiL0dxNHU4ekVBMjJZUXhYVTQwK1ZHVDEzMk9URVcrbjNhSjlMWlZHQ3ZLeWJjVWxjL21EaUQ2dUtWaHhSVVo0OGZwZ1VBMUpQRjZ2QzdUUU9Xdm1aWElud3ZZKzFWZlB1Vi80TnJuQyt2QUJvQVI4SCtLSlgybkVjREYyNWx0S2FUM0JvdktmclU2eHVwZ2p1MHFndWRlajVhT0RiZU9NR2lWWEtZQWVRMmJSbG41WTlGbW8xQSszNHBLTW54VDRFREMzTTRtbkg0ZldxWndTWStBL3UzNzZubEJoNkhvZG0xcENJSTBaaDVoL3oydXdqT3BXUXZaRVR6YmIvZWo4dU1yWjBVV2hJdERxZHZXME9CTnRLZU55MVREcGFuMldZeDBjUlFDRG43cGtLVkNVdnhhK2hrSmJjQXUvMm14TmpHeExKckpkQVJVc1J3L0twSUNBWC9HWUhZWm1vK0haeHlTbk1hMEZCbEpob0xsQ3R1UzBZQTJleVRmZ1h4VEszMnFwM3AyblY5M1RGdFg0ZG5lenRkTE5ZdjJoT2srZ0hwUWtudWNCOHlMSExxWkRDanNJd2VLdEpta096R29Bak8zU04xTGtPMytlcjFpREs5WDRva1NmcDgyZ3RCS3FOZ2VTVEFqaGFjSFNneFU4dU5CRWpnd3UxWU5pM3ZtSGlUd2JhaGw2cVZFakluTnBtcDYvZ0lzQWVianMyeEpiamw1ODl0VmdnTTB4NmRKb0F6Qld1RzMvb3VRYWl5WlNqM0hpSmdFVlVNejNLVXhvWWdtenFvUm1iemhKTGN6dVZDYkJINHkxK2JuZmJHMXJEOUx1ZmMzYzdSR09NYWNKYzF4bHkwTzNOcnlmZVlSVWIvZnVmcVg5ekFYa2FHV1BPL0dmQWFXK09ZTnhVbFd1VnQvVHhnMTZIVHNRU2N1YjhHbWplL2gvRCtpQUVIWU5WdFl2OVNWaWVYbjIrY2NCRFB6TnlyRjJDcVJvZ0pMaW96dU9DY2FGTEhMMFhKY0ZHdjFUZ2N2SEpCZUQ0RVYzMFRCVWw0ajBPeEVybFFuTWVmNE5DZHRSc3Q5RUp3dS9WdndjUlExelFGeno1TGlYc0MxakJKY016dm1vejNmU2NsdmRCZG1sdVNpMFB5eUhSclpLY3RuY3hXYy9ZVXFCblpTMTNPdm9yRTR4TFJjWUdjdER1NWVMZ1JCSjRyeXd4bWF2djU3RVJiS2twYlNCbGN5V0NXb04zcm1YRkdKaTVCSXNxcUxPQ05KMDFydmZBQ2E4V2MvN3pPMTJZTmZ3N1FNa2V6WXFXNithUUVuNmt5VURFOFZwWHU0bzIwaXRQL21heWYrTHNwRlcxK0p0R0Q2R29pdTRxdmVoYmFGRmtqQnZmeTk2eVA0WFhxZ0RSNitUN3dTc0lkcTBJS1VUTHVZUzNxWUI1RUNCb2w4ZW5qUVh2eXpsT01KaitZUUVUU2Yxejh3UzUwY3pQVTZDSE16OS9yOHBFWTNRb3dkRzUrWHZpdzMvU3lMN3N4Q3JXWlNtRkUwUWUyUjM5bXBmeXh3UzFZTmR3em5hNzlQYUdrVUR5SVI3eWNQZHZNd1hSVDhCOTNFdlJ5MllPWW00cEdnZEhrSzlaVWlISjE0bzBsUERnNVF4dzFQSnMwYlRaVWNCelk0d1I1QXZya0E4Z05jWUFleFFITVlzZHlvQ0NydlJyY2wxYWRTakJROU1RZHdwMUorazNtSWdscXdZSEhJOVZvampxNXl5dHBmMG1TRzQ1OGhXTG8wakRwQll3dDBZY3B3b0x2V2ltUkNaTU95SVdKTW5ZYXdzTUVtcnRlamhEckR4OWNNSUNKaU1EcjVJWnhwR0ozbDVaL0wvNmFBKzFadUpqYmVLQmtOYS9iUlU5dTBDVThwNWw0cHQ1c0puY2swdG5KZVBFVVEyK3FNMUFLYm9BTkp3TXdmN2RldXFEVEVjb2tnOGNVZFdWOWRGU3ZVSk5vNE5VNGhuV1JUSExEVHRuQUtnYUF2cGFLSHc4MVhqVm5CdDhoVXdYMGZhbTM5UUJUWUd3VzBzVjBzbmdyYzhRR3hKSmhXb1hxYnlvMnFZby94YStGczN0cWw0YVByUUdvRlFXNndDMDBiV044NjdVa3p1VUV6dTFabzUwQlp6QVovZVJPclJGME1FaVA3NFgvTm1kRHo1cjRGK3A1dk45c29Kb3dwaC8xc0tUL3FTWU9hWVc0c2lNbjVVa0RXOEJ4S0Q2RDluLzhnWlhOcGJJWXhjazE0ODhQeUNvMGtweXk3L0lhSStjYWp3bHJXVHkrUXRsaVZCVFNhN3Q2clM2Z1cvOTR3U2lESUNDM0xFei9PUkZYOUNUWXc3WVNnRlkvUUVSNnlidjAvOTNkTURNOFVaOWI0ck5mRVRTcUI3Y3U5UVZxL2lWeC9uVFBQRTVKS1NLb3dyQ1BYRHg5amZnQXVDVDlHQkc2Wis5dUVkWWpRRnVRVGJmTUluWWorbGx3R2hYWUZVSHcyaGM0WDcrOVNzNkZCbXRzdHhkVUNyRE1uU0lGZUxHaFdsUHhTR1QzSFVpSFJZZTBKL1FIL2duV1lqVXFFeHJuOVFWWEJQVElpcTZnaWtEVkpPUXZBcDZvL0Q2ZTVBUXE4QWpNMlFhaXNTdmc1NWIzekV5cTF5Vk1EYWZOWTBQU0xaY2VCMzZ1S1ZnanVnUDQ1NmZYTjQydzZib01xZWVPQWx5V2ZIN2xzWWczNW1MaCttWmEvSjVUd0ViemN5ZkdHdy9aUFZiREl4ZEtuVGpPVkJsRzAzYWdpWTNYZlhvL2R1elhOOEZVU3VNM016WURFUVBBcjJ3aG95ZEpBZFplS2Z6cFJnOFU5cnJtQ3BlOStPcTNqaVpxUGZmR2xRS1VsUGpkNWUwSmhMbXFQcFZyMllxeUpSOHRMNjRIdWx0Rk43dHVEL2pZRVlZNDlFS0ZRZWQwWlhpUjVRcnRFdE14UjJpTit0Yll3OUs1dDEwOVpkenRMM2YvWE5RZVJtd0E1RmhWeXgzQlZNcVBXYnJVQXM0N3p1ald5RTV2aVJRNWl1MWwycGdka2ZHc1VZMmYzNElvT2VrMlJzbnF4ai9OWjRWKzFMQm4va0hjVHUrYWQzMXdZRmNDS3JDc3dWMjV6QmYxbkxmRVVBVFNEdUNLZjJpVHVkMWtMRDhqMnJibm5VQWpXazBLZ1Q0aDMwR0ZwaGFmMDJVK3RDbFRiWURlOVN1V0NMNWJXcnc2NTUrTTlkOWpreEZ2cmR4MVNaQ2lzeWFqU29jVlJhZ0VDaE82WjJoUlRnUmJuK3gvaEphcGcxcmd1dlZtMDl4WW5KTzNGWFlYZDFMMUpvYThFaU1Nd3BlQURHQWoxSGcyMEtyUWd3MStheFB3TlZqczJ1czEyY1l6QzZaVlNoOHNZY3Urak9HRXZIcjF0Tks4YjJJS3BaVTdDNDhNSXRjWktmTnZkT0ZJTTlxaTl2VndRbytLblFLbVNLWnFORTBLek01RlhteDZ1SFNQZzBKMlRiblY1bkRLbkNVOExWbEQrMXhoQjR1VDJCTnlYTlVpSW1aSDNnRFVKc3owRWhuYUNZajhWUFlrN2grMmJZVmJkT1RzT3RkejRjeEJtdzhXQ2xNSXEwNjZkMlBFR3RIbnR0THR5YnlEV2RxLzcyNXd2b0xIZ3hmS2laK1V2M09mZjRrMkk0RFdqQWZHRnE5N1ZVVDdvWEdycEs2L2FOTnZNL0ovU1hqZHVLNTRJMy9KZjlpSzR3aERlRndMRFY2aFdDbENLQzYydTdxVDMzWjdHZ3JHLzdnYkJCOGZzd2kvQ0NxUWxDa0lEK3hUT3BGd0puSnhvV2FmUFZyWWtLRUFLbWU5VE1NSGd4YTY4YW5oZ3Q1MVZ0bFNuTTliNHdvY2NEU294VjdsTVhRTXBUMVZqZERRK1gySEFPQmhyNHBXcjVGWTJpUEJwSSszSUxDeng1eVVnVnFIU252TnZNbkNTUGMvazRhcllISFpwSDV1RWZPdmJSbG1xT3hCeURZTVd5ZzBaTFZGTGd0VHBlY3E2WGo1NVloVHNYNTM0ejREUEMwWGl2Z2RRd2dBTUhHY2JRM1RVK2FFQTk2dmhMS2xYeURPSXdWYWNvL0o0cXpkT0s3dE1uMGlVRXNjVGIvK0RkVVpHZFp5UkcwSTVCY1ZFQnFDVHlZMngyakM3bEt1eEFZaG5pQ0pBd1h5a1g1Z1VRUkx5TmhhdFFvOHZldTBxZCtMTmZEVEt1cU4wZUFlSUgxTnBsWGswQVNwMU9rT2hJSW9FTnVqWGUydm9rTjVEV1BEWkZXc1E1aWRuL1JUY2c1eEljNk9PcHJOMkQxWmxNU2RRWTJ0R2Z1aTI2MktBYm14Myt0NndaazZhWlFnZndxZ2lseDF4d2JycUZvUFA3aDBpWlJiaEJvR29LTW1jVVNkcjl1TjY2N3RLK2tvdUtXVkRhZmI1WGJiZVE3cFNBcERBZkdYMzRmcTl4V2I5VzgralJrQUJLUktNaGVuZzBOUHNmcDRlSG5OaVhtSnFpOW5sK3dSSFk0czg0U2NXdnNKdjVoallnTkg0MXZnV2FqemdOZGJna1lkdVV4U0QvK1pwbENCL0NxQ3EwaTZDbEpGd1c0b2xFOXNxNGpUcGlXOXN6VERDTDY2cjd1dEhSaWNpQzNSWW8vL0NSU2lhYmVuMGJKQ2E1dGZrQjV1eHhaNlBtTklvVUVmZ0ROaUQ0K21ONlB1eTJwN1RuWEllUTlRcEMvb3ltL3dHdkNmUVpOcCtJaUJTb1ExUlUyQUlGRDh4Zk5YaXUzbGVUNnFkK2lkZ2dOS2JHRHVOamZwTFRqRUUxcWtDajErdWYwWWdiRnZyenlmeVBLdXlNcWJZUjlQSmNDZU11SXVPMVVRL01zYXp2elZab3pETEVRdVduQ1VkVFpyZXJaZEF2a2YxSncxSXliUlFzSkVyUUJ0UjA4MnUzd3BqNHdTOXl4bUtqWmtZZG1xbnJybkxKWTA5T1JCYytvTjVURUZBRk5tZkxSdGNqRkJwV250NUtoQVN4T2l3dGpaeDBuQlhMdVZNU0t4dGpwekE5UFUyYzdNNmJCbXZFZm5tN3hjc2dpMitkQUZkSzY0U0R3TUE3RXIwTWdacDkzNyt6dE5SNkg1d3RWTDNCekIzakllUTVzMWJjSkUxVW5EOGU3YUlkMGtxSXhLYVpnMENGaWEvbEdTazF0bEFVUVpJbWhBenl3MitCNUZHako3YThxQkRZTW85L2Nhd3duQ0xSTDg1SWFyRGM1YnVsNmtCYnN5VUpYVUlINXVqTXJFMGgxZ1I3d0RKV0V5M3c2YjlQRGx5alFGN2RoUjB4UnVUVU9lTWRhZGNXSzRtTHdjYnRkRjhDVUY1RXhtZy9XeFJMdkpyN3luTWVRaHNTMTduRHNIcStCbzkrWmNyMklMWXFZQ01Ma3V4eVhHMEkzWUI0RFlDVW14THdLRkdzYkRBTVZIY0Fvb1Nud0VCckFCb2Z5MVc5MDVyaUc3QzR2ZEV6TlVmTzM0WG5wV000MEdETmRpTnBiOGZic1NkWG5NYnYreFZlN2x0aWZWOEo1TnJxM3ZEMHhhR1dJNXN1bUNRQ1BQTktRVDZ0SGgvWENMSXZsQ1BTOFhFOW9pd2YzaU5YVTVnTUNpWUhMUWhrUUwzQW9Dcm1XaGluT0xkekdkNFo2OXJKbFFyeDRyb0dVbGJ5dUo2YzJkWmwxaHQ5NnFrenJOaUp2WU54NjBLUlJNY3l3eUxJbU4rb2sxWlhxZEcrS0xLVFc4UUtGWm9KS3BLZFNxZUZsbENQUkxuRUtseFkwMGpCWE9sY0ZyeVBnd1gydGxqUnBQSDhYc1pLU0N5NktTNklFRk0zRGVnN25BWTNhbGNUWjVVOXRWVjF1WVhOM0d3NEVxL2kyVWZVYjBXcnpzcWxkKzIzT1NiK2pldXNVa3lJRlkvQS94VDVzNXF6NExISWJNM202ODVDOHlGS1BRbXJ3TS9nT0ZVQjZ6ejl4YlRGK2NqQUNRdFBrUnZ6UWd5bjNEc2Ftc0YwS1N6NnYzYjU0b0RYajJhd1p4MERFSDRjK0FDV2cyd0hUQ2djZG5vbXpjMGdpSWJZRlVXbzhlbCs3TFRSVWd6d0l5dUg4ZjN6U0VKNVp6aCtjZ3VPSi9jUXNxMzNjSjNjZUhxUlppTmx1RFc4TTVLOEJLdldvSmxCREpWM3RRNWdDSmRiMHZVeWRrYlRuZ0IrUitvaE0vd0VyMEpiaVhtSEFZVEZ0TFQwQWI0S2FwSkZpZERXM1JSZmRyb0MzV3EybjlQTUdYU2x5ZUM2R082ZExBZmJzdFdmTzNsRlptYmMzYTNKT2M5ZzE2cU5UVVVDRXNmY3Ivc3c3ZDlodmRzTU9FcXYxb3NmeVRzbUFjU3dzLytheUZDcWx5bmVDVkxYbnBNeXZod0hwVWFRdzA5ditrQ25tbWNwbmt2MitCeTZ3VHVmb2J1Qzc3ejlwRE1XN1NJNkw4U2hEVE1tNnBZRTdCbmZlZUw4R21SbDFzZStma0hxTlJCaHg1MTBZTmloaHVDVnVSN3gweWhTR0c5QXAxZk9XR1hJcUxidWNrZlp6anRhcXB0Z1ZhNE5PQWZ0QldhYm5GZ2NmZzBSdEdvVXFzM2d5eEJQU29pSHVzc09tRW5XSE0yZ2VWaVJpVFdnbThRWU0xb004RmFwQ0VnQmRHK3JXRmg4RmxiRGhkZDkrTExwWVVVRCtoTWVWWTFsOUxwVHZJbm9OOWNoNzB5RWp1VXZmK2dKMG9GR1IzVTBsWVBlWEZ4b0t2dG5SUXNId0NwbTlOVG9ma3FRUFYyYjZpRlduc21FcjZuVWI3Q01NWlVadWFxemZ2Y2pDa2NsWGxHaDRmenRweXNhWGVrQnBBM0MvQUhraWJiS2FvZWtUQTJCRjVIVTVwbmpNTThnRWNvVThUUG9rNlZnQVF2RitJRDg0NDMwZWpsSS9oYnlPVzVsT1hGbEpma05UcUdQVEMzejhQVGhaYUdyRnNTRDkwWkMvNEgwaWtQU1dwRWZrdDI2aWFPcHhub2FvOVVBcWcxWERoWjFmNHhRVS82Yy9rVXhwTlVNeUFhQ2lXQ0JidHBhTzIyYW1laHhwaVhFWE1ERkdaRkdyc3N2aUdXUk5nTXI1cVoxVUxKbHNBd0lrU2lvWnczUUFVSmF3Vzg5dE5sVHk4RXhNYzcwa3lQUDY1T2pCakNMNkZIZjVFbW9BMVRiT3pPMFlQUDlCSnMxbTNlZUcxK1Y2SmF2aTh1OWNWZENDTjFNdGVvM2RTM0I3UHZ5c05NOTIva3A5aVFPbUMvOWhqRysxSElvMmxLcU5MeGhhOG8xcG43VE5POVJpTmJhYk4ydTNaaTUzYkhFQmpLSS93U3lrck5YTUZLUTdBMmx5SzUwNjVLb0JwczVYdWhXZTUxT0JRUzVwTXFlU1JhNENtR2NDYmh0VFRHbVVab2JHUURoaXRqS3Y3NjRZM0FkeXMxQUNubGFOdE11N2RpNHh0K3pZai9PWFU0NHJHL1pydTlMVXNxSzB4RUl3MWRWeUpmMUpkaW5yV0hjMDZCY2RJeHlLU05NdGZzY2tTS0dRcWdpQ0pyKzFWRW5hK01ZaUsyRGxGZFpuZ2pCbWdCWFFETU0vc1hweXlFdVNMMXY5OVN6MkJKWW4vczBKV2NVakdJbnhtM2o4OTF2T0dsQmNORXBqd01uVjliRUZCQzA5bGZhOCs5Y1MvMXVqRUJmeEZ0TThrSkNURjI5UlpBVW9qc3RNbHFVOGxpTi9tcUJaNUJHNnZuSzIxMFA2RGFwaXFPR3BPYjR1QkdwWkFQSGdlYVVQclZ3SDVZQWlmTnlxWE42bU0yT1JuWHNaK2xaZFdtRGdoMjRkWWZqbjY3UWJGeGd6R1l6SUpSZEU0VGRnRGxLV2pZUHhlc2g3RTZ3bXZHd2dWUFpwa2Y2dVJyMVhaOFVUbnVBQUFBQVFiaHg2Y0xZRFVMNlUydFBQYzdGWktEdDdFTytzbGoyQ3BJaE51VW1BUGJHek5LeWZRQnIyUE1GNDJyVDV4TGN2WUFFQUFSR2hVUzJpSFdCek5kcFVwQUFBQUFBQUFBPScsYWx0OidUYWJsZWF1IGFubsOpZSBwYXIgYW5uw6llIGTigJl1biByZWxldsOpIGRlIGNhcnJpw6hyZScsbG9hZGluZzonbGF6eScsc3R5bGU6e3dpZHRoOic1MCUnLGhlaWdodDonYXV0bycsZGlzcGxheTonYmxvY2snLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJSYWRpdXM6JzNweCcsYm94U2hhZG93OicwIDhweCAyMHB4IC0xMnB4IHJnYmEoMyw2LDMyLDAuNDUpJ319KSksZWwoJ2Rpdicse3N0eWxlOntsaW5lSGVpZ2h0OjEuNH19LGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnVm9pbMOgIGxlIGJvbiBkb2N1bWVudC4gJyksZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsY29sb3I6R1JFWX19LCdDZSBu4oCZZXN0IG5pIHVuIGJ1bGxldGluIGRlIHNhbGFpcmUsIG5pIHVuIFJJQiwgbmkgdW5lIGZhY3R1cmUuJykpKSwKICAgICAgZWwoJ2RpdicseydkYXRhLXpvbmUnOicxJyxzdHlsZTp7Ym9yZGVyOicycHggZGFzaGVkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmYmZjZmUnLHBhZGRpbmc6bT8nMTJweCc6JzE0cHggMTRweCAxM3B4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOm0/JzlweCc6JzEwcHgnLHRyYW5zaXRpb246J2JvcmRlci1jb2xvciAuMThzIGVhc2UsIGJhY2tncm91bmQgLjE4cyBlYXNlJ319LA0KICAgICAgICBlbCgnbGFiZWwnLHtvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO30sc3R5bGU6e2Rpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGdhcDonMTFweCcsd2lkdGg6JzEwMCUnLGhlaWdodDptPyc1NnB4JzonNjJweCcscGFkZGluZzonMCAxOHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTYuNXB4JzonMThweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsY3Vyc29yOidwb2ludGVyJyxib3hTaGFkb3c6JzAgMTRweCAzMHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNjIpJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlLCB0cmFuc2Zvcm0gLjE4cyBlYXNlJ319LA0KICAgICAgICBlbCgnc3ZnJyx7d2lkdGg6MTgsaGVpZ2h0OjE4LHZpZXdCb3g6JzAgMCAyNCAyNCcsZmlsbDonbm9uZScsc3R5bGU6e2ZsZXhTaHJpbms6MH19LGVsKCdwYXRoJyx7ZDonTTEyIDE2VjRNMTIgNGwtNCA0TTEyIDRsNCA0TTQgMTd2M2gxNnYtMycsc3Ryb2tlOicjZmZmZmZmJyxzdHJva2VXaWR0aDoyLHN0cm9rZUxpbmVjYXA6J3JvdW5kJyxzdHJva2VMaW5lam9pbjoncm91bmQnfSkpLA0KICAgICAgICAnVm9pciBjZSBxdWUgcG9ydGUgbW9uIHJlbGV2w6knLA0KICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J2ZpbGUnLGFjY2VwdDonYXBwbGljYXRpb24vcGRmJyxzdHlsZTp7ZGlzcGxheTonbm9uZSd9LG9uQ2xpY2s6KCk9PnsgdHJ5eyBtdHJhY2soJ3NlbGVjdGV1cl9vdXZlcnQnLHt9KTsgfWNhdGNoKGUpe30gfSxvbkNoYW5nZTplPT50aGlzLmxpcmVSZWxldmUoZS50YXJnZXQuZmlsZXMmJmUudGFyZ2V0LmZpbGVzWzBdKX0pKSwNCiAgICAgICAgbT9udWxsOmVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzEyLjVweCcsbGluZUhlaWdodDoxLjQsY29sb3I6R1JFWX19LCdvdSBnbGlzc2V6IGxlIFBERiBkYW5zIGNlIGNhZHJlJykpLA0KDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic2cHgnfX0sDQogICAgICAgIFsnR3JhdHVpdCBldCBzYW5zIGVuZ2FnZW1lbnQnLCdSw6lzdWx0YXQgZW4gcXVlbHF1ZXMgc2Vjb25kZXMsIGRhbnMgY2V0dGUgcGFnZScsJ1ZvdHJlIFBERiBlc3QgZWZmYWPDqSBkw6hzIHF1XHUyMDE5aWwgZXN0IGx1JywnVm90cmUgbnVtw6lybyBkZSBzw6ljdXJpdMOpIHNvY2lhbGUgblx1MjAxOWVzdCBwYXMgY29uc2VydsOpLiBBdWN1biBpZGVudGlmaWFudCBkZW1hbmTDqS4nXQ0KICAgICAgICAgIC5tYXAoKHgsaTIpPT5lbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzVweCd9fSksDQogICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0seCkpKSksDQoNCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjUsY29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMH19LCdEw6lwb3NleiBsZSBQREYgdMOpbMOpY2hhcmfDqSBkZXB1aXMgdm90cmUgY29tcHRlIHJldHJhaXRlLCB0ZWwgcXVlbC4gVW5lIHBob3RvIG5lIHBldXQgcGFzIMOqdHJlIGx1ZS4nKSwNCg0KICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6JzFweCcsYmFja2dyb3VuZDpMSU5FfX0pLA0KDQogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6bT8nMTBweCc6JzE0cHgnLGFsaWduSXRlbXM6bT8nc3RyZXRjaCc6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sDQogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LA0KICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWSxsaW5lSGVpZ2h0OjEuMzV9fSwnSmUgbmUgbFx1MjAxOWFpIHBhcyBlbmNvcmUnKSwNCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS40NSxjb2xvcjpHUkVZfX0sJzYgcXVlc3Rpb25zLCBtb2lucyBkXHUyMDE5dW5lIG1pbnV0ZSwgc2FucyBkb2N1bWVudCcpKSwNCiAgICAgICAgZWwoJ2J1dHRvbicse29uQ2xpY2s6KCk9PnsgdHJ5eyBtdHJhY2soJ3F1ZXN0aW9uc19vdXZlcnRlcycse30pOyB9Y2F0Y2goZSl7fSB0aGlzLnNldFN0YXRlKHtkaWFnOidxdWVzdGlvbnMnLHFJbmRleDowLHJlcG9uc2VzOnt9fSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2VlZjJmYic7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmZmZmJzt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZsZXhTaHJpbms6MCxoZWlnaHQ6bT8nNDhweCc6JzQ2cHgnLHBhZGRpbmc6JzAgMThweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicycHggc29saWQgJytOQVZZLGNvbG9yOk5BVlksZm9udFNpemU6bT8nMTVweCc6JzE1cHgnLGZvbnRXZWlnaHQ6NzAwLHdoaXRlU3BhY2U6J25vd3JhcCcsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMThzIGVhc2UnfX0sJ0NvbW1lbmNlcicpKSwNCg0KICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNHB4JyxwYWRkaW5nVG9wOm0/JzEycHgnOicxM3B4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdKZSBzYWlzIGTDqWrDoCBjZSBxdWUgamUgdmV1eFx1MDBhMDogJyxlbCgnYScse2hyZWY6KFNUUklQRSAmJiBTVFJJUEUhPT0nIycgJiYgIS9SRU1QTEFDRVIvLnRlc3QoU1RSSVBFKSk/U1RSSVBFOicjb2ZmcmUnLG9uQ2xpY2s6ZT0+eyB0cnl7IG10cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDooU1RSSVBFICYmIFNUUklQRSE9PScjJyAmJiAhL1JFTVBMQUNFUi8udGVzdChTVFJJUEUpKT8nc3RyaXBlJzonb2ZmcmUnLGVtcGxhY2VtZW50OidjYXJ0ZV9kZXBvdCd9KTsgfWNhdGNoKF9lKXt9IGlmKCFTVFJJUEV8fFNUUklQRT09PScjJ3x8L1JFTVBMQUNFUi8udGVzdChTVFJJUEUpKXsgaWYoZSYmZS5wcmV2ZW50RGVmYXVsdCllLnByZXZlbnREZWZhdWx0KCk7IHZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW9mZnJlXScpOyBpZih0KXQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnLGJsb2NrOidzdGFydCd9KTsgfSB9LHN0eWxlOntjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NzAwLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSx0ZXh0RGVjb3JhdGlvbjonbm9uZSd9fSwnb2J0ZW5pciBtb24gYmlsYW4gcmV0cmFpdGUnKSwnXHUwMGEwICcrdGhpcy5wcmljZSgpKycuJyksDQoNCiAgICAgIG51bGwpOwoKICAgIGNvbnN0IGRpc2NsYWltZXI9ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTBweCc6JzEycHgnLGZvbnRTaXplOm0/JzEycHgnOicxMi41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOicjOGY5OGQ4Jyx0ZXh0QWxpZ246bT8nbGVmdCc6J2NlbnRlcid9fSwnQURDRiBlc3QgdW4gc2VydmljZSBwcml2w6kuIENlIG5cdTIwMTllc3QgbmkgbGEgQ05BViBuaSB2b3RyZSBjYWlzc2UgZGUgcmV0cmFpdGUuJyk7CgogICAgY29uc3QgQU5ORUVTPXRoaXMuc3RhdGUuYW5uZWVzfHxbXTsKICAgIGNvbnN0IGVuQW5hbHlzZT0odGhpcy5zdGF0ZS5waGFzZSE9PSdkZWZpbGUnKXx8QU5ORUVTLmxlbmd0aD09PTA7CiAgICBjb25zdCBjdXJzZXVyPXRoaXMuc3RhdGUuYW5uZWV8fDA7CiAgICBjb25zdCBBPXRoaXMuc3RhdGUuYXBlcmN1fHx7fSwgTFU9QS5sdXx8e30sIENIPUEuY2hpZmZyZXN8fHt9LCBDVFJMPUEuY29udHJvbGVzfHx7fSwgU1VKPUEuc3VqZXRzfHx7dG90YWw6MCxhdXRyZXM6MCxtb250cmVzOltdfTsKICAgIGNvbnN0IFBMQUY9ISFBLnRyaW1lc3RyZXNfZXN0X3VuX3BsYWZvbmQ7CiAgICBjb25zdCBMQUJFTFM9e3RyaW1lc3RyZXNfcmVjdXBlcmFibGVzOid0cmltZXN0cmVzIHLDqWN1cMOpcmFibGVzJyxhbm5lZXNfYV92ZXJpZmllcjonYW5uw6llcyDDoCB2w6lyaWZpZXInLGRpc3Bvc2l0aWZzX2RhdGU6J2Rpc3Bvc2l0aWZzIHBvdXIgcGFydGlyIHBsdXMgdMO0dCcsdHJpbWVzdHJlc19tYW5xdWFudHM6J21hbnF1YW50cyBwb3VyIGxlIHRhdXggcGxlaW4nfTsKICAgIC8vIFRvdGFsIGV0IHBvc2l0aW9uIGTDqXJpdsOpcyBkZSBsYSBsaXN0ZSA6IHJpZW4gZW4gZHVyLgogICAgY29uc3QgdG90YWw9QU5ORUVTLmxlbmd0aDsKICAgIGNvbnN0IGx1ZXM9TWF0aC5taW4odG90YWwsY3Vyc2V1cis0KTsKICAgIGNvbnN0IGZpbmk9Y3Vyc2V1cj49TWF0aC5tYXgoMCx0b3RhbC00KTsKCiAgICBjb25zdCB0ZXRlPWVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOXB4JzonMTJweCd9fSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nLGdhcDonMTRweCd9fSwKICAgICAgICBraWNrKCdMZWN0dXJlIGVuIGNvdXJzJyksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJyx3aGl0ZVNwYWNlOidub3dyYXAnfX0sZW5BbmFseXNlPydsZWN0dXJlIGVuIGNvdXJzJzoobHVlcysnIGFubsOpZXMgc3VyICcrdG90YWwpKSksCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMXB4JzonMzFweCcsbGluZUhlaWdodDoxLjA4LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCghZW5BbmFseXNlJiZmaW5pKT8nVm90cmUgcmVsZXbDqSBlc3QgbHUsIGxhaXNzZXogdm90cmUgbWFpbCBwb3VyIGxlIHJlY2V2b2lyJzoobT8nTGVjdHVyZSBkZSB2b3RyZSByZWxldsOpJzonTGVjdHVyZSBkZSB2b3RyZSByZWxldsOpLCBhbm7DqWUgcGFyIGFubsOpZScpKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntoZWlnaHQ6JzNweCcsYmFja2dyb3VuZDonI2RmZTRlZScsb3ZlcmZsb3c6J2hpZGRlbid9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2hlaWdodDonMTAwJScsYmFja2dyb3VuZDpSRUQsd2lkdGg6KGVuQW5hbHlzZT8xODooZmluaT8xMDA6TWF0aC5yb3VuZChsdWVzL3RvdGFsKjEwMCkpKSsnJScsdHJhbnNpdGlvbjond2lkdGggLjEycyBsaW5lYXInfX0pKSk7CgogICAgY29uc3QgY29ycHNEZWZpbGU9ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSwKICAgICAgZW5BbmFseXNlP251bGw6ZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6JyNmZmZmZmYnLG92ZXJmbG93OidoaWRkZW4nfX0sCiAgICAgICAgQU5ORUVTLnNsaWNlKGN1cnNldXIsY3Vyc2V1cis0KS5tYXAoKHgsaTIpPT5lbCgnZGl2Jyx7a2V5OnhbMF0sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOicxNnB4JyxwYWRkaW5nOm0/JzEwcHggMTRweCc6JzEycHggMThweCcsYm9yZGVyQm90dG9tOmkyPDM/JzFweCBzb2xpZCAnK0xJTkU6J25vbmUnLG9wYWNpdHk6aTI9PT0zPzE6KGkyPT09Mj8wLjc4OihpMj09PTE/MC42OjAuNDQpKX19LAogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOXB4JyxtaW5XaWR0aDowfX0sCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonM3B4JyxoZWlnaHQ6bT8nMTVweCc6JzE3cHgnLGJhY2tncm91bmQ6aTI9PT0zP1JFRDondHJhbnNwYXJlbnQnLHRyYW5zZm9ybTondHJhbnNsYXRlWSgycHgpJ319KSwKICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxOXB4JzonMjJweCcsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGNvbG9yOk5BVlksZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnfX0sU3RyaW5nKHhbMF0pKSksCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjpHUkVZLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LHhbMV0pKSkpLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic0cHgnLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwKICAgICAgICBbJ0V4dHJhY3Rpb24gZGVzIGFubsOpZXMsIGRlcyBlbXBsb3lldXJzIGV0IGRlcyByZXZlbnVzJywnUmVjb3VwZW1lbnQgZGUgdm9zIHLDqWdpbWVzIGVudHJlIGV1eCcsJ1VuZSBzb2l4YW50YWluZSBkZSBjb250csO0bGVzIHN1ciBjZSBxdWUgbGUgcmVsZXbDqSBkw6ljbGFyZSddLm1hcCgodDIsaTIpPT5lbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzlweCcsaGVpZ2h0OicxcHgnLGJhY2tncm91bmQ6JyNjOWNmZGEnLG1hcmdpbkJvdHRvbTonNXB4J319KSwKICAgICAgICAgIGVsKCdzcGFuJyxudWxsLHQyKSkpKSk7CgogICAgY29uc3QgY2FwdHVyZT1lbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzIwcHggMThweCAyMnB4JzonMjZweCAyNnB4IDI4cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEycHgnOicxNHB4J319LAogICAgICBraWNrKCdWb3RyZSByw6lzdWx0YXQnKSwKICAgICAgdGhpcy5zdGF0ZS5tYWlsT2sKICAgICAgICA/IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOHB4JzonMTBweCd9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIxcHgnOicyNXB4JyxsaW5lSGVpZ2h0OjEuMTQsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDE4ZW0nLGNvbG9yOk5BVll9fSwnQ1x1MjAxOWVzdCBub3TDqS4nKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ1ZvdXMgcmVjZXZyZXogbGUgcsOpc3VsdGF0IMOgIGNldHRlIGFkcmVzc2UsIGRhbnMgcXVlbHF1ZXMgbWludXRlcy4nKSkKICAgICAgICA6IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTFweCc6JzEzcHgnfX0sCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMXB4JzonMjVweCcsbGluZUhlaWdodDoxLjE0LGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAxOGVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdPbiB2b3VzIGVudm9pZSBhdXNzaSBsZSByw6lzdWx0YXQgcGFyIGUtbWFpbFx1MDBhMD8nKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ1ZvdHJlIGTDqWNvbXB0ZSwgdm9zIGFubsOpZXMgw6AgdsOpcmlmaWVyIGV0IGxlIGxpZW4gcG91ciB5IHJldmVuaXIuIFNhbnMgcmVkw6lwb3NlciB2b3RyZSByZWxldsOpLicpLAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic1cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzEwcHgnOicxMXB4J319LAogICAgICAgICAgICAgIFsnVW4gc2V1bCBtZXNzYWdlLCBjZWx1aSBxdWkgcG9ydGUgdm90cmUgcsOpc3VsdGF0LicsJ0F1Y3VuZSBsZXR0cmUgZFx1MjAxOWluZm9ybWF0aW9uLCBhdWN1bmUgcHVibGljaXTDqS4nXS5tYXAoKHgsaTIpPT5lbCgnZGl2Jyx7a2V5OmkyLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzVweCd9fSksCiAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpOQVZZfX0seCkpKSksCiAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt0aGlzLmNhcHR1cmVNYWlsKGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOicxMHB4J319LAogICAgICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J2VtYWlsJyxyZXF1aXJlZDp0cnVlLHBsYWNlaG9sZGVyOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsJ2FyaWEtbGFiZWwnOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsb25Gb2N1czooKT0+e3RoaXMuX21haWxUb3VjaGVkPXRydWU7fSxvbklucHV0OigpPT57dGhpcy5fbWFpbFRvdWNoZWQ9dHJ1ZTt9LHN0eWxlOnt3aWR0aDonMTAwJScsYm94U2l6aW5nOidib3JkZXItYm94JyxoZWlnaHQ6bT8nNTRweCc6JzU2cHgnLG1pbkhlaWdodDptPyc1NHB4JzonNTZweCcscGFkZGluZzonMCAxNXB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNnB4JzonMTYuNXB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZSd9fSksCiAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmNhcHR1cmVNYWlsKGlucD9pbnAudmFsdWU6JycpO30sb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nIzIzMmM3YSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJveFNoYWRvdz0nMCAxMnB4IDI2cHggLTEycHggcmdiYSgxNCwxOSw3OSwwLjU1KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPU5BVlk7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJveFNoYWRvdz0nbm9uZSc7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHdpZHRoOicxMDAlJyxoZWlnaHQ6bT8nNTZweCc6JzU4cHgnLGJhY2tncm91bmQ6TkFWWSxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTZweCc6JzE2LjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonLTAuMDFlbScsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UsIGJveC1zaGFkb3cgLjE4cyBlYXNlJ319LCdSZWNldm9pciBsZSByw6lzdWx0YXQgcGFyIGUtbWFpbCcpKSksCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTFweCc6JzEycHgnLGZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0xlIHLDqXN1bHRhdCBzXHUyMDE5YWZmaWNoZSBpY2kgZGFucyBxdWVscXVlcyBzZWNvbmRlcywgJyxlbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnYXZlYyBvdSBzYW5zIGFkcmVzc2UnKSwnLicpKTsKCiAgICBjb25zdCBjaGFyZ2VtZW50PW0KICAgICAgPyBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksYmFja2dyb3VuZDpQQVBFUixwYWRkaW5nOicxOHB4IDE2cHggMjBweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzE2cHgnfX0sCiAgICAgICAgICB0ZXRlLGNhcHR1cmUsY29ycHNEZWZpbGUpCiAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6UEFQRVIscGFkZGluZzonMzRweCAzNHB4IDM2cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6JzFmciAzOTJweCcsZ2FwOicwIDQwcHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMTJweCd9fSx0ZXRlLGNvcnBzRGVmaWxlKSwKICAgICAgICAgIGNhcHR1cmUpOwoKICAgIGNvbnN0IGFwcHVpPShuLGxhYik9PmVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicycHggc29saWQgJytOQVZZLHBhZGRpbmdUb3A6bT8nOHB4JzonOXB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonMXB4J319LAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjZweCc6JzMwcHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjhlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSxuKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4Jyxmb250V2VpZ2h0OjYwMCxsaW5lSGVpZ2h0OjEuMyxjb2xvcjpOQVZZfX0sbGFiKSk7CgogICAgdmFyIGFyZ3VzPWVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzExcHgnfX0sCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpOQVZZfX0sJ1N1ciAnLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9fSwoQ1RSTC50b3RhbCE9bnVsbD9DVFJMLnRvdGFsOjYwKSsnIGNvbnRyw7RsZXMnKSwnLCAnLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9fSxTdHJpbmcoQ1RSTC5hdHRlbnRlIT1udWxsP0NUUkwuYXR0ZW50ZToyNCkpLCcgblx1MjAxOW9udCBwYXMgcHUgw6p0cmUgZmFpdHNcdTAwYTA6ICcsZWwoJ3NwYW4nLHtzdHlsZTp7Y29sb3I6R1JFWX19LCdpbHMgYXR0ZW5kZW50IHZvcyByw6lwb25zZXMuIENcdTIwMTllc3QgbMOgIHF1ZSBsZSBkb3NzaWVyIHZhIHBsdXMgbG9pbiBxdWUgY2V0dGUgbGVjdHVyZS4nKSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0V0IG1hIGNhaXNzZSwgamUgbmUgcGV1eCBwYXMgbHVpIGRlbWFuZGVyIG1vaS1tw6ptZVx1MDBhMD8nKSwnIEVsbGUgcsOpcG9uZCBhdXggZGVtYW5kZXMgcXVcdTIwMTlvbiBsdWkgYWRyZXNzZSwgbW90aWYgcGFyIG1vdGlmXHUwMGEwOiBjZSBkb3NzaWVyIGVzdCBjZSBxdWkgbGVzIGFkcmVzc2UuJykpOwoKICAgIGNvbnN0IHBhbm5lYXU9ZWwoJ2Rpdicse3N0eWxlOntiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQscGFkZGluZzptPycxOHB4JzonMjJweCAyNHB4IDI0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxMnB4J319LAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOm0/JzExcHgnOicxMnB4J319LAogICAgICAgIChQSE9UTz9lbCgnaW1nJyx7c3JjOlBIT1RPLGFsdDp0aGlzLmZvdW5kZXIoKSxzdHlsZTp7ZmxleFNocmluazowLHdpZHRoOm0/JzQ2cHgnOic1MnB4JyxoZWlnaHQ6bT8nNDZweCc6JzUycHgnLGJvcmRlclJhZGl1czonNTAlJyxvYmplY3RGaXQ6J2NvdmVyJyxkaXNwbGF5OidibG9jayd9fSk6ZWwoJ2Rpdicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6bT8nNDZweCc6JzUycHgnLGhlaWdodDptPyc0NnB4JzonNTJweCcsYm9yZGVyUmFkaXVzOic1MCUnLGJhY2tncm91bmQ6JyNlZWYyZmInLGJvcmRlcjonMXB4IHNvbGlkICcrTElORX19KSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttaW5XaWR0aDowfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGZvbnRXZWlnaHQ6NjAwLGxpbmVIZWlnaHQ6MS4yNSxjb2xvcjpOQVZZfX0sdGhpcy5mb3VuZGVyKCkpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjpOQVZZfX0sJ2FuYWx5c2Ugdm90cmUgcmVsZXbDqSBhbm7DqWUgcGFyIGFubsOpZSwnKSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTJweCc6JzEyLjVweCcsbGluZUhlaWdodDoxLjM1LGNvbG9yOkdSRVl9fSwncsOpZGlnZSB2b3RyZSBiaWxhbiByZXRyYWl0ZSBldCB2b3MgY291cnJpZXJzJykpKSwKICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxMXB4JzonMTJweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLGdhcDonOXB4JyxmbGV4V3JhcDond3JhcCd9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMzhweCc6JzQ0cHgnLGxpbmVIZWlnaHQ6MC45Mixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMzJlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSx0aGlzLnByaWNlKCkpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6R1JFWX19LCdlbiB1bmUgZm9pcywgcmVtaXMgc291cyAnK3RoaXMuZGVsYWkoKSkpLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic0cHgnfX0sCiAgICAgICAgWydMZXMgc3VqZXRzIHJldGVudXMsIGF2ZWMgbGV1cnMgYW5uw6llcyBldCBsZXMgcGnDqGNlcyDDoCBqb2luZHJlJywnVm90cmUgcmV0cmFpdGUgZW4gZXVyb3MgcGFyIG1vaXMsIGV0IHZvdHJlIGRhdGUgZGUgZMOpcGFydCcsJ0xlcyBjb3VycmllcnMsIGxlcyByZWxhbmNlcyBldCBsZSBzdWl2aSddLm1hcCgoeCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic4cHgnfX0sCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzEwcHgnLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOlJFRCxtYXJnaW5Cb3R0b206JzVweCd9fSksCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NTAwfX0seCkpKSksCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTFweCc6JzEycHgnLGZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOk5BVll9fSwnTGVzIGNvcnJlY3Rpb25zIHNlIGZvbnQgbGUgcGx1cyBzaW1wbGVtZW50ICcsZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjYwMH19LCdhdmFudCBsYSBsaXF1aWRhdGlvbicpLCdcdTAwYTA6ICcsZWwoJ3NwYW4nLHtzdHlsZTp7Y29sb3I6R1JFWX19LCd1bmUgZm9pcyBsYSByZXRyYWl0ZSBsaXF1aWTDqWUsIGxlIHJhcHBlbCBkZXMgc29tbWVzIGR1ZXMgZXN0IHBsYWZvbm7DqSDDoCBjaW5xIGFucy4nKSksCiAgICAgIGVsKCdhJyx7aHJlZjonaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvP3V0bV9zb3VyY2U9YWRjZiZ1dG1fbWVkaXVtPXBhZ2UtdmVudGUmdXRtX2NhbXBhaWduPWFuYWx5c2UtcmVsZXZlJnZpYT1kaXJlY3QnLG9uQ2xpY2s6ZT0+e3ZhciBqPXRoaXMuc3RhdGUuamV0b247aWYoIWopcmV0dXJuO2UucHJldmVudERlZmF1bHQoKTt2YXIgdT1lLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJyl8fCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy8nO3ZhciBfY2s9ZnVuY3Rpb24obil7cmV0dXJuIChkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKD86Xnw7ICknK24rJz0oW147XSopJykpfHxbXSlbMV18fCcnO307dmFyIF9jaWQ9X2NrKCdfZ2EnKS5zcGxpdCgnLicpLnNsaWNlKC0yKS5qb2luKCcuJyk7dmFyIF9zaWQ9KF9jaygnX2dhX0Q5UzI0QzZKNDcnKS5zcGxpdCgnLicpWzJdKXx8Jyc7WydnY2xpZCcsJ2dicmFpZCcsJ3dicmFpZCddLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciB2PW5ldyBVUkwobG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldChjKTtpZih2KXNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYyx2KTt9Y2F0Y2goZSl7fX0pO3ZhciBfYWRkPXthcGVyY3U6an07aWYoX2NpZClfYWRkLmNpZD1fY2lkO2lmKF9zaWQpX2FkZC5zaWQ9X3NpZDtbJ2djbGlkJywnZ2JyYWlkJywnd2JyYWlkJ10uZm9yRWFjaChmdW5jdGlvbihjKXt0cnl7dmFyIHY9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShjKTtpZih2KV9hZGRbY109djt9Y2F0Y2goZSl7fX0pO2Zvcih2YXIgX2sgaW4gX2FkZCl7aWYodS5pbmRleE9mKF9rKyc9Jyk8MCl1Kz0odS5pbmRleE9mKCc/Jyk+LTE/JyYnOic/JykrX2srJz0nK2VuY29kZVVSSUNvbXBvbmVudChfYWRkW19rXSk7fW10cmFjaygnY3RhX2NsaWNrJyx7ZGVzdDoncHJlYW5hbHlzZScsZW1wbGFjZW1lbnQ6J3Jlc3VsdGF0J30pO210cmFjaygnY2hlY2tvdXRfb3Blbicse3ZpYToncHJlYW5hbHlzZSd9KTt3aW5kb3cubG9jYXRpb24uaHJlZj11O30sc3R5bGU6e3RleHREZWNvcmF0aW9uOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnLHdpZHRoOicxMDAlJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLHRleHRBbGlnbjonY2VudGVyJyxoZWlnaHQ6bT8nNTZweCc6JzYwcHgnLHBhZGRpbmc6JzAgMTZweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLGJveFNoYWRvdzonMCAxNHB4IDMwcHggLTE0cHggcmdiYSgyNDUsMzcsNzMsMC42KScsdHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSwgdHJhbnNmb3JtIC4xOHMgZWFzZSd9LG9uTW91c2VFbnRlcjpldj0+e2V2LmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO2V2LmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LG9uTW91c2VMZWF2ZTpldj0+e2V2LmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJztldi5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fX0sJ09idGVuaXIgbW9uIGJpbGFuIHJldHJhaXRlJyksCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxnYXA6JzdweCcsZm9udFNpemU6JzEyLjVweCcsY29sb3I6R1JFWX19LAogICAgICAgIGVsKCdzdmcnLHt3aWR0aDoxMSxoZWlnaHQ6MTMsdmlld0JveDonMCAwIDEyIDE0JyxmaWxsOidub25lJ30sZWwoJ3BhdGgnLHtkOidNMyA2VjRhMyAzIDAgMDE2IDB2Micsc3Ryb2tlOkdSRVksc3Ryb2tlV2lkdGg6MS40fSksZWwoJ3JlY3QnLHt4OjEseTo2LHdpZHRoOjEwLGhlaWdodDo3LHN0cm9rZTpHUkVZLHN0cm9rZVdpZHRoOjEuNH0pKSwKICAgICAgICAnUGFpZW1lbnQgc8OpY3VyaXPDqVx1MDBhMMK3IGF1Y3VuIGFib25uZW1lbnQnKSk7CgogICAgLy8gTGVzIGFubsOpZXMgw6AgdsOpcmlmaWVyLCB0ZWxsZXMgcXVlIGxlIHNlcnZldXIgbGVzIHJlbnZvaWUuIFJpZW4gZW4gZHVyLgogICAgdmFyIF9hbm5lZXM9KEEuYW5uZWVzX2FfdmVyaWZpZXJfbGlzdGV8fEEuYW5uZWVzX2FfdmVyaWZpZXJ8fChBLmNvbnRyb2xlcyYmQS5jb250cm9sZXMuYW5uZWVzKXx8W10pOwogICAgaWYoIUFycmF5LmlzQXJyYXkoX2FubmVlcykpIF9hbm5lZXM9W107CiAgICBfYW5uZWVzPV9hbm5lZXMuc2xpY2UoMCw2KTsKCiAgICBjb25zdCByZXN1bHRhdD0oKCk9PnsKICAgICAgZnVuY3Rpb24gY2hpcChrKXsgdmFyIHY9Q0hba107IHZhciBsYWI9TEFCRUxTW2tdfHxrOyB2YXIgbj0oaz09PSd0cmltZXN0cmVzX3JlY3VwZXJhYmxlcycmJlBMQUYpP2VsKCdzcGFuJyx7c3R5bGU6e2Rpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOic1cHgnfX0sZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTonaW5oZXJpdCcsZm9udFNpemU6bT8nMTIuNXB4JzonMTMuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpHUkVZfX0sJ2p1c3F1XHUyMDE5XHUwMGUwJyksU3RyaW5nKHYpKTpTdHJpbmcodik7IHJldHVybiBhcHB1aShuLGxhYik7IH0KICAgICAgdmFyIGJpZyx1bml0LHN1YixraWNrVHh0LG5vdGUscGhyYXNlPScnLHBocmFzZUxlYWQ9ZmFsc2UsVkVSUj0hIShBJiZBLnZlcnJvdWlsbGUpOwogICAgICBpZihBLmFjY3JvY2hlPT09J21vbnRhbnQnJiZBLm1vbnRhbnQpeyBiaWc9Jyc7IHVuaXQ9Jyc7IHN1Yj0nJzsga2lja1R4dD0nQ2UgcXVlIHZvcyBhbm7DqWVzIMOgIHbDqXJpZmllciByZXByw6lzZW50ZW50Jzsgbm90ZT0nJzsgcGhyYXNlPShBLm1vbnRhbnQucGhyYXNlfHwnJyk7IHBocmFzZUxlYWQ9dHJ1ZTsgfQogICAgICBlbHNlIGlmKEEuYWNjcm9jaGU9PT0ndHJpbWVzdHJlcycpeyBiaWc9KFBMQUY/J2p1c3F1XHUyMDE5XHUwMGUwICc6JycpKyhDSC50cmltZXN0cmVzX3JlY3VwZXJhYmxlc3x8MCk7IHVuaXQ9J3RyaW1lc3RyZXMgclx1MDBlOWN1cFx1MDBlOXJhYmxlcyc7IHN1Yj0nJzsga2lja1R4dD0nQ2UgcXVlIHZvcyBhbm5cdTAwZTllcyBcdTAwZTAgdlx1MDBlOXJpZmllciByZXByXHUwMGU5c2VudGVudCc7IG5vdGU9J0F1IG1pZXV4LCBzaSB0b3V0ZXMgbGVzIGNvcnJlY3Rpb25zIGFib3V0aXNzYWllbnQuIENcdTIwMTllc3QgdW4gY2FsY3VsLCBwYXMgdW5lIHByb21lc3NlXHUwMGEwOiB2b3RyZSBjYWlzc2UgZFx1MDBlOWNpZGUsIGRlbWFuZGUgcGFyIGRlbWFuZGUuJzsgfQogICAgICBlbHNlIGlmKEEuYWNjcm9jaGU9PT0nY29uZmlybWF0aW9uJyl7IGJpZz1TdHJpbmcoTFUuYW5uZWVzX2NvaGVyZW50ZXMhPW51bGw/TFUuYW5uZWVzX2NvaGVyZW50ZXM6JycpOyB1bml0PSdhbm5cdTAwZTllcyBzdXIgJysoTFUuYW5uZWVzfHwnJykrJyBjb2hcdTAwZTlyZW50ZXMnOyBzdWI9Jyc7IGtpY2tUeHQ9J0NlIHF1ZSB2b3RyZSByZWxldlx1MDBlOSBjb25maXJtZSc7IG5vdGU9Jyc7IH0KICAgICAgZWxzZSB7IGJpZz1TdHJpbmcoQ0guZGlzcG9zaXRpZnNfZGF0ZSE9bnVsbD9DSC5kaXNwb3NpdGlmc19kYXRlOicnKTsgdW5pdD0nZGlzcG9zaXRpZnMgcG91ciBwYXJ0aXIgcGx1cyB0XHUwMGY0dCc7IHN1Yj0ncXVpIHBldXZlbnQgYXZhbmNlciB2b3RyZSBkXHUwMGU5cGFydCc7IGtpY2tUeHQ9J0NlIHF1ZSB2b3RyZSByZWxldlx1MDBlOSBwZXJtZXQgc3VyIHZvdHJlIGRhdGUnOyBub3RlPScnOyB9CiAgICAgIHZhciBjYXB0dXJlVmVycj1lbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzE4cHgnOicyMHB4IDIycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxMnB4J319LHRoaXMuc3RhdGUubWFpbE9rP2VsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE2cHgnOicxN3B4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0PigJllc3QgcGFydGkuJyksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdPbiBkw6libG9xdWUgdm9zIHN1amV0cy4nKSk6ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMHB4JzonMTJweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTlweCc6JzIycHgnLGxpbmVIZWlnaHQ6MS4xNixmb250V2VpZ2h0OjUwMCxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdDZXMgJysoU1VKLnRvdGFsfHwwKSsnIHN1amV0cywgb24gdm91cyBkaXQgbGVzcXVlbHMgZXQgc3VyIHF1ZWxsZXMgYW5uw6llcy4nKSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwnTGFpc3NleiB2b3RyZSBhZHJlc3NlLiBPbiB2b3VzIGxlcyBlbnZvaWUsIGF2ZWMgbGUgbGllbiBwb3VyIHJldmVuaXIgaWNpIHNhbnMgcmVkw6lwb3NlciB2b3RyZSByZWxldsOpLicpLGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt0aGlzLmRldmVycm91aWxsZXIoZS50YXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSk7fSxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjptPydjb2x1bW4nOidyb3cnLGdhcDonMTBweCd9fSxlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxtaW5XaWR0aDowLGhlaWdodDptPyc1NHB4JzonNTZweCcscGFkZGluZzonMCAxNXB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNnB4JzonMTYuNXB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSxlbCgnYnV0dG9uJyx7dHlwZTonYnV0dG9uJyxvbkNsaWNrOmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGZvPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlwPWZvJiZmby5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJyk7dGhpcy5kZXZlcnJvdWlsbGVyKGlwP2lwLnZhbHVlOicnKTt9LG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZsZXhTaHJpbms6MCxoZWlnaHQ6bT8nNTRweCc6JzU2cHgnLHBhZGRpbmc6JzAgMjZweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NzAwfX0sJ1ZvaXIgbGVzIHN1amV0cycpKSkpOwoKICAgICAgcmV0dXJuIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDonM3B4IHNvbGlkICcrUkVELGJhY2tncm91bmQ6JyNmZmZmZmYnLGJveFNoYWRvdzonMCAzMHB4IDcwcHggLTQwcHggcmdiYSgxNCwxOSw3OSwwLjQpJ319LAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDpOQVZZLHBhZGRpbmc6bT8nMTZweCAxOHB4IDE4cHgnOicyMnB4IDM0cHggMjRweCd9fSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzE0cHgnLGp1c3RpZnlDb250ZW50OidzcGFjZS1iZXR3ZWVuJ319LAogICAgICAgICAgICBraWNrKCdVbmUgcHJlbWlcdTAwZThyZSBsZWN0dXJlIGF1dG9tYXRpcXVlIGEgcGFyY291cnUgdm90cmUgcmVsZXZcdTAwZTknLCcjZmY4MDk1JyksCiAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRTaXplOicxMHB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE2ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNhYWIyZWUnLGJvcmRlcjonMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zMiknLHBhZGRpbmc6JzNweCA4cHgnfX0sJ0dyYXR1aXQnKSksCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxMHB4JzonMTJweCcsZGlzcGxheTonZmxleCcsZmxleFdyYXA6J3dyYXAnLGdhcDptPycxMHB4IDIycHgnOicwIDQ0cHgnfX0sCiAgICAgICAgICAgIFtbU3RyaW5nKExVLmFubmVlcyE9bnVsbD9MVS5hbm5lZXM6JycpLCdhbm5cdTAwZTllcyBsdWVzLCAnKyhMVS5kZWJ1dHx8JycpKycgXHUwMGUwICcrKExVLmZpbnx8JycpXSxbU3RyaW5nKExVLmVtcGxveWV1cnMhPW51bGw/TFUuZW1wbG95ZXVyczonJyksJ2VtcGxveWV1cnMnXSxbU3RyaW5nKExVLmNvbnRyb2xlcyE9bnVsbD9MVS5jb250cm9sZXM6JycpLCdjb250clx1MDBmNGxlcyBwYXNzXHUwMGU5cyddLFtTdHJpbmcoTFUuYW5uZWVzX2NvaGVyZW50ZXMhPW51bGw/TFUuYW5uZWVzX2NvaGVyZW50ZXM6JycpLCdhbm5cdTAwZTllcyBjb2hcdTAwZTlyZW50ZXMnXV0ubWFwKGZ1bmN0aW9uKHgsaSl7IHJldHVybiBlbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzdweCd9fSwKICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI1cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDI4ZW0nLGNvbG9yOicjZmZmZmZmJyxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSx4WzBdKSwKICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuMzUsY29sb3I6JyNhYWIyZWUnfX0seFsxXSkpOyB9KSkpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczptPycxZnInOicxZnIgMzkycHgnLGdhcDonMCd9fSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7cGFkZGluZzptPycyMHB4IDE4cHggMjJweCc6JzMwcHggMzRweCAzMnB4Jyxib3JkZXJSaWdodDptPydub25lJzonMXB4IHNvbGlkICcrTElORSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxOHB4JzonMjRweCd9fSwKICAgICAgICAgICAgZWwoJ2RpdicsbnVsbCwKICAgICAgICAgICAgICBraWNrKGtpY2tUeHQpLAogICAgICAgICAgICAgIChiaWc/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOXB4JzonMTFweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonZmxleC1lbmQnLGdhcDptPycxMHB4JzonMTRweCcsZmxleFdyYXA6J3dyYXAnfX0sCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nNTRweCc6JzgycHgnLGxpbmVIZWlnaHQ6MC44NCxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wNDJlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSxiaWcpLAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntwYWRkaW5nQm90dG9tOm0/JzNweCc6JzdweCd9fSwKICAgICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNnB4JzonMTlweCcsZm9udFdlaWdodDo2MDAsbGluZUhlaWdodDoxLjEsY29sb3I6TkFWWX19LHVuaXQpLAogICAgICAgICAgICAgICAgICBzdWI/ZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS4zLGNvbG9yOkdSRVl9fSxzdWIpOm51bGwpKTpudWxsKSwKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBwaHJhc2U/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOHB4JzonMTJweCcsbWF4V2lkdGg6JzU4Y2gnLGZvbnRTaXplOnBocmFzZUxlYWQ/KG0/JzE4cHgnOicyMnB4Jyk6KG0/JzE0cHgnOicxNXB4JyksbGluZUhlaWdodDpwaHJhc2VMZWFkPzEuMzU6MS41LGNvbG9yOnBocmFzZUxlYWQ/TkFWWTpJTkssZm9udFdlaWdodDpwaHJhc2VMZWFkPzYwMDo1MDAsbGV0dGVyU3BhY2luZzpwaHJhc2VMZWFkPyctMC4wMTJlbSc6JzAnfX0scGhyYXNlKTpudWxsLCBub3RlP2VsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzEwcHgnOicxM3B4JyxtYXhXaWR0aDonNTZjaCcsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELHBhZGRpbmdMZWZ0Om0/JzEwcHgnOicxMnB4Jyxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sbm90ZSk6bnVsbCwKICAgICAgICAgICAgICAoX2FubmVlcy5sZW5ndGg/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTRweCc6JzE4cHgnLGJhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzEzcHggMTVweCc6JzE2cHggMjBweCd9fSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6JzEwLjVweCcsZm9udFdlaWdodDo3MDAsbGV0dGVyU3BhY2luZzonMC4xOGVtJyx0ZXh0VHJhbnNmb3JtOid1cHBlcmNhc2UnLGNvbG9yOkdSRVl9fSxfYW5uZWVzLmxlbmd0aD4xPydWb3MgYW5uw6llcyDDoCB2w6lyaWZpZXInOidWb3RyZSBhbm7DqWUgw6AgdsOpcmlmaWVyJyksCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc3cHgnOic5cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6bT8nOHB4JzonMTBweCd9fSwKICAgICAgICAgICAgICAgICAgX2FubmVlcy5tYXAoZnVuY3Rpb24oYW4saTIpeyByZXR1cm4gZWwoJ3NwYW4nLHtrZXk6aTIsc3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjZweCc6JzMycHgnLGxpbmVIZWlnaHQ6MSxmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMjhlbScsY29sb3I6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcycsYm9yZGVyQm90dG9tOicycHggc29saWQgJytSRUQscGFkZGluZ0JvdHRvbTonM3B4J319LFN0cmluZyhhbikpOyB9KSksCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc5cHgnOicxMXB4Jyxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6SU5LfX0sJ0NlIHNvbnQgdm9zIGFubsOpZXMsIHN1ciB2b3RyZSByZWxldsOpLiBMZSBkb3NzaWVyIGRpdCBwb3VyIGNoYWN1bmUgY2UgcXVpIGNsb2NoZSwgbGUgbW90aWYgw6AgaW52b3F1ZXIgZXQgbGEgcGnDqGNlIMOgIGpvaW5kcmUuJykpOm51bGwpLAogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzE0cHgnOicxOHB4JyxkaXNwbGF5OidncmlkJyxncmlkVGVtcGxhdGVDb2x1bW5zOicxZnIgMWZyIDFmcicsZ2FwOm0/JzEwcHgnOicxNnB4J319LAogICAgICAgICAgICAgICAgKFZFUlI/W106KEEuY2hpZmZyZXNfYV9tb250cmVyfHxbXSkpLnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKGspeyByZXR1cm4gZWwoJ2Rpdicse2tleTprfSxjaGlwKGspKTsgfSkpKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZ1RvcDptPycxNnB4JzonMjBweCd9fSwKICAgICAgICAgICAgICBraWNrKFZFUlI/KChTVUoudG90YWx8fDApKycgc3VqZXRzIHRyb3V2w6lzIHN1ciB2b3RyZSByZWxldsOpJyk6KChTVUoubW9udHJlcz9TVUoubW9udHJlcy5sZW5ndGg6MCkrJyBkZXMgJysoU1VKLnRvdGFsfHwwKSsnIHN1amV0cyB0cm91dsOpcycpKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPyc4cHgnOicxMHB4J319LAogICAgICAgICAgICAgICAgKFZFUlI/W106KFNVSi5tb250cmVzfHxbXSkpLm1hcChmdW5jdGlvbih4LGkpeyByZXR1cm4gZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOidiYXNlbGluZScsZ2FwOm0/JzEwcHgnOicxMnB4Jyxib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxMXB4IDAnOicxM3B4IDAnfX0sCiAgICAgICAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonOHB4JyxoZWlnaHQ6JzhweCcsYmFja2dyb3VuZDpSRUQsbWFyZ2luVG9wOic2cHgnfX0pLAogICAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MCxmb250U2l6ZTptPycxNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNDUsY29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMH19LHgudGl0cmUseC5kZXBsYWNlX2xhX2RhdGU/ZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFdlaWdodDo1MDAsY29sb3I6R1JFWX19LCdcdTAwYTBcdTAwYjcgcGV1dCBhdmFuY2VyIHZvdHJlIGRcdTAwZTlwYXJ0Jyk6bnVsbCksCiAgICAgICAgICAgICAgICAgICh4LnRyaW1lc3RyZXNfZW5famV1IT1udWxsKT9lbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6JyNjNDE3M2EnLHdoaXRlU3BhY2U6J25vd3JhcCd9fSx4LnRyaW1lc3RyZXNfZW5famV1KycgdHJpbWVzdHJlcyBlbiBqZXUnKTpudWxsKTsgfSkpLAogICAgICAgICAgICAgICghVkVSUiYmU1VKLmF1dHJlcz4wKT9lbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDptPycxMHB4JzonMTJweCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnRXQgJytTVUouYXV0cmVzKycgYXV0cmVzIHBvaW50cyBkYW5zIGxlIGRvc3NpZXIgY29tcGxldCwgYXZlYyBsZXMgYW5uXHUwMGU5ZXMgY29uY2Vyblx1MDBlOWVzLCBsZSBtb3RpZiBcdTAwZTAgaW52b3F1ZXIgZXQgbGVzIGNvdXJyaWVycy4gSWxzIG5lIHNvbnQgcGFzIG5vbW1cdTAwZTlzIGljaVx1MDBhMDogY1x1MjAxOWVzdCBwclx1MDBlOWNpc1x1MDBlOW1lbnQgY2UgcXVcdTIwMTlvbiBuZSBwZXV0IHBhcyB0cm91dmVyIHNldWwuJyk6bnVsbCksCiAgICAgICAgICAgIChWRVJSP2NhcHR1cmVWZXJyOmNhcHR1cmUpLGFyZ3VzKSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDonI2Y4ZmFmYycscGFkZGluZzptPycxOHB4JzonMjJweCAyMHB4IDI0cHgnLGJvcmRlclRvcDptPycxcHggc29saWQgJytMSU5FOidub25lJ319LAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6bT9udWxsOntwb3NpdGlvbjonc3RpY2t5Jyx0b3A6JzI0cHgnfX0scGFubmVhdSkpKSwKCiAgICAgICAgLy8gRW5jYXJ0IHBlcnNvbm5hbGlzw6kgKHNlcnZldXIpIDogbGUgY2FzIMOgIGVsbGUsIGp1c3RlIGFwcsOocyBsYSBzeW50aMOoc2UgZ3JhdHVpdGUsIGF2YW50IGxlIGTDqXRhaWwgbG9uZy4KICAgICAgICAoIVZFUlImJkEuZW5jYXJ0JiZBLmVuY2FydC5waHJhc2U/ZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycyMHB4IDE4cHggMjJweCc6JzI2cHggMzRweCAyOHB4J319LGVsKCdkaXYnLHtzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrUkVELHBhZGRpbmc6bT8nMTZweCAxOHB4JzonMjBweCAyNHB4J319LChBLmVuY2FydC50aXRyZT9lbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxnYXA6JzEwcHgnLGZsZXhXcmFwOid3cmFwJyxtYXJnaW5Cb3R0b206bT8nOHB4JzonMTBweCd9fSwoQS5lbmNhcnQuYW5uZWUhPW51bGw/ZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyMnB4JzonMjZweCcsbGluZUhlaWdodDoxLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyOGVtJyxjb2xvcjpOQVZZLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJ319LFN0cmluZyhBLmVuY2FydC5hbm5lZSkpOm51bGwpLGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzExcHgnOicxMS41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMTRlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjonI2M0MTczYSd9fSxBLmVuY2FydC50aXRyZSkpOm51bGwpLGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycxN3B4JzonMjBweCcsbGluZUhlaWdodDoxLjQyLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sQS5lbmNhcnQucGhyYXNlKSkpOm51bGwpLAoKICAgICAgICAvLyBOb21tZXIgbGEgbWFjaGluZSBhdmFudCBxdSdlbGxlIG5lIGZhc3NlIG5hw650cmUgbGUgc291cMOnb24uCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycyMHB4IDE4cHggMjJweCc6JzI4cHggMzRweCAzMHB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOm0/JzE2cHgnOic0MHB4JyxhbGlnbkl0ZW1zOidzdGFydCd9fSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZmxleDonMSAxIDAnLG1pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nOHB4JzonMTBweCd9fSwKICAgICAgICAgICAga2ljaygnQ2UgcXVpIGEgw6l0w6kgZmFpdCBlbiB0cm9pcyBzZWNvbmRlcycpLAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOklOS319LCdDZXR0ZSBwcmVtacOocmUgbGVjdHVyZSBlc3QgYXV0b21hdGlxdWUsIGV0IGNcdTIwMTllc3Qgc2EgZm9yY2UuIEVuIHRyb2lzIHNlY29uZGVzLCBlbGxlIGEgcGFyY291cnUgY2hhcXVlIGFubsOpZSBkdSByZWxldsOpIGV0IHBhc3PDqSBsYSBjYXJyacOocmUgYXUgY3JpYmxlIGRcdTIwMTl1bmUgc29peGFudGFpbmUgZGUgY29udHLDtGxlcywgYXZlYyB1bmUgZXhoYXVzdGl2aXTDqSBldCB1bmUgY29uc3RhbmNlIHF1XHUyMDE5YXVjdW5lIGxlY3R1cmUgw6AgbGEgbWFpbiBuXHUyMDE5YXR0ZWludC4gRWxsZSBuZSByYXRlIHJpZW4gZGUgY2UgcXVpIHNlIHZvaXQgc3VyIGxlIGRvY3VtZW50IHNldWwuJykpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MCxkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTJweCc6JzE0cHgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGJvcmRlckxlZnQ6bT8nbm9uZSc6JzJweCBzb2xpZCAnK05BVlkscGFkZGluZ0xlZnQ6bT8nMCc6JzIycHgnLGJvcmRlclRvcDptPycycHggc29saWQgJytOQVZZOidub25lJyxwYWRkaW5nVG9wOm0/JzE0cHgnOicwJ319LAogICAgICAgICAgICAoUEhPVE8/ZWwoJ2ltZycse3NyYzpQSE9UTyxhbHQ6dGhpcy5mb3VuZGVyKCksc3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDptPyc0NnB4JzonNTRweCcsaGVpZ2h0Om0/JzQ2cHgnOic1NHB4Jyxib3JkZXJSYWRpdXM6JzUwJScsb2JqZWN0Rml0Oidjb3ZlcicsZGlzcGxheTonYmxvY2snfX0pOm51bGwpLAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjAsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzZweCd9fSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpOQVZZLGZvbnRXZWlnaHQ6NjAwfX0sJ0xlIGRvc3NpZXIsIGNcdTIwMTllc3QgbW9uIHRyYXZhaWwuIEplIHJlcHJlbmRzIHZvdHJlIHJlbGV2w6kgZGUgY2FycmnDqHJlIGV0IGplIGxcdTIwMTlhbmFseXNlIGxpZ25lIHBhciBsaWduZSBwb3VyIHZvdXMgcHJvZHVpcmUgdW4gYmlsYW4gcmV0cmFpdGUgY29tcGxldC4nKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzcHgnOicxMy41cHgnLGxpbmVIZWlnaHQ6MS40NSxjb2xvcjpHUkVZfX0sdGhpcy5mb3VuZGVyKCkrJywgZm9uZGF0ZXVyIGRcdTIwMTlBRENGJykpKSksCgogICAgICAgIC8vIENlIHF1ZSBjZSB0cmF2YWlsIGNvw7t0ZSBhaWxsZXVycy4gSWNpLCBldCBwYXMgw6AgODAgJSBkdSBkw6lmaWxlbWVudC4KICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzIwcHggMThweCAyMnB4JzonMjhweCAzNHB4IDMwcHgnfX0sCiAgICAgICAgICBraWNrKCdDZSBxdWUgY2/Du3RlIGFpbGxldXJzIHVuIHRyYXZhaWwgc3VyIHNvbiByZWxldsOpIGRlIGNhcnJpw6hyZScpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nMTFweCc6JzE0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbid9fSwKICAgICAgICAgICAgW1snQmlsYW4gcmV0cmFpdGUgY29tcGxldCBlbiBjYWJpbmV0Jywnw6AgcGFydGlyIGRlIDFcdTAwYTA2MDhcdTAwYTDigqwnXSxbJ1ByaXNlIGVuIGNoYXJnZSBkZXMgZMOpbWFyY2hlcyBzZXVsZXMnLCfDoCBwYXJ0aXIgZGUgODI4XHUwMGEw4oKsJ10sWydFbnRyZXRpZW4gZFx1MjAxOXVuZSBoZXVyZSBhdmVjIHVuIGV4cGVydCcsJzM0OFx1MDBhMOKCrCBUVEMnXSxbJ0JpbGFuIGVuIGxpZ25lLCBzYW5zIGVudHJldGllbicsJzM0NVx1MDBhMOKCrCddLFsnQmlsYW4gZW4gbGlnbmUsIGF2ZWMgdW5lIGhldXJlIGRcdTIwMTlleHBlcnQnLCc2OTBcdTAwYTDigqwnXSxbJ0JpbGFuIHJldHJhaXRlLCBBRENGJywnMjQ5XHUwMGEw4oKsIFRUQyddXQogICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oeCxpMil7IHZhciBtaW5lPWkyPT09NTsgcmV0dXJuIGVsKCdkaXYnLHtrZXk6aTIsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2VlbicsZ2FwOicxNnB4JyxwYWRkaW5nOm0/JzlweCAwJzonMTBweCAwJyxib3JkZXJUb3A6KG1pbmU/JzJweCBzb2xpZCAnK05BVlk6JzFweCBzb2xpZCAnK0xJTkUpfX0sCiAgICAgICAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4JyxsaW5lSGVpZ2h0OjEuNCxjb2xvcjptaW5lP05BVlk6R1JFWSxmb250V2VpZ2h0Om1pbmU/NzAwOjQwMH19LHhbMF0pLAogICAgICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8obWluZT8nMjJweCc6JzE3cHgnKToobWluZT8nMjZweCc6JzE5cHgnKSxsaW5lSGVpZ2h0OjEsZm9udFdlaWdodDo1MDAsY29sb3I6bWluZT8nI2M0MTczYSc6TkFWWSxmb250VmFyaWFudE51bWVyaWM6J3RhYnVsYXItbnVtcyd9fSx4WzFdKSk7IH0pKSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWFyZ2luVG9wOm0/JzEwcHgnOicxMnB4Jyxmb250U2l6ZTptPycxM3B4JzonMTMuNXB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpHUkVZfX0sJ1ByaXggcmVsZXbDqXMgbGUgNiBzZXB0ZW1icmUgMjAyNiBzdXIgbGVzIHNpdGVzIGRlcyBwcmVzdGF0YWlyZXMuIDMgZGUgY2VzIDQgb2ZmcmVzIG5lIHNlIGNvbmNsdWVudCBwYXMgZW4gbGlnbmVcdTAwYTA6IGlsIGZhdXQgdW4gZGV2aXMgb3UgdW4gcmVuZGV6LXZvdXMuIExcdTIwMTl1bmUgYW5ub25jZSB1biBkw6lsYWkgZGUgMiBtb2lzLiBBdWN1bmUgbmUgbWVudGlvbm5lIGRlIGNvdXJyaWVycyBwcsOqdHMgw6Agc2lnbmVyLicpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6bT8nOHB4JzonMTBweCcsYm9yZGVyTGVmdDonMnB4IHNvbGlkICcrUkVELHBhZGRpbmdMZWZ0Om0/JzEwcHgnOicxMnB4Jyxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNixjb2xvcjpJTkt9fSwnTFx1MjAxOcOpY2FydCBuXHUyMDE5ZXN0IHBhcyB1bmUgcmVtaXNlLiBBaWxsZXVycywgdm91cyBwYXlleiBkdSB0ZW1wcyBkXHUyMDE5ZXhwZXJ0IGVuIHJlbmRlei12b3VzLiBJY2ksIHZvdXMgcGF5ZXogdW4gYmlsYW4gcmV0cmFpdGUgcsOpZGlnw6kgcGFyICcrdGhpcy5mb3VuZGVyKCkrJyDDoCBwYXJ0aXIgZGUgdm90cmUgcmVsZXbDqS4nKSkpOwogICAgfSkoKTsKCiAgICB2YXIgX2FwPXRoaXMuYXBlcmN1fHx7fTsKICAgIHZhciBfc2Nhbj0hIV9hcC5zY2FuOwogICAgdmFyIF9kb2NuPShfYXAuZXRhdD09PSdwYXNfdW5fcmVsZXZlJyk/X2FwLmRvY3VtZW50Om51bGw7CiAgICB2YXIgX2x1PShfYXAubHUpfHx7fTsKCiAgICAvLyBCLiBDJ2VzdCBsZSBib24gZG9jdW1lbnQsIGxhIGxlY3R1cmUgw6ljaG91ZS4gTGUgUERGIHNhbnMgdGV4dGUgYXJyaXZlIGljaS4KICAgIGNvbnN0IGlsbGlzaWJsZT1lbCgnZGl2Jyx7c3R5bGU6e2JvcmRlcjonMXB4IHNvbGlkICcrTElORSxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxiYWNrZ3JvdW5kOicjZmZmZmZmJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzJweCAzNnB4IDM0cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxOHB4J319LGVsKCdkaXYnLG51bGwsa2ljaygnT24gYSBiaWVuIHZvdHJlIHJlbGV2w6knLCcjYzQxNzNhJyksZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZScsbWFyZ2luVG9wOm0/JzhweCc6JzEwcHgnfX0sJ1ZvdXMgYXZleiBlbnZvecOpIGxlIGJvbiBkb2N1bWVudC4nKSxlbCgncCcse3N0eWxlOnttYXJnaW46bT8nOHB4IDAgMCc6JzEwcHggMCAwJyxmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LCdD4oCZZXN0IG5vdXMgcXVpIG7igJlhdm9ucyBwYXMgc3UgbGUgbGlyZSwgZXQgY+KAmWVzdCBub3RyZSBwcm9ibMOobWUsIHBhcyBsZSB2w7R0cmUuIExhaXNzZXogdm90cmUgYWRyZXNzZSwgb24gbGUgcmVwcmVuZCDDoCBsYSBtYWluIGV0IG9uIHZvdXMgw6ljcml0LicpKSx0aGlzLnN0YXRlLm1haWxPaz9lbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzE2cHggMThweCc6JzE4cHggMjJweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCd9fSxlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE2cHgnOicxN3B4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0PigJllc3Qgbm90w6kuJyksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdPbiByZXByZW5kIHZvdHJlIHJlbGV2w6kgw6AgbGEgbWFpbiBldCBvbiB2b3VzIMOpY3JpdCDDoCBjZXR0ZSBhZHJlc3NlLicpKTplbCgnZGl2Jyx7c3R5bGU6e2JhY2tncm91bmQ6UEFQRVIsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlckxlZnQ6JzNweCBzb2xpZCAnK1JFRCxwYWRkaW5nOm0/JzE2cHggMThweCc6JzIwcHggMjJweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTFweCc6JzEycHgnfX0sZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNS41cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NzAwLGNvbG9yOk5BVll9fSwnTGFpc3NleiB2b3RyZSBhZHJlc3NlJyksZWwoJ2Zvcm0nLHtvblN1Ym1pdDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB2PWUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWU7dGhpcy5wcmV2ZW5pcih2KTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LGVsKCdpbnB1dCcse3R5cGU6J2VtYWlsJyxyZXF1aXJlZDp0cnVlLHBsYWNlaG9sZGVyOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsJ2FyaWEtbGFiZWwnOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsc3R5bGU6e2ZsZXg6bT8nMCAwIGF1dG8nOicxIDEgMCcsd2lkdGg6bT8nMTAwJSc6J2F1dG8nLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzU0cHgnOic1NnB4JyxwYWRkaW5nOicwIDE1cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGNvbG9yOklOSyxvdXRsaW5lOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0pLGVsKCdidXR0b24nLHt0eXBlOididXR0b24nLG9uQ2xpY2s6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgZm89ZS5jdXJyZW50VGFyZ2V0LmNsb3Nlc3QoJ2Zvcm0nKTt2YXIgaXA9Zm8mJmZvLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLnByZXZlbmlyKGlwP2lwLnZhbHVlOicnKTt9LG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZsZXhTaHJpbms6MCxoZWlnaHQ6bT8nNTRweCc6JzU2cHgnLHBhZGRpbmc6JzAgMjZweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NzAwfX0sJ01lIHByw6l2ZW5pcicpKSksZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMi41cHgnOicxM3B4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ1ZvdXMgYXZleiB1biBhdXRyZSBQREZcdTAwYTA/ICcsZWwoJ2xhYmVsJyx7c3R5bGU6e2NvbG9yOk5BVlksZm9udFdlaWdodDo2MDAsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FLGN1cnNvcjoncG9pbnRlcid9fSwnUmVkw6lwb3Nlei1sZScsZWwoJ2lucHV0Jyx7dHlwZTonZmlsZScsYWNjZXB0OidhcHBsaWNhdGlvbi9wZGYnLHN0eWxlOntkaXNwbGF5Oidub25lJ30sb25DaGFuZ2U6ZT0+dGhpcy5saXJlUmVsZXZlKGUudGFyZ2V0LmZpbGVzJiZlLnRhcmdldC5maWxlc1swXSl9KSksJy4nKSk7CgogICAgICAgIC8vIEMuIFRyb2lzIGNhcyBkaXN0aW5jdHMgc291cyBsZSBtXHUwMGVhbWUgXHUwMGU5dGF0LiBPbiBuZSBkaXQgcXVlIGNlIHF1aSBlc3QgdnJhaS4KICAgIHZhciBfbXNnPXRoaXMuc3RhdGUuZWNoZWNNc2d8fCcnOwogICAgdmFyIF9sdU9rPSEhKF9sdS5kZWJ1dCYmX2x1LmZpbik7CiAgICB2YXIgX2ZpY2hpZXI9KF9tc2c9PT0nc2Fuc19maWNoaWVyJ3x8X21zZz09PSd0cm9wX2dyb3MnfHxfbXNnPT09J3ZpZGUnKTsKICAgIHZhciBfZUtpY2ssIF9lVGl0cmUsIF9lQ29ycHMsIF9lU3VpdGUsIF9lQm91dG9uOwogICAgaWYoX2x1T2spewogICAgICBfZUtpY2s9J0xlIHByb2JsXHUwMGU4bWUgdmllbnQgZGUgbW9pJzsKICAgICAgX2VUaXRyZT0nVm90cmUgcmVsZXZcdTAwZTkgYSBcdTAwZTl0XHUwMGU5IGx1LiBDXHUyMDE5ZXN0IGxhIHN1aXRlIHF1aSBzXHUyMDE5ZXN0IGFyclx1MDBlYXRcdTAwZTllJzsKICAgICAgX2VDb3Jwcz0nSlx1MjAxOWFpIGJpZW4gbHUgdm90cmUgY2FycmlcdTAwZThyZSwgZGUgJytfbHUuZGVidXQrJyBcdTAwZTAgJytfbHUuZmluKycuIENcdTIwMTllc3QgbFx1MjAxOVx1MDBlOXRhcGUgZFx1MjAxOWFwclx1MDBlOHMsIGNlbGxlIHF1aSBtZXQgdG91dCBlbiBmb3JtZSwgcXVpIG5cdTIwMTlhIHBhcyBhYm91dGkuIExlIHByb2JsXHUwMGU4bWUgdmllbnQgZGUgbW9pLic7CiAgICAgIF9lU3VpdGU9J1JcdTAwZTllc3NheWV6IGRhbnMgcXVlbHF1ZXMgbWludXRlcywgb3UgbGFpc3Nlei1tb2kgdm90cmUgYWRyZXNzZSBldCBqZSB2b3VzIHByXHUwMGU5dmllbnMgZFx1MDBlOHMgcXVlIGNcdTIwMTllc3Qgclx1MDBlOWdsXHUwMGU5Lic7CiAgICAgIF9lQm91dG9uPSdSXHUwMGU5ZXNzYXllcic7CiAgICB9IGVsc2UgaWYoX21zZz09PSd2aWRlJyl7CiAgICAgIF9lS2ljaz0nTGUgZmljaGllciBuXHUyMDE5ZXN0IHBhcyBwYXNzXHUwMGU5JzsKICAgICAgX2VUaXRyZT0nVm90cmUgZmljaGllciBlc3QgdmlkZSc7CiAgICAgIF9lQ29ycHM9J0lsIG5cdTIwMTlhIHBhcyBkXHUwMGZiIHNlIHRcdTAwZTlsXHUwMGU5Y2hhcmdlciBjb3JyZWN0ZW1lbnQuJzsKICAgICAgX2VTdWl0ZT0nUmVwcmVuZXogbGUgdFx1MDBlOWxcdTAwZTljaGFyZ2VtZW50IHN1ciBpbmZvLXJldHJhaXRlLmZyIGV0IHJlZFx1MDBlOXBvc2V6LWxlLic7CiAgICAgIF9lQm91dG9uPSdSZWRcdTAwZTlwb3NlciBtb24gcmVsZXZcdTAwZTknOwogICAgfSBlbHNlIGlmKF9maWNoaWVyKXsKICAgICAgX2VLaWNrPSdMZSBmaWNoaWVyIG5cdTIwMTllc3QgcGFzIHBhc3NcdTAwZTknOwogICAgICBfZVRpdHJlPShfbXNnPT09J3Ryb3BfZ3JvcycpPydDZSBmaWNoaWVyIGVzdCB0cm9wIGxvdXJkIHBvdXIgXHUwMGVhdHJlIGx1JzonQXVjdW4gZmljaGllciBuXHUyMDE5ZXN0IGFycml2XHUwMGU5JzsKICAgICAgX2VDb3Jwcz0oX21zZz09PSd0cm9wX2dyb3MnKT8nTGUgUERGIGRcdTAwZTlwYXNzZSBsYSB0YWlsbGUgcXVlIGplIHBldXggbGlyZS4gTGUgcmVsZXZcdTAwZTkgdFx1MDBlOWxcdTAwZTljaGFyZ1x1MDBlOSBkZXB1aXMgdm90cmUgY29tcHRlIHJldHJhaXRlIGZhaXQgZW4gZ1x1MDBlOW5cdTAwZTlyYWwgbW9pbnMgZGUgMlx1MDBhME1vXHUwMGEwOiBjXHUyMDE5ZXN0IGNlbHVpLWxcdTAwZTAgcXVcdTIwMTlpbCBmYXV0IGRcdTAwZTlwb3Nlciwgc2FucyBsZSBzY2FubmVyIG5pIGxlIHBob3RvZ3JhcGhpZXIuJzonTGUgZFx1MDBlOXBcdTAwZjR0IHNcdTIwMTllc3QgaW50ZXJyb21wdSBhdmFudCBxdWUgbGUgZmljaGllciBuZSBwYXJ0ZS4gUmllbiBuXHUyMDE5YSBcdTAwZTl0XHUwMGU5IGx1LCBldCB2b3VzIHBvdXZleiBsZSByZWRcdTAwZTlwb3NlciB0b3V0IGRlIHN1aXRlLic7CiAgICAgIF9lU3VpdGU9J1JlcHJlbmV6IGxlIFBERiB0ZWwgcXVlIHZvdHJlIGNhaXNzZSB2b3VzIGxcdTIwMTlhIHJlbWlzLCBldCByZWRcdTAwZTlwb3Nlei1sZS4nOwogICAgICBfZUJvdXRvbj0nUmVkXHUwMGU5cG9zZXIgbW9uIHJlbGV2XHUwMGU5JzsKICAgIH0gZWxzZSB7CiAgICAgIF9lS2ljaz0nXHUwMGM3YSB2aWVudCBkZSBtb2knOwogICAgICBfZVRpdHJlPSdMYSBsZWN0dXJlIG5cdTIwMTlhIHBhcyBwdSBhYm91dGlyJzsKICAgICAgX2VDb3Jwcz0oX21zZz09PSd0cm9wX2RlX21vbmRlJ3x8X21zZz09PSd0cm9wX2RlX2RlbWFuZGVzJyk/J0lsIHkgYSBiZWF1Y291cCBkZSBkXHUwMGU5cFx1MDBmNHRzIGVuIGNlIG1vbWVudCBldCBsYSBsZWN0dXJlIG5cdTIwMTlhIHBhcyBwdSBzZSBmYWlyZS4gUmllbiBcdTAwZTAgdm9pciBhdmVjIHZvdHJlIHJlbGV2XHUwMGU5XHUwMGEwOiBpbCBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBsdSwgZXQgdm90cmUgZmljaGllciBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBjb25zZXJ2XHUwMGU5Lic6J0xhIGNvbm5leGlvbiBzXHUyMDE5ZXN0IGludGVycm9tcHVlIGF2YW50IGxhIGZpbi4gUmllbiBcdTAwZTAgdm9pciBhdmVjIHZvdHJlIHJlbGV2XHUwMGU5XHUwMGEwOiBpbCBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBsdSwgZXQgdm90cmUgZmljaGllciBuXHUyMDE5YSBwYXMgXHUwMGU5dFx1MDBlOSBjb25zZXJ2XHUwMGU5Lic7CiAgICAgIF9lU3VpdGU9J1JcdTAwZTllc3NheWV6IGRhbnMgcXVlbHF1ZXMgbWludXRlcywgb3UgbGFpc3Nlei1tb2kgdm90cmUgYWRyZXNzZSBldCBqZSB2b3VzIHByXHUwMGU5dmllbnMgZFx1MDBlOHMgcXVlIGNcdTIwMTllc3Qgclx1MDBlOWdsXHUwMGU5Lic7CiAgICAgIF9lQm91dG9uPSdSXHUwMGU5ZXNzYXllcic7CiAgICB9CgogICAgY29uc3QgZWNoZWM9ZWwoJ2Rpdicse3N0eWxlOntib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJhY2tncm91bmQ6JyNmZmZmZmYnLHBhZGRpbmc6bT8nMjJweCAyMHB4IDI0cHgnOiczNHB4IDM4cHggMzZweCcsZGlzcGxheTonZ3JpZCcsZ3JpZFRlbXBsYXRlQ29sdW1uczoobXx8X2ZpY2hpZXIpPycxZnInOicxZnIgMWZyJyxnYXA6bT8nMThweCc6JzAgNDZweCcsYWxpZ25JdGVtczonc3RhcnQnfX0sCiAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnLG1heFdpZHRoOl9maWNoaWVyPyc3MGNoJzonbm9uZSd9fSwKICAgICAgICBraWNrKF9lS2ljayksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzIzcHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDIyZW0nLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sX2VUaXRyZSksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4JyxsaW5lSGVpZ2h0OjEuNjIsY29sb3I6SU5LfX0sX2VDb3JwcyksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTRweCc6JzE0LjVweCcsbGluZUhlaWdodDoxLjYsY29sb3I6SU5LfX0sX2VTdWl0ZSksCiAgICAgICAgZWwoJ2xhYmVsJyx7b25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdicmlnaHRuZXNzKC45MyknO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuZmlsdGVyPSdub25lJzt9LHN0eWxlOnthbGlnblNlbGY6J2ZsZXgtc3RhcnQnLG1hcmdpblRvcDonMnB4JyxkaXNwbGF5OidpbmxpbmUtZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLHBhZGRpbmc6bT8nMCAyMnB4JzonMCAyOHB4JyxiYWNrZ3JvdW5kOlJFRCxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTUuNXB4JzonMTZweCcsZm9udFdlaWdodDo3MDAsY3Vyc29yOidwb2ludGVyJyx0cmFuc2l0aW9uOidmaWx0ZXIgLjE4cyBlYXNlJ319LAogICAgICAgICAgX2VCb3V0b24sCiAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidmaWxlJyxhY2NlcHQ6J2FwcGxpY2F0aW9uL3BkZicsc3R5bGU6e2Rpc3BsYXk6J25vbmUnfSxvbkNoYW5nZTplPT50aGlzLmxpcmVSZWxldmUoZS50YXJnZXQuZmlsZXMmJmUudGFyZ2V0LmZpbGVzWzBdKX0pKSksCiAgICAgIF9maWNoaWVyP251bGw6ZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPycxMXB4JzonMTNweCcsYmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxOHB4JzonMjJweCAyNHB4J319LAogICAgICAgIHRoaXMuc3RhdGUubWFpbE9rCiAgICAgICAgICA/IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCd9fSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNnB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0NcdTIwMTllc3Qgbm90w6kuJyksCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdKZSB2b3VzIMOpY3JpcyBkw6hzIHF1ZSBjXHUyMDE5ZXN0IHLDqWdsw6kuJykpCiAgICAgICAgICA6IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdMYWlzc2V6LW1vaSB2b3RyZSBhZHJlc3NlJyksCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdKZSB2b3VzIHByw6l2aWVucyBkw6hzIHF1ZSBjXHUyMDE5ZXN0IHLDqWdsw6ksIGV0IHJpZW4gZFx1MjAxOWF1dHJlLicpLAogICAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt0aGlzLmNhcHR1cmVNYWlsKGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6JzEwcHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4OicxIDEgMTgwcHgnLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDE0cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGNvbG9yOklOSyxvdXRsaW5lOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0pLAogICAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmNhcHR1cmVNYWlsKGlucD9pbnAudmFsdWU6JycpO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIwcHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMH19LCdNZSBwcsOpdmVuaXInKSkpKSk7CgogICAgLy8gQS4gTGUgZG9jdW1lbnQgZMOpcG9zw6kgbidlc3QgcGFzIHVuIHJlbGV2w6kgZGUgY2FycmnDqHJlLgogICAgY29uc3QgcGFzUmVsZXZlPWVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyOicxcHggc29saWQgJytMSU5FLGJvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxiYWNrZ3JvdW5kOicjZmZmZmZmJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzRweCAzOHB4IDM2cHgnLGRpc3BsYXk6J2dyaWQnLGdyaWRUZW1wbGF0ZUNvbHVtbnM6bT8nMWZyJzonMWZyIDFmcicsZ2FwOm0/JzE4cHgnOicwIDQ2cHgnLGFsaWduSXRlbXM6J3N0YXJ0J319LAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzEwcHgnOicxMnB4J319LAogICAgICAgIGtpY2soJ0NlIG5cdTIwMTllc3QgcGFzIGxlIGJvbiBkb2N1bWVudCcpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udEZhbWlseTpTRVJJRixmb250U2l6ZTptPycyM3B4JzonMjlweCcsbGluZUhlaWdodDoxLjEyLGZvbnRXZWlnaHQ6NTAwLGxldHRlclNwYWNpbmc6Jy0wLjAyMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdDZSBuXHUyMDE5ZXN0IHBhcyB1biByZWxldsOpIGRlIGNhcnJpw6hyZScpLAogICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE0LjVweCc6JzE1LjVweCcsbGluZUhlaWdodDoxLjYyLGNvbG9yOklOS319LF9kb2NuPygnVm91cyBhdmV6IGTDqXBvc8OpICcrX2RvY24rJy4gTGVzIGRldXggZG9jdW1lbnRzIG5cdTIwMTlvbnQgcmllbiDDoCB2b2lyLCBldCBsYSBjb25mdXNpb24gZXN0IGJhbmFsZS4nKTonTGUgZG9jdW1lbnQgZMOpcG9zw6kgblx1MjAxOWVzdCBwYXMgdW4gcmVsZXbDqSBkZSBjYXJyacOocmUuIExhIGNvbmZ1c2lvbiBlc3QgYmFuYWxlLicpLAogICAgICAgIGVsKCdwJyx7c3R5bGU6e21hcmdpbjowLGZvbnRTaXplOm0/JzE0cHgnOicxNC41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LCdMZSByZWxldsOpIGRlIGNhcnJpw6hyZSBsaXN0ZSB0b3V0ZXMgdm9zIGFubsOpZXMgZGUgdHJhdmFpbCBkZXB1aXMgbGEgcHJlbWnDqHJlLCBhdmVjIGxlcyB0cmltZXN0cmVzIHJldGVudXMgcG91ciBjaGFjdW5lLiBJbCBmYWl0IHBsdXNpZXVycyBwYWdlcy4gSWwgbmUgdmllbnQgcGFzIGRlIHZvdHJlIGVtcGxveWV1ciBtYWlzIGRlIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZSwgZXQgaWwgZXN0IGdyYXR1aXQuJyksCiAgICAgICAgZWwoJ3AnLHtzdHlsZTp7bWFyZ2luOjAsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnTGUgZG9jdW1lbnQgcXVlIHZvdXMgYXZleiBkw6lwb3PDqSBlc3QgZWZmYWPDqS4nKSwKICAgICAgICBlbCgnbGFiZWwnLHtvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO30sc3R5bGU6e2FsaWduU2VsZjonZmxleC1zdGFydCcsbWFyZ2luVG9wOicycHgnLGRpc3BsYXk6J2lubGluZS1mbGV4JyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzptPycwIDIycHgnOicwIDI4cHgnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGJvcmRlcjonMnB4IHNvbGlkICcrTkFWWSxjb2xvcjpOQVZZLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NzAwLGN1cnNvcjoncG9pbnRlcicsdHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSd9fSwKICAgICAgICAgICdEw6lwb3NlciBsZSBib24gZG9jdW1lbnQnLAogICAgICAgICAgZWwoJ2lucHV0Jyx7dHlwZTonZmlsZScsYWNjZXB0OidhcHBsaWNhdGlvbi9wZGYnLHN0eWxlOntkaXNwbGF5Oidub25lJ30sb25DaGFuZ2U6ZT0+dGhpcy5saXJlUmVsZXZlKGUudGFyZ2V0LmZpbGVzJiZlLnRhcmdldC5maWxlc1swXSl9KSkpLAogICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzExcHgnOicxM3B4JyxiYWNrZ3JvdW5kOlBBUEVSLGJvcmRlcjonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzE4cHgnOicyMnB4IDI0cHgnfX0sCiAgICAgICAgdGhpcy5zdGF0ZS5tYWlsT2sKICAgICAgICAgID8gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNHB4J319LAogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnQ1x1MjAxOWVzdCBwYXJ0aS4nKSwKICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0plIHZpZW5zIGRlIHZvdXMgZW52b3llciBsYSBtYXJjaGUgw6Agc3VpdnJlLiBJbCB5IGVuIGEgcG91ciAyIG1pbnV0ZXMuJykpCiAgICAgICAgICA6IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTBweCc6JzEycHgnfX0sCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdKZSB2b3VzIGVudm9pZSBsYSBtYXJjaGUgw6Agc3VpdnJlJyksCiAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LCdQb3VyIHLDqWN1cMOpcmVyIHZvdHJlIHJlbGV2w6kgc3VyIHZvdHJlIGNvbXB0ZSByZXRyYWl0ZS4gSWwgeSBlbiBhIHBvdXIgMiBtaW51dGVzLicpLAogICAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt0aGlzLmNhcHR1cmVNYWlsKGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6JzEwcHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4OicxIDEgMTgwcHgnLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDE0cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGNvbG9yOklOSyxvdXRsaW5lOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0pLAogICAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmNhcHR1cmVNYWlsKGlucD9pbnAudmFsdWU6JycpO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIwcHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMH19LCdSZWNldm9pciBsYSBtYXJjaGUgw6Agc3VpdnJlJykpKSkpOwoKICAgIC8vIC0tLS0gTGVzIDYgcXVlc3Rpb25zLCBwb3VyIGNlbGxlcyBxdWkgbidvbnQgcGFzIGxldXIgcmVsZXbDqSBzb3VzIGxhIG1haW4gLS0tLQogICAgY29uc3QgUVM9WwogICAgICB7aWQ6J2FubmVlX25haXNzYW5jZScscTonUXVlbGxlIGVzdCB2b3RyZSBhbm7DqWUgZGUgbmFpc3NhbmNlID8nLHBvdXJxdW9pOidFbGxlIGTDqXRlcm1pbmUgdm90cmUgw6JnZSBsw6lnYWwgZXQgbGUgbm9tYnJlIGRlIHRyaW1lc3RyZXMgZXhpZ8Opcy4nLHR5cGU6J2FubmVlJyxtaW46MTk0MCxtYXg6MjAxMCxwaDonMTk2Myd9LAogICAgICB7aWQ6J3NleGUnLHE6J1ZvdXMgw6p0ZXMgOicscG91cnF1b2k6J0NlcnRhaW5lcyBtYWpvcmF0aW9ucyBuZSBjb25jZXJuZW50IHF14oCZdW4gZGVzIGRldXguJyx0eXBlOidjaG9peCcsb3B0aW9uczpbJ1VuZSBmZW1tZScsJ1VuIGhvbW1lJ119LAogICAgICB7aWQ6J2FubmVlX2RlYnV0JyxxOidFbiBxdWVsbGUgYW5uw6llIGF2ZXotdm91cyBjb21tZW5jw6kgw6AgdHJhdmFpbGxlciA/Jyxwb3VycXVvaTonRWxsZSBzaXR1ZSBsZSBkw6lidXQgZGUgdm90cmUgY2FycmnDqHJlIGV0IHZvcyBkcm9pdHMgYXUgZMOpcGFydCBhbnRpY2lww6kuJyx0eXBlOidhbm5lZScsbWluOjE5NTUsbWF4OjIwMjYscGg6JzE5OTAnfSwKICAgICAge2lkOidlbmZhbnRzJyxxOidDb21iaWVuIGTigJllbmZhbnRzIGF2ZXotdm91cyBldXMgb3Ugw6lsZXbDqXMgPycscG91cnF1b2k6J0xlcyB0cmltZXN0cmVzIHBvdXIgZW5mYW50cyBu4oCZYXBwYXJhaXNzZW50IHBhcyBzdXIgdW4gcmVsZXbDqSBhdmFudCB1biBjZXJ0YWluIMOiZ2UuIE1ldHRleiAwIHNpIGF1Y3VuLicsdHlwZTonbm9tYnJlJyxtaW46MCxtYXg6MTUscGg6JzAnfSwKICAgICAge2lkOid0ZW1wc19wYXJ0aWVsJyxxOidBdmV6LXZvdXMgdHJhdmFpbGzDqSDDoCB0ZW1wcyBwYXJ0aWVsLCBvdSBs4oCZZW52aXNhZ2V6LXZvdXMgPycscG91cnF1b2k6J0xlIHRlbXBzIHBhcnRpZWwgY2hhbmdlIGxlIGNhbGN1bCwgZXQgb3V2cmUgcGFyZm9pcyB1bmUgc3VyY290ZS4nLHR5cGU6J2Nob2l4JyxvcHRpb25zOlsnT3VpJywnTm9uJ119LAogICAgICB7aWQ6J3BlcmlvZGVzJyxxOidBdmV6LXZvdXMgY29ubnUgbOKAmXVuZSBkZSBjZXMgcMOpcmlvZGVzID8nLHBvdXJxdW9pOidDaGFjdW5lIGRvbm5lIGRlcyBkcm9pdHMgcXVpIG1hbnF1ZW50IHNvdXZlbnQgYXUgcmVsZXbDqS4gQ29jaGV6IHRvdXQgY2UgcXVpIHPigJlhcHBsaXF1ZS4nLHR5cGU6J2Nhc2VzJyxvcHRpb25zOltbJ2Nob21hZ2UnLCdDaMO0bWFnZSddLFsnbWFsYWRpZScsJ01hbGFkaWUgb3UgYWNjaWRlbnQnXSxbJ2luZGVwZW5kYW50JywnQWN0aXZpdMOpIGluZMOpcGVuZGFudGUnXSxbJ2ludGVyaW0nLCdJbnTDqXJpbSwgbWlzc2lvbnMgY291cnRlcyddLFsnZXRyYW5nZXInLCdUcmF2YWlsIMOgIGzigJnDqXRyYW5nZXInXSxbJ3NlcnZpY2UnLCdTZXJ2aWNlIG1pbGl0YWlyZSddLFsnZXR1ZGVzJywnw4l0dWRlcyBzdXDDqXJpZXVyZXMnXV19CiAgICBdOwogICAgY29uc3QgcWk9TWF0aC5taW4odGhpcy5zdGF0ZS5xSW5kZXh8fDAsUVMubGVuZ3RoKTsKICAgIGNvbnN0IHJlcD10aGlzLnN0YXRlLnJlcG9uc2VzfHx7fTsKICAgIGNvbnN0IHJlcG9uZHJlPShpZCx2YWwpPT57IHZhciByPU9iamVjdC5hc3NpZ24oe30scmVwKTsgcltpZF09dmFsOyB2YXIgbj1xaSsxOwogICAgICB0cnl7IG10cmFjaygncXVlc3Rpb25fcmVwb25kdWUnLHtyYW5nOnFpKzF9KTsgfWNhdGNoKGUpe30KICAgICAgdGhpcy5zZXRTdGF0ZSh7cmVwb25zZXM6cixxSW5kZXg6bn0pOwogICAgICBpZihuPj1RUy5sZW5ndGgpeyB0cnl7IG10cmFjaygncXVlc3Rpb25zX3Rlcm1pbmVlcycse30pOyB9Y2F0Y2goZSl7fSB0aGlzLnNvdW1ldHRyZVF1ZXN0aW9ucyhyKTsgfQogICAgICB0aGlzLnNjcm9sbFRvRGlhZygpOyB9OwoKICAgIGNvbnN0IFE9UVNbcWldOwogICAgY29uc3QgZWNyYW5RdWVzdGlvbj1RP2NhcnRlKFsKICAgICAgZWwoJ2Rpdicse2tleToncCcsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMnB4J319LAogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOicxMC41cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6JzAuMThlbScsdGV4dFRyYW5zZm9ybTondXBwZXJjYXNlJyxjb2xvcjpHUkVZLHdoaXRlU3BhY2U6J25vd3JhcCd9fSwnUXVlc3Rpb24gJysocWkrMSkrJyBzdXIgJytRUy5sZW5ndGgpLAogICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXg6MSxoZWlnaHQ6JzNweCcsYmFja2dyb3VuZDonI2U5ZWNmMyd9fSxlbCgnc3Bhbicse3N0eWxlOntkaXNwbGF5OidibG9jaycsaGVpZ2h0OicxMDAlJyx3aWR0aDpNYXRoLnJvdW5kKHFpL1FTLmxlbmd0aCoxMDApKyclJyxiYWNrZ3JvdW5kOlJFRCx0cmFuc2l0aW9uOid3aWR0aCAuMjVzIGVhc2UnfX0pKSksCiAgICAgIGVsKCdkaXYnLHtrZXk6J3EnLHN0eWxlOntmb250U2l6ZTptPycxOXB4JzonMjFweCcsbGluZUhlaWdodDoxLjI1LGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LFEucSksCiAgICAgIGVsKCdkaXYnLHtrZXk6J3cnLHN0eWxlOntmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6R1JFWX19LFEucG91cnF1b2kpLAogICAgICAoUS50eXBlPT09J2FubmVlJ3x8US50eXBlPT09J25vbWJyZScpCiAgICAgICAgPyBlbCgnZm9ybScse2tleTonZicsb25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgdj1lLnRhcmdldC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnZhbHVlO2lmKHYhPT0nJyYmdiE9bnVsbClyZXBvbmRyZShRLmlkLHYpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhXcmFwOid3cmFwJyxnYXA6JzEwcHgnLG1hcmdpblRvcDptPycycHgnOic0cHgnfX0sCiAgICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J251bWJlcicsbWluOlN0cmluZyhRLm1pbiksbWF4OlN0cmluZyhRLm1heCkscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjpRLnBofHwnJywnYXJpYS1sYWJlbCc6US5xLHN0eWxlOntmbGV4OicxIDEgMTQwcHgnLG1pbldpZHRoOjAsaGVpZ2h0Om0/JzU2cHgnOic1OHB4JyxwYWRkaW5nOicwIDE1cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE3cHgnOicxOHB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J3N1Ym1pdCcsc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzU2cHgnOic1OHB4JyxwYWRkaW5nOicwIDI2cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNnB4JzonMTdweCcsZm9udFdlaWdodDo3MDB9fSwnQ29udGludWVyJykpCiAgICAgICAgOiBRLnR5cGU9PT0nY2FzZXMnCiAgICAgICAgPyBlbCgnZGl2Jyx7a2V5OidjJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzhweCcsbWFyZ2luVG9wOm0/JzJweCc6JzRweCd9fSwKICAgICAgICAgICAgUS5vcHRpb25zLm1hcCgobyxpMik9Pnt2YXIgc2VsPShyZXBbUS5pZF18fFtdKS5pbmRleE9mKG9bMF0pPi0xO3JldHVybiBlbCgnYnV0dG9uJyx7a2V5OmkyLG9uQ2xpY2s6KCk9Pnt2YXIgYXJyPShyZXBbUS5pZF18fFtdKS5zbGljZSgpO3ZhciBrPWFyci5pbmRleE9mKG9bMF0pO2lmKGs+LTEpYXJyLnNwbGljZShrLDEpO2Vsc2UgYXJyLnB1c2gob1swXSk7dmFyIHI9T2JqZWN0LmFzc2lnbih7fSxyZXApO3JbUS5pZF09YXJyO3RoaXMuc2V0U3RhdGUoe3JlcG9uc2VzOnJ9KTt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRleHRBbGlnbjonbGVmdCcsd2lkdGg6JzEwMCUnLG1pbkhlaWdodDptPyc0OHB4JzonNTBweCcscGFkZGluZzptPycwIDE0cHgnOicwIDE4cHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsZ2FwOicxMnB4JyxiYWNrZ3JvdW5kOnNlbD8nI2VlZjJmYic6JyNmZmZmZmYnLGJvcmRlcjonMXB4IHNvbGlkICcrKHNlbD9OQVZZOicjYzljZmRhJyksY29sb3I6TkFWWSxmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCx0cmFuc2l0aW9uOidiYWNrZ3JvdW5kIC4xNXMgZWFzZSwgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZSd9fSxlbCgnc3Bhbicse3N0eWxlOntmbGV4U2hyaW5rOjAsd2lkdGg6JzE5cHgnLGhlaWdodDonMTlweCcsYm9yZGVyUmFkaXVzOic0cHgnLGJvcmRlcjonMnB4IHNvbGlkICcrKHNlbD9OQVZZOicjYzljZmRhJyksYmFja2dyb3VuZDpzZWw/TkFWWTonI2ZmZmZmZicsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6JzEycHgnLGZvbnRXZWlnaHQ6ODAwfX0sc2VsPyfinJMnOicnKSxvWzFdKTt9KSwKICAgICAgICAgICAgZWwoJ2J1dHRvbicse2tleTonY3QnLG9uQ2xpY2s6KCk9PnJlcG9uZHJlKFEuaWQsKHJlcFtRLmlkXXx8W10pKSxzdHlsZTp7bWFyZ2luVG9wOic0cHgnLGFwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxoZWlnaHQ6bT8nNTRweCc6JzU2cHgnLHBhZGRpbmc6JzAgMjZweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE2cHgnOicxNi41cHgnLGZvbnRXZWlnaHQ6NzAwfX0sJ0NvbnRpbnVlcicpKQogICAgICAgIDogZWwoJ2Rpdicse2tleTonbycsc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOic5cHgnLG1hcmdpblRvcDptPycycHgnOic0cHgnfX0sCiAgICAgICAgICAgIFEub3B0aW9ucy5tYXAoKG8saTIpPT5lbCgnYnV0dG9uJyx7a2V5OmkyLG9uQ2xpY2s6KCk9PnJlcG9uZHJlKFEuaWQsbyksb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2VlZjJmYic7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPU5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmZmZmJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9JyNjOWNmZGEnO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGN1cnNvcjoncG9pbnRlcicsZm9udEZhbWlseTonaW5oZXJpdCcsdGV4dEFsaWduOidsZWZ0Jyx3aWR0aDonMTAwJScsbWluSGVpZ2h0Om0/JzU0cHgnOic1NnB4JyxwYWRkaW5nOm0/JzAgMTZweCc6JzAgMjBweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyOicxcHggc29saWQgI2M5Y2ZkYScsY29sb3I6TkFWWSxmb250U2l6ZTptPycxNnB4JzonMTYuNXB4Jyxmb250V2VpZ2h0OjYwMCx0cmFuc2l0aW9uOidiYWNrZ3JvdW5kIC4xOHMgZWFzZSwgYm9yZGVyLWNvbG9yIC4xOHMgZWFzZSd9fSxvKSkpLAogICAgICBxaT4wP2VsKCdidXR0b24nLHtrZXk6J3InLG9uQ2xpY2s6KCk9Pnt0aGlzLnNldFN0YXRlKHtxSW5kZXg6cWktMX0pO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsYmFja2dyb3VuZDonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxhbGlnblNlbGY6J2ZsZXgtc3RhcnQnLHBhZGRpbmc6MCxtYXJnaW5Ub3A6JzJweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsY29sb3I6R1JFWSx0ZXh0RGVjb3JhdGlvbjondW5kZXJsaW5lJ319LCdSZXZlbmlyIMOgIGxhIHF1ZXN0aW9uIHByw6ljw6lkZW50ZScpOm51bGwKICAgIF0sdHJ1ZSk6bnVsbDsKCiAgICAvLyBCaWxhbiBkZXMgNiBxdWVzdGlvbnMgOiBqYW1haXMgdW4gc2NvcmUsIHRvdWpvdXJzIHVuIGZhaXQgcXUnZWxsZSBpZ25vcmFpdC4KICAgIGNvbnN0IGFSZWdhcmRlcj1bXTsKICAgIGlmKHJlcC5lbmZhbnRzPT09J091aScpIGFSZWdhcmRlci5wdXNoKCdsZXMgZW5mYW50cycpOwogICAgaWYocmVwLnBhcnRpZWw9PT0nT3VpJykgYVJlZ2FyZGVyLnB1c2goJ2xlIHRlbXBzIHBhcnRpZWwnKTsKICAgIGlmKHJlcC5hdXRyZT09PSdVbmUgYWN0aXZpdMOpIGluZMOpcGVuZGFudGUnfHxyZXAuYXV0cmU9PT0nTGVzIGRldXgnKSBhUmVnYXJkZXIucHVzaCgndW5lIHDDqXJpb2RlIGRcdTIwMTlpbmTDqXBlbmRhbnQnKTsKICAgIGlmKHJlcC5taWxpdGFpcmU9PT0nT3VpJykgYVJlZ2FyZGVyLnB1c2goJ2xlIHNlcnZpY2UgbWlsaXRhaXJlJyk7CiAgICBjb25zdCBuYlJlZ2FyZGVyPWFSZWdhcmRlci5sZW5ndGg7CiAgICBjb25zdCBsaXN0ZVJlZ2FyZGVyPW5iUmVnYXJkZXI+MT9hUmVnYXJkZXIuc2xpY2UoMCwtMSkuam9pbignLCAnKSsnIGV0ICcrYVJlZ2FyZGVyW2FSZWdhcmRlci5sZW5ndGgtMV06KGFSZWdhcmRlclswXXx8JycpOwoKICAgIGNvbnN0IGJpbGFuPShmdW5jdGlvbihzZWxmKXsKICAgICAgdmFyIFFEPXNlbGYuc3RhdGUucURhdGEsIGxvYWRpbmc9KHNlbGYuc3RhdGUucUVudm9pfHwhUUQpOwogICAgICBpZihsb2FkaW5nKXsgcmV0dXJuIGNhcnRlKFsKICAgICAgICBlbCgnZGl2Jyx7a2V5OidsJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzhweCcscGFkZGluZzptPycxMnB4IDAnOicxNnB4IDAnfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjFweCc6JzI0cHgnLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOk5BVll9fSwnSuKAmWFuYWx5c2Ugdm9zIHLDqXBvbnNlc+KApicpLAogICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNHB4JzonMTQuNXB4Jyxjb2xvcjpHUkVZfX0sJ1F1ZWxxdWVzIHNlY29uZGVzLicpKV0pOyB9CiAgICAgIHZhciBRQj1RRC5iYXJlbWUsIFFOPVFELmFubmVlX25haXNzYW5jZSwgZXN0Rj0oc2VsZi5zdGF0ZS5yZXBvbnNlcyYmc2VsZi5zdGF0ZS5yZXBvbnNlcy5zZXhlPT09J1VuZSBmZW1tZScpOwogICAgICB2YXIgUFI9UUQucHJvbWVzc2VzfHxbXSwgTUs9UUQubWFycXVlZXN8fDAsIFBWPVFELnByZXV2ZXx8e307CiAgICAgIHZhciBjaGFtcE1haWw9c2VsZi5zdGF0ZS5tYWlsT2sKICAgICAgICA/IGVsKCdkaXYnLHtrZXk6J29rJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzRweCd9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTZweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdD4oCZZXN0IG5vdMOpLicpLAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ0xlIG1lc3NhZ2UgY29udGllbnQgbGUgbGllbiBxdWkgdm91cyByYW3DqG5lIGljaSwgYXZlYyB2b3MgcsOpcG9uc2VzIGTDqWrDoCByZW1wbGllcy4nKSkKICAgICAgICA6IGVsKCdmb3JtJyx7a2V5OidmJyxvblN1Ym1pdDplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB2PWUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWU7c2VsZi5jYXB0dXJlTWFpbCh2KTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LAogICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxtaW5XaWR0aDowLGhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmbz1lLmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgnZm9ybScpO3ZhciBpcD1mbyYmZm8ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3NlbGYuY2FwdHVyZU1haWwoaXA/aXAudmFsdWU6JycpO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIycHgnLGJhY2tncm91bmQ6TkFWWSxjb2xvcjonI2ZmZmZmZicsZm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo3MDB9fSwnUmVjZXZvaXIgbGEgbWFyY2hlIMOgIHN1aXZyZScpKTsKICAgICAgcmV0dXJuIGNhcnRlKFsKICAgICAgICBlbCgnZGl2Jyx7a2V5OidrJyxzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxnYXA6JzEwcHgnfX0sCiAgICAgICAgICBlbCgnc3Bhbicse3N0eWxlOntmb250U2l6ZTonMTAuNXB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOicwLjE4ZW0nLHRleHRUcmFuc2Zvcm06J3VwcGVyY2FzZScsY29sb3I6JyNjNDE3M2EnfX0sJ1ZvdHJlIHByb2ZpbCcpLAogICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleDoxLGhlaWdodDonMXB4JyxiYWNrZ3JvdW5kOkxJTkV9fSkpLAogICAgICAgIFFOP2VsKCdkaXYnLHtrZXk6J24nLHN0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOiczMHB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWX19LCdWb3VzIMOqdGVzICcrKGVzdEY/J27DqWUnOiduw6knKSsnIGVuICcrUU4rJy4nKTpudWxsLAogICAgICAgIFFCP2VsKCdkaXYnLHtrZXk6J2InLHN0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNS41cHgnLGxpbmVIZWlnaHQ6MS42LGNvbG9yOklOS319LCdM4oCZw6JnZSBsw6lnYWwgcG91ciB2b3RyZSBnw6luw6lyYXRpb25cdTAwYTA6ICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZfX0sU3RyaW5nKFFCLmFnZV9saXNpYmxlKSksJy4gTGEgZHVyw6llIHJlcXVpc2VcdTAwYTA6ICcsZWwoJ3N0cm9uZycse3N0eWxlOntjb2xvcjpOQVZZfX0sU3RyaW5nKFFCLnRyaW1lc3RyZXNfcmVxdWlzKSsnIHRyaW1lc3RyZXMnKSwnLicpOm51bGwsCiAgICAgICAgUUI/ZWwoJ2Rpdicse2tleTonc3JjJyxzdHlsZTp7Zm9udFNpemU6bT8nMTJweCc6JzEyLjVweCcsY29sb3I6R1JFWX19LCdDaXJjdWxhaXJlICcrUUIuc291cmNlKTpudWxsLAogICAgICAgIGVsKCdkaXYnLHtrZXk6J3InLHN0eWxlOnttYXJnaW5Ub3A6bT8nMnB4JzonNHB4Jyxmb250U2l6ZTptPycxNXB4JzonMTZweCcsbGluZUhlaWdodDoxLjQ1LGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVlksdGV4dFdyYXA6J2JhbGFuY2UnfX0sJ8OHYSwgY+KAmWVzdCBsYSByw6hnbGUuIFZvaWzDoCBjZSBxdeKAmWVsbGUgbmUgZGl0IHBhcywgZXQgcXVlIHZvdHJlIHJlbGV2w6ksIGx1aSwgcGV1dCBkaXJlLicpLAogICAgICAgIGVsKCdkaXYnLHtrZXk6J3ByJyxzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLG1hcmdpblRvcDptPyc0cHgnOic2cHgnfX0sCiAgICAgICAgICBQUi5tYXAoKHAsaTIpPT57dmFyIG9uPShwLm1vdGlmIT1udWxsKTtyZXR1cm4gZWwoJ2Rpdicse2tleTppMixzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonZmxleC1zdGFydCcsZ2FwOicxMHB4Jyxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkUscGFkZGluZzptPycxMHB4IDAnOicxMnB4IDAnfX0sCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCx3aWR0aDonOHB4JyxoZWlnaHQ6JzhweCcsbWFyZ2luVG9wOic2cHgnLGJhY2tncm91bmQ6b24/UkVEOicjYzljZmRhJ319KSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmbGV4OicxIDEgMCcsbWluV2lkdGg6MH19LAogICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0Om9uPzcwMDo1MDAsY29sb3I6b24/TkFWWTpHUkVZLGxpbmVIZWlnaHQ6MS40fX0scC50ZXh0ZSksCiAgICAgICAgICAgICAgb24/ZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzNweCcsZm9udFNpemU6bT8nMTNweCc6JzEzLjVweCcsbGluZUhlaWdodDoxLjUsY29sb3I6SU5LfX0scC5tb3RpZik6bnVsbCkpO30pKSwKICAgICAgICBlbCgnZGl2Jyx7a2V5Oidtaycsc3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSxlbCgnc3Ryb25nJyx7c3R5bGU6e2NvbG9yOk5BVll9fSxTdHJpbmcoTUspKyhNSz4xPycgZGUgY2VzIGh1aXQgcXVlc3Rpb25zIHNlIGpvdWVudCc6JyBkZSBjZXMgaHVpdCBxdWVzdGlvbnMgc2Ugam91ZScpKSwnIHByw6ljaXPDqW1lbnQgc3VyIHZvdHJlIHByb2ZpbC4gQXVjdW5lIG5lIHNlIHLDqXBvbmQgc2FucyB2b3RyZSByZWxldsOpLicpLAogICAgICAgIGVsKCdkaXYnLHtrZXk6J3B2JyxzdHlsZTp7YmFja2dyb3VuZDpQQVBFUixib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYm9yZGVyTGVmdDonM3B4IHNvbGlkICcrTkFWWSxwYWRkaW5nOm0/JzExcHggMTNweCc6JzEzcHggMTZweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LCdTdXIgbGVzICcrKFBWLnJlbGV2ZXN8fCcnKSsnIGRlcm5pZXJzIHJlbGV2w6lzIHF1ZSBub3VzIGF2b25zIGx1cywgYXVjdW4gbuKAmcOpdGFpdCBzYW5zIGTDqWZhdXQuIExlIHBsdXMgcHJvcHJlIGVuIHBvcnRhaXQgZW5jb3JlICcrKFBWLnN1amV0c19taW5pfHwnJykrJyBwb2ludHMgw6AgdsOpcmlmaWVyLCBsZSBwbHVzIGFiw65tw6kgJysoUFYuc3VqZXRzX21heGl8fCcnKSsnLicpLAogICAgICAgIGVsKCdkaXYnLHtrZXk6J2N0YScsc3R5bGU6e21hcmdpblRvcDptPyc0cHgnOic2cHgnLHBhZGRpbmdUb3A6bT8nMTJweCc6JzE0cHgnLGJvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6SU5LfX0sJ0TDqXBvc2V6IGxlIHbDtHRyZSwgdm91cyB2ZXJyZXogY2UgcXXigJlpbCBwb3J0ZS4gT3UgbGFpc3Nlei1tb2kgdm90cmUgYWRyZXNzZSwgamUgdm91cyBlbnZvaWUgbGEgbWFyY2hlIMOgIHN1aXZyZSBwb3VyIGxlIHLDqWN1cMOpcmVyLicpLAogICAgICAgIGVsKCdsYWJlbCcse2tleTonZGVwJyxzdHlsZTp7ZGlzcGxheTonaW5saW5lLWZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsaGVpZ2h0Om0/JzU0cHgnOic1OHB4JyxwYWRkaW5nOicwIDI2cHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNnB4JzonMTdweCcsZm9udFdlaWdodDo3MDAsY3Vyc29yOidwb2ludGVyJyxib3hTaGFkb3c6JzAgMTRweCAzMHB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknfX0sJ0TDqXBvc2VyIG1vbiByZWxldsOpJywKICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J2ZpbGUnLGFjY2VwdDonYXBwbGljYXRpb24vcGRmJyxzdHlsZTp7ZGlzcGxheTonbm9uZSd9LG9uQ2hhbmdlOmU9PnNlbGYubGlyZVJlbGV2ZShlLnRhcmdldC5maWxlcyYmZS50YXJnZXQuZmlsZXNbMF0pfSkpLAogICAgICAgIGNoYW1wTWFpbF0pOwogICAgfSkodGhpcyk7CgogICAgY29uc3QgZWNyYW5RdWVzdGlvbnM9ZWwoJ2RpdicsbnVsbCxRP2VjcmFuUXVlc3Rpb246YmlsYW4pOwoKICAgIGNvbnN0IGJsb2M9ZXRhdD09PSdxdWVzdGlvbnMnP2VjcmFuUXVlc3Rpb25zOmV0YXQ9PT0nbGVjdHVyZSc/Y2hhcmdlbWVudDpldGF0PT09J3Jlc3VsdGF0Jz9yZXN1bHRhdDpldGF0PT09J3Bhc19yZWxldmUnP3Bhc1JlbGV2ZTpldGF0PT09J2lsbGlzaWJsZSc/aWxsaXNpYmxlOmV0YXQ9PT0nZWNoZWMnP2VjaGVjOmRlcG90OwoKICAgIGNvbnN0IHBpZWdlPWVsKCdpbnB1dCcse3R5cGU6J3RleHQnLG5hbWU6J2FkcmVzc2VfY29uZmlybWF0aW9uJyx0YWJpbmRleDonLTEnLGF1dG9jb21wbGV0ZTonb2ZmJywnYXJpYS1oaWRkZW4nOid0cnVlJyxzdHlsZTp7cG9zaXRpb246J2Fic29sdXRlJyxsZWZ0OictOTk5OXB4JyxvcGFjaXR5OjAsd2lkdGg6JzFweCcsaGVpZ2h0OicxcHgnfX0pOwoKICAgIC8vIHBsYWNlPT09J2hlcm8nIDogbGEgY2FydGUgcHJlbmQgbGEgY29sb25uZSBkcm9pdGUgZHUgcHJlbWllciDDqWNyYW4uCiAgICAvLyBEw6hzIHF1ZSBsYSBsZWN0dXJlIGTDqW1hcnJlLCBlbGxlIHNvcnQgZHUgaMOpcm9zIGV0IHMnYWZmaWNoZSBlbiBwbGVpbmUgbGFyZ2V1ci4KICAgIC8vIExlIGTDqXDDtHQgZXQgbGVzIDYgcXVlc3Rpb25zIHJlc3RlbnQgZGFucyBsYSBjYXJ0ZSBkdSBwcmVtaWVyIMOpY3JhbiA6IGVuIHNvcnRpcgogICAgLy8gdmlkZXJhaXQgbGEgY29sb25uZSBkcm9pdGUgZHUgaMOpcm9zLiBTZXVsZSBsYSBsZWN0dXJlIHByZW5kIGxhIHBsZWluZSBsYXJnZXVyLgogICAgdmFyIGRhbnNIZXJvID0gKGV0YXQ9PT0nZGVwb3QnIHx8IGV0YXQ9PT0ncXVlc3Rpb25zJyk7CiAgICBpZihwbGFjZT09PSdoZXJvJyl7CiAgICAgIGlmKCFkYW5zSGVybykgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBlbCgnZGl2Jyx7J2RhdGEtZGlhZyc6JzEnfSxldGF0PT09J3F1ZXN0aW9ucyc/ZWNyYW5RdWVzdGlvbnM6ZGVwb3QsZXRhdD09PSdkZXBvdCc/ZGlzY2xhaW1lcjpudWxsLHBpZWdlKTsKICAgIH0KICAgIGlmKGRhbnNIZXJvKSByZXR1cm4gbnVsbDsKCiAgICByZXR1cm4gZWwoJ3NlY3Rpb24nLHtzdHlsZTp7YmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOicycHggc29saWQgJytOQVZZLGJvcmRlckJvdHRvbTonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nOm0/JzM0cHggMCA0MHB4JzonNTZweCAwIDcycHgnfX0sCiAgICAgIGlubmVyKGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMThweCc6JzI0cHgnfX0sCiAgICAgICAgZWwoJ2RpdicseydkYXRhLWRpYWcnOicxJ30sYmxvYyksCiAgICAgICAgcGllZ2UpKSk7CiAgfQoKICBwb3B1cFJlbGV2ZShtKXsKICAgIC8vIGxlcyBxdWF0cmUgdmFyaWFudGVzIGNvaGFiaXRlbnQgZGFucyBsZSBtw6ptZSBkb2N1bWVudCA6IHVuZSBzZXVsZSBmZW7DqnRyZSDDoCBsYSBmb2lzCiAgICBpZih0aGlzLnN0YXRlLnBvcHVwIT09KG0/J20nOidkJykpIHJldHVybiBudWxsOwogICAgY29uc3QgZWw9UmVhY3QuY3JlYXRlRWxlbWVudDsKICAgIGNvbnN0IE5BVlk9JyMwRTEzNEYnLCBSRUQ9JyNGNTI1NDknLCBHUkVZPScjNkM3MTc5JywgSU5LPScjMWMyMjMwJywgTElORT0nI2U1ZTdlYic7CiAgICBjb25zdCBTRVJJRj0iJ05ld3NyZWFkZXInLCBHZW9yZ2lhLCBzZXJpZiI7CiAgICBjb25zdCBmZXJtZXI9KCk9PnRoaXMuc2V0U3RhdGUoe3BvcHVwOmZhbHNlLHBvcHVwTWFpbE9rOmZhbHNlfSk7CiAgICBjb25zdCBFVEFQRVM9WwogICAgICBbJ0FsbGV6IHN1ciAnLCdpbmZvLXJldHJhaXRlLmZyJywnLCBvdSAnLCdpbmZvLXJldHJhaXRlLmZyJywnIHNpIHZvdXMgYXZleiB0b3Vqb3VycyDDqXTDqSBzYWxhcmnDqSddLAogICAgICBbJ0Nvbm5lY3Rlei12b3VzIMOgIHZvdHJlIGVzcGFjZSBwZXJzb25uZWwsICcsJ0ZyYW5jZUNvbm5lY3QnLCcgZm9uY3Rpb25uZSwgYXZlYyB2b3MgaWRlbnRpZmlhbnRzIGRlcyBpbXDDtHRzIG91IGRlIGxcdTIwMTlBc3N1cmFuY2UgbWFsYWRpZSddLAogICAgICBbJ091dnJleiAnLCfCq1x1MDBhME1vbiByZWxldsOpIGRlIGNhcnJpw6hyZVx1MDBhMMK7JywnJywnJywnJ10sCiAgICAgIFsnVMOpbMOpY2hhcmdleiBsZSBQREYsICcsJ3NhbnMgbGUgbW9kaWZpZXIgbmkgbGUgcmVub21tZXInLCcnLCcnLCcnXQogICAgXTsKICAgIHJldHVybiBlbCgnZGl2Jyx7b25DbGljazpmZXJtZXIsc3R5bGU6e3Bvc2l0aW9uOidmaXhlZCcsaW5zZXQ6MCx6SW5kZXg6OTAwLGJhY2tncm91bmQ6J3JnYmEoMTQsMTksNzksMC41NSknLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6bT8nZmxleC1lbmQnOidmbGV4LXN0YXJ0JyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxwYWRkaW5nOm0/JzAnOiczMnB4JyxvdmVyZmxvd1k6J2F1dG8nfX0sCiAgICAgIGVsKCdkaXYnLHtvbkNsaWNrOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCksc3R5bGU6e2JveFNpemluZzonYm9yZGVyLWJveCcsbWFyZ2luOm0/JzAnOidhdXRvJyx3aWR0aDonMTAwJScsbWF4V2lkdGg6bT8nbm9uZSc6JzU2MHB4JyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxib3JkZXJUb3A6JzNweCBzb2xpZCAnK1JFRCxib3hTaGFkb3c6JzAgNDBweCA5MHB4IC0zMHB4IHJnYmEoMTQsMTksNzksMC41NSknLHBhZGRpbmc6bT8nMjJweCAyMHB4IDI0cHgnOiczMHB4IDM0cHggMzJweCcsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6bT8nMTRweCc6JzE2cHgnLG1heEhlaWdodDptPyc5MnZoJzonbm9uZScsb3ZlcmZsb3dZOm0/J2F1dG8nOid2aXNpYmxlJ319LAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonZmxleC1zdGFydCcsZ2FwOicxNnB4JyxqdXN0aWZ5Q29udGVudDonc3BhY2UtYmV0d2Vlbid9fSwKICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7bWluV2lkdGg6MH19LAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMjRweCc6JzI5cHgnLGxpbmVIZWlnaHQ6MS4xMixmb250V2VpZ2h0OjUwMCxsZXR0ZXJTcGFjaW5nOictMC4wMmVtJyxjb2xvcjpOQVZZLHRleHRXcmFwOidiYWxhbmNlJ319LCdPw7kgdHJvdXZlciB2b3RyZSByZWxldsOpIGRlIGNhcnJpw6hyZScpLAogICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21hcmdpblRvcDonNnB4Jyxmb250U2l6ZTptPycxMy41cHgnOicxNHB4JyxsaW5lSGVpZ2h0OjEuNSxjb2xvcjpHUkVZfX0sJ0Vudmlyb24gNSBtaW51dGVzLCBncmF0dWl0ZW1lbnQsIHN1ciBsZSBzaXRlIG9mZmljaWVsLicpKSwKICAgICAgICAgIGVsKCdidXR0b24nLHtvbkNsaWNrOmZlcm1lciwnYXJpYS1sYWJlbCc6J0Zlcm1lcicsb25Nb3VzZUVudGVyOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2VlZjJmYic7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPU5BVlk7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPScjZmZmZmZmJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9TElORTt9LHN0eWxlOnthcHBlYXJhbmNlOidub25lJyxib3JkZXI6JzFweCBzb2xpZCAnK0xJTkUsYmFja2dyb3VuZDonI2ZmZmZmZicsY3Vyc29yOidwb2ludGVyJyxmbGV4U2hyaW5rOjAsd2lkdGg6JzM0cHgnLGhlaWdodDonMzRweCcsZGlzcGxheTonZmxleCcsYWxpZ25JdGVtczonY2VudGVyJyxqdXN0aWZ5Q29udGVudDonY2VudGVyJyxjb2xvcjpOQVZZLGZvbnRTaXplOicxN3B4JyxsaW5lSGVpZ2h0OjEsZm9udEZhbWlseTonaW5oZXJpdCcsdHJhbnNpdGlvbjonYmFja2dyb3VuZCAuMThzIGVhc2UsIGJvcmRlci1jb2xvciAuMThzIGVhc2UnfX0sJ1x1MDBkNycpKSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMnB4IHNvbGlkICcrTkFWWSxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nfX0sCiAgICAgICAgICBFVEFQRVMubWFwKCh4LGkpPT5lbCgnZGl2Jyx7a2V5Omksc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGdhcDptPycxMnB4JzonMTRweCcsYWxpZ25JdGVtczonYmFzZWxpbmUnLHBhZGRpbmc6bT8nMTFweCAwJzonMTJweCAwJyxib3JkZXJCb3R0b206JzFweCBzb2xpZCAnK0xJTkV9fSwKICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7ZmxleFNocmluazowLGZvbnRGYW1pbHk6U0VSSUYsZm9udFNpemU6bT8nMTlweCc6JzIxcHgnLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxjb2xvcjonI2M0MTczYScsZm9udFZhcmlhbnROdW1lcmljOid0YWJ1bGFyLW51bXMnLG1pbldpZHRoOicxNnB4J319LFN0cmluZyhpKzEpKSwKICAgICAgICAgICAgZWwoJ3NwYW4nLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOklOS319LAogICAgICAgICAgICAgIHhbMF0sZWwoJ3N0cm9uZycse3N0eWxlOntmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0seFsxXSkseFsyXSx4WzNdP2VsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbM10pOm51bGwseFs0XSkpKSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNC41cHgnOicxNXB4JyxsaW5lSGVpZ2h0OjEuNTUsY29sb3I6TkFWWSxmb250V2VpZ2h0OjYwMH19LCdSZXZlbmV6IGVuc3VpdGUgaWNpIGV0IGTDqXBvc2V6LWxlLicpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Ym9yZGVyVG9wOicxcHggc29saWQgJytMSU5FLHBhZGRpbmdUb3A6bT8nMTRweCc6JzE2cHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzEwcHgnfX0sCiAgICAgICAgICB0aGlzLnN0YXRlLnBvcHVwTWFpbE9rCiAgICAgICAgICAgID8gZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDonNXB4J319LAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ0NcdTIwMTllc3QgZW52b3nDqS4nKSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOkdSRVl9fSwnVm91cyByZWNldmV6IGxhIG1hcmNoZSDDoCBzdWl2cmUgZGFucyB1biBpbnN0YW50LiBSaWVuIGRcdTIwMTlhdXRyZSBuZSB2b3VzIHNlcmEgZW52b3nDqS4nKSkKICAgICAgICAgICAgOiBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzlweCc6JzEwcHgnfX0sCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE1cHgnOicxNS41cHgnLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSwnVm91cyBwcsOpZsOpcmV6IGxlIGZhaXJlIHBsdXMgdGFyZFx1MDBhMD8nKSwKICAgICAgICAgICAgICAgIGVsKCdmb3JtJyx7b25TdWJtaXQ6ZT0+e2UucHJldmVudERlZmF1bHQoKTt2YXIgaW5wPWUuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJlbWFpbCJdJyk7dGhpcy5lbnZveWVyTWFyY2hlKGlucD9pbnAudmFsdWU6JycpO30sc3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246bT8nY29sdW1uJzoncm93JyxnYXA6JzEwcHgnfX0sCiAgICAgICAgICAgICAgICAgIGVsKCdpbnB1dCcse3R5cGU6J2VtYWlsJyxyZXF1aXJlZDp0cnVlLHBsYWNlaG9sZGVyOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsJ2FyaWEtbGFiZWwnOidWb3RyZSBhZHJlc3NlIGUtbWFpbCcsc3R5bGU6e2ZsZXg6bT8nMCAwIGF1dG8nOicxIDEgMCcsZmxleFNocmluazowLHdpZHRoOm0/JzEwMCUnOidhdXRvJyxtaW5XaWR0aDowLGhlaWdodDptPyc1MnB4JzonNTRweCcsbWluSGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDE0cHgnLGJvcmRlcjonMXB4IHNvbGlkICNjOWNmZGEnLGJhY2tncm91bmQ6JyNmZmZmZmYnLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGNvbG9yOklOSyxvdXRsaW5lOidub25lJyxib3hTaXppbmc6J2JvcmRlci1ib3gnfX0pLAogICAgICAgICAgICAgICAgICBlbCgnYnV0dG9uJyx7dHlwZTonYnV0dG9uJyxvbkNsaWNrOmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGY9ZS5jdXJyZW50VGFyZ2V0LmNsb3Nlc3QoJ2Zvcm0nKTt2YXIgaW5wPWYmJmYucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3RoaXMuZW52b3llck1hcmNoZShpbnA/aW5wLnZhbHVlOicnKTt9LG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nYnJpZ2h0bmVzcyguOTMpJztlLmN1cnJlbnRUYXJnZXQuc3R5bGUudHJhbnNmb3JtPSd0cmFuc2xhdGVZKC0xcHgpJzt9LG9uTW91c2VMZWF2ZTplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmZpbHRlcj0nbm9uZSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0nbm9uZSc7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOidub25lJyxjdXJzb3I6J3BvaW50ZXInLGZvbnRGYW1pbHk6J2luaGVyaXQnLGZsZXhTaHJpbms6MCxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLHBhZGRpbmc6JzAgMjBweCcsYmFja2dyb3VuZDpSRUQsY29sb3I6JyNmZmZmZmYnLGZvbnRTaXplOm0/JzE1LjVweCc6JzE2cHgnLGZvbnRXZWlnaHQ6NzAwLGxldHRlclNwYWNpbmc6Jy0wLjAxZW0nLGJveFNoYWRvdzonMCAxMnB4IDI2cHggLTE0cHggcmdiYSgyNDUsMzcsNzMsMC42KScsdHJhbnNpdGlvbjonZmlsdGVyIC4xOHMgZWFzZSwgdHJhbnNmb3JtIC4xOHMgZWFzZSd9fSwnRW52b3llei1tb2kgbGEgbWFyY2hlIMOgIHN1aXZyZScpKSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTIuNXB4JzonMTNweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdVbiBzZXVsIG1lc3NhZ2UsIGF2ZWMgbGVzIMOpdGFwZXMuIFJpZW4gZFx1MjAxOWF1dHJlLicpKSkpKTsKICB9CgogIC8vIEFubsOpZXMgZHUgcmVsZXbDqSwgw6AgYWxpbWVudGVyIHBhciBsYSByw6lwb25zZSBkdSBtb3RldXIuCiAgYW5uZWVzTHVlcygpewogICAgcmV0dXJuIHRoaXMuc3RhdGUuYW5uZWVzIHx8IFtbMTk4MiwnMiB0cmltZXN0cmVzJ10sWzE5ODMsJzQgdHJpbWVzdHJlcyddLFsxOTg0LCc0IHRyaW1lc3RyZXMnXSxbMTk4NSwnMSB0cmltZXN0cmUnXSxbMTk4NiwnNCB0cmltZXN0cmVzJ10sWzE5ODcsJzQgdHJpbWVzdHJlcyddLFsxOTg4LCc0IHRyaW1lc3RyZXMnXSxbMTk4OSwnMyB0cmltZXN0cmVzJ10sWzE5OTAsJzQgdHJpbWVzdHJlcyddLFsxOTkxLCc0IHRyaW1lc3RyZXMnXSxbMTk5MiwnNCB0cmltZXN0cmVzJ10sWzE5OTMsJzIgdHJpbWVzdHJlcyddLFsxOTk0LCc0IHRyaW1lc3RyZXMnXSxbMTk5NSwnNCB0cmltZXN0cmVzJ10sWzE5OTcsJzQgdHJpbWVzdHJlcyddLFsxOTk4LCc0IHRyaW1lc3RyZXMnXSxbMTk5OSwnNCB0cmltZXN0cmVzJ10sWzIwMDAsJzQgdHJpbWVzdHJlcyddLFsyMDAxLCc0IHRyaW1lc3RyZXMnXSxbMjAwMiwnNCB0cmltZXN0cmVzJ10sWzIwMDMsJzQgdHJpbWVzdHJlcyddLFsyMDA0LCc0IHRyaW1lc3RyZXMnXSxbMjAwNiwnNCB0cmltZXN0cmVzJ10sWzIwMDcsJzQgdHJpbWVzdHJlcyddLFsyMDA4LCc0IHRyaW1lc3RyZXMnXSxbMjAwOSwnNCB0cmltZXN0cmVzJ10sWzIwMTAsJzQgdHJpbWVzdHJlcyddLFsyMDExLCczIHRyaW1lc3RyZXMnXSxbMjAxMiwnNCB0cmltZXN0cmVzJ10sWzIwMTMsJzQgdHJpbWVzdHJlcyddLFsyMDE0LCc0IHRyaW1lc3RyZXMnXSxbMjAxNSwnNCB0cmltZXN0cmVzJ10sWzIwMTYsJzQgdHJpbWVzdHJlcyddLFsyMDE3LCc0IHRyaW1lc3RyZXMnXSxbMjAxOCwnNCB0cmltZXN0cmVzJ10sWzIwMTksJzQgdHJpbWVzdHJlcyddLFsyMDIwLCc0IHRyaW1lc3RyZXMnXSxbMjAyMSwnNCB0cmltZXN0cmVzJ10sWzIwMjIsJzQgdHJpbWVzdHJlcyddLFsyMDIzLCc0IHRyaW1lc3RyZXMnXSxbMjAyNCwnNCB0cmltZXN0cmVzJ10sWzIwMjUsJzQgdHJpbWVzdHJlcyddXTsKICB9CgogIGNhcHR1cmVNYWlsKCl7CiAgICB0aGlzLnNldFN0YXRlKHttYWlsT2s6dHJ1ZX0pOwogICAgLy8gw4l2w6luZW1lbnQgZGUgbWVzdXJlLCBhdSBtb21lbnQgb8O5IGwnYWRyZXNzZSBlc3QgdmFsaWTDqWUuCiAgICB0cnl7CiAgICAgIGlmKHR5cGVvZiB3aW5kb3chPT0ndW5kZWZpbmVkJyl7CiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5kYXRhTGF5ZXIhPT0ndW5kZWZpbmVkJykgd2luZG93LmRhdGFMYXllci5wdXNoKHtldmVudDoncHJlYW5hbHlzZV9lbWFpbCd9KTsKICAgICAgICBpZih0eXBlb2Ygd2luZG93LmNsYXJpdHk9PT0nZnVuY3Rpb24nKSB3aW5kb3cuY2xhcml0eSgnZXZlbnQnLCdwcmVhbmFseXNlX2VtYWlsJyk7CiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5ndGFnPT09J2Z1bmN0aW9uJykgd2luZG93Lmd0YWcoJ2V2ZW50JywncHJlYW5hbHlzZV9lbWFpbCcpOwogICAgICB9CiAgICB9Y2F0Y2goZSl7fQogIH0KCiAgb3V2cmlyUXVlc3Rpb25zKCl7CiAgICB0aGlzLnNldFN0YXRlKHtkaWFnOidxdWVzdGlvbnMnLHFJbmRleDowLHJlcG9uc2VzOnt9fSk7CiAgfQoKICBzY3JvbGxUb0RpYWcoZXYpewogICAgLy8gVGFudCBxdWUgbGUgbW9kdWxlIHZpdCBkYW5zIGxlIGjDqXJvcywgaWwgZXN0IGTDqWrDoCDDoCBsJ8OpY3JhbiA6IG5lIHBhcyBkw6lmaWxlci4KICAgIHZhciBfaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1sZWN0dXJlLWhlcm8nKTsKICAgIGlmKF9oICYmIF9oLmNoaWxkcmVuLmxlbmd0aCkgcmV0dXJuOwogICAgLy8gbGEgbWFxdWV0dGUgcmVuZCBsZXMgcXVhdHJlIHZhcmlhbnRlcyBkYW5zIGxlIG3Dqm1lIGRvY3VtZW50IDoKICAgIC8vIG9uIHBhcnQgZHUgYm91dG9uIGNsaXF1w6kgcG91ciByZXN0ZXIgZGFucyBsYSBib25uZSBjb2xvbm5lLgogICAgY29uc3Qgc3JjPWV2JiZldi5jdXJyZW50VGFyZ2V0OwogICAgaWYoc3JjKXsKICAgICAgbGV0IHM9c3JjLnBhcmVudEVsZW1lbnQ7CiAgICAgIHdoaWxlKHMmJmdldENvbXB1dGVkU3R5bGUocykub3ZlcmZsb3dZIT09J2F1dG8nKSBzPXMucGFyZW50RWxlbWVudDsKICAgICAgdGhpcy5fc2M9c3x8bnVsbDsgdGhpcy5fc3JjPXNyYzsKICAgIH0KICAgIHNldFRpbWVvdXQoKCk9PnsKICAgICAgY29uc3QgcmFjaW5lPXRoaXMuX3NjfHxkb2N1bWVudDsKICAgICAgY29uc3QgdGd0PXJhY2luZS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kaWFnXScpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kaWFnXScpOwogICAgICBpZighdGd0KSByZXR1cm47CiAgICAgIGxldCBzYz10aGlzLl9zYzsKICAgICAgaWYoIXNjKXsgc2M9dGd0LnBhcmVudEVsZW1lbnQ7IHdoaWxlKHNjJiZnZXRDb21wdXRlZFN0eWxlKHNjKS5vdmVyZmxvd1khPT0nYXV0bycpIHNjPXNjLnBhcmVudEVsZW1lbnQ7IH0KICAgICAgaWYoc2MpewogICAgICAgIHNjLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlY3Rpb24nKS5mb3JFYWNoKHM9PntzLnN0eWxlLm9wYWNpdHk9JzEnO3Muc3R5bGUuYW5pbWF0aW9uPSdub25lJztzLmRhdGFzZXQucnY9JzEnO30pOwogICAgICAgIGNvbnN0IHRvcD10Z3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXNjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtzYy5zY3JvbGxUb3A7CiAgICAgICAgc2Muc2Nyb2xsVG8oe3RvcDp0b3AtMTQsYmVoYXZpb3I6J3Ntb290aCd9KTsKICAgICAgfWVsc2V7CiAgICAgICAgd2luZG93LnNjcm9sbFRvKHt0b3A6dGd0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCt3aW5kb3cuc2Nyb2xsWS0xNCxiZWhhdmlvcjonc21vb3RoJ30pOwogICAgICB9CiAgICB9LDYwKTsKICB9CgogIGxpcmVSZWxldmUoZmlsZSl7CiAgICBpZighZmlsZSkgcmV0dXJuOwogICAgLy8gVW4gbm91dmVhdSBkw6lww7R0IHJlcGFydCBkZSB6w6lybyA6IGF1Y3VuIG1vdGlmIG5pIGFwZXLDp3UgZCd1bmUgdGVudGF0aXZlIHByw6ljw6lkZW50ZS4KICAgIHRoaXMuYXBlcmN1PW51bGw7CiAgICB0aGlzLnNldFN0YXRlKHtkaWFnOidsZWN0dXJlJyxub206ZmlsZS5uYW1lLGVjaGVjTXNnOm51bGx9KTsKICAgIHRoaXMuc2Nyb2xsVG9EaWFnKCk7CiAgICBsZXQgY2xvcz1mYWxzZTsKICAgIGNvbnN0IHQwPURhdGUubm93KCk7CiAgICAvLyBMJ8OpY3JhbiBkJ2F0dGVudGUgZXN0IHRlbnUgUExBTkNIRVIgOiBsZSB0ZW1wcyBxdWUgc2VzIGFubsOpZXMgZMOpZmlsZW50CiAgICAvLyBldCBxdSdlbGxlIHB1aXNzZSBsYWlzc2VyIHVuZSBhZHJlc3NlLiBMZSByw6lzdWx0YXQgcydhZmZpY2hlIGVuc3VpdGUsCiAgICAvLyBhdmVjIG91IHNhbnMgYWRyZXNzZS4KICAgIGNvbnN0IFBMQU5DSEVSPTkwMDA7CiAgICBjbGVhckludGVydmFsKHRoaXMuX2RlZmlsZSk7CiAgICB0aGlzLnNldFN0YXRlKHthbm5lZTowfSk7CiAgICAvLyBMZSBkw6lmaWzDqSBwYXJjb3VydCB0b3V0ZSBsYSBjYXJyacOocmUsIDQgYW5uw6llcyB2aXNpYmxlcyDDoCBsYSBmb2lzLCBldCBzZQogICAgLy8gdGVybWluZSBhdmVjIGwnYXR0ZW50ZSA6IGxhIGNhZGVuY2UgZXN0IGTDqXJpdsOpZSBkZSBQTEFOQ0hFUiwgcGFzIMOpY3JpdGUKICAgIC8vIGVuIGR1ci4gSWwgcydhcnLDqnRlIHN1ciBsYSBkZXJuacOocmUgYW5uw6llIGF1IGxpZXUgZGUgcmVjb21tZW5jZXIuCiAgICBjb25zdCBwYXM9TWF0aC5tYXgoMSx0aGlzLmFubmVlc0x1ZXMoKS5sZW5ndGgtMyk7CiAgICAvLyBMZSBjdXJzZXVyIGVzdCBjYWxjdWzDqSBkZXB1aXMgbGUgdGVtcHMgw6ljb3Vsw6ksIGphbWFpcyBpbmNyw6ltZW50w6kgOiBpbAogICAgLy8gcydhdXRvLWNvcnJpZ2Ugc2kgbGUgbmF2aWdhdGV1ciByYWxlbnRpdCwgZXQgZmluaXQgcGlsZSDDoCBQTEFOQ0hFUi4KICAgIHRoaXMuX2RlZmlsZT1zZXRJbnRlcnZhbCgoKT0+ewogICAgICBjb25zdCBhdj1NYXRoLm1pbihwYXMtMSxNYXRoLmZsb29yKChEYXRlLm5vdygpLXQwKS9QTEFOQ0hFUipwYXMpKTsKICAgICAgaWYoYXY+PXBhcy0xKSBjbGVhckludGVydmFsKHRoaXMuX2RlZmlsZSk7CiAgICAgIHRoaXMuc2V0U3RhdGUoe2FubmVlOmF2fSk7CiAgICB9LDkwKTsKICAgIGNvbnN0IHBvc2U9KGV0YXQpPT57IGlmKGNsb3MpIHJldHVybjsgY2xvcz10cnVlOyBjbGVhclRpbWVvdXQoZ2FyZGUpOwogICAgICBjb25zdCByZXN0ZT1NYXRoLm1heCgwLFBMQU5DSEVSLShEYXRlLm5vdygpLXQwKSk7CiAgICAgIHNldFRpbWVvdXQoKCk9PnsgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOyB0aGlzLnNldFN0YXRlKHtkaWFnOmV0YXR9KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgfSxyZXN0ZSk7IH07CiAgICBjb25zdCBmaW49cG9zZTsKICAgIC8vIEdhcmRlLWZvdSByw6lzZWF1IDogaWwgZG9pdCB0b3Vqb3VycyByZXN0ZXIgYXUtZGVsw6AgZGUgUExBTkNIRVIuCiAgICBjb25zdCBnYXJkZT1zZXRUaW1lb3V0KCgpPT57IGNsb3M9dHJ1ZTsgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOyB0aGlzLnNldFN0YXRlKHtkaWFnOidlY2hlYyd9KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgfSwxMjAwMCk7CiAgICBjb25zdCBmZD1uZXcgRm9ybURhdGEoKTsgZmQuYXBwZW5kKCdyZWxldmUnLGZpbGUpOwogICAgdmFyIF9ocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1sZWN0dXJlIGlucHV0W25hbWU9ImFkcmVzc2VfY29uZmlybWF0aW9uIl0nKTsgZmQuYXBwZW5kKCdhZHJlc3NlX2NvbmZpcm1hdGlvbicsX2hwP19ocC52YWx1ZTonJyk7CiAgICAvLyBBcHBlbCBhc3luY2hyb25lIHZlcnMgbGUgbW90ZXVyIDogYXVjdW5lIG5hdmlnYXRpb24gZHUgbmF2aWdhdGV1ci4KICAgIHRyeXsKICAgICAgY29uc3QgY3RybD0odHlwZW9mIEFib3J0Q29udHJvbGxlciE9PSd1bmRlZmluZWQnKT9uZXcgQWJvcnRDb250cm9sbGVyKCk6bnVsbDsKICAgICAgaWYoY3RybCkgc2V0VGltZW91dCgoKT0+e3RyeXtjdHJsLmFib3J0KCk7fWNhdGNoKGUpe319LDY4MDApOwogICAgICBmZXRjaCgnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvYXBlcmN1Jyx7bWV0aG9kOidQT1NUJyxib2R5OmZkLHNpZ25hbDpjdHJsP2N0cmwuc2lnbmFsOnVuZGVmaW5lZH0pCiAgICAgICAgLnRoZW4ocj0+ci5qc29uKCkudGhlbihkPT4oe3N0YXR1czpyLnN0YXR1cyxkYXRhOmR9KSwoKT0+KHtzdGF0dXM6ci5zdGF0dXMsZGF0YTp7fX0pKSkKICAgICAgICAudGhlbihyZXM9PnRoaXMucmVjZXZvaXJBcGVyY3UocmVzLGZpbikpCiAgICAgICAgLmNhdGNoKCgpPT5zZXRUaW1lb3V0KCgpPT5maW4oJ3Jlc3VsdGF0JyksNjUwKSk7CiAgICB9Y2F0Y2goZXJyKXsgc2V0VGltZW91dCgoKT0+ZmluKCdyZXN1bHRhdCcpLDY1MCk7IH0KICB9CgoKICBhbm5lZXNMdWVzKCl7CiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hbm5lZXMgfHwgW1sxOTgyLCcyIHRyaW1lc3RyZXMnXSxbMTk4MywnNCB0cmltZXN0cmVzJ10sWzE5ODQsJzQgdHJpbWVzdHJlcyddLFsxOTg1LCcxIHRyaW1lc3RyZSddLFsxOTg2LCc0IHRyaW1lc3RyZXMnXSxbMTk4NywnNCB0cmltZXN0cmVzJ10sWzE5ODgsJzQgdHJpbWVzdHJlcyddLFsxOTg5LCczIHRyaW1lc3RyZXMnXSxbMTk5MCwnNCB0cmltZXN0cmVzJ10sWzE5OTEsJzQgdHJpbWVzdHJlcyddLFsxOTkyLCc0IHRyaW1lc3RyZXMnXSxbMTk5MywnMiB0cmltZXN0cmVzJ10sWzE5OTQsJzQgdHJpbWVzdHJlcyddLFsxOTk1LCc0IHRyaW1lc3RyZXMnXSxbMTk5NywnNCB0cmltZXN0cmVzJ10sWzE5OTgsJzQgdHJpbWVzdHJlcyddLFsxOTk5LCc0IHRyaW1lc3RyZXMnXSxbMjAwMCwnNCB0cmltZXN0cmVzJ10sWzIwMDEsJzQgdHJpbWVzdHJlcyddLFsyMDAyLCc0IHRyaW1lc3RyZXMnXSxbMjAwMywnNCB0cmltZXN0cmVzJ10sWzIwMDQsJzQgdHJpbWVzdHJlcyddLFsyMDA2LCc0IHRyaW1lc3RyZXMnXSxbMjAwNywnNCB0cmltZXN0cmVzJ10sWzIwMDgsJzQgdHJpbWVzdHJlcyddLFsyMDA5LCc0IHRyaW1lc3RyZXMnXSxbMjAxMCwnNCB0cmltZXN0cmVzJ10sWzIwMTEsJzMgdHJpbWVzdHJlcyddLFsyMDEyLCc0IHRyaW1lc3RyZXMnXSxbMjAxMywnNCB0cmltZXN0cmVzJ10sWzIwMTQsJzQgdHJpbWVzdHJlcyddLFsyMDE1LCc0IHRyaW1lc3RyZXMnXSxbMjAxNiwnNCB0cmltZXN0cmVzJ10sWzIwMTcsJzQgdHJpbWVzdHJlcyddLFsyMDE4LCc0IHRyaW1lc3RyZXMnXSxbMjAxOSwnNCB0cmltZXN0cmVzJ10sWzIwMjAsJzQgdHJpbWVzdHJlcyddLFsyMDIxLCc0IHRyaW1lc3RyZXMnXSxbMjAyMiwnNCB0cmltZXN0cmVzJ10sWzIwMjMsJzQgdHJpbWVzdHJlcyddLFsyMDI0LCc0IHRyaW1lc3RyZXMnXSxbMjAyNSwnNCB0cmltZXN0cmVzJ11dOwogIH0KCgogIGNhcHR1cmVNYWlsKCl7CiAgICB0aGlzLnNldFN0YXRlKHttYWlsT2s6dHJ1ZX0pOwogICAgLy8gw4l2w6luZW1lbnQgZGUgbWVzdXJlLCBhdSBtb21lbnQgb8O5IGwnYWRyZXNzZSBlc3QgdmFsaWTDqWUuCiAgICB0cnl7CiAgICAgIGlmKHR5cGVvZiB3aW5kb3chPT0ndW5kZWZpbmVkJyl7CiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5kYXRhTGF5ZXIhPT0ndW5kZWZpbmVkJykgd2luZG93LmRhdGFMYXllci5wdXNoKHtldmVudDoncHJlYW5hbHlzZV9lbWFpbCd9KTsKICAgICAgICBpZih0eXBlb2Ygd2luZG93LmNsYXJpdHk9PT0nZnVuY3Rpb24nKSB3aW5kb3cuY2xhcml0eSgnZXZlbnQnLCdwcmVhbmFseXNlX2VtYWlsJyk7CiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5ndGFnPT09J2Z1bmN0aW9uJykgd2luZG93Lmd0YWcoJ2V2ZW50JywncHJlYW5hbHlzZV9lbWFpbCcpOwogICAgICB9CiAgICB9Y2F0Y2goZSl7fQogIH0KCgogIHNjcm9sbGVyKG5vZGUpewogICAgdmFyIHNjID0gbm9kZTsKICAgIHdoaWxlIChzYyAmJiBzYyAhPT0gZG9jdW1lbnQuYm9keSkgewogICAgICB2YXIgb3kgPSBnZXRDb21wdXRlZFN0eWxlKHNjKS5vdmVyZmxvd1k7CiAgICAgIGlmICgob3kgPT09ICdhdXRvJyB8fCBveSA9PT0gJ3Njcm9sbCcpICYmIHNjLnNjcm9sbEhlaWdodCA+IHNjLmNsaWVudEhlaWdodCArIDQpIHJldHVybiBzYzsKICAgICAgc2MgPSBzYy5wYXJlbnRFbGVtZW50OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKCiAgb3V2cmlyUXVlc3Rpb25zKCl7CiAgICB0aGlzLnNldFN0YXRlKHtkaWFnOidxdWVzdGlvbnMnLHFJbmRleDowLHJlcG9uc2VzOnt9fSk7CiAgfQoKICBzY3JvbGxUb0RpYWcoZXYpewogICAgLy8gbGEgbWFxdWV0dGUgcmVuZCBsZXMgcXVhdHJlIHZhcmlhbnRlcyBkYW5zIGxlIG3Dqm1lIGRvY3VtZW50IDoKICAgIC8vIG9uIHBhcnQgZHUgYm91dG9uIGNsaXF1w6kgcG91ciByZXN0ZXIgZGFucyBsYSBib25uZSBjb2xvbm5lLgogICAgY29uc3Qgc3JjPWV2JiZldi5jdXJyZW50VGFyZ2V0OwogICAgaWYoc3JjKXsKICAgICAgbGV0IHM9c3JjLnBhcmVudEVsZW1lbnQ7CiAgICAgIHdoaWxlKHMmJmdldENvbXB1dGVkU3R5bGUocykub3ZlcmZsb3dZIT09J2F1dG8nKSBzPXMucGFyZW50RWxlbWVudDsKICAgICAgdGhpcy5fc2M9c3x8bnVsbDsgdGhpcy5fc3JjPXNyYzsKICAgIH0KICAgIHNldFRpbWVvdXQoKCk9PnsKICAgICAgY29uc3QgcmFjaW5lPXRoaXMuX3NjfHxkb2N1bWVudDsKICAgICAgY29uc3QgdGd0PXJhY2luZS5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kaWFnXScpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1kaWFnXScpOwogICAgICBpZighdGd0KSByZXR1cm47CiAgICAgIGxldCBzYz10aGlzLl9zYzsKICAgICAgaWYoIXNjKXsgc2M9dGd0LnBhcmVudEVsZW1lbnQ7IHdoaWxlKHNjJiZnZXRDb21wdXRlZFN0eWxlKHNjKS5vdmVyZmxvd1khPT0nYXV0bycpIHNjPXNjLnBhcmVudEVsZW1lbnQ7IH0KICAgICAgaWYoc2MpewogICAgICAgIHNjLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NlY3Rpb24nKS5mb3JFYWNoKHM9PntzLnN0eWxlLm9wYWNpdHk9JzEnO3Muc3R5bGUuYW5pbWF0aW9uPSdub25lJztzLmRhdGFzZXQucnY9JzEnO30pOwogICAgICAgIGNvbnN0IHRvcD10Z3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLXNjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtzYy5zY3JvbGxUb3A7CiAgICAgICAgc2Muc2Nyb2xsVG8oe3RvcDp0b3AtMTQsYmVoYXZpb3I6J3Ntb290aCd9KTsKICAgICAgfWVsc2V7CiAgICAgICAgd2luZG93LnNjcm9sbFRvKHt0b3A6dGd0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCt3aW5kb3cuc2Nyb2xsWS0xNCxiZWhhdmlvcjonc21vb3RoJ30pOwogICAgICB9CiAgICB9LDYwKTsKICB9CgoKICBsaXJlUmVsZXZlKGZpbGUpewogICAgaWYoIWZpbGUpIHJldHVybjsKICAgIC8vIFVuIG5vdXZlYXUgZMOpcMO0dCByZXBhcnQgZGUgesOpcm8gOiBhdWN1biBtb3RpZiBuaSBhcGVyw6d1IGQndW5lIHRlbnRhdGl2ZSBwcsOpY8OpZGVudGUuCiAgICB0aGlzLmFwZXJjdT1udWxsOwogICAgdGhpcy5zZXRTdGF0ZSh7ZGlhZzonbGVjdHVyZScsbm9tOmZpbGUubmFtZSxlY2hlY01zZzpudWxsfSk7CiAgICB0aGlzLnNjcm9sbFRvRGlhZygpOwogICAgbGV0IGNsb3M9ZmFsc2U7CiAgICBjb25zdCB0MD1EYXRlLm5vdygpOwogICAgLy8gTCfDqWNyYW4gZCdhdHRlbnRlIGVzdCB0ZW51IFBMQU5DSEVSIDogbGUgdGVtcHMgcXVlIHNlcyBhbm7DqWVzIGTDqWZpbGVudAogICAgLy8gZXQgcXUnZWxsZSBwdWlzc2UgbGFpc3NlciB1bmUgYWRyZXNzZS4gTGUgcsOpc3VsdGF0IHMnYWZmaWNoZSBlbnN1aXRlLAogICAgLy8gYXZlYyBvdSBzYW5zIGFkcmVzc2UuCiAgICBjb25zdCBQTEFOQ0hFUj05MDAwOwogICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgdGhpcy5zZXRTdGF0ZSh7YW5uZWU6MH0pOwogICAgLy8gTGUgZMOpZmlsw6kgcGFyY291cnQgdG91dGUgbGEgY2FycmnDqHJlLCA0IGFubsOpZXMgdmlzaWJsZXMgw6AgbGEgZm9pcywgZXQgc2UKICAgIC8vIHRlcm1pbmUgYXZlYyBsJ2F0dGVudGUgOiBsYSBjYWRlbmNlIGVzdCBkw6lyaXbDqWUgZGUgUExBTkNIRVIsIHBhcyDDqWNyaXRlCiAgICAvLyBlbiBkdXIuIElsIHMnYXJyw6p0ZSBzdXIgbGEgZGVybmnDqHJlIGFubsOpZSBhdSBsaWV1IGRlIHJlY29tbWVuY2VyLgogICAgY29uc3QgcGFzPU1hdGgubWF4KDEsdGhpcy5hbm5lZXNMdWVzKCkubGVuZ3RoLTMpOwogICAgLy8gTGUgY3Vyc2V1ciBlc3QgY2FsY3Vsw6kgZGVwdWlzIGxlIHRlbXBzIMOpY291bMOpLCBqYW1haXMgaW5jcsOpbWVudMOpIDogaWwKICAgIC8vIHMnYXV0by1jb3JyaWdlIHNpIGxlIG5hdmlnYXRldXIgcmFsZW50aXQsIGV0IGZpbml0IHBpbGUgw6AgUExBTkNIRVIuCiAgICB0aGlzLl9kZWZpbGU9c2V0SW50ZXJ2YWwoKCk9PnsKICAgICAgY29uc3QgYXY9TWF0aC5taW4ocGFzLTEsTWF0aC5mbG9vcigoRGF0ZS5ub3coKS10MCkvUExBTkNIRVIqcGFzKSk7CiAgICAgIGlmKGF2Pj1wYXMtMSkgY2xlYXJJbnRlcnZhbCh0aGlzLl9kZWZpbGUpOwogICAgICB0aGlzLnNldFN0YXRlKHthbm5lZTphdn0pOwogICAgfSw5MCk7CiAgICBjb25zdCBwb3NlPShldGF0KT0+eyBpZihjbG9zKSByZXR1cm47IGNsb3M9dHJ1ZTsgY2xlYXJUaW1lb3V0KGdhcmRlKTsKICAgICAgY29uc3QgcmVzdGU9TWF0aC5tYXgoMCxQTEFOQ0hFUi0oRGF0ZS5ub3coKS10MCkpOwogICAgICBzZXRUaW1lb3V0KCgpPT57IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzpldGF0fSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0scmVzdGUpOyB9OwogICAgY29uc3QgZmluPXBvc2U7CiAgICAvLyBHYXJkZS1mb3UgcsOpc2VhdSA6IGlsIGRvaXQgdG91am91cnMgcmVzdGVyIGF1LWRlbMOgIGRlIFBMQU5DSEVSLgogICAgY29uc3QgZ2FyZGU9c2V0VGltZW91dCgoKT0+eyBjbG9zPXRydWU7IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzonZWNoZWMnfSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IH0sMTIwMDApOwogICAgY29uc3QgZmQ9bmV3IEZvcm1EYXRhKCk7IGZkLmFwcGVuZCgncmVsZXZlJyxmaWxlKTsKICAgIHZhciBfaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7IGZkLmFwcGVuZCgnYWRyZXNzZV9jb25maXJtYXRpb24nLF9ocD9faHAudmFsdWU6JycpOwogICAgLy8gQXBwZWwgYXN5bmNocm9uZSB2ZXJzIGxlIG1vdGV1ciA6IGF1Y3VuZSBuYXZpZ2F0aW9uIGR1IG5hdmlnYXRldXIuCiAgICB0cnl7CiAgICAgIGNvbnN0IGN0cmw9KHR5cGVvZiBBYm9ydENvbnRyb2xsZXIhPT0ndW5kZWZpbmVkJyk/bmV3IEFib3J0Q29udHJvbGxlcigpOm51bGw7CiAgICAgIGlmKGN0cmwpIHNldFRpbWVvdXQoKCk9Pnt0cnl7Y3RybC5hYm9ydCgpO31jYXRjaChlKXt9fSw2ODAwKTsKICAgICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdScse21ldGhvZDonUE9TVCcsYm9keTpmZCxzaWduYWw6Y3RybD9jdHJsLnNpZ25hbDp1bmRlZmluZWR9KQogICAgICAgIC50aGVuKHI9PnIuanNvbigpLnRoZW4oZD0+KHtzdGF0dXM6ci5zdGF0dXMsZGF0YTpkfSksKCk9Pih7c3RhdHVzOnIuc3RhdHVzLGRhdGE6e319KSkpCiAgICAgICAgLnRoZW4ocmVzPT50aGlzLnJlY2V2b2lyQXBlcmN1KHJlcyxmaW4pKQogICAgICAgIC5jYXRjaCgoKT0+c2V0VGltZW91dCgoKT0+ZmluKCdyZXN1bHRhdCcpLDY1MCkpOwogICAgfWNhdGNoKGVycil7IHNldFRpbWVvdXQoKCk9PmZpbigncmVzdWx0YXQnKSw2NTApOyB9CiAgfQoKCiAgcG9wdXBSZWxldmUobSl7CiAgICAvLyBsZXMgcXVhdHJlIHZhcmlhbnRlcyBjb2hhYml0ZW50IGRhbnMgbGUgbcOqbWUgZG9jdW1lbnQgOiB1bmUgc2V1bGUgZmVuw6p0cmUgw6AgbGEgZm9pcwogICAgaWYodGhpcy5zdGF0ZS5wb3B1cCE9PShtPydtJzonZCcpKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGVsPVJlYWN0LmNyZWF0ZUVsZW1lbnQ7CiAgICBjb25zdCBOQVZZPScjMEUxMzRGJywgUkVEPScjRjUyNTQ5JywgR1JFWT0nIzZDNzE3OScsIElOSz0nIzFjMjIzMCcsIExJTkU9JyNlNWU3ZWInOwogICAgY29uc3QgU0VSSUY9IidOZXdzcmVhZGVyJywgR2VvcmdpYSwgc2VyaWYiOwogICAgY29uc3QgZmVybWVyPSgpPT50aGlzLnNldFN0YXRlKHtwb3B1cDpmYWxzZSxwb3B1cE1haWxPazpmYWxzZX0pOwogICAgY29uc3QgRVRBUEVTPVsKICAgICAgWydBbGxleiBzdXIgJywnaW5mby1yZXRyYWl0ZS5mcicsJywgb3UgJywnaW5mby1yZXRyYWl0ZS5mcicsJyBzaSB2b3VzIGF2ZXogdG91am91cnMgw6l0w6kgc2FsYXJpw6knXSwKICAgICAgWydDb25uZWN0ZXotdm91cyDDoCB2b3RyZSBlc3BhY2UgcGVyc29ubmVsLCAnLCdGcmFuY2VDb25uZWN0JywnIGZvbmN0aW9ubmUsIGF2ZWMgdm9zIGlkZW50aWZpYW50cyBkZXMgaW1ww7R0cyBvdSBkZSBsXHUyMDE5QXNzdXJhbmNlIG1hbGFkaWUnXSwKICAgICAgWydPdXZyZXogJywnwqtcdTAwYTBNb24gcmVsZXbDqSBkZSBjYXJyacOocmVcdTAwYTDCuycsJycsJycsJyddLAogICAgICBbJ1TDqWzDqWNoYXJnZXogbGUgUERGLCAnLCdzYW5zIGxlIG1vZGlmaWVyIG5pIGxlIHJlbm9tbWVyJywnJywnJywnJ10KICAgIF07CiAgICByZXR1cm4gZWwoJ2Rpdicse29uQ2xpY2s6ZmVybWVyLHN0eWxlOntwb3NpdGlvbjonZml4ZWQnLGluc2V0OjAsekluZGV4OjkwMCxiYWNrZ3JvdW5kOidyZ2JhKDE0LDE5LDc5LDAuNTUpJyxkaXNwbGF5OidmbGV4JyxhbGlnbkl0ZW1zOm0/J2ZsZXgtZW5kJzonZmxleC1zdGFydCcsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicscGFkZGluZzptPycwJzonMzJweCcsb3ZlcmZsb3dZOidhdXRvJ319LAogICAgICBlbCgnZGl2Jyx7b25DbGljazplPT5lLnN0b3BQcm9wYWdhdGlvbigpLHN0eWxlOntib3hTaXppbmc6J2JvcmRlci1ib3gnLG1hcmdpbjptPycwJzonYXV0bycsd2lkdGg6JzEwMCUnLG1heFdpZHRoOm0/J25vbmUnOic1NjBweCcsYmFja2dyb3VuZDonI2ZmZmZmZicsYm9yZGVyVG9wOiczcHggc29saWQgJytSRUQsYm94U2hhZG93OicwIDQwcHggOTBweCAtMzBweCByZ2JhKDE0LDE5LDc5LDAuNTUpJyxwYWRkaW5nOm0/JzIycHggMjBweCAyNHB4JzonMzBweCAzNHB4IDMycHgnLGRpc3BsYXk6J2ZsZXgnLGZsZXhEaXJlY3Rpb246J2NvbHVtbicsZ2FwOm0/JzE0cHgnOicxNnB4JyxtYXhIZWlnaHQ6bT8nOTJ2aCc6J25vbmUnLG92ZXJmbG93WTptPydhdXRvJzondmlzaWJsZSd9fSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2Rpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2ZsZXgtc3RhcnQnLGdhcDonMTZweCcsanVzdGlmeUNvbnRlbnQ6J3NwYWNlLWJldHdlZW4nfX0sCiAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e21pbldpZHRoOjB9fSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzI0cHgnOicyOXB4JyxsaW5lSGVpZ2h0OjEuMTIsZm9udFdlaWdodDo1MDAsbGV0dGVyU3BhY2luZzonLTAuMDJlbScsY29sb3I6TkFWWSx0ZXh0V3JhcDonYmFsYW5jZSd9fSwnT8O5IHRyb3V2ZXIgdm90cmUgcmVsZXbDqSBkZSBjYXJyacOocmUnKSwKICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOnttYXJnaW5Ub3A6JzZweCcsZm9udFNpemU6bT8nMTMuNXB4JzonMTRweCcsbGluZUhlaWdodDoxLjUsY29sb3I6R1JFWX19LCdFbnZpcm9uIDUgbWludXRlcywgZ3JhdHVpdGVtZW50LCBzdXIgbGUgc2l0ZSBvZmZpY2llbC4nKSksCiAgICAgICAgICBlbCgnYnV0dG9uJyx7b25DbGljazpmZXJtZXIsJ2FyaWEtbGFiZWwnOidGZXJtZXInLG9uTW91c2VFbnRlcjplPT57ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9JyNlZWYyZmInO2UuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1OQVZZO30sb25Nb3VzZUxlYXZlOmU9PntlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0nI2ZmZmZmZic7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPUxJTkU7fSxzdHlsZTp7YXBwZWFyYW5jZTonbm9uZScsYm9yZGVyOicxcHggc29saWQgJytMSU5FLGJhY2tncm91bmQ6JyNmZmZmZmYnLGN1cnNvcjoncG9pbnRlcicsZmxleFNocmluazowLHdpZHRoOiczNHB4JyxoZWlnaHQ6JzM0cHgnLGRpc3BsYXk6J2ZsZXgnLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcicsY29sb3I6TkFWWSxmb250U2l6ZTonMTdweCcsbGluZUhlaWdodDoxLGZvbnRGYW1pbHk6J2luaGVyaXQnLHRyYW5zaXRpb246J2JhY2tncm91bmQgLjE4cyBlYXNlLCBib3JkZXItY29sb3IgLjE4cyBlYXNlJ319LCdcdTAwZDcnKSksCiAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntib3JkZXJUb3A6JzJweCBzb2xpZCAnK05BVlksZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJ319LAogICAgICAgICAgRVRBUEVTLm1hcCgoeCxpKT0+ZWwoJ2Rpdicse2tleTppLHN0eWxlOntkaXNwbGF5OidmbGV4JyxnYXA6bT8nMTJweCc6JzE0cHgnLGFsaWduSXRlbXM6J2Jhc2VsaW5lJyxwYWRkaW5nOm0/JzExcHggMCc6JzEycHggMCcsYm9yZGVyQm90dG9tOicxcHggc29saWQgJytMSU5FfX0sCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZsZXhTaHJpbms6MCxmb250RmFtaWx5OlNFUklGLGZvbnRTaXplOm0/JzE5cHgnOicyMXB4Jyxmb250V2VpZ2h0OjUwMCxsaW5lSGVpZ2h0OjEsY29sb3I6JyNjNDE3M2EnLGZvbnRWYXJpYW50TnVtZXJpYzondGFidWxhci1udW1zJyxtaW5XaWR0aDonMTZweCd9fSxTdHJpbmcoaSsxKSksCiAgICAgICAgICAgIGVsKCdzcGFuJyx7c3R5bGU6e2ZvbnRTaXplOm0/JzE0LjVweCc6JzE1cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpJTkt9fSwKICAgICAgICAgICAgICB4WzBdLGVsKCdzdHJvbmcnLHtzdHlsZTp7Zm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LHhbMV0pLHhbMl0seFszXT9lbCgnc3Ryb25nJyx7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwLGNvbG9yOk5BVll9fSx4WzNdKTpudWxsLHhbNF0pKSkpLAogICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTQuNXB4JzonMTVweCcsbGluZUhlaWdodDoxLjU1LGNvbG9yOk5BVlksZm9udFdlaWdodDo2MDB9fSwnUmV2ZW5leiBlbnN1aXRlIGljaSBldCBkw6lwb3Nlei1sZS4nKSwKICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2JvcmRlclRvcDonMXB4IHNvbGlkICcrTElORSxwYWRkaW5nVG9wOm0/JzE0cHgnOicxNnB4JyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LAogICAgICAgICAgdGhpcy5zdGF0ZS5wb3B1cE1haWxPawogICAgICAgICAgICA/IGVsKCdkaXYnLHtzdHlsZTp7ZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxnYXA6JzVweCd9fSwKICAgICAgICAgICAgICAgIGVsKCdkaXYnLHtzdHlsZTp7Zm9udFNpemU6bT8nMTVweCc6JzE1LjVweCcsZm9udFdlaWdodDo2MDAsY29sb3I6TkFWWX19LCdDXHUyMDE5ZXN0IGVudm95w6kuJyksCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEzLjVweCc6JzE0cHgnLGxpbmVIZWlnaHQ6MS41NSxjb2xvcjpHUkVZfX0sJ1ZvdXMgcmVjZXZleiBsYSBtYXJjaGUgw6Agc3VpdnJlIGRhbnMgdW4gaW5zdGFudC4gUmllbiBkXHUyMDE5YXV0cmUgbmUgdm91cyBzZXJhIGVudm95w6kuJykpCiAgICAgICAgICAgIDogZWwoJ2Rpdicse3N0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGdhcDptPyc5cHgnOicxMHB4J319LAogICAgICAgICAgICAgICAgZWwoJ2Rpdicse3N0eWxlOntmb250U2l6ZTptPycxNXB4JzonMTUuNXB4Jyxmb250V2VpZ2h0OjYwMCxjb2xvcjpOQVZZfX0sJ1ZvdXMgcHLDqWbDqXJleiBsZSBmYWlyZSBwbHVzIHRhcmRcdTAwYTA/JyksCiAgICAgICAgICAgICAgICBlbCgnZm9ybScse29uU3VibWl0OmU9PntlLnByZXZlbnREZWZhdWx0KCk7dmFyIGlucD1lLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iZW1haWwiXScpO3RoaXMuZW52b3llck1hcmNoZShpbnA/aW5wLnZhbHVlOicnKTt9LHN0eWxlOntkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOm0/J2NvbHVtbic6J3JvdycsZ2FwOicxMHB4J319LAogICAgICAgICAgICAgICAgICBlbCgnaW5wdXQnLHt0eXBlOidlbWFpbCcscmVxdWlyZWQ6dHJ1ZSxwbGFjZWhvbGRlcjonVm90cmUgYWRyZXNzZSBlLW1haWwnLCdhcmlhLWxhYmVsJzonVm90cmUgYWRyZXNzZSBlLW1haWwnLHN0eWxlOntmbGV4Om0/JzAgMCBhdXRvJzonMSAxIDAnLGZsZXhTaHJpbms6MCx3aWR0aDptPycxMDAlJzonYXV0bycsbWluV2lkdGg6MCxoZWlnaHQ6bT8nNTJweCc6JzU0cHgnLG1pbkhlaWdodDptPyc1MnB4JzonNTRweCcscGFkZGluZzonMCAxNHB4Jyxib3JkZXI6JzFweCBzb2xpZCAjYzljZmRhJyxiYWNrZ3JvdW5kOicjZmZmZmZmJyxmb250RmFtaWx5Oidpbmhlcml0Jyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxjb2xvcjpJTkssb3V0bGluZTonbm9uZScsYm94U2l6aW5nOidib3JkZXItYm94J319KSwKICAgICAgICAgICAgICAgICAgZWwoJ2J1dHRvbicse3R5cGU6J2J1dHRvbicsb25DbGljazplPT57ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWUuY3VycmVudFRhcmdldC5jbG9zZXN0KCdmb3JtJyk7dmFyIGlucD1mJiZmLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImVtYWlsIl0nKTt0aGlzLmVudm95ZXJNYXJjaGUoaW5wP2lucC52YWx1ZTonJyk7fSxvbk1vdXNlRW50ZXI6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J2JyaWdodG5lc3MoLjkzKSc7ZS5jdXJyZW50VGFyZ2V0LnN0eWxlLnRyYW5zZm9ybT0ndHJhbnNsYXRlWSgtMXB4KSc7fSxvbk1vdXNlTGVhdmU6ZT0+e2UuY3VycmVudFRhcmdldC5zdHlsZS5maWx0ZXI9J25vbmUnO2UuY3VycmVudFRhcmdldC5zdHlsZS50cmFuc2Zvcm09J25vbmUnO30sc3R5bGU6e2FwcGVhcmFuY2U6J25vbmUnLGJvcmRlcjonbm9uZScsY3Vyc29yOidwb2ludGVyJyxmb250RmFtaWx5Oidpbmhlcml0JyxmbGV4U2hyaW5rOjAsaGVpZ2h0Om0/JzUycHgnOic1NHB4JyxwYWRkaW5nOicwIDIwcHgnLGJhY2tncm91bmQ6UkVELGNvbG9yOicjZmZmZmZmJyxmb250U2l6ZTptPycxNS41cHgnOicxNnB4Jyxmb250V2VpZ2h0OjcwMCxsZXR0ZXJTcGFjaW5nOictMC4wMWVtJyxib3hTaGFkb3c6JzAgMTJweCAyNnB4IC0xNHB4IHJnYmEoMjQ1LDM3LDczLDAuNiknLHRyYW5zaXRpb246J2ZpbHRlciAuMThzIGVhc2UsIHRyYW5zZm9ybSAuMThzIGVhc2UnfX0sJ0Vudm95ZXotbW9pIGxhIG1hcmNoZSDDoCBzdWl2cmUnKSksCiAgICAgICAgICAgICAgICBlbCgnZGl2Jyx7c3R5bGU6e2ZvbnRTaXplOm0/JzEyLjVweCc6JzEzcHgnLGxpbmVIZWlnaHQ6MS41LGNvbG9yOkdSRVl9fSwnVW4gc2V1bCBtZXNzYWdlLCBhdmVjIGxlcyDDqXRhcGVzLiBSaWVuIGRcdTIwMTlhdXRyZS4nKSkpKSk7CiAgfQoKICAvLyBBbm7DqWVzIGR1IHJlbGV2w6ksIMOgIGFsaW1lbnRlciBwYXIgbGEgcsOpcG9uc2UgZHUgbW90ZXVyLgogIGFubmVlc0x1ZXMoKXsKICAgIHJldHVybiB0aGlzLnN0YXRlLmFubmVlcyB8fCBbWzE5ODIsJzIgdHJpbWVzdHJlcyddLFsxOTgzLCc0IHRyaW1lc3RyZXMnXSxbMTk4NCwnNCB0cmltZXN0cmVzJ10sWzE5ODUsJzEgdHJpbWVzdHJlJ10sWzE5ODYsJzQgdHJpbWVzdHJlcyddLFsxOTg3LCc0IHRyaW1lc3RyZXMnXSxbMTk4OCwnNCB0cmltZXN0cmVzJ10sWzE5ODksJzMgdHJpbWVzdHJlcyddLFsxOTkwLCc0IHRyaW1lc3RyZXMnXSxbMTk5MSwnNCB0cmltZXN0cmVzJ10sWzE5OTIsJzQgdHJpbWVzdHJlcyddLFsxOTkzLCcyIHRyaW1lc3RyZXMnXSxbMTk5NCwnNCB0cmltZXN0cmVzJ10sWzE5OTUsJzQgdHJpbWVzdHJlcyddLFsxOTk3LCc0IHRyaW1lc3RyZXMnXSxbMTk5OCwnNCB0cmltZXN0cmVzJ10sWzE5OTksJzQgdHJpbWVzdHJlcyddLFsyMDAwLCc0IHRyaW1lc3RyZXMnXSxbMjAwMSwnNCB0cmltZXN0cmVzJ10sWzIwMDIsJzQgdHJpbWVzdHJlcyddLFsyMDAzLCc0IHRyaW1lc3RyZXMnXSxbMjAwNCwnNCB0cmltZXN0cmVzJ10sWzIwMDYsJzQgdHJpbWVzdHJlcyddLFsyMDA3LCc0IHRyaW1lc3RyZXMnXSxbMjAwOCwnNCB0cmltZXN0cmVzJ10sWzIwMDksJzQgdHJpbWVzdHJlcyddLFsyMDEwLCc0IHRyaW1lc3RyZXMnXSxbMjAxMSwnMyB0cmltZXN0cmVzJ10sWzIwMTIsJzQgdHJpbWVzdHJlcyddLFsyMDEzLCc0IHRyaW1lc3RyZXMnXSxbMjAxNCwnNCB0cmltZXN0cmVzJ10sWzIwMTUsJzQgdHJpbWVzdHJlcyddLFsyMDE2LCc0IHRyaW1lc3RyZXMnXSxbMjAxNywnNCB0cmltZXN0cmVzJ10sWzIwMTgsJzQgdHJpbWVzdHJlcyddLFsyMDE5LCc0IHRyaW1lc3RyZXMnXSxbMjAyMCwnNCB0cmltZXN0cmVzJ10sWzIwMjEsJzQgdHJpbWVzdHJlcyddLFsyMDIyLCc0IHRyaW1lc3RyZXMnXSxbMjAyMywnNCB0cmltZXN0cmVzJ10sWzIwMjQsJzQgdHJpbWVzdHJlcyddLFsyMDI1LCc0IHRyaW1lc3RyZXMnXV07CiAgfQoKICBjYXB0dXJlTWFpbCgpewogICAgdGhpcy5zZXRTdGF0ZSh7bWFpbE9rOnRydWV9KTsKICAgIC8vIMOJdsOpbmVtZW50IGRlIG1lc3VyZSwgYXUgbW9tZW50IG/DuSBsJ2FkcmVzc2UgZXN0IHZhbGlkw6llLgogICAgdHJ5ewogICAgICBpZih0eXBlb2Ygd2luZG93IT09J3VuZGVmaW5lZCcpewogICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuZGF0YUxheWVyIT09J3VuZGVmaW5lZCcpIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7ZXZlbnQ6J3ByZWFuYWx5c2VfZW1haWwnfSk7CiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5jbGFyaXR5PT09J2Z1bmN0aW9uJykgd2luZG93LmNsYXJpdHkoJ2V2ZW50JywncHJlYW5hbHlzZV9lbWFpbCcpOwogICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuZ3RhZz09PSdmdW5jdGlvbicpIHdpbmRvdy5ndGFnKCdldmVudCcsJ3ByZWFuYWx5c2VfZW1haWwnKTsKICAgICAgfQogICAgfWNhdGNoKGUpe30KICB9CgogIG91dnJpclF1ZXN0aW9ucygpewogICAgdGhpcy5zZXRTdGF0ZSh7ZGlhZzoncXVlc3Rpb25zJyxxSW5kZXg6MCxyZXBvbnNlczp7fX0pOwogIH0KCiAgc2Nyb2xsVG9EaWFnKGV2KXsKICAgIC8vIGxhIG1hcXVldHRlIHJlbmQgbGVzIHF1YXRyZSB2YXJpYW50ZXMgZGFucyBsZSBtw6ptZSBkb2N1bWVudCA6CiAgICAvLyBvbiBwYXJ0IGR1IGJvdXRvbiBjbGlxdcOpIHBvdXIgcmVzdGVyIGRhbnMgbGEgYm9ubmUgY29sb25uZS4KICAgIGNvbnN0IHNyYz1ldiYmZXYuY3VycmVudFRhcmdldDsKICAgIGlmKHNyYyl7CiAgICAgIGxldCBzPXNyYy5wYXJlbnRFbGVtZW50OwogICAgICB3aGlsZShzJiZnZXRDb21wdXRlZFN0eWxlKHMpLm92ZXJmbG93WSE9PSdhdXRvJykgcz1zLnBhcmVudEVsZW1lbnQ7CiAgICAgIHRoaXMuX3NjPXN8fG51bGw7IHRoaXMuX3NyYz1zcmM7CiAgICB9CiAgICBzZXRUaW1lb3V0KCgpPT57CiAgICAgIGNvbnN0IHJhY2luZT10aGlzLl9zY3x8ZG9jdW1lbnQ7CiAgICAgIGNvbnN0IHRndD1yYWNpbmUucXVlcnlTZWxlY3RvcignW2RhdGEtZGlhZ10nKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZGlhZ10nKTsKICAgICAgaWYoIXRndCkgcmV0dXJuOwogICAgICBsZXQgc2M9dGhpcy5fc2M7CiAgICAgIGlmKCFzYyl7IHNjPXRndC5wYXJlbnRFbGVtZW50OyB3aGlsZShzYyYmZ2V0Q29tcHV0ZWRTdHlsZShzYykub3ZlcmZsb3dZIT09J2F1dG8nKSBzYz1zYy5wYXJlbnRFbGVtZW50OyB9CiAgICAgIGlmKHNjKXsKICAgICAgICBzYy5xdWVyeVNlbGVjdG9yQWxsKCdzZWN0aW9uJykuZm9yRWFjaChzPT57cy5zdHlsZS5vcGFjaXR5PScxJztzLnN0eWxlLmFuaW1hdGlvbj0nbm9uZSc7cy5kYXRhc2V0LnJ2PScxJzt9KTsKICAgICAgICBjb25zdCB0b3A9dGd0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1zYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Arc2Muc2Nyb2xsVG9wOwogICAgICAgIHNjLnNjcm9sbFRvKHt0b3A6dG9wLTE0LGJlaGF2aW9yOidzbW9vdGgnfSk7CiAgICAgIH1lbHNlewogICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wOnRndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ard2luZG93LnNjcm9sbFktMTQsYmVoYXZpb3I6J3Ntb290aCd9KTsKICAgICAgfQogICAgfSw2MCk7CiAgfQoKICAvLyA9PT09PSBQTE9NQkVSSUUgQ8OCQkzDiUUgQVUgQ09OVFJBVCAoZ2FnbmUgc3VyIGxlcyBkb3VibG9ucyBtb2NrIGNpLWRlc3N1cykgPT09PT0KICBsaXJlUmVsZXZlKGZpbGUpewogICAgaWYoIWZpbGUpIHJldHVybjsKICAgIGlmKGZpbGUuc2l6ZT09PTApeyB0aGlzLl9lY2hlYygndmlkZScpOyByZXR1cm47IH0KICAgIHZhciBzZWxmPXRoaXM7CiAgICBjbGVhckludGVydmFsKHRoaXMuX2RlZmlsZSk7IGlmKHRoaXMuX2dhcmRlKSBjbGVhclRpbWVvdXQodGhpcy5fZ2FyZGUpOwogICAgaWYodGhpcy5faG9sZFRpbWVvdXQpe2NsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dGhpcy5faG9sZFRpbWVvdXQ9bnVsbDt9CiAgICB0aGlzLl9tYWlsVG91Y2hlZD1mYWxzZTsgdGhpcy5fZGVmaWxlRmluaT1mYWxzZTsgdGhpcy5faG9sZFJlc3VsdD1mYWxzZTsKICAgIHRoaXMuYXBlcmN1PW51bGw7IHRoaXMuamV0b25Db3VyYW50PScnOwogICAgdGhpcy5zZXRTdGF0ZSh7ZGlhZzonbGVjdHVyZScsIHBoYXNlOidhbmFseXNlJywgbm9tOmZpbGUubmFtZSwgYW5uZWVzOm51bGwsIGFubmVlOjAsIG1haWxPazpmYWxzZSwgbWFpbEVycjpudWxsLCBlY2hlY01zZzpudWxsfSk7CiAgICB0aGlzLnNjcm9sbFRvRGlhZygpOwogICAgbXRyYWNrKCdwcmVhbmFseXNlX3N0YXJ0Jyx7fSk7CiAgICB2YXIgdDA9RGF0ZS5ub3coKTsKICAgIHRoaXMuX2dhcmRlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2VsZi5fZWNoZWMoJ3Bhbm5lJyk7IH0sIDE1MDAwKTsKICAgIHZhciBmZD1uZXcgRm9ybURhdGEoKTsKICAgIGZkLmFwcGVuZCgncmVsZXZlJywgZmlsZSk7CiAgICB2YXIgaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7CiAgICBmZC5hcHBlbmQoJ2FkcmVzc2VfY29uZmlybWF0aW9uJywgaHA/aHAudmFsdWU6JycpOwogICAgbXRyYWNrKCdwcmVhbmFseXNlX3VwbG9hZCcse30pOwogICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdScsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiB7c3RhdHVzOnIuc3RhdHVzLGRhdGE6ZH07fSwgZnVuY3Rpb24oKXtyZXR1cm4ge3N0YXR1czpyLnN0YXR1cyxkYXRhOnt9fTt9KTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzKXsKICAgICAgICBpZihzZWxmLl9nYXJkZSkgY2xlYXJUaW1lb3V0KHNlbGYuX2dhcmRlKTsKICAgICAgICB2YXIgcmVzdGU9TWF0aC5tYXgoMCwgMTMwMC0oRGF0ZS5ub3coKS10MCkpOyAvLyBsYWlzc2VyIHZvaXIgbCdlY3JhbiBkJ2FuYWx5c2UgdW4gY291cnQgaW5zdGFudAogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2VsZi5yZWNldm9pckFwZXJjdTIocmVzKTsgfSwgcmVzdGUpOwogICAgICB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgaWYoc2VsZi5fZ2FyZGUpIGNsZWFyVGltZW91dChzZWxmLl9nYXJkZSk7IHNlbGYuX2VjaGVjKCdwYW5uZScpOyB9KTsKICB9CiAgcmVjZXZvaXJBcGVyY3UyKHJlcyl7CiAgICB2YXIgc2VsZj10aGlzLCBzdD1yZXMuc3RhdHVzLCBkPXJlcy5kYXRhfHx7fTsKICAgIGlmKHN0PT09NDAwKSByZXR1cm4gdGhpcy5fZWNoZWMoJ3NhbnNfZmljaGllcicpOwogICAgaWYoc3Q9PT00MTMpIHJldHVybiB0aGlzLl9lY2hlYygndHJvcF9ncm9zJyk7CiAgICBpZihzdD09PTQyOSkgcmV0dXJuIHRoaXMuX2VjaGVjKCd0cm9wX2RlX2RlbWFuZGVzJyk7CiAgICBpZihzdD09PTUwMykgcmV0dXJuIHRoaXMuX2VjaGVjKCd0cm9wX2RlX21vbmRlJyk7CiAgICBpZihzdD49NTAwKSByZXR1cm4gdGhpcy5fZWNoZWMoJ3Bhbm5lJyk7CiAgICBpZihkICYmIGQuZXRhdD09PSdwYXNfdW5fcmVsZXZlJyl7IHRoaXMuamV0b25Db3VyYW50PWQuamV0b258fCcnOyB0aGlzLmFwZXJjdT1kOwogICAgICAgICAgLy8gVW4gUERGIHNhbnMgdGV4dGUgZXN0IGxlIGJvbiBkb2N1bWVudCBtYWwgbnVtw6lyaXPDqSA6IGlsIHBhcnQgc3VyIGwnw6ljcmFuIGRlIHJlcHJpc2UuCiAgICAgICAgICB2YXIgX3NhbnNUZXh0ZT0hIShkLnNjYW58fGQuc2Fuc190ZXh0ZSk7CiAgICAgICAgICBtdHJhY2soJ3ByZWFuYWx5c2VfZWNoZWMnLHttb3RpZjpfc2Fuc1RleHRlPydsZWN0dXJlX25vbl9maWFibGUnOidtYXV2YWlzX2ZpY2hpZXInLCBzZXJ2ZXVyOlN0cmluZyhkLm1vdGlmfHxkLmV0YXR8fCcnKX0pOwogICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7amV0b246ZC5qZXRvbnx8JycsIGRpYWc6X3NhbnNUZXh0ZT8naWxsaXNpYmxlJzoncGFzX3JlbGV2ZSd9KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgcmV0dXJuOyB9CiAgICBpZihkICYmIChkLmV0YXQ9PT0naWxsaXNpYmxlJyB8fCBkLmlsbGlzaWJsZSkpeyB0aGlzLmpldG9uQ291cmFudD1kLmpldG9ufHwnJzsgdGhpcy5hcGVyY3U9ZDsgbXRyYWNrKCdwcmVhbmFseXNlX2VjaGVjJyx7bW90aWY6J2xlY3R1cmVfbm9uX2ZpYWJsZScsIHNlcnZldXI6U3RyaW5nKGQubW90aWZ8fGQuZXRhdHx8JycpfSk7IHRoaXMuc2V0U3RhdGUoe2pldG9uOmQuamV0b258fCcnLCBkaWFnOidpbGxpc2libGUnfSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IHJldHVybjsgfQogICAgaWYoIWQgfHwgIWQuYW5uZWVzKXsgcmV0dXJuIHRoaXMuX2VjaGVjKCdwYW5uZScpOyB9CiAgICB0aGlzLmFwZXJjdT1kOyB0aGlzLmpldG9uQ291cmFudD1kLmpldG9ufHwnJzsKICAgIHZhciBhcnI9dGhpcy5mb3JtYXRBbm5lZXMoZC5hbm5lZXMpfHxbXTsKICAgIHRoaXMuc2V0U3RhdGUoe2FwZXJjdTpkLCBqZXRvbjpkLmpldG9ufHwnJywgYW5uZWVzOmFyciwgcGhhc2U6J2RlZmlsZScsIGFubmVlOjB9KTsKICAgIG10cmFjaygncHJlYW5hbHlzZV9yZXN1bHQnLHtzdWpldHM6KGQuc3VqZXRzJiZkLnN1amV0cy50b3RhbCl8fDAsIHRyaW1lc3RyZXM6KGQuY2hpZmZyZXMmJmQuY2hpZmZyZXMudHJpbWVzdHJlc19yZWN1cGVyYWJsZXMpfHwwfSk7CiAgICB2YXIgdG90YWw9YXJyLmxlbmd0aDsKICAgIGlmKHRvdGFsPD00KXsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzoncmVzdWx0YXQnfSk7IHRoaXMuc2Nyb2xsVG9EaWFnKCk7IHJldHVybjsgfQogICAgdmFyIHBhcz10b3RhbC0zLCB0MT1EYXRlLm5vdygpLCBEVVI9TWF0aC5taW4oMTAwMDAsIE1hdGgubWF4KDgwMDAsIHBhcyoyMDApKTsKICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsKICAgIHRoaXMuX2RlZmlsZT1zZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICB2YXIgYXY9TWF0aC5taW4ocGFzLTEsIE1hdGguZmxvb3IoKERhdGUubm93KCktdDEpL0RVUipwYXMpKTsKICAgICAgc2VsZi5zZXRTdGF0ZSh7YW5uZWU6YXZ9KTsKICAgICAgaWYoYXY+PXBhcy0xKXsgY2xlYXJJbnRlcnZhbChzZWxmLl9kZWZpbGUpOyBzZWxmLl9kZWZpbGVGaW5pPXRydWU7IHNlbGYuX3BldXRBZmZpY2hlclJlc3VsdGF0KCk7IH0KICAgIH0sIDkwKTsKICB9CiAgZm9ybWF0QW5uZWVzKGFycil7CiAgICBpZighYXJyIHx8ICFhcnIubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBhcnIubWFwKGZ1bmN0aW9uKGEpewogICAgICBpZihhLmFic2VudGUpIHJldHVybiBbYS5hbm5lZSwgJ2Fic2VudGUgZGUgdm90cmUgcmVsZXbDqSddOwogICAgICB2YXIgdD0oYS50cmltZXN0cmVzPT1udWxsKT8wOmEudHJpbWVzdHJlczsKICAgICAgcmV0dXJuIFthLmFubmVlLCB0KycgdHJpbWVzdHJlJysodD4xPydzJzonJyldOwogICAgfSk7CiAgfQogIF9lY2hlYyhtc2cpeyB0cnl7IG10cmFjaygncHJlYW5hbHlzZV9lY2hlYycse21vdGlmOihtc2c9PT0nc2Fuc19maWNoaWVyJ3x8bXNnPT09J3Ryb3BfZ3Jvcyd8fG1zZz09PSd2aWRlJyk/J21hdXZhaXNfZmljaGllcic6J2xlY3R1cmVfbm9uX2ZpYWJsZSd9KTsgfWNhdGNoKGUpe30gaWYodGhpcy5fZ2FyZGUpIGNsZWFyVGltZW91dCh0aGlzLl9nYXJkZSk7IGNsZWFySW50ZXJ2YWwodGhpcy5fZGVmaWxlKTsgdGhpcy5zZXRTdGF0ZSh7ZGlhZzonZWNoZWMnLCBlY2hlY01zZzptc2d9KTsgdGhpcy5zY3JvbGxUb0RpYWcoKTsgfQogIF9wZXV0QWZmaWNoZXJSZXN1bHRhdCgpewogICAgdmFyIHNlbGY9dGhpczsKICAgIGlmKCF0aGlzLl9kZWZpbGVGaW5pKSByZXR1cm47CiAgICAvLyBTaSBlbGxlIGEgY29tbWVuY8OpIMOgIHNhaXNpciBzb24gbWFpbCBzYW5zIGxlIHZhbGlkZXIgOiBvbiBSRVRJRU5UIGxlIHLDqXN1bHRhdCBsZSB0ZW1wcyBxdSdlbGxlIHZhbGlkZS4KICAgIGlmKHRoaXMuX21haWxUb3VjaGVkICYmICF0aGlzLnN0YXRlLm1haWxPayl7CiAgICAgIHRoaXMuX2hvbGRSZXN1bHQ9dHJ1ZTsKICAgICAgaWYoIXRoaXMuX2hvbGRUaW1lb3V0KXsgdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpeyBzZWxmLl9ob2xkUmVzdWx0PWZhbHNlOyBzZWxmLl9ob2xkVGltZW91dD1udWxsOyBzZWxmLnNldFN0YXRlKHtkaWFnOidyZXN1bHRhdCd9KTsgc2VsZi5zY3JvbGxUb0RpYWcoKTsgfSwgMjIwMDApOyB9IC8vIGZpbGV0IDogb24gbidlbmZlcm1lIGphbWFpcwogICAgICByZXR1cm47CiAgICB9CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNlbGYuc2V0U3RhdGUoe2RpYWc6J3Jlc3VsdGF0J30pOyBzZWxmLnNjcm9sbFRvRGlhZygpOyB9LCA0NTApOwogIH0KICBlbnZveWVyTWFyY2hlKGVtYWlsLG9yaWdpbmUpewogICAgdmFyIHNlbGY9dGhpczsKICAgIHZhciBjaGFtcD0ob3JpZ2luZT09PSdxdWVzdGlvbnMnKT8nbWFyY2hlT2snOidwb3B1cE1haWxPayc7CiAgICBlbWFpbD0oZW1haWx8fCcnKS50cmltKCk7CiAgICB2YXIgb2s9e307IG9rW2NoYW1wXT10cnVlOyBvay5wb3B1cE1haWxFcnI9bnVsbDsgdGhpcy5zZXRTdGF0ZShvayk7CiAgICBtdHJhY2soJ3ByZWFuYWx5c2VfZW1haWwnLHtvcmlnaW5lOm9yaWdpbmV8fCdwb3B1cCd9KTsKICAgIGlmKCFlbWFpbCB8fCBlbWFpbC5pbmRleE9mKCdAJyk8MSl7IHZhciBrbz17fTsga29bY2hhbXBdPWZhbHNlOyB0aGlzLnNldFN0YXRlKGtvKTsgcmV0dXJuOyB9CiAgICB2YXIgaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7CiAgICB2YXIgYm9keT0nY291cnJpZWw9JytlbmNvZGVVUklDb21wb25lbnQoZW1haWwpKycmYWRyZXNzZV9jb25maXJtYXRpb249JytlbmNvZGVVUklDb21wb25lbnQoaHA/aHAudmFsdWU6JycpKycmb3JpZ2luZT0nK2VuY29kZVVSSUNvbXBvbmVudChvcmlnaW5lfHwncG9wdXAnKSsnJnByb2ZpbD0nK2VuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlLnJlcG9uc2VzfHx7fSkpOwogICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdS9tYXJjaGUtYS1zdWl2cmUnLCB7bWV0aG9kOidQT1NUJywgaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LCBib2R5OmJvZHl9KQogICAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpLnRoZW4oZnVuY3Rpb24oZCl7cmV0dXJuIHtzOnIuc3RhdHVzLGQ6ZH07fSwgZnVuY3Rpb24oKXtyZXR1cm4ge3M6ci5zdGF0dXMsZDp7fX07fSk7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHgpeyBpZih4LnM9PT00MDAgJiYgeC5kICYmIHguZC5ldGF0PT09J2FkcmVzc2VfaW52YWxpZGUnKXsgc2VsZi5zZXRTdGF0ZSh7cG9wdXBNYWlsT2s6ZmFsc2V9KTsgfSB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXt9KTsKICB9CiAgc291bWV0dHJlUXVlc3Rpb25zKHJlcCl7CiAgICB2YXIgc2VsZj10aGlzOyByZXA9cmVwfHx7fTsKICAgIHZhciBocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYWRjZi1sZWN0dXJlIGlucHV0W25hbWU9ImFkcmVzc2VfY29uZmlybWF0aW9uIl0nKTsKICAgIHZhciBzZXhlPShyZXAuc2V4ZT09PSdVbmUgZmVtbWUnKT8nRic6KHJlcC5zZXhlPT09J1VuIGhvbW1lJz8nSCc6JycpOwogICAgdmFyIHBlcj1BcnJheS5pc0FycmF5KHJlcC5wZXJpb2Rlcyk/cmVwLnBlcmlvZGVzLmpvaW4oJywnKTonJzsKICAgIHZhciBlbmY9KHJlcC5lbmZhbnRzIT1udWxsJiZyZXAuZW5mYW50cyE9PScnKT9yZXAuZW5mYW50czowOwogICAgdmFyIGJvZHk9J2FubmVlX25haXNzYW5jZT0nK2VuY29kZVVSSUNvbXBvbmVudChyZXAuYW5uZWVfbmFpc3NhbmNlfHwnJykrJyZzZXhlPScrZW5jb2RlVVJJQ29tcG9uZW50KHNleGUpKycmYW5uZWVfZGVidXQ9JytlbmNvZGVVUklDb21wb25lbnQocmVwLmFubmVlX2RlYnV0fHwnJykrJyZlbmZhbnRzPScrZW5jb2RlVVJJQ29tcG9uZW50KGVuZikrJyZ0ZW1wc19wYXJ0aWVsPScrZW5jb2RlVVJJQ29tcG9uZW50KHJlcC50ZW1wc19wYXJ0aWVsPT09J091aSc/J291aSc6J25vbicpKycmcGVyaW9kZXM9JytlbmNvZGVVUklDb21wb25lbnQocGVyKSsnJmFkcmVzc2VfY29uZmlybWF0aW9uPScrZW5jb2RlVVJJQ29tcG9uZW50KGhwP2hwLnZhbHVlOicnKTsKICAgIHRoaXMuc2V0U3RhdGUoe3FFbnZvaTp0cnVlLHFFcnI6bnVsbCxxRGF0YTpudWxsfSk7CiAgICBmZXRjaCgnaHR0cHM6Ly9yZWxlY3R1cmUuYWRjZi5vcmcvYXBlcmN1L3F1ZXN0aW9ucycse21ldGhvZDonUE9TVCcsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LGJvZHk6Ym9keX0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4ge3M6ci5zdGF0dXMsZDpkfTt9LGZ1bmN0aW9uKCl7cmV0dXJuIHtzOnIuc3RhdHVzLGQ6e319O30pOyB9KQogICAgICAudGhlbihmdW5jdGlvbih4KXsgaWYoeC5zPj0yMDAmJnguczwzMDAmJnguZCl7IHNlbGYuamV0b25Db3VyYW50PXguZC5qZXRvbnx8Jyc7IHNlbGYuc2V0U3RhdGUoe2pldG9uOnguZC5qZXRvbnx8JycscURhdGE6eC5kLHFFbnZvaTpmYWxzZSxxRXJyOm51bGx9KTsgc2VsZi5zY3JvbGxUb0RpYWcoKTsgdHJ5eyBtdHJhY2soJ3F1ZXN0aW9uc19yZXN1bHRhdCcse21hcnF1ZWVzOnguZC5tYXJxdWVlc3x8MH0pOyB9Y2F0Y2goZSl7fSByZXR1cm47IH0gc2VsZi5zZXRTdGF0ZSh7cUVudm9pOmZhbHNlLHFFcnI6J2Vudm9pJ30pOyB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgc2VsZi5zZXRTdGF0ZSh7cUVudm9pOmZhbHNlLHFFcnI6J2Vudm9pJ30pOyB9KTsKICB9CgogIGRldmVycm91aWxsZXIoZW1haWwpewogICAgdmFyIHNlbGY9dGhpczsgZW1haWw9KGVtYWlsfHwnJykudHJpbSgpOwogICAgaWYoIWVtYWlsIHx8IGVtYWlsLmluZGV4T2YoJ0AnKTwxKXsgdGhpcy5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLG1haWxFcnI6J2FkcmVzc2VfaW52YWxpZGUnfSk7IHJldHVybjsgfQogICAgdGhpcy5zZXRTdGF0ZSh7bWFpbEVycjpudWxsfSk7CiAgICB2YXIgamV0b249dGhpcy5qZXRvbkNvdXJhbnR8fHRoaXMuc3RhdGUuamV0b258fCcnOwogICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdS9jb3VycmllbCcse21ldGhvZDonUE9TVCcsaGVhZGVyczp7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL2pzb24nfSxib2R5OkpTT04uc3RyaW5naWZ5KHtqZXRvbjpqZXRvbixjb3VycmllbDplbWFpbH0pfSkKICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKS50aGVuKGZ1bmN0aW9uKGQpe3JldHVybiB7czpyLnN0YXR1cyxkOmR9O30sZnVuY3Rpb24oKXtyZXR1cm4ge3M6ci5zdGF0dXMsZDp7fX07fSk7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHgpeyBpZih4LnM+PTIwMCYmeC5zPDMwMCYmeC5kJiZ4LmQuZXRhdD09PSdvaycpeyBpZih4LmQuYXBlcmN1KXsgc2VsZi5hcGVyY3U9eC5kLmFwZXJjdTsgfSBzZWxmLnNldFN0YXRlKHthcGVyY3U6c2VsZi5hcGVyY3UsbWFpbE9rOnRydWUsbWFpbEVycjpudWxsfSk7IHRyeXsgbXRyYWNrKCdwcmVhbmFseXNlX2VtYWlsJyx7fSk7IH1jYXRjaChlKXt9IHJldHVybjsgfSBzZWxmLnNldFN0YXRlKHttYWlsT2s6ZmFsc2UsbWFpbEVycjonZW52b2knfSk7IH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbigpeyBzZWxmLnNldFN0YXRlKHttYWlsT2s6ZmFsc2UsbWFpbEVycjonZW52b2knfSk7IH0pOwogIH0KCiAgcHJldmVuaXIoZW1haWwpewogICAgdmFyIHNlbGY9dGhpczsgZW1haWw9KGVtYWlsfHwnJykudHJpbSgpOwogICAgaWYoIWVtYWlsIHx8IGVtYWlsLmluZGV4T2YoJ0AnKTwxKXsgdGhpcy5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLG1haWxFcnI6J2FkcmVzc2VfaW52YWxpZGUnfSk7IHJldHVybjsgfQogICAgdGhpcy5zZXRTdGF0ZSh7bWFpbEVycjpudWxsfSk7CiAgICB2YXIgamV0b249dGhpcy5qZXRvbkNvdXJhbnR8fHRoaXMuc3RhdGUuamV0b258fCcnOwogICAgdmFyIGhwPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhZGNmLWxlY3R1cmUgaW5wdXRbbmFtZT0iYWRyZXNzZV9jb25maXJtYXRpb24iXScpOwogICAgdmFyIGJvZHk9J2pldG9uPScrZW5jb2RlVVJJQ29tcG9uZW50KGpldG9uKSsnJmNvdXJyaWVsPScrZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSsnJmFkcmVzc2VfY29uZmlybWF0aW9uPScrZW5jb2RlVVJJQ29tcG9uZW50KGhwP2hwLnZhbHVlOicnKTsKICAgIGZldGNoKCdodHRwczovL3JlbGVjdHVyZS5hZGNmLm9yZy9hcGVyY3UvcHJldmVuaXInLHttZXRob2Q6J1BPU1QnLGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSxib2R5OmJvZHl9KQogICAgICAudGhlbihmdW5jdGlvbihyKXsgaWYoci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwKXsgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOnRydWUsbWFpbEVycjpudWxsfSk7IHRyeXsgbXRyYWNrKCdwcmVhbmFseXNlX2VtYWlsJyx7fSk7IH1jYXRjaChlKXt9IH0gZWxzZSB7IHNlbGYuc2V0U3RhdGUoe21haWxPazpmYWxzZSxtYWlsRXJyOidlbnZvaSd9KTsgfSB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLG1haWxFcnI6J2Vudm9pJ30pOyB9KTsKICB9CgogIGNhcHR1cmVNYWlsKGVtYWlsKXsKICAgIHZhciBzZWxmPXRoaXM7CiAgICBlbWFpbD0oZW1haWx8fCcnKS50cmltKCk7CiAgICBpZighZW1haWwgfHwgZW1haWwuaW5kZXhPZignQCcpPDEpeyB0aGlzLnNldFN0YXRlKHttYWlsT2s6ZmFsc2UsIG1haWxFcnI6J2FkcmVzc2VfaW52YWxpZGUnfSk7IHJldHVybjsgfQogICAgdGhpcy5zZXRTdGF0ZSh7bWFpbEVycjpudWxsfSk7CiAgICBpZih0aGlzLl9ob2xkUmVzdWx0KXsgdGhpcy5faG9sZFJlc3VsdD1mYWxzZTsgaWYodGhpcy5faG9sZFRpbWVvdXQpe2NsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dGhpcy5faG9sZFRpbWVvdXQ9bnVsbDt9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2VsZi5zZXRTdGF0ZSh7ZGlhZzoncmVzdWx0YXQnfSk7IHNlbGYuc2Nyb2xsVG9EaWFnKCk7IH0sIDU1MCk7IH0KICAgIHZhciBqZXRvbj10aGlzLmpldG9uQ291cmFudHx8dGhpcy5zdGF0ZS5qZXRvbnx8Jyc7CiAgICB2YXIgaHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FkY2YtbGVjdHVyZSBpbnB1dFtuYW1lPSJhZHJlc3NlX2NvbmZpcm1hdGlvbiJdJyk7CiAgICB2YXIgYm9keT0namV0b249JytlbmNvZGVVUklDb21wb25lbnQoamV0b24pKycmY291cnJpZWw9JytlbmNvZGVVUklDb21wb25lbnQoZW1haWwpKycmYWRyZXNzZV9jb25maXJtYXRpb249JytlbmNvZGVVUklDb21wb25lbnQoaHA/aHAudmFsdWU6JycpOwogICAgZmV0Y2goJ2h0dHBzOi8vcmVsZWN0dXJlLmFkY2Yub3JnL2FwZXJjdS9jb3VycmllbCcsIHttZXRob2Q6J1BPU1QnLCBoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sIGJvZHk6Ym9keX0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4ge3M6ci5zdGF0dXMsZDpkfTt9LCBmdW5jdGlvbigpe3JldHVybiB7czpyLnN0YXR1cyxkOnt9fTt9KTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24oeCl7CiAgICAgICAgaWYoeC5zPT09NDAwICYmIHguZCAmJiB4LmQuZXRhdD09PSdhZHJlc3NlX2ludmFsaWRlJyl7IHNlbGYuc2V0U3RhdGUoe21haWxPazpmYWxzZSwgbWFpbEVycjonYWRyZXNzZV9pbnZhbGlkZSd9KTsgcmV0dXJuOyB9CiAgICAgICAgaWYoeC5zPj0yMDAgJiYgeC5zPDMwMCl7IHNlbGYuc2V0U3RhdGUoe21haWxPazp0cnVlLCBtYWlsRXJyOm51bGx9KTsgdHJ5eyBpZih0eXBlb2Ygd2luZG93Lmd0YWc9PT0nZnVuY3Rpb24nKSB3aW5kb3cuZ3RhZygnZXZlbnQnLCdwcmVhbmFseXNlX2VtYWlsJyk7IGVsc2UgaWYod2luZG93LmRhdGFMYXllcikgd2luZG93LmRhdGFMYXllci5wdXNoKHtldmVudDoncHJlYW5hbHlzZV9lbWFpbCd9KTsgfWNhdGNoKGUpe30gcmV0dXJuOyB9CiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7bWFpbE9rOmZhbHNlLCBtYWlsRXJyOidlbnZvaSd9KTsKICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IHNlbGYuc2V0U3RhdGUoe21haWxPazpmYWxzZSwgbWFpbEVycjonZW52b2knfSk7IH0pOwogIH0KCn0KCnZhciBhZGNmID0gbmV3IExlY3R1cmUoKTsKdHJ5eyB3aW5kb3cuX19hZGNmTGVjdHVyZSA9IGFkY2Y7IH1jYXRjaChlKXt9CmFkY2YucHJvcHMgPSB7fTsKYWRjZi5tb2JpbGUgPSBmYWxzZTsKCmZ1bmN0aW9uIGVuc3VyZSgpeyB2YXIgaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRjZi1sZWN0dXJlJyl8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGNmLWxlY3R1cmUtaGVybycpOyBpZihoICYmIGghPT1hZGNmLl9ob3N0KXsgdHJ5eyBhZGNmLm1vdW50KCk7IH1jYXRjaChlKXt9IH0gfQppZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZW5zdXJlKTsKZWxzZSBlbnN1cmUoKTsKdHJ5eyBpZih0eXBlb2YgTXV0YXRpb25PYnNlcnZlciE9PSd1bmRlZmluZWQnKSBuZXcgTXV0YXRpb25PYnNlcnZlcihlbnN1cmUpLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHtjaGlsZExpc3Q6dHJ1ZSxzdWJ0cmVlOnRydWV9KTsgfWNhdGNoKGUpe30KCnZhciBfdDsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGZ1bmN0aW9uKCl7CiAgY2xlYXJUaW1lb3V0KF90KTsKICBfdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgaWYgKGFkY2YubW9iaWxlICE9PSAod2luZG93LmlubmVyV2lkdGggPCBCUkVBSykpIGFkY2YubW91bnQoKTsgfSwgMTYwKTsKfSk7Cgp9KSgpOwo=