From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?TWljaGFsIEpvc2VmIMWgcGHEjWVrIDxtc3BhY2VrQHJlZGhhdC5jb20+?= To: git-commits@fedoraproject.org Subject: [rpms/perl-Protocol-WebSocket] epel9: Remove EPEL6 code Date: Thu, 06 Aug 2026 20:01:00 GMT Message-ID: <178604646033.1.8977016502177603035.rpms-perl-Protocol-WebSocket-cc1ae2ed0b0e@fedoraproject.org> List-ID: X-Git-Repo: rpms/perl-Protocol-WebSocket X-Git-Branch: epel9 X-Git-Rev: cc1ae2ed0b0eb1d1de8d6c9b72be8df28e42478b QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcGVybC1Qcm90b2Nv bC1XZWJTb2NrZXQKQnJhbmNoIDogZXBlbDkKQ29tbWl0IDogY2MxYWUyZWQwYjBlYjFkMWRlOGQ2 YzliNzJiZThkZjI4ZTQyNDc4YgpBdXRob3IgOiBNaWNoYWwgSm9zZWYgxaBwYcSNZWsgPG1zcGFj ZWtAcmVkaGF0LmNvbT4KRGF0ZSAgIDogMjAyMy0wNC0yNlQxNDo1NzoxOSswMjowMApTdGF0cyAg OiArMS8tNjEzMCBpbiAyIGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVj dC5vcmcvcnBtcy9wZXJsLVByb3RvY29sLVdlYlNvY2tldC9jL2NjMWFlMmVkMGIwZWIxZDFkZThk NmM5YjcyYmU4ZGYyOGU0MjQ3OGI/YnJhbmNoPWVwZWw5CgpMb2c6ClJlbW92ZSBFUEVMNiBjb2Rl CgotLS0KZGlmZiAtLWdpdCBhL3BlcmwtUHJvdG9jb2wtV2ViU29ja2V0LnNwZWMgYi9wZXJsLVBy b3RvY29sLVdlYlNvY2tldC5zcGVjCmluZGV4IGQyZjNjODkuLjcyZWQyZTEgMTAwNjQ0Ci0tLSBh L3BlcmwtUHJvdG9jb2wtV2ViU29ja2V0LnNwZWMKKysrIGIvcGVybC1Qcm90b2NvbC1XZWJTb2Nr ZXQuc3BlYwpAQCAtNSw4ICs1LDYgQEAgU3VtbWFyeTogICAgICAgIFdlYlNvY2tldCBwcm90b2Nv bAogTGljZW5zZTogICAgICAgIEdQTC0xLjAtb3ItbGF0ZXIgT1IgQXJ0aXN0aWMtMS4wLVBlcmwK IFVSTDogICAgICAgICAgICBodHRwczovL21ldGFjcGFuLm9yZy9yZWxlYXNlL1Byb3RvY29sLVdl YlNvY2tldAogU291cmNlMDogICAgICAgIGh0dHBzOi8vY3Bhbi5tZXRhY3Bhbi5vcmcvYXV0aG9y cy9pZC9WL1ZUL1ZUSS9Qcm90b2NvbC1XZWJTb2NrZXQtJXt2ZXJzaW9ufS50YXIuZ3oKLSMgaW5j bHVkZXMgVGVzdDo6TW9yZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gdGhhbiBhdmFpbGFibGUgZm9y IGVwZWw2Ci1QYXRjaDE6ICAgICAgICAgdGVzdF9zaW1wbGVfaW5jbHVkZS5wYXRjaAogQnVpbGRB cmNoOiAgICAgIG5vYXJjaAogQnVpbGRSZXF1aXJlczogIGNvcmV1dGlscwogQnVpbGRSZXF1aXJl czogIHBlcmwtZ2VuZXJhdG9ycwpAQCAtMTgsOSArMTYsNiBAQCBCdWlsZFJlcXVpcmVzOiAgcGVy bChjb25zdGFudCkKIEJ1aWxkUmVxdWlyZXM6ICBwZXJsKERpZ2VzdDo6TUQ1KQogQnVpbGRSZXF1 aXJlczogIHBlcmwoRGlnZXN0OjpTSEEpCiBCdWlsZFJlcXVpcmVzOiAgcGVybChFbmNvZGUpCi0l aWYgMCV7P2VsNn0KLUJ1aWxkUmVxdWlyZXM6ICBwZXJsKEV4cG9ydGVyKQotJWVuZGlmCiBCdWls ZFJlcXVpcmVzOiAgcGVybChGaW5kQmluKQogQnVpbGRSZXF1aXJlczogIHBlcmwoSU86OkhhbmRs ZSkKIEJ1aWxkUmVxdWlyZXM6ICBwZXJsKGxpYikKQEAgLTMxLDkgKzI2LDYgQEAgQnVpbGRSZXF1 aXJlczogIHBlcmwoc3RyaWN0KQogQnVpbGRSZXF1aXJlczogIHBlcmwoVGVzdDo6TW9yZSkKIEJ1 aWxkUmVxdWlyZXM6ICBwZXJsKHV0ZjgpCiBCdWlsZFJlcXVpcmVzOiAgcGVybCh3YXJuaW5ncykK LSVpZiAwJXs/ZWw2fQotQnVpbGRSZXF1aXJlczogIHBlcmwodmFycykKLSVlbmRpZgogQnVpbGRS ZXF1aXJlczogIHNlZAogCiAlez9wZXJsX2RlZmF1bHRfZmlsdGVyfQpAQCAtNDYsOSArMzgsNiBA QCBodHRwIHNlcnZlcnMgb3IgY2xpZW50cyB0byBwcm92aWRlIFdlYlNvY2tldCBzdXBwb3J0Lgog JXByZXAKICVzZXR1cCAtcSAtbiBQcm90b2NvbC1XZWJTb2NrZXQtJXt2ZXJzaW9ufQogJXtfX3Nl ZH0gLWkgJ3N8XHJ8fCcgLi9leGFtcGxlcy9yZWZsZXgucGwKLSVpZiAwJXs/ZWw2fQotJXBhdGNo MSAtcDEKLSVlbmRpZgogIyBVcHN0cmVhbSBpcyBva2F5IHdpdGggd3Njb25zb2xlIGJlaW5nIG1h ZGUgYXZhaWxhYmxlIGFzIGEgYmluYXJ5IGZvciBGZWRvcmEvRVBFTAogIyBNb2R1bGU6OkJ1aWxk OjpUaW55IHJlcXVpcmVzIHRoYXQgYWxsIGV4ZWN1dGFibGVzIG11c3QgYmUgaW4gc2NyaXB0Lwog JXtfX212fSB1dGlsIHNjcmlwdApAQCAtNjQsMTQgKzUzLDkgQEAgaHR0cCBzZXJ2ZXJzIG9yIGNs aWVudHMgdG8gcHJvdmlkZSBXZWJTb2NrZXQgc3VwcG9ydC4KICV7X2ZpeHBlcm1zfSAkUlBNX0JV SUxEX1JPT1QvKgogCiAlY2hlY2sKLSVpZiAwJXs/ZWw2fQotUEVSTDVMSUI9dGVzdF9zaW1wbGVf cGF0Y2gvbGliIC4vQnVpbGQgdGVzdAotJWVsc2UKIC4vQnVpbGQgdGVzdAotJWVuZGlmCiAKICVm aWxlcwotJXshP19saWNlbnNlZGlyOiVnbG9iYWwgbGljZW5zZSAlJWRvY30KICVsaWNlbnNlIExJ Q0VOU0UKICVkb2MgQ2hhbmdlcyBleGFtcGxlcwogJXtwZXJsX3ZlbmRvcmxpYn0vKgpAQCAtODEs NiArNjUsNyBAQCBQRVJMNUxJQj10ZXN0X3NpbXBsZV9wYXRjaC9saWIgLi9CdWlsZCB0ZXN0CiAl Y2hhbmdlbG9nCiAqIFdlZCBBcHIgMjYgMjAyMyBNaWNoYWwgSm9zZWYgxaBwYcSNZWsgPG1zcGFj ZWtAcmVkaGF0LmNvbT4gLSAwLjI2LTE0CiAtIEZpeCBub3QgY3JlYXRlZCBtYW4gcGFnZSBhdXRv bWF0aWNhbGx5IGluIG5ldyBNb2R1bGU6OkJ1aWxkOjpUaW55IChCWiMyMTg5MDk5KQorLSBSZW1v dmUgRVBFTDYgY29kZQogLSBVcGRhdGUgbGljZW5zZSB0byBTUERYIGZvcm1hdAogCiAqIEZyaSBK YW4gMjAgMjAyMyBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2pl Y3Qub3JnPiAtIDAuMjYtMTMKCmRpZmYgLS1naXQgYS90ZXN0X3NpbXBsZV9pbmNsdWRlLnBhdGNo IGIvdGVzdF9zaW1wbGVfaW5jbHVkZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggNzE1OGViNi4uMDAwMDAwMAotLS0gYS90ZXN0X3NpbXBsZV9pbmNsdWRlLnBhdGNoCisrKyAv ZGV2L251bGwKQEAgLTEsNjExNCArMCwwIEBACi1kaWZmIC1OYXVyIG9sZC90ZXN0X3NpbXBsZV9w YXRjaC9saWIvVGVzdC9CdWlsZGVyL0lPL1NjYWxhci5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gv bGliL1Rlc3QvQnVpbGRlci9JTy9TY2FsYXIucG0KLS0tLSBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gv bGliL1Rlc3QvQnVpbGRlci9JTy9TY2FsYXIucG0JMTk3MC0wMS0wMSAxMDowMDowMC4wMDAwMDAw MDAgKzEwMDAKLSsrKyBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9JTy9T Y2FsYXIucG0JMjAxNC0wMy0yNiAyMTo0ODoxMS41MTAyNTc2MTIgKzExMDAKLUBAIC0wLDAgKzEs NjU4IEBACi0rcGFja2FnZSBUZXN0OjpCdWlsZGVyOjpJTzo6U2NhbGFyOwotKwotKwotKz1oZWFk MSBOQU1FCi0rCi0rVGVzdDo6QnVpbGRlcjo6SU86OlNjYWxhciAtIEEgY29weSBvZiBJTzo6U2Nh bGFyIGZvciBUZXN0OjpCdWlsZGVyCi0rCi0rPWhlYWQxIERFU0NSSVBUSU9OCi0rCi0rVGhpcyBp cyBhIGNvcHkgb2YgSU86OlNjYWxhciB3aGljaCBzaGlwcyB3aXRoIFRlc3Q6OkJ1aWxkZXIgdG8K LStzdXBwb3J0IHNjYWxhciByZWZlcmVuY2VzIGFzIGZpbGVoYW5kbGVzIG9uIFBlcmwgNS42LiAg TmV3ZXIKLSt2ZXJzaW9ucyBvZiBQZXJsIHNpbXBseSB1c2UgQzw8b3BlbigpPj4ncyBidWlsdCBp biBzdXBwb3J0LgotKwotK1Rlc3Q6OkJ1aWxkZXIgY2FuIG5vdCBoYXZlIGRlcGVuZGVuY2llcyBv biBvdGhlciBtb2R1bGVzIHdpdGhvdXQKLStjYXJlZnVsIGNvbnNpZGVyYXRpb24sIHNvIGl0cyBz aW1wbHkgYmVlbiBjb3BpZWQgaW50byB0aGUgZGlzdHJpYnV0aW9uLgotKwotKz1oZWFkMSBDT1BZ UklHSFQgYW5kIExJQ0VOU0UKLSsKLStUaGlzIGZpbGUgY2FtZSBmcm9tIHRoZSAiSU8tc3RyaW5n eSIgUGVybDUgdG9vbGtpdC4KLSsKLStDb3B5cmlnaHQgKGMpIDE5OTYgYnkgRXJ5cS4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rQ29weXJpZ2h0IChjKSAxOTk5LDIwMDEgYnkgWmVlR2VlIFNvZnR3 YXJlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotK21vZGlmeSBpdCB1bmRl ciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KLSsKLSsKLSs9Y3V0Ci0rCi0rIyBUaGlz IGlzIGNvcGllZCBjb2RlLCBJIGRvbid0IGNhcmUuCi0rIyNubyBjcml0aWMKLSsKLSt1c2UgQ2Fy cDsKLSt1c2Ugc3RyaWN0OwotK3VzZSB2YXJzIHF3KCRWRVJTSU9OIEBJU0EpOwotK3VzZSBJTzo6 SGFuZGxlOwotKwotK3VzZSA1LjAwNTsKLSsKLSsjIyMgVGhlIHBhY2thZ2UgdmVyc2lvbiwgYm90 aCBpbiAxLjIzIHN0eWxlICphbmQqIHVzYWJsZSBieSBNYWtlTWFrZXI6Ci0rJFZFUlNJT04gPSAi Mi4xMTAiOwotKwotKyMjIyBJbmhlcml0YW5jZToKLStASVNBID0gcXcoSU86OkhhbmRsZSk7Ci0r Ci0rIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotKz1oZWFkMiBDb25zdHJ1Y3Rp b24KLSsKLSs9b3ZlciA0Ci0rCi0rPWN1dAotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSsKLSs9aXRlbSBuZXcgW0FSR1MuLi5dCi0rCi0rSTxDbGFzcyBtZXRob2QuPgotK1Jl dHVybiBhIG5ldywgdW5hdHRhY2hlZCBzY2FsYXIgaGFuZGxlLgotK0lmIGFueSBhcmd1bWVudHMg YXJlIGdpdmVuLCB0aGV5J3JlIHNlbnQgdG8gb3BlbigpLgotKwotKz1jdXQKLSsKLStzdWIgbmV3 IHsKLSsgICAgbXkgJHByb3RvID0gc2hpZnQ7Ci0rICAgIG15ICRjbGFzcyA9IHJlZigkcHJvdG8p IHx8ICRwcm90bzsKLSsgICAgbXkgJHNlbGYgPSBibGVzcyBcZG8geyBsb2NhbCAqRkggfSwgJGNs YXNzOwotKyAgICB0aWUgKiRzZWxmLCAkY2xhc3MsICRzZWxmOwotKyAgICAkc2VsZi0+b3BlbihA Xyk7ICAgIyMjIG9wZW4gb24gYW5vbnltb3VzIGJ5IGRlZmF1bHQKLSsgICAgJHNlbGY7Ci0rfQot K3N1YiBERVNUUk9ZIHsKLSsgICAgc2hpZnQtPmNsb3NlOwotK30KLSsKLSsjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rPWl0ZW0gb3BlbiBbU0NBTEFSUkVGXQotKwotK0k8SW5z dGFuY2UgbWV0aG9kLj4KLStPcGVuIHRoZSBzY2FsYXIgaGFuZGxlIG9uIGEgbmV3IHNjYWxhciwg cG9pbnRlZCB0byBieSBTQ0FMQVJSRUYuCi0rSWYgbm8gU0NBTEFSUkVGIGlzIGdpdmVuLCBhICJw cml2YXRlIiBzY2FsYXIgaXMgY3JlYXRlZCB0byBob2xkCi0rdGhlIGZpbGUgZGF0YS4KLSsKLStS ZXR1cm5zIHRoZSBzZWxmIG9iamVjdCBvbiBzdWNjZXNzLCB1bmRlZmluZWQgb24gZXJyb3IuCi0r Ci0rPWN1dAotKwotK3N1YiBvcGVuIHsKLSsgICAgbXkgKCRzZWxmLCAkc3JlZikgPSBAXzsKLSsK LSsgICAgIyMjIFNhbml0eToKLSsgICAgZGVmaW5lZCgkc3JlZikgb3IgZG8ge215ICRzID0gJyc7 ICRzcmVmID0gXCRzfTsKLSsgICAgKHJlZigkc3JlZikgZXEgIlNDQUxBUiIpIG9yIGNyb2FrICJv cGVuKCkgbmVlZHMgYSByZWYgdG8gYSBzY2FsYXIiOwotKwotKyAgICAjIyMgU2V0dXA6Ci0rICAg ICokc2VsZi0+e1Bvc30gPSAwOyAgICAgICAgICAjIyMgc2VlayBwb3NpdGlvbgotKyAgICAqJHNl bGYtPntTUn0gID0gJHNyZWY7ICAgICAgIyMjIHNjYWxhciByZWZlcmVuY2UKLSsgICAgJHNlbGY7 Ci0rfQotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSBvcGVu ZWQKLSsKLStJPEluc3RhbmNlIG1ldGhvZC4+Ci0rSXMgdGhlIHNjYWxhciBoYW5kbGUgb3BlbmVk IG9uIHNvbWV0aGluZz8KLSsKLSs9Y3V0Ci0rCi0rc3ViIG9wZW5lZCB7Ci0rICAgICp7c2hpZnQo KX0tPntTUn07Ci0rfQotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9 aXRlbSBjbG9zZQotKwotK0k8SW5zdGFuY2UgbWV0aG9kLj4KLStEaXNhc3NvY2lhdGUgdGhlIHNj YWxhciBoYW5kbGUgZnJvbSBpdHMgdW5kZXJseWluZyBzY2FsYXIuCi0rRG9uZSBhdXRvbWF0aWNh bGx5IG9uIGRlc3Ryb3kuCi0rCi0rPWN1dAotKwotK3N1YiBjbG9zZSB7Ci0rICAgIG15ICRzZWxm ID0gc2hpZnQ7Ci0rICAgICV7KiRzZWxmfSA9ICgpOwotKyAgICAxOwotK30KLSsKLSs9YmFjawot KwotKz1jdXQKLSsKLSsKLSsKLSsjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0r PWhlYWQyIElucHV0IGFuZCBvdXRwdXQKLSsKLSs9b3ZlciA0Ci0rCi0rPWN1dAotKwotKwotKyMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSBmbHVzaAotKwotK0k8SW5z dGFuY2UgbWV0aG9kLj4KLStOby1vcCwgcHJvdmlkZWQgZm9yIE9PIGNvbXBhdGliaWxpdHkuCi0r Ci0rPWN1dAotKwotK3N1YiBmbHVzaCB7ICIwIGJ1dCB0cnVlIiB9Ci0rCi0rIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVtIGdldGMKLSsKLStJPEluc3RhbmNlIG1ldGhv ZC4+Ci0rUmV0dXJuIHRoZSBuZXh0IGNoYXJhY3Rlciwgb3IgdW5kZWYgaWYgbm9uZSByZW1haW4u Ci0rCi0rPWN1dAotKwotK3N1YiBnZXRjIHsKLSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsKLSsg ICAgIyMjIFJldHVybiB1bmRlZiByaWdodCBhd2F5IGlmIGF0IEVPRjsgZWxzZSwgbW92ZSBwb3Mg Zm9yd2FyZDoKLSsgICAgcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5lb2Y7Ci0rICAgIHN1YnN0cigk eyokc2VsZi0+e1NSfX0sICokc2VsZi0+e1Bvc30rKywgMSk7Ci0rfQotKwotKyMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSBnZXRsaW5lCi0rCi0rSTxJbnN0YW5jZSBt ZXRob2QuPgotK1JldHVybiB0aGUgbmV4dCBsaW5lLCBvciB1bmRlZiBvbiBlbmQgb2Ygc3RyaW5n LgotK0NhbiBzYWZlbHkgYmUgY2FsbGVkIGluIGFuIGFycmF5IGNvbnRleHQuCi0rQ3VycmVudGx5 LCBsaW5lcyBhcmUgZGVsaW1pdGVkIGJ5ICJcbiIuCi0rCi0rPWN1dAotKwotK3N1YiBnZXRsaW5l IHsKLSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsKLSsgICAgIyMjIFJldHVybiB1bmRlZiByaWdo dCBhd2F5IGlmIGF0IEVPRjoKLSsgICAgcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5lb2Y7Ci0rCi0r ICAgICMjIyBHZXQgbmV4dCBsaW5lOgotKyAgICBteSAkc3IgPSAqJHNlbGYtPntTUn07Ci0rICAg IG15ICRpICA9ICokc2VsZi0+e1Bvc307CSAgICAgICAgIyMjIFN0YXJ0IG1hdGNoaW5nIGF0IHRo aXMgcG9pbnQuCi0rCi0rICAgICMjIyBNaW5pbWFsIGltcGFjdCBpbXBsZW1lbnRhdGlvbiEKLSsg ICAgIyMjIFdlIGRvIHRoZSBmYXN0IGZhc3QgdGhpbmcgKG5vIHJlZ2V4cHMpIGlmIHVzaW5nIHRo ZQotKyAgICAjIyMgY2xhc3NpYyBpbnB1dCByZWNvcmQgc2VwYXJhdG9yLgotKwotKyAgICAjIyMg Q2FzZSAxOiAkLyBpcyB1bmRlZjogc2x1cnAgYWxsLi4uCi0rICAgIGlmICAgICghZGVmaW5lZCgk LykpIHsKLSsJKiRzZWxmLT57UG9zfSA9IGxlbmd0aCAkJHNyOwotKyAgICAgICAgcmV0dXJuIHN1 YnN0cigkJHNyLCAkaSk7Ci0rICAgIH0KLSsKLSsgICAgIyMjIENhc2UgMjogJC8gaXMgIlxuIjog em9vbSB6b29tIHpvb20uLi4KLSsgICAgZWxzaWYgKCQvIGVxICJcMDEyIikgewotKwotKyAgICAg ICAgIyMjIFNlZWsgYWhlYWQgZm9yICJcbiIuLi4geWVzLCB0aGlzIHJlYWxseSBpcyBmYXN0ZXIg dGhhbiByZWdleHBzLgotKyAgICAgICAgbXkgJGxlbiA9IGxlbmd0aCgkJHNyKTsKLSsgICAgICAg IGZvciAoOyAkaSA8ICRsZW47ICsrJGkpIHsKLSsgICAgICAgICAgIGxhc3QgaWYgb3JkIChzdWJz dHIgKCQkc3IsICRpLCAxKSkgPT0gMTA7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICAjIyMgRXh0 cmFjdCB0aGUgbGluZToKLSsgICAgICAgIG15ICRsaW5lOwotKyAgICAgICAgaWYgKCRpIDwgJGxl bikgeyAgICAgICAgICAgICAgICAjIyMgV2UgZm91bmQgYSAiXG4iOgotKyAgICAgICAgICAgICRs aW5lID0gc3Vic3RyICgkJHNyLCAqJHNlbGYtPntQb3N9LCAkaSAtICokc2VsZi0+e1Bvc30gKyAx KTsKLSsgICAgICAgICAgICAqJHNlbGYtPntQb3N9ID0gJGkrMTsgICAgICAgICAgICAjIyMgUmVt ZW1iZXIgd2hlcmUgd2UgZmluaXNoZWQgdXAuCi0rICAgICAgICB9Ci0rICAgICAgICBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICMjIyBObyAiXG4iOyBzbHVycCB0aGUgcmVtYWluZGVy OgotKyAgICAgICAgICAgICRsaW5lID0gc3Vic3RyICgkJHNyLCAqJHNlbGYtPntQb3N9LCAkaSAt ICokc2VsZi0+e1Bvc30pOwotKyAgICAgICAgICAgICokc2VsZi0+e1Bvc30gPSAkbGVuOwotKyAg ICAgICAgfQotKyAgICAgICAgcmV0dXJuICRsaW5lOwotKyAgICB9Ci0rCi0rICAgICMjIyBDYXNl IDM6ICQvIGlzIHJlZiB0byBpbnQuIERvIGZpeGVkLXNpemUgcmVjb3Jkcy4KLSsgICAgIyMjICAg ICAgICAoVGhhbmtzIHRvIERvbWluaXF1ZSBRdWF0cmF2YXV4LikKLSsgICAgZWxzaWYgKHJlZigk LykpIHsKLSsgICAgICAgIG15ICRsZW4gPSBsZW5ndGgoJCRzcik7Ci0rCQlteSAkaSA9ICR7JC99 ICsgMDsKLSsJCW15ICRsaW5lID0gc3Vic3RyICgkJHNyLCAqJHNlbGYtPntQb3N9LCAkaSk7Ci0r CQkqJHNlbGYtPntQb3N9ICs9ICRpOwotKyAgICAgICAgKiRzZWxmLT57UG9zfSA9ICRsZW4gaWYg KCokc2VsZi0+e1Bvc30gPiAkbGVuKTsKLSsJCXJldHVybiAkbGluZTsKLSsgICAgfQotKwotKyAg ICAjIyMgQ2FzZSA0OiAkLyBpcyBlaXRoZXIgIiIgKHBhcmFncmFwaHMpIG9yIHNvbWV0aGluZyB3 ZWlyZC4uLgotKyAgICAjIyMgICAgICAgICBUaGlzIGlzIEdyYWhhbSdzIGdlbmVyYWwtcHVycG9z ZSBzdHVmZiwgd2hpY2ggbWlnaHQgYmUKLSsgICAgIyMjICAgICAgICAgYSB0YWQgc2xvd2VyIHRo YW4gQ2FzZSAyIGZvciB0eXBpY2FsIGRhdGEsIGJlY2F1c2UKLSsgICAgIyMjICAgICAgICAgb2Yg dGhlIHJlZ2V4cHMuCi0rICAgIGVsc2UgewotKyAgICAgICAgcG9zKCQkc3IpID0gJGk7Ci0rCi0r CSMjIyBJZiBpbiBwYXJhZ3JhcGggbW9kZSwgc2tpcCBsZWFkaW5nIGxpbmVzIChhbmQgdXBkYXRl IGkhKToKLSsgICAgICAgIGxlbmd0aCgkLykgb3IKLSsJICAgICgoJCRzciA9fiBtL1xHXG4qL2cp IGFuZCAoJGkgPSBwb3MoJCRzcikpKTsKLSsKLSsgICAgICAgICMjIyBJZiB3ZSBzZWUgdGhlIHNl cGFyYXRvciBpbiB0aGUgYnVmZmVyIGFoZWFkLi4uCi0rICAgICAgICBpZiAobGVuZ3RoKCQvKQot KwkgICAgPyAgJCRzciA9fiBtLFxRJC9cRSxnICAgICAgICAgICMjIyAgIChvcmRpbmFyeSBzZXAp IFRCRDogcHJlY29tcCEKLSsgICAgICAgICAgICA6ICAkJHNyID1+IG0sXG5cbixnICAgICAgICAg ICAgIyMjICAgKGEgcGFyYWdyYXBoKQotKyAgICAgICAgICAgICkgewotKyAgICAgICAgICAgICok c2VsZi0+e1Bvc30gPSBwb3MgJCRzcjsKLSsgICAgICAgICAgICByZXR1cm4gc3Vic3RyKCQkc3Is ICRpLCAqJHNlbGYtPntQb3N9LSRpKTsKLSsgICAgICAgIH0KLSsgICAgICAgICMjIyBFbHNlIGlm IG5vIHNlcGFyYXRvciByZW1haW5zLCBqdXN0IHNsdXJwIHRoZSByZXN0OgotKyAgICAgICAgZWxz ZSB7Ci0rICAgICAgICAgICAgKiRzZWxmLT57UG9zfSA9IGxlbmd0aCAkJHNyOwotKyAgICAgICAg ICAgIHJldHVybiBzdWJzdHIoJCRzciwgJGkpOwotKyAgICAgICAgfQotKyAgICB9Ci0rfQotKwot KyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSBnZXRsaW5lcwotKwot K0k8SW5zdGFuY2UgbWV0aG9kLj4KLStHZXQgYWxsIHJlbWFpbmluZyBsaW5lcy4KLStJdCB3aWxs IGNyb2FrKCkgaWYgYWNjaWRlbnRhbGx5IGNhbGxlZCBpbiBhIHNjYWxhciBjb250ZXh0LgotKwot Kz1jdXQKLSsKLStzdWIgZ2V0bGluZXMgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgICB3 YW50YXJyYXkgb3IgY3JvYWsoImNhbid0IGNhbGwgZ2V0bGluZXMgaW4gc2NhbGFyIGNvbnRleHQh Iik7Ci0rICAgIG15ICgkbGluZSwgQGxpbmVzKTsKLSsgICAgcHVzaCBAbGluZXMsICRsaW5lIHdo aWxlIChkZWZpbmVkKCRsaW5lID0gJHNlbGYtPmdldGxpbmUpKTsKLSsgICAgQGxpbmVzOwotK30K LSsKLSsjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rPWl0ZW0gcHJpbnQgQVJH Uy4uLgotKwotK0k8SW5zdGFuY2UgbWV0aG9kLj4KLStQcmludCBBUkdTIHRvIHRoZSB1bmRlcmx5 aW5nIHNjYWxhci4KLSsKLStCPFdhcm5pbmc6PiB0aGlzIGNvbnRpbnVlcyB0byBhbHdheXMgY2F1 c2UgYSBzZWVrIHRvIHRoZSBlbmQKLStvZiB0aGUgc3RyaW5nLCBidXQgaWYgeW91IHBlcmZvcm0g c2VlaygpcyBhbmQgdGVsbCgpcywgaXQgaXMKLStzdGlsbCBzYWZlciB0byBleHBsaWNpdGx5IHNl ZWstdG8tZW5kIGJlZm9yZSBzdWJzZXF1ZW50IHByaW50KClzLgotKwotKz1jdXQKLSsKLStzdWIg cHJpbnQgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgICAqJHNlbGYtPntQb3N9ID0gbGVu Z3RoKCR7KiRzZWxmLT57U1J9fSAuPSBqb2luKCcnLCBAXykgLiAoZGVmaW5lZCgkXCkgPyAkXCA6 ICIiKSk7Ci0rICAgIDE7Ci0rfQotK3N1YiBfdW5zYWZlX3ByaW50IHsKLSsgICAgbXkgJHNlbGYg PSBzaGlmdDsKLSsgICAgbXkgJGFwcGVuZCA9IGpvaW4oJycsIEBfKSAuICRcOwotKyAgICAkeyok c2VsZi0+e1NSfX0gLj0gJGFwcGVuZDsKLSsgICAgKiRzZWxmLT57UG9zfSAgICs9IGxlbmd0aCgk YXBwZW5kKTsKLSsgICAgMTsKLSt9Ci0rc3ViIF9vbGRfcHJpbnQgewotKyAgICBteSAkc2VsZiA9 IHNoaWZ0OwotKyAgICAkeyokc2VsZi0+e1NSfX0gLj0gam9pbignJywgQF8pIC4gJFw7Ci0rICAg ICokc2VsZi0+e1Bvc30gPSBsZW5ndGgoJHsqJHNlbGYtPntTUn19KTsKLSsgICAgMTsKLSt9Ci0r Ci0rCi0rIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVtIHJlYWQgQlVG LCBOQllURVMsIFtPRkZTRVRdCi0rCi0rSTxJbnN0YW5jZSBtZXRob2QuPgotK1JlYWQgc29tZSBi eXRlcyBmcm9tIHRoZSBzY2FsYXIuCi0rUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVh bGx5IHJlYWQsIDAgb24gZW5kLW9mLWZpbGUsIHVuZGVmIG9uIGVycm9yLgotKwotKz1jdXQKLSsK LStzdWIgcmVhZCB7Ci0rICAgIG15ICRzZWxmID0gJF9bMF07Ci0rICAgIG15ICRuICAgID0gJF9b Ml07Ci0rICAgIG15ICRvZmYgID0gJF9bM10gfHwgMDsKLSsKLSsgICAgbXkgJHJlYWQgPSBzdWJz dHIoJHsqJHNlbGYtPntTUn19LCAqJHNlbGYtPntQb3N9LCAkbik7Ci0rICAgICRuID0gbGVuZ3Ro KCRyZWFkKTsKLSsgICAgKiRzZWxmLT57UG9zfSArPSAkbjsKLSsgICAgKCRvZmYgPyBzdWJzdHIo JF9bMV0sICRvZmYpIDogJF9bMV0pID0gJHJlYWQ7Ci0rICAgIHJldHVybiAkbjsKLSt9Ci0rCi0r Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVtIHdyaXRlIEJVRiwgTkJZ VEVTLCBbT0ZGU0VUXQotKwotK0k8SW5zdGFuY2UgbWV0aG9kLj4KLStXcml0ZSBzb21lIGJ5dGVz IHRvIHRoZSBzY2FsYXIuCi0rCi0rPWN1dAotKwotK3N1YiB3cml0ZSB7Ci0rICAgIG15ICRzZWxm ID0gJF9bMF07Ci0rICAgIG15ICRuICAgID0gJF9bMl07Ci0rICAgIG15ICRvZmYgID0gJF9bM10g fHwgMDsKLSsKLSsgICAgbXkgJGRhdGEgPSBzdWJzdHIoJF9bMV0sICRvZmYsICRuKTsKLSsgICAg JG4gPSBsZW5ndGgoJGRhdGEpOwotKyAgICAkc2VsZi0+cHJpbnQoJGRhdGEpOwotKyAgICByZXR1 cm4gJG47Ci0rfQotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRl bSBzeXNyZWFkIEJVRiwgTEVOLCBbT0ZGU0VUXQotKwotK0k8SW5zdGFuY2UgbWV0aG9kLj4KLStS ZWFkIHNvbWUgYnl0ZXMgZnJvbSB0aGUgc2NhbGFyLgotK1JldHVybnMgdGhlIG51bWJlciBvZiBi eXRlcyBhY3R1YWxseSByZWFkLCAwIG9uIGVuZC1vZi1maWxlLCB1bmRlZiBvbiBlcnJvci4KLSsK LSs9Y3V0Ci0rCi0rc3ViIHN5c3JlYWQgewotKyAgbXkgJHNlbGYgPSBzaGlmdDsKLSsgICRzZWxm LT5yZWFkKEBfKTsKLSt9Ci0rCi0rIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwot Kz1pdGVtIHN5c3dyaXRlIEJVRiwgTkJZVEVTLCBbT0ZGU0VUXQotKwotK0k8SW5zdGFuY2UgbWV0 aG9kLj4KLStXcml0ZSBzb21lIGJ5dGVzIHRvIHRoZSBzY2FsYXIuCi0rCi0rPWN1dAotKwotK3N1 YiBzeXN3cml0ZSB7Ci0rICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgJHNlbGYtPndyaXRlKEBfKTsK LSt9Ci0rCi0rPWJhY2sKLSsKLSs9Y3V0Ci0rCi0rCi0rIz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKwotKz1oZWFkMiBTZWVraW5nL3RlbGxpbmcgYW5kIG90aGVyIGF0dHJpYnV0ZXMK LSsKLSs9b3ZlciA0Ci0rCi0rPWN1dAotKwotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSsKLSs9aXRlbSBhdXRvZmx1c2gKLSsKLStJPEluc3RhbmNlIG1ldGhvZC4+Ci0rTm8t b3AsIHByb3ZpZGVkIGZvciBPTyBjb21wYXRpYmlsaXR5LgotKwotKz1jdXQKLSsKLStzdWIgYXV0 b2ZsdXNoIHt9Ci0rCi0rIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVt IGJpbm1vZGUKLSsKLStJPEluc3RhbmNlIG1ldGhvZC4+Ci0rTm8tb3AsIHByb3ZpZGVkIGZvciBP TyBjb21wYXRpYmlsaXR5LgotKwotKz1jdXQKLSsKLStzdWIgYmlubW9kZSB7fQotKwotKyMtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSBjbGVhcmVycgotKwotK0k8SW5z dGFuY2UgbWV0aG9kLj4gIENsZWFyIHRoZSBlcnJvciBhbmQgRU9GIGZsYWdzLiAgQSBuby1vcC4K LSsKLSs9Y3V0Ci0rCi0rc3ViIGNsZWFyZXJyIHsgMSB9Ci0rCi0rIy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotKwotKz1pdGVtIGVvZgotKwotK0k8SW5zdGFuY2UgbWV0aG9kLj4gIEFy ZSB3ZSBhdCBlbmQgb2YgZmlsZT8KLSsKLSs9Y3V0Ci0rCi0rc3ViIGVvZiB7Ci0rICAgIG15ICRz ZWxmID0gc2hpZnQ7Ci0rICAgICgqJHNlbGYtPntQb3N9ID49IGxlbmd0aCgkeyokc2VsZi0+e1NS fX0pKTsKLSt9Ci0rCi0rIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVt IHNlZWsgT0ZGU0VULCBXSEVOQ0UKLSsKLStJPEluc3RhbmNlIG1ldGhvZC4+ICBTZWVrIHRvIGEg Z2l2ZW4gcG9zaXRpb24gaW4gdGhlIHN0cmVhbS4KLSsKLSs9Y3V0Ci0rCi0rc3ViIHNlZWsgewot KyAgICBteSAoJHNlbGYsICRwb3MsICR3aGVuY2UpID0gQF87Ci0rICAgIG15ICRlb2Zwb3MgPSBs ZW5ndGgoJHsqJHNlbGYtPntTUn19KTsKLSsKLSsgICAgIyMjIFNlZWs6Ci0rICAgIGlmICAgICgk d2hlbmNlID09IDApIHsgKiRzZWxmLT57UG9zfSA9ICRwb3MgfSAgICAgICAgICAgICAjIyMgU0VF S19TRVQKLSsgICAgZWxzaWYgKCR3aGVuY2UgPT0gMSkgeyAqJHNlbGYtPntQb3N9ICs9ICRwb3Mg fSAgICAgICAgICAgICMjIyBTRUVLX0NVUgotKyAgICBlbHNpZiAoJHdoZW5jZSA9PSAyKSB7ICok c2VsZi0+e1Bvc30gPSAkZW9mcG9zICsgJHBvc30gICAgIyMjIFNFRUtfRU5ECi0rICAgIGVsc2Ug ICAgICAgICAgICAgICAgIHsgY3JvYWsgImJhZCBzZWVrIHdoZW5jZSAoJHdoZW5jZSkiIH0KLSsK LSsgICAgIyMjIEZpeHVwOgotKyAgICBpZiAoKiRzZWxmLT57UG9zfSA8IDApICAgICAgIHsgKiRz ZWxmLT57UG9zfSA9IDAgfQotKyAgICBpZiAoKiRzZWxmLT57UG9zfSA+ICRlb2Zwb3MpIHsgKiRz ZWxmLT57UG9zfSA9ICRlb2Zwb3MgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rIy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVtIHN5c3NlZWsgT0ZGU0VULCBXSEVOQ0UK LSsKLStJPEluc3RhbmNlIG1ldGhvZC4+IElkZW50aWNhbCB0byBDPHNlZWsgT0ZGU0VULCBXSEVO Q0U+LCBJPHEudi4+Ci0rCi0rPWN1dAotKwotK3N1YiBzeXNzZWVrIHsKLSsgICAgbXkgJHNlbGYg PSBzaGlmdDsKLSsgICAgJHNlbGYtPnNlZWsgKEBfKTsKLSt9Ci0rCi0rIy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotKwotKz1pdGVtIHRlbGwKLSsKLStJPEluc3RhbmNlIG1ldGhvZC4+ Ci0rUmV0dXJuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJlYW0sIGFzIGEgbnVtZXJp YyBvZmZzZXQuCi0rCi0rPWN1dAotKwotK3N1YiB0ZWxsIHsgKntzaGlmdCgpfS0+e1Bvc30gfQot KwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSAgdXNlX1JTIFtZ RVNOT10KLSsKLStJPEluc3RhbmNlIG1ldGhvZC4+Ci0rQjxEZXByZWNhdGVkIGFuZCBpZ25vcmVk Lj4KLStPYmV5IHRoZSBjdXJyZW50IHNldHRpbmcgb2YgJC8sIGxpa2UgSU86OkhhbmRsZSBkb2Vz PwotK0RlZmF1bHQgaXMgZmFsc2UgaW4gMS54LCBidXQgY29sZC13ZWxkZWQgdHJ1ZSBpbiAyLngg YW5kIGxhdGVyLgotKwotKz1jdXQKLSsKLStzdWIgdXNlX1JTIHsKLSsgICAgbXkgKCRzZWxmLCAk eWVzbm8pID0gQF87Ci0rICAgIGNhcnAgInVzZV9SUyBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVk OyBcJC8gaXMgYWx3YXlzIGNvbnN1bHRlZFxuIjsKLSsgfQotKwotKyMtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSsKLSs9aXRlbSBzZXRwb3MgUE9TCi0rCi0rSTxJbnN0YW5jZSBtZXRo b2QuPgotK1NldCB0aGUgY3VycmVudCBwb3NpdGlvbiwgdXNpbmcgdGhlIG9wYXF1ZSB2YWx1ZSBy ZXR1cm5lZCBieSBDPGdldHBvcygpPi4KLSsKLSs9Y3V0Ci0rCi0rc3ViIHNldHBvcyB7IHNoaWZ0 LT5zZWVrKCRfWzBdLDApIH0KLSsKLSsjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0r Ci0rPWl0ZW0gZ2V0cG9zCi0rCi0rSTxJbnN0YW5jZSBtZXRob2QuPgotK1JldHVybiB0aGUgY3Vy cmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nLCBhcyBhbiBvcGFxdWUgb2JqZWN0LgotKwotKz1j dXQKLSsKLSsqZ2V0cG9zID0gXCZ0ZWxsOwotKwotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSsKLSs9aXRlbSBzcmVmCi0rCi0rSTxJbnN0YW5jZSBtZXRob2QuPgotK1JldHVy biBhIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBzY2FsYXIuCi0rCi0rPWN1dAotKwotK3N1 YiBzcmVmIHsgKntzaGlmdCgpfS0+e1NSfSB9Ci0rCi0rCi0rIy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotKyMgVGllZCBoYW5kbGUgbWV0aG9kcy4uLgotKyMtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSsKLSsjIENvbnZlbnRpb25hbCB0aWVoYW5kbGUgaW50ZXJmYWNlOgot K3N1YiBUSUVIQU5ETEUgewotKyAgICAoKGRlZmluZWQoJF9bMV0pICYmIFVOSVZFUlNBTDo6aXNh KCRfWzFdLCBfX1BBQ0tBR0VfXykpCi0rICAgICA/ICRfWzFdCi0rICAgICA6IHNoaWZ0LT5uZXco QF8pKTsKLSt9Ci0rc3ViIEdFVEMgICAgICB7IHNoaWZ0LT5nZXRjKEBfKSB9Ci0rc3ViIFBSSU5U ICAgICB7IHNoaWZ0LT5wcmludChAXykgfQotK3N1YiBQUklOVEYgICAgeyBzaGlmdC0+cHJpbnQo c3ByaW50ZihzaGlmdCwgQF8pKSB9Ci0rc3ViIFJFQUQgICAgICB7IHNoaWZ0LT5yZWFkKEBfKSB9 Ci0rc3ViIFJFQURMSU5FICB7IHdhbnRhcnJheSA/IHNoaWZ0LT5nZXRsaW5lcyhAXykgOiBzaGlm dC0+Z2V0bGluZShAXykgfQotK3N1YiBXUklURSAgICAgeyBzaGlmdC0+d3JpdGUoQF8pOyB9Ci0r c3ViIENMT1NFICAgICB7IHNoaWZ0LT5jbG9zZShAXyk7IH0KLStzdWIgU0VFSyAgICAgIHsgc2hp ZnQtPnNlZWsoQF8pOyB9Ci0rc3ViIFRFTEwgICAgICB7IHNoaWZ0LT50ZWxsKEBfKTsgfQotK3N1 YiBFT0YgICAgICAgeyBzaGlmdC0+ZW9mKEBfKTsgfQotKwotKyMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSsxOwotKwotK19f RU5EX18KLSsKLSsKLSsKLSs9YmFjawotKwotKz1jdXQKLSsKLSsKLSs9aGVhZDEgV0FSTklOR1MK LSsKLStQZXJsJ3MgVElFSEFORExFIHNwZWMgd2FzIGluY29tcGxldGUgcHJpb3IgdG8gNS4wMDVf NTc7Ci0raXQgd2FzIG1pc3Npbmcgc3VwcG9ydCBmb3IgQzxzZWVrKCk+LCBDPHRlbGwoKT4sIGFu ZCBDPGVvZigpPi4KLStBdHRlbXB0aW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMgd2l0aCBhbiBJ Tzo6U2NhbGFyIHdpbGwgbm90IHdvcmsKLStwcmlvciB0byA1LjAwNV81Ny4gSU86OlNjYWxhciB3 aWxsIG5vdCBoYXZlIHRoZSByZWxldmFudCBtZXRob2RzCi0raW52b2tlZDsgYW5kIGV2ZW4gd29y c2UsIHRoaXMga2luZCBvZiBidWcgY2FuIGxpZSBkb3JtYW50IGZvciBhIHdoaWxlLgotK0lmIHlv dSB0dXJuIHdhcm5pbmdzIG9uICh2aWEgQzwkXlc+IG9yIEM8cGVybCAtdz4pLAotK2FuZCB5b3Ug c2VlIHNvbWV0aGluZyBsaWtlIHRoaXMuLi4KLSsKLSsgICAgYXR0ZW1wdCB0byBzZWVrIG9uIHVu b3BlbmVkIGZpbGVoYW5kbGUKLSsKLSsuLi50aGVuIHlvdSBhcmUgcHJvYmFibHkgdHJ5aW5nIHRv IHVzZSBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zCi0rb24gYW4gSU86OlNjYWxhciB3aXRoIGFuIG9s ZCBQZXJsLiAgVGhlIHJlbWVkeSBpcyB0byBzaW1wbHkKLSt1c2UgdGhlIE9PIHZlcnNpb247IGUu Zy46Ci0rCi0rICAgICRTSC0+c2VlaygwLDApOyAgICAjIyMgR09PRDogd2lsbCB3b3JrIG9uIGFu eSA1LjAwNQotKyAgICBzZWVrKCRTSCwwLDApOyAgICAgIyMjIFdBUk5JTkc6IHdpbGwgb25seSB3 b3JrIG9uIDUuMDA1XzU3IGFuZCBiZXlvbmQKLSsKLSsKLSs9aGVhZDEgVkVSU0lPTgotKwotKyRJ ZDogU2NhbGFyLnBtLHYgMS42IDIwMDUvMDIvMTAgMjE6MjE6NTMgZGZzIEV4cCAkCi0rCi0rCi0r PWhlYWQxIEFVVEhPUlMKLSsKLSs9aGVhZDIgUHJpbWFyeSBNYWludGFpbmVyCi0rCi0rRGF2aWQg Ri4gU2tvbGwgKEY8ZGZzQHJvYXJpbmdwZW5ndWluLmNvbT4pLgotKwotKz1oZWFkMiBQcmluY2lw YWwgYXV0aG9yCi0rCi0rRXJ5cSAoRjxlcnlxQHplZWdlZS5jb20+KS4KLStQcmVzaWRlbnQsIFpl ZUdlZSBTb2Z0d2FyZSBJbmMgKEY8aHR0cDovL3d3dy56ZWVnZWUuY29tPikuCi0rCi0rCi0rPWhl YWQyIE90aGVyIGNvbnRyaWJ1dG9ycwotKwotK1RoZSBmdWxsIHNldCBvZiBjb250cmlidXRvcnMg YWx3YXlzIGluY2x1ZGVzIHRoZSBmb2xrcyBtZW50aW9uZWQKLStpbiBMPElPOjpTdHJpbmd5LyJD SEFOR0UgTE9HIj4uICBCdXQganVzdCB0aGUgc2FtZSwgc3BlY2lhbAotK3RoYW5rcyB0byB0aGUg Zm9sbG93aW5nIGluZGl2aWR1YWxzIGZvciB0aGVpciBpbnZhbHVhYmxlIGNvbnRyaWJ1dGlvbnMK LSsoaWYgSSd2ZSBmb3Jnb3R0ZW4gb3IgbWlzc3BlbGxlZCB5b3VyIG5hbWUsIHBsZWFzZSBlbWFp bCBtZSEpOgotKwotK0k8QW5keSBHbGV3LD4KLStmb3IgY29udHJpYnV0aW5nIEM8Z2V0YygpPi4K LSsKLStJPEJyYW5kb24gQnJvd25pbmcsPgotK2ZvciBzdWdnZXN0aW5nIEM8b3BlbmVkKCk+Lgot KwotK0k8RGF2aWQgUmljaHRlciw+Ci0rZm9yIGZpbmRpbmcgYW5kIGZpeGluZyB0aGUgYnVnIGlu IEM8UFJJTlRGKCk+LgotKwotK0k8RXJpYyBMLiBCcmluZSw+Ci0rZm9yIGhpcyBvZmZzZXQtdXNp bmcgcmVhZCgpIGFuZCB3cml0ZSgpIGltcGxlbWVudGF0aW9ucy4KLSsKLStJPFJpY2hhcmQgSm9u ZXMsPgotK2ZvciBoaXMgcGF0Y2hlcyB0byBtYXNzaXZlbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFu Y2Ugb2YgQzxnZXRsaW5lKCk+Ci0rYW5kIGFkZCBDPHN5c3JlYWQ+IGFuZCBDPHN5c3dyaXRlPi4K LSsKLStJPEIuIEsuIE94bGV5IChiaW5rbGV5KSw+Ci0rZm9yIHN0cmluZ2lmaWNhdGlvbiBhbmQg aW5oZXJpdGFuY2UgaW1wcm92ZW1lbnRzLAotK2FuZCBzdW5kcnkgZ29vZCBpZGVhcy4KLSsKLStJ PERvdWcgV2lsc29uLD4KLStmb3IgdGhlIElPOjpIYW5kbGUgaW5oZXJpdGFuY2UgYW5kIGF1dG9t YXRpYyB0aWUtaW5nLgotKwotKwotKz1oZWFkMSBTRUUgQUxTTwotKwotK0w8SU86OlN0cmluZz4s IHdoaWNoIGlzIHF1aXRlIHNpbWlsYXIgYnV0IHdoaWNoIHdhcyBkZXNpZ25lZAotK21vcmUtcmVj ZW50bHkgYW5kIHdpdGggYW4gSU86OkhhbmRsZS1saWtlIGludGVyZmFjZSBpbiBtaW5kLAotK3Nv IHlvdSBjb3VsZCBtaXggT08tIGFuZCBuYXRpdmUtZmlsZWhhbmRsZSB1c2FnZSB3aXRob3V0IHVz aW5nIHRpZWQoKS4KLSsKLStJPE5vdGU6PiBhcyBvZiB2ZXJzaW9uIDIueCwgdGhlc2UgY2xhc3Nl cyBhbGwgd29yayBsaWtlCi0rdGhlaXIgSU86OkhhbmRsZSBjb3VudGVycGFydHMsIHNvIHdlIGhh dmUgY29tcGFyYWJsZQotK2Z1bmN0aW9uYWxpdHkgdG8gSU86OlN0cmluZy4KLSsKLSs9Y3V0Ci0r Ci1kaWZmIC1OYXVyIG9sZC90ZXN0X3NpbXBsZV9wYXRjaC9saWIvVGVzdC9CdWlsZGVyL01vZHVs ZS5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9Nb2R1bGUucG0KLS0t LSBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9Nb2R1bGUucG0JMTk3MC0w MS0wMSAxMDowMDowMC4wMDAwMDAwMDAgKzEwMDAKLSsrKyBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gv bGliL1Rlc3QvQnVpbGRlci9Nb2R1bGUucG0JMjAxNC0wMy0yNiAyMTo0ODoxMS41MTAyNTc2MTIg KzExMDAKLUBAIC0wLDAgKzEsMTczIEBACi0rcGFja2FnZSBUZXN0OjpCdWlsZGVyOjpNb2R1bGU7 Ci0rCi0rdXNlIHN0cmljdDsKLSsKLSt1c2UgVGVzdDo6QnVpbGRlciAwLjk5OwotKwotK3JlcXVp cmUgRXhwb3J0ZXI7Ci0rb3VyIEBJU0EgPSBxdyhFeHBvcnRlcik7Ci0rCi0rb3VyICRWRVJTSU9O ID0gJzEuMDAxMDAzJzsKLSskVkVSU0lPTiA9IGV2YWwgJFZFUlNJT047ICAgICAgIyMgbm8gY3Jp dGljIChCdWlsdGluRnVuY3Rpb25zOjpQcm9oaWJpdFN0cmluZ3lFdmFsKQotKwotKwotKz1oZWFk MSBOQU1FCi0rCi0rVGVzdDo6QnVpbGRlcjo6TW9kdWxlIC0gQmFzZSBjbGFzcyBmb3IgdGVzdCBt b2R1bGVzCi0rCi0rPWhlYWQxIFNZTk9QU0lTCi0rCi0rICAjIEVtdWxhdGVzIFRlc3Q6OlNpbXBs ZQotKyAgcGFja2FnZSBZb3VyOjpNb2R1bGU7Ci0rCi0rICBteSAkQ0xBU1MgPSBfX1BBQ0tBR0Vf XzsKLSsKLSsgIHVzZSBiYXNlICdUZXN0OjpCdWlsZGVyOjpNb2R1bGUnOwotKyAgQEVYUE9SVCA9 IHF3KG9rKTsKLSsKLSsgIHN1YiBvayAoJDskKSB7Ci0rICAgICAgbXkgJHRiID0gJENMQVNTLT5i dWlsZGVyOwotKyAgICAgIHJldHVybiAkdGItPm9rKEBfKTsKLSsgIH0KLSsgIAotKyAgMTsKLSsK LSsKLSs9aGVhZDEgREVTQ1JJUFRJT04KLSsKLStUaGlzIGlzIGEgc3VwZXJjbGFzcyBmb3IgVGVz dDo6QnVpbGRlci1iYXNlZCBtb2R1bGVzLiAgSXQgcHJvdmlkZXMgYQotK2hhbmRmdWwgb2YgY29t bW9uIGZ1bmN0aW9uYWxpdHkgYW5kIGEgbWV0aG9kIG9mIGdldHRpbmcgYXQgdGhlIHVuZGVybHlp bmcKLStUZXN0OjpCdWlsZGVyIG9iamVjdC4KLSsKLSsKLSs9aGVhZDIgSW1wb3J0aW5nCi0rCi0r VGVzdDo6QnVpbGRlcjo6TW9kdWxlIGlzIGEgc3ViY2xhc3Mgb2YgRXhwb3J0ZXIgd2hpY2ggbWVh bnMgeW91cgotK21vZHVsZSBpcyBhbHNvIGEgc3ViY2xhc3Mgb2YgRXhwb3J0ZXIuICBARVhQT1JU LCBARVhQT1JUX09LLCBldGMuLi4KLSthbGwgYWN0IG5vcm1hbGx5LgotKwotK0EgZmV3IG1ldGhv ZHMgYXJlIHByb3ZpZGVkIHRvIGRvIHRoZSBDPHVzZSBZb3VyOjpNb2R1bGUgdGVzdHMgPT4gMjM+ IHBhcnQKLStmb3IgeW91LgotKwotKz1oZWFkMyBpbXBvcnQKLSsKLStUZXN0OjpCdWlsZGVyOjpN b2R1bGUgcHJvdmlkZXMgYW4gaW1wb3J0KCkgbWV0aG9kIHdoaWNoIGFjdHMgaW4gdGhlCi0rc2Ft ZSBiYXNpYyB3YXkgYXMgVGVzdDo6TW9yZSdzLCBzZXR0aW5nIHRoZSBwbGFuIGFuZCBjb250cm9s bGluZwotK2V4cG9ydGluZyBvZiBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy4gIFRoaXMgYWxsb3dz IHlvdXIgbW9kdWxlIHRvIHNldAotK3RoZSBwbGFuIGluZGVwZW5kZW50IG9mIFRlc3Q6Ok1vcmUu Ci0rCi0rQWxsIGFyZ3VtZW50cyBwYXNzZWQgdG8gaW1wb3J0KCkgYXJlIHBhc3NlZCBvbnRvIAot K0M8PCBZb3VyOjpNb2R1bGUtPmJ1aWxkZXItPnBsYW4oKSA+PiB3aXRoIHRoZSBleGNlcHRpb24g b2YgCi0rQzw8IGltcG9ydCA9Pltxdyh0aGluZ3MgdG8gaW1wb3J0KV0gPj4uCi0rCi0rICAgIHVz ZSBZb3VyOjpNb2R1bGUgaW1wb3J0ID0+IFtxdyh0aGlzIHRoYXQpXSwgdGVzdHMgPT4gMjM7Ci0r Ci0rc2F5cyB0byBpbXBvcnQgdGhlIGZ1bmN0aW9ucyB0aGlzKCkgYW5kIHRoYXQoKSBhcyB3ZWxs IGFzIHNldCB0aGUgcGxhbgotK3RvIGJlIDIzIHRlc3RzLgotKwotK2ltcG9ydCgpIGFsc28gc2V0 cyB0aGUgZXhwb3J0ZWRfdG8oKSBhdHRyaWJ1dGUgb2YgeW91ciBidWlsZGVyIHRvIGJlCi0rdGhl IGNhbGxlciBvZiB0aGUgaW1wb3J0KCkgZnVuY3Rpb24uCi0rCi0rQWRkaXRpb25hbCBiZWhhdmlv cnMgY2FuIGJlIGFkZGVkIHRvIHlvdXIgaW1wb3J0KCkgbWV0aG9kIGJ5IG92ZXJyaWRpbmcKLStp bXBvcnRfZXh0cmEoKS4KLSsKLSs9Y3V0Ci0rCi0rc3ViIGltcG9ydCB7Ci0rICAgIG15KCRjbGFz cykgPSBzaGlmdDsKLSsKLSsgICAgIyBEb24ndCBydW4gYWxsIHRoaXMgd2hlbiBsb2FkaW5nIG91 cnNlbGYuCi0rICAgIHJldHVybiAxIGlmICRjbGFzcyBlcSAnVGVzdDo6QnVpbGRlcjo6TW9kdWxl JzsKLSsKLSsgICAgbXkgJHRlc3QgPSAkY2xhc3MtPmJ1aWxkZXI7Ci0rCi0rICAgIG15ICRjYWxs ZXIgPSBjYWxsZXI7Ci0rCi0rICAgICR0ZXN0LT5leHBvcnRlZF90bygkY2FsbGVyKTsKLSsKLSsg ICAgJGNsYXNzLT5pbXBvcnRfZXh0cmEoIFxAXyApOwotKyAgICBteShAaW1wb3J0cykgPSAkY2xh c3MtPl9zdHJpcF9pbXBvcnRzKCBcQF8gKTsKLSsKLSsgICAgJHRlc3QtPnBsYW4oQF8pOwotKwot KyAgICAkY2xhc3MtPmV4cG9ydF90b19sZXZlbCggMSwgJGNsYXNzLCBAaW1wb3J0cyApOwotK30K LSsKLStzdWIgX3N0cmlwX2ltcG9ydHMgewotKyAgICBteSAkY2xhc3MgPSBzaGlmdDsKLSsgICAg bXkgJGxpc3QgID0gc2hpZnQ7Ci0rCi0rICAgIG15IEBpbXBvcnRzID0gKCk7Ci0rICAgIG15IEBv dGhlciAgID0gKCk7Ci0rICAgIG15ICRpZHggICAgID0gMDsKLSsgICAgd2hpbGUoICRpZHggPD0g JCN7JGxpc3R9ICkgewotKyAgICAgICAgbXkgJGl0ZW0gPSAkbGlzdC0+WyRpZHhdOwotKwotKyAg ICAgICAgaWYoIGRlZmluZWQgJGl0ZW0gYW5kICRpdGVtIGVxICdpbXBvcnQnICkgewotKyAgICAg ICAgICAgIHB1c2ggQGltcG9ydHMsIEB7ICRsaXN0LT5bICRpZHggKyAxIF0gfTsKLSsgICAgICAg ICAgICAkaWR4Kys7Ci0rICAgICAgICB9Ci0rICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICBw dXNoIEBvdGhlciwgJGl0ZW07Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICAkaWR4Kys7Ci0rICAg IH0KLSsKLSsgICAgQCRsaXN0ID0gQG90aGVyOwotKwotKyAgICByZXR1cm4gQGltcG9ydHM7Ci0r fQotKwotKz1oZWFkMyBpbXBvcnRfZXh0cmEKLSsKLSsgICAgWW91cjo6TW9kdWxlLT5pbXBvcnRf ZXh0cmEoXEBpbXBvcnRfYXJncyk7Ci0rCi0raW1wb3J0X2V4dHJhKCkgaXMgY2FsbGVkIGJ5IGlt cG9ydCgpLiAgSXQgcHJvdmlkZXMgYW4gb3Bwb3J0dW5pdHkgZm9yIHlvdQotK3RvIGFkZCBiZWhh dmlvcnMgdG8geW91ciBtb2R1bGUgYmFzZWQgb24gaXRzIGltcG9ydCBsaXN0LgotKwotK0FueSBl eHRyYSBhcmd1bWVudHMgd2hpY2ggc2hvdWxkbid0IGJlIHBhc3NlZCBvbiB0byBwbGFuKCkgc2hv dWxkIGJlIAotK3N0cmlwcGVkIG9mZiBieSB0aGlzIG1ldGhvZC4KLSsKLStTZWUgVGVzdDo6TW9y ZSBmb3IgYW4gZXhhbXBsZSBvZiBpdHMgdXNlLgotKwotK0I8Tk9URT4gVGhpcyBtZWNoYW5pc20g aXMgSTxWRVJZIEFMUEhBIEFORCBMSUtFTFkgVE8gQ0hBTkdFPiBhcyBpdAotK2ZlZWxzIGxpa2Ug YSBiaXQgb2YgYW4gdWdseSBoYWNrIGluIGl0cyBjdXJyZW50IGZvcm0uCi0rCi0rPWN1dAotKwot K3N1YiBpbXBvcnRfZXh0cmEgeyB9Ci0rCi0rPWhlYWQyIEJ1aWxkZXIKLSsKLStUZXN0OjpCdWls ZGVyOjpNb2R1bGUgcHJvdmlkZXMgc29tZSBtZXRob2RzIG9mIGdldHRpbmcgYXQgdGhlIHVuZGVy bHlpbmcKLStUZXN0OjpCdWlsZGVyIG9iamVjdC4KLSsKLSs9aGVhZDMgYnVpbGRlcgotKwotKyAg bXkgJGJ1aWxkZXIgPSBZb3VyOjpDbGFzcy0+YnVpbGRlcjsKLSsKLStUaGlzIG1ldGhvZCByZXR1 cm5zIHRoZSBUZXN0OjpCdWlsZGVyIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggWW91cjo6Q2xhc3Mu Ci0rSXQgaXMgbm90IGEgY29uc3RydWN0b3Igc28geW91IGNhbiBjYWxsIGl0IGFzIG9mdGVuIGFz IHlvdSBsaWtlLgotKwotK1RoaXMgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gZ2V0IHRoZSBUZXN0 OjpCdWlsZGVyIG9iamVjdC4gIFlvdSBzaG91bGQKLStJPG5vdD4gZ2V0IGl0IHZpYSBDPDwgVGVz dDo6QnVpbGRlci0+bmV3ID4+IGFzIHdhcyBwcmV2aW91c2x5Ci0rcmVjb21tZW5kZWQuCi0rCi0r VGhlIG9iamVjdCByZXR1cm5lZCBieSBidWlsZGVyKCkgbWF5IGNoYW5nZSBhdCBydW50aW1lIHNv IHlvdSBzaG91bGQKLStjYWxsIGJ1aWxkZXIoKSBpbnNpZGUgZWFjaCBmdW5jdGlvbiByYXRoZXIg dGhhbiBzdG9yZSBpdCBpbiBhIGdsb2JhbC4KLSsKLSsgIHN1YiBvayB7Ci0rICAgICAgbXkgJGJ1 aWxkZXIgPSBZb3VyOjpDbGFzcy0+YnVpbGRlcjsKLSsKLSsgICAgICByZXR1cm4gJGJ1aWxkZXIt Pm9rKEBfKTsKLSsgIH0KLSsKLSsKLSs9Y3V0Ci0rCi0rc3ViIGJ1aWxkZXIgewotKyAgICByZXR1 cm4gVGVzdDo6QnVpbGRlci0+bmV3OwotK30KLSsKLSsxOwotZGlmZiAtTmF1ciBvbGQvdGVzdF9z aW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9UZXN0ZXIvQ29sb3IucG0gbmV3L3Rlc3Rfc2lt cGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIvVGVzdGVyL0NvbG9yLnBtCi0tLS0gb2xkL3Rlc3Rf c2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIvVGVzdGVyL0NvbG9yLnBtCTE5NzAtMDEtMDEg MTA6MDA6MDAuMDAwMDAwMDAwICsxMDAwCi0rKysgbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9U ZXN0L0J1aWxkZXIvVGVzdGVyL0NvbG9yLnBtCTIwMTQtMDMtMjYgMjE6NDg6MTEuNTEwMjU3NjEy ICsxMTAwCi1AQCAtMCwwICsxLDUxIEBACi0rcGFja2FnZSBUZXN0OjpCdWlsZGVyOjpUZXN0ZXI6 OkNvbG9yOwotKwotK3VzZSBzdHJpY3Q7Ci0rb3VyICRWRVJTSU9OID0gIjEuMjNfMDAyIjsKLSsK LStyZXF1aXJlIFRlc3Q6OkJ1aWxkZXI6OlRlc3RlcjsKLSsKLSsKLSs9aGVhZDEgTkFNRQotKwot K1Rlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6Q29sb3IgLSB0dXJuIG9uIGNvbG91ciBpbiBUZXN0OjpC dWlsZGVyOjpUZXN0ZXIKLSsKLSs9aGVhZDEgU1lOT1BTSVMKLSsKLSsgICBXaGVuIHJ1bm5pbmcg YSB0ZXN0IHNjcmlwdAotKwotKyAgICAgcGVybCAtTVRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6Q29s b3IgdGVzdC50Ci0rCi0rPWhlYWQxIERFU0NSSVBUSU9OCi0rCi0rSW1wb3J0aW5nIHRoaXMgbW9k dWxlIGNhdXNlcyB0aGUgc3Vicm91dGluZSBjb2xvciBpbiBUZXN0OjpCdWlsZGVyOjpUZXN0ZXIK LSt0byBiZSBjYWxsZWQgd2l0aCBhIHRydWUgdmFsdWUgY2F1c2luZyBjb2xvdXIgaGlnaGxpZ2h0 aW5nIHRvIGJlIHR1cm5lZAotK29uIGluIGRlYnVnIG91dHB1dC4KLSsKLStUaGUgc29sZSBwdXJw b3NlIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGVuYWJsZSBjb2xvdXIgaGlnaGxpZ2h0aW5nCi0rZnJv bSB0aGUgY29tbWFuZCBsaW5lLgotKwotKz1jdXQKLSsKLStzdWIgaW1wb3J0IHsKLSsgICAgVGVz dDo6QnVpbGRlcjo6VGVzdGVyOjpjb2xvcigxKTsKLSt9Ci0rCi0rPWhlYWQxIEFVVEhPUgotKwot K0NvcHlyaWdodCBNYXJrIEZvd2xlciBFPGx0Pm1hcmtAdHdvc2hvcnRwbGFua3MuY29tRTxndD4g MjAwMi4KLSsKLStUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQKLSthbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwg aXRzZWxmLgotKwotKz1oZWFkMSBCVUdTCi0rCi0rVGhpcyBtb2R1bGUgd2lsbCBoYXZlIG5vIGVm ZmVjdCB1bmxlc3MgVGVybTo6QU5TSUNvbG9yIGlzIGluc3RhbGxlZC4KLSsKLSs9aGVhZDEgU0VF IEFMU08KLSsKLStMPFRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcj4sIEw8VGVybTo6QU5TSUNvbG9yPgot KwotKz1jdXQKLSsKLSsxOwotZGlmZiAtTmF1ciBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rl c3QvQnVpbGRlci9UZXN0ZXIucG0gbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxk ZXIvVGVzdGVyLnBtCi0tLS0gb2xkL3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIv VGVzdGVyLnBtCTE5NzAtMDEtMDEgMTA6MDA6MDAuMDAwMDAwMDAwICsxMDAwCi0rKysgbmV3L3Rl c3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIvVGVzdGVyLnBtCTIwMTQtMDMtMjYgMjE6 NDg6MTEuNTExMjU3NjIzICsxMTAwCi1AQCAtMCwwICsxLDYyMCBAQAotK3BhY2thZ2UgVGVzdDo6 QnVpbGRlcjo6VGVzdGVyOwotKwotK3VzZSBzdHJpY3Q7Ci0rb3VyICRWRVJTSU9OID0gIjEuMjNf MDAzIjsKLSsKLSt1c2UgVGVzdDo6QnVpbGRlciAwLjk4OwotK3VzZSBTeW1ib2w7Ci0rdXNlIENh cnA7Ci0rCi0rPWhlYWQxIE5BTUUKLSsKLStUZXN0OjpCdWlsZGVyOjpUZXN0ZXIgLSB0ZXN0IHRl c3RzdWl0ZXMgdGhhdCBoYXZlIGJlZW4gYnVpbHQgd2l0aAotK1Rlc3Q6OkJ1aWxkZXIKLSsKLSs9 aGVhZDEgU1lOT1BTSVMKLSsKLSsgICAgdXNlIFRlc3Q6OkJ1aWxkZXI6OlRlc3RlciB0ZXN0cyA9 PiAxOwotKyAgICB1c2UgVGVzdDo6TW9yZTsKLSsKLSsgICAgdGVzdF9vdXQoIm5vdCBvayAxIC0g Zm9vIik7Ci0rICAgIHRlc3RfZmFpbCgrMSk7Ci0rICAgIGZhaWwoImZvbyIpOwotKyAgICB0ZXN0 X3Rlc3QoImZhaWwgd29ya3MiKTsKLSsKLSs9aGVhZDEgREVTQ1JJUFRJT04KLSsKLStBIG1vZHVs ZSB0aGF0IGhlbHBzIHlvdSB0ZXN0IHRlc3RpbmcgbW9kdWxlcyB0aGF0IGFyZSBidWlsdCB3aXRo Ci0rQjxUZXN0OjpCdWlsZGVyPi4KLSsKLStUaGUgdGVzdGluZyBzeXN0ZW0gaXMgZGVzaWduZWQg dG8gYmUgdXNlZCBieSBwZXJmb3JtaW5nIGEgdGhyZWUgc3RlcAotK3Byb2Nlc3MgZm9yIGVhY2gg dGVzdCB5b3Ugd2lzaCB0byB0ZXN0LiAgVGhpcyBwcm9jZXNzIHN0YXJ0cyB3aXRoIHVzaW5nCi0r Qzx0ZXN0X291dD4gYW5kIEM8dGVzdF9lcnI+IGluIGFkdmFuY2UgdG8gZGVjbGFyZSB3aGF0IHRo ZSB0ZXN0c3VpdGUgeW91Ci0rYXJlIHRlc3Rpbmcgd2lsbCBvdXRwdXQgd2l0aCBCPFRlc3Q6OkJ1 aWxkZXI+IHRvIHN0ZG91dCBhbmQgc3RkZXJyLgotKwotK1lvdSB0aGVuIGNhbiBydW4gdGhlIHRl c3QocykgZnJvbSB5b3VyIHRlc3Qgc3VpdGUgdGhhdCBjYWxsCi0rQjxUZXN0OjpCdWlsZGVyPi4g IEF0IHRoaXMgcG9pbnQgdGhlIG91dHB1dCBvZiBCPFRlc3Q6OkJ1aWxkZXI+IGlzCi0rc2FmZWx5 IGNhcHR1cmVkIGJ5IEI8VGVzdDo6QnVpbGRlcjo6VGVzdGVyPiByYXRoZXIgdGhhbiBiZWluZwot K2ludGVycHJldGVkIGFzIHJlYWwgdGVzdCBvdXRwdXQuCi0rCi0rVGhlIGZpbmFsIHN0YWdlIGlz IHRvIGNhbGwgQzx0ZXN0X3Rlc3Q+IHRoYXQgd2lsbCBzaW1wbHkgY29tcGFyZSB3aGF0IHlvdQot K3ByZWRlY2xhcmVkIHRvIHdoYXQgQjxUZXN0OjpCdWlsZGVyPiBhY3R1YWxseSBvdXRwdXR0ZWQs IGFuZCByZXBvcnQgdGhlCi0rcmVzdWx0cyBiYWNrIHdpdGggYSAib2siIG9yICJub3Qgb2siICh3 aXRoIGRlYnVnZ2luZykgdG8gdGhlIG5vcm1hbAotK291dHB1dC4KLSsKLSs9Y3V0Ci0rCi0rIyMj IwotKyMgc2V0IHVwIHRlc3RpbmcKLSsjIyMjCi0rCi0rbXkgJHQgPSBUZXN0OjpCdWlsZGVyLT5u ZXc7Ci0rCi0rIyMjCi0rIyBtYWtlIHVzIGFuIGV4cG9ydGVyCi0rIyMjCi0rCi0rdXNlIEV4cG9y dGVyOwotK291ciBASVNBID0gcXcoRXhwb3J0ZXIpOwotKwotK291ciBARVhQT1JUID0gcXcodGVz dF9vdXQgdGVzdF9lcnIgdGVzdF9mYWlsIHRlc3RfZGlhZyB0ZXN0X3Rlc3QgbGluZV9udW0pOwot KwotK3N1YiBpbXBvcnQgewotKyAgICBteSAkY2xhc3MgPSBzaGlmdDsKLSsgICAgbXkoQHBsYW4p ID0gQF87Ci0rCi0rICAgIG15ICRjYWxsZXIgPSBjYWxsZXI7Ci0rCi0rICAgICR0LT5leHBvcnRl ZF90bygkY2FsbGVyKTsKLSsgICAgJHQtPnBsYW4oQHBsYW4pOwotKwotKyAgICBteSBAaW1wb3J0 cyA9ICgpOwotKyAgICBmb3JlYWNoIG15ICRpZHggKCAwIC4uICQjcGxhbiApIHsKLSsgICAgICAg IGlmKCAkcGxhblskaWR4XSBlcSAnaW1wb3J0JyApIHsKLSsgICAgICAgICAgICBAaW1wb3J0cyA9 IEB7ICRwbGFuWyAkaWR4ICsgMSBdIH07Ci0rICAgICAgICAgICAgbGFzdDsKLSsgICAgICAgIH0K LSsgICAgfQotKwotKyAgICBfX1BBQ0tBR0VfXy0+ZXhwb3J0X3RvX2xldmVsKCAxLCBfX1BBQ0tB R0VfXywgQGltcG9ydHMgKTsKLSt9Ci0rCi0rIyMjCi0rIyBzZXQgdXAgZmlsZSBoYW5kbGVzCi0r IyMjCi0rCi0rIyBjcmVhdGUgc29tZSBwcml2YXRlIGZpbGUgaGFuZGxlcwotK215ICRvdXRwdXRf aGFuZGxlID0gZ2Vuc3ltOwotK215ICRlcnJvcl9oYW5kbGUgID0gZ2Vuc3ltOwotKwotKyMgYW5k IHRpZSB0aGVtIHRvIHRoaXMgcGFja2FnZQotK215ICRvdXQgPSB0aWUgKiRvdXRwdXRfaGFuZGxl LCAiVGVzdDo6QnVpbGRlcjo6VGVzdGVyOjpUaWUiLCAiU1RET1VUIjsKLStteSAkZXJyID0gdGll ICokZXJyb3JfaGFuZGxlLCAgIlRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6VGllIiwgIlNUREVSUiI7 Ci0rCi0rIyMjIwotKyMgZXhwb3J0ZWQgZnVuY3Rpb25zCi0rIyMjIwotKwotKyMgZm9yIHJlbWVt YmVyaW5nIHRoYXQgd2UncmUgdGVzdGluZyBhbmQgd2hlcmUgd2UncmUgdGVzdGluZyBhdAotK215 ICR0ZXN0aW5nID0gMDsKLStteSAkdGVzdGluZ19udW07Ci0rbXkgJG9yaWdpbmFsX2lzX3Bhc3Np bmc7Ci0rCi0rIyByZW1lbWJlcmluZyB3aGVyZSB0aGUgZmlsZSBoYW5kbGVzIHdlcmUgb3JpZ2lu YWxseSBjb25uZWN0ZWQKLStteSAkb3JpZ2luYWxfb3V0cHV0X2hhbmRsZTsKLStteSAkb3JpZ2lu YWxfZmFpbHVyZV9oYW5kbGU7Ci0rbXkgJG9yaWdpbmFsX3RvZG9faGFuZGxlOwotKwotK215ICRv cmlnaW5hbF9oYXJuZXNzX2VudjsKLSsKLSsjIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRlc3Rpbmcg YW5kIHJlZGlyZWN0cyB0aGUgZmlsZWhhbmRsZXMgZm9yIG5vdwotK3N1YiBfc3RhcnRfdGVzdGlu ZyB7Ci0rICAgICMgZXZlbiBpZiB3ZSdyZSBydW5uaW5nIHVuZGVyIFRlc3Q6Okhhcm5lc3MgcHJl dGVuZCB3ZSdyZSBub3QKLSsgICAgIyBmb3Igbm93LiAgVGhpcyBuZWVkZWQgc28gVGVzdDo6QnVp bGRlciBkb2Vzbid0IGFkZCBleHRyYSBzcGFjZXMKLSsgICAgJG9yaWdpbmFsX2hhcm5lc3NfZW52 ID0gJEVOVntIQVJORVNTX0FDVElWRX0gfHwgMDsKLSsgICAgJEVOVntIQVJORVNTX0FDVElWRX0g PSAwOwotKwotKyAgICAjIHJlbWVtYmVyIHdoYXQgdGhlIGhhbmRsZXMgd2VyZSBzZXQgdG8KLSsg ICAgJG9yaWdpbmFsX291dHB1dF9oYW5kbGUgID0gJHQtPm91dHB1dCgpOwotKyAgICAkb3JpZ2lu YWxfZmFpbHVyZV9oYW5kbGUgPSAkdC0+ZmFpbHVyZV9vdXRwdXQoKTsKLSsgICAgJG9yaWdpbmFs X3RvZG9faGFuZGxlICAgID0gJHQtPnRvZG9fb3V0cHV0KCk7Ci0rCi0rICAgICMgc3dpdGNoIG91 dCB0byBvdXIgb3duIGhhbmRsZXMKLSsgICAgJHQtPm91dHB1dCgkb3V0cHV0X2hhbmRsZSk7Ci0r ICAgICR0LT5mYWlsdXJlX291dHB1dCgkZXJyb3JfaGFuZGxlKTsKLSsgICAgJHQtPnRvZG9fb3V0 cHV0KCRvdXRwdXRfaGFuZGxlKTsKLSsKLSsgICAgIyBjbGVhciB0aGUgZXhwZWN0ZWQgbGlzdAot KyAgICAkb3V0LT5yZXNldCgpOwotKyAgICAkZXJyLT5yZXNldCgpOwotKwotKyAgICAjIHJlbWVt YmVyIHRoYXQgd2UncmUgdGVzdGluZwotKyAgICAkdGVzdGluZyAgICAgPSAxOwotKyAgICAkdGVz dGluZ19udW0gPSAkdC0+Y3VycmVudF90ZXN0OwotKyAgICAkdC0+Y3VycmVudF90ZXN0KDApOwot KyAgICAkb3JpZ2luYWxfaXNfcGFzc2luZyAgPSAkdC0+aXNfcGFzc2luZzsKLSsgICAgJHQtPmlz X3Bhc3NpbmcoMSk7Ci0rCi0rICAgICMgbG9vaywgd2Ugc2hvdWxkbid0IGRvIHRoZSBlbmRpbmcg c3R1ZmYKLSsgICAgJHQtPm5vX2VuZGluZygxKTsKLSt9Ci0rCi0rPWhlYWQyIEZ1bmN0aW9ucwot KwotK1RoZXNlIGFyZSB0aGUgc2l4IG1ldGhvZHMgdGhhdCBhcmUgZXhwb3J0ZWQgYXMgZGVmYXVs dC4KLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gdGVzdF9vdXQKLSsKLSs9aXRlbSB0ZXN0X2Vycgot KwotK1Byb2NlZHVyZXMgZm9yIHByZWRlY2xhcmluZyB0aGUgb3V0cHV0IHRoYXQgeW91ciB0ZXN0 IHN1aXRlIGlzCi0rZXhwZWN0ZWQgdG8gcHJvZHVjZSB1bnRpbCBDPHRlc3RfdGVzdD4gaXMgY2Fs bGVkLiAgVGhlc2UgcHJvY2VkdXJlcwotK2F1dG9tYXRpY2FsbHkgYXNzdW1lIHRoYXQgZWFjaCBs aW5lIHRlcm1pbmF0ZXMgd2l0aCAiXG4iLiAgU28KLSsKLSsgICB0ZXN0X291dCgib2sgMSIsIm9r IDIiKTsKLSsKLStpcyB0aGUgc2FtZSBhcwotKwotKyAgIHRlc3Rfb3V0KCJvayAxXG5vayAyIik7 Ci0rCi0rd2hpY2ggaXMgZXZlbiB0aGUgc2FtZSBhcwotKwotKyAgIHRlc3Rfb3V0KCJvayAxIik7 Ci0rICAgdGVzdF9vdXQoIm9rIDIiKTsKLSsKLStPbmNlIEM8dGVzdF9vdXQ+IG9yIEM8dGVzdF9l cnI+IChvciBDPHRlc3RfZmFpbD4gb3IgQzx0ZXN0X2RpYWc+KSBoYXZlCi0rYmVlbiBjYWxsZWQs IGFsbCBmdXJ0aGVyIG91dHB1dCBmcm9tIEI8VGVzdDo6QnVpbGRlcj4gd2lsbCBiZQotK2NhcHR1 cmVkIGJ5IEI8VGVzdDo6QnVpbGRlcjo6VGVzdGVyPi4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2ls bCBub3QKLStiZSBhYmxlIHBlcmZvcm0gZnVydGhlciB0ZXN0cyB0byB0aGUgbm9ybWFsIG91dHB1 dCBpbiB0aGUgbm9ybWFsIHdheQotK3VudGlsIHlvdSBjYWxsIEM8dGVzdF90ZXN0PiAod2VsbCwg dW5sZXNzIHlvdSBtYW51YWxseSBtZWRkbGUgd2l0aCB0aGUKLStvdXRwdXQgZmlsZWhhbmRsZXMp Ci0rCi0rPWN1dAotKwotK3N1YiB0ZXN0X291dCB7Ci0rICAgICMgZG8gd2UgbmVlZCB0byBkbyBh bnkgc2V0dXA/Ci0rICAgIF9zdGFydF90ZXN0aW5nKCkgdW5sZXNzICR0ZXN0aW5nOwotKwotKyAg ICAkb3V0LT5leHBlY3QoQF8pOwotK30KLSsKLStzdWIgdGVzdF9lcnIgewotKyAgICAjIGRvIHdl IG5lZWQgdG8gZG8gYW55IHNldHVwPwotKyAgICBfc3RhcnRfdGVzdGluZygpIHVubGVzcyAkdGVz dGluZzsKLSsKLSsgICAgJGVyci0+ZXhwZWN0KEBfKTsKLSt9Ci0rCi0rPWl0ZW0gdGVzdF9mYWls Ci0rCi0rQmVjYXVzZSB0aGUgc3RhbmRhcmQgZmFpbHVyZSBtZXNzYWdlIHRoYXQgQjxUZXN0OjpC dWlsZGVyPiBwcm9kdWNlcwotK3doZW5ldmVyIGEgdGVzdCBmYWlscyB3aWxsIGJlIGEgY29tbW9u IG9jY3VycmVuY2UgaW4geW91ciB0ZXN0IGVycm9yCi0rb3V0cHV0LCBhbmQgYmVjYXVzZSBpdCBo YXMgY2hhbmdlZCBiZXR3ZWVuIFRlc3Q6OkJ1aWxkZXIgdmVyc2lvbnMsIHJhdGhlcgotK3RoYW4g Zm9yY2luZyB5b3UgdG8gY2FsbCBDPHRlc3RfZXJyPiB3aXRoIHRoZSBzdHJpbmcgYWxsIHRoZSB0 aW1lIGxpa2UKLStzbwotKwotKyAgICB0ZXN0X2VycigiIyBGYWlsZWQgdGVzdCAoJDAgYXQgbGlu ZSAiLmxpbmVfbnVtKCsxKS4iKSIpOwotKwotK0M8dGVzdF9mYWlsPiBleGlzdHMgYXMgYSBjb252 ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQKLStpbnN0ZWFkLiAgSXQgdGFrZXMg b25lIGFyZ3VtZW50LCB0aGUgb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQgbGluZSB0aGF0Ci0rdGhl IGxpbmUgdGhhdCBjYXVzZXMgdGhlIGZhaWwgaXMgb24uCi0rCi0rICAgIHRlc3RfZmFpbCgrMSk7 Ci0rCi0rVGhpcyBtZWFucyB0aGF0IHRoZSBleGFtcGxlIGluIHRoZSBzeW5vcHNpcyBjb3VsZCBi ZSByZXdyaXR0ZW4KLSttb3JlIHNpbXBseSBhczoKLSsKLSsgICB0ZXN0X291dCgibm90IG9rIDEg LSBmb28iKTsKLSsgICB0ZXN0X2ZhaWwoKzEpOwotKyAgIGZhaWwoImZvbyIpOwotKyAgIHRlc3Rf dGVzdCgiZmFpbCB3b3JrcyIpOwotKwotKz1jdXQKLSsKLStzdWIgdGVzdF9mYWlsIHsKLSsgICAg IyBkbyB3ZSBuZWVkIHRvIGRvIGFueSBzZXR1cD8KLSsgICAgX3N0YXJ0X3Rlc3RpbmcoKSB1bmxl c3MgJHRlc3Rpbmc7Ci0rCi0rICAgICMgd29yayBvdXQgd2hhdCBsaW5lIHdlIHNob3VsZCBiZSBv bgotKyAgICBteSggJHBhY2thZ2UsICRmaWxlbmFtZSwgJGxpbmUgKSA9IGNhbGxlcjsKLSsgICAg JGxpbmUgPSAkbGluZSArICggc2hpZnQoKSB8fCAwICk7ICAgICMgcHJldmVudCB3YXJuaW5ncwot KwotKyAgICAjIGV4cGVjdCB0aGF0IG9uIHN0ZGVycgotKyAgICAkZXJyLT5leHBlY3QoIiMgICAg IEZhaWxlZCB0ZXN0ICgkZmlsZW5hbWUgYXQgbGluZSAkbGluZSkiKTsKLSt9Ci0rCi0rPWl0ZW0g dGVzdF9kaWFnCi0rCi0rQXMgbW9zdCBvZiB0aGUgcmVtYWluaW5nIGV4cGVjdGVkIG91dHB1dCB0 byB0aGUgZXJyb3Igc3RyZWFtIHdpbGwgYmUKLStjcmVhdGVkIGJ5IFRlc3Q6OkJ1aWxkZXIncyBD PGRpYWc+IGZ1bmN0aW9uLCBCPFRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcj4KLStwcm92aWRlcyBhIGNv bnZlbmllbmNlIGZ1bmN0aW9uIEM8dGVzdF9kaWFnPiB0aGF0IHlvdSBjYW4gdXNlIGluc3RlYWQg b2YKLStDPHRlc3RfZXJyPi4KLSsKLStUaGUgQzx0ZXN0X2RpYWc+IGZ1bmN0aW9uIHByZXBlbmRz IGNvbW1lbnQgaGFzaGVzIGFuZCBzcGFjaW5nIHRvIHRoZQotK3N0YXJ0IGFuZCBuZXdsaW5lcyB0 byB0aGUgZW5kIG9mIHRoZSBleHBlY3RlZCBvdXRwdXQgcGFzc2VkIHRvIGl0IGFuZAotK2FkZHMg aXQgdG8gdGhlIGxpc3Qgb2YgZXhwZWN0ZWQgZXJyb3Igb3V0cHV0LiAgU28sIGluc3RlYWQgb2Yg d3JpdGluZwotKwotKyAgIHRlc3RfZXJyKCIjIENvdWxkbid0IG9wZW4gZmlsZSIpOwotKwotK3lv dSBjYW4gd3JpdGUKLSsKLSsgICB0ZXN0X2RpYWcoIkNvdWxkbid0IG9wZW4gZmlsZSIpOwotKwot K1JlbWVtYmVyIHRoYXQgQjxUZXN0OjpCdWlsZGVyPidzIGRpYWcgZnVuY3Rpb24gd2lsbCBub3Qg YWRkIG5ld2xpbmVzIHRvCi0rdGhlIGVuZCBvZiBvdXRwdXQgYW5kIHRlc3RfZGlhZyB3aWxsLiBT byB0byBjaGVjawotKwotKyAgIFRlc3Q6OkJ1aWxkZXItPm5ldy0+ZGlhZygiZm9vXG4iLCJiYXJc biIpOwotKwotK1lvdSB3b3VsZCBkbwotKwotKyAgdGVzdF9kaWFnKCJmb28iLCJiYXIiKQotKwot K3dpdGhvdXQgdGhlIG5ld2xpbmVzLgotKwotKz1jdXQKLSsKLStzdWIgdGVzdF9kaWFnIHsKLSsg ICAgIyBkbyB3ZSBuZWVkIHRvIGRvIGFueSBzZXR1cD8KLSsgICAgX3N0YXJ0X3Rlc3RpbmcoKSB1 bmxlc3MgJHRlc3Rpbmc7Ci0rCi0rICAgICMgZXhwZWN0IHRoZSBzYW1lIHRoaW5nLCBidXQgcHJl cGVuZGVkIHdpdGggIiMgICAgICIKLSsgICAgbG9jYWwgJF87Ci0rICAgICRlcnItPmV4cGVjdCgg bWFwIHsgIiMgJF8iIH0gQF8gKTsKLSt9Ci0rCi0rPWl0ZW0gdGVzdF90ZXN0Ci0rCi0rQWN0dWFs bHkgcGVyZm9ybXMgdGhlIG91dHB1dCBjaGVjayB0ZXN0aW5nIHRoZSB0ZXN0cywgY29tcGFyaW5n IHRoZQotK2RhdGEgKHdpdGggQzxlcT4pIHRoYXQgd2UgaGF2ZSBjYXB0dXJlZCBmcm9tIEI8VGVz dDo6QnVpbGRlcj4gYWdhaW5zdAotK3doYXQgd2FzIGRlY2xhcmVkIHdpdGggQzx0ZXN0X291dD4g YW5kIEM8dGVzdF9lcnI+LgotKwotK1RoaXMgdGFrZXMgbmFtZS92YWx1ZSBwYWlycyB0aGF0IGVm ZmVjdCBob3cgdGhlIHRlc3QgaXMgcnVuLgotKwotKz1vdmVyCi0rCi0rPWl0ZW0gdGl0bGUgKHN5 bm9ueW0gJ25hbWUnLCAnbGFiZWwnKQotKwotK1RoZSBuYW1lIG9mIHRoZSB0ZXN0IHRoYXQgd2ls bCBiZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIEM8b2s+IG9yIEM8bm90Ci0rb2s+LgotKwotKz1pdGVt IHNraXBfb3V0Ci0rCi0rU2V0dGluZyB0aGlzIHRvIGEgdHJ1ZSB2YWx1ZSB3aWxsIGNhdXNlIHRo ZSB0ZXN0IHRvIGlnbm9yZSBpZiB0aGUKLStvdXRwdXQgc2VudCBieSB0aGUgdGVzdCB0byB0aGUg b3V0cHV0IHN0cmVhbSBkb2VzIG5vdCBtYXRjaCB0aGF0Ci0rZGVjbGFyZWQgd2l0aCBDPHRlc3Rf b3V0Pi4KLSsKLSs9aXRlbSBza2lwX2VycgotKwotK1NldHRpbmcgdGhpcyB0byBhIHRydWUgdmFs dWUgd2lsbCBjYXVzZSB0aGUgdGVzdCB0byBpZ25vcmUgaWYgdGhlCi0rb3V0cHV0IHNlbnQgYnkg dGhlIHRlc3QgdG8gdGhlIGVycm9yIHN0cmVhbSBkb2VzIG5vdCBtYXRjaCB0aGF0Ci0rZGVjbGFy ZWQgd2l0aCBDPHRlc3RfZXJyPi4KLSsKLSs9YmFjawotKwotK0FzIGEgY29udmVuaWVuY2UsIGlm IG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZCB0aGVuIHRoaXMgYXJndW1lbnQKLStpcyBhc3N1 bWVkIHRvIGJlIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IChhcyBpbiB0aGUgYWJvdmUgZXhhbXBsZXMu KQotKwotK09uY2UgQzx0ZXN0X3Rlc3Q+IGhhcyBiZWVuIHJ1biB0ZXN0IG91dHB1dCB3aWxsIGJl IHJlZGlyZWN0ZWQgYmFjayB0bwotK3RoZSBvcmlnaW5hbCBmaWxlaGFuZGxlcyB0aGF0IEI8VGVz dDo6QnVpbGRlcj4gd2FzIGNvbm5lY3RlZCB0bwotKyhwcm9iYWJseSBTVERPVVQgYW5kIFNUREVS UiwpIG1lYW5pbmcgYW55IGZ1cnRoZXIgdGVzdHMgeW91IHJ1bgotK3dpbGwgZnVuY3Rpb24gbm9y bWFsbHkgYW5kIGNhdXNlIHN1Y2Nlc3MvZXJyb3JzIGZvciBCPFRlc3Q6Okhhcm5lc3M+LgotKwot Kz1jdXQKLSsKLStzdWIgdGVzdF90ZXN0IHsKLSsgICAgIyBkZWNvZGUgdGhlIGFyZ3VtZW50cyBh cyBkZXNjcmliZWQgaW4gdGhlIHBvZAotKyAgICBteSAkbWVzczsKLSsgICAgbXkgJWFyZ3M7Ci0r ICAgIGlmKCBAXyA9PSAxICkgewotKyAgICAgICAgJG1lc3MgPSBzaGlmdAotKyAgICB9Ci0rICAg IGVsc2UgewotKyAgICAgICAgJWFyZ3MgPSBAXzsKLSsgICAgICAgICRtZXNzID0gJGFyZ3N7bmFt ZX0gaWYgZXhpc3RzKCAkYXJnc3tuYW1lfSApOwotKyAgICAgICAgJG1lc3MgPSAkYXJnc3t0aXRs ZX0gaWYgZXhpc3RzKCAkYXJnc3t0aXRsZX0gKTsKLSsgICAgICAgICRtZXNzID0gJGFyZ3N7bGFi ZWx9IGlmIGV4aXN0cyggJGFyZ3N7bGFiZWx9ICk7Ci0rICAgIH0KLSsKLSsgICAgIyBlciwgYXJl IHdlIHRlc3Rpbmc/Ci0rICAgIGNyb2FrICJOb3QgdGVzdGluZy4gIFlvdSBtdXN0IGRlY2xhcmUg b3V0cHV0IHdpdGggYSB0ZXN0IGZ1bmN0aW9uIGZpcnN0LiIKLSsgICAgICB1bmxlc3MgJHRlc3Rp bmc7Ci0rCi0rICAgICMgb2theSwgcmVjb25uZWN0IHRoZSB0ZXN0IHN1aXRlIGJhY2sgdG8gdGhl IHNhdmVkIGhhbmRsZXMKLSsgICAgJHQtPm91dHB1dCgkb3JpZ2luYWxfb3V0cHV0X2hhbmRsZSk7 Ci0rICAgICR0LT5mYWlsdXJlX291dHB1dCgkb3JpZ2luYWxfZmFpbHVyZV9oYW5kbGUpOwotKyAg ICAkdC0+dG9kb19vdXRwdXQoJG9yaWdpbmFsX3RvZG9faGFuZGxlKTsKLSsKLSsgICAgIyByZXN0 b3JlIHRoZSB0ZXN0IG5vLCBldGMsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHBvaW50Ci0rICAgICR0 LT5jdXJyZW50X3Rlc3QoJHRlc3RpbmdfbnVtKTsKLSsgICAgJHRlc3RpbmcgPSAwOwotKyAgICAk dC0+aXNfcGFzc2luZygkb3JpZ2luYWxfaXNfcGFzc2luZyk7Ci0rCi0rICAgICMgcmUtZW5hYmxl IHRoZSBvcmlnaW5hbCBzZXR0aW5nIG9mIHRoZSBoYXJuZXNzCi0rICAgICRFTlZ7SEFSTkVTU19B Q1RJVkV9ID0gJG9yaWdpbmFsX2hhcm5lc3NfZW52OwotKwotKyAgICAjIGNoZWNrIHRoZSBvdXRw dXQgd2UndmUgc3Rhc2hlZAotKyAgICB1bmxlc3MoICR0LT5vayggKCAkYXJnc3tza2lwX291dH0g fHwgJG91dC0+Y2hlY2sgKSAmJgotKyAgICAgICAgICAgICAgICAgICAgKCAkYXJnc3tza2lwX2Vy cn0gfHwgJGVyci0+Y2hlY2sgKSwgJG1lc3MgKSAKLSsgICAgKQotKyAgICB7Ci0rICAgICAgICAj IHByaW50IG91dCB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhpcwotKyAg ICAgICAgIyB0ZXN0IGZhaWxlZAotKwotKyAgICAgICAgbG9jYWwgJF87Ci0rCi0rICAgICAgICAk dC0+ZGlhZyggbWFwIHsgIiRfXG4iIH0gJG91dC0+Y29tcGxhaW50ICkKLSsgICAgICAgICAgdW5s ZXNzICRhcmdze3NraXBfb3V0fSB8fCAkb3V0LT5jaGVjazsKLSsKLSsgICAgICAgICR0LT5kaWFn KCBtYXAgeyAiJF9cbiIgfSAkZXJyLT5jb21wbGFpbnQgKQotKyAgICAgICAgICB1bmxlc3MgJGFy Z3N7c2tpcF9lcnJ9IHx8ICRlcnItPmNoZWNrOwotKyAgICB9Ci0rfQotKwotKz1pdGVtIGxpbmVf bnVtCi0rCi0rQSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbGluZSBudW1iZXIg dGhhdCB0aGUgZnVuY3Rpb24gd2FzCi0rY2FsbGVkIG9uLiAgWW91IGNhbiBwYXNzIGl0IGFuIG9m ZnNldCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZQotK3Jlc3VsdC4gIFRoaXMgaXMgdmVyeSB1 c2VmdWwgZm9yIHdvcmtpbmcgb3V0IHRoZSBjb3JyZWN0IHRleHQgb2YKLStkaWFnbm9zdGljIGZ1 bmN0aW9ucyB0aGF0IGNvbnRhaW4gbGluZSBudW1iZXJzLgotKwotK0Vzc2VudGlhbGx5IHRoaXMg aXMgdGhlIHNhbWUgYXMgdGhlIEM8X19MSU5FX18+IG1hY3JvLCBidXQgdGhlCi0rQzxsaW5lX251 bSgrMyk+IGlkaW9tIGlzIGFyZ3VhYmx5IG5pY2VyLgotKwotKz1jdXQKLSsKLStzdWIgbGluZV9u dW0gewotKyAgICBteSggJHBhY2thZ2UsICRmaWxlbmFtZSwgJGxpbmUgKSA9IGNhbGxlcjsKLSsg ICAgcmV0dXJuICRsaW5lICsgKCBzaGlmdCgpIHx8IDAgKTsgICAgIyBwcmV2ZW50IHdhcm5pbmdz Ci0rfQotKwotKz1iYWNrCi0rCi0rSW4gYWRkaXRpb24gdG8gdGhlIHNpeCBleHBvcnRlZCBmdW5j dGlvbnMgdGhlcmUgZXhpc3RzIG9uZQotK2Z1bmN0aW9uIHRoYXQgY2FuIG9ubHkgYmUgYWNjZXNz ZWQgd2l0aCBhIGZ1bGx5IHF1YWxpZmllZCBmdW5jdGlvbgotK2NhbGwuCi0rCi0rPW92ZXIgNAot KwotKz1pdGVtIGNvbG9yCi0rCi0rV2hlbiBDPHRlc3RfdGVzdD4gaXMgY2FsbGVkIGFuZCB0aGUg b3V0cHV0IHRoYXQgeW91ciB0ZXN0cyBnZW5lcmF0ZQotK2RvZXMgbm90IG1hdGNoIHRoYXQgd2hp Y2ggeW91IGRlY2xhcmVkLCBDPHRlc3RfdGVzdD4gd2lsbCBwcmludCBvdXQKLStkZWJ1ZyBpbmZv cm1hdGlvbiBzaG93aW5nIHRoZSB0d28gY29uZmxpY3RpbmcgdmVyc2lvbnMuICBBcyB0aGlzCi0r b3V0cHV0IGl0c2VsZiBpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBpdCBjYW4gYmUgY29uZnVzaW5nIHdo aWNoIHBhcnQgb2YKLSt0aGUgb3V0cHV0IGlzIGZyb20gQzx0ZXN0X3Rlc3Q+IGFuZCB3aGljaCB3 YXMgdGhlIG9yaWdpbmFsIG91dHB1dCBmcm9tCi0reW91ciBvcmlnaW5hbCB0ZXN0cy4gIEFsc28s IGl0IG1heSBiZSBoYXJkIHRvIHNwb3QgdGhpbmdzIGxpa2UKLStleHRyYW5lb3VzIHdoaXRlc3Bh Y2UgYXQgdGhlIGVuZCBvZiBsaW5lcyB0aGF0IG1heSBjYXVzZSB5b3VyIHRlc3QgdG8KLStmYWls IGV2ZW4gdGhvdWdoIHRoZSBvdXRwdXQgbG9va3Mgc2ltaWxhci4KLSsKLStUbyBhc3Npc3QgeW91 IEM8dGVzdF90ZXN0PiBjYW4gY29sb3VyIHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkZWJ1ZwotK2lu Zm9ybWF0aW9uIHRvIGRpc2FtYmlndWF0ZSB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1dC4g VGhlIGRlYnVnCi0rb3V0cHV0IHdpbGwgaGF2ZSBpdHMgYmFja2dyb3VuZCBjb2xvdXJlZCBncmVl biBhbmQgcmVkLiAgVGhlIGdyZWVuCi0rcGFydCByZXByZXNlbnRzIHRoZSB0ZXh0IHdoaWNoIGlz IHRoZSBzYW1lIGJldHdlZW4gdGhlIGV4ZWN1dGVkIGFuZAotK2FjdHVhbCBvdXRwdXQsIHRoZSBy ZWQgc2hvd3Mgd2hpY2ggcGFydCBkaWZmZXJzLgotKwotK1RoZSBDPGNvbG9yPiBmdW5jdGlvbiBk ZXRlcm1pbmVzIGlmIGNvbG91cmluZyBzaG91bGQgb2NjdXIgb3Igbm90LgotK1Bhc3NpbmcgaXQg YSB0cnVlIG9yIGZhbHNlIHZhbHVlIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgY29sb3VyaW5nCi0r cmVzcGVjdGl2ZWx5LCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50IHdp bGwgcmV0dXJuIHRoZQotK2N1cnJlbnQgc2V0dGluZy4KLSsKLStUbyBlbmFibGUgY29sb3VyaW5n IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgeW91IGNhbiB1c2UgdGhlCi0rQjxUZXh0OjpCdWlsZGVy OjpUZXN0ZXI6OkNvbG9yPiBtb2R1bGUgbGlrZSBzbzoKLSsKLSsgICBwZXJsIC1NbGliPVRleHQ6 OkJ1aWxkZXI6OlRlc3Rlcjo6Q29sb3IgdGVzdC50Ci0rCi0rT3IgYnkgaW5jbHVkaW5nIHRoZSBC PFRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6Q29sb3I+IG1vZHVsZSBkaXJlY3RseSBpbgotK3RoZSBQ RVJMNUxJQi4KLSsKLSs9Y3V0Ci0rCi0rbXkgJGNvbG9yOwotKwotK3N1YiBjb2xvciB7Ci0rICAg ICRjb2xvciA9IHNoaWZ0IGlmIEBfOwotKyAgICAkY29sb3I7Ci0rfQotKwotKz1iYWNrCi0rCi0r PWhlYWQxIEJVR1MKLSsKLStDYWxscyBDPDxUZXN0OjpCdWlsZGVyLT5ub19lbmRpbmc+PiB0dXJu aW5nIG9mZiB0aGUgZW5kaW5nIHRlc3RzLgotK1RoaXMgaXMgbmVlZGVkIGFzIG90aGVyd2lzZSBp dCB3aWxsIHRyaXAgb3V0IGJlY2F1c2Ugd2UndmUgcnVuIG1vcmUKLSt0ZXN0cyB0aGFuIHdlIHN0 cmljdGx5IHNob3VsZCBoYXZlIGFuZCBpdCdsbCByZWdpc3RlciBhbnkgZmFpbHVyZXMgd2UKLSto YWQgdGhhdCB3ZSB3ZXJlIHRlc3RpbmcgZm9yIGFzIHJlYWwgZmFpbHVyZXMuCi0rCi0rVGhlIGNv bG9yIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayB1bmxlc3MgQjxUZXJtOjpBTlNJQ29sb3I+IGlzCi0r Y29tcGF0aWJsZSB3aXRoIHlvdXIgdGVybWluYWwuCi0rCi0rQnVncyAoYW5kIHJlcXVlc3RzIGZv ciBuZXcgZmVhdHVyZXMpIGNhbiBiZSByZXBvcnRlZCB0byB0aGUgYXV0aG9yCi0rdGhvdWdoIHRo ZSBDUEFOIFJUIHN5c3RlbToKLStMPGh0dHA6Ly9ydC5jcGFuLm9yZy9Ob0F1dGgvUmVwb3J0QnVn Lmh0bWw/UXVldWU9VGVzdC1CdWlsZGVyLVRlc3Rlcj4KLSsKLSs9aGVhZDEgQVVUSE9SCi0rCi0r Q29weXJpZ2h0IE1hcmsgRm93bGVyIEU8bHQ+bWFya0B0d29zaG9ydHBsYW5rcy5jb21FPGd0PiAy MDAyLCAyMDA0LgotKwotK1NvbWUgY29kZSB0YWtlbiBmcm9tIEI8VGVzdDo6TW9yZT4gYW5kIEI8 VGVzdDo6Q2F0Y2g+LCB3cml0dGVuIGJ5Ci0rTWljaGFlbCBHIFNjaHdlcm4gRTxsdD5zY2h3ZXJu QHBvYm94LmNvbUU8Z3Q+LiAgSGVuY2UsIHRob3NlIHBhcnRzCi0rQ29weXJpZ2h0IE1pY2hlYWwg RyBTY2h3ZXJuIDIwMDEuICBVc2VkIGFuZCBkaXN0cmlidXRlZCB3aXRoCi0rcGVybWlzc2lvbi4K LSsKLStUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQKLSthbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxm LgotKwotKz1oZWFkMSBNQUlOVEFJTkVSUwotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBDaGFkIEdy YW51bSBFPGx0PmV4b2Rpc3RAY3Bhbi5vcmdFPGd0PgotKwotKz1iYWNrCi0rCi0rPWhlYWQxIE5P VEVTCi0rCi0rVGhhbmtzIHRvIFJpY2hhcmQgQ2xhbXAgRTxsdD5yaWNoYXJkY0B1bml4YmVhcmQu bmV0RTxndD4gZm9yIGxldHRpbmcKLSttZSB1c2UgaGlzIHRlc3Rpbmcgc3lzdGVtIHRvIHRyeSB0 aGlzIG1vZHVsZSBvdXQgb24uCi0rCi0rPWhlYWQxIFNFRSBBTFNPCi0rCi0rTDxUZXN0OjpCdWls ZGVyPiwgTDxUZXN0OjpCdWlsZGVyOjpUZXN0ZXI6OkNvbG9yPiwgTDxUZXN0OjpNb3JlPi4KLSsK LSs9Y3V0Ci0rCi0rMTsKLSsKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotKyMgSGVscGVyIGNsYXNzIHRoYXQgaXMg dXNlZCB0byByZW1lbWJlciBleHBlY3RlZCBhbmQgcmVjZWl2ZWQgZGF0YQotKwotK3BhY2thZ2Ug VGVzdDo6QnVpbGRlcjo6VGVzdGVyOjpUaWU7Ci0rCi0rIyMKLSsjIGFkZCBsaW5lKHMpIHRvIGJl IGV4cGVjdGVkCi0rCi0rc3ViIGV4cGVjdCB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rCi0r ICAgIG15IEBjaGVja3MgPSBAXzsKLSsgICAgZm9yZWFjaCBteSAkY2hlY2sgKEBjaGVja3MpIHsK LSsgICAgICAgICRjaGVjayA9ICRzZWxmLT5fYWNjb3VudF9mb3Jfc3VidGVzdCgkY2hlY2spOwot KyAgICAgICAgJGNoZWNrID0gJHNlbGYtPl90cmFuc2xhdGVfRmFpbGVkX2NoZWNrKCRjaGVjayk7 Ci0rICAgICAgICBwdXNoIEB7ICRzZWxmLT57d2FudGVkfSB9LCByZWYgJGNoZWNrID8gJGNoZWNr IDogIiRjaGVja1xuIjsKLSsgICAgfQotK30KLSsKLStzdWIgX2FjY291bnRfZm9yX3N1YnRlc3Qg ewotKyAgICBteSggJHNlbGYsICRjaGVjayApID0gQF87Ci0rCi0rICAgICMgU2luY2Ugd2Ugc2hp cCB3aXRoIFRlc3Q6OkJ1aWxkZXIsIGNhbGxpbmcgYSBwcml2YXRlIG1ldGhvZCBpcyBzYWZlLi4u aXNoLgotKyAgICByZXR1cm4gcmVmKCRjaGVjaykgPyAkY2hlY2sgOiAkdC0+X2luZGVudCAuICRj aGVjazsKLSt9Ci0rCi0rc3ViIF90cmFuc2xhdGVfRmFpbGVkX2NoZWNrIHsKLSsgICAgbXkoICRz ZWxmLCAkY2hlY2sgKSA9IEBfOwotKwotKyAgICBpZiggJGNoZWNrID1+IC9cQSguKikjICAgICAo RmFpbGVkIC4qdGVzdCkgXCgoLio/KSBhdCBsaW5lIChcZCspXClcWig/IVxuKS8gKSB7Ci0rICAg ICAgICAkY2hlY2sgPSAiL1xRJDFcRSNcXHMrXFEkMlxFLio/XFxuPy4qP1xRYXQgJDNcRSBsaW5l IFxRJDRcRS4qXFxuPy8iOwotKyAgICB9Ci0rCi0rICAgIHJldHVybiAkY2hlY2s7Ci0rfQotKwot KyMjCi0rIyByZXR1cm4gdHJ1ZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgbWF0Y2hlcyB0aGUgZ290 IGRhdGEKLSsKLStzdWIgY2hlY2sgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKwotKyAgICAj IHR1cm4gb2ZmIHdhcm5pbmdzIGFzIHRoZXNlIG1pZ2h0IGJlIHVuZGVmCi0rICAgIGxvY2FsICRe VyA9IDA7Ci0rCi0rICAgIG15IEBjaGVja3MgPSBAeyAkc2VsZi0+e3dhbnRlZH0gfTsKLSsgICAg bXkgJGdvdCAgICA9ICRzZWxmLT57Z290fTsKLSsgICAgZm9yZWFjaCBteSAkY2hlY2sgKEBjaGVj a3MpIHsKLSsgICAgICAgICRjaGVjayA9ICJcUSRjaGVja1xFIiB1bmxlc3MoICRjaGVjayA9fiBz LF4vKC4qKS8kLCQxLCBvciByZWYgJGNoZWNrICk7Ci0rICAgICAgICByZXR1cm4gMCB1bmxlc3Mg JGdvdCA9fiBzL14kY2hlY2svLzsKLSsgICAgfQotKwotKyAgICByZXR1cm4gbGVuZ3RoICRnb3Qg PT0gMDsKLSt9Ci0rCi0rIyMKLSsjIGEgY29tcGxhaW50IG1lc3NhZ2UgYWJvdXQgdGhlIGlucHV0 cyBub3QgbWF0Y2hpbmcgKHRvIGJlCi0rIyB1c2VkIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMpCi0r Ci0rc3ViIGNvbXBsYWludCB7Ci0rICAgIG15ICRzZWxmICAgPSBzaGlmdDsKLSsgICAgbXkgJHR5 cGUgICA9ICRzZWxmLT50eXBlOwotKyAgICBteSAkZ290ICAgID0gJHNlbGYtPmdvdDsKLSsgICAg bXkgJHdhbnRlZCA9IGpvaW4gJycsIEB7ICRzZWxmLT53YW50ZWQgfTsKLSsKLSsgICAgIyBhcmUg d2UgcnVubmluZyBpbiBjb2xvdXIgbW9kZT8KLSsgICAgaWYoVGVzdDo6QnVpbGRlcjo6VGVzdGVy Ojpjb2xvcikgewotKyAgICAgICAgIyBnZXQgY29sb3IKLSsgICAgICAgIGV2YWwgeyByZXF1aXJl IFRlcm06OkFOU0lDb2xvciB9OwotKyAgICAgICAgdW5sZXNzKCRAKSB7Ci0rICAgICAgICAgICAg IyBjb2xvdXJzCi0rCi0rICAgICAgICAgICAgbXkgJGdyZWVuID0gVGVybTo6QU5TSUNvbG9yOjpj b2xvcigiYmxhY2siKSAuIFRlcm06OkFOU0lDb2xvcjo6Y29sb3IoIm9uX2dyZWVuIik7Ci0rICAg ICAgICAgICAgbXkgJHJlZCAgID0gVGVybTo6QU5TSUNvbG9yOjpjb2xvcigiYmxhY2siKSAuIFRl cm06OkFOU0lDb2xvcjo6Y29sb3IoIm9uX3JlZCIpOwotKyAgICAgICAgICAgIG15ICRyZXNldCA9 IFRlcm06OkFOU0lDb2xvcjo6Y29sb3IoInJlc2V0Iik7Ci0rCi0rICAgICAgICAgICAgIyB3b3Jr IG91dCB3aGVyZSB0aGUgdHdvIHN0cmluZ3Mgc3RhcnQgdG8gZGlmZmVyCi0rICAgICAgICAgICAg bXkgJGNoYXIgPSAwOwotKyAgICAgICAgICAgICRjaGFyKysgd2hpbGUgc3Vic3RyKCAkZ290LCAk Y2hhciwgMSApIGVxIHN1YnN0ciggJHdhbnRlZCwgJGNoYXIsIDEgKTsKLSsKLSsgICAgICAgICAg ICAjIGdldCB0aGUgc3RhcnQgc3RyaW5nIGFuZCB0aGUgdHdvIGVuZCBzdHJpbmdzCi0rICAgICAg ICAgICAgbXkgJHN0YXJ0ID0gJGdyZWVuIC4gc3Vic3RyKCAkd2FudGVkLCAwLCAkY2hhciApOwot KyAgICAgICAgICAgIG15ICRnb3RlbmQgICAgPSAkcmVkIC4gc3Vic3RyKCAkZ290LCAgICAkY2hh ciApIC4gJHJlc2V0OwotKyAgICAgICAgICAgIG15ICR3YW50ZWRlbmQgPSAkcmVkIC4gc3Vic3Ry KCAkd2FudGVkLCAkY2hhciApIC4gJHJlc2V0OwotKwotKyAgICAgICAgICAgICMgbWFrZSB0aGUg c3RhcnQgdHVybiBncmVlbiBvbiBhbmQgb2ZmCi0rICAgICAgICAgICAgJHN0YXJ0ID1+IHMvXG4v JHJlc2V0XG4kZ3JlZW4vZzsKLSsKLSsgICAgICAgICAgICAjIG1ha2UgdGhlIGVuZHMgdHVybiBy ZWQgb24gYW5kIG9mZgotKyAgICAgICAgICAgICRnb3RlbmQgICAgPX4gcy9cbi8kcmVzZXRcbiRy ZWQvZzsKLSsgICAgICAgICAgICAkd2FudGVkZW5kID1+IHMvXG4vJHJlc2V0XG4kcmVkL2c7Ci0r Ci0rICAgICAgICAgICAgIyByZWJ1aWxkIHRoZSBzdHJpbmdzCi0rICAgICAgICAgICAgJGdvdCAg ICA9ICRzdGFydCAuICRnb3RlbmQ7Ci0rICAgICAgICAgICAgJHdhbnRlZCA9ICRzdGFydCAuICR3 YW50ZWRlbmQ7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuICIkdHlwZSBpczpc biIgLiAiJGdvdFxubm90OlxuJHdhbnRlZFxuYXMgZXhwZWN0ZWQiOwotK30KLSsKLSsjIwotKyMg Zm9yZ2V0IGFsbCBleHBlY3RlZCBhbmQgZ290IGRhdGEKLSsKLStzdWIgcmVzZXQgewotKyAgICBt eSAkc2VsZiA9IHNoaWZ0OwotKyAgICAlJHNlbGYgPSAoCi0rICAgICAgICB0eXBlICAgPT4gJHNl bGYtPnt0eXBlfSwKLSsgICAgICAgIGdvdCAgICA9PiAnJywKLSsgICAgICAgIHdhbnRlZCA9PiBb XSwKLSsgICAgKTsKLSt9Ci0rCi0rc3ViIGdvdCB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0r ICAgIHJldHVybiAkc2VsZi0+e2dvdH07Ci0rfQotKwotK3N1YiB3YW50ZWQgewotKyAgICBteSAk c2VsZiA9IHNoaWZ0OwotKyAgICByZXR1cm4gJHNlbGYtPnt3YW50ZWR9OwotK30KLSsKLStzdWIg dHlwZSB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rICAgIHJldHVybiAkc2VsZi0+e3R5cGV9 OwotK30KLSsKLSsjIyMKLSsjIHRpZSBpbnRlcmZhY2UKLSsjIyMKLSsKLStzdWIgUFJJTlQgewot KyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgICAkc2VsZi0+e2dvdH0gLj0gam9pbiAnJywgQF87 Ci0rfQotKwotK3N1YiBUSUVIQU5ETEUgewotKyAgICBteSggJGNsYXNzLCAkdHlwZSApID0gQF87 Ci0rCi0rICAgIG15ICRzZWxmID0gYmxlc3MgeyB0eXBlID0+ICR0eXBlIH0sICRjbGFzczsKLSsK LSsgICAgJHNlbGYtPnJlc2V0OwotKwotKyAgICByZXR1cm4gJHNlbGY7Ci0rfQotKwotK3N1YiBS RUFEICAgICB7IH0KLStzdWIgUkVBRExJTkUgeyB9Ci0rc3ViIEdFVEMgICAgIHsgfQotK3N1YiBG SUxFTk8gICB7IH0KLSsKLSsxOwotZGlmZiAtTmF1ciBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGli L1Rlc3QvQnVpbGRlci5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci5w bQotLS0tIG9sZC90ZXN0X3NpbXBsZV9wYXRjaC9saWIvVGVzdC9CdWlsZGVyLnBtCTE5NzAtMDEt MDEgMTA6MDA6MDAuMDAwMDAwMDAwICsxMDAwCi0rKysgbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xp Yi9UZXN0L0J1aWxkZXIucG0JMjAxNC0wMy0yNiAyMTo0ODoxMS41MTMyNTc2NDUgKzExMDAKLUBA IC0wLDAgKzEsMjY2NyBAQAotK3BhY2thZ2UgVGVzdDo6QnVpbGRlcjsKLSsKLSt1c2UgNS4wMDY7 Ci0rdXNlIHN0cmljdDsKLSt1c2Ugd2FybmluZ3M7Ci0rCi0rb3VyICRWRVJTSU9OID0gJzEuMDAx MDAzJzsKLSskVkVSU0lPTiA9IGV2YWwgJFZFUlNJT047ICAgICMjIG5vIGNyaXRpYyAoQnVpbHRp bkZ1bmN0aW9uczo6UHJvaGliaXRTdHJpbmd5RXZhbCkKLSsKLStCRUdJTiB7Ci0rICAgIGlmKCAk XSA8IDUuMDA4ICkgewotKyAgICAgICAgcmVxdWlyZSBUZXN0OjpCdWlsZGVyOjpJTzo6U2NhbGFy OwotKyAgICB9Ci0rfQotKwotKwotKyMgTWFrZSBUZXN0OjpCdWlsZGVyIHRocmVhZC1zYWZlIGZv ciBpdGhyZWFkcy4KLStCRUdJTiB7Ci0rICAgIHVzZSBDb25maWc7Ci0rICAgICMgTG9hZCB0aHJl YWRzOjpzaGFyZWQgd2hlbiB0aHJlYWRzIGFyZSB0dXJuZWQgb24uCi0rICAgICMgNS44LjAncyB0 aHJlYWRzIGFyZSBzbyBidXN0ZWQgd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgdGhlbS4KLSsgICAgaWYo ICRdID49IDUuMDA4MDAxICYmICRDb25maWd7dXNlaXRocmVhZHN9ICYmICRJTkN7J3RocmVhZHMu cG0nfSApIHsKLSsgICAgICAgIHJlcXVpcmUgdGhyZWFkczo6c2hhcmVkOwotKwotKyAgICAgICAg IyBIYWNrIGFyb3VuZCBZRVQgQU5PVEhFUiB0aHJlYWRzOjpzaGFyZWQgYnVnLiAgSXQgd291bGQK LSsgICAgICAgICMgb2NjYXNpb25hbGx5IGZvcmdldCB0aGUgY29udGVudHMgb2YgdGhlIHZhcmlh YmxlIHdoZW4gc2hhcmluZyBpdC4KLSsgICAgICAgICMgU28gd2UgZmlyc3QgY29weSB0aGUgZGF0 YSwgdGhlbiBzaGFyZSwgdGhlbiBwdXQgb3VyIGNvcHkgYmFjay4KLSsgICAgICAgICpzaGFyZSA9 IHN1YiAoXFskQCVdKSB7Ci0rICAgICAgICAgICAgbXkgJHR5cGUgPSByZWYgJF9bMF07Ci0rICAg ICAgICAgICAgbXkgJGRhdGE7Ci0rCi0rICAgICAgICAgICAgaWYoICR0eXBlIGVxICdIQVNIJyAp IHsKLSsgICAgICAgICAgICAgICAgJSRkYXRhID0gJXsgJF9bMF0gfTsKLSsgICAgICAgICAgICB9 Ci0rICAgICAgICAgICAgZWxzaWYoICR0eXBlIGVxICdBUlJBWScgKSB7Ci0rICAgICAgICAgICAg ICAgIEAkZGF0YSA9IEB7ICRfWzBdIH07Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGVs c2lmKCAkdHlwZSBlcSAnU0NBTEFSJyApIHsKLSsgICAgICAgICAgICAgICAgJCRkYXRhID0gJHsg JF9bMF0gfTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgZWxzZSB7Ci0rICAgICAgICAg ICAgICAgIGRpZSggIlVua25vd24gdHlwZTogIiAuICR0eXBlICk7Ci0rICAgICAgICAgICAgfQot KwotKyAgICAgICAgICAgICRfWzBdID0gJnRocmVhZHM6OnNoYXJlZDo6c2hhcmUoICRfWzBdICk7 Ci0rCi0rICAgICAgICAgICAgaWYoICR0eXBlIGVxICdIQVNIJyApIHsKLSsgICAgICAgICAgICAg ICAgJXsgJF9bMF0gfSA9ICUkZGF0YTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgZWxz aWYoICR0eXBlIGVxICdBUlJBWScgKSB7Ci0rICAgICAgICAgICAgICAgIEB7ICRfWzBdIH0gPSBA JGRhdGE7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGVsc2lmKCAkdHlwZSBlcSAnU0NB TEFSJyApIHsKLSsgICAgICAgICAgICAgICAgJHsgJF9bMF0gfSA9ICQkZGF0YTsKLSsgICAgICAg ICAgICB9Ci0rICAgICAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgICAgIGRpZSggIlVua25v d24gdHlwZTogIiAuICR0eXBlICk7Ci0rICAgICAgICAgICAgfQotKwotKyAgICAgICAgICAgIHJl dHVybiAkX1swXTsKLSsgICAgICAgIH07Ci0rICAgIH0KLSsgICAgIyA1LjguMCdzIHRocmVhZHM6 OnNoYXJlZCBpcyBidXN0ZWQgd2hlbiB0aHJlYWRzIGFyZSBvZmYKLSsgICAgIyBhbmQgZWFybGll ciBQZXJscyBqdXN0IGRvbid0IGhhdmUgdGhhdCBtb2R1bGUgYXQgYWxsLgotKyAgICBlbHNlIHsK LSsgICAgICAgICpzaGFyZSA9IHN1YiB7IHJldHVybiAkX1swXSB9OwotKyAgICAgICAgKmxvY2sg ID0gc3ViIHsgMCB9OwotKyAgICB9Ci0rfQotKwotKz1oZWFkMSBOQU1FCi0rCi0rVGVzdDo6QnVp bGRlciAtIEJhY2tlbmQgZm9yIGJ1aWxkaW5nIHRlc3QgbGlicmFyaWVzCi0rCi0rPWhlYWQxIFNZ Tk9QU0lTCi0rCi0rICBwYWNrYWdlIE15OjpUZXN0OjpNb2R1bGU7Ci0rICB1c2UgYmFzZSAnVGVz dDo6QnVpbGRlcjo6TW9kdWxlJzsKLSsKLSsgIG15ICRDTEFTUyA9IF9fUEFDS0FHRV9fOwotKwot KyAgc3ViIG9rIHsKLSsgICAgICBteSgkdGVzdCwgJG5hbWUpID0gQF87Ci0rICAgICAgbXkgJHRi ID0gJENMQVNTLT5idWlsZGVyOwotKwotKyAgICAgICR0Yi0+b2soJHRlc3QsICRuYW1lKTsKLSsg IH0KLSsKLSsKLSs9aGVhZDEgREVTQ1JJUFRJT04KLSsKLStUZXN0OjpTaW1wbGUgYW5kIFRlc3Q6 Ok1vcmUgaGF2ZSBwcm92ZW4gdG8gYmUgcG9wdWxhciB0ZXN0aW5nIG1vZHVsZXMsCi0rYnV0IHRo ZXkncmUgbm90IGFsd2F5cyBmbGV4aWJsZSBlbm91Z2guICBUZXN0OjpCdWlsZGVyIHByb3ZpZGVz IGEKLStidWlsZGluZyBibG9jayB1cG9uIHdoaWNoIHRvIHdyaXRlIHlvdXIgb3duIHRlc3QgbGli cmFyaWVzIEk8d2hpY2ggY2FuCi0rd29yayB0b2dldGhlcj4uCi0rCi0rPWhlYWQyIENvbnN0cnVj dGlvbgotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBCPG5ldz4KLSsKLSsgIG15ICRUZXN0ID0gVGVz dDo6QnVpbGRlci0+bmV3OwotKwotK1JldHVybnMgYSBUZXN0OjpCdWlsZGVyIG9iamVjdCByZXBy ZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCi0rdGVzdC4KLSsKLStTaW5jZSB5b3Ug b25seSBydW4gb25lIHRlc3QgcGVyIHByb2dyYW0gQzxuZXc+IGFsd2F5cyByZXR1cm5zIHRoZSBz YW1lCi0rVGVzdDo6QnVpbGRlciBvYmplY3QuICBObyBtYXR0ZXIgaG93IG1hbnkgdGltZXMgeW91 IGNhbGwgQzxuZXcoKT4sIHlvdSdyZQotK2dldHRpbmcgdGhlIHNhbWUgb2JqZWN0LiAgVGhpcyBp cyBjYWxsZWQgYSBzaW5nbGV0b24uICBUaGlzIGlzIGRvbmUgc28gdGhhdAotK211bHRpcGxlIG1v ZHVsZXMgc2hhcmUgc3VjaCBnbG9iYWwgaW5mb3JtYXRpb24gYXMgdGhlIHRlc3QgY291bnRlciBh bmQKLSt3aGVyZSB0ZXN0IG91dHB1dCBpcyBnb2luZy4KLSsKLStJZiB5b3Ugd2FudCBhIGNvbXBs ZXRlbHkgbmV3IFRlc3Q6OkJ1aWxkZXIgb2JqZWN0IGRpZmZlcmVudCBmcm9tIHRoZQotK3Npbmds ZXRvbiwgdXNlIEM8Y3JlYXRlPi4KLSsKLSs9Y3V0Ci0rCi0rb3VyICRUZXN0ID0gVGVzdDo6QnVp bGRlci0+bmV3OwotKwotK3N1YiBuZXcgewotKyAgICBteSgkY2xhc3MpID0gc2hpZnQ7Ci0rICAg ICRUZXN0IHx8PSAkY2xhc3MtPmNyZWF0ZTsKLSsgICAgcmV0dXJuICRUZXN0OwotK30KLSsKLSs9 aXRlbSBCPGNyZWF0ZT4KLSsKLSsgIG15ICRUZXN0ID0gVGVzdDo6QnVpbGRlci0+Y3JlYXRlOwot KwotK09rLCBzbyB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBUZXN0OjpCdWlsZGVyIG9iamVj dCBhbmQgdGhpcyBpcyBob3cKLSt5b3UgZ2V0IGl0LiAgWW91IG1pZ2h0IHVzZSB0aGlzIGluc3Rl YWQgb2YgQzxuZXcoKT4gaWYgeW91J3JlIHRlc3RpbmcKLSthIFRlc3Q6OkJ1aWxkZXIgYmFzZWQg bW9kdWxlLCBidXQgb3RoZXJ3aXNlIHlvdSBwcm9iYWJseSB3YW50IEM8bmV3Pi4KLSsKLStCPE5P VEU+OiB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IGNvbXBsZXRlLiAgQzxsZXZlbD4sIGZvciBl eGFtcGxlLCBpcwotK3N0aWxsIHNoYXJlZCBhbW9uZ3N0IEI8YWxsPiBUZXN0OjpCdWlsZGVyIG9i amVjdHMsIGV2ZW4gb25lcyBjcmVhdGVkIHVzaW5nCi0rdGhpcyBtZXRob2QuICBBbHNvLCB0aGUg bWV0aG9kIG5hbWUgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotKwotKz1jdXQKLSsKLStzdWIg Y3JlYXRlIHsKLSsgICAgbXkgJGNsYXNzID0gc2hpZnQ7Ci0rCi0rICAgIG15ICRzZWxmID0gYmxl c3Mge30sICRjbGFzczsKLSsgICAgJHNlbGYtPnJlc2V0OwotKwotKyAgICByZXR1cm4gJHNlbGY7 Ci0rfQotKwotKwotKyMgQ29weSBhbiBvYmplY3QsIGN1cnJlbnRseSBhIHNoYWxsb3cuCi0rIyBU aGlzIGRvZXMgKm5vdCogYmxlc3MgdGhlIGRlc3RpbmF0aW9uLiAgVGhpcyBrZWVwcyB0aGUgZGVz dHJ1Y3RvciBmcm9tCi0rIyBmaXJpbmcgd2hlbiB3ZSdyZSBqdXN0IHN0b3JpbmcgYSBjb3B5IG9m IHRoZSBvYmplY3QgdG8gcmVzdG9yZSBsYXRlci4KLStzdWIgX2NvcHkgewotKyAgICBteSgkc3Jj LCAkZGVzdCkgPSBAXzsKLSsKLSsgICAgJSRkZXN0ID0gJSRzcmM7Ci0rICAgIF9zaGFyZV9rZXlz KCRkZXN0KTsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSsKLSs9aXRlbSBCPGNoaWxkPgotKwot KyAgbXkgJGNoaWxkID0gJGJ1aWxkZXItPmNoaWxkKCRuYW1lX29mX2NoaWxkKTsKLSsgICRjaGls ZC0+cGxhbiggdGVzdHMgPT4gNCApOwotKyAgJGNoaWxkLT5vayhzb21lX2NvZGUoKSk7Ci0rICAu Li4KLSsgICRjaGlsZC0+ZmluYWxpemU7Ci0rCi0rUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBD PFRlc3Q6OkJ1aWxkZXI+LiAgQW55IG91dHB1dCBmcm9tIHRoaXMgY2hpbGQgd2lsbAotK2JlIGlu ZGVudGVkIGZvdXIgc3BhY2VzIG1vcmUgdGhhbiB0aGUgcGFyZW50J3MgaW5kZW50YXRpb24uICBX aGVuIGRvbmUsIHRoZQotK0M8ZmluYWxpemU+IG1ldGhvZCBJPG11c3Q+IGJlIGNhbGxlZCBleHBs aWNpdGx5LgotKwotK1RyeWluZyB0byBjcmVhdGUgYSBuZXcgY2hpbGQgd2l0aCBhIHByZXZpb3Vz IGNoaWxkIHN0aWxsIGFjdGl2ZSAoaS5lLiwKLStDPGZpbmFsaXplPiBub3QgY2FsbGVkKSB3aWxs IEM8Y3JvYWs+LgotKwotK1RyeWluZyB0byBydW4gYSB0ZXN0IHdoZW4geW91IGhhdmUgYW4gb3Bl biBjaGlsZCB3aWxsIGFsc28gQzxjcm9haz4gYW5kIGNhdXNlCi0rdGhlIHRlc3Qgc3VpdGUgdG8g ZmFpbC4KLSsKLSs9Y3V0Ci0rCi0rc3ViIGNoaWxkIHsKLSsgICAgbXkoICRzZWxmLCAkbmFtZSAp ID0gQF87Ci0rCi0rICAgIGlmKCAkc2VsZi0+e0NoaWxkX05hbWV9ICkgewotKyAgICAgICAgJHNl bGYtPmNyb2FrKCJZb3UgYWxyZWFkeSBoYXZlIGEgY2hpbGQgbmFtZWQgKCRzZWxmLT57Q2hpbGRf TmFtZX0pIHJ1bm5pbmciKTsKLSsgICAgfQotKwotKyAgICBteSAkcGFyZW50X2luX3RvZG8gPSAk c2VsZi0+aW5fdG9kbzsKLSsKLSsgICAgIyBDbGVhciAkVE9ETyBmb3IgdGhlIGNoaWxkLgotKyAg ICBteSAkb3JpZ19UT0RPID0gJHNlbGYtPmZpbmRfVE9ETyh1bmRlZiwgMSwgdW5kZWYpOwotKwot KyAgICBteSAkY2xhc3MgPSByZWYgJHNlbGY7Ci0rICAgIG15ICRjaGlsZCA9ICRjbGFzcy0+Y3Jl YXRlOwotKwotKyAgICAjIEFkZCB0byBvdXIgaW5kZW50YXRpb24KLSsgICAgJGNoaWxkLT5faW5k ZW50KCAkc2VsZi0+X2luZGVudCAuICcgICAgJyApOwotKwotKyAgICAjIE1ha2UgdGhlIGNoaWxk IHVzZSB0aGUgc2FtZSBvdXRwdXRzIGFzIHRoZSBwYXJlbnQKLSsgICAgZm9yIG15ICRtZXRob2Qg KHF3KG91dHB1dCBmYWlsdXJlX291dHB1dCB0b2RvX291dHB1dCkpIHsKLSsgICAgICAgICRjaGls ZC0+JG1ldGhvZCggJHNlbGYtPiRtZXRob2QgKTsKLSsgICAgfQotKwotKyAgICAjIEVuc3VyZSB0 aGUgY2hpbGQgdW5kZXJzdGFuZHMgaWYgdGhleSdyZSBpbnNpZGUgYSBUT0RPCi0rICAgIGlmKCAk cGFyZW50X2luX3RvZG8gKSB7Ci0rICAgICAgICAkY2hpbGQtPmZhaWx1cmVfb3V0cHV0KCAkc2Vs Zi0+dG9kb19vdXRwdXQgKTsKLSsgICAgfQotKwotKyAgICAjIFRoaXMgd2lsbCBiZSByZXNldCBp biBmaW5hbGl6ZS4gV2UgZG8gdGhpcyBoZXJlIGxlc3Qgb25lIGNoaWxkIGZhaWx1cmUKLSsgICAg IyBjYXVzZSBhbGwgY2hpbGRyZW4gdG8gZmFpbC4KLSsgICAgJGNoaWxkLT57Q2hpbGRfRXJyb3J9 ID0gJD87Ci0rICAgICQ/ICAgICAgICAgICAgICAgICAgICA9IDA7Ci0rICAgICRjaGlsZC0+e1Bh cmVudH0gICAgICA9ICRzZWxmOwotKyAgICAkY2hpbGQtPntQYXJlbnRfVE9ET30gPSAkb3JpZ19U T0RPOwotKyAgICAkY2hpbGQtPntOYW1lfSAgICAgICAgPSAkbmFtZSB8fCAiQ2hpbGQgb2YgIiAu ICRzZWxmLT5uYW1lOwotKyAgICAkc2VsZi0+e0NoaWxkX05hbWV9ICAgPSAkY2hpbGQtPm5hbWU7 Ci0rICAgIHJldHVybiAkY2hpbGQ7Ci0rfQotKwotKwotKz1pdGVtIEI8c3VidGVzdD4KLSsKLSsg ICAgJGJ1aWxkZXItPnN1YnRlc3QoJG5hbWUsIFwmc3VidGVzdHMpOwotKwotK1NlZSBkb2N1bWVu dGF0aW9uIG9mIEM8c3VidGVzdD4gaW4gVGVzdDo6TW9yZS4KLSsKLSs9Y3V0Ci0rCi0rc3ViIHN1 YnRlc3QgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgICBteSgkbmFtZSwgJHN1YnRlc3Rz KSA9IEBfOwotKwotKyAgICBpZiAoJ0NPREUnIG5lIHJlZiAkc3VidGVzdHMpIHsKLSsgICAgICAg ICRzZWxmLT5jcm9haygic3VidGVzdCgpJ3Mgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBjb2Rl IHJlZiIpOwotKyAgICB9Ci0rCi0rICAgICMgVHVybiB0aGUgY2hpbGQgaW50byB0aGUgcGFyZW50 IHNvIGFueW9uZSB3aG8gaGFzIHN0b3JlZCBhIGNvcHkgb2YKLSsgICAgIyB0aGUgVGVzdDo6QnVp bGRlciBzaW5nbGV0b24gd2lsbCBnZXQgdGhlIGNoaWxkLgotKyAgICBteSAkZXJyb3I7Ci0rICAg IG15ICRjaGlsZDsKLSsgICAgbXkgJHBhcmVudCA9IHt9OwotKyAgICB7Ci0rICAgICAgICAjIGNo aWxkKCkgY2FsbHMgcmVzZXQoKSB3aGljaCBzZXRzICRMZXZlbCB0byAxLCBzbyB3ZSBsb2NhbGl6 ZQotKyAgICAgICAgIyAkTGV2ZWwgZmlyc3QgdG8gbGltaXQgdGhlIHNjb3BlIG9mIHRoZSByZXNl dCB0byB0aGUgc3VidGVzdC4KLSsgICAgICAgIGxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9 ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCArIDE7Ci0rCi0rICAgICAgICAjIFN0b3JlIHRoZSBndXRz IG9mICRzZWxmIGFzICRwYXJlbnQgYW5kIHR1cm4gJGNoaWxkIGludG8gJHNlbGYuCi0rICAgICAg ICAkY2hpbGQgID0gJHNlbGYtPmNoaWxkKCRuYW1lKTsKLSsgICAgICAgIF9jb3B5KCRzZWxmLCAg JHBhcmVudCk7Ci0rICAgICAgICBfY29weSgkY2hpbGQsICRzZWxmKTsKLSsKLSsgICAgICAgIG15 ICRydW5fdGhlX3N1YnRlc3RzID0gc3ViIHsKLSsgICAgICAgICAgICAjIEFkZCBzdWJ0ZXN0IG5h bWUgZm9yIGNsYXJpZmljYXRpb24gb2Ygc3RhcnRpbmcgcG9pbnQKLSsgICAgICAgICAgICAkc2Vs Zi0+bm90ZSgiU3VidGVzdDogJG5hbWUiKTsKLSsgICAgICAgICAgICAkc3VidGVzdHMtPigpOwot KyAgICAgICAgICAgICRzZWxmLT5kb25lX3Rlc3RpbmcgdW5sZXNzICRzZWxmLT5fcGxhbl9oYW5k bGVkOwotKyAgICAgICAgICAgIDE7Ci0rICAgICAgICB9OwotKwotKyAgICAgICAgaWYoICFldmFs IHsgJHJ1bl90aGVfc3VidGVzdHMtPigpIH0gKSB7Ci0rICAgICAgICAgICAgJGVycm9yID0gJEA7 Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgIyBSZXN0b3JlIHRoZSBwYXJlbnQgYW5kIHRo ZSBjb3BpZWQgY2hpbGQuCi0rICAgIF9jb3B5KCRzZWxmLCAgICRjaGlsZCk7Ci0rICAgIF9jb3B5 KCRwYXJlbnQsICRzZWxmKTsKLSsKLSsgICAgIyBSZXN0b3JlIHRoZSBwYXJlbnQncyAkVE9ETwot KyAgICAkc2VsZi0+ZmluZF9UT0RPKHVuZGVmLCAxLCAkY2hpbGQtPntQYXJlbnRfVE9ET30pOwot KwotKyAgICAjIERpZSAqYWZ0ZXIqIHdlIHJlc3RvcmUgdGhlIHBhcmVudC4KLSsgICAgZGllICRl cnJvciBpZiAkZXJyb3IgYW5kICFldmFsIHsgJGVycm9yLT5pc2EoJ1Rlc3Q6OkJ1aWxkZXI6OkV4 Y2VwdGlvbicpIH07Ci0rCi0rICAgIGxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0 OjpCdWlsZGVyOjpMZXZlbCArIDE7Ci0rICAgIG15ICRmaW5hbGl6ZSA9ICRjaGlsZC0+ZmluYWxp emU7Ci0rCi0rICAgICRzZWxmLT5CQUlMX09VVCgkY2hpbGQtPntCYWlsZWRfT3V0X1JlYXNvbn0p IGlmICRjaGlsZC0+e0JhaWxlZF9PdXR9OwotKwotKyAgICByZXR1cm4gJGZpbmFsaXplOwotK30K LSsKLSs9YmVnaW4gX3ByaXZhdGUKLSsKLSs9aXRlbSBCPF9wbGFuX2hhbmRsZWQ+Ci0rCi0rICAg IGlmICggJFRlc3QtPl9wbGFuX2hhbmRsZWQgKSB7IC4uLiB9Ci0rCi0rUmV0dXJucyB0cnVlIGlm IHRoZSBkZXZlbG9wZXIgaGFzIGV4cGxpY2l0bHkgaGFuZGxlZCB0aGUgcGxhbiB2aWE6Ci0rCi0r PW92ZXIgNAotKwotKz1pdGVtICogRXhwbGljaXRseSBzZXR0aW5nIHRoZSBudW1iZXIgb2YgdGVz dHMKLSsKLSs9aXRlbSAqIFNldHRpbmcgJ25vX3BsYW4nCi0rCi0rPWl0ZW0gKiBTZXQgJ3NraXBf YWxsJy4KLSsKLSs9YmFjawotKwotK1RoaXMgaXMgY3VycmVudGx5IHVzZWQgaW4gc3VidGVzdHMg d2hlbiB3ZSBpbXBsaWNpdGx5IGNhbGwgQzw8ICRUZXN0LT5kb25lX3Rlc3RpbmcgPj4KLStpZiB0 aGUgZGV2ZWxvcGVyIGhhcyBub3Qgc2V0IGEgcGxhbi4KLSsKLSs9ZW5kIF9wcml2YXRlCi0rCi0r PWN1dAotKwotK3N1YiBfcGxhbl9oYW5kbGVkIHsKLSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsg ICAgcmV0dXJuICRzZWxmLT57SGF2ZV9QbGFufSB8fCAkc2VsZi0+e05vX1BsYW59IHx8ICRzZWxm LT57U2tpcF9BbGx9OwotK30KLSsKLSsKLSs9aXRlbSBCPGZpbmFsaXplPgotKwotKyAgbXkgJG9r ID0gJGNoaWxkLT5maW5hbGl6ZTsKLSsKLStXaGVuIHlvdXIgY2hpbGQgaXMgZG9uZSBydW5uaW5n IHRlc3RzLCB5b3UgbXVzdCBjYWxsIEM8ZmluYWxpemU+IHRvIGNsZWFuIHVwCi0rYW5kIHRlbGwg dGhlIHBhcmVudCB5b3VyIHBhc3MvZmFpbCBzdGF0dXMuCi0rCi0rQ2FsbGluZyBmaW5hbGl6ZSBv biBhIGNoaWxkIHdpdGggb3BlbiBjaGlsZHJlbiB3aWxsIEM8Y3JvYWs+LgotKwotK0lmIHRoZSBj aGlsZCBmYWxscyBvdXQgb2Ygc2NvcGUgYmVmb3JlIEM8ZmluYWxpemU+IGlzIGNhbGxlZCwgYSBm YWlsdXJlCi0rZGlhZ25vc3RpYyB3aWxsIGJlIGlzc3VlZCBhbmQgdGhlIGNoaWxkIGlzIGNvbnNp ZGVyZWQgdG8gaGF2ZSBmYWlsZWQuCi0rCi0rTm8gYXR0ZW1wdCB0byBjYWxsIG1ldGhvZHMgb24g YSBjaGlsZCBhZnRlciBDPGZpbmFsaXplPiBpcyBjYWxsZWQgaXMKLStndWFyYW50ZWVkIHRvIHN1 Y2NlZWQuCi0rCi0rQ2FsbGluZyB0aGlzIG9uIHRoZSByb290IGJ1aWxkZXIgaXMgYSBuby1vcC4K LSsKLSs9Y3V0Ci0rCi0rc3ViIGZpbmFsaXplIHsKLSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsK LSsgICAgcmV0dXJuIHVubGVzcyAkc2VsZi0+cGFyZW50OwotKyAgICBpZiggJHNlbGYtPntDaGls ZF9OYW1lfSApIHsKLSsgICAgICAgICRzZWxmLT5jcm9haygiQ2FuJ3QgY2FsbCBmaW5hbGl6ZSgp IHdpdGggY2hpbGQgKCRzZWxmLT57Q2hpbGRfTmFtZX0pIGFjdGl2ZSIpOwotKyAgICB9Ci0rCi0r ICAgIGxvY2FsICQ/ID0gMDsgICAgICMgZG9uJ3QgZmFpbCBpZiAkc3VidGVzdHMgaGFwcGVuZWQg dG8gc2V0ICQ/IG5vbnplcm8KLSsgICAgJHNlbGYtPl9lbmRpbmc7Ci0rCi0rICAgICMgWFhYIFRo aXMgd2lsbCBvbmx5IGJlIG5lY2Vzc2FyeSBmb3IgVEFQIGVudmVsb3BlcyAod2UgdGhpbmspCi0r ICAgICMkc2VsZi0+X3ByaW50KCAkc2VsZi0+aXNfcGFzc2luZyA/ICJQQVNTXG4iIDogIkZBSUxc biIgKTsKLSsKLSsgICAgbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxk ZXI6OkxldmVsICsgMTsKLSsgICAgbXkgJG9rID0gMTsKLSsgICAgJHNlbGYtPnBhcmVudC0+e0No aWxkX05hbWV9ID0gdW5kZWY7Ci0rICAgIHVubGVzcyAoJHNlbGYtPntCYWlsZWRfT3V0fSkgewot KyAgICAgICAgaWYgKCAkc2VsZi0+e1NraXBfQWxsfSApIHsKLSsgICAgICAgICAgICAkc2VsZi0+ cGFyZW50LT5za2lwKCRzZWxmLT57U2tpcF9BbGx9KTsKLSsgICAgICAgIH0KLSsgICAgICAgIGVs c2lmICggbm90IEB7ICRzZWxmLT57VGVzdF9SZXN1bHRzfSB9ICkgewotKyAgICAgICAgICAgICRz ZWxmLT5wYXJlbnQtPm9rKCAwLCBzcHJpbnRmIHFbTm8gdGVzdHMgcnVuIGZvciBzdWJ0ZXN0ICIl cyJdLCAkc2VsZi0+bmFtZSApOwotKyAgICAgICAgfQotKyAgICAgICAgZWxzZSB7Ci0rICAgICAg ICAgICAgJHNlbGYtPnBhcmVudC0+b2soICRzZWxmLT5pc19wYXNzaW5nLCAkc2VsZi0+bmFtZSAp OwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgICQ/ID0gJHNlbGYtPntDaGlsZF9FcnJvcn07Ci0r ICAgIGRlbGV0ZSAkc2VsZi0+e1BhcmVudH07Ci0rCi0rICAgIHJldHVybiAkc2VsZi0+aXNfcGFz c2luZzsKLSt9Ci0rCi0rc3ViIF9pbmRlbnQgICAgICB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7 Ci0rCi0rICAgIGlmKCBAXyApIHsKLSsgICAgICAgICRzZWxmLT57SW5kZW50fSA9IHNoaWZ0Owot KyAgICB9Ci0rCi0rICAgIHJldHVybiAkc2VsZi0+e0luZGVudH07Ci0rfQotKwotKz1pdGVtIEI8 cGFyZW50PgotKwotKyBpZiAoIG15ICRwYXJlbnQgPSAkYnVpbGRlci0+cGFyZW50ICkgewotKyAg ICAgLi4uCi0rIH0KLSsKLStSZXR1cm5zIHRoZSBwYXJlbnQgQzxUZXN0OjpCdWlsZGVyPiBpbnN0 YW5jZSwgaWYgYW55LiAgT25seSB1c2VkIHdpdGggY2hpbGQKLStidWlsZGVycyBmb3IgbmVzdGVk IFRBUC4KLSsKLSs9Y3V0Ci0rCi0rc3ViIHBhcmVudCB7IHNoaWZ0LT57UGFyZW50fSB9Ci0rCi0r PWl0ZW0gQjxuYW1lPgotKwotKyBkaWFnICRidWlsZGVyLT5uYW1lOwotKwotK1JldHVybnMgdGhl IG5hbWUgb2YgdGhlIGN1cnJlbnQgYnVpbGRlci4gIFRvcCBsZXZlbCBidWlsZGVycyBkZWZhdWx0 IHRvIEM8JDA+Ci0rKHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlKS4gIENoaWxkIGJ1aWxkZXJz IGFyZSBuYW1lZCB2aWEgdGhlIEM8Y2hpbGQ+Ci0rbWV0aG9kLiAgSWYgbm8gbmFtZSBpcyBzdXBw bGllZCwgd2lsbCBiZSBuYW1lZCAiQ2hpbGQgb2YgJHBhcmVudC0+bmFtZSIuCi0rCi0rPWN1dAot KwotK3N1YiBuYW1lIHsgc2hpZnQtPntOYW1lfSB9Ci0rCi0rc3ViIERFU1RST1kgewotKyAgICBt eSAkc2VsZiA9IHNoaWZ0OwotKyAgICBpZiAoICRzZWxmLT5wYXJlbnQgYW5kICQkID09ICRzZWxm LT57T3JpZ2luYWxfUGlkfSApIHsKLSsgICAgICAgIG15ICRuYW1lID0gJHNlbGYtPm5hbWU7Ci0r ICAgICAgICAkc2VsZi0+ZGlhZyg8PCJGQUlMIik7Ci0rQ2hpbGQgKCRuYW1lKSBleGl0ZWQgd2l0 aG91dCBjYWxsaW5nIGZpbmFsaXplKCkKLStGQUlMCi0rICAgICAgICAkc2VsZi0+cGFyZW50LT57 SW5fRGVzdHJveX0gPSAxOwotKyAgICAgICAgJHNlbGYtPnBhcmVudC0+b2soMCwgJG5hbWUpOwot KyAgICB9Ci0rfQotKwotKz1pdGVtIEI8cmVzZXQ+Ci0rCi0rICAkVGVzdC0+cmVzZXQ7Ci0rCi0r UmVpbml0aWFsaXplcyB0aGUgVGVzdDo6QnVpbGRlciBzaW5nbGV0b24gdG8gaXRzIG9yaWdpbmFs IHN0YXRlLgotK01vc3RseSB1c2VmdWwgZm9yIHRlc3RzIHJ1biBpbiBwZXJzaXN0ZW50IGVudmly b25tZW50cyB3aGVyZSB0aGUgc2FtZQotK3Rlc3QgbWlnaHQgYmUgcnVuIG11bHRpcGxlIHRpbWVz IGluIHRoZSBzYW1lIHByb2Nlc3MuCi0rCi0rPWN1dAotKwotK291ciAkTGV2ZWw7Ci0rCi0rc3Vi IHJlc2V0IHsgICAgIyMgbm8gY3JpdGljIChTdWJyb3V0aW5lczo6UHJvaGliaXRCdWlsdGluSG9t b255bXMpCi0rICAgIG15KCRzZWxmKSA9IEBfOwotKwotKyAgICAjIFdlIGxlYXZlIHRoaXMgYSBn bG9iYWwgYmVjYXVzZSBpdCBoYXMgdG8gYmUgbG9jYWxpemVkIGFuZCBsb2NhbGl6aW5nCi0rICAg ICMgaGFzaCBrZXlzIGlzIGp1c3QgYXNraW5nIGZvciBwYWluLiAgQWxzbywgaXQgd2FzIGRvY3Vt ZW50ZWQuCi0rICAgICRMZXZlbCA9IDE7Ci0rCi0rICAgICRzZWxmLT57TmFtZX0gICAgICAgICA9 ICQwOwotKyAgICAkc2VsZi0+aXNfcGFzc2luZygxKTsKLSsgICAgJHNlbGYtPntFbmRpbmd9ICAg ICAgID0gMDsKLSsgICAgJHNlbGYtPntIYXZlX1BsYW59ICAgID0gMDsKLSsgICAgJHNlbGYtPntO b19QbGFufSAgICAgID0gMDsKLSsgICAgJHNlbGYtPntIYXZlX091dHB1dF9QbGFufSA9IDA7Ci0r ICAgICRzZWxmLT57RG9uZV9UZXN0aW5nfSA9IDA7Ci0rCi0rICAgICRzZWxmLT57T3JpZ2luYWxf UGlkfSA9ICQkOwotKyAgICAkc2VsZi0+e0NoaWxkX05hbWV9ICAgPSB1bmRlZjsKLSsgICAgJHNl bGYtPntJbmRlbnR9ICAgICB8fD0gJyc7Ci0rCi0rICAgICRzZWxmLT57Q3Vycl9UZXN0fSA9IDA7 Ci0rICAgICRzZWxmLT57VGVzdF9SZXN1bHRzfSA9ICZzaGFyZSggW10gKTsKLSsKLSsgICAgJHNl bGYtPntFeHBvcnRlZF9Ub30gICAgPSB1bmRlZjsKLSsgICAgJHNlbGYtPntFeHBlY3RlZF9UZXN0 c30gPSAwOwotKwotKyAgICAkc2VsZi0+e1NraXBfQWxsfSA9IDA7Ci0rCi0rICAgICRzZWxmLT57 VXNlX051bXN9ID0gMTsKLSsKLSsgICAgJHNlbGYtPntOb19IZWFkZXJ9ID0gMDsKLSsgICAgJHNl bGYtPntOb19FbmRpbmd9ID0gMDsKLSsKLSsgICAgJHNlbGYtPntUb2RvfSAgICAgICA9IHVuZGVm OwotKyAgICAkc2VsZi0+e1RvZG9fU3RhY2t9ID0gW107Ci0rICAgICRzZWxmLT57U3RhcnRfVG9k b30gPSAwOwotKyAgICAkc2VsZi0+e09wZW5lZF9UZXN0aGFuZGxlc30gPSAwOwotKwotKyAgICAk c2VsZi0+X3NoYXJlX2tleXM7Ci0rICAgICRzZWxmLT5fZHVwX3N0ZGhhbmRsZXM7Ci0rCi0rICAg IHJldHVybjsKLSt9Ci0rCi0rCi0rIyBTaGFyZWQgc2NhbGFyIHZhbHVlcyBhcmUgbG9zdCB3aGVu IGEgaGFzaCBpcyBjb3BpZWQsIHNvIHdlIGhhdmUKLSsjIGEgc2VwYXJhdGUgbWV0aG9kIHRvIHJl c3RvcmUgdGhlbS4KLSsjIFNoYXJlZCByZWZlcmVuY2VzIGFyZSByZXRhaW5lZCBhY3Jvc3MgY29w aWVzLgotK3N1YiBfc2hhcmVfa2V5cyB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rCi0rICAg IHNoYXJlKCAkc2VsZi0+e0N1cnJfVGVzdH0gKTsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSsK LSs9YmFjawotKwotKz1oZWFkMiBTZXR0aW5nIHVwIHRlc3RzCi0rCi0rVGhlc2UgbWV0aG9kcyBh cmUgZm9yIHNldHRpbmcgdXAgdGVzdHMgYW5kIGRlY2xhcmluZyBob3cgbWFueSB0aGVyZQotK2Fy ZS4gIFlvdSB1c3VhbGx5IG9ubHkgd2FudCB0byBjYWxsIG9uZSBvZiB0aGVzZSBtZXRob2RzLgot KwotKz1vdmVyIDQKLSsKLSs9aXRlbSBCPHBsYW4+Ci0rCi0rICAkVGVzdC0+cGxhbignbm9fcGxh bicpOwotKyAgJFRlc3QtPnBsYW4oIHNraXBfYWxsID0+ICRyZWFzb24gKTsKLSsgICRUZXN0LT5w bGFuKCB0ZXN0cyA9PiAkbnVtX3Rlc3RzICk7Ci0rCi0rQSBjb252ZW5pZW50IHdheSB0byBzZXQg dXAgeW91ciB0ZXN0cy4gIENhbGwgdGhpcyBhbmQgVGVzdDo6QnVpbGRlcgotK3dpbGwgcHJpbnQg dGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMgYW5kIHRha2UgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbnMu Ci0rCi0rSWYgeW91IGNhbGwgQzxwbGFuKCk+LCBkb24ndCBjYWxsIGFueSBvZiB0aGUgb3RoZXIg bWV0aG9kcyBiZWxvdy4KLSsKLStJZiBhIGNoaWxkIGNhbGxzICJza2lwX2FsbCIgaW4gdGhlIHBs YW4sIGEgQzxUZXN0OjpCdWlsZGVyOjpFeGNlcHRpb24+IGlzCi0rdGhyb3duLiAgVHJhcCB0aGlz IGVycm9yLCBjYWxsIEM8ZmluYWxpemUoKT4gYW5kIGRvbid0IHJ1biBhbnkgbW9yZSB0ZXN0cyBv bgotK3RoZSBjaGlsZC4KLSsKLSsgbXkgJGNoaWxkID0gJFRlc3QtPmNoaWxkKCdzb21lIGNoaWxk Jyk7Ci0rIGV2YWwgeyAkY2hpbGQtPnBsYW4oICRjb25kaXRpb24gPyAoIHNraXBfYWxsID0+ICRy ZWFzb24gKSA6ICggdGVzdHMgPT4gMyApICApIH07Ci0rIGlmICggZXZhbCB7ICRALT5pc2EoJ1Rl c3Q6OkJ1aWxkZXI6OkV4Y2VwdGlvbicpIH0gKSB7Ci0rICAgICRjaGlsZC0+ZmluYWxpemU7Ci0r ICAgIHJldHVybjsKLSsgfQotKyAjIHJ1biB5b3VyIHRlc3RzCi0rCi0rPWN1dAotKwotK215ICVw bGFuX2NtZHMgPSAoCi0rICAgIG5vX3BsYW4gICAgID0+IFwmbm9fcGxhbiwKLSsgICAgc2tpcF9h bGwgICAgPT4gXCZza2lwX2FsbCwKLSsgICAgdGVzdHMgICAgICAgPT4gXCZfcGxhbl90ZXN0cywK LSspOwotKwotK3N1YiBwbGFuIHsKLSsgICAgbXkoICRzZWxmLCAkY21kLCAkYXJnICkgPSBAXzsK LSsKLSsgICAgcmV0dXJuIHVubGVzcyAkY21kOwotKwotKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2 ZWwgKyAxOwotKwotKyAgICAkc2VsZi0+Y3JvYWsoIllvdSB0cmllZCB0byBwbGFuIHR3aWNlIikg aWYgJHNlbGYtPntIYXZlX1BsYW59OwotKwotKyAgICBpZiggbXkgJG1ldGhvZCA9ICRwbGFuX2Nt ZHN7JGNtZH0gKSB7Ci0rICAgICAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOwotKyAgICAg ICAgJHNlbGYtPiRtZXRob2QoJGFyZyk7Ci0rICAgIH0KLSsgICAgZWxzZSB7Ci0rICAgICAgICBt eSBAYXJncyA9IGdyZXAgeyBkZWZpbmVkIH0gKCAkY21kLCAkYXJnICk7Ci0rICAgICAgICAkc2Vs Zi0+Y3JvYWsoInBsYW4oKSBkb2Vzbid0IHVuZGVyc3RhbmQgQGFyZ3MiKTsKLSsgICAgfQotKwot KyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rCi0rc3ViIF9wbGFuX3Rlc3RzIHsKLSsgICAgbXkoJHNl bGYsICRhcmcpID0gQF87Ci0rCi0rICAgIGlmKCRhcmcpIHsKLSsgICAgICAgIGxvY2FsICRMZXZl bCA9ICRMZXZlbCArIDE7Ci0rICAgICAgICByZXR1cm4gJHNlbGYtPmV4cGVjdGVkX3Rlc3RzKCRh cmcpOwotKyAgICB9Ci0rICAgIGVsc2lmKCAhZGVmaW5lZCAkYXJnICkgewotKyAgICAgICAgJHNl bGYtPmNyb2FrKCJHb3QgYW4gdW5kZWZpbmVkIG51bWJlciBvZiB0ZXN0cyIpOwotKyAgICB9Ci0r ICAgIGVsc2UgewotKyAgICAgICAgJHNlbGYtPmNyb2FrKCJZb3Ugc2FpZCB0byBydW4gMCB0ZXN0 cyIpOwotKyAgICB9Ci0rCi0rICAgIHJldHVybjsKLSt9Ci0rCi0rPWl0ZW0gQjxleHBlY3RlZF90 ZXN0cz4KLSsKLSsgICAgbXkgJG1heCA9ICRUZXN0LT5leHBlY3RlZF90ZXN0czsKLSsgICAgJFRl c3QtPmV4cGVjdGVkX3Rlc3RzKCRtYXgpOwotKwotK0dldHMvc2V0cyB0aGUgbnVtYmVyIG9mIHRl c3RzIHdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gcnVuIGFuZCBwcmludHMgb3V0Ci0rdGhlIGFwcHJv cHJpYXRlIGhlYWRlcnMuCi0rCi0rPWN1dAotKwotK3N1YiBleHBlY3RlZF90ZXN0cyB7Ci0rICAg IG15ICRzZWxmID0gc2hpZnQ7Ci0rICAgIG15KCRtYXgpID0gQF87Ci0rCi0rICAgIGlmKEBfKSB7 Ci0rICAgICAgICAkc2VsZi0+Y3JvYWsoIk51bWJlciBvZiB0ZXN0cyBtdXN0IGJlIGEgcG9zaXRp dmUgaW50ZWdlci4gIFlvdSBnYXZlIGl0ICckbWF4JyIpCi0rICAgICAgICAgIHVubGVzcyAkbWF4 ID1+IC9eXCs/XGQrJC87Ci0rCi0rICAgICAgICAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSA9ICRt YXg7Ci0rICAgICAgICAkc2VsZi0+e0hhdmVfUGxhbn0gICAgICA9IDE7Ci0rCi0rICAgICAgICAk c2VsZi0+X291dHB1dF9wbGFuKCRtYXgpIHVubGVzcyAkc2VsZi0+bm9faGVhZGVyOwotKyAgICB9 Ci0rICAgIHJldHVybiAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfTsKLSt9Ci0rCi0rPWl0ZW0gQjxu b19wbGFuPgotKwotKyAgJFRlc3QtPm5vX3BsYW47Ci0rCi0rRGVjbGFyZXMgdGhhdCB0aGlzIHRl c3Qgd2lsbCBydW4gYW4gaW5kZXRlcm1pbmF0ZSBudW1iZXIgb2YgdGVzdHMuCi0rCi0rPWN1dAot KwotK3N1YiBub19wbGFuIHsKLSsgICAgbXkoJHNlbGYsICRhcmcpID0gQF87Ci0rCi0rICAgICRz ZWxmLT5jYXJwKCJub19wbGFuIHRha2VzIG5vIGFyZ3VtZW50cyIpIGlmICRhcmc7Ci0rCi0rICAg ICRzZWxmLT57Tm9fUGxhbn0gICA9IDE7Ci0rICAgICRzZWxmLT57SGF2ZV9QbGFufSA9IDE7Ci0r Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSs9YmVnaW4gcHJpdmF0ZQotKwotKz1pdGVtIEI8X291 dHB1dF9wbGFuPgotKwotKyAgJHRiLT5fb3V0cHV0X3BsYW4oJG1heCk7Ci0rICAkdGItPl9vdXRw dXRfcGxhbigkbWF4LCAkZGlyZWN0aXZlKTsKLSsgICR0Yi0+X291dHB1dF9wbGFuKCRtYXgsICRk aXJlY3RpdmUgPT4gJHJlYXNvbik7Ci0rCi0rSGFuZGxlcyBkaXNwbGF5aW5nIHRoZSB0ZXN0IHBs YW4uCi0rCi0rSWYgYSBDPCRkaXJlY3RpdmU+IGFuZC9vciBDPCRyZWFzb24+IGFyZSBnaXZlbiB0 aGV5IHdpbGwgYmUgb3V0cHV0IHdpdGggdGhlCi0rcGxhbi4gIFNvIGhlcmUncyB3aGF0IHNraXBw aW5nIGFsbCB0ZXN0cyBsb29rcyBsaWtlOgotKwotKyAgICAkdGItPl9vdXRwdXRfcGxhbigwLCAi U0tJUCIsICJCZWNhdXNlIEkgc2FpZCBzbyIpOwotKwotK0l0IHNldHMgQzw8ICR0Yi0+e0hhdmVf T3V0cHV0X1BsYW59ID4+IGFuZCB3aWxsIGNyb2FrIGlmIHRoZSBwbGFuIHdhcyBhbHJlYWR5Ci0r b3V0cHV0LgotKwotKz1lbmQgcHJpdmF0ZQotKwotKz1jdXQKLSsKLStzdWIgX291dHB1dF9wbGFu IHsKLSsgICAgbXkoJHNlbGYsICRtYXgsICRkaXJlY3RpdmUsICRyZWFzb24pID0gQF87Ci0rCi0r ICAgICRzZWxmLT5jYXJwKCJUaGUgcGxhbiB3YXMgYWxyZWFkeSBvdXRwdXQiKSBpZiAkc2VsZi0+ e0hhdmVfT3V0cHV0X1BsYW59OwotKwotKyAgICBteSAkcGxhbiA9ICIxLi4kbWF4IjsKLSsgICAg JHBsYW4gLj0gIiAjICRkaXJlY3RpdmUiIGlmIGRlZmluZWQgJGRpcmVjdGl2ZTsKLSsgICAgJHBs YW4gLj0gIiAkcmVhc29uIiAgICAgIGlmIGRlZmluZWQgJHJlYXNvbjsKLSsKLSsgICAgJHNlbGYt Pl9wcmludCgiJHBsYW5cbiIpOwotKwotKyAgICAkc2VsZi0+e0hhdmVfT3V0cHV0X1BsYW59ID0g MTsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSsKLSs9aXRlbSBCPGRvbmVfdGVzdGluZz4KLSsK LSsgICRUZXN0LT5kb25lX3Rlc3RpbmcoKTsKLSsgICRUZXN0LT5kb25lX3Rlc3RpbmcoJG51bV90 ZXN0cyk7Ci0rCi0rRGVjbGFyZXMgdGhhdCB5b3UgYXJlIGRvbmUgdGVzdGluZywgbm8gbW9yZSB0 ZXN0cyB3aWxsIGJlIHJ1biBhZnRlciB0aGlzIHBvaW50LgotKwotK0lmIGEgcGxhbiBoYXMgbm90 IHlldCBiZWVuIG91dHB1dCwgaXQgd2lsbCBkbyBzby4KLSsKLSskbnVtX3Rlc3RzIGlzIHRoZSBu dW1iZXIgb2YgdGVzdHMgeW91IHBsYW5uZWQgdG8gcnVuLiAgSWYgYSBudW1iZXJlZAotK3BsYW4g d2FzIGFscmVhZHkgZGVjbGFyZWQsIGFuZCBpZiB0aGlzIGNvbnRyYWRpY3RzLCBhIGZhaWxpbmcg dGVzdAotK3dpbGwgYmUgcnVuIHRvIHJlZmxlY3QgdGhlIHBsYW5uaW5nIG1pc3Rha2UuICBJZiBD PG5vX3BsYW4+IHdhcyBkZWNsYXJlZCwKLSt0aGlzIHdpbGwgb3ZlcnJpZGUuCi0rCi0rSWYgQzxk b25lX3Rlc3RpbmcoKT4gaXMgY2FsbGVkIHR3aWNlLCB0aGUgc2Vjb25kIGNhbGwgd2lsbCBpc3N1 ZSBhCi0rZmFpbGluZyB0ZXN0LgotKwotK0lmIEM8JG51bV90ZXN0cz4gaXMgb21pdHRlZCwgdGhl IG51bWJlciBvZiB0ZXN0cyBydW4gd2lsbCBiZSB1c2VkLCBsaWtlCi0rbm9fcGxhbi4KLSsKLStD PGRvbmVfdGVzdGluZygpPiBpcywgaW4gZWZmZWN0LCB1c2VkIHdoZW4geW91J2Qgd2FudCB0byB1 c2UgQzxub19wbGFuPiwgYnV0Ci0rc2FmZXIuIFlvdSdkIHVzZSBpdCBsaWtlIHNvOgotKwotKyAg ICAkVGVzdC0+b2soJGEgPT0gJGIpOwotKyAgICAkVGVzdC0+ZG9uZV90ZXN0aW5nKCk7Ci0rCi0r T3IgdG8gcGxhbiBhIHZhcmlhYmxlIG51bWJlciBvZiB0ZXN0czoKLSsKLSsgICAgZm9yIG15ICR0 ZXN0IChAdGVzdHMpIHsKLSsgICAgICAgICRUZXN0LT5vaygkdGVzdCk7Ci0rICAgIH0KLSsgICAg JFRlc3QtPmRvbmVfdGVzdGluZyhzY2FsYXIgQHRlc3RzKTsKLSsKLSs9Y3V0Ci0rCi0rc3ViIGRv bmVfdGVzdGluZyB7Ci0rICAgIG15KCRzZWxmLCAkbnVtX3Rlc3RzKSA9IEBfOwotKwotKyAgICAj IElmIGRvbmVfdGVzdGluZygpIHNwZWNpZmllZCB0aGUgbnVtYmVyIG9mIHRlc3RzLCBzaHV0IG9m ZiBub19wbGFuLgotKyAgICBpZiggZGVmaW5lZCAkbnVtX3Rlc3RzICkgewotKyAgICAgICAgJHNl bGYtPntOb19QbGFufSA9IDA7Ci0rICAgIH0KLSsgICAgZWxzZSB7Ci0rICAgICAgICAkbnVtX3Rl c3RzID0gJHNlbGYtPmN1cnJlbnRfdGVzdDsKLSsgICAgfQotKwotKyAgICBpZiggJHNlbGYtPntE b25lX1Rlc3Rpbmd9ICkgewotKyAgICAgICAgbXkoJGZpbGUsICRsaW5lKSA9IEB7JHNlbGYtPntE b25lX1Rlc3Rpbmd9fVsxLDJdOwotKyAgICAgICAgJHNlbGYtPm9rKDAsICJkb25lX3Rlc3Rpbmco KSB3YXMgYWxyZWFkeSBjYWxsZWQgYXQgJGZpbGUgbGluZSAkbGluZSIpOwotKyAgICAgICAgcmV0 dXJuOwotKyAgICB9Ci0rCi0rICAgICRzZWxmLT57RG9uZV9UZXN0aW5nfSA9IFtjYWxsZXJdOwot KwotKyAgICBpZiggJHNlbGYtPmV4cGVjdGVkX3Rlc3RzICYmICRudW1fdGVzdHMgIT0gJHNlbGYt PmV4cGVjdGVkX3Rlc3RzICkgewotKyAgICAgICAgJHNlbGYtPm9rKDAsICJwbGFubmVkIHRvIHJ1 biBAe1sgJHNlbGYtPmV4cGVjdGVkX3Rlc3RzIF19ICIuCi0rICAgICAgICAgICAgICAgICAgICAg ImJ1dCBkb25lX3Rlc3RpbmcoKSBleHBlY3RzICRudW1fdGVzdHMiKTsKLSsgICAgfQotKyAgICBl bHNlIHsKLSsgICAgICAgICRzZWxmLT57RXhwZWN0ZWRfVGVzdHN9ID0gJG51bV90ZXN0czsKLSsg ICAgfQotKwotKyAgICAkc2VsZi0+X291dHB1dF9wbGFuKCRudW1fdGVzdHMpIHVubGVzcyAkc2Vs Zi0+e0hhdmVfT3V0cHV0X1BsYW59OwotKwotKyAgICAkc2VsZi0+e0hhdmVfUGxhbn0gPSAxOwot KwotKyAgICAjIFRoZSB3cm9uZyBudW1iZXIgb2YgdGVzdHMgd2VyZSBydW4KLSsgICAgJHNlbGYt PmlzX3Bhc3NpbmcoMCkgaWYgJHNlbGYtPntFeHBlY3RlZF9UZXN0c30gIT0gJHNlbGYtPntDdXJy X1Rlc3R9OwotKwotKyAgICAjIE5vIHRlc3RzIHdlcmUgcnVuCi0rICAgICRzZWxmLT5pc19wYXNz aW5nKDApIGlmICRzZWxmLT57Q3Vycl9UZXN0fSA9PSAwOwotKwotKyAgICByZXR1cm4gMTsKLSt9 Ci0rCi0rCi0rPWl0ZW0gQjxoYXNfcGxhbj4KLSsKLSsgICRwbGFuID0gJFRlc3QtPmhhc19wbGFu Ci0rCi0rRmluZCBvdXQgd2hldGhlciBhIHBsYW4gaGFzIGJlZW4gZGVmaW5lZC4gQzwkcGxhbj4g aXMgZWl0aGVyIEM8dW5kZWY+IChubyBwbGFuCi0raGFzIGJlZW4gc2V0KSwgQzxub19wbGFuPiAo aW5kZXRlcm1pbmF0ZSAjIG9mIHRlc3RzKSBvciBhbiBpbnRlZ2VyICh0aGUgbnVtYmVyCi0rb2Yg ZXhwZWN0ZWQgdGVzdHMpLgotKwotKz1jdXQKLSsKLStzdWIgaGFzX3BsYW4gewotKyAgICBteSAk c2VsZiA9IHNoaWZ0OwotKwotKyAgICByZXR1cm4oICRzZWxmLT57RXhwZWN0ZWRfVGVzdHN9ICkg aWYgJHNlbGYtPntFeHBlY3RlZF9UZXN0c307Ci0rICAgIHJldHVybignbm9fcGxhbicpIGlmICRz ZWxmLT57Tm9fUGxhbn07Ci0rICAgIHJldHVybih1bmRlZik7Ci0rfQotKwotKz1pdGVtIEI8c2tp cF9hbGw+Ci0rCi0rICAkVGVzdC0+c2tpcF9hbGw7Ci0rICAkVGVzdC0+c2tpcF9hbGwoJHJlYXNv bik7Ci0rCi0rU2tpcHMgYWxsIHRoZSB0ZXN0cywgdXNpbmcgdGhlIGdpdmVuIEM8JHJlYXNvbj4u ICBFeGl0cyBpbW1lZGlhdGVseSB3aXRoIDAuCi0rCi0rPWN1dAotKwotK3N1YiBza2lwX2FsbCB7 Ci0rICAgIG15KCAkc2VsZiwgJHJlYXNvbiApID0gQF87Ci0rCi0rICAgICRzZWxmLT57U2tpcF9B bGx9ID0gJHNlbGYtPnBhcmVudCA/ICRyZWFzb24gOiAxOwotKwotKyAgICAkc2VsZi0+X291dHB1 dF9wbGFuKDAsICJTS0lQIiwgJHJlYXNvbikgdW5sZXNzICRzZWxmLT5ub19oZWFkZXI7Ci0rICAg IGlmICggJHNlbGYtPnBhcmVudCApIHsKLSsgICAgICAgIGRpZSBibGVzcyB7fSA9PiAnVGVzdDo6 QnVpbGRlcjo6RXhjZXB0aW9uJzsKLSsgICAgfQotKyAgICBleGl0KDApOwotK30KLSsKLSs9aXRl bSBCPGV4cG9ydGVkX3RvPgotKwotKyAgbXkgJHBhY2sgPSAkVGVzdC0+ZXhwb3J0ZWRfdG87Ci0r ICAkVGVzdC0+ZXhwb3J0ZWRfdG8oJHBhY2spOwotKwotK1RlbGxzIFRlc3Q6OkJ1aWxkZXIgd2hh dCBwYWNrYWdlIHlvdSBleHBvcnRlZCB5b3VyIGZ1bmN0aW9ucyB0by4KLSsKLStUaGlzIG1ldGhv ZCBpc24ndCB0ZXJyaWJseSB1c2VmdWwgc2luY2UgbW9kdWxlcyB3aGljaCBzaGFyZSB0aGUgc2Ft ZQotK1Rlc3Q6OkJ1aWxkZXIgb2JqZWN0IG1pZ2h0IGdldCBleHBvcnRlZCB0byBkaWZmZXJlbnQg cGFja2FnZXMgYW5kIG9ubHkKLSt0aGUgbGFzdCBvbmUgd2lsbCBiZSBob25vcmVkLgotKwotKz1j dXQKLSsKLStzdWIgZXhwb3J0ZWRfdG8gewotKyAgICBteSggJHNlbGYsICRwYWNrICkgPSBAXzsK LSsKLSsgICAgaWYoIGRlZmluZWQgJHBhY2sgKSB7Ci0rICAgICAgICAkc2VsZi0+e0V4cG9ydGVk X1RvfSA9ICRwYWNrOwotKyAgICB9Ci0rICAgIHJldHVybiAkc2VsZi0+e0V4cG9ydGVkX1RvfTsK LSt9Ci0rCi0rPWJhY2sKLSsKLSs9aGVhZDIgUnVubmluZyB0ZXN0cwotKwotK1RoZXNlIGFjdHVh bGx5IHJ1biB0aGUgdGVzdHMsIGFuYWxvZ291cyB0byB0aGUgZnVuY3Rpb25zIGluIFRlc3Q6Ok1v cmUuCi0rCi0rVGhleSBhbGwgcmV0dXJuIHRydWUgaWYgdGhlIHRlc3QgcGFzc2VkLCBmYWxzZSBp ZiB0aGUgdGVzdCBmYWlsZWQuCi0rCi0rQzwkbmFtZT4gaXMgYWx3YXlzIG9wdGlvbmFsLgotKwot Kz1vdmVyIDQKLSsKLSs9aXRlbSBCPG9rPgotKwotKyAgJFRlc3QtPm9rKCR0ZXN0LCAkbmFtZSk7 Ci0rCi0rWW91ciBiYXNpYyB0ZXN0LiAgUGFzcyBpZiBDPCR0ZXN0PiBpcyB0cnVlLCBmYWlsIGlm ICR0ZXN0IGlzIGZhbHNlLiAgSnVzdAotK2xpa2UgVGVzdDo6U2ltcGxlJ3MgQzxvaygpPi4KLSsK LSs9Y3V0Ci0rCi0rc3ViIG9rIHsKLSsgICAgbXkoICRzZWxmLCAkdGVzdCwgJG5hbWUgKSA9IEBf OwotKwotKyAgICBpZiAoICRzZWxmLT57Q2hpbGRfTmFtZX0gYW5kIG5vdCAkc2VsZi0+e0luX0Rl c3Ryb3l9ICkgewotKyAgICAgICAgJG5hbWUgPSAndW5uYW1lZCB0ZXN0JyB1bmxlc3MgZGVmaW5l ZCAkbmFtZTsKLSsgICAgICAgICRzZWxmLT5pc19wYXNzaW5nKDApOwotKyAgICAgICAgJHNlbGYt PmNyb2FrKCJDYW5ub3QgcnVuIHRlc3QgKCRuYW1lKSB3aXRoIGFjdGl2ZSBjaGlsZHJlbiIpOwot KyAgICB9Ci0rICAgICMgJHRlc3QgbWlnaHQgY29udGFpbiBhbiBvYmplY3Qgd2hpY2ggd2UgZG9u J3Qgd2FudCB0byBhY2NpZGVudGFsbHkKLSsgICAgIyBzdG9yZSwgc28gd2UgdHVybiBpdCBpbnRv IGEgYm9vbGVhbi4KLSsgICAgJHRlc3QgPSAkdGVzdCA/IDEgOiAwOwotKwotKyAgICBsb2NrICRz ZWxmLT57Q3Vycl9UZXN0fTsKLSsgICAgJHNlbGYtPntDdXJyX1Rlc3R9Kys7Ci0rCi0rICAgICMg SW4gY2FzZSAkbmFtZSBpcyBhIHN0cmluZyBvdmVybG9hZGVkIG9iamVjdCwgZm9yY2UgaXQgdG8g c3RyaW5naWZ5LgotKyAgICAkc2VsZi0+X3Vub3ZlcmxvYWRfc3RyKCBcJG5hbWUgKTsKLSsKLSsg ICAgJHNlbGYtPmRpYWcoPDwiRVJSIikgaWYgZGVmaW5lZCAkbmFtZSBhbmQgJG5hbWUgPX4gL15b XGRcc10rJC87Ci0rICAgIFlvdSBuYW1lZCB5b3VyIHRlc3QgJyRuYW1lJy4gIFlvdSBzaG91bGRu J3QgdXNlIG51bWJlcnMgZm9yIHlvdXIgdGVzdCBuYW1lcy4KLSsgICAgVmVyeSBjb25mdXNpbmcu Ci0rRVJSCi0rCi0rICAgICMgQ2FwdHVyZSB0aGUgdmFsdWUgb2YgJFRPRE8gZm9yIHRoZSByZXN0 IG9mIHRoaXMgb2soKSBjYWxsCi0rICAgICMgc28gaXQgY2FuIG1vcmUgZWFzaWx5IGJlIGZvdW5k IGJ5IG90aGVyIHJvdXRpbmVzLgotKyAgICBteSAkdG9kbyAgICA9ICRzZWxmLT50b2RvKCk7Ci0r ICAgIG15ICRpbl90b2RvID0gJHNlbGYtPmluX3RvZG87Ci0rICAgIGxvY2FsICRzZWxmLT57VG9k b30gPSAkdG9kbyBpZiAkaW5fdG9kbzsKLSsKLSsgICAgJHNlbGYtPl91bm92ZXJsb2FkX3N0cigg XCR0b2RvICk7Ci0rCi0rICAgIG15ICRvdXQ7Ci0rICAgIG15ICRyZXN1bHQgPSAmc2hhcmUoIHt9 ICk7Ci0rCi0rICAgIHVubGVzcygkdGVzdCkgewotKyAgICAgICAgJG91dCAuPSAibm90ICI7Ci0r ICAgICAgICBAJHJlc3VsdHsgJ29rJywgJ2FjdHVhbF9vaycgfSA9ICggKCAkc2VsZi0+aW5fdG9k byA/IDEgOiAwICksIDAgKTsKLSsgICAgfQotKyAgICBlbHNlIHsKLSsgICAgICAgIEAkcmVzdWx0 eyAnb2snLCAnYWN0dWFsX29rJyB9ID0gKCAxLCAkdGVzdCApOwotKyAgICB9Ci0rCi0rICAgICRv dXQgLj0gIm9rIjsKLSsgICAgJG91dCAuPSAiICRzZWxmLT57Q3Vycl9UZXN0fSIgaWYgJHNlbGYt PnVzZV9udW1iZXJzOwotKwotKyAgICBpZiggZGVmaW5lZCAkbmFtZSApIHsKLSsgICAgICAgICRu YW1lID1+IHN8I3xcXCN8ZzsgICAgIyAjIGluIGEgbmFtZSBjYW4gY29uZnVzZSBUZXN0OjpIYXJu ZXNzLgotKyAgICAgICAgJG91dCAuPSAiIC0gJG5hbWUiOwotKyAgICAgICAgJHJlc3VsdC0+e25h bWV9ID0gJG5hbWU7Ci0rICAgIH0KLSsgICAgZWxzZSB7Ci0rICAgICAgICAkcmVzdWx0LT57bmFt ZX0gPSAnJzsKLSsgICAgfQotKwotKyAgICBpZiggJHNlbGYtPmluX3RvZG8gKSB7Ci0rICAgICAg ICAkb3V0IC49ICIgIyBUT0RPICR0b2RvIjsKLSsgICAgICAgICRyZXN1bHQtPntyZWFzb259ID0g JHRvZG87Ci0rICAgICAgICAkcmVzdWx0LT57dHlwZX0gICA9ICd0b2RvJzsKLSsgICAgfQotKyAg ICBlbHNlIHsKLSsgICAgICAgICRyZXN1bHQtPntyZWFzb259ID0gJyc7Ci0rICAgICAgICAkcmVz dWx0LT57dHlwZX0gICA9ICcnOwotKyAgICB9Ci0rCi0rICAgICRzZWxmLT57VGVzdF9SZXN1bHRz fVsgJHNlbGYtPntDdXJyX1Rlc3R9IC0gMSBdID0gJHJlc3VsdDsKLSsgICAgJG91dCAuPSAiXG4i OwotKwotKyAgICAkc2VsZi0+X3ByaW50KCRvdXQpOwotKwotKyAgICB1bmxlc3MoJHRlc3QpIHsK LSsgICAgICAgIG15ICRtc2cgPSAkc2VsZi0+aW5fdG9kbyA/ICJGYWlsZWQgKFRPRE8pIiA6ICJG YWlsZWQiOwotKyAgICAgICAgJHNlbGYtPl9wcmludF90b19maCggJHNlbGYtPl9kaWFnX2ZoLCAi XG4iICkgaWYgJEVOVntIQVJORVNTX0FDVElWRX07Ci0rCi0rICAgICAgICBteSggdW5kZWYsICRm aWxlLCAkbGluZSApID0gJHNlbGYtPmNhbGxlcjsKLSsgICAgICAgIGlmKCBkZWZpbmVkICRuYW1l ICkgewotKyAgICAgICAgICAgICRzZWxmLT5kaWFnKHFxWyAgJG1zZyB0ZXN0ICckbmFtZSdcbl0p OwotKyAgICAgICAgICAgICRzZWxmLT5kaWFnKHFxWyAgYXQgJGZpbGUgbGluZSAkbGluZS5cbl0p OwotKyAgICAgICAgfQotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgJHNlbGYtPmRpYWco cXFbICAkbXNnIHRlc3QgYXQgJGZpbGUgbGluZSAkbGluZS5cbl0pOwotKyAgICAgICAgfQotKyAg ICB9Ci0rCi0rICAgICRzZWxmLT5pc19wYXNzaW5nKDApIHVubGVzcyAkdGVzdCB8fCAkc2VsZi0+ aW5fdG9kbzsKLSsKLSsgICAgIyBDaGVjayB0aGF0IHdlIGhhdmVuJ3QgdmlvbGF0ZWQgdGhlIHBs YW4KLSsgICAgJHNlbGYtPl9jaGVja19pc19wYXNzaW5nX3BsYW4oKTsKLSsKLSsgICAgcmV0dXJu ICR0ZXN0ID8gMSA6IDA7Ci0rfQotKwotKwotKyMgQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IHlldCB2 aW9sYXRlZCB0aGUgcGxhbiBhbmQgc2V0Ci0rIyBpc19wYXNzaW5nKCkgYWNjb3JkaW5nbHkKLStz dWIgX2NoZWNrX2lzX3Bhc3NpbmdfcGxhbiB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rCi0r ICAgIG15ICRwbGFuID0gJHNlbGYtPmhhc19wbGFuOwotKyAgICByZXR1cm4gdW5sZXNzIGRlZmlu ZWQgJHBsYW47ICAgICAgICAjIG5vIHBsYW4geWV0IGRlZmluZWQKLSsgICAgcmV0dXJuIHVubGVz cyAkcGxhbiAhfiAvXEQvOyAgICAgICAgIyBubyBudW1lcmljIHBsYW4KLSsgICAgJHNlbGYtPmlz X3Bhc3NpbmcoMCkgaWYgJHBsYW4gPCAkc2VsZi0+e0N1cnJfVGVzdH07Ci0rfQotKwotKwotK3N1 YiBfdW5vdmVybG9hZCB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rICAgIG15ICR0eXBlID0g c2hpZnQ7Ci0rCi0rICAgICRzZWxmLT5fdHJ5KHN1YiB7IHJlcXVpcmUgb3ZlcmxvYWQ7IH0sIGRp ZV9vbl9mYWlsID0+IDEpOwotKwotKyAgICBmb3JlYWNoIG15ICR0aGluZyAoQF8pIHsKLSsgICAg ICAgIGlmKCAkc2VsZi0+X2lzX29iamVjdCgkJHRoaW5nKSApIHsKLSsgICAgICAgICAgICBpZigg bXkgJHN0cmluZ19tZXRoID0gb3ZlcmxvYWQ6Ok1ldGhvZCggJCR0aGluZywgJHR5cGUgKSApIHsK LSsgICAgICAgICAgICAgICAgJCR0aGluZyA9ICQkdGhpbmctPiRzdHJpbmdfbWV0aCgpOwotKyAg ICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICByZXR1cm47Ci0rfQotKwot K3N1YiBfaXNfb2JqZWN0IHsKLSsgICAgbXkoICRzZWxmLCAkdGhpbmcgKSA9IEBfOwotKwotKyAg ICByZXR1cm4gJHNlbGYtPl90cnkoIHN1YiB7IHJlZiAkdGhpbmcgJiYgJHRoaW5nLT5pc2EoJ1VO SVZFUlNBTCcpIH0gKSA/IDEgOiAwOwotK30KLSsKLStzdWIgX3Vub3ZlcmxvYWRfc3RyIHsKLSsg ICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsKLSsgICAgcmV0dXJuICRzZWxmLT5fdW5vdmVybG9hZCgg cVsiIl0sIEBfICk7Ci0rfQotKwotK3N1YiBfdW5vdmVybG9hZF9udW0gewotKyAgICBteSAkc2Vs ZiA9IHNoaWZ0OwotKwotKyAgICAkc2VsZi0+X3Vub3ZlcmxvYWQoICcwKycsIEBfICk7Ci0rCi0r ICAgIGZvciBteSAkdmFsIChAXykgewotKyAgICAgICAgbmV4dCB1bmxlc3MgJHNlbGYtPl9pc19k dWFsdmFyKCQkdmFsKTsKLSsgICAgICAgICQkdmFsID0gJCR2YWwgKyAwOwotKyAgICB9Ci0rCi0r ICAgIHJldHVybjsKLSt9Ci0rCi0rIyBUaGlzIGlzIGEgaGFjayB0byBkZXRlY3QgYSBkdWFsdmFy IHN1Y2ggYXMgJCEKLStzdWIgX2lzX2R1YWx2YXIgewotKyAgICBteSggJHNlbGYsICR2YWwgKSA9 IEBfOwotKwotKyAgICAjIE9iamVjdHMgYXJlIG5vdCBkdWFsdmFycy4KLSsgICAgcmV0dXJuIDAg aWYgcmVmICR2YWw7Ci0rCi0rICAgIG5vIHdhcm5pbmdzICdudW1lcmljJzsKLSsgICAgbXkgJG51 bXZhbCA9ICR2YWwgKyAwOwotKyAgICByZXR1cm4gKCRudW12YWwgIT0gMCBhbmQgJG51bXZhbCBu ZSAkdmFsID8gMSA6IDApOwotK30KLSsKLSs9aXRlbSBCPGlzX2VxPgotKwotKyAgJFRlc3QtPmlz X2VxKCRnb3QsICRleHBlY3RlZCwgJG5hbWUpOwotKwotK0xpa2UgVGVzdDo6TW9yZSdzIEM8aXMo KT4uICBDaGVja3MgaWYgQzwkZ290IGVxICRleHBlY3RlZD4uICBUaGlzIGlzIHRoZQotK3N0cmlu ZyB2ZXJzaW9uLgotKwotK0M8dW5kZWY+IG9ubHkgZXZlciBtYXRjaGVzIGFub3RoZXIgQzx1bmRl Zj4uCi0rCi0rPWl0ZW0gQjxpc19udW0+Ci0rCi0rICAkVGVzdC0+aXNfbnVtKCRnb3QsICRleHBl Y3RlZCwgJG5hbWUpOwotKwotK0xpa2UgVGVzdDo6TW9yZSdzIEM8aXMoKT4uICBDaGVja3MgaWYg QzwkZ290ID09ICRleHBlY3RlZD4uICBUaGlzIGlzIHRoZQotK251bWVyaWMgdmVyc2lvbi4KLSsK LStDPHVuZGVmPiBvbmx5IGV2ZXIgbWF0Y2hlcyBhbm90aGVyIEM8dW5kZWY+LgotKwotKz1jdXQK LSsKLStzdWIgaXNfZXEgewotKyAgICBteSggJHNlbGYsICRnb3QsICRleHBlY3QsICRuYW1lICkg PSBAXzsKLSsgICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsKLSsKLSsgICAgaWYoICFkZWZp bmVkICRnb3QgfHwgIWRlZmluZWQgJGV4cGVjdCApIHsKLSsgICAgICAgICMgdW5kZWYgb25seSBt YXRjaGVzIHVuZGVmIGFuZCBub3RoaW5nIGVsc2UKLSsgICAgICAgIG15ICR0ZXN0ID0gIWRlZmlu ZWQgJGdvdCAmJiAhZGVmaW5lZCAkZXhwZWN0OwotKwotKyAgICAgICAgJHNlbGYtPm9rKCAkdGVz dCwgJG5hbWUgKTsKLSsgICAgICAgICRzZWxmLT5faXNfZGlhZyggJGdvdCwgJ2VxJywgJGV4cGVj dCApIHVubGVzcyAkdGVzdDsKLSsgICAgICAgIHJldHVybiAkdGVzdDsKLSsgICAgfQotKwotKyAg ICByZXR1cm4gJHNlbGYtPmNtcF9vayggJGdvdCwgJ2VxJywgJGV4cGVjdCwgJG5hbWUgKTsKLSt9 Ci0rCi0rc3ViIGlzX251bSB7Ci0rICAgIG15KCAkc2VsZiwgJGdvdCwgJGV4cGVjdCwgJG5hbWUg KSA9IEBfOwotKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOwotKwotKyAgICBpZiggIWRl ZmluZWQgJGdvdCB8fCAhZGVmaW5lZCAkZXhwZWN0ICkgewotKyAgICAgICAgIyB1bmRlZiBvbmx5 IG1hdGNoZXMgdW5kZWYgYW5kIG5vdGhpbmcgZWxzZQotKyAgICAgICAgbXkgJHRlc3QgPSAhZGVm aW5lZCAkZ290ICYmICFkZWZpbmVkICRleHBlY3Q7Ci0rCi0rICAgICAgICAkc2VsZi0+b2soICR0 ZXN0LCAkbmFtZSApOwotKyAgICAgICAgJHNlbGYtPl9pc19kaWFnKCAkZ290LCAnPT0nLCAkZXhw ZWN0ICkgdW5sZXNzICR0ZXN0OwotKyAgICAgICAgcmV0dXJuICR0ZXN0OwotKyAgICB9Ci0rCi0r ICAgIHJldHVybiAkc2VsZi0+Y21wX29rKCAkZ290LCAnPT0nLCAkZXhwZWN0LCAkbmFtZSApOwot K30KLSsKLStzdWIgX2RpYWdfZm10IHsKLSsgICAgbXkoICRzZWxmLCAkdHlwZSwgJHZhbCApID0g QF87Ci0rCi0rICAgIGlmKCBkZWZpbmVkICQkdmFsICkgewotKyAgICAgICAgaWYoICR0eXBlIGVx ICdlcScgb3IgJHR5cGUgZXEgJ25lJyApIHsKLSsgICAgICAgICAgICAjIHF1b3RlIGFuZCBmb3Jj ZSBzdHJpbmcgY29udGV4dAotKyAgICAgICAgICAgICQkdmFsID0gIickJHZhbCciOwotKyAgICAg ICAgfQotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgIyBmb3JjZSBudW1lcmljIGNvbnRl eHQKLSsgICAgICAgICAgICAkc2VsZi0+X3Vub3ZlcmxvYWRfbnVtKCR2YWwpOwotKyAgICAgICAg fQotKyAgICB9Ci0rICAgIGVsc2UgewotKyAgICAgICAgJCR2YWwgPSAndW5kZWYnOwotKyAgICB9 Ci0rCi0rICAgIHJldHVybjsKLSt9Ci0rCi0rc3ViIF9pc19kaWFnIHsKLSsgICAgbXkoICRzZWxm LCAkZ290LCAkdHlwZSwgJGV4cGVjdCApID0gQF87Ci0rCi0rICAgICRzZWxmLT5fZGlhZ19mbXQo ICR0eXBlLCAkXyApIGZvciBcJGdvdCwgXCRleHBlY3Q7Ci0rCi0rICAgIGxvY2FsICRMZXZlbCA9 ICRMZXZlbCArIDE7Ci0rICAgIHJldHVybiAkc2VsZi0+ZGlhZyg8PCJESUFHTk9TVElDIik7Ci0r ICAgICAgICAgZ290OiAkZ290Ci0rICAgIGV4cGVjdGVkOiAkZXhwZWN0Ci0rRElBR05PU1RJQwot KwotK30KLSsKLStzdWIgX2lzbnRfZGlhZyB7Ci0rICAgIG15KCAkc2VsZiwgJGdvdCwgJHR5cGUg KSA9IEBfOwotKwotKyAgICAkc2VsZi0+X2RpYWdfZm10KCAkdHlwZSwgXCRnb3QgKTsKLSsKLSsg ICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsKLSsgICAgcmV0dXJuICRzZWxmLT5kaWFnKDw8 IkRJQUdOT1NUSUMiKTsKLSsgICAgICAgICBnb3Q6ICRnb3QKLSsgICAgZXhwZWN0ZWQ6IGFueXRo aW5nIGVsc2UKLStESUFHTk9TVElDCi0rfQotKwotKz1pdGVtIEI8aXNudF9lcT4KLSsKLSsgICRU ZXN0LT5pc250X2VxKCRnb3QsICRkb250X2V4cGVjdCwgJG5hbWUpOwotKwotK0xpa2UgVGVzdDo6 TW9yZSdzIEM8aXNudCgpPi4gIENoZWNrcyBpZiBDPCRnb3QgbmUgJGRvbnRfZXhwZWN0Pi4gIFRo aXMgaXMKLSt0aGUgc3RyaW5nIHZlcnNpb24uCi0rCi0rPWl0ZW0gQjxpc250X251bT4KLSsKLSsg ICRUZXN0LT5pc250X251bSgkZ290LCAkZG9udF9leHBlY3QsICRuYW1lKTsKLSsKLStMaWtlIFRl c3Q6Ok1vcmUncyBDPGlzbnQoKT4uICBDaGVja3MgaWYgQzwkZ290IG5lICRkb250X2V4cGVjdD4u ICBUaGlzIGlzCi0rdGhlIG51bWVyaWMgdmVyc2lvbi4KLSsKLSs9Y3V0Ci0rCi0rc3ViIGlzbnRf ZXEgewotKyAgICBteSggJHNlbGYsICRnb3QsICRkb250X2V4cGVjdCwgJG5hbWUgKSA9IEBfOwot KyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOwotKwotKyAgICBpZiggIWRlZmluZWQgJGdv dCB8fCAhZGVmaW5lZCAkZG9udF9leHBlY3QgKSB7Ci0rICAgICAgICAjIHVuZGVmIG9ubHkgbWF0 Y2hlcyB1bmRlZiBhbmQgbm90aGluZyBlbHNlCi0rICAgICAgICBteSAkdGVzdCA9IGRlZmluZWQg JGdvdCB8fCBkZWZpbmVkICRkb250X2V4cGVjdDsKLSsKLSsgICAgICAgICRzZWxmLT5vayggJHRl c3QsICRuYW1lICk7Ci0rICAgICAgICAkc2VsZi0+X2lzbnRfZGlhZyggJGdvdCwgJ25lJyApIHVu bGVzcyAkdGVzdDsKLSsgICAgICAgIHJldHVybiAkdGVzdDsKLSsgICAgfQotKwotKyAgICByZXR1 cm4gJHNlbGYtPmNtcF9vayggJGdvdCwgJ25lJywgJGRvbnRfZXhwZWN0LCAkbmFtZSApOwotK30K LSsKLStzdWIgaXNudF9udW0gewotKyAgICBteSggJHNlbGYsICRnb3QsICRkb250X2V4cGVjdCwg JG5hbWUgKSA9IEBfOwotKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOwotKwotKyAgICBp ZiggIWRlZmluZWQgJGdvdCB8fCAhZGVmaW5lZCAkZG9udF9leHBlY3QgKSB7Ci0rICAgICAgICAj IHVuZGVmIG9ubHkgbWF0Y2hlcyB1bmRlZiBhbmQgbm90aGluZyBlbHNlCi0rICAgICAgICBteSAk dGVzdCA9IGRlZmluZWQgJGdvdCB8fCBkZWZpbmVkICRkb250X2V4cGVjdDsKLSsKLSsgICAgICAg ICRzZWxmLT5vayggJHRlc3QsICRuYW1lICk7Ci0rICAgICAgICAkc2VsZi0+X2lzbnRfZGlhZygg JGdvdCwgJyE9JyApIHVubGVzcyAkdGVzdDsKLSsgICAgICAgIHJldHVybiAkdGVzdDsKLSsgICAg fQotKwotKyAgICByZXR1cm4gJHNlbGYtPmNtcF9vayggJGdvdCwgJyE9JywgJGRvbnRfZXhwZWN0 LCAkbmFtZSApOwotK30KLSsKLSs9aXRlbSBCPGxpa2U+Ci0rCi0rICAkVGVzdC0+bGlrZSgkdGhp bmcsIHFyLyRyZWdleC8sICRuYW1lKTsKLSsgICRUZXN0LT5saWtlKCR0aGluZywgJy8kcmVnZXgv JywgJG5hbWUpOwotKwotK0xpa2UgVGVzdDo6TW9yZSdzIEM8bGlrZSgpPi4gIENoZWNrcyBpZiAk dGhpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gQzwkcmVnZXg+LgotKwotKz1pdGVtIEI8dW5saWtlPgot KwotKyAgJFRlc3QtPnVubGlrZSgkdGhpbmcsIHFyLyRyZWdleC8sICRuYW1lKTsKLSsgICRUZXN0 LT51bmxpa2UoJHRoaW5nLCAnLyRyZWdleC8nLCAkbmFtZSk7Ci0rCi0rTGlrZSBUZXN0OjpNb3Jl J3MgQzx1bmxpa2UoKT4uICBDaGVja3MgaWYgJHRoaW5nIEI8ZG9lcyBub3QgbWF0Y2g+IHRoZQot K2dpdmVuIEM8JHJlZ2V4Pi4KLSsKLSs9Y3V0Ci0rCi0rc3ViIGxpa2UgewotKyAgICBteSggJHNl bGYsICR0aGluZywgJHJlZ2V4LCAkbmFtZSApID0gQF87Ci0rCi0rICAgIGxvY2FsICRMZXZlbCA9 ICRMZXZlbCArIDE7Ci0rICAgIHJldHVybiAkc2VsZi0+X3JlZ2V4X29rKCAkdGhpbmcsICRyZWdl eCwgJz1+JywgJG5hbWUgKTsKLSt9Ci0rCi0rc3ViIHVubGlrZSB7Ci0rICAgIG15KCAkc2VsZiwg JHRoaW5nLCAkcmVnZXgsICRuYW1lICkgPSBAXzsKLSsKLSsgICAgbG9jYWwgJExldmVsID0gJExl dmVsICsgMTsKLSsgICAgcmV0dXJuICRzZWxmLT5fcmVnZXhfb2soICR0aGluZywgJHJlZ2V4LCAn IX4nLCAkbmFtZSApOwotK30KLSsKLSs9aXRlbSBCPGNtcF9vaz4KLSsKLSsgICRUZXN0LT5jbXBf b2soJHRoaW5nLCAkdHlwZSwgJHRoYXQsICRuYW1lKTsKLSsKLStXb3JrcyBqdXN0IGxpa2UgVGVz dDo6TW9yZSdzIEM8Y21wX29rKCk+LgotKwotKyAgICAkVGVzdC0+Y21wX29rKCRiaWdfbnVtLCAn IT0nLCAkb3RoZXJfYmlnX251bSk7Ci0rCi0rPWN1dAotKwotK215ICVudW1lcmljX2NtcHMgPSBt YXAgeyAoICRfLCAxICkgfSAoICI8IiwgIjw9IiwgIj4iLCAiPj0iLCAiPT0iLCAiIT0iLCAiPD0+ IiApOwotKwotKyMgQmFkLCB0aGVzZSBhcmUgbm90IGNvbXBhcmlzb24gb3BlcmF0b3JzLiBTaG91 bGQgd2UgaW5jbHVkZSBtb3JlPwotK215ICVjbXBfb2tfYmwgPSBtYXAgeyAoICRfLCAxICkgfSAo ICI9IiwgIis9IiwgIi49IiwgIng9IiwgIl49IiwgInw9IiwgInx8PSIsICImJj0iLCAiLi4uIik7 Ci0rCi0rc3ViIGNtcF9vayB7Ci0rICAgIG15KCAkc2VsZiwgJGdvdCwgJHR5cGUsICRleHBlY3Qs ICRuYW1lICkgPSBAXzsKLSsKLSsgICAgaWYgKCRjbXBfb2tfYmx7JHR5cGV9KSB7Ci0rICAgICAg ICAkc2VsZi0+Y3JvYWsoIiR0eXBlIGlzIG5vdCBhIHZhbGlkIGNvbXBhcmlzb24gb3BlcmF0b3Ig aW4gY21wX29rKCkiKTsKLSsgICAgfQotKwotKyAgICBteSAkdGVzdDsKLSsgICAgbXkgJGVycm9y OwotKyAgICB7Ci0rICAgICAgICAjIyBubyBjcml0aWMgKEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hp Yml0U3RyaW5neUV2YWwpCi0rCi0rICAgICAgICBsb2NhbCggJEAsICQhLCAkU0lHe19fRElFX199 ICk7ICAgICMgaXNvbGF0ZSBldmFsCi0rCi0rICAgICAgICBteSgkcGFjaywgJGZpbGUsICRsaW5l KSA9ICRzZWxmLT5jYWxsZXIoKTsKLSsKLSsgICAgICAgICMgVGhpcyBpcyBzbyB0aGF0IHdhcm5p bmdzIGNvbWUgb3V0IGF0IHRoZSBjYWxsZXIncyBsZXZlbAotKyAgICAgICAgJHRlc3QgPSBldmFs IHFxWwotKyNsaW5lICRsaW5lICIoZXZhbCBpbiBjbXBfb2spICRmaWxlIgotK1wkZ290ICR0eXBl IFwkZXhwZWN0OwotK107Ci0rICAgICAgICAkZXJyb3IgPSAkQDsKLSsgICAgfQotKyAgICBsb2Nh bCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOwotKyAgICBteSAkb2sgPSAkc2VsZi0+b2soICR0ZXN0LCAk bmFtZSApOwotKwotKyAgICAjIFRyZWF0IG92ZXJsb2FkZWQgb2JqZWN0cyBhcyBudW1iZXJzIGlm IHdlJ3JlIGFza2VkIHRvIGRvIGEKLSsgICAgIyBudW1lcmljIGNvbXBhcmlzb24uCi0rICAgIG15 ICR1bm92ZXJsb2FkCi0rICAgICAgPSAkbnVtZXJpY19jbXBzeyR0eXBlfQotKyAgICAgID8gJ191 bm92ZXJsb2FkX251bScKLSsgICAgICA6ICdfdW5vdmVybG9hZF9zdHInOwotKwotKyAgICAkc2Vs Zi0+ZGlhZyg8PCJFTkQiKSBpZiAkZXJyb3I7Ci0rQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdXNp bmcgJHR5cGU6Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rJGVycm9y Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rRU5ECi0rCi0rICAgIHVu bGVzcygkb2spIHsKLSsgICAgICAgICRzZWxmLT4kdW5vdmVybG9hZCggXCRnb3QsIFwkZXhwZWN0 ICk7Ci0rCi0rICAgICAgICBpZiggJHR5cGUgPX4gL14oZXF8PT0pJC8gKSB7Ci0rICAgICAgICAg ICAgJHNlbGYtPl9pc19kaWFnKCAkZ290LCAkdHlwZSwgJGV4cGVjdCApOwotKyAgICAgICAgfQot KyAgICAgICAgZWxzaWYoICR0eXBlID1+IC9eKG5lfCE9KSQvICkgewotKyAgICAgICAgICAgICRz ZWxmLT5faXNudF9kaWFnKCAkZ290LCAkdHlwZSApOwotKyAgICAgICAgfQotKyAgICAgICAgZWxz ZSB7Ci0rICAgICAgICAgICAgJHNlbGYtPl9jbXBfZGlhZyggJGdvdCwgJHR5cGUsICRleHBlY3Qg KTsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICByZXR1cm4gJG9rOwotK30KLSsKLStzdWIgX2Nt cF9kaWFnIHsKLSsgICAgbXkoICRzZWxmLCAkZ290LCAkdHlwZSwgJGV4cGVjdCApID0gQF87Ci0r Ci0rICAgICRnb3QgICAgPSBkZWZpbmVkICRnb3QgICAgPyAiJyRnb3QnIiAgICA6ICd1bmRlZic7 Ci0rICAgICRleHBlY3QgPSBkZWZpbmVkICRleHBlY3QgPyAiJyRleHBlY3QnIiA6ICd1bmRlZic7 Ci0rCi0rICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7Ci0rICAgIHJldHVybiAkc2VsZi0+ ZGlhZyg8PCJESUFHTk9TVElDIik7Ci0rICAgICRnb3QKLSsgICAgICAgICR0eXBlCi0rICAgICRl eHBlY3QKLStESUFHTk9TVElDCi0rfQotKwotK3N1YiBfY2FsbGVyX2NvbnRleHQgewotKyAgICBt eSAkc2VsZiA9IHNoaWZ0OwotKwotKyAgICBteSggJHBhY2ssICRmaWxlLCAkbGluZSApID0gJHNl bGYtPmNhbGxlcigxKTsKLSsKLSsgICAgbXkgJGNvZGUgPSAnJzsKLSsgICAgJGNvZGUgLj0gIiNs aW5lICRsaW5lICRmaWxlXG4iIGlmIGRlZmluZWQgJGZpbGUgYW5kIGRlZmluZWQgJGxpbmU7Ci0r Ci0rICAgIHJldHVybiAkY29kZTsKLSt9Ci0rCi0rPWJhY2sKLSsKLSsKLSs9aGVhZDIgT3RoZXIg VGVzdGluZyBNZXRob2RzCi0rCi0rVGhlc2UgYXJlIG1ldGhvZHMgd2hpY2ggYXJlIHVzZWQgaW4g dGhlIGNvdXJzZSBvZiB3cml0aW5nIGEgdGVzdCBidXQgYXJlIG5vdCB0aGVtc2VsdmVzIHRlc3Rz LgotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBCPEJBSUxfT1VUPgotKwotKyAgICAkVGVzdC0+QkFJ TF9PVVQoJHJlYXNvbik7Ci0rCi0rSW5kaWNhdGVzIHRvIHRoZSBUZXN0OjpIYXJuZXNzIHRoYXQg dGhpbmdzIGFyZSBnb2luZyBzbyBiYWRseSBhbGwKLSt0ZXN0aW5nIHNob3VsZCB0ZXJtaW5hdGUu ICBUaGlzIGluY2x1ZGVzIHJ1bm5pbmcgYW55IGFkZGl0aW9uYWwgdGVzdAotK3NjcmlwdHMuCi0r Ci0rSXQgd2lsbCBleGl0IHdpdGggMjU1LgotKwotKz1jdXQKLSsKLStzdWIgQkFJTF9PVVQgewot KyAgICBteSggJHNlbGYsICRyZWFzb24gKSA9IEBfOwotKwotKyAgICAkc2VsZi0+e0JhaWxlZF9P dXR9ID0gMTsKLSsKLSsgICAgaWYgKCRzZWxmLT5wYXJlbnQpIHsKLSsgICAgICAgICRzZWxmLT57 QmFpbGVkX091dF9SZWFzb259ID0gJHJlYXNvbjsKLSsgICAgICAgICRzZWxmLT5ub19lbmRpbmco MSk7Ci0rICAgICAgICBkaWUgYmxlc3Mge30gPT4gJ1Rlc3Q6OkJ1aWxkZXI6OkV4Y2VwdGlvbic7 Ci0rICAgIH0KLSsKLSsgICAgJHNlbGYtPl9wcmludCgiQmFpbCBvdXQhICAkcmVhc29uIik7Ci0r ICAgIGV4aXQgMjU1OwotK30KLSsKLSs9Zm9yIGRlcHJlY2F0ZWQKLStCQUlMX09VVCgpIHVzZWQg dG8gYmUgQkFJTE9VVCgpCi0rCi0rPWN1dAotKwotK3sKLSsgICAgbm8gd2FybmluZ3MgJ29uY2Un OwotKyAgICAqQkFJTE9VVCA9IFwmQkFJTF9PVVQ7Ci0rfQotKwotKz1pdGVtIEI8c2tpcD4KLSsK LSsgICAgJFRlc3QtPnNraXA7Ci0rICAgICRUZXN0LT5za2lwKCR3aHkpOwotKwotK1NraXBzIHRo ZSBjdXJyZW50IHRlc3QsIHJlcG9ydGluZyBDPCR3aHk+LgotKwotKz1jdXQKLSsKLStzdWIgc2tp cCB7Ci0rICAgIG15KCAkc2VsZiwgJHdoeSApID0gQF87Ci0rICAgICR3aHkgfHw9ICcnOwotKyAg ICAkc2VsZi0+X3Vub3ZlcmxvYWRfc3RyKCBcJHdoeSApOwotKwotKyAgICBsb2NrKCAkc2VsZi0+ e0N1cnJfVGVzdH0gKTsKLSsgICAgJHNlbGYtPntDdXJyX1Rlc3R9Kys7Ci0rCi0rICAgICRzZWxm LT57VGVzdF9SZXN1bHRzfVsgJHNlbGYtPntDdXJyX1Rlc3R9IC0gMSBdID0gJnNoYXJlKAotKyAg ICAgICAgewotKyAgICAgICAgICAgICdvaycgICAgICA9PiAxLAotKyAgICAgICAgICAgIGFjdHVh bF9vayA9PiAxLAotKyAgICAgICAgICAgIG5hbWUgICAgICA9PiAnJywKLSsgICAgICAgICAgICB0 eXBlICAgICAgPT4gJ3NraXAnLAotKyAgICAgICAgICAgIHJlYXNvbiAgICA9PiAkd2h5LAotKyAg ICAgICAgfQotKyAgICApOwotKwotKyAgICBteSAkb3V0ID0gIm9rIjsKLSsgICAgJG91dCAuPSAi ICRzZWxmLT57Q3Vycl9UZXN0fSIgaWYgJHNlbGYtPnVzZV9udW1iZXJzOwotKyAgICAkb3V0IC49 ICIgIyBza2lwIjsKLSsgICAgJG91dCAuPSAiICR3aHkiICAgICAgICAgICAgICAgaWYgbGVuZ3Ro ICR3aHk7Ci0rICAgICRvdXQgLj0gIlxuIjsKLSsKLSsgICAgJHNlbGYtPl9wcmludCgkb3V0KTsK LSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKz1pdGVtIEI8dG9kb19za2lwPgotKwotKyAgJFRl c3QtPnRvZG9fc2tpcDsKLSsgICRUZXN0LT50b2RvX3NraXAoJHdoeSk7Ci0rCi0rTGlrZSBDPHNr aXAoKT4sIG9ubHkgaXQgd2lsbCBkZWNsYXJlIHRoZSB0ZXN0IGFzIGZhaWxpbmcgYW5kIFRPRE8u ICBTaW1pbGFyCi0rdG8KLSsKLSsgICAgcHJpbnQgIm5vdCBvayAkdG51bSAjIFRPRE8gJHdoeVxu IjsKLSsKLSs9Y3V0Ci0rCi0rc3ViIHRvZG9fc2tpcCB7Ci0rICAgIG15KCAkc2VsZiwgJHdoeSAp ID0gQF87Ci0rICAgICR3aHkgfHw9ICcnOwotKwotKyAgICBsb2NrKCAkc2VsZi0+e0N1cnJfVGVz dH0gKTsKLSsgICAgJHNlbGYtPntDdXJyX1Rlc3R9Kys7Ci0rCi0rICAgICRzZWxmLT57VGVzdF9S ZXN1bHRzfVsgJHNlbGYtPntDdXJyX1Rlc3R9IC0gMSBdID0gJnNoYXJlKAotKyAgICAgICAgewot KyAgICAgICAgICAgICdvaycgICAgICA9PiAxLAotKyAgICAgICAgICAgIGFjdHVhbF9vayA9PiAw LAotKyAgICAgICAgICAgIG5hbWUgICAgICA9PiAnJywKLSsgICAgICAgICAgICB0eXBlICAgICAg PT4gJ3RvZG9fc2tpcCcsCi0rICAgICAgICAgICAgcmVhc29uICAgID0+ICR3aHksCi0rICAgICAg ICB9Ci0rICAgICk7Ci0rCi0rICAgIG15ICRvdXQgPSAibm90IG9rIjsKLSsgICAgJG91dCAuPSAi ICRzZWxmLT57Q3Vycl9UZXN0fSIgaWYgJHNlbGYtPnVzZV9udW1iZXJzOwotKyAgICAkb3V0IC49 ICIgIyBUT0RPICYgU0tJUCAkd2h5XG4iOwotKwotKyAgICAkc2VsZi0+X3ByaW50KCRvdXQpOwot KwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rPWJlZ2luIF91bmltcGxlbWVudGVkCi0rCi0rPWl0 ZW0gQjxza2lwX3Jlc3Q+Ci0rCi0rICAkVGVzdC0+c2tpcF9yZXN0OwotKyAgJFRlc3QtPnNraXBf cmVzdCgkcmVhc29uKTsKLSsKLStMaWtlIEM8c2tpcCgpPiwgb25seSBpdCBza2lwcyBhbGwgdGhl IHJlc3Qgb2YgdGhlIHRlc3RzIHlvdSBwbGFuIHRvIHJ1bgotK2FuZCB0ZXJtaW5hdGVzIHRoZSB0 ZXN0LgotKwotK0lmIHlvdSdyZSBydW5uaW5nIHVuZGVyIEM8bm9fcGxhbj4sIGl0IHNraXBzIG9u Y2UgYW5kIHRlcm1pbmF0ZXMgdGhlCi0rdGVzdC4KLSsKLSs9ZW5kIF91bmltcGxlbWVudGVkCi0r Ci0rPWJhY2sKLSsKLSsKLSs9aGVhZDIgVGVzdCBidWlsZGluZyB1dGlsaXR5IG1ldGhvZHMKLSsK LStUaGVzZSBtZXRob2RzIGFyZSB1c2VmdWwgd2hlbiB3cml0aW5nIHlvdXIgb3duIHRlc3QgbWV0 aG9kcy4KLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQjxtYXliZV9yZWdleD4KLSsKLSsgICRUZXN0 LT5tYXliZV9yZWdleChxci8kcmVnZXgvKTsKLSsgICRUZXN0LT5tYXliZV9yZWdleCgnLyRyZWdl eC8nKTsKLSsKLStUaGlzIG1ldGhvZCB1c2VkIHRvIGJlIHVzZWZ1bCBiYWNrIHdoZW4gVGVzdDo6 QnVpbGRlciB3b3JrZWQgb24gUGVybHMKLStiZWZvcmUgNS42IHdoaWNoIGRpZG4ndCBoYXZlIHFy Ly8uICBOb3cgaXRzIHByZXR0eSB1c2VsZXNzLgotKwotK0NvbnZlbmllbmNlIG1ldGhvZCBmb3Ig YnVpbGRpbmcgdGVzdGluZyBmdW5jdGlvbnMgdGhhdCB0YWtlIHJlZ3VsYXIKLStleHByZXNzaW9u cyBhcyBhcmd1bWVudHMuCi0rCi0rVGFrZXMgYSBxdW90ZWQgcmVndWxhciBleHByZXNzaW9uIHBy b2R1Y2VkIGJ5IEM8cXIvLz4sIG9yIGEgc3RyaW5nCi0rcmVwcmVzZW50aW5nIGEgcmVndWxhciBl eHByZXNzaW9uLgotKwotK1JldHVybnMgYSBQZXJsIHZhbHVlIHdoaWNoIG1heSBiZSB1c2VkIGlu c3RlYWQgb2YgdGhlIGNvcnJlc3BvbmRpbmcKLStyZWd1bGFyIGV4cHJlc3Npb24sIG9yIEM8dW5k ZWY+IGlmIGl0cyBhcmd1bWVudCBpcyBub3QgcmVjb2duaXNlZC4KLSsKLStGb3IgZXhhbXBsZSwg YSB2ZXJzaW9uIG9mIEM8bGlrZSgpPiwgc2FucyB0aGUgdXNlZnVsIGRpYWdub3N0aWMgbWVzc2Fn ZXMsCi0rY291bGQgYmUgd3JpdHRlbiBhczoKLSsKLSsgIHN1YiBsYWNvbmljX2xpa2UgewotKyAg ICAgIG15ICgkc2VsZiwgJHRoaW5nLCAkcmVnZXgsICRuYW1lKSA9IEBfOwotKyAgICAgIG15ICR1 c2FibGVfcmVnZXggPSAkc2VsZi0+bWF5YmVfcmVnZXgoJHJlZ2V4KTsKLSsgICAgICBkaWUgImV4 cGVjdGluZyByZWdleCwgZm91bmQgJyRyZWdleCdcbiIKLSsgICAgICAgICAgdW5sZXNzICR1c2Fi bGVfcmVnZXg7Ci0rICAgICAgJHNlbGYtPm9rKCR0aGluZyA9fiBtLyR1c2FibGVfcmVnZXgvLCAk bmFtZSk7Ci0rICB9Ci0rCi0rPWN1dAotKwotK3N1YiBtYXliZV9yZWdleCB7Ci0rICAgIG15KCAk c2VsZiwgJHJlZ2V4ICkgPSBAXzsKLSsgICAgbXkgJHVzYWJsZV9yZWdleCA9IHVuZGVmOwotKwot KyAgICByZXR1cm4gJHVzYWJsZV9yZWdleCB1bmxlc3MgZGVmaW5lZCAkcmVnZXg7Ci0rCi0rICAg IG15KCAkcmUsICRvcHRzICk7Ci0rCi0rICAgICMgQ2hlY2sgZm9yIHFyL2Zvby8KLSsgICAgaWYo IF9pc19xcigkcmVnZXgpICkgewotKyAgICAgICAgJHVzYWJsZV9yZWdleCA9ICRyZWdleDsKLSsg ICAgfQotKyAgICAjIENoZWNrIGZvciAnL2Zvby8nIG9yICdtLGZvbywnCi0rICAgIGVsc2lmKCgg JHJlLCAkb3B0cyApICAgICAgICA9ICRyZWdleCA9fiBte14gLyguKikvIChcdyopICQgfXN4ICAg ICAgICAgICAgICBvcgotKyAgICAgICAgICAoIHVuZGVmLCAkcmUsICRvcHRzICkgPSAkcmVnZXgg PX4gbSxeIG0oW15cd1xzXSkgKC4rKSBcMSAoXHcqKSAkLHN4Ci0rICAgICkKLSsgICAgewotKyAg ICAgICAgJHVzYWJsZV9yZWdleCA9IGxlbmd0aCAkb3B0cyA/ICIoPyRvcHRzKSRyZSIgOiAkcmU7 Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuICR1c2FibGVfcmVnZXg7Ci0rfQotKwotK3N1YiBfaXNf cXIgewotKyAgICBteSAkcmVnZXggPSBzaGlmdDsKLSsKLSsgICAgIyBpc19yZWdleHAoKSBjaGVj a3MgZm9yIHJlZ2V4ZXMgaW4gYSByb2J1c3QgbWFubmVyLCBzYXkgaWYgdGhleSdyZQotKyAgICAj IGJsZXNzZWQuCi0rICAgIHJldHVybiByZTo6aXNfcmVnZXhwKCRyZWdleCkgaWYgZGVmaW5lZCAm cmU6OmlzX3JlZ2V4cDsKLSsgICAgcmV0dXJuIHJlZiAkcmVnZXggZXEgJ1JlZ2V4cCc7Ci0rfQot KwotK3N1YiBfcmVnZXhfb2sgewotKyAgICBteSggJHNlbGYsICR0aGluZywgJHJlZ2V4LCAkY21w LCAkbmFtZSApID0gQF87Ci0rCi0rICAgIG15ICRvayAgICAgICAgICAgPSAwOwotKyAgICBteSAk dXNhYmxlX3JlZ2V4ID0gJHNlbGYtPm1heWJlX3JlZ2V4KCRyZWdleCk7Ci0rICAgIHVubGVzcygg ZGVmaW5lZCAkdXNhYmxlX3JlZ2V4ICkgewotKyAgICAgICAgbG9jYWwgJExldmVsID0gJExldmVs ICsgMTsKLSsgICAgICAgICRvayA9ICRzZWxmLT5vayggMCwgJG5hbWUgKTsKLSsgICAgICAgICRz ZWxmLT5kaWFnKCIgICAgJyRyZWdleCcgZG9lc24ndCBsb29rIG11Y2ggbGlrZSBhIHJlZ2V4IHRv IG1lLiIpOwotKyAgICAgICAgcmV0dXJuICRvazsKLSsgICAgfQotKwotKyAgICB7Ci0rICAgICAg ICBteSAkdGVzdDsKLSsgICAgICAgIG15ICRjb250ZXh0ID0gJHNlbGYtPl9jYWxsZXJfY29udGV4 dDsKLSsKLSsgICAgICAgIHsKLSsgICAgICAgICAgICAjIyBubyBjcml0aWMgKEJ1aWx0aW5GdW5j dGlvbnM6OlByb2hpYml0U3RyaW5neUV2YWwpCi0rCi0rICAgICAgICAgICAgbG9jYWwoICRALCAk ISwgJFNJR3tfX0RJRV9ffSApOyAgICAjIGlzb2xhdGUgZXZhbAotKwotKyAgICAgICAgICAgICMg Tm8gcG9pbnQgaW4gaXNzdWluZyBhbiB1bmluaXQgd2FybmluZywgdGhleSdsbCBzZWUgaXQgaW4g dGhlIGRpYWdub3N0aWNzCi0rICAgICAgICAgICAgbm8gd2FybmluZ3MgJ3VuaW5pdGlhbGl6ZWQn OwotKwotKyAgICAgICAgICAgICR0ZXN0ID0gZXZhbCAkY29udGV4dCAuIHF7JHRlc3QgPSAkdGhp bmcgPX4gLyR1c2FibGVfcmVnZXgvID8gMSA6IDB9OwotKyAgICAgICAgfQotKwotKyAgICAgICAg JHRlc3QgPSAhJHRlc3QgaWYgJGNtcCBlcSAnIX4nOwotKwotKyAgICAgICAgbG9jYWwgJExldmVs ID0gJExldmVsICsgMTsKLSsgICAgICAgICRvayA9ICRzZWxmLT5vayggJHRlc3QsICRuYW1lICk7 Ci0rICAgIH0KLSsKLSsgICAgdW5sZXNzKCRvaykgewotKyAgICAgICAgJHRoaW5nID0gZGVmaW5l ZCAkdGhpbmcgPyAiJyR0aGluZyciIDogJ3VuZGVmJzsKLSsgICAgICAgIG15ICRtYXRjaCA9ICRj bXAgZXEgJz1+JyA/ICJkb2Vzbid0IG1hdGNoIiA6ICJtYXRjaGVzIjsKLSsKLSsgICAgICAgIGxv Y2FsICRMZXZlbCA9ICRMZXZlbCArIDE7Ci0rICAgICAgICAkc2VsZi0+ZGlhZyggc3ByaW50ZiA8 PCdESUFHTk9TVElDJywgJHRoaW5nLCAkbWF0Y2gsICRyZWdleCApOwotKyAgICAgICAgICAgICAg ICAgICVzCi0rICAgICUxM3MgJyVzJwotK0RJQUdOT1NUSUMKLSsKLSsgICAgfQotKwotKyAgICBy ZXR1cm4gJG9rOwotK30KLSsKLSsjIEknbSBub3QgcmVhZHkgdG8gcHVibGlzaCB0aGlzLiAgSXQg ZG9lc24ndCBkZWFsIHdpdGggYXJyYXkgcmV0dXJuCi0rIyB2YWx1ZXMgZnJvbSB0aGUgY29kZSBv ciBjb250ZXh0LgotKwotKz1iZWdpbiBwcml2YXRlCi0rCi0rPWl0ZW0gQjxfdHJ5PgotKwotKyAg ICBteSAkcmV0dXJuX2Zyb21fY29kZSAgICAgICAgICA9ICRUZXN0LT50cnkoc3ViIHsgY29kZSB9 KTsKLSsgICAgbXkoJHJldHVybl9mcm9tX2NvZGUsICRlcnJvcikgPSAkVGVzdC0+dHJ5KHN1YiB7 IGNvZGUgfSk7Ci0rCi0rV29ya3MgbGlrZSBldmFsIEJMT0NLIGV4Y2VwdCBpdCBlbnN1cmVzIGl0 IGhhcyBubyBlZmZlY3Qgb24gdGhlIHJlc3QKLStvZiB0aGUgdGVzdCAoaWUuIEM8JEA+IGlzIG5v dCBzZXQpIG5vciBpcyBlZmZlY3RlZCBieSBvdXRzaWRlCi0raW50ZXJmZXJlbmNlIChpZS4gQzwk U0lHe19fRElFX199PikgYW5kIHdvcmtzIGFyb3VuZCBzb21lIHF1aXJrcyBpbiBvbGRlcgotK1Bl cmxzLgotKwotK0M8JGVycm9yPiBpcyB3aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGluIEM8JEA+Lgot KwotK0l0IGlzIHN1Z2dlc3RlZCB5b3UgdXNlIHRoaXMgaW4gcGxhY2Ugb2YgZXZhbCBCTE9DSy4K LSsKLSs9Y3V0Ci0rCi0rc3ViIF90cnkgewotKyAgICBteSggJHNlbGYsICRjb2RlLCAlb3B0cyAp ID0gQF87Ci0rCi0rICAgIG15ICRlcnJvcjsKLSsgICAgbXkgJHJldHVybjsKLSsgICAgewotKyAg ICAgICAgbG9jYWwgJCE7ICAgICAgICAgICAgICAgIyBldmFsIGNhbiBtZXNzIHVwICQhCi0rICAg ICAgICBsb2NhbCAkQDsgICAgICAgICAgICAgICAjIGRvbid0IHNldCAkQCBpbiB0aGUgdGVzdAot KyAgICAgICAgbG9jYWwgJFNJR3tfX0RJRV9ffTsgICAgIyBkb24ndCB0cmlwIGFuIG91dHNpZGUg RElFIGhhbmRsZXIuCi0rICAgICAgICAkcmV0dXJuID0gZXZhbCB7ICRjb2RlLT4oKSB9OwotKyAg ICAgICAgJGVycm9yID0gJEA7Ci0rICAgIH0KLSsKLSsgICAgZGllICRlcnJvciBpZiAkZXJyb3Ig YW5kICRvcHRze2RpZV9vbl9mYWlsfTsKLSsKLSsgICAgcmV0dXJuIHdhbnRhcnJheSA/ICggJHJl dHVybiwgJGVycm9yICkgOiAkcmV0dXJuOwotK30KLSsKLSs9ZW5kIHByaXZhdGUKLSsKLSsKLSs9 aXRlbSBCPGlzX2ZoPgotKwotKyAgICBteSAkaXNfZmggPSAkVGVzdC0+aXNfZmgoJHRoaW5nKTsK LSsKLStEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBDPCR0aGluZz4gY2FuIGJlIHVzZWQgYXMgYSBm aWxlaGFuZGxlLgotKwotKz1jdXQKLSsKLStzdWIgaXNfZmggewotKyAgICBteSAkc2VsZiAgICAg PSBzaGlmdDsKLSsgICAgbXkgJG1heWJlX2ZoID0gc2hpZnQ7Ci0rICAgIHJldHVybiAwIHVubGVz cyBkZWZpbmVkICRtYXliZV9maDsKLSsKLSsgICAgcmV0dXJuIDEgaWYgcmVmICRtYXliZV9maCAg ZXEgJ0dMT0InOyAgICAjIGl0cyBhIGdsb2IgcmVmCi0rICAgIHJldHVybiAxIGlmIHJlZiBcJG1h eWJlX2ZoIGVxICdHTE9CJzsgICAgIyBpdHMgYSBnbG9iCi0rCi0rICAgIHJldHVybiBldmFsIHsg JG1heWJlX2ZoLT5pc2EoIklPOjpIYW5kbGUiKSB9IHx8Ci0rICAgICAgICAgICBldmFsIHsgdGll ZCgkbWF5YmVfZmgpLT5jYW4oJ1RJRUhBTkRMRScpIH07Ci0rfQotKwotKz1iYWNrCi0rCi0rCi0r PWhlYWQyIFRlc3Qgc3R5bGUKLSsKLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQjxsZXZlbD4KLSsK LSsgICAgJFRlc3QtPmxldmVsKCRob3dfaGlnaCk7Ci0rCi0rSG93IGZhciB1cCB0aGUgY2FsbCBz dGFjayBzaG91bGQgQzwkVGVzdD4gbG9vayB3aGVuIHJlcG9ydGluZyB3aGVyZSB0aGUKLSt0ZXN0 IGZhaWxlZC4KLSsKLStEZWZhdWx0cyB0byAxLgotKwotK1NldHRpbmcgTDwkVGVzdDo6QnVpbGRl cjo6TGV2ZWw+IG92ZXJyaWRlcy4gIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWZ1bAotK2xvY2FsaXpl ZDoKLSsKLSsgICAgc3ViIG15X29rIHsKLSsgICAgICAgIG15ICR0ZXN0ID0gc2hpZnQ7Ci0rCi0r ICAgICAgICBsb2NhbCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2 ZWwgKyAxOwotKyAgICAgICAgJFRCLT5vaygkdGVzdCk7Ci0rICAgIH0KLSsKLStUbyBiZSBwb2xp dGUgdG8gb3RoZXIgZnVuY3Rpb25zIHdyYXBwaW5nIHlvdXIgb3duIHlvdSB1c3VhbGx5IHdhbnQg dG8gaW5jcmVtZW50IEM8JExldmVsPiByYXRoZXIgdGhhbiBzZXQgaXQgdG8gYSBjb25zdGFudC4K LSsKLSs9Y3V0Ci0rCi0rc3ViIGxldmVsIHsKLSsgICAgbXkoICRzZWxmLCAkbGV2ZWwgKSA9IEBf OwotKwotKyAgICBpZiggZGVmaW5lZCAkbGV2ZWwgKSB7Ci0rICAgICAgICAkTGV2ZWwgPSAkbGV2 ZWw7Ci0rICAgIH0KLSsgICAgcmV0dXJuICRMZXZlbDsKLSt9Ci0rCi0rPWl0ZW0gQjx1c2VfbnVt YmVycz4KLSsKLSsgICAgJFRlc3QtPnVzZV9udW1iZXJzKCRvbl9vcl9vZmYpOwotKwotK1doZXRo ZXIgb3Igbm90IHRoZSB0ZXN0IHNob3VsZCBvdXRwdXQgbnVtYmVycy4gIFRoYXQgaXMsIHRoaXMg aWYgdHJ1ZToKLSsKLSsgIG9rIDEKLSsgIG9rIDIKLSsgIG9rIDMKLSsKLStvciB0aGlzIGlmIGZh bHNlCi0rCi0rICBvawotKyAgb2sKLSsgIG9rCi0rCi0rTW9zdCB1c2VmdWwgd2hlbiB5b3UgY2Fu J3QgZGVwZW5kIG9uIHRoZSB0ZXN0IG91dHB1dCBvcmRlciwgc3VjaCBhcwotK3doZW4gdGhyZWFk cyBvciBmb3JraW5nIGlzIGludm9sdmVkLgotKwotK0RlZmF1bHRzIHRvIG9uLgotKwotKz1jdXQK LSsKLStzdWIgdXNlX251bWJlcnMgewotKyAgICBteSggJHNlbGYsICR1c2VfbnVtcyApID0gQF87 Ci0rCi0rICAgIGlmKCBkZWZpbmVkICR1c2VfbnVtcyApIHsKLSsgICAgICAgICRzZWxmLT57VXNl X051bXN9ID0gJHVzZV9udW1zOwotKyAgICB9Ci0rICAgIHJldHVybiAkc2VsZi0+e1VzZV9OdW1z fTsKLSt9Ci0rCi0rPWl0ZW0gQjxub19kaWFnPgotKwotKyAgICAkVGVzdC0+bm9fZGlhZygkbm9f ZGlhZyk7Ci0rCi0rSWYgc2V0IHRydWUgbm8gZGlhZ25vc3RpY3Mgd2lsbCBiZSBwcmludGVkLiAg VGhpcyBpbmNsdWRlcyBjYWxscyB0bwotK0M8ZGlhZygpPi4KLSsKLSs9aXRlbSBCPG5vX2VuZGlu Zz4KLSsKLSsgICAgJFRlc3QtPm5vX2VuZGluZygkbm9fZW5kaW5nKTsKLSsKLStOb3JtYWxseSwg VGVzdDo6QnVpbGRlciBkb2VzIHNvbWUgZXh0cmEgZGlhZ25vc3RpY3Mgd2hlbiB0aGUgdGVzdAot K2VuZHMuICBJdCBhbHNvIGNoYW5nZXMgdGhlIGV4aXQgY29kZSBhcyBkZXNjcmliZWQgYmVsb3cu Ci0rCi0rSWYgdGhpcyBpcyB0cnVlLCBub25lIG9mIHRoYXQgd2lsbCBiZSBkb25lLgotKwotKz1p dGVtIEI8bm9faGVhZGVyPgotKwotKyAgICAkVGVzdC0+bm9faGVhZGVyKCRub19oZWFkZXIpOwot KwotK0lmIHNldCB0byB0cnVlLCBubyAiMS4uTiIgaGVhZGVyIHdpbGwgYmUgcHJpbnRlZC4KLSsK LSs9Y3V0Ci0rCi0rZm9yZWFjaCBteSAkYXR0cmlidXRlIChxdyhOb19IZWFkZXIgTm9fRW5kaW5n IE5vX0RpYWcpKSB7Ci0rICAgIG15ICRtZXRob2QgPSBsYyAkYXR0cmlidXRlOwotKwotKyAgICBt eSAkY29kZSA9IHN1YiB7Ci0rICAgICAgICBteSggJHNlbGYsICRubyApID0gQF87Ci0rCi0rICAg ICAgICBpZiggZGVmaW5lZCAkbm8gKSB7Ci0rICAgICAgICAgICAgJHNlbGYtPnskYXR0cmlidXRl fSA9ICRubzsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldHVybiAkc2VsZi0+eyRhdHRyaWJ1dGV9 OwotKyAgICB9OwotKwotKyAgICBubyBzdHJpY3QgJ3JlZnMnOyAgICAjIyBubyBjcml0aWMKLSsg ICAgKnsgX19QQUNLQUdFX18gLiAnOjonIC4gJG1ldGhvZCB9ID0gJGNvZGU7Ci0rfQotKwotKz1i YWNrCi0rCi0rPWhlYWQyIE91dHB1dAotKwotK0NvbnRyb2xsaW5nIHdoZXJlIHRoZSB0ZXN0IG91 dHB1dCBnb2VzLgotKwotK0l0J3Mgb2sgZm9yIHlvdXIgdGVzdCB0byBjaGFuZ2Ugd2hlcmUgU1RE T1VUIGFuZCBTVERFUlIgcG9pbnQgdG8sCi0rVGVzdDo6QnVpbGRlcidzIGRlZmF1bHQgb3V0cHV0 IHNldHRpbmdzIHdpbGwgbm90IGJlIGFmZmVjdGVkLgotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBC PGRpYWc+Ci0rCi0rICAgICRUZXN0LT5kaWFnKEBtc2dzKTsKLSsKLStQcmludHMgb3V0IHRoZSBn aXZlbiBDPEBtc2dzPi4gIExpa2UgQzxwcmludD4sIGFyZ3VtZW50cyBhcmUgc2ltcGx5Ci0rYXBw ZW5kZWQgdG9nZXRoZXIuCi0rCi0rTm9ybWFsbHksIGl0IHVzZXMgdGhlIEM8ZmFpbHVyZV9vdXRw dXQoKT4gaGFuZGxlLCBidXQgaWYgdGhpcyBpcyBmb3IgYQotK1RPRE8gdGVzdCwgdGhlIEM8dG9k b19vdXRwdXQoKT4gaGFuZGxlIGlzIHVzZWQuCi0rCi0rT3V0cHV0IHdpbGwgYmUgaW5kZW50ZWQg YW5kIG1hcmtlZCB3aXRoIGEgIyBzbyBhcyBub3QgdG8gaW50ZXJmZXJlCi0rd2l0aCB0ZXN0IG91 dHB1dC4gIEEgbmV3bGluZSB3aWxsIGJlIHB1dCBvbiB0aGUgZW5kIGlmIHRoZXJlIGlzbid0IG9u ZQotK2FscmVhZHkuCi0rCi0rV2UgZW5jb3VyYWdlIHVzaW5nIHRoaXMgcmF0aGVyIHRoYW4gY2Fs bGluZyBwcmludCBkaXJlY3RseS4KLSsKLStSZXR1cm5zIGZhbHNlLiAgV2h5PyAgQmVjYXVzZSBD PGRpYWcoKT4gaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCi0rYSBmYWlsaW5nIHRl c3QgKEM8b2soKSB8fCBkaWFnKCk+KSBpdCAicGFzc2VzIHRocm91Z2giIHRoZSBmYWlsdXJlLgot KwotKyAgICByZXR1cm4gb2soLi4uKSB8fCBkaWFnKC4uLik7Ci0rCi0rPWZvciBibGFtZSB0cmFu c2ZlcgotK01hcmsgRm93bGVyIDxtYXJrQHR3b3Nob3J0cGxhbmtzLmNvbT4KLSsKLSs9Y3V0Ci0r Ci0rc3ViIGRpYWcgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKwotKyAgICAkc2VsZi0+X3By aW50X2NvbW1lbnQoICRzZWxmLT5fZGlhZ19maCwgQF8gKTsKLSt9Ci0rCi0rPWl0ZW0gQjxub3Rl PgotKwotKyAgICAkVGVzdC0+bm90ZShAbXNncyk7Ci0rCi0rTGlrZSBDPGRpYWcoKT4sIGJ1dCBp dCBwcmludHMgdG8gdGhlIEM8b3V0cHV0KCk+IGhhbmRsZSBzbyBpdCB3aWxsIG5vdAotK25vcm1h bGx5IGJlIHNlZW4gYnkgdGhlIHVzZXIgZXhjZXB0IGluIHZlcmJvc2UgbW9kZS4KLSsKLSs9Y3V0 Ci0rCi0rc3ViIG5vdGUgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKwotKyAgICAkc2VsZi0+ X3ByaW50X2NvbW1lbnQoICRzZWxmLT5vdXRwdXQsIEBfICk7Ci0rfQotKwotK3N1YiBfZGlhZ19m aCB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rCi0rICAgIGxvY2FsICRMZXZlbCA9ICRMZXZl bCArIDE7Ci0rICAgIHJldHVybiAkc2VsZi0+aW5fdG9kbyA/ICRzZWxmLT50b2RvX291dHB1dCA6 ICRzZWxmLT5mYWlsdXJlX291dHB1dDsKLSt9Ci0rCi0rc3ViIF9wcmludF9jb21tZW50IHsKLSsg ICAgbXkoICRzZWxmLCAkZmgsIEBtc2dzICkgPSBAXzsKLSsKLSsgICAgcmV0dXJuIGlmICRzZWxm LT5ub19kaWFnOwotKyAgICByZXR1cm4gdW5sZXNzIEBtc2dzOwotKwotKyAgICAjIFByZXZlbnQg cHJpbnRpbmcgaGVhZGVycyB3aGVuIGNvbXBpbGluZyAoaS5lLiAtYykKLSsgICAgcmV0dXJuIGlm ICReQzsKLSsKLSsgICAgIyBTbWFzaCBhcmdzIHRvZ2V0aGVyIGxpa2UgcHJpbnQgZG9lcy4KLSsg ICAgIyBDb252ZXJ0IHVuZGVmIHRvICd1bmRlZicgc28gaXRzIHJlYWRhYmxlLgotKyAgICBteSAk bXNnID0gam9pbiAnJywgbWFwIHsgZGVmaW5lZCgkXykgPyAkXyA6ICd1bmRlZicgfSBAbXNnczsK LSsKLSsgICAgIyBFc2NhcGUgdGhlIGJlZ2lubmluZywgX3ByaW50IHdpbGwgdGFrZSBjYXJlIG9m IHRoZSByZXN0LgotKyAgICAkbXNnID1+IHMvXi8jIC87Ci0rCi0rICAgIGxvY2FsICRMZXZlbCA9 ICRMZXZlbCArIDE7Ci0rICAgICRzZWxmLT5fcHJpbnRfdG9fZmgoICRmaCwgJG1zZyApOwotKwot KyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rPWl0ZW0gQjxleHBsYWluPgotKwotKyAgICBteSBAZHVt cCA9ICRUZXN0LT5leHBsYWluKEBtc2dzKTsKLSsKLStXaWxsIGR1bXAgdGhlIGNvbnRlbnRzIG9m IGFueSByZWZlcmVuY2VzIGluIGEgaHVtYW4gcmVhZGFibGUgZm9ybWF0LgotK0hhbmR5IGZvciB0 aGluZ3MgbGlrZS4uLgotKwotKyAgICBpc19kZWVwbHkoJGhhdmUsICR3YW50KSB8fCBkaWFnIGV4 cGxhaW4gJGhhdmU7Ci0rCi0rb3IKLSsKLSsgICAgaXNfZGVlcGx5KCRoYXZlLCAkd2FudCkgfHwg bm90ZSBleHBsYWluICRoYXZlOwotKwotKz1jdXQKLSsKLStzdWIgZXhwbGFpbiB7Ci0rICAgIG15 ICRzZWxmID0gc2hpZnQ7Ci0rCi0rICAgIHJldHVybiBtYXAgewotKyAgICAgICAgcmVmICRfCi0r ICAgICAgICAgID8gZG8gewotKyAgICAgICAgICAgICRzZWxmLT5fdHJ5KHN1YiB7IHJlcXVpcmUg RGF0YTo6RHVtcGVyIH0sIGRpZV9vbl9mYWlsID0+IDEpOwotKwotKyAgICAgICAgICAgIG15ICRk dW1wZXIgPSBEYXRhOjpEdW1wZXItPm5ldyggWyRfXSApOwotKyAgICAgICAgICAgICRkdW1wZXIt PkluZGVudCgxKS0+VGVyc2UoMSk7Ci0rICAgICAgICAgICAgJGR1bXBlci0+U29ydGtleXMoMSkg aWYgJGR1bXBlci0+Y2FuKCJTb3J0a2V5cyIpOwotKyAgICAgICAgICAgICRkdW1wZXItPkR1bXA7 Ci0rICAgICAgICAgIH0KLSsgICAgICAgICAgOiAkXwotKyAgICB9IEBfOwotK30KLSsKLSs9YmVn aW4gX3ByaXZhdGUKLSsKLSs9aXRlbSBCPF9wcmludD4KLSsKLSsgICAgJFRlc3QtPl9wcmludChA bXNncyk7Ci0rCi0rUHJpbnRzIHRvIHRoZSBDPG91dHB1dCgpPiBmaWxlaGFuZGxlLgotKwotKz1l bmQgX3ByaXZhdGUKLSsKLSs9Y3V0Ci0rCi0rc3ViIF9wcmludCB7Ci0rICAgIG15ICRzZWxmID0g c2hpZnQ7Ci0rICAgIHJldHVybiAkc2VsZi0+X3ByaW50X3RvX2ZoKCAkc2VsZi0+b3V0cHV0LCBA XyApOwotK30KLSsKLStzdWIgX3ByaW50X3RvX2ZoIHsKLSsgICAgbXkoICRzZWxmLCAkZmgsIEBt c2dzICkgPSBAXzsKLSsKLSsgICAgIyBQcmV2ZW50IHByaW50aW5nIGhlYWRlcnMgd2hlbiBvbmx5 IGNvbXBpbGluZy4gIE1vc3RseSBmb3Igd2hlbgotKyAgICAjIHRlc3RzIGFyZSBkZXBhcnNlZCB3 aXRoIEI6OkRlcGFyc2UKLSsgICAgcmV0dXJuIGlmICReQzsKLSsKLSsgICAgbXkgJG1zZyA9IGpv aW4gJycsIEBtc2dzOwotKyAgICBteSAkaW5kZW50ID0gJHNlbGYtPl9pbmRlbnQ7Ci0rCi0rICAg IGxvY2FsKCAkXCwgJCIsICQsICkgPSAoIHVuZGVmLCAnICcsICcnICk7Ci0rCi0rICAgICMgRXNj YXBlIGVhY2ggbGluZSBhZnRlciB0aGUgZmlyc3Qgd2l0aCBhICMgc28gd2UgZG9uJ3QKLSsgICAg IyBjb25mdXNlIFRlc3Q6Okhhcm5lc3MuCi0rICAgICRtc2cgPX4gc3tcbig/IVx6KX17XG4kaW5k ZW50IyB9c2c7Ci0rCi0rICAgICMgU3RpY2sgYSBuZXdsaW5lIG9uIHRoZSBlbmQgaWYgaXQgbmVl ZHMgaXQuCi0rICAgICRtc2cgLj0gIlxuIiB1bmxlc3MgJG1zZyA9fiAvXG5cei87Ci0rCi0rICAg IHJldHVybiBwcmludCAkZmggJGluZGVudCwgJG1zZzsKLSt9Ci0rCi0rPWl0ZW0gQjxvdXRwdXQ+ Ci0rCi0rPWl0ZW0gQjxmYWlsdXJlX291dHB1dD4KLSsKLSs9aXRlbSBCPHRvZG9fb3V0cHV0Pgot KwotKyAgICBteSAkZmlsZWhhbmRsZSA9ICRUZXN0LT5vdXRwdXQ7Ci0rICAgICRUZXN0LT5vdXRw dXQoJGZpbGVoYW5kbGUpOwotKyAgICAkVGVzdC0+b3V0cHV0KCRmaWxlbmFtZSk7Ci0rICAgICRU ZXN0LT5vdXRwdXQoXCRzY2FsYXIpOwotKwotK1RoZXNlIG1ldGhvZHMgY29udHJvbCB3aGVyZSBU ZXN0OjpCdWlsZGVyIHdpbGwgcHJpbnQgaXRzIG91dHB1dC4KLStUaGV5IHRha2UgZWl0aGVyIGFu IG9wZW4gQzwkZmlsZWhhbmRsZT4sIGEgQzwkZmlsZW5hbWU+IHRvIG9wZW4gYW5kIHdyaXRlIHRv Ci0rb3IgYSBDPCRzY2FsYXI+IHJlZmVyZW5jZSB0byBhcHBlbmQgdG8uICBJdCB3aWxsIGFsd2F5 cyByZXR1cm4gYSBDPCRmaWxlaGFuZGxlPi4KLSsKLStCPG91dHB1dD4gaXMgd2hlcmUgbm9ybWFs ICJvay9ub3Qgb2siIHRlc3Qgb3V0cHV0IGdvZXMuCi0rCi0rRGVmYXVsdHMgdG8gU1RET1VULgot KwotK0I8ZmFpbHVyZV9vdXRwdXQ+IGlzIHdoZXJlIGRpYWdub3N0aWMgb3V0cHV0IG9uIHRlc3Qg ZmFpbHVyZXMgYW5kCi0rQzxkaWFnKCk+IGdvZXMuICBJdCBpcyBub3JtYWxseSBub3QgcmVhZCBi eSBUZXN0OjpIYXJuZXNzIGFuZCBpbnN0ZWFkIGlzCi0rZGlzcGxheWVkIHRvIHRoZSB1c2VyLgot KwotK0RlZmF1bHRzIHRvIFNUREVSUi4KLSsKLStDPHRvZG9fb3V0cHV0PiBpcyB1c2VkIGluc3Rl YWQgb2YgQzxmYWlsdXJlX291dHB1dCgpPiBmb3IgdGhlCi0rZGlhZ25vc3RpY3Mgb2YgYSBmYWls aW5nIFRPRE8gdGVzdC4gIFRoZXNlIHdpbGwgbm90IGJlIHNlZW4gYnkgdGhlCi0rdXNlci4KLSsK LStEZWZhdWx0cyB0byBTVERPVVQuCi0rCi0rPWN1dAotKwotK3N1YiBvdXRwdXQgewotKyAgICBt eSggJHNlbGYsICRmaCApID0gQF87Ci0rCi0rICAgIGlmKCBkZWZpbmVkICRmaCApIHsKLSsgICAg ICAgICRzZWxmLT57T3V0X0ZIfSA9ICRzZWxmLT5fbmV3X2ZoKCRmaCk7Ci0rICAgIH0KLSsgICAg cmV0dXJuICRzZWxmLT57T3V0X0ZIfTsKLSt9Ci0rCi0rc3ViIGZhaWx1cmVfb3V0cHV0IHsKLSsg ICAgbXkoICRzZWxmLCAkZmggKSA9IEBfOwotKwotKyAgICBpZiggZGVmaW5lZCAkZmggKSB7Ci0r ICAgICAgICAkc2VsZi0+e0ZhaWxfRkh9ID0gJHNlbGYtPl9uZXdfZmgoJGZoKTsKLSsgICAgfQot KyAgICByZXR1cm4gJHNlbGYtPntGYWlsX0ZIfTsKLSt9Ci0rCi0rc3ViIHRvZG9fb3V0cHV0IHsK LSsgICAgbXkoICRzZWxmLCAkZmggKSA9IEBfOwotKwotKyAgICBpZiggZGVmaW5lZCAkZmggKSB7 Ci0rICAgICAgICAkc2VsZi0+e1RvZG9fRkh9ID0gJHNlbGYtPl9uZXdfZmgoJGZoKTsKLSsgICAg fQotKyAgICByZXR1cm4gJHNlbGYtPntUb2RvX0ZIfTsKLSt9Ci0rCi0rc3ViIF9uZXdfZmggewot KyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgICBteSgkZmlsZV9vcl9maCkgPSBzaGlmdDsKLSsK LSsgICAgbXkgJGZoOwotKyAgICBpZiggJHNlbGYtPmlzX2ZoKCRmaWxlX29yX2ZoKSApIHsKLSsg ICAgICAgICRmaCA9ICRmaWxlX29yX2ZoOwotKyAgICB9Ci0rICAgIGVsc2lmKCByZWYgJGZpbGVf b3JfZmggZXEgJ1NDQUxBUicgKSB7Ci0rICAgICAgICAjIFNjYWxhciByZWZzIGFzIGZpbGVoYW5k bGVzIHdhcyBhZGRlZCBpbiA1LjguCi0rICAgICAgICBpZiggJF0gPj0gNS4wMDggKSB7Ci0rICAg ICAgICAgICAgb3BlbiAkZmgsICI+PiIsICRmaWxlX29yX2ZoCi0rICAgICAgICAgICAgICBvciAk c2VsZi0+Y3JvYWsoIkNhbid0IG9wZW4gc2NhbGFyIHJlZiAkZmlsZV9vcl9maDogJCEiKTsKLSsg ICAgICAgIH0KLSsgICAgICAgICMgRW11bGF0ZSBzY2FsYXIgcmVmIGZpbGVoYW5kbGVzIHdpdGgg YSB0aWUuCi0rICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICAkZmggPSBUZXN0OjpCdWlsZGVy OjpJTzo6U2NhbGFyLT5uZXcoJGZpbGVfb3JfZmgpCi0rICAgICAgICAgICAgICBvciAkc2VsZi0+ Y3JvYWsoIkNhbid0IHRpZSBzY2FsYXIgcmVmICRmaWxlX29yX2ZoIik7Ci0rICAgICAgICB9Ci0r ICAgIH0KLSsgICAgZWxzZSB7Ci0rICAgICAgICBvcGVuICRmaCwgIj4iLCAkZmlsZV9vcl9maAot KyAgICAgICAgICBvciAkc2VsZi0+Y3JvYWsoIkNhbid0IG9wZW4gdGVzdCBvdXRwdXQgbG9nICRm aWxlX29yX2ZoOiAkISIpOwotKyAgICAgICAgX2F1dG9mbHVzaCgkZmgpOwotKyAgICB9Ci0rCi0r ICAgIHJldHVybiAkZmg7Ci0rfQotKwotK3N1YiBfYXV0b2ZsdXNoIHsKLSsgICAgbXkoJGZoKSA9 IHNoaWZ0OwotKyAgICBteSAkb2xkX2ZoID0gc2VsZWN0ICRmaDsKLSsgICAgJHwgPSAxOwotKyAg ICBzZWxlY3QgJG9sZF9maDsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLStteSggJFRlc3RvdXQs ICRUZXN0ZXJyICk7Ci0rCi0rc3ViIF9kdXBfc3RkaGFuZGxlcyB7Ci0rICAgIG15ICRzZWxmID0g c2hpZnQ7Ci0rCi0rICAgICRzZWxmLT5fb3Blbl90ZXN0aGFuZGxlczsKLSsKLSsgICAgIyBTZXQg ZXZlcnl0aGluZyB0byB1bmJ1ZmZlcmVkIGVsc2UgcGxhaW4gcHJpbnRzIHRvIFNURE9VVCB3aWxs Ci0rICAgICMgY29tZSBvdXQgaW4gdGhlIHdyb25nIG9yZGVyIGZyb20gb3VyIG93biBwcmludHMu Ci0rICAgIF9hdXRvZmx1c2goJFRlc3RvdXQpOwotKyAgICBfYXV0b2ZsdXNoKCBcKlNURE9VVCAp OwotKyAgICBfYXV0b2ZsdXNoKCRUZXN0ZXJyKTsKLSsgICAgX2F1dG9mbHVzaCggXCpTVERFUlIg KTsKLSsKLSsgICAgJHNlbGYtPnJlc2V0X291dHB1dHM7Ci0rCi0rICAgIHJldHVybjsKLSt9Ci0r Ci0rc3ViIF9vcGVuX3Rlc3RoYW5kbGVzIHsKLSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsKLSsg ICAgcmV0dXJuIGlmICRzZWxmLT57T3BlbmVkX1Rlc3RoYW5kbGVzfTsKLSsKLSsgICAgIyBXZSBk dXAgU1RET1VUIGFuZCBTVERFUlIgc28gcGVvcGxlIGNhbiBjaGFuZ2UgdGhlbSBpbiB0aGVpcgot KyAgICAjIHRlc3Qgc3VpdGVzIHdoaWxlIHN0aWxsIGdldHRpbmcgbm9ybWFsIHRlc3Qgb3V0cHV0 LgotKyAgICBvcGVuKCAkVGVzdG91dCwgIj4mU1RET1VUIiApIG9yIGRpZSAiQ2FuJ3QgZHVwIFNU RE9VVDogICQhIjsKLSsgICAgb3BlbiggJFRlc3RlcnIsICI+JlNUREVSUiIgKSBvciBkaWUgIkNh bid0IGR1cCBTVERFUlI6ICAkISI7Ci0rCi0rICAgICRzZWxmLT5fY29weV9pb19sYXllcnMoIFwq U1RET1VULCAkVGVzdG91dCApOwotKyAgICAkc2VsZi0+X2NvcHlfaW9fbGF5ZXJzKCBcKlNUREVS UiwgJFRlc3RlcnIgKTsKLSsKLSsgICAgJHNlbGYtPntPcGVuZWRfVGVzdGhhbmRsZXN9ID0gMTsK LSsKLSsgICAgcmV0dXJuOwotK30KLSsKLStzdWIgX2NvcHlfaW9fbGF5ZXJzIHsKLSsgICAgbXko ICRzZWxmLCAkc3JjLCAkZHN0ICkgPSBAXzsKLSsKLSsgICAgJHNlbGYtPl90cnkoCi0rICAgICAg ICBzdWIgewotKyAgICAgICAgICAgIHJlcXVpcmUgUGVybElPOwotKyAgICAgICAgICAgIG15IEBz cmNfbGF5ZXJzID0gUGVybElPOjpnZXRfbGF5ZXJzKCRzcmMpOwotKwotKyAgICAgICAgICAgIF9h cHBseV9sYXllcnMoJGRzdCwgQHNyY19sYXllcnMpIGlmIEBzcmNfbGF5ZXJzOwotKyAgICAgICAg fQotKyAgICApOwotKwotKyAgICByZXR1cm47Ci0rfQotKwotK3N1YiBfYXBwbHlfbGF5ZXJzIHsK LSsgICAgbXkgKCRmaCwgQGxheWVycykgPSBAXzsKLSsgICAgbXkgJXNlZW47Ci0rICAgIG15IEB1 bmlxdWUgPSBncmVwIHsgJF8gbmUgJ3VuaXgnIGFuZCAhJHNlZW57JF99KysgfSBAbGF5ZXJzOwot KyAgICBiaW5tb2RlKCRmaCwgam9pbigiOiIsICIiLCAicmF3IiwgQHVuaXF1ZSkpOwotK30KLSsK LSsKLSs9aXRlbSByZXNldF9vdXRwdXRzCi0rCi0rICAkdGItPnJlc2V0X291dHB1dHM7Ci0rCi0r UmVzZXRzIGFsbCB0aGUgb3V0cHV0IGZpbGVoYW5kbGVzIGJhY2sgdG8gdGhlaXIgZGVmYXVsdHMu Ci0rCi0rPWN1dAotKwotK3N1YiByZXNldF9vdXRwdXRzIHsKLSsgICAgbXkgJHNlbGYgPSBzaGlm dDsKLSsKLSsgICAgJHNlbGYtPm91dHB1dCAgICAgICAgKCRUZXN0b3V0KTsKLSsgICAgJHNlbGYt PmZhaWx1cmVfb3V0cHV0KCRUZXN0ZXJyKTsKLSsgICAgJHNlbGYtPnRvZG9fb3V0cHV0ICAgKCRU ZXN0b3V0KTsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSs9aXRlbSBjYXJwCi0rCi0rICAkdGIt PmNhcnAoQG1lc3NhZ2UpOwotKwotK1dhcm5zIHdpdGggQzxAbWVzc2FnZT4gYnV0IHRoZSBtZXNz YWdlIHdpbGwgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUKLStwb2ludCB3aGVyZSB0aGUgb3JpZ2lu YWwgdGVzdCBmdW5jdGlvbiB3YXMgY2FsbGVkIChDPDwgJHRiLT5jYWxsZXIgPj4pLgotKwotKz1p dGVtIGNyb2FrCi0rCi0rICAkdGItPmNyb2FrKEBtZXNzYWdlKTsKLSsKLStEaWVzIHdpdGggQzxA bWVzc2FnZT4gYnV0IHRoZSBtZXNzYWdlIHdpbGwgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUKLStw b2ludCB3aGVyZSB0aGUgb3JpZ2luYWwgdGVzdCBmdW5jdGlvbiB3YXMgY2FsbGVkIChDPDwgJHRi LT5jYWxsZXIgPj4pLgotKwotKz1jdXQKLSsKLStzdWIgX21lc3NhZ2VfYXRfY2FsbGVyIHsKLSsg ICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsKLSsgICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsK LSsgICAgbXkoICRwYWNrLCAkZmlsZSwgJGxpbmUgKSA9ICRzZWxmLT5jYWxsZXI7Ci0rICAgIHJl dHVybiBqb2luKCAiIiwgQF8gKSAuICIgYXQgJGZpbGUgbGluZSAkbGluZS5cbiI7Ci0rfQotKwot K3N1YiBjYXJwIHsKLSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsgICAgcmV0dXJuIHdhcm4gJHNl bGYtPl9tZXNzYWdlX2F0X2NhbGxlcihAXyk7Ci0rfQotKwotK3N1YiBjcm9hayB7Ci0rICAgIG15 ICRzZWxmID0gc2hpZnQ7Ci0rICAgIHJldHVybiBkaWUgJHNlbGYtPl9tZXNzYWdlX2F0X2NhbGxl cihAXyk7Ci0rfQotKwotKwotKz1iYWNrCi0rCi0rCi0rPWhlYWQyIFRlc3QgU3RhdHVzIGFuZCBJ bmZvCi0rCi0rPW92ZXIgNAotKwotKz1pdGVtIEI8Y3VycmVudF90ZXN0PgotKwotKyAgICBteSAk Y3Vycl90ZXN0ID0gJFRlc3QtPmN1cnJlbnRfdGVzdDsKLSsgICAgJFRlc3QtPmN1cnJlbnRfdGVz dCgkbnVtKTsKLSsKLStHZXRzL3NldHMgdGhlIGN1cnJlbnQgdGVzdCBudW1iZXIgd2UncmUgb24u ICBZb3UgdXN1YWxseSBzaG91bGRuJ3QKLStoYXZlIHRvIHNldCB0aGlzLgotKwotK0lmIHNldCBm b3J3YXJkLCB0aGUgZGV0YWlscyBvZiB0aGUgbWlzc2luZyB0ZXN0cyBhcmUgZmlsbGVkIGluIGFz ICd1bmtub3duJy4KLStpZiBzZXQgYmFja3dhcmQsIHRoZSBkZXRhaWxzIG9mIHRoZSBpbnRlcnZl bmluZyB0ZXN0cyBhcmUgZGVsZXRlZC4gIFlvdQotK2NhbiBlcmFzZSBoaXN0b3J5IGlmIHlvdSBy ZWFsbHkgd2FudCB0by4KLSsKLSs9Y3V0Ci0rCi0rc3ViIGN1cnJlbnRfdGVzdCB7Ci0rICAgIG15 KCAkc2VsZiwgJG51bSApID0gQF87Ci0rCi0rICAgIGxvY2soICRzZWxmLT57Q3Vycl9UZXN0fSAp OwotKyAgICBpZiggZGVmaW5lZCAkbnVtICkgewotKyAgICAgICAgJHNlbGYtPntDdXJyX1Rlc3R9 ID0gJG51bTsKLSsKLSsgICAgICAgICMgSWYgdGhlIHRlc3QgY291bnRlciBpcyBiZWluZyBwdXNo ZWQgZm9yd2FyZCBmaWxsIGluIHRoZSBkZXRhaWxzLgotKyAgICAgICAgbXkgJHRlc3RfcmVzdWx0 cyA9ICRzZWxmLT57VGVzdF9SZXN1bHRzfTsKLSsgICAgICAgIGlmKCAkbnVtID4gQCR0ZXN0X3Jl c3VsdHMgKSB7Ci0rICAgICAgICAgICAgbXkgJHN0YXJ0ID0gQCR0ZXN0X3Jlc3VsdHMgPyBAJHRl c3RfcmVzdWx0cyA6IDA7Ci0rICAgICAgICAgICAgZm9yKCAkc3RhcnQgLi4gJG51bSAtIDEgKSB7 Ci0rICAgICAgICAgICAgICAgICR0ZXN0X3Jlc3VsdHMtPlskX10gPSAmc2hhcmUoCi0rICAgICAg ICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgJ29rJyAgICAgID0+IDEs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsX29rID0+IHVuZGVmLAotKyAgICAgICAg ICAgICAgICAgICAgICAgIHJlYXNvbiAgICA9PiAnaW5jcmVtZW50aW5nIHRlc3QgbnVtYmVyJywK LSsgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICAgICAgPT4gJ3Vua25vd24nLAotKyAgICAg ICAgICAgICAgICAgICAgICAgIG5hbWUgICAgICA9PiB1bmRlZgotKyAgICAgICAgICAgICAgICAg ICAgfQotKyAgICAgICAgICAgICAgICApOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsg ICAgICAgICMgSWYgYmFja3dhcmQsIHdpcGUgaGlzdG9yeS4gIEl0cyB0aGVpciBmdW5lcmFsLgot KyAgICAgICAgZWxzaWYoICRudW0gPCBAJHRlc3RfcmVzdWx0cyApIHsKLSsgICAgICAgICAgICAk I3skdGVzdF9yZXN1bHRzfSA9ICRudW0gLSAxOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJl dHVybiAkc2VsZi0+e0N1cnJfVGVzdH07Ci0rfQotKwotKz1pdGVtIEI8aXNfcGFzc2luZz4KLSsK LSsgICBteSAkb2sgPSAkYnVpbGRlci0+aXNfcGFzc2luZzsKLSsKLStJbmRpY2F0ZXMgaWYgdGhl IHRlc3Qgc3VpdGUgaXMgY3VycmVudGx5IHBhc3NpbmcuCi0rCi0rTW9yZSBmb3JtYWxseSwgaXQg d2lsbCBiZSBmYWxzZSBpZiBhbnl0aGluZyBoYXMgaGFwcGVuZWQgd2hpY2ggbWFrZXMKLStpdCBp bXBvc3NpYmxlIGZvciB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzLiAgVHJ1ZSBvdGhlcndpc2UuCi0r Ci0rRm9yIGV4YW1wbGUsIGlmIG5vIHRlc3RzIGhhdmUgcnVuIEM8aXNfcGFzc2luZygpPiB3aWxs IGJlIHRydWUgYmVjYXVzZQotK2V2ZW4gdGhvdWdoIGEgc3VpdGUgd2l0aCBubyB0ZXN0cyBpcyBh IGZhaWx1cmUgeW91IGNhbiBhZGQgYSBwYXNzaW5nCi0rdGVzdCB0byBpdCBhbmQgc3RhcnQgcGFz c2luZy4KLSsKLStEb24ndCB0aGluayBhYm91dCBpdCB0b28gbXVjaC4KLSsKLSs9Y3V0Ci0rCi0r c3ViIGlzX3Bhc3NpbmcgewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKwotKyAgICBpZiggQF8g KSB7Ci0rICAgICAgICAkc2VsZi0+e0lzX1Bhc3Npbmd9ID0gc2hpZnQ7Ci0rICAgIH0KLSsKLSsg ICAgcmV0dXJuICRzZWxmLT57SXNfUGFzc2luZ307Ci0rfQotKwotKwotKz1pdGVtIEI8c3VtbWFy eT4KLSsKLSsgICAgbXkgQHRlc3RzID0gJFRlc3QtPnN1bW1hcnk7Ci0rCi0rQSBzaW1wbGUgc3Vt bWFyeSBvZiB0aGUgdGVzdHMgc28gZmFyLiAgVHJ1ZSBmb3IgcGFzcywgZmFsc2UgZm9yIGZhaWwu Ci0rVGhpcyBpcyBhIGxvZ2ljYWwgcGFzcy9mYWlsLCBzbyB0b2RvcyBhcmUgcGFzc2VzLgotKwot K09mIGNvdXJzZSwgdGVzdCAjMSBpcyAkdGVzdHNbMF0sIGV0Yy4uLgotKwotKz1jdXQKLSsKLStz dWIgc3VtbWFyeSB7Ci0rICAgIG15KCRzZWxmKSA9IHNoaWZ0OwotKwotKyAgICByZXR1cm4gbWFw IHsgJF8tPnsnb2snfSB9IEB7ICRzZWxmLT57VGVzdF9SZXN1bHRzfSB9OwotK30KLSsKLSs9aXRl bSBCPGRldGFpbHM+Ci0rCi0rICAgIG15IEB0ZXN0cyA9ICRUZXN0LT5kZXRhaWxzOwotKwotK0xp a2UgQzxzdW1tYXJ5KCk+LCBidXQgd2l0aCBhIGxvdCBtb3JlIGRldGFpbC4KLSsKLSsgICAgJHRl c3RzWyR0ZXN0X251bSAtIDFdID0gCi0rICAgICAgICAgICAgeyAnb2snICAgICAgID0+IGlzIHRo ZSB0ZXN0IGNvbnNpZGVyZWQgYSBwYXNzPwotKyAgICAgICAgICAgICAgYWN0dWFsX29rICA9PiBk aWQgaXQgbGl0ZXJhbGx5IHNheSAnb2snPwotKyAgICAgICAgICAgICAgbmFtZSAgICAgICA9PiBu YW1lIG9mIHRoZSB0ZXN0IChpZiBhbnkpCi0rICAgICAgICAgICAgICB0eXBlICAgICAgID0+IHR5 cGUgb2YgdGVzdCAoaWYgYW55LCBzZWUgYmVsb3cpLgotKyAgICAgICAgICAgICAgcmVhc29uICAg ICA9PiByZWFzb24gZm9yIHRoZSBhYm92ZSAoaWYgYW55KQotKyAgICAgICAgICAgIH07Ci0rCi0r J29rJyBpcyB0cnVlIGlmIFRlc3Q6Okhhcm5lc3Mgd2lsbCBjb25zaWRlciB0aGUgdGVzdCB0byBi ZSBhIHBhc3MuCi0rCi0rJ2FjdHVhbF9vaycgaXMgYSByZWZsZWN0aW9uIG9mIHdoZXRoZXIgb3Ig bm90IHRoZSB0ZXN0IGxpdGVyYWxseQotK3ByaW50ZWQgJ29rJyBvciAnbm90IG9rJy4gIFRoaXMg aXMgZm9yIGV4YW1pbmluZyB0aGUgcmVzdWx0IG9mICd0b2RvJwotK3Rlc3RzLgotKwotKyduYW1l JyBpcyB0aGUgbmFtZSBvZiB0aGUgdGVzdC4KLSsKLSsndHlwZScgaW5kaWNhdGVzIGlmIGl0IHdh cyBhIHNwZWNpYWwgdGVzdC4gIE5vcm1hbCB0ZXN0cyBoYXZlIGEgdHlwZQotK29mICcnLiAgVHlw ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0rCi0rICAgIHNraXAgICAgICAgIHNlZSBz a2lwKCkKLSsgICAgdG9kbyAgICAgICAgc2VlIHRvZG8oKQotKyAgICB0b2RvX3NraXAgICBzZWUg dG9kb19za2lwKCkKLSsgICAgdW5rbm93biAgICAgc2VlIGJlbG93Ci0rCi0rU29tZXRpbWVzIHRo ZSBUZXN0OjpCdWlsZGVyIHRlc3QgY291bnRlciBpcyBpbmNyZW1lbnRlZCB3aXRob3V0IGl0Ci0r cHJpbnRpbmcgYW55IHRlc3Qgb3V0cHV0LCBmb3IgZXhhbXBsZSwgd2hlbiBDPGN1cnJlbnRfdGVz dCgpPiBpcyBjaGFuZ2VkLgotK0luIHRoZXNlIGNhc2VzLCBUZXN0OjpCdWlsZGVyIGRvZXNuJ3Qg a25vdyB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0LCBzbwotK2l0cyB0eXBlIGlzICd1bmtub3duJy4g IFRoZXNlIGRldGFpbHMgZm9yIHRoZXNlIHRlc3RzIGFyZSBmaWxsZWQgaW4uCi0rVGhleSBhcmUg Y29uc2lkZXJlZCBvaywgYnV0IHRoZSBuYW1lIGFuZCBhY3R1YWxfb2sgaXMgbGVmdCBDPHVuZGVm Pi4KLSsKLStGb3IgZXhhbXBsZSAibm90IG9rIDIzIC0gaG9sZSBjb3VudCAjIFRPRE8gaW5zdWZm aWNpZW50IGRvbnV0cyIgd291bGQKLStyZXN1bHQgaW4gdGhpcyBzdHJ1Y3R1cmU6Ci0rCi0rICAg ICR0ZXN0c1syMl0gPSAgICAjIDIzIC0gMSwgc2luY2UgYXJyYXlzIHN0YXJ0IGZyb20gMC4KLSsg ICAgICB7IG9rICAgICAgICA9PiAxLCAgICMgbG9naWNhbGx5LCB0aGUgdGVzdCBwYXNzZWQgc2lu Y2UgaXRzIHRvZG8KLSsgICAgICAgIGFjdHVhbF9vayA9PiAwLCAgICMgaW4gYWJzb2x1dGUgdGVy bXMsIGl0IGZhaWxlZAotKyAgICAgICAgbmFtZSAgICAgID0+ICdob2xlIGNvdW50JywKLSsgICAg ICAgIHR5cGUgICAgICA9PiAndG9kbycsCi0rICAgICAgICByZWFzb24gICAgPT4gJ2luc3VmZmlj aWVudCBkb251dHMnCi0rICAgICAgfTsKLSsKLSs9Y3V0Ci0rCi0rc3ViIGRldGFpbHMgewotKyAg ICBteSAkc2VsZiA9IHNoaWZ0OwotKyAgICByZXR1cm4gQHsgJHNlbGYtPntUZXN0X1Jlc3VsdHN9 IH07Ci0rfQotKwotKz1pdGVtIEI8dG9kbz4KLSsKLSsgICAgbXkgJHRvZG9fcmVhc29uID0gJFRl c3QtPnRvZG87Ci0rICAgIG15ICR0b2RvX3JlYXNvbiA9ICRUZXN0LT50b2RvKCRwYWNrKTsKLSsK LStJZiB0aGUgY3VycmVudCB0ZXN0cyBhcmUgY29uc2lkZXJlZCAiVE9ETyIgaXQgd2lsbCByZXR1 cm4gdGhlIHJlYXNvbiwKLStpZiBhbnkuICBUaGlzIHJlYXNvbiBjYW4gY29tZSBmcm9tIGEgQzwk VE9ETz4gdmFyaWFibGUgb3IgdGhlIGxhc3QgY2FsbAotK3RvIEM8dG9kb19zdGFydCgpPi4KLSsK LStTaW5jZSBhIFRPRE8gdGVzdCBkb2VzIG5vdCBuZWVkIGEgcmVhc29uLCB0aGlzIGZ1bmN0aW9u IGNhbiByZXR1cm4gYW4KLStlbXB0eSBzdHJpbmcgZXZlbiB3aGVuIGluc2lkZSBhIFRPRE8gYmxv Y2suICBVc2UgQzw8ICRUZXN0LT5pbl90b2RvID4+Ci0rdG8gZGV0ZXJtaW5lIGlmIHlvdSBhcmUg Y3VycmVudGx5IGluc2lkZSBhIFRPRE8gYmxvY2suCi0rCi0rQzx0b2RvKCk+IGlzIGFib3V0IGZp bmRpbmcgdGhlIHJpZ2h0IHBhY2thZ2UgdG8gbG9vayBmb3IgQzwkVE9ETz4gaW4uICBJdCdzCi0r cHJldHR5IGdvb2QgYXQgZ3Vlc3NpbmcgdGhlIHJpZ2h0IHBhY2thZ2UgdG8gbG9vayBhdC4gIEl0 IGZpcnN0IGxvb2tzIGZvcgotK3RoZSBjYWxsZXIgYmFzZWQgb24gQzwkTGV2ZWwgKyAxPiwgc2lu Y2UgQzx0b2RvKCk+IGlzIHVzdWFsbHkgY2FsbGVkIGluc2lkZQotK2EgdGVzdCBmdW5jdGlvbi4g IEFzIGEgbGFzdCByZXNvcnQgaXQgd2lsbCB1c2UgQzxleHBvcnRlZF90bygpPi4KLSsKLStTb21l dGltZXMgdGhlcmUgaXMgc29tZSBjb25mdXNpb24gYWJvdXQgd2hlcmUgdG9kbygpIHNob3VsZCBi ZSBsb29raW5nCi0rZm9yIHRoZSBDPCRUT0RPPiB2YXJpYWJsZS4gIElmIHlvdSB3YW50IHRvIGJl IHN1cmUsIHRlbGwgaXQgZXhwbGljaXRseQotK3doYXQgJHBhY2sgdG8gdXNlLgotKwotKz1jdXQK LSsKLStzdWIgdG9kbyB7Ci0rICAgIG15KCAkc2VsZiwgJHBhY2sgKSA9IEBfOwotKwotKyAgICBy ZXR1cm4gJHNlbGYtPntUb2RvfSBpZiBkZWZpbmVkICRzZWxmLT57VG9kb307Ci0rCi0rICAgIGxv Y2FsICRMZXZlbCA9ICRMZXZlbCArIDE7Ci0rICAgIG15ICR0b2RvID0gJHNlbGYtPmZpbmRfVE9E TygkcGFjayk7Ci0rICAgIHJldHVybiAkdG9kbyBpZiBkZWZpbmVkICR0b2RvOwotKwotKyAgICBy ZXR1cm4gJyc7Ci0rfQotKwotKz1pdGVtIEI8ZmluZF9UT0RPPgotKwotKyAgICBteSAkdG9kb19y ZWFzb24gPSAkVGVzdC0+ZmluZF9UT0RPKCk7Ci0rICAgIG15ICR0b2RvX3JlYXNvbiA9ICRUZXN0 LT5maW5kX1RPRE8oJHBhY2spOwotKwotK0xpa2UgQzx0b2RvKCk+IGJ1dCBvbmx5IHJldHVybnMg dGhlIHZhbHVlIG9mIEM8JFRPRE8+IGlnbm9yaW5nCi0rQzx0b2RvX3N0YXJ0KCk+LgotKwotK0Nh biBhbHNvIGJlIHVzZWQgdG8gc2V0IEM8JFRPRE8+IHRvIGEgbmV3IHZhbHVlIHdoaWxlIHJldHVy bmluZyB0aGUKLStvbGQgdmFsdWU6Ci0rCi0rICAgIG15ICRvbGRfcmVhc29uID0gJFRlc3QtPmZp bmRfVE9ETygkcGFjaywgMSwgJG5ld19yZWFzb24pOwotKwotKz1jdXQKLSsKLStzdWIgZmluZF9U T0RPIHsKLSsgICAgbXkoICRzZWxmLCAkcGFjaywgJHNldCwgJG5ld192YWx1ZSApID0gQF87Ci0r Ci0rICAgICRwYWNrID0gJHBhY2sgfHwgJHNlbGYtPmNhbGxlcigxKSB8fCAkc2VsZi0+ZXhwb3J0 ZWRfdG87Ci0rICAgIHJldHVybiB1bmxlc3MgJHBhY2s7Ci0rCi0rICAgIG5vIHN0cmljdCAncmVm cyc7ICAgICMjIG5vIGNyaXRpYwotKyAgICBteSAkb2xkX3ZhbHVlID0gJHsgJHBhY2sgLiAnOjpU T0RPJyB9OwotKyAgICAkc2V0IGFuZCAkeyAkcGFjayAuICc6OlRPRE8nIH0gPSAkbmV3X3ZhbHVl OwotKyAgICByZXR1cm4gJG9sZF92YWx1ZTsKLSt9Ci0rCi0rPWl0ZW0gQjxpbl90b2RvPgotKwot KyAgICBteSAkaW5fdG9kbyA9ICRUZXN0LT5pbl90b2RvOwotKwotK1JldHVybnMgdHJ1ZSBpZiB0 aGUgdGVzdCBpcyBjdXJyZW50bHkgaW5zaWRlIGEgVE9ETyBibG9jay4KLSsKLSs9Y3V0Ci0rCi0r c3ViIGluX3RvZG8gewotKyAgICBteSAkc2VsZiA9IHNoaWZ0OwotKwotKyAgICBsb2NhbCAkTGV2 ZWwgPSAkTGV2ZWwgKyAxOwotKyAgICByZXR1cm4oIGRlZmluZWQgJHNlbGYtPntUb2RvfSB8fCAk c2VsZi0+ZmluZF9UT0RPICkgPyAxIDogMDsKLSt9Ci0rCi0rPWl0ZW0gQjx0b2RvX3N0YXJ0Pgot KwotKyAgICAkVGVzdC0+dG9kb19zdGFydCgpOwotKyAgICAkVGVzdC0+dG9kb19zdGFydCgkbWVz c2FnZSk7Ci0rCi0rVGhpcyBtZXRob2QgYWxsb3dzIHlvdSBkZWNsYXJlIGFsbCBzdWJzZXF1ZW50 IHRlc3RzIGFzIFRPRE8gdGVzdHMsIHVwIHVudGlsCi0rdGhlIEM8dG9kb19lbmQ+IG1ldGhvZCBo YXMgYmVlbiBjYWxsZWQuCi0rCi0rVGhlIEM8VE9ETzo+IGFuZCBDPCRUT0RPPiBzeW50YXggaXMg Z2VuZXJhbGx5IHByZXR0eSBnb29kIGFib3V0IGZpZ3VyaW5nIG91dAotK3doZXRoZXIgb3Igbm90 IHdlJ3JlIGluIGEgVE9ETyB0ZXN0LiAgSG93ZXZlciwgb2Z0ZW4gd2UgZmluZCB0aGF0IHRoaXMg aXMgbm90Ci0rcG9zc2libGUgdG8gZGV0ZXJtaW5lIChzdWNoIGFzIHdoZW4gd2Ugd2FudCB0byB1 c2UgQzwkVE9ETz4gYnV0Ci0rdGhlIHRlc3RzIGFyZSBiZWluZyBleGVjdXRlZCBpbiBvdGhlciBw YWNrYWdlcyB3aGljaCBjYW4ndCBiZSBpbmZlcnJlZAotK2JlZm9yZWhhbmQpLgotKwotK05vdGUg dGhhdCB5b3UgY2FuIHVzZSB0aGlzIHRvIG5lc3QgInRvZG8iIHRlc3RzCi0rCi0rICRUZXN0LT50 b2RvX3N0YXJ0KCd3b3JraW5nIG9uIHRoaXMnKTsKLSsgIyBsb3RzIG9mIGNvZGUKLSsgJFRlc3Qt PnRvZG9fc3RhcnQoJ3dvcmtpbmcgb24gdGhhdCcpOwotKyAjIG1vcmUgY29kZQotKyAkVGVzdC0+ dG9kb19lbmQ7Ci0rICRUZXN0LT50b2RvX2VuZDsKLSsKLStUaGlzIGlzIGdlbmVyYWxseSBub3Qg cmVjb21tZW5kZWQsIGJ1dCBsYXJnZSB0ZXN0aW5nIHN5c3RlbXMgb2Z0ZW4gaGF2ZSB3ZWlyZAot K2ludGVybmFsIG5lZWRzLgotKwotK1dlJ3ZlIHRyaWVkIHRvIG1ha2UgdGhpcyBhbHNvIHdvcmsg d2l0aCB0aGUgVE9ETzogc3ludGF4LCBidXQgaXQncyBub3QKLStndWFyYW50ZWVkIGFuZCBpdHMg dXNlIGlzIGFsc28gZGlzY291cmFnZWQ6Ci0rCi0rIFRPRE86IHsKLSsgICAgIGxvY2FsICRUT0RP ID0gJ1dlIGhhdmUgd29yayB0byBkbyEnOwotKyAgICAgJFRlc3QtPnRvZG9fc3RhcnQoJ3dvcmtp bmcgb24gdGhpcycpOwotKyAgICAgIyBsb3RzIG9mIGNvZGUKLSsgICAgICRUZXN0LT50b2RvX3N0 YXJ0KCd3b3JraW5nIG9uIHRoYXQnKTsKLSsgICAgICMgbW9yZSBjb2RlCi0rICAgICAkVGVzdC0+ dG9kb19lbmQ7Ci0rICAgICAkVGVzdC0+dG9kb19lbmQ7Ci0rIH0KLSsKLStQaWNrIG9uZSBzdHls ZSBvciBhbm90aGVyIG9mICJUT0RPIiB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLgotKwotKz1jdXQK LSsKLStzdWIgdG9kb19zdGFydCB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rICAgIG15ICRt ZXNzYWdlID0gQF8gPyBzaGlmdCA6ICcnOwotKwotKyAgICAkc2VsZi0+e1N0YXJ0X1RvZG99Kys7 Ci0rICAgIGlmKCAkc2VsZi0+aW5fdG9kbyApIHsKLSsgICAgICAgIHB1c2ggQHsgJHNlbGYtPntU b2RvX1N0YWNrfSB9ID0+ICRzZWxmLT50b2RvOwotKyAgICB9Ci0rICAgICRzZWxmLT57VG9kb30g PSAkbWVzc2FnZTsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSs9aXRlbSBDPHRvZG9fZW5kPgot KwotKyAkVGVzdC0+dG9kb19lbmQ7Ci0rCi0rU3RvcHMgcnVubmluZyB0ZXN0cyBhcyAiVE9ETyIg dGVzdHMuICBUaGlzIG1ldGhvZCBpcyBmYXRhbCBpZiBjYWxsZWQgd2l0aG91dCBhCi0rcHJlY2Vk aW5nIEM8dG9kb19zdGFydD4gbWV0aG9kIGNhbGwuCi0rCi0rPWN1dAotKwotK3N1YiB0b2RvX2Vu ZCB7Ci0rICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0rCi0rICAgIGlmKCAhJHNlbGYtPntTdGFydF9U b2RvfSApIHsKLSsgICAgICAgICRzZWxmLT5jcm9haygndG9kb19lbmQoKSBjYWxsZWQgd2l0aG91 dCB0b2RvX3N0YXJ0KCknKTsKLSsgICAgfQotKwotKyAgICAkc2VsZi0+e1N0YXJ0X1RvZG99LS07 Ci0rCi0rICAgIGlmKCAkc2VsZi0+e1N0YXJ0X1RvZG99ICYmIEB7ICRzZWxmLT57VG9kb19TdGFj a30gfSApIHsKLSsgICAgICAgICRzZWxmLT57VG9kb30gPSBwb3AgQHsgJHNlbGYtPntUb2RvX1N0 YWNrfSB9OwotKyAgICB9Ci0rICAgIGVsc2UgewotKyAgICAgICAgZGVsZXRlICRzZWxmLT57VG9k b307Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSs9aXRlbSBCPGNhbGxlcj4KLSsK LSsgICAgbXkgJHBhY2thZ2UgPSAkVGVzdC0+Y2FsbGVyOwotKyAgICBteSgkcGFjaywgJGZpbGUs ICRsaW5lKSA9ICRUZXN0LT5jYWxsZXI7Ci0rICAgIG15KCRwYWNrLCAkZmlsZSwgJGxpbmUpID0g JFRlc3QtPmNhbGxlcigkaGVpZ2h0KTsKLSsKLStMaWtlIHRoZSBub3JtYWwgQzxjYWxsZXIoKT4s IGV4Y2VwdCBpdCByZXBvcnRzIGFjY29yZGluZyB0byB5b3VyIEM8bGV2ZWwoKT4uCi0rCi0rQzwk aGVpZ2h0PiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBDPGxldmVsKCk+LgotKwotK0lmIEM8Y2FsbGVy KCk+IHdpbmRzIHVwIG9mZiB0aGUgdG9wIG9mIHRoZSBzdGFjayBpdCByZXBvcnQgdGhlIGhpZ2hl c3QgY29udGV4dC4KLSsKLSs9Y3V0Ci0rCi0rc3ViIGNhbGxlciB7ICAgICMjIG5vIGNyaXRpYyAo U3Vicm91dGluZXM6OlByb2hpYml0QnVpbHRpbkhvbW9ueW1zKQotKyAgICBteSggJHNlbGYsICRo ZWlnaHQgKSA9IEBfOwotKyAgICAkaGVpZ2h0IHx8PSAwOwotKwotKyAgICBteSAkbGV2ZWwgPSAk c2VsZi0+bGV2ZWwgKyAkaGVpZ2h0ICsgMTsKLSsgICAgbXkgQGNhbGxlcjsKLSsgICAgZG8gewot KyAgICAgICAgQGNhbGxlciA9IENPUkU6OmNhbGxlciggJGxldmVsICk7Ci0rICAgICAgICAkbGV2 ZWwtLTsKLSsgICAgfSB1bnRpbCBAY2FsbGVyOwotKyAgICByZXR1cm4gd2FudGFycmF5ID8gQGNh bGxlciA6ICRjYWxsZXJbMF07Ci0rfQotKwotKz1iYWNrCi0rCi0rPWN1dAotKwotKz1iZWdpbiBf cHJpdmF0ZQotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBCPF9zYW5pdHlfY2hlY2s+Ci0rCi0rICAk c2VsZi0+X3Nhbml0eV9jaGVjaygpOwotKwotK1J1bnMgYSBidW5jaCBvZiBlbmQgb2YgdGVzdCBz YW5pdHkgY2hlY2tzIHRvIG1ha2Ugc3VyZSByZWFsaXR5IGNhbWUKLSt0aHJvdWdoIG9rLiAgSWYg YW55dGhpbmcgaXMgd3JvbmcgaXQgd2lsbCBkaWUgd2l0aCBhIGZhaXJseSBmcmllbmRseQotK2Vy cm9yIG1lc3NhZ2UuCi0rCi0rPWN1dAotKwotKyMnIwotK3N1YiBfc2FuaXR5X2NoZWNrIHsKLSsg ICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsKLSsgICAgJHNlbGYtPl93aG9hKCAkc2VsZi0+e0N1cnJf VGVzdH0gPCAwLCAnU2F5cyBoZXJlIHlvdSByYW4gYSBuZWdhdGl2ZSBudW1iZXIgb2YgdGVzdHMh JyApOwotKyAgICAkc2VsZi0+X3dob2EoICRzZWxmLT57Q3Vycl9UZXN0fSAhPSBAeyAkc2VsZi0+ e1Rlc3RfUmVzdWx0c30gfSwKLSsgICAgICAgICdTb21laG93IHlvdSBnb3QgYSBkaWZmZXJlbnQg bnVtYmVyIG9mIHJlc3VsdHMgdGhhbiB0ZXN0cyByYW4hJyApOwotKwotKyAgICByZXR1cm47Ci0r fQotKwotKz1pdGVtIEI8X3dob2E+Ci0rCi0rICAkc2VsZi0+X3dob2EoJGNoZWNrLCAkZGVzY3Jp cHRpb24pOwotKwotK0Egc2FuaXR5IGNoZWNrLCBzaW1pbGFyIHRvIEM8YXNzZXJ0KCk+LiAgSWYg dGhlIEM8JGNoZWNrPiBpcyB0cnVlLCBzb21ldGhpbmcKLStoYXMgZ29uZSBob3JyaWJseSB3cm9u Zy4gIEl0IHdpbGwgZGllIHdpdGggdGhlIGdpdmVuIEM8JGRlc2NyaXB0aW9uPiBhbmQKLSthIG5v dGUgdG8gY29udGFjdCB0aGUgYXV0aG9yLgotKwotKz1jdXQKLSsKLStzdWIgX3dob2EgewotKyAg ICBteSggJHNlbGYsICRjaGVjaywgJGRlc2MgKSA9IEBfOwotKyAgICBpZigkY2hlY2spIHsKLSsg ICAgICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7Ci0rICAgICAgICAkc2VsZi0+Y3JvYWso PDwiV0hPQSIpOwotK1dIT0EhICAkZGVzYwotK1RoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEgIFBs ZWFzZSBjb250YWN0IHRoZSBhdXRob3IgaW1tZWRpYXRlbHkhCi0rV0hPQQotKyAgICB9Ci0rCi0r ICAgIHJldHVybjsKLSt9Ci0rCi0rPWl0ZW0gQjxfbXlfZXhpdD4KLSsKLSsgIF9teV9leGl0KCRl eGl0X251bSk7Ci0rCi0rUGVybCBzZWVtcyB0byBoYXZlIHNvbWUgdHJvdWJsZSB3aXRoIGV4aXRp bmcgaW5zaWRlIGFuIEM8RU5EPiBibG9jay4KLSs1LjYuMSBkb2VzIHNvbWUgb2RkIHRoaW5ncy4g IEluc3RlYWQsIHRoaXMgZnVuY3Rpb24gZWRpdHMgQzwkPz4KLStkaXJlY3RseS4gIEl0IHNob3Vs ZCBCPG9ubHk+IGJlIGNhbGxlZCBmcm9tIGluc2lkZSBhbiBDPEVORD4gYmxvY2suCi0rSXQgZG9l c24ndCBhY3R1YWxseSBleGl0LCB0aGF0J3MgeW91ciBqb2IuCi0rCi0rPWN1dAotKwotK3N1YiBf bXlfZXhpdCB7Ci0rICAgICQ/ID0gJF9bMF07ICAgICMjIG5vIGNyaXRpYyAoVmFyaWFibGVzOjpS ZXF1aXJlTG9jYWxpemVkUHVuY3R1YXRpb25WYXJzKQotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0r Ci0rPWJhY2sKLSsKLSs9ZW5kIF9wcml2YXRlCi0rCi0rPWN1dAotKwotK3N1YiBfZW5kaW5nIHsK LSsgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSsgICAgcmV0dXJuIGlmICRzZWxmLT5ub19lbmRpbmc7 Ci0rICAgIHJldHVybiBpZiAkc2VsZi0+e0VuZGluZ30rKzsKLSsKLSsgICAgbXkgJHJlYWxfZXhp dF9jb2RlID0gJD87Ci0rCi0rICAgICMgRG9uJ3QgYm90aGVyIHdpdGggYW4gZW5kaW5nIGlmIHRo aXMgaXMgYSBmb3JrZWQgY29weS4gIE9ubHkgdGhlIHBhcmVudAotKyAgICAjIHNob3VsZCBkbyB0 aGUgZW5kaW5nLgotKyAgICBpZiggJHNlbGYtPntPcmlnaW5hbF9QaWR9ICE9ICQkICkgewotKyAg ICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0rICAgICMgUmFuIHRlc3RzIGJ1dCBuZXZlciBkZWNs YXJlZCBhIHBsYW4gb3IgaGl0IGRvbmVfdGVzdGluZwotKyAgICBpZiggISRzZWxmLT57SGF2ZV9Q bGFufSBhbmQgJHNlbGYtPntDdXJyX1Rlc3R9ICkgewotKyAgICAgICAgJHNlbGYtPmlzX3Bhc3Np bmcoMCk7Ci0rICAgICAgICAkc2VsZi0+ZGlhZygiVGVzdHMgd2VyZSBydW4gYnV0IG5vIHBsYW4g d2FzIGRlY2xhcmVkIGFuZCBkb25lX3Rlc3RpbmcoKSB3YXMgbm90IHNlZW4uIik7Ci0rCi0rICAg ICAgICBpZigkcmVhbF9leGl0X2NvZGUpIHsKLSsgICAgICAgICAgICAkc2VsZi0+ZGlhZyg8PCJG QUlMIik7Ci0rTG9va3MgbGlrZSB5b3VyIHRlc3QgZXhpdGVkIHdpdGggJHJlYWxfZXhpdF9jb2Rl IGp1c3QgYWZ0ZXIgJHNlbGYtPntDdXJyX1Rlc3R9LgotK0ZBSUwKLSsgICAgICAgICAgICAkc2Vs Zi0+aXNfcGFzc2luZygwKTsKLSsgICAgICAgICAgICBfbXlfZXhpdCgkcmVhbF9leGl0X2NvZGUp ICYmIHJldHVybjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgICMgQnV0IGlmIHRoZSB0ZXN0cyBy YW4sIGhhbmRsZSBleGl0IGNvZGUuCi0rICAgICAgICBteSAkdGVzdF9yZXN1bHRzID0gJHNlbGYt PntUZXN0X1Jlc3VsdHN9OwotKyAgICAgICAgaWYoQCR0ZXN0X3Jlc3VsdHMpIHsKLSsgICAgICAg ICAgICBteSAkbnVtX2ZhaWxlZCA9IGdyZXAgISRfLT57J29rJ30sIEB7JHRlc3RfcmVzdWx0c31b IDAgLi4gJHNlbGYtPntDdXJyX1Rlc3R9IC0gMSBdOwotKyAgICAgICAgICAgIGlmICgkbnVtX2Zh aWxlZCA+IDApIHsKLSsKLSsgICAgICAgICAgICAgICAgbXkgJGV4aXRfY29kZSA9ICRudW1fZmFp bGVkIDw9IDI1NCA/ICRudW1fZmFpbGVkIDogMjU0OwotKyAgICAgICAgICAgICAgICBfbXlfZXhp dCgkZXhpdF9jb2RlKSAmJiByZXR1cm47Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAg ICAgICAgX215X2V4aXQoMjU0KSAmJiByZXR1cm47Ci0rICAgIH0KLSsKLSsgICAgIyBFeGl0IGlm IHBsYW4oKSB3YXMgbmV2ZXIgY2FsbGVkLiAgVGhpcyBpcyBzbyAicmVxdWlyZSBUZXN0OjpTaW1w bGUiCi0rICAgICMgZG9lc24ndCBwdWtlLgotKyAgICBpZiggISRzZWxmLT57SGF2ZV9QbGFufSAp IHsKLSsgICAgICAgIHJldHVybjsKLSsgICAgfQotKwotKyAgICAjIERvbid0IGRvIGFuIGVuZGlu ZyBpZiB3ZSBiYWlsZWQgb3V0LgotKyAgICBpZiggJHNlbGYtPntCYWlsZWRfT3V0fSApIHsKLSsg ICAgICAgICRzZWxmLT5pc19wYXNzaW5nKDApOwotKyAgICAgICAgcmV0dXJuOwotKyAgICB9Ci0r ICAgICMgRmlndXJlIG91dCBpZiB3ZSBwYXNzZWQgb3IgZmFpbGVkIGFuZCBwcmludCBoZWxwZnVs IG1lc3NhZ2VzLgotKyAgICBteSAkdGVzdF9yZXN1bHRzID0gJHNlbGYtPntUZXN0X1Jlc3VsdHN9 OwotKyAgICBpZihAJHRlc3RfcmVzdWx0cykgewotKyAgICAgICAgIyBUaGUgcGxhbj8gIFdlIGhh dmUgbm8gcGxhbi4KLSsgICAgICAgIGlmKCAkc2VsZi0+e05vX1BsYW59ICkgewotKyAgICAgICAg ICAgICRzZWxmLT5fb3V0cHV0X3BsYW4oJHNlbGYtPntDdXJyX1Rlc3R9KSB1bmxlc3MgJHNlbGYt Pm5vX2hlYWRlcjsKLSsgICAgICAgICAgICAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSA9ICRzZWxm LT57Q3Vycl9UZXN0fTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgICMgQXV0by1leHRlbmRlZCBh cnJheXMgYW5kIGVsZW1lbnRzIHdoaWNoIGFyZW4ndCBleHBsaWNpdGx5Ci0rICAgICAgICAjIGZp bGxlZCBpbiB3aXRoIGEgc2hhcmVkIHJlZmVyZW5jZSB3aWxsIHB1a2UgdW5kZXIgNS44LjAKLSsg ICAgICAgICMgaXRocmVhZHMuICBTbyB3ZSBoYXZlIHRvIGZpbGwgdGhlbSBpbiBieSBoYW5kLiA6 KAotKyAgICAgICAgbXkgJGVtcHR5X3Jlc3VsdCA9ICZzaGFyZSgge30gKTsKLSsgICAgICAgIGZv ciBteSAkaWR4ICggMCAuLiAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSAtIDEgKSB7Ci0rICAgICAg ICAgICAgJHRlc3RfcmVzdWx0cy0+WyRpZHhdID0gJGVtcHR5X3Jlc3VsdAotKyAgICAgICAgICAg ICAgdW5sZXNzIGRlZmluZWQgJHRlc3RfcmVzdWx0cy0+WyRpZHhdOwotKyAgICAgICAgfQotKwot KyAgICAgICAgbXkgJG51bV9mYWlsZWQgPSBncmVwICEkXy0+eydvayd9LCBAeyR0ZXN0X3Jlc3Vs dHN9WyAwIC4uICRzZWxmLT57Q3Vycl9UZXN0fSAtIDEgXTsKLSsKLSsgICAgICAgIG15ICRudW1f ZXh0cmEgPSAkc2VsZi0+e0N1cnJfVGVzdH0gLSAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfTsKLSsK LSsgICAgICAgIGlmKCAkbnVtX2V4dHJhICE9IDAgKSB7Ci0rICAgICAgICAgICAgbXkgJHMgPSAk c2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSA9PSAxID8gJycgOiAncyc7Ci0rICAgICAgICAgICAgJHNl bGYtPmRpYWcoPDwiRkFJTCIpOwotK0xvb2tzIGxpa2UgeW91IHBsYW5uZWQgJHNlbGYtPntFeHBl Y3RlZF9UZXN0c30gdGVzdCRzIGJ1dCByYW4gJHNlbGYtPntDdXJyX1Rlc3R9LgotK0ZBSUwKLSsg ICAgICAgICAgICAkc2VsZi0+aXNfcGFzc2luZygwKTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAg IGlmKCRudW1fZmFpbGVkKSB7Ci0rICAgICAgICAgICAgbXkgJG51bV90ZXN0cyA9ICRzZWxmLT57 Q3Vycl9UZXN0fTsKLSsgICAgICAgICAgICBteSAkcyA9ICRudW1fZmFpbGVkID09IDEgPyAnJyA6 ICdzJzsKLSsKLSsgICAgICAgICAgICBteSAkcXVhbGlmaWVyID0gJG51bV9leHRyYSA9PSAwID8g JycgOiAnIHJ1bic7Ci0rCi0rICAgICAgICAgICAgJHNlbGYtPmRpYWcoPDwiRkFJTCIpOwotK0xv b2tzIGxpa2UgeW91IGZhaWxlZCAkbnVtX2ZhaWxlZCB0ZXN0JHMgb2YgJG51bV90ZXN0cyRxdWFs aWZpZXIuCi0rRkFJTAotKyAgICAgICAgICAgICRzZWxmLT5pc19wYXNzaW5nKDApOwotKyAgICAg ICAgfQotKwotKyAgICAgICAgaWYoJHJlYWxfZXhpdF9jb2RlKSB7Ci0rICAgICAgICAgICAgJHNl bGYtPmRpYWcoPDwiRkFJTCIpOwotK0xvb2tzIGxpa2UgeW91ciB0ZXN0IGV4aXRlZCB3aXRoICRy ZWFsX2V4aXRfY29kZSBqdXN0IGFmdGVyICRzZWxmLT57Q3Vycl9UZXN0fS4KLStGQUlMCi0rICAg ICAgICAgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCk7Ci0rICAgICAgICAgICAgX215X2V4aXQoJHJl YWxfZXhpdF9jb2RlKSAmJiByZXR1cm47Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBteSAkZXhp dF9jb2RlOwotKyAgICAgICAgaWYoJG51bV9mYWlsZWQpIHsKLSsgICAgICAgICAgICAkZXhpdF9j b2RlID0gJG51bV9mYWlsZWQgPD0gMjU0ID8gJG51bV9mYWlsZWQgOiAyNTQ7Ci0rICAgICAgICB9 Ci0rICAgICAgICBlbHNpZiggJG51bV9leHRyYSAhPSAwICkgewotKyAgICAgICAgICAgICRleGl0 X2NvZGUgPSAyNTU7Ci0rICAgICAgICB9Ci0rICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICAk ZXhpdF9jb2RlID0gMDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIF9teV9leGl0KCRleGl0X2Nv ZGUpICYmIHJldHVybjsKLSsgICAgfQotKyAgICBlbHNpZiggJHNlbGYtPntTa2lwX0FsbH0gKSB7 Ci0rICAgICAgICBfbXlfZXhpdCgwKSAmJiByZXR1cm47Ci0rICAgIH0KLSsgICAgZWxzaWYoJHJl YWxfZXhpdF9jb2RlKSB7Ci0rICAgICAgICAkc2VsZi0+ZGlhZyg8PCJGQUlMIik7Ci0rTG9va3Mg bGlrZSB5b3VyIHRlc3QgZXhpdGVkIHdpdGggJHJlYWxfZXhpdF9jb2RlIGJlZm9yZSBpdCBjb3Vs ZCBvdXRwdXQgYW55dGhpbmcuCi0rRkFJTAotKyAgICAgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCk7 Ci0rICAgICAgICBfbXlfZXhpdCgkcmVhbF9leGl0X2NvZGUpICYmIHJldHVybjsKLSsgICAgfQot KyAgICBlbHNlIHsKLSsgICAgICAgICRzZWxmLT5kaWFnKCJObyB0ZXN0cyBydW4hXG4iKTsKLSsg ICAgICAgICRzZWxmLT5pc19wYXNzaW5nKDApOwotKyAgICAgICAgX215X2V4aXQoMjU1KSAmJiBy ZXR1cm47Ci0rICAgIH0KLSsKLSsgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCk7Ci0rICAgICRzZWxm LT5fd2hvYSggMSwgIldlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgX2VuZGluZygpIiApOwotK30KLSsK LStFTkQgewotKyAgICAkVGVzdC0+X2VuZGluZyBpZiBkZWZpbmVkICRUZXN0OwotK30KLSsKLSs9 aGVhZDEgRVhJVCBDT0RFUwotKwotK0lmIGFsbCB5b3VyIHRlc3RzIHBhc3NlZCwgVGVzdDo6QnVp bGRlciB3aWxsIGV4aXQgd2l0aCB6ZXJvICh3aGljaCBpcwotK25vcm1hbCkuICBJZiBhbnl0aGlu ZyBmYWlsZWQgaXQgd2lsbCBleGl0IHdpdGggaG93IG1hbnkgZmFpbGVkLiAgSWYKLSt5b3UgcnVu IGxlc3MgKG9yIG1vcmUpIHRlc3RzIHRoYW4geW91IHBsYW5uZWQsIHRoZSBtaXNzaW5nIChvciBl eHRyYXMpCi0rd2lsbCBiZSBjb25zaWRlcmVkIGZhaWx1cmVzLiAgSWYgbm8gdGVzdHMgd2VyZSBl dmVyIHJ1biBUZXN0OjpCdWlsZGVyCi0rd2lsbCB0aHJvdyBhIHdhcm5pbmcgYW5kIGV4aXQgd2l0 aCAyNTUuICBJZiB0aGUgdGVzdCBkaWVkLCBldmVuIGFmdGVyCi0raGF2aW5nIHN1Y2Nlc3NmdWxs eSBjb21wbGV0ZWQgYWxsIGl0cyB0ZXN0cywgaXQgd2lsbCBzdGlsbCBiZQotK2NvbnNpZGVyZWQg YSBmYWlsdXJlIGFuZCB3aWxsIGV4aXQgd2l0aCAyNTUuCi0rCi0rU28gdGhlIGV4aXQgY29kZXMg YXJlLi4uCi0rCi0rICAgIDAgICAgICAgICAgICAgICAgICAgYWxsIHRlc3RzIHN1Y2Nlc3NmdWwK LSsgICAgMjU1ICAgICAgICAgICAgICAgICB0ZXN0IGRpZWQgb3IgYWxsIHBhc3NlZCBidXQgd3Jv bmcgIyBvZiB0ZXN0cyBydW4KLSsgICAgYW55IG90aGVyIG51bWJlciAgICBob3cgbWFueSBmYWls ZWQgKGluY2x1ZGluZyBtaXNzaW5nIG9yIGV4dHJhcykKLSsKLStJZiB5b3UgZmFpbCBtb3JlIHRo YW4gMjU0IHRlc3RzLCBpdCB3aWxsIGJlIHJlcG9ydGVkIGFzIDI1NC4KLSsKLSs9aGVhZDEgVEhS RUFEUwotKwotK0luIHBlcmwgNS44LjEgYW5kIGxhdGVyLCBUZXN0OjpCdWlsZGVyIGlzIHRocmVh ZC1zYWZlLiAgVGhlIHRlc3QKLStudW1iZXIgaXMgc2hhcmVkIGFtb25nc3QgYWxsIHRocmVhZHMu ICBUaGlzIG1lYW5zIGlmIG9uZSB0aHJlYWQgc2V0cwotK3RoZSB0ZXN0IG51bWJlciB1c2luZyBD PGN1cnJlbnRfdGVzdCgpPiB0aGV5IHdpbGwgYWxsIGJlIGVmZmVjdGVkLgotKwotK1doaWxlIHZl cnNpb25zIGVhcmxpZXIgdGhhbiA1LjguMSBoYWQgdGhyZWFkcyB0aGV5IGNvbnRhaW4gdG9vIG1h bnkKLStidWdzIHRvIHN1cHBvcnQuCi0rCi0rVGVzdDo6QnVpbGRlciBpcyBvbmx5IHRocmVhZC1h d2FyZSBpZiB0aHJlYWRzLnBtIGlzIGxvYWRlZCBJPGJlZm9yZT4KLStUZXN0OjpCdWlsZGVyLgot KwotKz1oZWFkMSBNRU1PUlkKLSsKLStBbiBpbmZvcm1hdGl2ZSBoYXNoLCBhY2Nlc3NpYmxlIHZp YSBDPDxkZXRhaWxzKCk+PiwgaXMgc3RvcmVkIGZvciBlYWNoCi0rdGVzdCB5b3UgcGVyZm9ybS4g IFNvIG1lbW9yeSB1c2FnZSB3aWxsIHNjYWxlIGxpbmVhcmx5IHdpdGggZWFjaCB0ZXN0Ci0rcnVu LiBBbHRob3VnaCB0aGlzIGlzIG5vdCBhIHByb2JsZW0gZm9yIG1vc3QgdGVzdCBzdWl0ZXMsIGl0 IGNhbgotK2JlY29tZSBhbiBpc3N1ZSBpZiB5b3UgZG8gbGFyZ2UgKGh1bmRyZWQgdGhvdXNhbmRz IHRvIG1pbGxpb24pCi0rY29tYmluYXRvcmljcyB0ZXN0cyBpbiB0aGUgc2FtZSBydW4uCi0rCi0r SW4gc3VjaCBjYXNlcywgeW91IGFyZSBhZHZpc2VkIHRvIGVpdGhlciBzcGxpdCB0aGUgdGVzdCBm aWxlIGludG8gc21hbGxlcgotK29uZXMsIG9yIHVzZSBhIHJldmVyc2UgYXBwcm9hY2gsIGRvaW5n ICJub3JtYWwiIChjb2RlKSBjb21wYXJlcyBhbmQKLSt0cmlnZ2VyaW5nIGZhaWwoKSBzaG91bGQg YW55dGhpbmcgZ28gdW5leHBlY3RlZC4KLSsKLStGdXR1cmUgdmVyc2lvbnMgb2YgVGVzdDo6QnVp bGRlciB3aWxsIGhhdmUgYSB3YXkgdG8gdHVybiBoaXN0b3J5IG9mZi4KLSsKLSsKLSs9aGVhZDEg RVhBTVBMRVMKLSsKLStDUEFOIGNhbiBwcm92aWRlIHRoZSBiZXN0IGV4YW1wbGVzLiAgVGVzdDo6 U2ltcGxlLCBUZXN0OjpNb3JlLAotK1Rlc3Q6OkV4Y2VwdGlvbiBhbmQgVGVzdDo6RGlmZmVyZW5j ZXMgYWxsIHVzZSBUZXN0OjpCdWlsZGVyLgotKwotKz1oZWFkMSBTRUUgQUxTTwotKwotK1Rlc3Q6 OlNpbXBsZSwgVGVzdDo6TW9yZSwgVGVzdDo6SGFybmVzcwotKwotKz1oZWFkMSBBVVRIT1JTCi0r Ci0rT3JpZ2luYWwgY29kZSBieSBjaHJvbWF0aWMsIG1haW50YWluZWQgYnkgTWljaGFlbCBHIFNj aHdlcm4KLStFPGx0PnNjaHdlcm5AcG9ib3guY29tRTxndD4KLSsKLSs9aGVhZDEgTUFJTlRBSU5F UlMKLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQ2hhZCBHcmFudW0gRTxsdD5leG9kaXN0QGNwYW4u b3JnRTxndD4KLSsKLSs9YmFjawotKwotKz1oZWFkMSBDT1BZUklHSFQKLSsKLStDb3B5cmlnaHQg MjAwMi0yMDA4IGJ5IGNocm9tYXRpYyBFPGx0PmNocm9tYXRpY0B3Z3oub3JnRTxndD4gYW5kCi0r ICAgICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEcgU2Nod2VybiBFPGx0PnNjaHdlcm5AcG9i b3guY29tRTxndD4uCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotK21vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBh cyBQZXJsIGl0c2VsZi4KLSsKLStTZWUgRjxodHRwOi8vd3d3LnBlcmwuY29tL3BlcmwvbWlzYy9B cnRpc3RpYy5odG1sPgotKwotKz1jdXQKLSsKLSsxOwotKwotZGlmZiAtTmF1ciBvbGQvdGVzdF9z aW1wbGVfcGF0Y2gvbGliL1Rlc3QvTW9yZS5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rl c3QvTW9yZS5wbQotLS0tIG9sZC90ZXN0X3NpbXBsZV9wYXRjaC9saWIvVGVzdC9Nb3JlLnBtCTE5 NzAtMDEtMDEgMTA6MDA6MDAuMDAwMDAwMDAwICsxMDAwCi0rKysgbmV3L3Rlc3Rfc2ltcGxlX3Bh dGNoL2xpYi9UZXN0L01vcmUucG0JMjAxNC0wMy0yNiAyMTo0ODoxMS41MTQyNTc2NTYgKzExMDAK LUBAIC0wLDAgKzEsMTkyMSBAQAotK3BhY2thZ2UgVGVzdDo6TW9yZTsKLSsKLSt1c2UgNS4wMDY7 Ci0rdXNlIHN0cmljdDsKLSt1c2Ugd2FybmluZ3M7Ci0rCi0rIy0tLS0gcGVybGNyaXRpYyBleGVt cHRpb25zLiAtLS0tIwotKwotKyMgV2UgdXNlIGEgbG90IG9mIHN1YnJvdXRpbmUgcHJvdG90eXBl cwotKyMjIG5vIGNyaXRpYyAoU3Vicm91dGluZXM6OlByb2hpYml0U3Vicm91dGluZVByb3RvdHlw ZXMpCi0rCi0rIyBDYW4ndCB1c2UgQ2FycCBiZWNhdXNlIGl0IG1pZ2h0IGNhdXNlIHVzZV9vaygp IHRvIGFjY2lkZW50YWxseSBzdWNjZWVkCi0rIyBldmVuIHRob3VnaCB0aGUgbW9kdWxlIGJlaW5n IHVzZWQgZm9yZ290IHRvIHVzZSBDYXJwLiAgWWVzLCB0aGlzCi0rIyBhY3R1YWxseSBoYXBwZW5l ZC4KLStzdWIgX2NhcnAgewotKyAgICBteSggJGZpbGUsICRsaW5lICkgPSAoIGNhbGxlcigxKSAp WyAxLCAyIF07Ci0rICAgIHJldHVybiB3YXJuIEBfLCAiIGF0ICRmaWxlIGxpbmUgJGxpbmVcbiI7 Ci0rfQotKwotK291ciAkVkVSU0lPTiA9ICcxLjAwMTAwMyc7Ci0rJFZFUlNJT04gPSBldmFsICRW RVJTSU9OOyAgICAjIyBubyBjcml0aWMgKEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hpYml0U3RyaW5n eUV2YWwpCi0rCi0rdXNlIFRlc3Q6OkJ1aWxkZXI6Ok1vZHVsZSAwLjk5OwotK291ciBASVNBICAg ID0gcXcoVGVzdDo6QnVpbGRlcjo6TW9kdWxlKTsKLStvdXIgQEVYUE9SVCA9IHF3KG9rIHVzZV9v ayByZXF1aXJlX29rCi0rICBpcyBpc250IGxpa2UgdW5saWtlIGlzX2RlZXBseQotKyAgY21wX29r Ci0rICBza2lwIHRvZG8gdG9kb19za2lwCi0rICBwYXNzIGZhaWwKLSsgIGVxX2FycmF5IGVxX2hh c2ggZXFfc2V0Ci0rICAkVE9ETwotKyAgcGxhbgotKyAgZG9uZV90ZXN0aW5nCi0rICBjYW5fb2sg aXNhX29rIG5ld19vawotKyAgZGlhZyBub3RlIGV4cGxhaW4KLSsgIHN1YnRlc3QKLSsgIEJBSUxf T1VUCi0rKTsKLSsKLSs9aGVhZDEgTkFNRQotKwotK1Rlc3Q6Ok1vcmUgLSB5ZXQgYW5vdGhlciBm cmFtZXdvcmsgZm9yIHdyaXRpbmcgdGVzdCBzY3JpcHRzCi0rCi0rPWhlYWQxIFNZTk9QU0lTCi0r Ci0rICB1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyMzsKLSsgICMgb3IKLSsgIHVzZSBUZXN0OjpN b3JlIHNraXBfYWxsID0+ICRyZWFzb247Ci0rICAjIG9yCi0rICB1c2UgVGVzdDo6TW9yZTsgICAj IHNlZSBkb25lX3Rlc3RpbmcoKQotKwotKyAgcmVxdWlyZV9vayggJ1NvbWU6Ok1vZHVsZScgKTsK LSsKLSsgICMgVmFyaW91cyB3YXlzIHRvIHNheSAib2siCi0rICBvaygkZ290IGVxICRleHBlY3Rl ZCwgJHRlc3RfbmFtZSk7Ci0rCi0rICBpcyAgKCRnb3QsICRleHBlY3RlZCwgJHRlc3RfbmFtZSk7 Ci0rICBpc250KCRnb3QsICRleHBlY3RlZCwgJHRlc3RfbmFtZSk7Ci0rCi0rICAjIFJhdGhlciB0 aGFuIHByaW50IFNUREVSUiAiIyBoZXJlJ3Mgd2hhdCB3ZW50IHdyb25nXG4iCi0rICBkaWFnKCJo ZXJlJ3Mgd2hhdCB3ZW50IHdyb25nIik7Ci0rCi0rICBsaWtlICAoJGdvdCwgcXIvZXhwZWN0ZWQv LCAkdGVzdF9uYW1lKTsKLSsgIHVubGlrZSgkZ290LCBxci9leHBlY3RlZC8sICR0ZXN0X25hbWUp OwotKwotKyAgY21wX29rKCRnb3QsICc9PScsICRleHBlY3RlZCwgJHRlc3RfbmFtZSk7Ci0rCi0r ICBpc19kZWVwbHkoJGdvdF9jb21wbGV4X3N0cnVjdHVyZSwgJGV4cGVjdGVkX2NvbXBsZXhfc3Ry dWN0dXJlLCAkdGVzdF9uYW1lKTsKLSsKLSsgIFNLSVA6IHsKLSsgICAgICBza2lwICR3aHksICRo b3dfbWFueSB1bmxlc3MgJGhhdmVfc29tZV9mZWF0dXJlOwotKwotKyAgICAgIG9rKCBmb28oKSwg ICAgICAgJHRlc3RfbmFtZSApOwotKyAgICAgIGlzKCBmb28oNDIpLCAyMywgJHRlc3RfbmFtZSAp OwotKyAgfTsKLSsKLSsgIFRPRE86IHsKLSsgICAgICBsb2NhbCAkVE9ETyA9ICR3aHk7Ci0rCi0r ICAgICAgb2soIGZvbygpLCAgICAgICAkdGVzdF9uYW1lICk7Ci0rICAgICAgaXMoIGZvbyg0Miks IDIzLCAkdGVzdF9uYW1lICk7Ci0rICB9OwotKwotKyAgY2FuX29rKCRtb2R1bGUsIEBtZXRob2Rz KTsKLSsgIGlzYV9vaygkb2JqZWN0LCAkY2xhc3MpOwotKwotKyAgcGFzcygkdGVzdF9uYW1lKTsK LSsgIGZhaWwoJHRlc3RfbmFtZSk7Ci0rCi0rICBCQUlMX09VVCgkd2h5KTsKLSsKLSsgICMgVU5J TVBMRU1FTlRFRCEhIQotKyAgbXkgQHN0YXR1cyA9IFRlc3Q6Ok1vcmU6OnN0YXR1czsKLSsKLSsK LSs9aGVhZDEgREVTQ1JJUFRJT04KLSsKLStCPFNUT1AhPiBJZiB5b3UncmUganVzdCBnZXR0aW5n IHN0YXJ0ZWQgd3JpdGluZyB0ZXN0cywgaGF2ZSBhIGxvb2sgYXQKLStMPFRlc3Q6OlNpbXBsZT4g Zmlyc3QuICBUaGlzIGlzIGEgZHJvcCBpbiByZXBsYWNlbWVudCBmb3IgVGVzdDo6U2ltcGxlCi0r d2hpY2ggeW91IGNhbiBzd2l0Y2ggdG8gb25jZSB5b3UgZ2V0IHRoZSBoYW5nIG9mIGJhc2ljIHRl c3RpbmcuCi0rCi0rVGhlIHB1cnBvc2Ugb2YgdGhpcyBtb2R1bGUgaXMgdG8gcHJvdmlkZSBhIHdp ZGUgcmFuZ2Ugb2YgdGVzdGluZwotK3V0aWxpdGllcy4gIFZhcmlvdXMgd2F5cyB0byBzYXkgIm9r IiB3aXRoIGJldHRlciBkaWFnbm9zdGljcywKLStmYWNpbGl0aWVzIHRvIHNraXAgdGVzdHMsIHRl c3QgZnV0dXJlIGZlYXR1cmVzIGFuZCBjb21wYXJlIGNvbXBsaWNhdGVkCi0rZGF0YSBzdHJ1Y3R1 cmVzLiAgV2hpbGUgeW91IGNhbiBkbyBhbG1vc3QgYW55dGhpbmcgd2l0aCBhIHNpbXBsZQotK0M8 b2soKT4gZnVuY3Rpb24sIGl0IGRvZXNuJ3QgcHJvdmlkZSBnb29kIGRpYWdub3N0aWMgb3V0cHV0 LgotKwotKwotKz1oZWFkMiBJIGxvdmUgaXQgd2hlbiBhIHBsYW4gY29tZXMgdG9nZXRoZXIKLSsK LStCZWZvcmUgYW55dGhpbmcgZWxzZSwgeW91IG5lZWQgYSB0ZXN0aW5nIHBsYW4uICBUaGlzIGJh c2ljYWxseSBkZWNsYXJlcwotK2hvdyBtYW55IHRlc3RzIHlvdXIgc2NyaXB0IGlzIGdvaW5nIHRv IHJ1biB0byBwcm90ZWN0IGFnYWluc3QgcHJlbWF0dXJlCi0rZmFpbHVyZS4KLSsKLStUaGUgcHJl ZmVycmVkIHdheSB0byBkbyB0aGlzIGlzIHRvIGRlY2xhcmUgYSBwbGFuIHdoZW4geW91IEM8dXNl IFRlc3Q6Ok1vcmU+LgotKwotKyAgdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjM7Ci0rCi0rVGhl cmUgYXJlIGNhc2VzIHdoZW4geW91IHdpbGwgbm90IGtub3cgYmVmb3JlaGFuZCBob3cgbWFueSB0 ZXN0cyB5b3VyCi0rc2NyaXB0IGlzIGdvaW5nIHRvIHJ1bi4gIEluIHRoaXMgY2FzZSwgeW91IGNh biBkZWNsYXJlIHlvdXIgdGVzdHMgYXQKLSt0aGUgZW5kLgotKwotKyAgdXNlIFRlc3Q6Ok1vcmU7 Ci0rCi0rICAuLi4gcnVuIHlvdXIgdGVzdHMgLi4uCi0rCi0rICBkb25lX3Rlc3RpbmcoICRudW1i ZXJfb2ZfdGVzdHNfcnVuICk7Ci0rCi0rU29tZXRpbWVzIHlvdSByZWFsbHkgZG9uJ3Qga25vdyBo b3cgbWFueSB0ZXN0cyB3ZXJlIHJ1biwgb3IgaXQncyB0b28KLStkaWZmaWN1bHQgdG8gY2FsY3Vs YXRlLiAgSW4gd2hpY2ggY2FzZSB5b3UgY2FuIGxlYXZlIG9mZgotKyRudW1iZXJfb2ZfdGVzdHNf cnVuLgotKwotK0luIHNvbWUgY2FzZXMsIHlvdSdsbCB3YW50IHRvIGNvbXBsZXRlbHkgc2tpcCBh biBlbnRpcmUgdGVzdGluZyBzY3JpcHQuCi0rCi0rICB1c2UgVGVzdDo6TW9yZSBza2lwX2FsbCA9 PiAkc2tpcF9yZWFzb247Ci0rCi0rWW91ciBzY3JpcHQgd2lsbCBkZWNsYXJlIGEgc2tpcCB3aXRo IHRoZSByZWFzb24gd2h5IHlvdSBza2lwcGVkIGFuZAotK2V4aXQgaW1tZWRpYXRlbHkgd2l0aCBh IHplcm8gKHN1Y2Nlc3MpLiAgU2VlIEw8VGVzdDo6SGFybmVzcz4gZm9yCi0rZGV0YWlscy4KLSsK LStJZiB5b3Ugd2FudCB0byBjb250cm9sIHdoYXQgZnVuY3Rpb25zIFRlc3Q6Ok1vcmUgd2lsbCBl eHBvcnQsIHlvdQotK2hhdmUgdG8gdXNlIHRoZSAnaW1wb3J0JyBvcHRpb24uICBGb3IgZXhhbXBs ZSwgdG8gaW1wb3J0IGV2ZXJ5dGhpbmcKLStidXQgJ2ZhaWwnLCB5b3UnZCBkbzoKLSsKLSsgIHVz ZSBUZXN0OjpNb3JlIHRlc3RzID0+IDIzLCBpbXBvcnQgPT4gWychZmFpbCddOwotKwotK0FsdGVy bmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBwbGFuKCkgZnVuY3Rpb24uICBVc2VmdWwgZm9yIHdo ZW4geW91Ci0raGF2ZSB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiB0ZXN0cy4KLSsKLSsgIHVz ZSBUZXN0OjpNb3JlOwotKyAgcGxhbiB0ZXN0cyA9PiBrZXlzICVTdHVmZiAqIDM7Ci0rCi0rb3Ig Zm9yIGRlY2lkaW5nIGJldHdlZW4gcnVubmluZyB0aGUgdGVzdHMgYXQgYWxsOgotKwotKyAgdXNl IFRlc3Q6Ok1vcmU7Ci0rICBpZiggJF5PIGVxICdNYWNPUycgKSB7Ci0rICAgICAgcGxhbiBza2lw X2FsbCA9PiAnVGVzdCBpcnJlbGV2YW50IG9uIE1hY09TJzsKLSsgIH0KLSsgIGVsc2UgewotKyAg ICAgIHBsYW4gdGVzdHMgPT4gNDI7Ci0rICB9Ci0rCi0rPWN1dAotKwotK3N1YiBwbGFuIHsKLSsg ICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsKLSsKLSsgICAgcmV0dXJuICR0Yi0+cGxh bihAXyk7Ci0rfQotKwotKyMgVGhpcyBpbXBsZW1lbnRzICJ1c2UgVGVzdDo6TW9yZSAnbm9fZGlh ZyciIGJ1dCB0aGUgYmVoYXZpb3IgaXMKLSsjIGRlcHJlY2F0ZWQuCi0rc3ViIGltcG9ydF9leHRy YSB7Ci0rICAgIG15ICRjbGFzcyA9IHNoaWZ0OwotKyAgICBteSAkbGlzdCAgPSBzaGlmdDsKLSsK LSsgICAgbXkgQG90aGVyID0gKCk7Ci0rICAgIG15ICRpZHggICA9IDA7Ci0rICAgIHdoaWxlKCAk aWR4IDw9ICQjeyRsaXN0fSApIHsKLSsgICAgICAgIG15ICRpdGVtID0gJGxpc3QtPlskaWR4XTsK LSsKLSsgICAgICAgIGlmKCBkZWZpbmVkICRpdGVtIGFuZCAkaXRlbSBlcSAnbm9fZGlhZycgKSB7 Ci0rICAgICAgICAgICAgJGNsYXNzLT5idWlsZGVyLT5ub19kaWFnKDEpOwotKyAgICAgICAgfQot KyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgcHVzaCBAb3RoZXIsICRpdGVtOwotKyAgICAg ICAgfQotKwotKyAgICAgICAgJGlkeCsrOwotKyAgICB9Ci0rCi0rICAgIEAkbGlzdCA9IEBvdGhl cjsKLSsKLSsgICAgcmV0dXJuOwotK30KLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQjxkb25lX3Rl c3Rpbmc+Ci0rCi0rICAgIGRvbmVfdGVzdGluZygpOwotKyAgICBkb25lX3Rlc3RpbmcoJG51bWJl cl9vZl90ZXN0cyk7Ci0rCi0rSWYgeW91IGRvbid0IGtub3cgaG93IG1hbnkgdGVzdHMgeW91J3Jl IGdvaW5nIHRvIHJ1biwgeW91IGNhbiBpc3N1ZQotK3RoZSBwbGFuIHdoZW4geW91J3JlIGRvbmUg cnVubmluZyB0ZXN0cy4KLSsKLSskbnVtYmVyX29mX3Rlc3RzIGlzIHRoZSBzYW1lIGFzIHBsYW4o KSwgaXQncyB0aGUgbnVtYmVyIG9mIHRlc3RzIHlvdQotK2V4cGVjdGVkIHRvIHJ1bi4gIFlvdSBj YW4gb21pdCB0aGlzLCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgdGVzdHMKLSt5b3UgcmFu IGRvZXNuJ3QgbWF0dGVyLCBqdXN0IHRoZSBmYWN0IHRoYXQgeW91ciB0ZXN0cyByYW4gdG8KLStj b25jbHVzaW9uLgotKwotK1RoaXMgaXMgc2FmZXIgdGhhbiBhbmQgcmVwbGFjZXMgdGhlICJub19w bGFuIiBwbGFuLgotKwotKz1iYWNrCi0rCi0rPWN1dAotKwotK3N1YiBkb25lX3Rlc3Rpbmcgewot KyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOwotKyAgICAkdGItPmRvbmVfdGVzdGlu ZyhAXyk7Ci0rfQotKwotKz1oZWFkMiBUZXN0IG5hbWVzCi0rCi0rQnkgY29udmVudGlvbiwgZWFj aCB0ZXN0IGlzIGFzc2lnbmVkIGEgbnVtYmVyIGluIG9yZGVyLiAgVGhpcyBpcwotK2xhcmdlbHkg ZG9uZSBhdXRvbWF0aWNhbGx5IGZvciB5b3UuICBIb3dldmVyLCBpdCdzIG9mdGVuIHZlcnkgdXNl ZnVsIHRvCi0rYXNzaWduIGEgbmFtZSB0byBlYWNoIHRlc3QuICBXaGljaCB3b3VsZCB5b3UgcmF0 aGVyIHNlZToKLSsKLSsgIG9rIDQKLSsgIG5vdCBvayA1Ci0rICBvayA2Ci0rCi0rb3IKLSsKLSsg IG9rIDQgLSBiYXNpYyBtdWx0aS12YXJpYWJsZQotKyAgbm90IG9rIDUgLSBzaW1wbGUgZXhwb25l bnRpYWwKLSsgIG9rIDYgLSBmb3JjZSA9PSBtYXNzICogYWNjZWxlcmF0aW9uCi0rCi0rVGhlIGxh dGVyIGdpdmVzIHlvdSBzb21lIGlkZWEgb2Ygd2hhdCBmYWlsZWQuICBJdCBhbHNvIG1ha2VzIGl0 IGVhc2llcgotK3RvIGZpbmQgdGhlIHRlc3QgaW4geW91ciBzY3JpcHQsIHNpbXBseSBzZWFyY2gg Zm9yICJzaW1wbGUKLStleHBvbmVudGlhbCIuCi0rCi0rQWxsIHRlc3QgZnVuY3Rpb25zIHRha2Ug YSBuYW1lIGFyZ3VtZW50LiAgSXQncyBvcHRpb25hbCwgYnV0IGhpZ2hseQotK3N1Z2dlc3RlZCB0 aGF0IHlvdSB1c2UgaXQuCi0rCi0rPWhlYWQyIEknbSBvaywgeW91J3JlIG5vdCBvay4KLSsKLStU aGUgYmFzaWMgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBpcyB0byBwcmludCBvdXQgZWl0aGVyICJv ayAjIiBvciAibm90Ci0rb2sgIyIgZGVwZW5kaW5nIG9uIGlmIGEgZ2l2ZW4gdGVzdCBzdWNjZWVk ZWQgb3IgZmFpbGVkLiAgRXZlcnl0aGluZwotK2Vsc2UgaXMganVzdCBncmF2eS4KLSsKLStBbGwg b2YgdGhlIGZvbGxvd2luZyBwcmludCAib2siIG9yICJub3Qgb2siIGRlcGVuZGluZyBvbiBpZiB0 aGUgdGVzdAotK3N1Y2NlZWRlZCBvciBmYWlsZWQuICBUaGV5IGFsbCBhbHNvIHJldHVybiB0cnVl IG9yIGZhbHNlLAotK3Jlc3BlY3RpdmVseS4KLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQjxvaz4K LSsKLSsgIG9rKCRnb3QgZXEgJGV4cGVjdGVkLCAkdGVzdF9uYW1lKTsKLSsKLStUaGlzIHNpbXBs eSBldmFsdWF0ZXMgYW55IGV4cHJlc3Npb24gKEM8JGdvdCBlcSAkZXhwZWN0ZWQ+IGlzIGp1c3Qg YQotK3NpbXBsZSBleGFtcGxlKSBhbmQgdXNlcyB0aGF0IHRvIGRldGVybWluZSBpZiB0aGUgdGVz dCBzdWNjZWVkZWQgb3IKLStmYWlsZWQuICBBIHRydWUgZXhwcmVzc2lvbiBwYXNzZXMsIGEgZmFs c2Ugb25lIGZhaWxzLiAgVmVyeSBzaW1wbGUuCi0rCi0rRm9yIGV4YW1wbGU6Ci0rCi0rICAgIG9r KCAkZXhwezl9ID09IDgxLCAgICAgICAgICAgICAgICAgICAnc2ltcGxlIGV4cG9uZW50aWFsJyAp OwotKyAgICBvayggRmlsbS0+Y2FuKCdkYl9NYWluJyksICAgICAgICAgICAgJ3NldF9kYigpJyAp OwotKyAgICBvayggJHAtPnRlc3RzID09IDQsICAgICAgICAgICAgICAgICAgJ3NhdyB0ZXN0cycg KTsKLSsgICAgb2soICFncmVwKCFkZWZpbmVkICRfLCBAaXRlbXMpLCAgICAgICdhbGwgaXRlbXMg ZGVmaW5lZCcgKTsKLSsKLSsoTW5lbW9uaWM6ICAiVGhpcyBpcyBvay4iKQotKwotKyR0ZXN0X25h bWUgaXMgYSB2ZXJ5IHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0IHRoYXQgd2lsbCBiZSBw cmludGVkCi0rb3V0LiAgSXQgbWFrZXMgaXQgdmVyeSBlYXN5IHRvIGZpbmQgYSB0ZXN0IGluIHlv dXIgc2NyaXB0IHdoZW4gaXQgZmFpbHMKLSthbmQgZ2l2ZXMgb3RoZXJzIGFuIGlkZWEgb2YgeW91 ciBpbnRlbnRpb25zLiAgJHRlc3RfbmFtZSBpcyBvcHRpb25hbCwKLStidXQgd2UgQjx2ZXJ5PiBz dHJvbmdseSBlbmNvdXJhZ2UgaXRzIHVzZS4KLSsKLStTaG91bGQgYW4gb2soKSBmYWlsLCBpdCB3 aWxsIHByb2R1Y2Ugc29tZSBkaWFnbm9zdGljczoKLSsKLSsgICAgbm90IG9rIDE4IC0gc3VmZmlj aWVudCBtdWN1cwotKyAgICAjICAgRmFpbGVkIHRlc3QgJ3N1ZmZpY2llbnQgbXVjdXMnCi0rICAg ICMgICBpbiBmb28udCBhdCBsaW5lIDQyLgotKwotK1RoaXMgaXMgdGhlIHNhbWUgYXMgVGVzdDo6 U2ltcGxlJ3Mgb2soKSByb3V0aW5lLgotKwotKz1jdXQKLSsKLStzdWIgb2sgKCQ7JCkgewotKyAg ICBteSggJHRlc3QsICRuYW1lICkgPSBAXzsKLSsgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVp bGRlcjsKLSsKLSsgICAgcmV0dXJuICR0Yi0+b2soICR0ZXN0LCAkbmFtZSApOwotK30KLSsKLSs9 aXRlbSBCPGlzPgotKwotKz1pdGVtIEI8aXNudD4KLSsKLSsgIGlzICAoICRnb3QsICRleHBlY3Rl ZCwgJHRlc3RfbmFtZSApOwotKyAgaXNudCggJGdvdCwgJGV4cGVjdGVkLCAkdGVzdF9uYW1lICk7 Ci0rCi0rU2ltaWxhciB0byBvaygpLCBpcygpIGFuZCBpc250KCkgY29tcGFyZSB0aGVpciB0d28g YXJndW1lbnRzCi0rd2l0aCBDPGVxPiBhbmQgQzxuZT4gcmVzcGVjdGl2ZWx5IGFuZCB1c2UgdGhl IHJlc3VsdCBvZiB0aGF0IHRvCi0rZGV0ZXJtaW5lIGlmIHRoZSB0ZXN0IHN1Y2NlZWRlZCBvciBm YWlsZWQuICBTbyB0aGVzZToKLSsKLSsgICAgIyBJcyB0aGUgdWx0aW1hdGUgYW5zd2VyIDQyPwot KyAgICBpcyggdWx0aW1hdGVfYW5zd2VyKCksIDQyLCAgICAgICAgICAiTWVhbmluZyBvZiBMaWZl IiApOwotKwotKyAgICAjICRmb28gaXNuJ3QgZW1wdHkKLSsgICAgaXNudCggJGZvbywgJycsICAg ICAiR290IHNvbWUgZm9vIiApOwotKwotK2FyZSBzaW1pbGFyIHRvIHRoZXNlOgotKwotKyAgICBv ayggdWx0aW1hdGVfYW5zd2VyKCkgZXEgNDIsICAgICAgICAiTWVhbmluZyBvZiBMaWZlIiApOwot KyAgICBvayggJGZvbyBuZSAnJywgICAgICJHb3Qgc29tZSBmb28iICk7Ci0rCi0rQzx1bmRlZj4g d2lsbCBvbmx5IGV2ZXIgbWF0Y2ggQzx1bmRlZj4uICBTbyB5b3UgY2FuIHRlc3QgYSB2YWx1ZQot K2FnYWluc3QgQzx1bmRlZj4gbGlrZSB0aGlzOgotKwotKyAgICBpcygkbm90X2RlZmluZWQsIHVu ZGVmLCAidW5kZWZpbmVkIGFzIGV4cGVjdGVkIik7Ci0rCi0rKE1uZW1vbmljOiAgIlRoaXMgaXMg dGhhdC4iICAiVGhpcyBpc24ndCB0aGF0LiIpCi0rCi0rU28gd2h5IHVzZSB0aGVzZT8gIFRoZXkg cHJvZHVjZSBiZXR0ZXIgZGlhZ25vc3RpY3Mgb24gZmFpbHVyZS4gIG9rKCkKLStjYW5ub3Qga25v dyB3aGF0IHlvdSBhcmUgdGVzdGluZyBmb3IgKGJleW9uZCB0aGUgbmFtZSksIGJ1dCBpcygpIGFu ZAotK2lzbnQoKSBrbm93IHdoYXQgdGhlIHRlc3Qgd2FzIGFuZCB3aHkgaXQgZmFpbGVkLiAgRm9y IGV4YW1wbGUgdGhpcwotK3Rlc3Q6Ci0rCi0rICAgIG15ICRmb28gPSAnd2FmZmxlJzsgIG15ICRi YXIgPSAneWFyYmxva29zJzsKLSsgICAgaXMoICRmb28sICRiYXIsICAgJ0lzIGZvbyB0aGUgc2Ft ZSBhcyBiYXI/JyApOwotKwotK1dpbGwgcHJvZHVjZSBzb21ldGhpbmcgbGlrZSB0aGlzOgotKwot KyAgICBub3Qgb2sgMTcgLSBJcyBmb28gdGhlIHNhbWUgYXMgYmFyPwotKyAgICAjICAgRmFpbGVk IHRlc3QgJ0lzIGZvbyB0aGUgc2FtZSBhcyBiYXI/JwotKyAgICAjICAgaW4gZm9vLnQgYXQgbGlu ZSAxMzkuCi0rICAgICMgICAgICAgICAgZ290OiAnd2FmZmxlJwotKyAgICAjICAgICBleHBlY3Rl ZDogJ3lhcmJsb2tvcycKLSsKLStTbyB5b3UgY2FuIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25n IHdpdGhvdXQgcmVydW5uaW5nIHRoZSB0ZXN0LgotKwotK1lvdSBhcmUgZW5jb3VyYWdlZCB0byB1 c2UgaXMoKSBhbmQgaXNudCgpIG92ZXIgb2soKSB3aGVyZSBwb3NzaWJsZSwKLStob3dldmVyIGRv IG5vdCBiZSB0ZW1wdGVkIHRvIHVzZSB0aGVtIHRvIGZpbmQgb3V0IGlmIHNvbWV0aGluZyBpcwot K3RydWUgb3IgZmFsc2UhCi0rCi0rICAjIFhYWCBCQUQhCi0rICBpcyggZXhpc3RzICRicm9va2x5 bnt0cmVlfSwgMSwgJ0EgdHJlZSBncm93cyBpbiBCcm9va2x5bicgKTsKLSsKLStUaGlzIGRvZXMg bm90IGNoZWNrIGlmIEM8ZXhpc3RzICRicm9va2x5bnt0cmVlfT4gaXMgdHJ1ZSwgaXQgY2hlY2tz IGlmCi0raXQgcmV0dXJucyAxLiAgVmVyeSBkaWZmZXJlbnQuICBTaW1pbGFyIGNhdmVhdHMgZXhp c3QgZm9yIGZhbHNlIGFuZCAwLgotK0luIHRoZXNlIGNhc2VzLCB1c2Ugb2soKS4KLSsKLSsgIG9r KCBleGlzdHMgJGJyb29rbHlue3RyZWV9LCAgICAnQSB0cmVlIGdyb3dzIGluIEJyb29rbHluJyAp OwotKwotK0Egc2ltcGxlIGNhbGwgdG8gaXNudCgpIHVzdWFsbHkgZG9lcyBub3QgcHJvdmlkZSBh IHN0cm9uZyB0ZXN0IGJ1dCB0aGVyZQotK2FyZSBjYXNlcyB3aGVuIHlvdSBjYW5ub3Qgc2F5IG11 Y2ggbW9yZSBhYm91dCBhIHZhbHVlIHRoYW4gdGhhdCBpdCBpcwotK2RpZmZlcmVudCBmcm9tIHNv bWUgb3RoZXIgdmFsdWU6Ci0rCi0rICBuZXdfb2sgJG9iaiwgIkZvbyI7Ci0rCi0rICBteSAkY2xv bmUgPSAkb2JqLT5jbG9uZTsKLSsgIGlzYV9vayAkb2JqLCAiRm9vIiwgIkZvby0+Y2xvbmUiOwot KwotKyAgaXNudCAkb2JqLCAkY2xvbmUsICJjbG9uZSgpIHByb2R1Y2VzIGEgZGlmZmVyZW50IG9i amVjdCI7Ci0rCi0rRm9yIHRob3NlIGdyYW1tYXRpY2FsIHBlZGFudHMgb3V0IHRoZXJlLCB0aGVy ZSdzIGFuIEM8aXNuJ3QoKT4KLStmdW5jdGlvbiB3aGljaCBpcyBhbiBhbGlhcyBvZiBpc250KCku Ci0rCi0rPWN1dAotKwotK3N1YiBpcyAoJCQ7JCkgewotKyAgICBteSAkdGIgPSBUZXN0OjpNb3Jl LT5idWlsZGVyOwotKwotKyAgICByZXR1cm4gJHRiLT5pc19lcShAXyk7Ci0rfQotKwotK3N1YiBp c250ICgkJDskKSB7Ci0rICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7Ci0rCi0rICAg IHJldHVybiAkdGItPmlzbnRfZXEoQF8pOwotK30KLSsKLSsqaXNuJ3QgPSBcJmlzbnQ7Ci0rCi0r PWl0ZW0gQjxsaWtlPgotKwotKyAgbGlrZSggJGdvdCwgcXIvZXhwZWN0ZWQvLCAkdGVzdF9uYW1l ICk7Ci0rCi0rU2ltaWxhciB0byBvaygpLCBsaWtlKCkgbWF0Y2hlcyAkZ290IGFnYWluc3QgdGhl IHJlZ2V4IEM8cXIvZXhwZWN0ZWQvPi4KLSsKLStTbyB0aGlzOgotKwotKyAgICBsaWtlKCRnb3Qs IHFyL2V4cGVjdGVkLywgJ3RoaXMgaXMgbGlrZSB0aGF0Jyk7Ci0rCi0raXMgc2ltaWxhciB0bzoK LSsKLSsgICAgb2soICRnb3QgPX4gbS9leHBlY3RlZC8sICd0aGlzIGlzIGxpa2UgdGhhdCcpOwot KwotKyhNbmVtb25pYyAiVGhpcyBpcyBsaWtlIHRoYXQiLikKLSsKLStUaGUgc2Vjb25kIGFyZ3Vt ZW50IGlzIGEgcmVndWxhciBleHByZXNzaW9uLiAgSXQgbWF5IGJlIGdpdmVuIGFzIGEKLStyZWdl eCByZWZlcmVuY2UgKGkuZS4gQzxxci8vPikgb3IgKGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eSB3 aXRoIG9sZGVyCi0rcGVybHMpIGFzIGEgc3RyaW5nIHRoYXQgbG9va3MgbGlrZSBhIHJlZ2V4IChh bHRlcm5hdGl2ZSBkZWxpbWl0ZXJzIGFyZQotK2N1cnJlbnRseSBub3Qgc3VwcG9ydGVkKToKLSsK LSsgICAgbGlrZSggJGdvdCwgJy9leHBlY3RlZC8nLCAndGhpcyBpcyBsaWtlIHRoYXQnICk7Ci0r Ci0rUmVnZXggb3B0aW9ucyBtYXkgYmUgcGxhY2VkIG9uIHRoZSBlbmQgKEM8Jy9leHBlY3RlZC9p Jz4pLgotKwotK0l0cyBhZHZhbnRhZ2VzIG92ZXIgb2soKSBhcmUgc2ltaWxhciB0byB0aGF0IG9m IGlzKCkgYW5kIGlzbnQoKS4gIEJldHRlcgotK2RpYWdub3N0aWNzIG9uIGZhaWx1cmUuCi0rCi0r PWN1dAotKwotK3N1YiBsaWtlICgkJDskKSB7Ci0rICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1 aWxkZXI7Ci0rCi0rICAgIHJldHVybiAkdGItPmxpa2UoQF8pOwotK30KLSsKLSs9aXRlbSBCPHVu bGlrZT4KLSsKLSsgIHVubGlrZSggJGdvdCwgcXIvZXhwZWN0ZWQvLCAkdGVzdF9uYW1lICk7Ci0r Ci0rV29ya3MgZXhhY3RseSBhcyBsaWtlKCksIG9ubHkgaXQgY2hlY2tzIGlmICRnb3QgQjxkb2Vz IG5vdD4gbWF0Y2ggdGhlCi0rZ2l2ZW4gcGF0dGVybi4KLSsKLSs9Y3V0Ci0rCi0rc3ViIHVubGlr ZSAoJCQ7JCkgewotKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOwotKwotKyAgICBy ZXR1cm4gJHRiLT51bmxpa2UoQF8pOwotK30KLSsKLSs9aXRlbSBCPGNtcF9vaz4KLSsKLSsgIGNt cF9vayggJGdvdCwgJG9wLCAkZXhwZWN0ZWQsICR0ZXN0X25hbWUgKTsKLSsKLStIYWxmd2F5IGJl dHdlZW4gQzxvaygpPiBhbmQgQzxpcygpPiBsaWVzIEM8Y21wX29rKCk+LiAgVGhpcyBhbGxvd3Mg eW91Ci0rdG8gY29tcGFyZSB0d28gYXJndW1lbnRzIHVzaW5nIGFueSBiaW5hcnkgcGVybCBvcGVy YXRvci4gIFRoZSB0ZXN0Ci0rcGFzc2VzIGlmIHRoZSBjb21wYXJpc29uIGlzIHRydWUgYW5kIGZh aWxzIG90aGVyd2lzZS4KLSsKLSsgICAgIyBvayggJGdvdCBlcSAkZXhwZWN0ZWQgKTsKLSsgICAg Y21wX29rKCAkZ290LCAnZXEnLCAkZXhwZWN0ZWQsICd0aGlzIGVxIHRoYXQnICk7Ci0rCi0rICAg ICMgb2soICRnb3QgPT0gJGV4cGVjdGVkICk7Ci0rICAgIGNtcF9vayggJGdvdCwgJz09JywgJGV4 cGVjdGVkLCAndGhpcyA9PSB0aGF0JyApOwotKwotKyAgICAjIG9rKCAkZ290ICYmICRleHBlY3Rl ZCApOwotKyAgICBjbXBfb2soICRnb3QsICcmJicsICRleHBlY3RlZCwgJ3RoaXMgJiYgdGhhdCcg KTsKLSsgICAgLi4uZXRjLi4uCi0rCi0rSXRzIGFkdmFudGFnZSBvdmVyIG9rKCkgaXMgd2hlbiB0 aGUgdGVzdCBmYWlscyB5b3UnbGwga25vdyB3aGF0ICRnb3QKLSthbmQgJGV4cGVjdGVkIHdlcmU6 Ci0rCi0rICAgIG5vdCBvayAxCi0rICAgICMgICBGYWlsZWQgdGVzdCBpbiBmb28udCBhdCBsaW5l IDEyLgotKyAgICAjICAgICAnMjMnCi0rICAgICMgICAgICAgICAmJgotKyAgICAjICAgICB1bmRl ZgotKwotK0l0J3MgYWxzbyB1c2VmdWwgaW4gdGhvc2UgY2FzZXMgd2hlcmUgeW91IGFyZSBjb21w YXJpbmcgbnVtYmVycyBhbmQKLStpcygpJ3MgdXNlIG9mIEM8ZXE+IHdpbGwgaW50ZXJmZXJlOgot KwotKyAgICBjbXBfb2soICRiaWdfaGFpcnlfbnVtYmVyLCAnPT0nLCAkYW5vdGhlcl9iaWdfaGFp cnlfbnVtYmVyICk7Ci0rCi0rSXQncyBlc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGNvbXBhcmluZyBn cmVhdGVyLXRoYW4gb3Igc21hbGxlci10aGFuIAotK3JlbGF0aW9uIGJldHdlZW4gdmFsdWVzOgot KwotKyAgICBjbXBfb2soICRzb21lX3ZhbHVlLCAnPD0nLCAkdXBwZXJfbGltaXQgKTsKLSsKLSsK LSs9Y3V0Ci0rCi0rc3ViIGNtcF9vaygkJCQ7JCkgewotKyAgICBteSAkdGIgPSBUZXN0OjpNb3Jl LT5idWlsZGVyOwotKwotKyAgICByZXR1cm4gJHRiLT5jbXBfb2soQF8pOwotK30KLSsKLSs9aXRl bSBCPGNhbl9vaz4KLSsKLSsgIGNhbl9vaygkbW9kdWxlLCBAbWV0aG9kcyk7Ci0rICBjYW5fb2so JG9iamVjdCwgQG1ldGhvZHMpOwotKwotK0NoZWNrcyB0byBtYWtlIHN1cmUgdGhlICRtb2R1bGUg b3IgJG9iamVjdCBjYW4gZG8gdGhlc2UgQG1ldGhvZHMKLSsod29ya3Mgd2l0aCBmdW5jdGlvbnMs IHRvbykuCi0rCi0rICAgIGNhbl9vaygnRm9vJywgcXcodGhpcyB0aGF0IHdoYXRldmVyKSk7Ci0r Ci0raXMgYWxtb3N0IGV4YWN0bHkgbGlrZSBzYXlpbmc6Ci0rCi0rICAgIG9rKCBGb28tPmNhbign dGhpcycpICYmIAotKyAgICAgICAgRm9vLT5jYW4oJ3RoYXQnKSAmJiAKLSsgICAgICAgIEZvby0+ Y2FuKCd3aGF0ZXZlcicpIAotKyAgICAgICk7Ci0rCi0rb25seSB3aXRob3V0IGFsbCB0aGUgdHlw aW5nIGFuZCB3aXRoIGEgYmV0dGVyIGludGVyZmFjZS4gIEhhbmR5IGZvcgotK3F1aWNrbHkgdGVz dGluZyBhbiBpbnRlcmZhY2UuCi0rCi0rTm8gbWF0dGVyIGhvdyBtYW55IEBtZXRob2RzIHlvdSBj aGVjaywgYSBzaW5nbGUgY2FuX29rKCkgY2FsbCBjb3VudHMKLSthcyBvbmUgdGVzdC4gIElmIHlv dSBkZXNpcmUgb3RoZXJ3aXNlLCB1c2U6Ci0rCi0rICAgIGZvcmVhY2ggbXkgJG1ldGggKEBtZXRo b2RzKSB7Ci0rICAgICAgICBjYW5fb2soJ0ZvbycsICRtZXRoKTsKLSsgICAgfQotKwotKz1jdXQK LSsKLStzdWIgY2FuX29rICgkQCkgewotKyAgICBteSggJHByb3RvLCBAbWV0aG9kcyApID0gQF87 Ci0rICAgIG15ICRjbGFzcyA9IHJlZiAkcHJvdG8gfHwgJHByb3RvOwotKyAgICBteSAkdGIgPSBU ZXN0OjpNb3JlLT5idWlsZGVyOwotKwotKyAgICB1bmxlc3MoJGNsYXNzKSB7Ci0rICAgICAgICBt eSAkb2sgPSAkdGItPm9rKCAwLCAiLT5jYW4oLi4uKSIgKTsKLSsgICAgICAgICR0Yi0+ZGlhZygn ICAgIGNhbl9vaygpIGNhbGxlZCB3aXRoIGVtcHR5IGNsYXNzIG9yIHJlZmVyZW5jZScpOwotKyAg ICAgICAgcmV0dXJuICRvazsKLSsgICAgfQotKwotKyAgICB1bmxlc3MoQG1ldGhvZHMpIHsKLSsg ICAgICAgIG15ICRvayA9ICR0Yi0+b2soIDAsICIkY2xhc3MtPmNhbiguLi4pIiApOwotKyAgICAg ICAgJHRiLT5kaWFnKCcgICAgY2FuX29rKCkgY2FsbGVkIHdpdGggbm8gbWV0aG9kcycpOwotKyAg ICAgICAgcmV0dXJuICRvazsKLSsgICAgfQotKwotKyAgICBteSBAbm9rID0gKCk7Ci0rICAgIGZv cmVhY2ggbXkgJG1ldGhvZCAoQG1ldGhvZHMpIHsKLSsgICAgICAgICR0Yi0+X3RyeSggc3ViIHsg JHByb3RvLT5jYW4oJG1ldGhvZCkgfSApIG9yIHB1c2ggQG5vaywgJG1ldGhvZDsKLSsgICAgfQot KwotKyAgICBteSAkbmFtZSA9IChAbWV0aG9kcyA9PSAxKSA/ICIkY2xhc3MtPmNhbignJG1ldGhv ZHNbMF0nKSIgOgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkY2xhc3MtPmNh biguLi4pIiAgICAgICAgICAgOwotKwotKyAgICBteSAkb2sgPSAkdGItPm9rKCAhQG5vaywgJG5h bWUgKTsKLSsKLSsgICAgJHRiLT5kaWFnKCBtYXAgIiAgICAkY2xhc3MtPmNhbignJF8nKSBmYWls ZWRcbiIsIEBub2sgKTsKLSsKLSsgICAgcmV0dXJuICRvazsKLSt9Ci0rCi0rPWl0ZW0gQjxpc2Ff b2s+Ci0rCi0rICBpc2Ffb2soJG9iamVjdCwgICAkY2xhc3MsICRvYmplY3RfbmFtZSk7Ci0rICBp c2Ffb2soJHN1YmNsYXNzLCAkY2xhc3MsICRvYmplY3RfbmFtZSk7Ci0rICBpc2Ffb2soJHJlZiwg ICAgICAkdHlwZSwgICRyZWZfbmFtZSk7Ci0rCi0rQ2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4g Qzw8ICRvYmplY3QtPmlzYSgkY2xhc3MpID4+LiAgQWxzbyBjaGVja3MgdG8gbWFrZQotK3N1cmUg dGhlIG9iamVjdCB3YXMgZGVmaW5lZCBpbiB0aGUgZmlyc3QgcGxhY2UuICBIYW5keSBmb3IgdGhp cyBzb3J0Ci0rb2YgdGhpbmc6Ci0rCi0rICAgIG15ICRvYmogPSBTb21lOjpNb2R1bGUtPm5ldzsK LSsgICAgaXNhX29rKCAkb2JqLCAnU29tZTo6TW9kdWxlJyApOwotKwotK3doZXJlIHlvdSdkIG90 aGVyd2lzZSBoYXZlIHRvIHdyaXRlCi0rCi0rICAgIG15ICRvYmogPSBTb21lOjpNb2R1bGUtPm5l dzsKLSsgICAgb2soIGRlZmluZWQgJG9iaiAmJiAkb2JqLT5pc2EoJ1NvbWU6Ok1vZHVsZScpICk7 Ci0rCi0rdG8gc2FmZWd1YXJkIGFnYWluc3QgeW91ciB0ZXN0IHNjcmlwdCBibG93aW5nIHVwLgot KwotK1lvdSBjYW4gYWxzbyB0ZXN0IGEgY2xhc3MsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyB0 aGUgcmlnaHQgYW5jZXN0b3I6Ci0rCi0rICAgIGlzYV9vayggJ1ZvbGUnLCAnUm9kZW50JyApOwot KwotK0l0IHdvcmtzIG9uIHJlZmVyZW5jZXMsIHRvbzoKLSsKLSsgICAgaXNhX29rKCAkYXJyYXlf cmVmLCAnQVJSQVknICk7Ci0rCi0rVGhlIGRpYWdub3N0aWNzIG9mIHRoaXMgdGVzdCBub3JtYWxs eSBqdXN0IHJlZmVyIHRvICd0aGUgb2JqZWN0Jy4gIElmCi0reW91J2QgbGlrZSB0aGVtIHRvIGJl IG1vcmUgc3BlY2lmaWMsIHlvdSBjYW4gc3VwcGx5IGFuICRvYmplY3RfbmFtZQotKyhmb3IgZXhh bXBsZSAnVGVzdCBjdXN0b21lcicpLgotKwotKz1jdXQKLSsKLStzdWIgaXNhX29rICgkJDskKSB7 Ci0rICAgIG15KCAkdGhpbmcsICRjbGFzcywgJHRoaW5nX25hbWUgKSA9IEBfOwotKyAgICBteSAk dGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOwotKwotKyAgICBteSAkd2hhdGFtaTsKLSsgICAgaWYo ICFkZWZpbmVkICR0aGluZyApIHsKLSsgICAgICAgICR3aGF0YW1pID0gJ3VuZGVmJzsKLSsgICAg fQotKyAgICBlbHNpZiggcmVmICR0aGluZyApIHsKLSsgICAgICAgICR3aGF0YW1pID0gJ3JlZmVy ZW5jZSc7Ci0rCi0rICAgICAgICBsb2NhbCgkQCwkISk7Ci0rICAgICAgICByZXF1aXJlIFNjYWxh cjo6VXRpbDsKLSsgICAgICAgIGlmKCBTY2FsYXI6OlV0aWw6OmJsZXNzZWQoJHRoaW5nKSApIHsK LSsgICAgICAgICAgICAkd2hhdGFtaSA9ICdvYmplY3QnOwotKyAgICAgICAgfQotKyAgICB9Ci0r ICAgIGVsc2UgewotKyAgICAgICAgJHdoYXRhbWkgPSAnY2xhc3MnOwotKyAgICB9Ci0rCi0rICAg ICMgV2UgY2FuJ3QgdXNlIFVOSVZFUlNBTDo6aXNhIGJlY2F1c2Ugd2Ugd2FudCB0byBob25vciBp c2EoKSBvdmVycmlkZXMKLSsgICAgbXkoICRyc2x0LCAkZXJyb3IgKSA9ICR0Yi0+X3RyeSggc3Vi IHsgJHRoaW5nLT5pc2EoJGNsYXNzKSB9ICk7Ci0rCi0rICAgIGlmKCRlcnJvcikgewotKyAgICAg ICAgZGllIDw8V0hPQSB1bmxlc3MgJGVycm9yID1+IC9eQ2FuJ3QgKGxvY2F0ZXxjYWxsKSBtZXRo b2QgImlzYSIvOwotK1dIT0EhIEkgdHJpZWQgdG8gY2FsbCAtPmlzYSBvbiB5b3VyICR3aGF0YW1p IGFuZCBnb3Qgc29tZSB3ZWlyZCBlcnJvci4KLStIZXJlJ3MgdGhlIGVycm9yLgotKyRlcnJvcgot K1dIT0EKLSsgICAgfQotKwotKyAgICAjIFNwZWNpYWwgY2FzZSBmb3IgaXNhX29rKCBbXSwgIkFS UkFZIiApIGFuZCBsaWtlCi0rICAgIGlmKCAkd2hhdGFtaSBlcSAncmVmZXJlbmNlJyApIHsKLSsg ICAgICAgICRyc2x0ID0gVU5JVkVSU0FMOjppc2EoJHRoaW5nLCAkY2xhc3MpOwotKyAgICB9Ci0r Ci0rICAgIG15KCRkaWFnLCAkbmFtZSk7Ci0rICAgIGlmKCBkZWZpbmVkICR0aGluZ19uYW1lICkg ewotKyAgICAgICAgJG5hbWUgPSAiJyR0aGluZ19uYW1lJyBpc2EgJyRjbGFzcyciOwotKyAgICAg ICAgJGRpYWcgPSBkZWZpbmVkICR0aGluZyA/ICInJHRoaW5nX25hbWUnIGlzbid0IGEgJyRjbGFz cyciIDogIickdGhpbmdfbmFtZScgaXNuJ3QgZGVmaW5lZCI7Ci0rICAgIH0KLSsgICAgZWxzaWYo ICR3aGF0YW1pIGVxICdvYmplY3QnICkgewotKyAgICAgICAgbXkgJG15X2NsYXNzID0gcmVmICR0 aGluZzsKLSsgICAgICAgICR0aGluZ19uYW1lID0gcXFbQW4gb2JqZWN0IG9mIGNsYXNzICckbXlf Y2xhc3MnXTsKLSsgICAgICAgICRuYW1lID0gIiR0aGluZ19uYW1lIGlzYSAnJGNsYXNzJyI7Ci0r ICAgICAgICAkZGlhZyA9ICJUaGUgb2JqZWN0IG9mIGNsYXNzICckbXlfY2xhc3MnIGlzbid0IGEg JyRjbGFzcyciOwotKyAgICB9Ci0rICAgIGVsc2lmKCAkd2hhdGFtaSBlcSAncmVmZXJlbmNlJyAp IHsKLSsgICAgICAgIG15ICR0eXBlID0gcmVmICR0aGluZzsKLSsgICAgICAgICR0aGluZ19uYW1l ID0gcXFbQSByZWZlcmVuY2Ugb2YgdHlwZSAnJHR5cGUnXTsKLSsgICAgICAgICRuYW1lID0gIiR0 aGluZ19uYW1lIGlzYSAnJGNsYXNzJyI7Ci0rICAgICAgICAkZGlhZyA9ICJUaGUgcmVmZXJlbmNl IG9mIHR5cGUgJyR0eXBlJyBpc24ndCBhICckY2xhc3MnIjsKLSsgICAgfQotKyAgICBlbHNpZigg JHdoYXRhbWkgZXEgJ3VuZGVmJyApIHsKLSsgICAgICAgICR0aGluZ19uYW1lID0gJ3VuZGVmJzsK LSsgICAgICAgICRuYW1lID0gIiR0aGluZ19uYW1lIGlzYSAnJGNsYXNzJyI7Ci0rICAgICAgICAk ZGlhZyA9ICIkdGhpbmdfbmFtZSBpc24ndCBkZWZpbmVkIjsKLSsgICAgfQotKyAgICBlbHNpZigg JHdoYXRhbWkgZXEgJ2NsYXNzJyApIHsKLSsgICAgICAgICR0aGluZ19uYW1lID0gcXFbVGhlIGNs YXNzIChvciBjbGFzcy1saWtlKSAnJHRoaW5nJ107Ci0rICAgICAgICAkbmFtZSA9ICIkdGhpbmdf bmFtZSBpc2EgJyRjbGFzcyciOwotKyAgICAgICAgJGRpYWcgPSAiJHRoaW5nX25hbWUgaXNuJ3Qg YSAnJGNsYXNzJyI7Ci0rICAgIH0KLSsgICAgZWxzZSB7Ci0rICAgICAgICBkaWU7Ci0rICAgIH0K LSsKLSsgICAgbXkgJG9rOwotKyAgICBpZigkcnNsdCkgewotKyAgICAgICAgJG9rID0gJHRiLT5v ayggMSwgJG5hbWUgKTsKLSsgICAgfQotKyAgICBlbHNlIHsKLSsgICAgICAgICRvayA9ICR0Yi0+ b2soIDAsICRuYW1lICk7Ci0rICAgICAgICAkdGItPmRpYWcoIiAgICAkZGlhZ1xuIik7Ci0rICAg IH0KLSsKLSsgICAgcmV0dXJuICRvazsKLSt9Ci0rCi0rPWl0ZW0gQjxuZXdfb2s+Ci0rCi0rICBt eSAkb2JqID0gbmV3X29rKCAkY2xhc3MgKTsKLSsgIG15ICRvYmogPSBuZXdfb2soICRjbGFzcyA9 PiBcQGFyZ3MgKTsKLSsgIG15ICRvYmogPSBuZXdfb2soICRjbGFzcyA9PiBcQGFyZ3MsICRvYmpl Y3RfbmFtZSApOwotKwotK0EgY29udmVuaWVuY2UgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgY3Jl YXRpbmcgYW4gb2JqZWN0IGFuZCBjYWxsaW5nCi0raXNhX29rKCkgb24gdGhhdCBvYmplY3QuCi0r Ci0rSXQgaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0rCi0rICAgIG15ICRvYmogPSAkY2xh c3MtPm5ldyhAYXJncyk7Ci0rICAgIGlzYV9vayAkb2JqLCAkY2xhc3MsICRvYmplY3RfbmFtZTsK LSsKLStJZiBAYXJncyBpcyBub3QgZ2l2ZW4sIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZSB1c2VkLgot KwotK1RoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBvbiBuZXcoKSBhbmQgaXQgYXNzdW1lcyBuZXco KSB3aWxsIHJldHVybgotK2p1c3QgYSBzaW5nbGUgb2JqZWN0IHdoaWNoIGlzYSBDPCRjbGFzcz4u Ci0rCi0rPWN1dAotKwotK3N1YiBuZXdfb2sgewotKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5i dWlsZGVyOwotKyAgICAkdGItPmNyb2FrKCJuZXdfb2soKSBtdXN0IGJlIGdpdmVuIGF0IGxlYXN0 IGEgY2xhc3MiKSB1bmxlc3MgQF87Ci0rCi0rICAgIG15KCAkY2xhc3MsICRhcmdzLCAkb2JqZWN0 X25hbWUgKSA9IEBfOwotKwotKyAgICAkYXJncyB8fD0gW107Ci0rCi0rICAgIG15ICRvYmo7Ci0r ICAgIG15KCAkc3VjY2VzcywgJGVycm9yICkgPSAkdGItPl90cnkoIHN1YiB7ICRvYmogPSAkY2xh c3MtPm5ldyhAJGFyZ3MpOyAxIH0gKTsKLSsgICAgaWYoJHN1Y2Nlc3MpIHsKLSsgICAgICAgIGxv Y2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCArIDE7Ci0r ICAgICAgICBpc2Ffb2sgJG9iaiwgJGNsYXNzLCAkb2JqZWN0X25hbWU7Ci0rICAgIH0KLSsgICAg ZWxzZSB7Ci0rICAgICAgICAkY2xhc3MgPSAndW5kZWYnIGlmICFkZWZpbmVkICRjbGFzczsKLSsg ICAgICAgICR0Yi0+b2soIDAsICIkY2xhc3MtPm5ldygpIGRpZWQiICk7Ci0rICAgICAgICAkdGIt PmRpYWcoIiAgICBFcnJvciB3YXM6ICAkZXJyb3IiKTsKLSsgICAgfQotKwotKyAgICByZXR1cm4g JG9iajsKLSt9Ci0rCi0rPWl0ZW0gQjxzdWJ0ZXN0PgotKwotKyAgICBzdWJ0ZXN0ICRuYW1lID0+ IFwmY29kZTsKLSsKLStzdWJ0ZXN0KCkgcnVucyB0aGUgJmNvZGUgYXMgaXRzIG93biBsaXR0bGUg dGVzdCB3aXRoIGl0cyBvd24gcGxhbiBhbmQKLStpdHMgb3duIHJlc3VsdC4gIFRoZSBtYWluIHRl c3QgY291bnRzIHRoaXMgYXMgYSBzaW5nbGUgdGVzdCB1c2luZyB0aGUKLStyZXN1bHQgb2YgdGhl IHdob2xlIHN1YnRlc3QgdG8gZGV0ZXJtaW5lIGlmIGl0cyBvayBvciBub3Qgb2suCi0rCi0rRm9y IGV4YW1wbGUuLi4KLSsKLSsgIHVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7Ci0rIAotKyAgcGFz cygiRmlyc3QgdGVzdCIpOwotKwotKyAgc3VidGVzdCAnQW4gZXhhbXBsZSBzdWJ0ZXN0JyA9PiBz dWIgewotKyAgICAgIHBsYW4gdGVzdHMgPT4gMjsKLSsKLSsgICAgICBwYXNzKCJUaGlzIGlzIGEg c3VidGVzdCIpOwotKyAgICAgIHBhc3MoIlNvIGlzIHRoaXMiKTsKLSsgIH07Ci0rCi0rICBwYXNz KCJUaGlyZCB0ZXN0Iik7Ci0rCi0rVGhpcyB3b3VsZCBwcm9kdWNlLgotKwotKyAgMS4uMwotKyAg b2sgMSAtIEZpcnN0IHRlc3QKLSsgICAgICAjIFN1YnRlc3Q6IEFuIGV4YW1wbGUgc3VidGVzdAot KyAgICAgIDEuLjIKLSsgICAgICBvayAxIC0gVGhpcyBpcyBhIHN1YnRlc3QKLSsgICAgICBvayAy IC0gU28gaXMgdGhpcwotKyAgb2sgMiAtIEFuIGV4YW1wbGUgc3VidGVzdAotKyAgb2sgMyAtIFRo aXJkIHRlc3QKLSsKLStBIHN1YnRlc3QgbWF5IGNhbGwgInNraXBfYWxsIi4gIE5vIHRlc3RzIHdp bGwgYmUgcnVuLCBidXQgdGhlIHN1YnRlc3QgaXMKLStjb25zaWRlcmVkIGEgc2tpcC4KLSsKLSsg IHN1YnRlc3QgJ3NraXBweScgPT4gc3ViIHsKLSsgICAgICBwbGFuIHNraXBfYWxsID0+ICdjdXog SSBzYWlkIHNvJzsKLSsgICAgICBwYXNzKCd0aGlzIHRlc3Qgd2lsbCBuZXZlciBiZSBydW4nKTsK LSsgIH07Ci0rCi0rUmV0dXJucyB0cnVlIGlmIHRoZSBzdWJ0ZXN0IHBhc3NlZCwgZmFsc2Ugb3Ro ZXJ3aXNlLgotKwotK0R1ZSB0byBob3cgc3VidGVzdHMgd29yaywgeW91IG1heSBvbWl0IGEgcGxh biBpZiB5b3UgZGVzaXJlLiAgVGhpcyBhZGRzIGFuCi0raW1wbGljaXQgQzxkb25lX3Rlc3Rpbmco KT4gdG8gdGhlIGVuZCBvZiB5b3VyIHN1YnRlc3QuICBUaGUgZm9sbG93aW5nIHR3bwotK3N1YnRl c3RzIGFyZSBlcXVpdmFsZW50OgotKwotKyAgc3VidGVzdCAnc3VidGVzdCB3aXRoIGltcGxpY2l0 IGRvbmVfdGVzdGluZygpJywgc3ViIHsKLSsgICAgICBvayAxLCAnc3VidGVzdHMgd2l0aCBhbiBp bXBsaWNpdCBkb25lIHRlc3Rpbmcgc2hvdWxkIHdvcmsnOwotKyAgICAgIG9rIDEsICcuLi4gYW5k IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSB0ZXN0JzsKLSsgICAgICBvayAxLCAnLi4uIG5vIG1hdHRl ciBob3cgbWFueSB0ZXN0cyBhcmUgcnVuJzsKLSsgIH07Ci0rCi0rICBzdWJ0ZXN0ICdzdWJ0ZXN0 IHdpdGggZXhwbGljaXQgZG9uZV90ZXN0aW5nKCknLCBzdWIgewotKyAgICAgIG9rIDEsICdzdWJ0 ZXN0cyB3aXRoIGFuIGV4cGxpY2l0IGRvbmUgdGVzdGluZyBzaG91bGQgd29yayc7Ci0rICAgICAg b2sgMSwgJy4uLiBhbmQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIHRlc3QnOwotKyAgICAgIG9rIDEs ICcuLi4gbm8gbWF0dGVyIGhvdyBtYW55IHRlc3RzIGFyZSBydW4nOwotKyAgICAgIGRvbmVfdGVz dGluZygpOwotKyAgfTsKLSsKLSs9Y3V0Ci0rCi0rc3ViIHN1YnRlc3QgewotKyAgICBteSAoJG5h bWUsICRzdWJ0ZXN0cykgPSBAXzsKLSsKLSsgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVpbGRl cjsKLSsgICAgcmV0dXJuICR0Yi0+c3VidGVzdChAXyk7Ci0rfQotKwotKz1pdGVtIEI8cGFzcz4K LSsKLSs9aXRlbSBCPGZhaWw+Ci0rCi0rICBwYXNzKCR0ZXN0X25hbWUpOwotKyAgZmFpbCgkdGVz dF9uYW1lKTsKLSsKLStTb21ldGltZXMgeW91IGp1c3Qgd2FudCB0byBzYXkgdGhhdCB0aGUgdGVz dHMgaGF2ZSBwYXNzZWQuICBVc3VhbGx5Ci0rdGhlIGNhc2UgaXMgeW91J3ZlIGdvdCBzb21lIGNv bXBsaWNhdGVkIGNvbmRpdGlvbiB0aGF0IGlzIGRpZmZpY3VsdCB0bwotK3dlZGdlIGludG8gYW4g b2soKS4gIEluIHRoaXMgY2FzZSwgeW91IGNhbiBzaW1wbHkgdXNlIHBhc3MoKSAodG8KLStkZWNs YXJlIHRoZSB0ZXN0IG9rKSBvciBmYWlsIChmb3Igbm90IG9rKS4gIFRoZXkgYXJlIHN5bm9ueW1z IGZvcgotK29rKDEpIGFuZCBvaygwKS4KLSsKLStVc2UgdGhlc2UgdmVyeSwgdmVyeSwgdmVyeSBz cGFyaW5nbHkuCi0rCi0rPWN1dAotKwotK3N1YiBwYXNzICg7JCkgewotKyAgICBteSAkdGIgPSBU ZXN0OjpNb3JlLT5idWlsZGVyOwotKwotKyAgICByZXR1cm4gJHRiLT5vayggMSwgQF8gKTsKLSt9 Ci0rCi0rc3ViIGZhaWwgKDskKSB7Ci0rICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7 Ci0rCi0rICAgIHJldHVybiAkdGItPm9rKCAwLCBAXyApOwotK30KLSsKLSs9YmFjawotKwotKwot Kz1oZWFkMiBNb2R1bGUgdGVzdHMKLSsKLStTb21ldGltZXMgeW91IHdhbnQgdG8gdGVzdCBpZiBh IG1vZHVsZSwgb3IgYSBsaXN0IG9mIG1vZHVsZXMsIGNhbgotK3N1Y2Nlc3NmdWxseSBsb2FkLiAg Rm9yIGV4YW1wbGUsIHlvdSdsbCBvZnRlbiB3YW50IGEgZmlyc3QgdGVzdCB3aGljaAotK3NpbXBs eSBsb2FkcyBhbGwgdGhlIG1vZHVsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiB0byBtYWtlIHN1cmUg dGhleQotK3dvcmsgYmVmb3JlIGdvaW5nIG9uIHRvIGRvIG1vcmUgY29tcGxpY2F0ZWQgdGVzdGlu Zy4KLSsKLStGb3Igc3VjaCBwdXJwb3NlcyB3ZSBoYXZlIEM8dXNlX29rPiBhbmQgQzxyZXF1aXJl X29rPi4KLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQjxyZXF1aXJlX29rPgotKwotKyAgIHJlcXVp cmVfb2soJG1vZHVsZSk7Ci0rICAgcmVxdWlyZV9vaygkZmlsZSk7Ci0rCi0rVHJpZXMgdG8gQzxy ZXF1aXJlPiB0aGUgZ2l2ZW4gJG1vZHVsZSBvciAkZmlsZS4gIElmIGl0IGxvYWRzCi0rc3VjY2Vz c2Z1bGx5LCB0aGUgdGVzdCB3aWxsIHBhc3MuICBPdGhlcndpc2UgaXQgZmFpbHMgYW5kIGRpc3Bs YXlzIHRoZQotK2xvYWQgZXJyb3IuCi0rCi0rQzxyZXF1aXJlX29rPiB3aWxsIGd1ZXNzIHdoZXRo ZXIgdGhlIGlucHV0IGlzIGEgbW9kdWxlIG5hbWUgb3IgYQotK2ZpbGVuYW1lLgotKwotK05vIGV4 Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgbG9hZCBmYWlscy4KLSsKLSsgICAgIyByZXF1 aXJlIFNvbWU6Ok1vZHVsZQotKyAgICByZXF1aXJlX29rICJTb21lOjpNb2R1bGUiOwotKwotKyAg ICAjIHJlcXVpcmUgIlNvbWUvRmlsZS5wbCI7Ci0rICAgIHJlcXVpcmVfb2sgIlNvbWUvRmlsZS5w bCI7Ci0rCi0rICAgICMgc3RvcCB0ZXN0aW5nIGlmIGFueSBvZiB5b3VyIG1vZHVsZXMgd2lsbCBu b3QgbG9hZAotKyAgICBmb3IgbXkgJG1vZHVsZSAoQG1vZHVsZSkgewotKyAgICAgICAgcmVxdWly ZV9vayAkbW9kdWxlIG9yIEJBSUxfT1VUICJDYW4ndCBsb2FkICRtb2R1bGUiOwotKyAgICB9Ci0r Ci0rPWN1dAotKwotK3N1YiByZXF1aXJlX29rICgkKSB7Ci0rICAgIG15KCRtb2R1bGUpID0gc2hp ZnQ7Ci0rICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7Ci0rCi0rICAgIG15ICRwYWNr ID0gY2FsbGVyOwotKwotKyAgICAjIFRyeSB0byBkZXRlcm1pbmUgaWYgd2UndmUgYmVlbiBnaXZl biBhIG1vZHVsZSBuYW1lIG9yIGZpbGUuCi0rICAgICMgTW9kdWxlIG5hbWVzIG11c3QgYmUgYmFy ZXdvcmRzLCBmaWxlcyBub3QuCi0rICAgICRtb2R1bGUgPSBxcVsnJG1vZHVsZSddIHVubGVzcyBf aXNfbW9kdWxlX25hbWUoJG1vZHVsZSk7Ci0rCi0rICAgIG15ICRjb2RlID0gPDxSRVFVSVJFOwot K3BhY2thZ2UgJHBhY2s7Ci0rcmVxdWlyZSAkbW9kdWxlOwotKzE7Ci0rUkVRVUlSRQotKwotKyAg ICBteSggJGV2YWxfcmVzdWx0LCAkZXZhbF9lcnJvciApID0gX2V2YWwoJGNvZGUpOwotKyAgICBt eSAkb2sgPSAkdGItPm9rKCAkZXZhbF9yZXN1bHQsICJyZXF1aXJlICRtb2R1bGU7IiApOwotKwot KyAgICB1bmxlc3MoJG9rKSB7Ci0rICAgICAgICBjaG9tcCAkZXZhbF9lcnJvcjsKLSsgICAgICAg ICR0Yi0+ZGlhZyg8PERJQUdOT1NUSUMpOwotKyAgICBUcmllZCB0byByZXF1aXJlICckbW9kdWxl Jy4KLSsgICAgRXJyb3I6ICAkZXZhbF9lcnJvcgotK0RJQUdOT1NUSUMKLSsKLSsgICAgfQotKwot KyAgICByZXR1cm4gJG9rOwotK30KLSsKLStzdWIgX2lzX21vZHVsZV9uYW1lIHsKLSsgICAgbXkg JG1vZHVsZSA9IHNoaWZ0OwotKwotKyAgICAjIE1vZHVsZSBuYW1lcyBzdGFydCB3aXRoIGEgbGV0 dGVyLgotKyAgICAjIEVuZCB3aXRoIGFuIGFscGhhbnVtZXJpYy4KLSsgICAgIyBUaGUgcmVzdCBp cyBhbiBhbHBoYW51bWVyaWMgb3IgOjoKLSsgICAgJG1vZHVsZSA9fiBzL1xiOjpcYi8vZzsKLSsK LSsgICAgcmV0dXJuICRtb2R1bGUgPX4gL15bYS16QS1aXVx3KiQvID8gMSA6IDA7Ci0rfQotKwot KwotKz1pdGVtIEI8dXNlX29rPgotKwotKyAgIEJFR0lOIHsgdXNlX29rKCRtb2R1bGUpOyB9Ci0r ICAgQkVHSU4geyB1c2Vfb2soJG1vZHVsZSwgQGltcG9ydHMpOyB9Ci0rCi0rTGlrZSBDPHJlcXVp cmVfb2s+LCBidXQgaXQgd2lsbCBDPHVzZT4gdGhlICRtb2R1bGUgaW4gcXVlc3Rpb24gYW5kCi0r b25seSBsb2FkcyBtb2R1bGVzLCBub3QgZmlsZXMuCi0rCi0rSWYgeW91IGp1c3Qgd2FudCB0byB0 ZXN0IGEgbW9kdWxlIGNhbiBiZSBsb2FkZWQsIHVzZSBDPHJlcXVpcmVfb2s+LgotKwotK0lmIHlv dSBqdXN0IHdhbnQgdG8gbG9hZCBhIG1vZHVsZSBpbiBhIHRlc3QsIHdlIHJlY29tbWVuZCBzaW1w bHkgdXNpbmcKLStDPHVzZT4gZGlyZWN0bHkuICBJdCB3aWxsIGNhdXNlIHRoZSB0ZXN0IHRvIHN0 b3AuCi0rCi0rSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBydW4gdXNlX29rKCkgaW5zaWRlIGEg QkVHSU4gYmxvY2sgc28gaXRzCi0rZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhdCBjb21waWxlLXRp bWUgYW5kIHByb3RvdHlwZXMgYXJlIHByb3Blcmx5Ci0raG9ub3JlZC4KLSsKLStJZiBAaW1wb3J0 cyBhcmUgZ2l2ZW4sIHRoZXkgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSB1c2UuICBTbyB0aGlz OgotKwotKyAgIEJFR0lOIHsgdXNlX29rKCdTb21lOjpNb2R1bGUnLCBxdyhmb28gYmFyKSkgfQot KwotK2lzIGxpa2UgZG9pbmcgdGhpczoKLSsKLSsgICB1c2UgU29tZTo6TW9kdWxlIHF3KGZvbyBi YXIpOwotKwotK1ZlcnNpb24gbnVtYmVycyBjYW4gYmUgY2hlY2tlZCBsaWtlIHNvOgotKwotKyAg ICMgSnVzdCBsaWtlICJ1c2UgU29tZTo6TW9kdWxlIDEuMDIiCi0rICAgQkVHSU4geyB1c2Vfb2so J1NvbWU6Ok1vZHVsZScsIDEuMDIpIH0KLSsKLStEb24ndCB0cnkgdG8gZG8gdGhpczoKLSsKLSsg ICBCRUdJTiB7Ci0rICAgICAgIHVzZV9vaygnU29tZTo6TW9kdWxlJyk7Ci0rCi0rICAgICAgIC4u LnNvbWUgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhlIHVzZS4uLgotKyAgICAgICAuLi5oYXBwZW5p bmcgYXQgY29tcGlsZSB0aW1lLi4uCi0rICAgfQotKwotK2JlY2F1c2UgdGhlIG5vdGlvbiBvZiAi Y29tcGlsZS10aW1lIiBpcyByZWxhdGl2ZS4gIEluc3RlYWQsIHlvdSB3YW50OgotKwotKyAgQkVH SU4geyB1c2Vfb2soJ1NvbWU6Ok1vZHVsZScpIH0KLSsgIEJFR0lOIHsgLi4uc29tZSBjb2RlIHRo YXQgZGVwZW5kcyBvbiB0aGUgdXNlLi4uIH0KLSsKLStJZiB5b3Ugd2FudCB0aGUgZXF1aXZhbGVu dCBvZiBDPHVzZSBGb28gKCk+LCB1c2UgYSBtb2R1bGUgYnV0IG5vdAotK2ltcG9ydCBhbnl0aGlu ZywgdXNlIEM8cmVxdWlyZV9vaz4uCi0rCi0rICBCRUdJTiB7IHJlcXVpcmVfb2sgIkZvbyIgfQot KwotKz1jdXQKLSsKLStzdWIgdXNlX29rICgkO0ApIHsKLSsgICAgbXkoICRtb2R1bGUsIEBpbXBv cnRzICkgPSBAXzsKLSsgICAgQGltcG9ydHMgPSAoKSB1bmxlc3MgQGltcG9ydHM7Ci0rICAgIG15 ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7Ci0rCi0rICAgIG15KCAkcGFjaywgJGZpbGVuYW1l LCAkbGluZSApID0gY2FsbGVyOwotKyAgICAkZmlsZW5hbWUgPX4geS9cblxyL18vOyAjIHNvIGl0 IGRvZXNuJ3QgcnVuIG9mZiB0aGUgIiNsaW5lICRsaW5lICRmIiBsaW5lCi0rCi0rICAgIG15ICRj b2RlOwotKyAgICBpZiggQGltcG9ydHMgPT0gMSBhbmQgJGltcG9ydHNbMF0gPX4gL15cZCsoPzpc LlxkKyk/JC8gKSB7Ci0rICAgICAgICAjIHByb2JhYmx5IGEgdmVyc2lvbiBjaGVjay4gIFBlcmwg bmVlZHMgdG8gc2VlIHRoZSBiYXJlIG51bWJlcgotKyAgICAgICAgIyBmb3IgaXQgdG8gd29yayB3 aXRoIG5vbi1FeHBvcnRlciBiYXNlZCBtb2R1bGVzLgotKyAgICAgICAgJGNvZGUgPSA8PFVTRTsK LStwYWNrYWdlICRwYWNrOwotKwotKyNsaW5lICRsaW5lICRmaWxlbmFtZQotK3VzZSAkbW9kdWxl ICRpbXBvcnRzWzBdOwotKzE7Ci0rVVNFCi0rICAgIH0KLSsgICAgZWxzZSB7Ci0rICAgICAgICAk Y29kZSA9IDw8VVNFOwotK3BhY2thZ2UgJHBhY2s7Ci0rCi0rI2xpbmUgJGxpbmUgJGZpbGVuYW1l Ci0rdXNlICRtb2R1bGUgXEB7XCRhcmdzWzBdfTsKLSsxOwotK1VTRQotKyAgICB9Ci0rCi0rICAg IG15KCAkZXZhbF9yZXN1bHQsICRldmFsX2Vycm9yICkgPSBfZXZhbCggJGNvZGUsIFxAaW1wb3J0 cyApOwotKyAgICBteSAkb2sgPSAkdGItPm9rKCAkZXZhbF9yZXN1bHQsICJ1c2UgJG1vZHVsZTsi ICk7Ci0rCi0rICAgIHVubGVzcygkb2spIHsKLSsgICAgICAgIGNob21wICRldmFsX2Vycm9yOwot KyAgICAgICAgJEAgPX4gc3teQkVHSU4gZmFpbGVkLS1jb21waWxhdGlvbiBhYm9ydGVkIGF0IC4q JH0KLSsgICAgICAgICAgICAgICAge0JFR0lOIGZhaWxlZC0tY29tcGlsYXRpb24gYWJvcnRlZCBh dCAkZmlsZW5hbWUgbGluZSAkbGluZS59bTsKLSsgICAgICAgICR0Yi0+ZGlhZyg8PERJQUdOT1NU SUMpOwotKyAgICBUcmllZCB0byB1c2UgJyRtb2R1bGUnLgotKyAgICBFcnJvcjogICRldmFsX2Vy cm9yCi0rRElBR05PU1RJQwotKwotKyAgICB9Ci0rCi0rICAgIHJldHVybiAkb2s7Ci0rfQotKwot K3N1YiBfZXZhbCB7Ci0rICAgIG15KCAkY29kZSwgQGFyZ3MgKSA9IEBfOwotKwotKyAgICAjIFdv cmsgYXJvdW5kIG9kZGl0aWVzIHN1cnJvdW5kaW5nIHJlc2V0dGluZyBvZiAkQCBieSBpbW1lZGlh dGVseQotKyAgICAjIHN0b3JpbmcgaXQuCi0rICAgIG15KCAkc2lnZGllLCAkZXZhbF9yZXN1bHQs ICRldmFsX2Vycm9yICk7Ci0rICAgIHsKLSsgICAgICAgIGxvY2FsKCAkQCwgJCEsICRTSUd7X19E SUVfX30gKTsgICAgIyBpc29sYXRlIGV2YWwKLSsgICAgICAgICRldmFsX3Jlc3VsdCA9IGV2YWwg JGNvZGU7ICAgICAgICAgICAgICAjIyBubyBjcml0aWMgKEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hp Yml0U3RyaW5neUV2YWwpCi0rICAgICAgICAkZXZhbF9lcnJvciAgPSAkQDsKLSsgICAgICAgICRz aWdkaWUgICAgICA9ICRTSUd7X19ESUVfX30gfHwgdW5kZWY7Ci0rICAgIH0KLSsgICAgIyBtYWtl IHN1cmUgdGhhdCAkY29kZSBnb3QgYSBjaGFuY2UgdG8gc2V0ICRTSUd7X19ESUVfX30KLSsgICAg JFNJR3tfX0RJRV9ffSA9ICRzaWdkaWUgaWYgZGVmaW5lZCAkc2lnZGllOwotKwotKyAgICByZXR1 cm4oICRldmFsX3Jlc3VsdCwgJGV2YWxfZXJyb3IgKTsKLSt9Ci0rCi0rCi0rPWJhY2sKLSsKLSsK LSs9aGVhZDIgQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMKLSsKLStOb3QgZXZlcnl0aGluZyBpcyBh IHNpbXBsZSBlcSBjaGVjayBvciByZWdleC4gIFRoZXJlIGFyZSB0aW1lcyB5b3UKLStuZWVkIHRv IHNlZSBpZiB0d28gZGF0YSBzdHJ1Y3R1cmVzIGFyZSBlcXVpdmFsZW50LiAgRm9yIHRoZXNlCi0r aW5zdGFuY2VzIFRlc3Q6Ok1vcmUgcHJvdmlkZXMgYSBoYW5kZnVsIG9mIHVzZWZ1bCBmdW5jdGlv bnMuCi0rCi0rQjxOT1RFPiBJJ20gbm90IHF1aXRlIHN1cmUgd2hhdCB3aWxsIGhhcHBlbiB3aXRo IGZpbGVoYW5kbGVzLgotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBCPGlzX2RlZXBseT4KLSsKLSsg IGlzX2RlZXBseSggJGdvdCwgJGV4cGVjdGVkLCAkdGVzdF9uYW1lICk7Ci0rCi0rU2ltaWxhciB0 byBpcygpLCBleGNlcHQgdGhhdCBpZiAkZ290IGFuZCAkZXhwZWN0ZWQgYXJlIHJlZmVyZW5jZXMs IGl0Ci0rZG9lcyBhIGRlZXAgY29tcGFyaXNvbiB3YWxraW5nIGVhY2ggZGF0YSBzdHJ1Y3R1cmUg dG8gc2VlIGlmIHRoZXkgYXJlCi0rZXF1aXZhbGVudC4gIElmIHRoZSB0d28gc3RydWN0dXJlcyBh cmUgZGlmZmVyZW50LCBpdCB3aWxsIGRpc3BsYXkgdGhlCi0rcGxhY2Ugd2hlcmUgdGhleSBzdGFy dCBkaWZmZXJpbmcuCi0rCi0raXNfZGVlcGx5KCkgY29tcGFyZXMgdGhlIGRlcmVmZXJlbmNlZCB2 YWx1ZXMgb2YgcmVmZXJlbmNlcywgdGhlCi0rcmVmZXJlbmNlcyB0aGVtc2VsdmVzIChleGNlcHQg Zm9yIHRoZWlyIHR5cGUpIGFyZSBpZ25vcmVkLiAgVGhpcyBtZWFucwotK2FzcGVjdHMgc3VjaCBh cyBibGVzc2luZyBhbmQgdGllcyBhcmUgbm90IGNvbnNpZGVyZWQgImRpZmZlcmVudCIuCi0rCi0r aXNfZGVlcGx5KCkgY3VycmVudGx5IGhhcyB2ZXJ5IGxpbWl0ZWQgaGFuZGxpbmcgb2YgZnVuY3Rp b24gcmVmZXJlbmNlCi0rYW5kIGdsb2JzLiAgSXQgbWVyZWx5IGNoZWNrcyBpZiB0aGV5IGhhdmUg dGhlIHNhbWUgcmVmZXJlbnQuICBUaGlzIG1heQotK2ltcHJvdmUgaW4gdGhlIGZ1dHVyZS4KLSsK LStMPFRlc3Q6OkRpZmZlcmVuY2VzPiBhbmQgTDxUZXN0OjpEZWVwPiBwcm92aWRlIG1vcmUgaW4t ZGVwdGggZnVuY3Rpb25hbGl0eQotK2Fsb25nIHRoZXNlIGxpbmVzLgotKwotKz1jdXQKLSsKLStv dXIoIEBEYXRhX1N0YWNrLCAlUmVmc19TZWVuICk7Ci0rbXkgJERORSA9IGJsZXNzIFtdLCAnRG9l czo6Tm90OjpFeGlzdCc7Ci0rCi0rc3ViIF9kbmUgewotKyAgICByZXR1cm4gcmVmICRfWzBdIGVx IHJlZiAkRE5FOwotK30KLSsKLSsjIyBubyBjcml0aWMgKFN1YnJvdXRpbmVzOjpSZXF1aXJlQXJn VW5wYWNraW5nKQotK3N1YiBpc19kZWVwbHkgewotKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5i dWlsZGVyOwotKwotKyAgICB1bmxlc3MoIEBfID09IDIgb3IgQF8gPT0gMyApIHsKLSsgICAgICAg IG15ICRtc2cgPSA8PCdXQVJOSU5HJzsKLStpc19kZWVwbHkoKSB0YWtlcyB0d28gb3IgdGhyZWUg YXJncywgeW91IGdhdmUgJWQuCi0rVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBwYXNzZWQgYW4gYXJy YXkgb3IgaGFzaCBpbnN0ZWFkIAotK29mIGEgcmVmZXJlbmNlIHRvIGl0Ci0rV0FSTklORwotKyAg ICAgICAgY2hvcCAkbXNnOyAgICAjIGNsaXAgb2ZmIG5ld2xpbmUgc28gY2FycCgpIHdpbGwgcHV0 IGluIGxpbmUvZmlsZQotKwotKyAgICAgICAgX2NhcnAgc3ByaW50ZiAkbXNnLCBzY2FsYXIgQF87 Ci0rCi0rICAgICAgICByZXR1cm4gJHRiLT5vaygwKTsKLSsgICAgfQotKwotKyAgICBteSggJGdv dCwgJGV4cGVjdGVkLCAkbmFtZSApID0gQF87Ci0rCi0rICAgICR0Yi0+X3Vub3ZlcmxvYWRfc3Ry KCBcJGV4cGVjdGVkLCBcJGdvdCApOwotKwotKyAgICBteSAkb2s7Ci0rICAgIGlmKCAhcmVmICRn b3QgYW5kICFyZWYgJGV4cGVjdGVkICkgeyAgICAjIG5laXRoZXIgaXMgYSByZWZlcmVuY2UKLSsg ICAgICAgICRvayA9ICR0Yi0+aXNfZXEoICRnb3QsICRleHBlY3RlZCwgJG5hbWUgKTsKLSsgICAg fQotKyAgICBlbHNpZiggIXJlZiAkZ290IHhvciAhcmVmICRleHBlY3RlZCApIHsgICAgIyBvbmUn cyBhIHJlZmVyZW5jZSwgb25lIGlzbid0Ci0rICAgICAgICAkb2sgPSAkdGItPm9rKCAwLCAkbmFt ZSApOwotKyAgICAgICAgJHRiLT5kaWFnKCBfZm9ybWF0X3N0YWNrKHsgdmFscyA9PiBbICRnb3Qs ICRleHBlY3RlZCBdIH0pICk7Ci0rICAgIH0KLSsgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgYm90aCByZWZlcmVuY2VzCi0rICAgICAgICBsb2NhbCBARGF0 YV9TdGFjayA9ICgpOwotKyAgICAgICAgaWYoIF9kZWVwX2NoZWNrKCAkZ290LCAkZXhwZWN0ZWQg KSApIHsKLSsgICAgICAgICAgICAkb2sgPSAkdGItPm9rKCAxLCAkbmFtZSApOwotKyAgICAgICAg fQotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgJG9rID0gJHRiLT5vayggMCwgJG5hbWUg KTsKLSsgICAgICAgICAgICAkdGItPmRpYWcoIF9mb3JtYXRfc3RhY2soQERhdGFfU3RhY2spICk7 Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuICRvazsKLSt9Ci0rCi0rc3ViIF9m b3JtYXRfc3RhY2sgewotKyAgICBteShAU3RhY2spID0gQF87Ci0rCi0rICAgIG15ICR2YXIgICAg ICAgPSAnJEZPTyc7Ci0rICAgIG15ICRkaWRfYXJyb3cgPSAwOwotKyAgICBmb3JlYWNoIG15ICRl bnRyeSAoQFN0YWNrKSB7Ci0rICAgICAgICBteSAkdHlwZSA9ICRlbnRyeS0+e3R5cGV9IHx8ICcn OwotKyAgICAgICAgbXkgJGlkeCA9ICRlbnRyeS0+eydpZHgnfTsKLSsgICAgICAgIGlmKCAkdHlw ZSBlcSAnSEFTSCcgKSB7Ci0rICAgICAgICAgICAgJHZhciAuPSAiLT4iIHVubGVzcyAkZGlkX2Fy cm93Kys7Ci0rICAgICAgICAgICAgJHZhciAuPSAieyRpZHh9IjsKLSsgICAgICAgIH0KLSsgICAg ICAgIGVsc2lmKCAkdHlwZSBlcSAnQVJSQVknICkgewotKyAgICAgICAgICAgICR2YXIgLj0gIi0+ IiB1bmxlc3MgJGRpZF9hcnJvdysrOwotKyAgICAgICAgICAgICR2YXIgLj0gIlskaWR4XSI7Ci0r ICAgICAgICB9Ci0rICAgICAgICBlbHNpZiggJHR5cGUgZXEgJ1JFRicgKSB7Ci0rICAgICAgICAg ICAgJHZhciA9ICJcJHskdmFyfSI7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgbXkgQHZh bHMgPSBAeyAkU3RhY2tbLTFde3ZhbHN9IH1bIDAsIDEgXTsKLSsgICAgbXkgQHZhcnMgPSAoKTsK LSsgICAgKCAkdmFyc1swXSA9ICR2YXIgKSA9fiBzL1wkRk9PLyAgICAgXCRnb3QvOwotKyAgICAo ICR2YXJzWzFdID0gJHZhciApID1+IHMvXCRGT08vXCRleHBlY3RlZC87Ci0rCi0rICAgIG15ICRv dXQgPSAiU3RydWN0dXJlcyBiZWdpbiBkaWZmZXJpbmcgYXQ6XG4iOwotKyAgICBmb3JlYWNoIG15 ICRpZHggKCAwIC4uICQjdmFscyApIHsKLSsgICAgICAgIG15ICR2YWwgPSAkdmFsc1skaWR4XTsK LSsgICAgICAgICR2YWxzWyRpZHhdCi0rICAgICAgICAgID0gIWRlZmluZWQgJHZhbCA/ICd1bmRl ZicKLSsgICAgICAgICAgOiBfZG5lKCR2YWwpICAgID8gIkRvZXMgbm90IGV4aXN0IgotKyAgICAg ICAgICA6IHJlZiAkdmFsICAgICAgPyAiJHZhbCIKLSsgICAgICAgICAgOiAgICAgICAgICAgICAg ICAgIickdmFsJyI7Ci0rICAgIH0KLSsKLSsgICAgJG91dCAuPSAiJHZhcnNbMF0gPSAkdmFsc1sw XVxuIjsKLSsgICAgJG91dCAuPSAiJHZhcnNbMV0gPSAkdmFsc1sxXVxuIjsKLSsKLSsgICAgJG91 dCA9fiBzL14vICAgIC9tc2c7Ci0rICAgIHJldHVybiAkb3V0OwotK30KLSsKLStzdWIgX3R5cGUg ewotKyAgICBteSAkdGhpbmcgPSBzaGlmdDsKLSsKLSsgICAgcmV0dXJuICcnIGlmICFyZWYgJHRo aW5nOwotKwotKyAgICBmb3IgbXkgJHR5cGUgKHF3KFJlZ2V4cCBBUlJBWSBIQVNIIFJFRiBTQ0FM QVIgR0xPQiBDT0RFKSkgewotKyAgICAgICAgcmV0dXJuICR0eXBlIGlmIFVOSVZFUlNBTDo6aXNh KCAkdGhpbmcsICR0eXBlICk7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuICcnOwotK30KLSsKLSs9 YmFjawotKwotKwotKz1oZWFkMiBEaWFnbm9zdGljcwotKwotK0lmIHlvdSBwaWNrIHRoZSByaWdo dCB0ZXN0IGZ1bmN0aW9uLCB5b3UnbGwgdXN1YWxseSBnZXQgYSBnb29kIGlkZWEgb2YKLSt3aGF0 IHdlbnQgd3Jvbmcgd2hlbiBpdCBmYWlsZWQuICBCdXQgc29tZXRpbWVzIGl0IGRvZXNuJ3Qgd29y ayBvdXQKLSt0aGF0IHdheS4gIFNvIGhlcmUgd2UgaGF2ZSB3YXlzIGZvciB5b3UgdG8gd3JpdGUg eW91ciBvd24gZGlhZ25vc3RpYwotK21lc3NhZ2VzIHdoaWNoIGFyZSBzYWZlciB0aGFuIGp1c3Qg QzxwcmludCBTVERFUlI+LgotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBCPGRpYWc+Ci0rCi0rICBk aWFnKEBkaWFnbm9zdGljX21lc3NhZ2UpOwotKwotK1ByaW50cyBhIGRpYWdub3N0aWMgbWVzc2Fn ZSB3aGljaCBpcyBndWFyYW50ZWVkIG5vdCB0byBpbnRlcmZlcmUgd2l0aAotK3Rlc3Qgb3V0cHV0 LiAgTGlrZSBDPHByaW50PiBAZGlhZ25vc3RpY19tZXNzYWdlIGlzIHNpbXBseSBjb25jYXRlbmF0 ZWQKLSt0b2dldGhlci4KLSsKLStSZXR1cm5zIGZhbHNlLCBzbyBhcyB0byBwcmVzZXJ2ZSBmYWls dXJlLgotKwotK0hhbmR5IGZvciB0aGlzIHNvcnQgb2YgdGhpbmc6Ci0rCi0rICAgIG9rKCBncmVw KC9mb28vLCBAdXNlcnMpLCAiVGhlcmUncyBhIGZvbyB1c2VyIiApIG9yCi0rICAgICAgICBkaWFn KCJTaW5jZSB0aGVyZSdzIG5vIGZvbywgY2hlY2sgdGhhdCAvZXRjL2JhciBpcyBzZXQgdXAgcmln aHQiKTsKLSsKLSt3aGljaCB3b3VsZCBwcm9kdWNlOgotKwotKyAgICBub3Qgb2sgNDIgLSBUaGVy ZSdzIGEgZm9vIHVzZXIKLSsgICAgIyAgIEZhaWxlZCB0ZXN0ICdUaGVyZSdzIGEgZm9vIHVzZXIn Ci0rICAgICMgICBpbiBmb28udCBhdCBsaW5lIDUyLgotKyAgICAjIFNpbmNlIHRoZXJlJ3Mgbm8g Zm9vLCBjaGVjayB0aGF0IC9ldGMvYmFyIGlzIHNldCB1cCByaWdodC4KLSsKLStZb3UgbWlnaHQg cmVtZW1iZXIgQzxvaygpIG9yIGRpYWcoKT4gd2l0aCB0aGUgbW5lbW9uaWMgQzxvcGVuKCkgb3IK LStkaWUoKT4uCi0rCi0rQjxOT1RFPiBUaGUgZXhhY3QgZm9ybWF0dGluZyBvZiB0aGUgZGlhZ25v c3RpYyBvdXRwdXQgaXMgc3RpbGwKLStjaGFuZ2luZywgYnV0IGl0IGlzIGd1YXJhbnRlZWQgdGhh dCB3aGF0ZXZlciB5b3UgdGhyb3cgYXQgaXQgd29uJ3QKLStpbnRlcmZlcmUgd2l0aCB0aGUgdGVz dC4KLSsKLSs9aXRlbSBCPG5vdGU+Ci0rCi0rICBub3RlKEBkaWFnbm9zdGljX21lc3NhZ2UpOwot KwotK0xpa2UgZGlhZygpLCBleGNlcHQgdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgc2VlbiB3aGVu IHRoZSB0ZXN0IGlzIHJ1bgotK2luIGEgaGFybmVzcy4gIEl0IHdpbGwgb25seSBiZSB2aXNpYmxl IGluIHRoZSB2ZXJib3NlIFRBUCBzdHJlYW0uCi0rCi0rSGFuZHkgZm9yIHB1dHRpbmcgaW4gbm90 ZXMgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIGJ1dAotK2Rvbid0IGluZGlj YXRlIGEgcHJvYmxlbS4KLSsKLSsgICAgbm90ZSgiVGVtcGZpbGUgaXMgJHRlbXBmaWxlIik7Ci0r Ci0rPWN1dAotKwotK3N1YiBkaWFnIHsKLSsgICAgcmV0dXJuIFRlc3Q6Ok1vcmUtPmJ1aWxkZXIt PmRpYWcoQF8pOwotK30KLSsKLStzdWIgbm90ZSB7Ci0rICAgIHJldHVybiBUZXN0OjpNb3JlLT5i dWlsZGVyLT5ub3RlKEBfKTsKLSt9Ci0rCi0rPWl0ZW0gQjxleHBsYWluPgotKwotKyAgbXkgQGR1 bXAgPSBleHBsYWluIEBkaWFnbm9zdGljX21lc3NhZ2U7Ci0rCi0rV2lsbCBkdW1wIHRoZSBjb250 ZW50cyBvZiBhbnkgcmVmZXJlbmNlcyBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4KLStVc3Vh bGx5IHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbnRvIEM8bm90ZT4gb3IgQzxkaWFnPi4KLSsKLStI YW5keSBmb3IgdGhpbmdzIGxpa2UuLi4KLSsKLSsgICAgaXNfZGVlcGx5KCRoYXZlLCAkd2FudCkg fHwgZGlhZyBleHBsYWluICRoYXZlOwotKwotK29yCi0rCi0rICAgIG5vdGUgZXhwbGFpbiBcJWFy Z3M7Ci0rICAgIFNvbWU6OkNsYXNzLT5tZXRob2QoJWFyZ3MpOwotKwotKz1jdXQKLSsKLStzdWIg ZXhwbGFpbiB7Ci0rICAgIHJldHVybiBUZXN0OjpNb3JlLT5idWlsZGVyLT5leHBsYWluKEBfKTsK LSt9Ci0rCi0rPWJhY2sKLSsKLSsKLSs9aGVhZDIgQ29uZGl0aW9uYWwgdGVzdHMKLSsKLStTb21l dGltZXMgcnVubmluZyBhIHRlc3QgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHdpbGwgY2F1c2Ug dGhlCi0rdGVzdCBzY3JpcHQgdG8gZGllLiAgQSBjZXJ0YWluIGZ1bmN0aW9uIG9yIG1ldGhvZCBp c24ndCBpbXBsZW1lbnRlZAotKyhzdWNoIGFzIGZvcmsoKSBvbiBNYWNPUyksIHNvbWUgcmVzb3Vy Y2UgaXNuJ3QgYXZhaWxhYmxlIChsaWtlIGEgCi0rbmV0IGNvbm5lY3Rpb24pIG9yIGEgbW9kdWxl IGlzbid0IGF2YWlsYWJsZS4gIEluIHRoZXNlIGNhc2VzIGl0J3MKLStuZWNlc3NhcnkgdG8gc2tp cCB0ZXN0cywgb3IgZGVjbGFyZSB0aGF0IHRoZXkgYXJlIHN1cHBvc2VkIHRvIGZhaWwKLStidXQg d2lsbCB3b3JrIGluIHRoZSBmdXR1cmUgKGEgdG9kbyB0ZXN0KS4KLSsKLStGb3IgbW9yZSBkZXRh aWxzIG9uIHRoZSBtZWNoYW5pY3Mgb2Ygc2tpcCBhbmQgdG9kbyB0ZXN0cyBzZWUKLStMPFRlc3Q6 Okhhcm5lc3M+LgotKwotK1RoZSB3YXkgVGVzdDo6TW9yZSBoYW5kbGVzIHRoaXMgaXMgd2l0aCBh IG5hbWVkIGJsb2NrLiAgQmFzaWNhbGx5LCBhCi0rYmxvY2sgb2YgdGVzdHMgd2hpY2ggY2FuIGJl IHNraXBwZWQgb3ZlciBvciBtYWRlIHRvZG8uICBJdCdzIGJlc3QgaWYgSQotK2p1c3Qgc2hvdyB5 b3UuLi4KLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gQjxTS0lQOiBCTE9DSz4KLSsKLSsgIFNLSVA6 IHsKLSsgICAgICBza2lwICR3aHksICRob3dfbWFueSBpZiAkY29uZGl0aW9uOwotKwotKyAgICAg IC4uLm5vcm1hbCB0ZXN0aW5nIGNvZGUgZ29lcyBoZXJlLi4uCi0rICB9Ci0rCi0rVGhpcyBkZWNs YXJlcyBhIGJsb2NrIG9mIHRlc3RzIHRoYXQgbWlnaHQgYmUgc2tpcHBlZCwgJGhvd19tYW55IHRl c3RzCi0rdGhlcmUgYXJlLCAkd2h5IGFuZCB1bmRlciB3aGF0ICRjb25kaXRpb24gdG8gc2tpcCB0 aGVtLiAgQW4gZXhhbXBsZSBpcwotK3RoZSBlYXNpZXN0IHdheSB0byBpbGx1c3RyYXRlOgotKwot KyAgICBTS0lQOiB7Ci0rICAgICAgICBldmFsIHsgcmVxdWlyZSBIVE1MOjpMaW50IH07Ci0rCi0r ICAgICAgICBza2lwICJIVE1MOjpMaW50IG5vdCBpbnN0YWxsZWQiLCAyIGlmICRAOwotKwotKyAg ICAgICAgbXkgJGxpbnQgPSBuZXcgSFRNTDo6TGludDsKLSsgICAgICAgIGlzYV9vayggJGxpbnQs ICJIVE1MOjpMaW50IiApOwotKwotKyAgICAgICAgJGxpbnQtPnBhcnNlKCAkaHRtbCApOwotKyAg ICAgICAgaXMoICRsaW50LT5lcnJvcnMsIDAsICJObyBlcnJvcnMgZm91bmQgaW4gSFRNTCIgKTsK LSsgICAgfQotKwotK0lmIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgSFRNTDo6TGludCBpbnN0YWxs ZWQsIHRoZSB3aG9sZSBibG9jayBvZgotK2NvZGUgSTx3b24ndCBiZSBydW4gYXQgYWxsPi4gIFRl c3Q6Ok1vcmUgd2lsbCBvdXRwdXQgc3BlY2lhbCBvaydzCi0rd2hpY2ggVGVzdDo6SGFybmVzcyBp bnRlcnByZXRzIGFzIHNraXBwZWQsIGJ1dCBwYXNzaW5nLCB0ZXN0cy4KLSsKLStJdCdzIGltcG9y dGFudCB0aGF0ICRob3dfbWFueSBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgdGVz dHMKLStpbiB0aGUgU0tJUCBibG9jayBzbyB0aGUgIyBvZiB0ZXN0cyBydW4gd2lsbCBtYXRjaCB1 cCB3aXRoIHlvdXIgcGxhbi4KLStJZiB5b3VyIHBsYW4gaXMgQzxub19wbGFuPiAkaG93X21hbnkg aXMgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byAxLgotKwotK0l0J3MgcGVyZmVjdGx5IHNh ZmUgdG8gbmVzdCBTS0lQIGJsb2Nrcy4gIEVhY2ggU0tJUCBibG9jayBtdXN0IGhhdmUKLSt0aGUg bGFiZWwgQzxTS0lQPiwgb3IgVGVzdDo6TW9yZSBjYW4ndCB3b3JrIGl0cyBtYWdpYy4KLSsKLStZ b3UgZG9uJ3Qgc2tpcCB0ZXN0cyB3aGljaCBhcmUgZmFpbGluZyBiZWNhdXNlIHRoZXJlJ3MgYSBi dWcgaW4geW91cgotK3Byb2dyYW0sIG9yIGZvciB3aGljaCB5b3UgZG9uJ3QgeWV0IGhhdmUgY29k ZSB3cml0dGVuLiAgRm9yIHRoYXQgeW91Ci0rdXNlIFRPRE8uICBSZWFkIG9uLgotKwotKz1jdXQK LSsKLSsjIyBubyBjcml0aWMgKFN1YnJvdXRpbmVzOjpSZXF1aXJlRmluYWxSZXR1cm4pCi0rc3Vi IHNraXAgewotKyAgICBteSggJHdoeSwgJGhvd19tYW55ICkgPSBAXzsKLSsgICAgbXkgJHRiID0g VGVzdDo6TW9yZS0+YnVpbGRlcjsKLSsKLSsgICAgdW5sZXNzKCBkZWZpbmVkICRob3dfbWFueSAp IHsKLSsgICAgICAgICMgJGhvd19tYW55IGNhbiBvbmx5IGJlIGF2b2lkZWQgd2hlbiBub19wbGFu IGlzIGluIHVzZS4KLSsgICAgICAgIF9jYXJwICJza2lwKCkgbmVlZHMgdG8ga25vdyBcJGhvd19t YW55IHRlc3RzIGFyZSBpbiB0aGUgYmxvY2siCi0rICAgICAgICAgIHVubGVzcyAkdGItPmhhc19w bGFuIGVxICdub19wbGFuJzsKLSsgICAgICAgICRob3dfbWFueSA9IDE7Ci0rICAgIH0KLSsKLSsg ICAgaWYoIGRlZmluZWQgJGhvd19tYW55IGFuZCAkaG93X21hbnkgPX4gL1xELyApIHsKLSsgICAg ICAgIF9jYXJwCi0rICAgICAgICAgICJza2lwKCkgd2FzIHBhc3NlZCBhIG5vbi1udW1lcmljIG51 bWJlciBvZiB0ZXN0cy4gIERpZCB5b3UgZ2V0IHRoZSBhcmd1bWVudHMgYmFja3dhcmRzPyI7Ci0r ICAgICAgICAkaG93X21hbnkgPSAxOwotKyAgICB9Ci0rCi0rICAgIGZvciggMSAuLiAkaG93X21h bnkgKSB7Ci0rICAgICAgICAkdGItPnNraXAoJHdoeSk7Ci0rICAgIH0KLSsKLSsgICAgbm8gd2Fy bmluZ3MgJ2V4aXRpbmcnOwotKyAgICBsYXN0IFNLSVA7Ci0rfQotKwotKz1pdGVtIEI8VE9ETzog QkxPQ0s+Ci0rCi0rICAgIFRPRE86IHsKLSsgICAgICAgIGxvY2FsICRUT0RPID0gJHdoeSBpZiAk Y29uZGl0aW9uOwotKwotKyAgICAgICAgLi4ubm9ybWFsIHRlc3RpbmcgY29kZSBnb2VzIGhlcmUu Li4KLSsgICAgfQotKwotK0RlY2xhcmVzIGEgYmxvY2sgb2YgdGVzdHMgeW91IGV4cGVjdCB0byBm YWlsIGFuZCAkd2h5LiAgUGVyaGFwcyBpdCdzCi0rYmVjYXVzZSB5b3UgaGF2ZW4ndCBmaXhlZCBh IGJ1ZyBvciBoYXZlbid0IGZpbmlzaGVkIGEgbmV3IGZlYXR1cmU6Ci0rCi0rICAgIFRPRE86IHsK LSsgICAgICAgIGxvY2FsICRUT0RPID0gIlVSSTo6R2VsbGVyIG5vdCBmaW5pc2hlZCI7Ci0rCi0r ICAgICAgICBteSAkY2FyZCA9ICJFaWdodCBvZiBjbHVicyI7Ci0rICAgICAgICBpcyggVVJJOjpH ZWxsZXItPnlvdXJfY2FyZCwgJGNhcmQsICdJcyBUSElTIHlvdXIgY2FyZD8nICk7Ci0rCi0rICAg ICAgICBteSAkc3Bvb247Ci0rICAgICAgICBVUkk6OkdlbGxlci0+YmVuZF9zcG9vbjsKLSsgICAg ICAgIGlzKCAkc3Bvb24sICdiZW50JywgICAgIlNwb29uIGJlbmRpbmcsIHRoYXQncyBvcmlnaW5h bCIgKTsKLSsgICAgfQotKwotK1dpdGggYSB0b2RvIGJsb2NrLCB0aGUgdGVzdHMgaW5zaWRlIGFy ZSBleHBlY3RlZCB0byBmYWlsLiAgVGVzdDo6TW9yZQotK3dpbGwgcnVuIHRoZSB0ZXN0cyBub3Jt YWxseSwgYnV0IHByaW50IG91dCBzcGVjaWFsIGZsYWdzIGluZGljYXRpbmcKLSt0aGV5IGFyZSAi dG9kbyIuICBUZXN0OjpIYXJuZXNzIHdpbGwgaW50ZXJwcmV0IGZhaWx1cmVzIGFzIGJlaW5nIG9r LgotK1Nob3VsZCBhbnl0aGluZyBzdWNjZWVkLCBpdCB3aWxsIHJlcG9ydCBpdCBhcyBhbiB1bmV4 cGVjdGVkIHN1Y2Nlc3MuCi0rWW91IHRoZW4ga25vdyB0aGUgdGhpbmcgeW91IGhhZCB0b2RvIGlz IGRvbmUgYW5kIGNhbiByZW1vdmUgdGhlCi0rVE9ETyBmbGFnLgotKwotK1RoZSBuaWNlIHBhcnQg YWJvdXQgdG9kbyB0ZXN0cywgYXMgb3Bwb3NlZCB0byBzaW1wbHkgY29tbWVudGluZyBvdXQgYQot K2Jsb2NrIG9mIHRlc3RzLCBpcyBpdCdzIGxpa2UgaGF2aW5nIGEgcHJvZ3JhbW1hdGljIHRvZG8g bGlzdC4gIFlvdSBrbm93Ci0raG93IG11Y2ggd29yayBpcyBsZWZ0IHRvIGJlIGRvbmUsIHlvdSdy ZSBhd2FyZSBvZiB3aGF0IGJ1Z3MgdGhlcmUgYXJlLAotK2FuZCB5b3UnbGwga25vdyBpbW1lZGlh dGVseSB3aGVuIHRoZXkncmUgZml4ZWQuCi0rCi0rT25jZSBhIHRvZG8gdGVzdCBzdGFydHMgc3Vj Y2VlZGluZywgc2ltcGx5IG1vdmUgaXQgb3V0c2lkZSB0aGUgYmxvY2suCi0rV2hlbiB0aGUgYmxv Y2sgaXMgZW1wdHksIGRlbGV0ZSBpdC4KLSsKLSsKLSs9aXRlbSBCPHRvZG9fc2tpcD4KLSsKLSsg ICAgVE9ETzogewotKyAgICAgICAgdG9kb19za2lwICR3aHksICRob3dfbWFueSBpZiAkY29uZGl0 aW9uOwotKwotKyAgICAgICAgLi4ubm9ybWFsIHRlc3RpbmcgY29kZS4uLgotKyAgICB9Ci0rCi0r V2l0aCB0b2RvIHRlc3RzLCBpdCdzIGJlc3QgdG8gaGF2ZSB0aGUgdGVzdHMgYWN0dWFsbHkgcnVu LiAgVGhhdCB3YXkKLSt5b3UnbGwga25vdyB3aGVuIHRoZXkgc3RhcnQgcGFzc2luZy4gIFNvbWV0 aW1lcyB0aGlzIGlzbid0IHBvc3NpYmxlLgotK09mdGVuIGEgZmFpbGluZyB0ZXN0IHdpbGwgY2F1 c2UgdGhlIHdob2xlIHByb2dyYW0gdG8gZGllIG9yIGhhbmcsIGV2ZW4KLStpbnNpZGUgYW4gQzxl dmFsIEJMT0NLPiB3aXRoIGFuZCB1c2luZyBDPGFsYXJtPi4gIEluIHRoZXNlIGV4dHJlbWUKLStj YXNlcyB5b3UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIHNraXAgb3ZlciB0aGUgYnJva2VuIHRlc3Rz IGVudGlyZWx5LgotKwotK1RoZSBzeW50YXggYW5kIGJlaGF2aW9yIGlzIHNpbWlsYXIgdG8gYSBD PFNLSVA6IEJMT0NLPiBleGNlcHQgdGhlCi0rdGVzdHMgd2lsbCBiZSBtYXJrZWQgYXMgZmFpbGlu ZyBidXQgdG9kby4gIFRlc3Q6Okhhcm5lc3Mgd2lsbAotK2ludGVycHJldCB0aGVtIGFzIHBhc3Np bmcuCi0rCi0rPWN1dAotKwotK3N1YiB0b2RvX3NraXAgewotKyAgICBteSggJHdoeSwgJGhvd19t YW55ICkgPSBAXzsKLSsgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsKLSsKLSsgICAg dW5sZXNzKCBkZWZpbmVkICRob3dfbWFueSApIHsKLSsgICAgICAgICMgJGhvd19tYW55IGNhbiBv bmx5IGJlIGF2b2lkZWQgd2hlbiBub19wbGFuIGlzIGluIHVzZS4KLSsgICAgICAgIF9jYXJwICJ0 b2RvX3NraXAoKSBuZWVkcyB0byBrbm93IFwkaG93X21hbnkgdGVzdHMgYXJlIGluIHRoZSBibG9j ayIKLSsgICAgICAgICAgdW5sZXNzICR0Yi0+aGFzX3BsYW4gZXEgJ25vX3BsYW4nOwotKyAgICAg ICAgJGhvd19tYW55ID0gMTsKLSsgICAgfQotKwotKyAgICBmb3IoIDEgLi4gJGhvd19tYW55ICkg ewotKyAgICAgICAgJHRiLT50b2RvX3NraXAoJHdoeSk7Ci0rICAgIH0KLSsKLSsgICAgbm8gd2Fy bmluZ3MgJ2V4aXRpbmcnOwotKyAgICBsYXN0IFRPRE87Ci0rfQotKwotKz1pdGVtIFdoZW4gZG8g SSB1c2UgU0tJUCB2cy4gVE9ETz8KLSsKLStCPElmIGl0J3Mgc29tZXRoaW5nIHRoZSB1c2VyIG1p Z2h0IG5vdCBiZSBhYmxlIHRvIGRvPiwgdXNlIFNLSVAuCi0rVGhpcyBpbmNsdWRlcyBvcHRpb25h bCBtb2R1bGVzIHRoYXQgYXJlbid0IGluc3RhbGxlZCwgcnVubmluZyB1bmRlcgotK2FuIE9TIHRo YXQgZG9lc24ndCBoYXZlIHNvbWUgZmVhdHVyZSAobGlrZSBmb3JrKCkgb3Igc3ltbGlua3MpLCBv ciBtYXliZQotK3lvdSBuZWVkIGFuIEludGVybmV0IGNvbm5lY3Rpb24gYW5kIG9uZSBpc24ndCBh dmFpbGFibGUuCi0rCi0rQjxJZiBpdCdzIHNvbWV0aGluZyB0aGUgcHJvZ3JhbW1lciBoYXNuJ3Qg ZG9uZSB5ZXQ+LCB1c2UgVE9ETy4gIFRoaXMKLStpcyBmb3IgYW55IGNvZGUgeW91IGhhdmVuJ3Qg d3JpdHRlbiB5ZXQsIG9yIGJ1Z3MgeW91IGhhdmUgeWV0IHRvIGZpeCwKLStidXQgd2FudCB0byBw dXQgdGVzdHMgaW4geW91ciB0ZXN0aW5nIHNjcmlwdCAoYWx3YXlzIGEgZ29vZCBpZGVhKS4KLSsK LSsKLSs9YmFjawotKwotKwotKz1oZWFkMiBUZXN0IGNvbnRyb2wKLSsKLSs9b3ZlciA0Ci0rCi0r PWl0ZW0gQjxCQUlMX09VVD4KLSsKLSsgICAgQkFJTF9PVVQoJHJlYXNvbik7Ci0rCi0rSW5kaWNh dGVzIHRvIHRoZSBoYXJuZXNzIHRoYXQgdGhpbmdzIGFyZSBnb2luZyBzbyBiYWRseSBhbGwgdGVz dGluZwotK3Nob3VsZCB0ZXJtaW5hdGUuICBUaGlzIGluY2x1ZGVzIHRoZSBydW5uaW5nIG9mIGFu eSBhZGRpdGlvbmFsIHRlc3Qgc2NyaXB0cy4KLSsKLStUaGlzIGlzIHR5cGljYWxseSB1c2VkIHdo ZW4gdGVzdGluZyBjYW5ub3QgY29udGludWUgc3VjaCBhcyBhIGNyaXRpY2FsCi0rbW9kdWxlIGZh aWxpbmcgdG8gY29tcGlsZSBvciBhIG5lY2Vzc2FyeSBleHRlcm5hbCB1dGlsaXR5IG5vdCBiZWlu ZwotK2F2YWlsYWJsZSBzdWNoIGFzIGEgZGF0YWJhc2UgY29ubmVjdGlvbiBmYWlsaW5nLgotKwot K1RoZSB0ZXN0IHdpbGwgZXhpdCB3aXRoIDI1NS4KLSsKLStGb3IgZXZlbiBiZXR0ZXIgY29udHJv bCBsb29rIGF0IEw8VGVzdDo6TW9zdD4uCi0rCi0rPWN1dAotKwotK3N1YiBCQUlMX09VVCB7Ci0r ICAgIG15ICRyZWFzb24gPSBzaGlmdDsKLSsgICAgbXkgJHRiICAgICA9IFRlc3Q6Ok1vcmUtPmJ1 aWxkZXI7Ci0rCi0rICAgICR0Yi0+QkFJTF9PVVQoJHJlYXNvbik7Ci0rfQotKwotKz1iYWNrCi0r Ci0rCi0rPWhlYWQyIERpc2NvdXJhZ2VkIGNvbXBhcmlzb24gZnVuY3Rpb25zCi0rCi0rVGhlIHVz ZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyBkaXNjb3VyYWdlZCBhcyB0aGV5IGFyZSBu b3QKLSthY3R1YWxseSB0ZXN0aW5nIGZ1bmN0aW9ucyBhbmQgcHJvZHVjZSBubyBkaWFnbm9zdGlj cyB0byBoZWxwIGZpZ3VyZQotK291dCB3aGF0IHdlbnQgd3JvbmcuICBUaGV5IHdlcmUgd3JpdHRl biBiZWZvcmUgaXNfZGVlcGx5KCkgZXhpc3RlZAotK2JlY2F1c2UgSSBjb3VsZG4ndCBmaWd1cmUg b3V0IGhvdyB0byBkaXNwbGF5IGEgdXNlZnVsIGRpZmYgb2YgdHdvCi0rYXJiaXRyYXJ5IGRhdGEg c3RydWN0dXJlcy4KLSsKLStUaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCBpbnNpZGUg YW4gb2soKS4KLSsKLSsgICAgb2soIGVxX2FycmF5KFxAZ290LCBcQGV4cGVjdGVkKSApOwotKwot K0M8aXNfZGVlcGx5KCk+IGNhbiBkbyB0aGF0IGJldHRlciBhbmQgd2l0aCBkaWFnbm9zdGljcy4g IAotKwotKyAgICBpc19kZWVwbHkoIFxAZ290LCBcQGV4cGVjdGVkICk7Ci0rCi0rVGhleSBtYXkg YmUgZGVwcmVjYXRlZCBpbiBmdXR1cmUgdmVyc2lvbnMuCi0rCi0rPW92ZXIgNAotKwotKz1pdGVt IEI8ZXFfYXJyYXk+Ci0rCi0rICBteSAkaXNfZXEgPSBlcV9hcnJheShcQGdvdCwgXEBleHBlY3Rl ZCk7Ci0rCi0rQ2hlY2tzIGlmIHR3byBhcnJheXMgYXJlIGVxdWl2YWxlbnQuICBUaGlzIGlzIGEg ZGVlcCBjaGVjaywgc28KLSttdWx0aS1sZXZlbCBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkIGNvcnJl Y3RseS4KLSsKLSs9Y3V0Ci0rCi0rIycjCi0rc3ViIGVxX2FycmF5IHsKLSsgICAgbG9jYWwgQERh dGFfU3RhY2sgPSAoKTsKLSsgICAgX2RlZXBfY2hlY2soQF8pOwotK30KLSsKLStzdWIgX2VxX2Fy cmF5IHsKLSsgICAgbXkoICRhMSwgJGEyICkgPSBAXzsKLSsKLSsgICAgaWYoIGdyZXAgX3R5cGUo JF8pIG5lICdBUlJBWScsICRhMSwgJGEyICkgewotKyAgICAgICAgd2FybiAiZXFfYXJyYXkgcGFz c2VkIGEgbm9uLWFycmF5IHJlZiI7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAg ICByZXR1cm4gMSBpZiAkYTEgZXEgJGEyOwotKwotKyAgICBteSAkb2sgPSAxOwotKyAgICBteSAk bWF4ID0gJCMkYTEgPiAkIyRhMiA/ICQjJGExIDogJCMkYTI7Ci0rICAgIGZvciggMCAuLiAkbWF4 ICkgewotKyAgICAgICAgbXkgJGUxID0gJF8gPiAkIyRhMSA/ICRETkUgOiAkYTEtPlskX107Ci0r ICAgICAgICBteSAkZTIgPSAkXyA+ICQjJGEyID8gJERORSA6ICRhMi0+WyRfXTsKLSsKLSsgICAg ICAgIG5leHQgaWYgX2VxdWFsX25vbnJlZnMoJGUxLCAkZTIpOwotKwotKyAgICAgICAgcHVzaCBA RGF0YV9TdGFjaywgeyB0eXBlID0+ICdBUlJBWScsIGlkeCA9PiAkXywgdmFscyA9PiBbICRlMSwg JGUyIF0gfTsKLSsgICAgICAgICRvayA9IF9kZWVwX2NoZWNrKCAkZTEsICRlMiApOwotKyAgICAg ICAgcG9wIEBEYXRhX1N0YWNrIGlmICRvazsKLSsKLSsgICAgICAgIGxhc3QgdW5sZXNzICRvazsK LSsgICAgfQotKwotKyAgICByZXR1cm4gJG9rOwotK30KLSsKLStzdWIgX2VxdWFsX25vbnJlZnMg ewotKyAgICBteSggJGUxLCAkZTIgKSA9IEBfOwotKwotKyAgICByZXR1cm4gaWYgcmVmICRlMSBv ciByZWYgJGUyOwotKwotKyAgICBpZiAoIGRlZmluZWQgJGUxICkgewotKyAgICAgICAgcmV0dXJu IDEgaWYgZGVmaW5lZCAkZTIgYW5kICRlMSBlcSAkZTI7Ci0rICAgIH0KLSsgICAgZWxzZSB7Ci0r ICAgICAgICByZXR1cm4gMSBpZiAhZGVmaW5lZCAkZTI7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJu OwotK30KLSsKLStzdWIgX2RlZXBfY2hlY2sgewotKyAgICBteSggJGUxLCAkZTIgKSA9IEBfOwot KyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOwotKwotKyAgICBteSAkb2sgPSAwOwot KwotKyAgICAjIEVmZmVjdGl2ZWx5IHR1cm4gJVJlZnNfU2VlbiBpbnRvIGEgc3RhY2suICBUaGlz IGF2b2lkcyBwaWNraW5nIHVwCi0rICAgICMgdGhlIHNhbWUgcmVmZXJlbmNlZCB1c2VkIHR3aWNl IChzdWNoIGFzIFtcJGEsIFwkYV0pIHRvIGJlIGNvbnNpZGVyZWQKLSsgICAgIyBjaXJjdWxhci4K LSsgICAgbG9jYWwgJVJlZnNfU2VlbiA9ICVSZWZzX1NlZW47Ci0rCi0rICAgIHsKLSsgICAgICAg ICR0Yi0+X3Vub3ZlcmxvYWRfc3RyKCBcJGUxLCBcJGUyICk7Ci0rCi0rICAgICAgICAjIEVpdGhl ciB0aGV5J3JlIGJvdGggcmVmZXJlbmNlcyBvciBib3RoIG5vdC4KLSsgICAgICAgIG15ICRzYW1l X3JlZiA9ICEoICFyZWYgJGUxIHhvciAhcmVmICRlMiApOwotKyAgICAgICAgbXkgJG5vdF9yZWYg PSAoICFyZWYgJGUxIGFuZCAhcmVmICRlMiApOwotKwotKyAgICAgICAgaWYoIGRlZmluZWQgJGUx IHhvciBkZWZpbmVkICRlMiApIHsKLSsgICAgICAgICAgICAkb2sgPSAwOwotKyAgICAgICAgfQot KyAgICAgICAgZWxzaWYoICFkZWZpbmVkICRlMSBhbmQgIWRlZmluZWQgJGUyICkgewotKyAgICAg ICAgICAgICMgU2hvcnRjdXQgaWYgdGhleSdyZSBib3RoIHVuZGVmaW5lZC4KLSsgICAgICAgICAg ICAkb2sgPSAxOwotKyAgICAgICAgfQotKyAgICAgICAgZWxzaWYoIF9kbmUoJGUxKSB4b3IgX2Ru ZSgkZTIpICkgewotKyAgICAgICAgICAgICRvayA9IDA7Ci0rICAgICAgICB9Ci0rICAgICAgICBl bHNpZiggJHNhbWVfcmVmIGFuZCggJGUxIGVxICRlMiApICkgewotKyAgICAgICAgICAgICRvayA9 IDE7Ci0rICAgICAgICB9Ci0rICAgICAgICBlbHNpZigkbm90X3JlZikgewotKyAgICAgICAgICAg IHB1c2ggQERhdGFfU3RhY2ssIHsgdHlwZSA9PiAnJywgdmFscyA9PiBbICRlMSwgJGUyIF0gfTsK LSsgICAgICAgICAgICAkb2sgPSAwOwotKyAgICAgICAgfQotKyAgICAgICAgZWxzZSB7Ci0rICAg ICAgICAgICAgaWYoICRSZWZzX1NlZW57JGUxfSApIHsKLSsgICAgICAgICAgICAgICAgcmV0dXJu ICRSZWZzX1NlZW57JGUxfSBlcSAkZTI7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGVs c2UgewotKyAgICAgICAgICAgICAgICAkUmVmc19TZWVueyRlMX0gPSAiJGUyIjsKLSsgICAgICAg ICAgICB9Ci0rCi0rICAgICAgICAgICAgbXkgJHR5cGUgPSBfdHlwZSgkZTEpOwotKyAgICAgICAg ICAgICR0eXBlID0gJ0RJRkZFUkVOVCcgdW5sZXNzIF90eXBlKCRlMikgZXEgJHR5cGU7Ci0rCi0r ICAgICAgICAgICAgaWYoICR0eXBlIGVxICdESUZGRVJFTlQnICkgewotKyAgICAgICAgICAgICAg ICBwdXNoIEBEYXRhX1N0YWNrLCB7IHR5cGUgPT4gJHR5cGUsIHZhbHMgPT4gWyAkZTEsICRlMiBd IH07Ci0rICAgICAgICAgICAgICAgICRvayA9IDA7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAg ICAgIGVsc2lmKCAkdHlwZSBlcSAnQVJSQVknICkgewotKyAgICAgICAgICAgICAgICAkb2sgPSBf ZXFfYXJyYXkoICRlMSwgJGUyICk7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGVsc2lm KCAkdHlwZSBlcSAnSEFTSCcgKSB7Ci0rICAgICAgICAgICAgICAgICRvayA9IF9lcV9oYXNoKCAk ZTEsICRlMiApOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBlbHNpZiggJHR5cGUgZXEg J1JFRicgKSB7Ci0rICAgICAgICAgICAgICAgIHB1c2ggQERhdGFfU3RhY2ssIHsgdHlwZSA9PiAk dHlwZSwgdmFscyA9PiBbICRlMSwgJGUyIF0gfTsKLSsgICAgICAgICAgICAgICAgJG9rID0gX2Rl ZXBfY2hlY2soICQkZTEsICQkZTIgKTsKLSsgICAgICAgICAgICAgICAgcG9wIEBEYXRhX1N0YWNr IGlmICRvazsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgZWxzaWYoICR0eXBlIGVxICdT Q0FMQVInICkgewotKyAgICAgICAgICAgICAgICBwdXNoIEBEYXRhX1N0YWNrLCB7IHR5cGUgPT4g J1JFRicsIHZhbHMgPT4gWyAkZTEsICRlMiBdIH07Ci0rICAgICAgICAgICAgICAgICRvayA9IF9k ZWVwX2NoZWNrKCAkJGUxLCAkJGUyICk7Ci0rICAgICAgICAgICAgICAgIHBvcCBARGF0YV9TdGFj ayBpZiAkb2s7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGVsc2lmKCR0eXBlKSB7Ci0r ICAgICAgICAgICAgICAgIHB1c2ggQERhdGFfU3RhY2ssIHsgdHlwZSA9PiAkdHlwZSwgdmFscyA9 PiBbICRlMSwgJGUyIF0gfTsKLSsgICAgICAgICAgICAgICAgJG9rID0gMDsKLSsgICAgICAgICAg ICB9Ci0rICAgICAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgICAgIF93aG9hKCAxLCAiTm8g dHlwZSBpbiBfZGVlcF9jaGVjayIgKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICB9Ci0rICAg IH0KLSsKLSsgICAgcmV0dXJuICRvazsKLSt9Ci0rCi0rc3ViIF93aG9hIHsKLSsgICAgbXkoICRj aGVjaywgJGRlc2MgKSA9IEBfOwotKyAgICBpZigkY2hlY2spIHsKLSsgICAgICAgIGRpZSA8PCJX SE9BIjsKLStXSE9BISAgJGRlc2MKLStUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4hICBQbGVhc2Ug Y29udGFjdCB0aGUgYXV0aG9yIGltbWVkaWF0ZWx5IQotK1dIT0EKLSsgICAgfQotK30KLSsKLSs9 aXRlbSBCPGVxX2hhc2g+Ci0rCi0rICBteSAkaXNfZXEgPSBlcV9oYXNoKFwlZ290LCBcJWV4cGVj dGVkKTsKLSsKLStEZXRlcm1pbmVzIGlmIHRoZSB0d28gaGFzaGVzIGNvbnRhaW4gdGhlIHNhbWUg a2V5cyBhbmQgdmFsdWVzLiAgVGhpcwotK2lzIGEgZGVlcCBjaGVjay4KLSsKLSs9Y3V0Ci0rCi0r c3ViIGVxX2hhc2ggewotKyAgICBsb2NhbCBARGF0YV9TdGFjayA9ICgpOwotKyAgICByZXR1cm4g X2RlZXBfY2hlY2soQF8pOwotK30KLSsKLStzdWIgX2VxX2hhc2ggewotKyAgICBteSggJGExLCAk YTIgKSA9IEBfOwotKwotKyAgICBpZiggZ3JlcCBfdHlwZSgkXykgbmUgJ0hBU0gnLCAkYTEsICRh MiApIHsKLSsgICAgICAgIHdhcm4gImVxX2hhc2ggcGFzc2VkIGEgbm9uLWhhc2ggcmVmIjsKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAgIHJldHVybiAxIGlmICRhMSBlcSAkYTI7 Ci0rCi0rICAgIG15ICRvayA9IDE7Ci0rICAgIG15ICRiaWdnZXIgPSBrZXlzICUkYTEgPiBrZXlz ICUkYTIgPyAkYTEgOiAkYTI7Ci0rICAgIGZvcmVhY2ggbXkgJGsgKCBrZXlzICUkYmlnZ2VyICkg ewotKyAgICAgICAgbXkgJGUxID0gZXhpc3RzICRhMS0+eyRrfSA/ICRhMS0+eyRrfSA6ICRETkU7 Ci0rICAgICAgICBteSAkZTIgPSBleGlzdHMgJGEyLT57JGt9ID8gJGEyLT57JGt9IDogJERORTsK LSsKLSsgICAgICAgIG5leHQgaWYgX2VxdWFsX25vbnJlZnMoJGUxLCAkZTIpOwotKwotKyAgICAg ICAgcHVzaCBARGF0YV9TdGFjaywgeyB0eXBlID0+ICdIQVNIJywgaWR4ID0+ICRrLCB2YWxzID0+ IFsgJGUxLCAkZTIgXSB9OwotKyAgICAgICAgJG9rID0gX2RlZXBfY2hlY2soICRlMSwgJGUyICk7 Ci0rICAgICAgICBwb3AgQERhdGFfU3RhY2sgaWYgJG9rOwotKwotKyAgICAgICAgbGFzdCB1bmxl c3MgJG9rOwotKyAgICB9Ci0rCi0rICAgIHJldHVybiAkb2s7Ci0rfQotKwotKz1pdGVtIEI8ZXFf c2V0PgotKwotKyAgbXkgJGlzX2VxID0gZXFfc2V0KFxAZ290LCBcQGV4cGVjdGVkKTsKLSsKLStT aW1pbGFyIHRvIGVxX2FycmF5KCksIGV4Y2VwdCB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGlz IEI8bm90PgotK2ltcG9ydGFudC4gIFRoaXMgaXMgYSBkZWVwIGNoZWNrLCBidXQgdGhlIGlycmVs ZXZhbmN5IG9mIG9yZGVyIG9ubHkKLSthcHBsaWVzIHRvIHRoZSB0b3AgbGV2ZWwuCi0rCi0rICAg IG9rKCBlcV9zZXQoXEBnb3QsIFxAZXhwZWN0ZWQpICk7Ci0rCi0rSXMgYmV0dGVyIHdyaXR0ZW46 Ci0rCi0rICAgIGlzX2RlZXBseSggW3NvcnQgQGdvdF0sIFtzb3J0IEBleHBlY3RlZF0gKTsKLSsK LStCPE5PVEU+IEJ5IGhpc3RvcmljYWwgYWNjaWRlbnQsIHRoaXMgaXMgbm90IGEgdHJ1ZSBzZXQg Y29tcGFyaXNvbi4KLStXaGlsZSB0aGUgb3JkZXIgb2YgZWxlbWVudHMgZG9lcyBub3QgbWF0dGVy LCBkdXBsaWNhdGUgZWxlbWVudHMgZG8uCi0rCi0rQjxOT1RFPiBlcV9zZXQoKSBkb2VzIG5vdCBr bm93IGhvdyB0byBkZWFsIHdpdGggcmVmZXJlbmNlcyBhdCB0aGUgdG9wCi0rbGV2ZWwuICBUaGUg Zm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjb21wYXJpc29uIHdoaWNoIG1pZ2h0IG5vdCB3 b3JrOgotKwotKyAgICBlcV9zZXQoW1wxLCBcMl0sIFtcMiwgXDFdKTsKLSsKLStMPFRlc3Q6OkRl ZXA+IGNvbnRhaW5zIG11Y2ggYmV0dGVyIHNldCBjb21wYXJpc29uIGZ1bmN0aW9ucy4KLSsKLSs9 Y3V0Ci0rCi0rc3ViIGVxX3NldCB7Ci0rICAgIG15KCAkYTEsICRhMiApID0gQF87Ci0rICAgIHJl dHVybiAwIHVubGVzcyBAJGExID09IEAkYTI7Ci0rCi0rICAgIG5vIHdhcm5pbmdzICd1bmluaXRp YWxpemVkJzsKLSsKLSsgICAgIyBJdCByZWFsbHkgZG9lc24ndCBtYXR0ZXIgaG93IHdlIHNvcnQg dGhlbSwgYXMgbG9uZyBhcyBib3RoIGFycmF5cyBhcmUKLSsgICAgIyBzb3J0ZWQgd2l0aCB0aGUg c2FtZSBhbGdvcml0aG0uCi0rICAgICMKLSsgICAgIyBFbnN1cmUgdGhhdCByZWZlcmVuY2VzIGFy ZSBub3QgYWNjaWRlbnRhbGx5IHRyZWF0ZWQgdGhlIHNhbWUgYXMgYQotKyAgICAjIHN0cmluZyBj b250YWluaW5nIHRoZSByZWZlcmVuY2UuCi0rICAgICMKLSsgICAgIyBIYXZlIHRvIGlubGluZSB0 aGUgc29ydCByb3V0aW5lIGR1ZSB0byBhIHRocmVhZGluZy9zb3J0IGJ1Zy4KLSsgICAgIyBTZWUg W3J0LmNwYW4ub3JnIDY3ODJdCi0rICAgICMKLSsgICAgIyBJIGRvbid0IGtub3cgaG93IHJlZmVy ZW5jZXMgd291bGQgYmUgc29ydGVkIHNvIHdlIGp1c3QgZG9uJ3Qgc29ydAotKyAgICAjIHRoZW0u ICBUaGlzIG1lYW5zIGVxX3NldCBkb2Vzbid0IHJlYWxseSB3b3JrIHdpdGggcmVmcy4KLSsgICAg cmV0dXJuIGVxX2FycmF5KAotKyAgICAgICAgWyBncmVwKCByZWYsIEAkYTEgKSwgc29ydCggZ3Jl cCggIXJlZiwgQCRhMSApICkgXSwKLSsgICAgICAgIFsgZ3JlcCggcmVmLCBAJGEyICksIHNvcnQo IGdyZXAoICFyZWYsIEAkYTIgKSApIF0sCi0rICAgICk7Ci0rfQotKwotKz1iYWNrCi0rCi0rCi0r PWhlYWQyIEV4dGVuZGluZyBhbmQgRW1iZWRkaW5nIFRlc3Q6Ok1vcmUKLSsKLStTb21ldGltZXMg dGhlIFRlc3Q6Ok1vcmUgaW50ZXJmYWNlIGlzbid0IHF1aXRlIGVub3VnaC4gIEZvcnR1bmF0ZWx5 LAotK1Rlc3Q6Ok1vcmUgaXMgYnVpbHQgb24gdG9wIG9mIFRlc3Q6OkJ1aWxkZXIgd2hpY2ggcHJv dmlkZXMgYSBzaW5nbGUsCi0rdW5pZmllZCBiYWNrZW5kIGZvciBhbnkgdGVzdCBsaWJyYXJ5IHRv IHVzZS4gIFRoaXMgbWVhbnMgdHdvIHRlc3QKLStsaWJyYXJpZXMgd2hpY2ggYm90aCB1c2UgVGVz dDo6QnVpbGRlciBCPGNhbiBiZSB1c2VkIHRvZ2V0aGVyIGluIHRoZQotK3NhbWUgcHJvZ3JhbT4u Ci0rCi0rSWYgeW91IHNpbXBseSB3YW50IHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIG9mIGhvdyB0 aGUgdGVzdHMgYmVoYXZlLAotK3lvdSBjYW4gYWNjZXNzIHRoZSB1bmRlcmx5aW5nIFRlc3Q6OkJ1 aWxkZXIgb2JqZWN0IGxpa2Ugc286Ci0rCi0rPW92ZXIgNAotKwotKz1pdGVtIEI8YnVpbGRlcj4K LSsKLSsgICAgbXkgJHRlc3RfYnVpbGRlciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7Ci0rCi0rUmV0 dXJucyB0aGUgVGVzdDo6QnVpbGRlciBvYmplY3QgdW5kZXJseWluZyBUZXN0OjpNb3JlIGZvciB5 b3UgdG8gcGxheQotK3dpdGguCi0rCi0rCi0rPWJhY2sKLSsKLSsKLSs9aGVhZDEgRVhJVCBDT0RF UwotKwotK0lmIGFsbCB5b3VyIHRlc3RzIHBhc3NlZCwgVGVzdDo6QnVpbGRlciB3aWxsIGV4aXQg d2l0aCB6ZXJvICh3aGljaCBpcwotK25vcm1hbCkuICBJZiBhbnl0aGluZyBmYWlsZWQgaXQgd2ls bCBleGl0IHdpdGggaG93IG1hbnkgZmFpbGVkLiAgSWYKLSt5b3UgcnVuIGxlc3MgKG9yIG1vcmUp IHRlc3RzIHRoYW4geW91IHBsYW5uZWQsIHRoZSBtaXNzaW5nIChvciBleHRyYXMpCi0rd2lsbCBi ZSBjb25zaWRlcmVkIGZhaWx1cmVzLiAgSWYgbm8gdGVzdHMgd2VyZSBldmVyIHJ1biBUZXN0OjpC dWlsZGVyCi0rd2lsbCB0aHJvdyBhIHdhcm5pbmcgYW5kIGV4aXQgd2l0aCAyNTUuICBJZiB0aGUg dGVzdCBkaWVkLCBldmVuIGFmdGVyCi0raGF2aW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYWxs IGl0cyB0ZXN0cywgaXQgd2lsbCBzdGlsbCBiZQotK2NvbnNpZGVyZWQgYSBmYWlsdXJlIGFuZCB3 aWxsIGV4aXQgd2l0aCAyNTUuCi0rCi0rU28gdGhlIGV4aXQgY29kZXMgYXJlLi4uCi0rCi0rICAg IDAgICAgICAgICAgICAgICAgICAgYWxsIHRlc3RzIHN1Y2Nlc3NmdWwKLSsgICAgMjU1ICAgICAg ICAgICAgICAgICB0ZXN0IGRpZWQgb3IgYWxsIHBhc3NlZCBidXQgd3JvbmcgIyBvZiB0ZXN0cyBy dW4KLSsgICAgYW55IG90aGVyIG51bWJlciAgICBob3cgbWFueSBmYWlsZWQgKGluY2x1ZGluZyBt aXNzaW5nIG9yIGV4dHJhcykKLSsKLStJZiB5b3UgZmFpbCBtb3JlIHRoYW4gMjU0IHRlc3RzLCBp dCB3aWxsIGJlIHJlcG9ydGVkIGFzIDI1NC4KLSsKLStCPE5PVEU+ICBUaGlzIGJlaGF2aW9yIG1h eSBnbyBhd2F5IGluIGZ1dHVyZSB2ZXJzaW9ucy4KLSsKLSsKLSs9aGVhZDEgQ09NUEFUSUJJTElU WQotKwotK1Rlc3Q6Ok1vcmUgd29ya3Mgd2l0aCBQZXJscyBhcyBvbGQgYXMgNS44LjEuCi0rCi0r VGhyZWFkIHN1cHBvcnQgaXMgbm90IHZlcnkgcmVsaWFibGUgYmVmb3JlIDUuMTAuMSwgYnV0IHRo YXQncwotK2JlY2F1c2UgdGhyZWFkcyBhcmUgbm90IHZlcnkgcmVsaWFibGUgYmVmb3JlIDUuMTAu MS4KLSsKLStBbHRob3VnaCBUZXN0OjpNb3JlIGhhcyBiZWVuIGEgY29yZSBtb2R1bGUgaW4gdmVy c2lvbnMgb2YgUGVybCBzaW5jZSA1LjYuMiwgVGVzdDo6TW9yZSBoYXMgZXZvbHZlZCBzaW5jZSB0 aGVuLCBhbmQgbm90IGFsbCBvZiB0aGUgZmVhdHVyZXMgeW91J3JlIHVzZWQgdG8gd2lsbCBiZSBw cmVzZW50IGluIHRoZSBzaGlwcGVkIHZlcnNpb24gb2YgVGVzdDo6TW9yZS4gSWYgeW91IGFyZSB3 cml0aW5nIGEgbW9kdWxlLCBkb24ndCBmb3JnZXQgdG8gaW5kaWNhdGUgaW4geW91ciBwYWNrYWdl IG1ldGFkYXRhIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgVGVzdDo6TW9yZSB0aGF0IHlvdSByZXF1 aXJlLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSB3YW50IHRvIHVzZSBDPGRvbmVfdGVzdGluZygpPiBi dXQgd2FudCB5b3VyIHRlc3Qgc2NyaXB0IHRvIHJ1biBvbiBQZXJsIDUuMTAuMCwgeW91IHdpbGwg bmVlZCB0byBleHBsaWNpdGx5IHJlcXVpcmUgVGVzdDo6TW9yZSA+IDAuODguCi0rCi0rS2V5IGZl YXR1cmUgbWlsZXN0b25lcyBpbmNsdWRlOgotKwotKz1vdmVyIDQKLSsKLSs9aXRlbSBzdWJ0ZXN0 cwotKwotK1N1YnRlc3RzIHdlcmUgcmVsZWFzZWQgaW4gVGVzdDo6TW9yZSAwLjk0LCB3aGljaCBj YW1lIHdpdGggUGVybCA1LjEyLjAuIFN1YnRlc3RzIGRpZCBub3QgaW1wbGljaXRseSBjYWxsIEM8 ZG9uZV90ZXN0aW5nKCk+IHVudGlsIDAuOTY7IHRoZSBmaXJzdCBQZXJsIHdpdGggdGhhdCBmaXgg d2FzIFBlcmwgNS4xNC4wIHdpdGggMC45OC4KLSsKLSs9aXRlbSBDPGRvbmVfdGVzdGluZygpPgot KwotK1RoaXMgd2FzIHJlbGVhc2VkIGluIFRlc3Q6Ok1vcmUgMC44OCBhbmQgZmlyc3Qgc2hpcHBl ZCB3aXRoIFBlcmwgaW4gNS4xMC4xIGFzIHBhcnQgb2YgVGVzdDo6TW9yZSAwLjkyLiAKLSsKLSs9 aXRlbSBDPGNtcF9vaygpPgotKwotK0FsdGhvdWdoIEM8Y21wX29rKCk+IHdhcyBpbnRyb2R1Y2Vk IGluIDAuNDAsIDAuODYgZml4ZWQgYW4gaW1wb3J0YW50IGJ1ZyB0byBtYWtlIGl0IHNhZmUgZm9y IG92ZXJsb2FkZWQgb2JqZWN0czsgdGhlIGZpeGVkIGZpcnN0IHNoaXBwZWQgd2l0aCBQZXJsIGlu IDUuMTAuMSBhcyBwYXJ0IG9mIFRlc3Q6Ok1vcmUgMC45Mi4KLSsKLSs9aXRlbSBDPG5ld19vaygp PiBDPG5vdGUoKT4gYW5kIEM8ZXhwbGFpbigpPgotKwotK1RoZXNlIHdlcmUgd2FzIHJlbGVhc2Vk IGluIFRlc3Q6Ok1vcmUgMC44MiwgYW5kIGZpcnN0IHNoaXBwZWQgd2l0aCBQZXJsIGluIDUuMTAu MSBhcyBwYXJ0IG9mIFRlc3Q6Ok1vcmUgMC45Mi4gCi0rCi0rPWJhY2sKLSsKLStUaGVyZSBpcyBh IGZ1bGwgdmVyc2lvbiBoaXN0b3J5IGluIHRoZSBDaGFuZ2VzIGZpbGUsIGFuZCB0aGUgVGVzdDo6 TW9yZSB2ZXJzaW9ucyBpbmNsdWRlZCBhcyBjb3JlIGNhbiBiZSBmb3VuZCB1c2luZyBMPE1vZHVs ZTo6Q29yZUxpc3Q+OgotKwotKyAgICAkIGNvcmVsaXN0IC1hIFRlc3Q6Ok1vcmUKLSsKLSsKLSs9 aGVhZDEgQ0FWRUFUUyBhbmQgTk9URVMKLSsKLSs9b3ZlciA0Ci0rCi0rPWl0ZW0gdXRmOCAvICJX aWRlIGNoYXJhY3RlciBpbiBwcmludCIKLSsKLStJZiB5b3UgdXNlIHV0Zjggb3Igb3RoZXIgbm9u LUFTQ0lJIGNoYXJhY3RlcnMgd2l0aCBUZXN0OjpNb3JlIHlvdQotK21pZ2h0IGdldCBhICJXaWRl IGNoYXJhY3RlciBpbiBwcmludCIgd2FybmluZy4gIFVzaW5nIEM8YmlubW9kZQotK1NURE9VVCwg Ijp1dGY4Ij4gd2lsbCBub3QgZml4IGl0LiAgVGVzdDo6QnVpbGRlciAod2hpY2ggcG93ZXJzCi0r VGVzdDo6TW9yZSkgZHVwbGljYXRlcyBTVERPVVQgYW5kIFNUREVSUi4gIFNvIGFueSBjaGFuZ2Vz IHRvIHRoZW0sCi0raW5jbHVkaW5nIGNoYW5naW5nIHRoZWlyIG91dHB1dCBkaXNjaXBsaW5lcywg d2lsbCBub3QgYmUgc2VlbSBieQotK1Rlc3Q6Ok1vcmUuCi0rCi0rT25lIHdvcmsgYXJvdW5kIGlz IHRvIGFwcGx5IGVuY29kaW5ncyB0byBTVERPVVQgYW5kIFNUREVSUiBhcyBlYXJseQotK2FzIHBv c3NpYmxlIGFuZCBiZWZvcmUgVGVzdDo6TW9yZSAob3IgYW55IG90aGVyIFRlc3QgbW9kdWxlKSBs b2Fkcy4KLSsKLSsgICAgdXNlIG9wZW4gJzpzdGQnLCAnOmVuY29kaW5nKHV0ZjgpJzsKLSsgICAg dXNlIFRlc3Q6Ok1vcmU7Ci0rCi0rQSBtb3JlIGRpcmVjdCB3b3JrIGFyb3VuZCBpcyB0byBjaGFu Z2UgdGhlIGZpbGVoYW5kbGVzIHVzZWQgYnkKLStUZXN0OjpCdWlsZGVyLgotKwotKyAgICBteSAk YnVpbGRlciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7Ci0rICAgIGJpbm1vZGUgJGJ1aWxkZXItPm91 dHB1dCwgICAgICAgICAiOmVuY29kaW5nKHV0ZjgpIjsKLSsgICAgYmlubW9kZSAkYnVpbGRlci0+ ZmFpbHVyZV9vdXRwdXQsICI6ZW5jb2RpbmcodXRmOCkiOwotKyAgICBiaW5tb2RlICRidWlsZGVy LT50b2RvX291dHB1dCwgICAgIjplbmNvZGluZyh1dGY4KSI7Ci0rCi0rCi0rPWl0ZW0gT3Zlcmxv YWRlZCBvYmplY3RzCi0rCi0rU3RyaW5nIG92ZXJsb2FkZWQgb2JqZWN0cyBhcmUgY29tcGFyZWQg QjxhcyBzdHJpbmdzPiAob3IgaW4gY21wX29rKCkncwotK2Nhc2UsIHN0cmluZ3Mgb3IgbnVtYmVy cyBhcyBhcHByb3ByaWF0ZSB0byB0aGUgY29tcGFyaXNvbiBvcCkuICBUaGlzCi0rcHJldmVudHMg VGVzdDo6TW9yZSBmcm9tIHBpZXJjaW5nIGFuIG9iamVjdCdzIGludGVyZmFjZSBhbGxvd2luZwot K2JldHRlciBibGFja2JveCB0ZXN0aW5nLiAgU28gaWYgYSBmdW5jdGlvbiBzdGFydHMgcmV0dXJu aW5nIG92ZXJsb2FkZWQKLStvYmplY3RzIGluc3RlYWQgb2YgYmFyZSBzdHJpbmdzIHlvdXIgdGVz dHMgd29uJ3Qgbm90aWNlIHRoZQotK2RpZmZlcmVuY2UuICBUaGlzIGlzIGdvb2QuCi0rCi0rSG93 ZXZlciwgaXQgZG9lcyBtZWFuIHRoYXQgZnVuY3Rpb25zIGxpa2UgaXNfZGVlcGx5KCkgY2Fubm90 IGJlIHVzZWQgdG8KLSt0ZXN0IHRoZSBpbnRlcm5hbHMgb2Ygc3RyaW5nIG92ZXJsb2FkZWQgb2Jq ZWN0cy4gIEluIHRoaXMgY2FzZSBJIHdvdWxkCi0rc3VnZ2VzdCBMPFRlc3Q6OkRlZXA+IHdoaWNo IGNvbnRhaW5zIG1vcmUgZmxleGlibGUgdGVzdGluZyBmdW5jdGlvbnMgZm9yCi0rY29tcGxleCBk YXRhIHN0cnVjdHVyZXMuCi0rCi0rCi0rPWl0ZW0gVGhyZWFkcwotKwotK1Rlc3Q6Ok1vcmUgd2ls bCBvbmx5IGJlIGF3YXJlIG9mIHRocmVhZHMgaWYgInVzZSB0aHJlYWRzIiBoYXMgYmVlbiBkb25l Ci0rSTxiZWZvcmU+IFRlc3Q6Ok1vcmUgaXMgbG9hZGVkLiAgVGhpcyBpcyBvazoKLSsKLSsgICAg dXNlIHRocmVhZHM7Ci0rICAgIHVzZSBUZXN0OjpNb3JlOwotKwotK1RoaXMgbWF5IGNhdXNlIHBy b2JsZW1zOgotKwotKyAgICB1c2UgVGVzdDo6TW9yZQotKyAgICB1c2UgdGhyZWFkczsKLSsKLSs1 LjguMSBhbmQgYWJvdmUgYXJlIHN1cHBvcnRlZC4gIEFueXRoaW5nIGJlbG93IHRoYXQgaGFzIHRv byBtYW55IGJ1Z3MuCi0rCi0rPWJhY2sKLSsKLSsKLSs9aGVhZDEgSElTVE9SWQotKwotK1RoaXMg aXMgYSBjYXNlIG9mIGNvbnZlcmdlbnQgZXZvbHV0aW9uIHdpdGggSm9zaHVhIFByaXRpa2luJ3Mg VGVzdAotK21vZHVsZS4gIEkgd2FzIGxhcmdlbHkgdW5hd2FyZSBvZiBpdHMgZXhpc3RlbmNlIHdo ZW4gSSdkIGZpcnN0Ci0rd3JpdHRlbiBteSBvd24gb2soKSByb3V0aW5lcy4gIFRoaXMgbW9kdWxl IGV4aXN0cyBiZWNhdXNlIEkgY2FuJ3QKLStmaWd1cmUgb3V0IGhvdyB0byBlYXNpbHkgd2VkZ2Ug dGVzdCBuYW1lcyBpbnRvIFRlc3QncyBpbnRlcmZhY2UgKGFsb25nCi0rd2l0aCBhIGZldyBvdGhl ciBwcm9ibGVtcykuCi0rCi0rVGhlIGdvYWwgaGVyZSBpcyB0byBoYXZlIGEgdGVzdGluZyB1dGls aXR5IHRoYXQncyBzaW1wbGUgdG8gbGVhcm4sCi0rcXVpY2sgdG8gdXNlIGFuZCBkaWZmaWN1bHQg dG8gdHJpcCB5b3Vyc2VsZiB1cCB3aXRoIHdoaWxlIHN0aWxsCi0rcHJvdmlkaW5nIG1vcmUgZmxl eGliaWxpdHkgdGhhbiB0aGUgZXhpc3RpbmcgVGVzdC5wbS4gIEFzIHN1Y2gsIHRoZQotK25hbWVz IG9mIHRoZSBtb3N0IGNvbW1vbiByb3V0aW5lcyBhcmUga2VwdCB0aW55LCBzcGVjaWFsIGNhc2Vz IGFuZAotK21hZ2ljIHNpZGUtZWZmZWN0cyBhcmUga2VwdCB0byBhIG1pbmltdW0uICBXWVNJV1lH LgotKwotKwotKz1oZWFkMSBTRUUgQUxTTwotKwotK0w8VGVzdDo6U2ltcGxlPiBpZiBhbGwgdGhp cyBjb25mdXNlcyB5b3UgYW5kIHlvdSBqdXN0IHdhbnQgdG8gd3JpdGUKLStzb21lIHRlc3RzLiAg WW91IGNhbiB1cGdyYWRlIHRvIFRlc3Q6Ok1vcmUgbGF0ZXIgKGl0J3MgZm9yd2FyZAotK2NvbXBh dGlibGUpLgotKwotK0w8VGVzdDo6SGFybmVzcz4gaXMgdGhlIHRlc3QgcnVubmVyIGFuZCBvdXRw dXQgaW50ZXJwcmV0ZXIgZm9yIFBlcmwuCi0rSXQncyB0aGUgdGhpbmcgdGhhdCBwb3dlcnMgQzxt YWtlIHRlc3Q+IGFuZCB3aGVyZSB0aGUgQzxwcm92ZT4gdXRpbGl0eQotK2NvbWVzIGZyb20uCi0r Ci0rTDxUZXN0OjpMZWdhY3k+IHRlc3RzIHdyaXR0ZW4gd2l0aCBUZXN0LnBtLCB0aGUgb3JpZ2lu YWwgdGVzdGluZwotK21vZHVsZSwgZG8gbm90IHBsYXkgd2VsbCB3aXRoIG90aGVyIHRlc3Rpbmcg bGlicmFyaWVzLiAgVGVzdDo6TGVnYWN5Ci0rZW11bGF0ZXMgdGhlIFRlc3QucG0gaW50ZXJmYWNl IGFuZCBkb2VzIHBsYXkgd2VsbCB3aXRoIG90aGVycy4KLSsKLStMPFRlc3Q6OkRpZmZlcmVuY2Vz PiBmb3IgbW9yZSB3YXlzIHRvIHRlc3QgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuCi0rQW5kIGl0 IHBsYXlzIHdlbGwgd2l0aCBUZXN0OjpNb3JlLgotKwotK0w8VGVzdDo6Q2xhc3M+IGlzIGxpa2Ug eFVuaXQgYnV0IG1vcmUgcGVybGlzaC4KLSsKLStMPFRlc3Q6OkRlZXA+IGdpdmVzIHlvdSBtb3Jl IHBvd2VyZnVsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgdGVzdGluZy4KLSsKLStMPFRlc3Q6Oklu bGluZT4gc2hvd3MgdGhlIGlkZWEgb2YgZW1iZWRkZWQgdGVzdGluZy4KLSsKLStMPEJ1bmRsZTo6 VGVzdD4gaW5zdGFsbHMgYSB3aG9sZSBidW5jaCBvZiB1c2VmdWwgdGVzdCBtb2R1bGVzLgotKwot KwotKz1oZWFkMSBBVVRIT1JTCi0rCi0rTWljaGFlbCBHIFNjaHdlcm4gRTxsdD5zY2h3ZXJuQHBv Ym94LmNvbUU8Z3Q+IHdpdGggbXVjaCBpbnNwaXJhdGlvbgotK2Zyb20gSm9zaHVhIFByaXRpa2lu J3MgVGVzdCBtb2R1bGUgYW5kIGxvdHMgb2YgaGVscCBmcm9tIEJhcnJpZQotK1NsYXltYWtlciwg VG9ueSBCb3dkZW4sIGJsYWNrc3Rhci5jby51aywgY2hyb21hdGljLCBGZXJnYWwgRGFseSBhbmQK LSt0aGUgcGVybC1xYSBnYW5nLgotKwotKz1oZWFkMSBNQUlOVEFJTkVSUwotKwotKz1vdmVyIDQK LSsKLSs9aXRlbSBDaGFkIEdyYW51bSBFPGx0PmV4b2Rpc3RAY3Bhbi5vcmdFPGd0PgotKwotKz1i YWNrCi0rCi0rCi0rPWhlYWQxIEJVR1MKLSsKLStTZWUgRjxodHRwOi8vcnQuY3Bhbi5vcmc+IHRv IHJlcG9ydCBhbmQgdmlldyBidWdzLgotKwotKwotKz1oZWFkMSBTT1VSQ0UKLSsKLStUaGUgc291 cmNlIGNvZGUgcmVwb3NpdG9yeSBmb3IgVGVzdDo6TW9yZSBjYW4gYmUgZm91bmQgYXQKLStGPGh0 dHA6Ly9naXRodWIuY29tL1Rlc3QtTW9yZS90ZXN0LW1vcmUvPi4KLSsKLSsKLSs9aGVhZDEgQ09Q WVJJR0hUCi0rCi0rQ29weXJpZ2h0IDIwMDEtMjAwOCBieSBNaWNoYWVsIEcgU2Nod2VybiBFPGx0 PnNjaHdlcm5AcG9ib3guY29tRTxndD4uCi0rCi0rVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotK21vZGlmeSBpdCB1bmRlciB0aGUg c2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KLSsKLStTZWUgRjxodHRwOi8vd3d3LnBlcmwuY29t L3BlcmwvbWlzYy9BcnRpc3RpYy5odG1sPgotKwotKz1jdXQKLSsKLSsxOwo=