IyEvdXNyL2Jpbi9wZXJsIC13CgojIHZpbXBhcnNlLnBsIC0gUmVmb3JtYXRzIHRoZSBlcnJvciBtZXNzYWdlcyBvZiB0aGUgUGVybCBpbnRlcnByZXRlciBmb3IgdXNlCiMgd2l0aCB0aGUgcXVpY2tmaXggbW9kZSBvZiBWaW0KIwojIENvcHlyaWdodCAoqSkgMjAwMSBieSBK9nJnIFppZWZsZSA8am9lcmcuemllZmxlQGdteC5kZT4KIyBZb3UgbWF5IHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgojCiMgVXNhZ2U6IHB1dCBvbmUgb2YgdGhlIHR3byBjb25maWd1cmF0aW9ucyBiZWxvdyBpbiB5b3VyIH4vLnZpbXJjICh3aXRob3V0IHRoZQojIGRlc2NyaXB0aW9uIGFuZCAnIyAnKSBhbmQgZW5qb3kgKGJlIHN1cmUgdG8gYWRqdXN0IHRoZSBwYXRocyB0byB2aW1wYXJzZS5wbAojIGJlZm9yZSk6CiMKIyBQcm9ncmFtIGlzIHJ1biBpbnRlcmFjdGl2ZWx5IHdpdGggJ3BlcmwgLXcnOgojCiMgc2V0IG1ha2Vwcmc9JEhPTUUvYmluL3ZpbXBhcnNlLnBsXCAlXCAkKgojIHNldCBlcnJvcmZvcm1hdD0lZjolbDolbQojCiMgUHJvZ3JhbSBpcyBvbmx5IGNvbXBpbGVkIHdpdGggJ3BlcmwgLXdjJzoKIwojIHNldCBtYWtlcHJnPSRIT01FL2Jpbi92aW1wYXJzZS5wbFwgLWNcICVcICQqCiMgc2V0IGVycm9yZm9ybWF0PSVmOiVsOiVtCiMKIyBVc2FnZToKIwl2aW1wYXJzZS5wbCBbLWNdIFstZiA8ZXJyb3JmaWxlPl0gPHByb2dyYW1maWxlPiBbcHJvZ3JhbWFyZ3NdCiMKIwkJLWMJY29tcGlsZSBvbmx5LCBkb24ndCBydW4gKHBlcmwgLXdjKQojCQktZgl3cml0ZSBlcnJvcnMgdG8gPGVycm9yZmlsZT4KIwojIEV4YW1wbGUgdXNhZ2VzOgojCSogRnJvbSB0aGUgY29tbWFuZCBsaW5lOgojCQl2aW1wYXJzZS5wbCBwcm9ncmFtLnBsCiMKIwkJdmltcGFyc2UucGwgLWMgLWYgZXJyb3JmaWxlIHByb2dyYW0ucGwKIwkJVGhlbiBydW4gdmltIC1xIGVycm9yZmlsZSB0byBlZGl0IHRoZSBlcnJvcnMgd2l0aCBWaW0uCiMKIwkqIEZyb20gVmltOgojCQlFZGl0IGluIFZpbSAoYW5kIHNhdmUsIGlmIHlvdSBkb24ndCBoYXZlIGF1dG93cml0ZSBvbiksIHRoZW4KIwkJdHlwZSAnOm1haycgb3IgJzptYWsgYXJncycgKGFyZ3MgYmVpbmcgdGhlIHByb2dyYW0gYXJndW1lbnRzKQojCQl0byBlcnJvciBjaGVjay4KIwojIFZlcnNpb24gaGlzdG9yeToKIwkwLjIgKDA0LzEyLzIwMDEpOgojCQkqIEZpcnN0IHB1YmxpYyB2ZXJzaW9uIChzZW50IHRvIEJyYW0pCiMJCSogLWMgY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgY29tcGlsaW5nIG9ubHkKIwkJKiBncmFtbWF0aWNhbCBmaXg6ICdUaGVyZSB3YXMgMSBlcnJvci4nCiMJCSogYnVnIGZpeCBmb3IgbXVsdGlwbGUgYXJndW1lbnRzCiMJCSogbW9yZSBlcnJvciBjaGVja3MKIwkJKiBkb2N1bWVudGF0aW9uICh0b3Agb2YgZmlsZSwgJnVzYWdlKQojCQkqIG1pbm9yIGNvZGUgY2xlYW4gdXBzCiMJMC4xICgwMi8wMi8yMDAxKToKIwkJKiBJbml0aWFsIHZlcnNpb24KIwkJKiBCYXNpYyBmdW5jdGlvbmFsaXR5CiMKIyBUb2RvOgojCSogdGVzdCBvbiBtb3JlIHN5c3RlbXMKIwkqIHVzZSBwb3J0YWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbiBvZiBwZXJsICgndXNlIENvbmZpZycpCiMJKiBpbmNsdWRlIG9wdGlvbiB0aGF0IHNob3dzIHBlcmxkaWFnIG1lc3NhZ2VzIGZvciBlYWNoIGVycm9yCiMJKiBhbGxvdyB0byBwYXNzIGluIHByb2dyYW0gYnkgU1RESU4KIwkqIG1vcmUgaW50dWl0aXZlIGJlaGF2aW91ciBpZiBubyBlcnJvciBpcyBmb3VuZCAoc2hvdyBtZXNzYWdlKQojCiMgVGVzdGVkIHVuZGVyIFN1bk9TIDUuNyB3aXRoIFBlcmwgNS42LjAuICBMZXQgbWUga25vdyBpZiBpdCdzIG5vdCB3b3JraW5nIGZvcgojIHlvdS4KCnVzZSBzdHJpY3Q7CnVzZSBHZXRvcHQ6OlN0ZDsKCnVzZSB2YXJzIHF3LyRvcHRfYyAkb3B0X2YgJG9wdF9oLzsgIyBuZWVkZWQgZm9yIEdldG9wdCBpbiBjb21iaW5hdGlvbiB3aXRoIHVzZSBzdHJpY3QgJ3ZhcnMnCgp1c2UgY29uc3RhbnQgVkVSU0lPTiA9PiAwLjI7CgpnZXRvcHRzKCdjZjpoJyk7CgomdXNhZ2UgaWYgJG9wdF9oOyAjIG5vdCBuZWNlc3NhcmlseSBuZWVkZWQsIGJ1dCBnb29kIGZvciBmdXJ0aGVyIGV4dGVuc2lvbgoKaWYgKGRlZmluZWQgJG9wdF9mKSB7CgogICAgb3BlbiBGSUxFLCAiPiAkb3B0X2YiIG9yIGRvIHsKCXdhcm4gIkNvdWxkbid0IG9wZW4gJG9wdF9mOiAkIS4gIFVzaW5nIFNURE9VVCBpbnN0ZWFkLlxuIjsKCXVuZGVmICRvcHRfZjsKICAgIH07Cgp9OwoKbXkgJGhhbmRsZSA9IChkZWZpbmVkICRvcHRfZiA/IFwqRklMRSA6IFwqU1RET1VUKTsKCihteSAkZmlsZSA9IHNoaWZ0KSBvciAmdXNhZ2U7ICMgZGlzcGxheSB1c2FnZSBpZiBubyBmaWxlbmFtZSBpcyBzdXBwbGllZApteSAkYXJncyA9IChAQVJHViA/ICcgJyAuIGpvaW4gJyAnLCBAQVJHViA6ICcnKTsKCm15IEBsaW5lcyA9IGBwZXJsIEB7W2RlZmluZWQgJG9wdF9jID8gJy1jICcgOiAnJyBdfSAtdyAiJGZpbGUkYXJncyIgMj4mMWA7CgpteSAkZXJyb3JzID0gMDsKZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CgogICAgY2hvbXAoJGxpbmUpOwogICAgbXkgKCRmaWxlLCAkbGluZW5vLCAkbWVzc2FnZSwgJHJlc3QpOwoKICAgIGlmICgkbGluZSA9fiAvXiguKilcc2F0XHMoLiopXHNsaW5lXHMoXGQrKShcLnwsXHNuZWFyXHNcIi4qXCIpJC8pIHsKCgkoJG1lc3NhZ2UsICRmaWxlLCAkbGluZW5vLCAkcmVzdCkgPSAoJDEsICQyLCAkMywgJDQpOwoJJGVycm9ycysrOwoJJG1lc3NhZ2UgLj0gJHJlc3QgaWYgKCRyZXN0ID1+IHMvXiwvLyk7CglwcmludCAkaGFuZGxlICIkZmlsZTokbGluZW5vOiRtZXNzYWdlXG4iOwoKICAgIH0gZWxzZSB7IG5leHQgfTsKCn0KCmlmIChkZWZpbmVkICRvcHRfZikgewoKICAgIG15ICRtc2c7CiAgICBpZiAoJGVycm9ycyA9PSAxKSB7CgoJJG1zZyA9ICJUaGVyZSB3YXMgMSBlcnJvci5cbiI7CgogICAgfSBlbHNlIHsKCgkkbXNnID0gIlRoZXJlIHdlcmUgJGVycm9ycyBlcnJvcnMuXG4iOwoKICAgIH07CgogICAgcHJpbnQgU1RET1VUICRtc2c7CiAgICBjbG9zZSBGSUxFOwogICAgdW5saW5rICRvcHRfZiB1bmxlc3MgJGVycm9yczsKCn07CgpzdWIgdXNhZ2UgewoKICAgIChsb2NhbCAkMCA9ICQwKSA9fiBzL14uKlwvKFteXC9dKykkLyQxLzsgIyByZW1vdmUgcGF0aCBmcm9tIG5hbWUgb2YgcHJvZ3JhbQogICAgcHJpbnQ8PEVPVDsKVXNhZ2U6CgkkMCBbLWNdIFstZiA8ZXJyb3JmaWxlPl0gPHByb2dyYW1maWxlPiBbcHJvZ3JhbWFyZ3NdCgoJCS1jCWNvbXBpbGUgb25seSwgZG9uJ3QgcnVuIChleGVjdXRlcyAncGVybCAtd2MnKQoJCS1mCXdyaXRlIGVycm9ycyB0byA8ZXJyb3JmaWxlPgoKRXhhbXBsZXM6CgkqIEF0IHRoZSBjb21tYW5kIGxpbmU6CgkJJDAgcHJvZ3JhbS5wbAoJCURpc3BsYXlzIG91dHB1dCBvbiBTVERPVVQuCgoJCSQwIC1jIC1mIGVycm9yZmlsZSBwcm9ncmFtLnBsCgkJVGhlbiBydW4gJ3ZpbSAtcSBlcnJvcmZpbGUnIHRvIGVkaXQgdGhlIGVycm9ycyB3aXRoIFZpbS4KCgkqIEluIFZpbToKCQlFZGl0IGluIFZpbSAoYW5kIHNhdmUsIGlmIHlvdSBkb24ndCBoYXZlIGF1dG93cml0ZSBvbiksIHRoZW4KCQl0eXBlICc6bWFrJyBvciAnOm1hayBhcmdzJyAoYXJncyBiZWluZyB0aGUgcHJvZ3JhbSBhcmd1bWVudHMpCgkJdG8gZXJyb3IgY2hlY2suCkVPVAoKICAgIGV4aXQgMDsKCn07Cg==