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: David Dick To: git-commits@fedoraproject.org Subject: [rpms/perl-Protocol-WebSocket] epel9: Initial import (#1093640). Date: Thu, 06 Aug 2026 20:00:39 GMT Message-ID: <178604643955.1.13207157515926791403.rpms-perl-Protocol-WebSocket-044aff3ba09e@fedoraproject.org> List-ID: X-Git-Repo: rpms/perl-Protocol-WebSocket X-Git-Branch: epel9 X-Git-Rev: 044aff3ba09e87f8fa574c2b422cd843c092971c QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcGVybC1Qcm90b2Nv bC1XZWJTb2NrZXQKQnJhbmNoIDogZXBlbDkKQ29tbWl0IDogMDQ0YWZmM2JhMDllODdmOGZhNTc0 YzJiNDIyY2Q4NDNjMDkyOTcxYwpBdXRob3IgOiBEYXZpZCBEaWNrIDxkZGlja0BjcGFuLm9yZz4K RGF0ZSAgIDogMjAxNC0wNS0wN1QxOTo0MzoyMSsxMDowMApTdGF0cyAgOiArNjIzMy8tMCBpbiA1 IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9wZXJs LVByb3RvY29sLVdlYlNvY2tldC9jLzA0NGFmZjNiYTA5ZTg3ZjhmYTU3NGMyYjQyMmNkODQzYzA5 Mjk3MWM/YnJhbmNoPWVwZWw5CgpMb2c6CkluaXRpYWwgaW1wb3J0ICgjMTA5MzY0MCkuCgotLS0K ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGU2OWRlMjkuLjk5NTkx YzEgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBA CisvUHJvdG9jb2wtV2ViU29ja2V0LTAuMTcudGFyLmd6CgpkaWZmIC0tZ2l0IGEvcGVybC1Qcm90 b2NvbC1XZWJTb2NrZXQuc3BlYyBiL3BlcmwtUHJvdG9jb2wtV2ViU29ja2V0LnNwZWMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzZWFkZQotLS0gL2Rldi9udWxsCisrKyBi L3BlcmwtUHJvdG9jb2wtV2ViU29ja2V0LnNwZWMKQEAgLTAsMCArMSw4NCBAQAorTmFtZTogICAg ICAgICAgIHBlcmwtUHJvdG9jb2wtV2ViU29ja2V0CitWZXJzaW9uOiAgICAgICAgMC4xNworUmVs ZWFzZTogICAgICAgIDElez9kaXN0fQorU3VtbWFyeTogICAgICAgIFdlYlNvY2tldCBwcm90b2Nv bAorTGljZW5zZTogICAgICAgIEdQTCsgb3IgQXJ0aXN0aWMKK0dyb3VwOiAgICAgICAgICBEZXZl bG9wbWVudC9MaWJyYXJpZXMKK1VSTDogICAgICAgICAgICBodHRwOi8vc2VhcmNoLmNwYW4ub3Jn L2Rpc3QvUHJvdG9jb2wtV2ViU29ja2V0LworU291cmNlMDogICAgICAgIGh0dHA6Ly93d3cuY3Bh bi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvUHJvdG9jb2wvUHJvdG9jb2wtV2ViU29ja2V0LSV7dmVy c2lvbn0udGFyLmd6CisjIGluY2x1ZGVzIFRlc3Q6Ok1vcmUgd2l0aCBhIGhpZ2hlciB2ZXJzaW9u IHRoYW4gYXZhaWxhYmxlIGZvciBlcGVsNgorUGF0Y2gxOiAgICAgICAgIHRlc3Rfc2ltcGxlX2lu Y2x1ZGUucGF0Y2gKKyMgUmVtb3ZlIHRoZSBDUEFOOjpNZXRhIHJlZmVyZW5jZXMgZnJvbSBCdWls ZC5QTAorUGF0Y2gyOiAgICAgICAgIHByb3RvY29sX3dlYnNvY2tldF9yZW1vdmVfY3Bhbl9tZXRh X3JlZmVyZW5jZXMucGF0Y2gKK0J1aWxkQXJjaDogICAgICBub2FyY2gKK0J1aWxkUmVxdWlyZXM6 ICBwZXJsCitCdWlsZFJlcXVpcmVzOiAgcGVybChiYXNlKQorQnVpbGRSZXF1aXJlczogIHBlcmwo Q2FycCkKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKENvbmZpZykKK0J1aWxkUmVxdWlyZXM6ICBwZXJs KGNvbnN0YW50KQorJWlmIDAlez9lbDZ9CislZWxzZQorQnVpbGRSZXF1aXJlczogIHBlcmwoQ1BB Tjo6TWV0YSkKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKENQQU46Ok1ldGE6OlByZXJlcXMpCislZW5k aWYKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKERpZ2VzdDo6TUQ1KQorQnVpbGRSZXF1aXJlczogIHBl cmwoRGlnZXN0OjpTSEExKQorQnVpbGRSZXF1aXJlczogIHBlcmwoRW5jb2RlKQorJWlmIDAlez9l bDZ9CitCdWlsZFJlcXVpcmVzOiAgcGVybChFeHBvcnRlcikKKyVlbmRpZgorQnVpbGRSZXF1aXJl czogIHBlcmwoRmlsZTo6QmFzZW5hbWUpCitCdWlsZFJlcXVpcmVzOiAgcGVybChGaWxlOjpTcGVj KQorQnVpbGRSZXF1aXJlczogIHBlcmwoSU86OkhhbmRsZSkKK0J1aWxkUmVxdWlyZXM6ICBwZXJs KE1JTUU6OkJhc2U2NCkKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKE1vZHVsZTo6QnVpbGQpCitCdWls ZFJlcXVpcmVzOiAgcGVybChTY2FsYXI6OlV0aWwpCitCdWlsZFJlcXVpcmVzOiAgcGVybChzdHJp Y3QpCitCdWlsZFJlcXVpcmVzOiAgcGVybChUZXN0OjpNb3JlKQorQnVpbGRSZXF1aXJlczogIHBl cmwodXRmOCkKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKHdhcm5pbmdzKQorJWlmIDAlez9lbDZ9CitC dWlsZFJlcXVpcmVzOiAgcGVybCh2YXJzKQorJWVuZGlmCitSZXF1aXJlczogICAgICAgcGVybCg6 TU9EVUxFX0NPTVBBVF8lKGV2YWwgImAle19fcGVybH0gLVY6dmVyc2lvbmAiOyBlY2hvICR2ZXJz aW9uKSkKKworJWRlc2NyaXB0aW9uCitDbGllbnQvc2VydmVyIFdlYlNvY2tldCBtZXNzYWdlIGFu ZCBmcmFtZSBwYXJzZXIvY29uc3RydWN0b3IuIFRoaXMgbW9kdWxlCitkb2VzIG5vdCBwcm92aWRl IGEgV2ViU29ja2V0IHNlcnZlciBvciBjbGllbnQsIGJ1dCBpcyBtYWRlIGZvciB1c2luZyBpbgor aHR0cCBzZXJ2ZXJzIG9yIGNsaWVudHMgdG8gcHJvdmlkZSBXZWJTb2NrZXQgc3VwcG9ydC4KKwor JXByZXAKKyVzZXR1cCAtcSAtbiBQcm90b2NvbC1XZWJTb2NrZXQtJXt2ZXJzaW9ufQorJXtfX3Nl ZH0gLWkgJ3N8XHJ8fCcgLi9leGFtcGxlcy9yZWZsZXgucGwKKyVpZiAwJXs/ZWw2fQorJXBhdGNo MSAtcDEKKyVwYXRjaDIgLXAxCislZW5kaWYKKyMgVXBzdHJlYW0gaXMgb2theSB3aXRoIHdzY29u c29sZSBiZWluZyBtYWRlIGF2YWlsYWJsZSBhcyBhIGJpbmFyeSBmb3IgRmVkb3JhL0VQRUwKKyV7 X19tdn0gdXRpbCBiaW4KKworJWJ1aWxkCisle19fcGVybH0gQnVpbGQuUEwgaW5zdGFsbGRpcnM9 dmVuZG9yCisuL0J1aWxkCisKKyVpbnN0YWxsCisuL0J1aWxkIGluc3RhbGwgZGVzdGRpcj0kUlBN X0JVSUxEX1JPT1QgY3JlYXRlX3BhY2tsaXN0PTAKKworJXtfZml4cGVybXN9ICRSUE1fQlVJTERf Uk9PVC8qCisKKyVjaGVjaworJWlmIDAlez9lbDZ9CitQRVJMNUxJQj10ZXN0X3NpbXBsZV9wYXRj aC9saWIgLi9CdWlsZCB0ZXN0CislZWxzZQorLi9CdWlsZCB0ZXN0CislZW5kaWYKKworJWZpbGVz CislZG9jIENoYW5nZXMgTElDRU5TRSBleGFtcGxlcworJXtwZXJsX3ZlbmRvcmxpYn0vKgorJXtf bWFuZGlyfS9tYW4zLyoKKyV7X2JpbmRpcn0vKgorCislY2hhbmdlbG9nCisqIFNhdCBBcHIgMTIg MjAxNCBEYXZpZCBEaWNrIDxkZGlja0BjcGFuLm9yZz4gLSAwLjE3LTEKKy0gSW5pdGlhbCByZWxl YXNlCgpkaWZmIC0tZ2l0IGEvcHJvdG9jb2xfd2Vic29ja2V0X3JlbW92ZV9jcGFuX21ldGFfcmVm ZXJlbmNlcy5wYXRjaCBiL3Byb3RvY29sX3dlYnNvY2tldF9yZW1vdmVfY3Bhbl9tZXRhX3JlZmVy ZW5jZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3MjVlYgot LS0gL2Rldi9udWxsCisrKyBiL3Byb3RvY29sX3dlYnNvY2tldF9yZW1vdmVfY3Bhbl9tZXRhX3Jl ZmVyZW5jZXMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorZGlmZiAtTmF1ciBvbGQvQnVpbGQuUEwg bmV3L0J1aWxkLlBMCistLS0gb2xkL0J1aWxkLlBMCTIwMTQtMDQtMDkgMTg6MTI6MTguMDAwMDAw MDAwICsxMDAwCisrKysgbmV3L0J1aWxkLlBMCTIwMTQtMDQtMTMgMjI6MDE6NTcuODkwNjE2MzYy ICsxMDAwCitAQCAtMTIsOCArMTIsNiBAQAorIHVzZSBNb2R1bGU6OkJ1aWxkOworIHVzZSBGaWxl OjpCYXNlbmFtZTsKKyB1c2UgRmlsZTo6U3BlYzsKKy11c2UgQ1BBTjo6TWV0YTsKKy11c2UgQ1BB Tjo6TWV0YTo6UHJlcmVxczsKKyAKKyBteSAlYXJncyA9ICgKKyAgICAgbGljZW5zZSAgICAgICAg ICAgICAgPT4gJ3BlcmwnLAorQEAgLTUzLDIwICs1MSwzIEBACisgKS0+bmV3KCVhcmdzKTsKKyAk YnVpbGRlci0+Y3JlYXRlX2J1aWxkX3NjcmlwdCgpOworIAorLW15ICRtYm1ldGEgPSBDUEFOOjpN ZXRhLT5sb2FkX2ZpbGUoJ01ZTUVUQS5qc29uJyk7CistbXkgJG1ldGEgPSBDUEFOOjpNZXRhLT5s b2FkX2ZpbGUoJ01FVEEuanNvbicpOworLW15ICRwcmVyZXFzX2hhc2ggPSBDUEFOOjpNZXRhOjpQ cmVyZXFzLT5uZXcoCistICAgICRtZXRhLT5wcmVyZXFzCistKS0+d2l0aF9tZXJnZWRfcHJlcmVx cygKKy0gICAgQ1BBTjo6TWV0YTo6UHJlcmVxcy0+bmV3KCRtYm1ldGEtPnByZXJlcXMpCistKS0+ YXNfc3RyaW5nX2hhc2g7CistbXkgJG15bWV0YSA9IENQQU46Ok1ldGEtPm5ldygKKy0gICAgewor LSAgICAgICAgJXskbWV0YS0+YXNfc3RydWN0fSwKKy0gICAgICAgIHByZXJlcXMgPT4gJHByZXJl cXNfaGFzaAorLSAgICB9CistKTsKKy1wcmludCAiTWVyZ2luZyBjcGFuZmlsZSBwcmVyZXFzIHRv IE1ZTUVUQS55bWxcbiI7CistJG15bWV0YS0+c2F2ZSgnTVlNRVRBLnltbCcsIHsgdmVyc2lvbiA9 PiAxLjQgfSk7CistcHJpbnQgIk1lcmdpbmcgY3BhbmZpbGUgcHJlcmVxcyB0byBNWU1FVEEuanNv blxuIjsKKy0kbXltZXRhLT5zYXZlKCdNWU1FVEEuanNvbicsIHsgdmVyc2lvbiA9PiAyIH0pOwoK ZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IGU2OWRlMjkuLjQ4MzRhNjEgMTAw NjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMCwwICsxIEBACis1MjJiN2Q1OTFi MGU5MjA2Mzg1MzUyYTY5YjVmZDg1ZiAgUHJvdG9jb2wtV2ViU29ja2V0LTAuMTcudGFyLmd6Cgpk aWZmIC0tZ2l0IGEvdGVzdF9zaW1wbGVfaW5jbHVkZS5wYXRjaCBiL3Rlc3Rfc2ltcGxlX2luY2x1 ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1OGViNgotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3Rfc2ltcGxlX2luY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSw2MTE0 IEBACitkaWZmIC1OYXVyIG9sZC90ZXN0X3NpbXBsZV9wYXRjaC9saWIvVGVzdC9CdWlsZGVyL0lP L1NjYWxhci5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9JTy9TY2Fs YXIucG0KKy0tLSBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9JTy9TY2Fs YXIucG0JMTk3MC0wMS0wMSAxMDowMDowMC4wMDAwMDAwMDAgKzEwMDAKKysrKyBuZXcvdGVzdF9z aW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9JTy9TY2FsYXIucG0JMjAxNC0wMy0yNiAyMTo0 ODoxMS41MTAyNTc2MTIgKzExMDAKK0BAIC0wLDAgKzEsNjU4IEBACisrcGFja2FnZSBUZXN0OjpC dWlsZGVyOjpJTzo6U2NhbGFyOworKworKworKz1oZWFkMSBOQU1FCisrCisrVGVzdDo6QnVpbGRl cjo6SU86OlNjYWxhciAtIEEgY29weSBvZiBJTzo6U2NhbGFyIGZvciBUZXN0OjpCdWlsZGVyCisr CisrPWhlYWQxIERFU0NSSVBUSU9OCisrCisrVGhpcyBpcyBhIGNvcHkgb2YgSU86OlNjYWxhciB3 aGljaCBzaGlwcyB3aXRoIFRlc3Q6OkJ1aWxkZXIgdG8KKytzdXBwb3J0IHNjYWxhciByZWZlcmVu Y2VzIGFzIGZpbGVoYW5kbGVzIG9uIFBlcmwgNS42LiAgTmV3ZXIKKyt2ZXJzaW9ucyBvZiBQZXJs IHNpbXBseSB1c2UgQzw8b3BlbigpPj4ncyBidWlsdCBpbiBzdXBwb3J0LgorKworK1Rlc3Q6OkJ1 aWxkZXIgY2FuIG5vdCBoYXZlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIHdpdGhvdXQK KytjYXJlZnVsIGNvbnNpZGVyYXRpb24sIHNvIGl0cyBzaW1wbHkgYmVlbiBjb3BpZWQgaW50byB0 aGUgZGlzdHJpYnV0aW9uLgorKworKz1oZWFkMSBDT1BZUklHSFQgYW5kIExJQ0VOU0UKKysKKytU aGlzIGZpbGUgY2FtZSBmcm9tIHRoZSAiSU8tc3RyaW5neSIgUGVybDUgdG9vbGtpdC4KKysKKytD b3B5cmlnaHQgKGMpIDE5OTYgYnkgRXJ5cS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrQ29weXJp Z2h0IChjKSAxOTk5LDIwMDEgYnkgWmVlR2VlIFNvZnR3YXJlIEluYy4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrCisrVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorK21vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJs IGl0c2VsZi4KKysKKysKKys9Y3V0CisrCisrIyBUaGlzIGlzIGNvcGllZCBjb2RlLCBJIGRvbid0 IGNhcmUuCisrIyNubyBjcml0aWMKKysKKyt1c2UgQ2FycDsKKyt1c2Ugc3RyaWN0OworK3VzZSB2 YXJzIHF3KCRWRVJTSU9OIEBJU0EpOworK3VzZSBJTzo6SGFuZGxlOworKworK3VzZSA1LjAwNTsK KysKKysjIyMgVGhlIHBhY2thZ2UgdmVyc2lvbiwgYm90aCBpbiAxLjIzIHN0eWxlICphbmQqIHVz YWJsZSBieSBNYWtlTWFrZXI6CisrJFZFUlNJT04gPSAiMi4xMTAiOworKworKyMjIyBJbmhlcml0 YW5jZToKKytASVNBID0gcXcoSU86OkhhbmRsZSk7CisrCisrIz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKworKz1oZWFkMiBDb25zdHJ1Y3Rpb24KKysKKys9b3ZlciA0CisrCisrPWN1 dAorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRlbSBuZXcgW0FS R1MuLi5dCisrCisrSTxDbGFzcyBtZXRob2QuPgorK1JldHVybiBhIG5ldywgdW5hdHRhY2hlZCBz Y2FsYXIgaGFuZGxlLgorK0lmIGFueSBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGV5J3JlIHNlbnQg dG8gb3BlbigpLgorKworKz1jdXQKKysKKytzdWIgbmV3IHsKKysgICAgbXkgJHByb3RvID0gc2hp ZnQ7CisrICAgIG15ICRjbGFzcyA9IHJlZigkcHJvdG8pIHx8ICRwcm90bzsKKysgICAgbXkgJHNl bGYgPSBibGVzcyBcZG8geyBsb2NhbCAqRkggfSwgJGNsYXNzOworKyAgICB0aWUgKiRzZWxmLCAk Y2xhc3MsICRzZWxmOworKyAgICAkc2VsZi0+b3BlbihAXyk7ICAgIyMjIG9wZW4gb24gYW5vbnlt b3VzIGJ5IGRlZmF1bHQKKysgICAgJHNlbGY7CisrfQorK3N1YiBERVNUUk9ZIHsKKysgICAgc2hp ZnQtPmNsb3NlOworK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisr PWl0ZW0gb3BlbiBbU0NBTEFSUkVGXQorKworK0k8SW5zdGFuY2UgbWV0aG9kLj4KKytPcGVuIHRo ZSBzY2FsYXIgaGFuZGxlIG9uIGEgbmV3IHNjYWxhciwgcG9pbnRlZCB0byBieSBTQ0FMQVJSRUYu CisrSWYgbm8gU0NBTEFSUkVGIGlzIGdpdmVuLCBhICJwcml2YXRlIiBzY2FsYXIgaXMgY3JlYXRl ZCB0byBob2xkCisrdGhlIGZpbGUgZGF0YS4KKysKKytSZXR1cm5zIHRoZSBzZWxmIG9iamVjdCBv biBzdWNjZXNzLCB1bmRlZmluZWQgb24gZXJyb3IuCisrCisrPWN1dAorKworK3N1YiBvcGVuIHsK KysgICAgbXkgKCRzZWxmLCAkc3JlZikgPSBAXzsKKysKKysgICAgIyMjIFNhbml0eToKKysgICAg ZGVmaW5lZCgkc3JlZikgb3IgZG8ge215ICRzID0gJyc7ICRzcmVmID0gXCRzfTsKKysgICAgKHJl Zigkc3JlZikgZXEgIlNDQUxBUiIpIG9yIGNyb2FrICJvcGVuKCkgbmVlZHMgYSByZWYgdG8gYSBz Y2FsYXIiOworKworKyAgICAjIyMgU2V0dXA6CisrICAgICokc2VsZi0+e1Bvc30gPSAwOyAgICAg ICAgICAjIyMgc2VlayBwb3NpdGlvbgorKyAgICAqJHNlbGYtPntTUn0gID0gJHNyZWY7ICAgICAg IyMjIHNjYWxhciByZWZlcmVuY2UKKysgICAgJHNlbGY7CisrfQorKworKyMtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRlbSBvcGVuZWQKKysKKytJPEluc3RhbmNlIG1ldGhv ZC4+CisrSXMgdGhlIHNjYWxhciBoYW5kbGUgb3BlbmVkIG9uIHNvbWV0aGluZz8KKysKKys9Y3V0 CisrCisrc3ViIG9wZW5lZCB7CisrICAgICp7c2hpZnQoKX0tPntTUn07CisrfQorKworKyMtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRlbSBjbG9zZQorKworK0k8SW5zdGFu Y2UgbWV0aG9kLj4KKytEaXNhc3NvY2lhdGUgdGhlIHNjYWxhciBoYW5kbGUgZnJvbSBpdHMgdW5k ZXJseWluZyBzY2FsYXIuCisrRG9uZSBhdXRvbWF0aWNhbGx5IG9uIGRlc3Ryb3kuCisrCisrPWN1 dAorKworK3N1YiBjbG9zZSB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAgICV7KiRzZWxm fSA9ICgpOworKyAgICAxOworK30KKysKKys9YmFjaworKworKz1jdXQKKysKKysKKysKKysjPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrPWhlYWQyIElucHV0IGFuZCBvdXRwdXQK KysKKys9b3ZlciA0CisrCisrPWN1dAorKworKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKysKKys9aXRlbSBmbHVzaAorKworK0k8SW5zdGFuY2UgbWV0aG9kLj4KKytOby1vcCwg cHJvdmlkZWQgZm9yIE9PIGNvbXBhdGliaWxpdHkuCisrCisrPWN1dAorKworK3N1YiBmbHVzaCB7 ICIwIGJ1dCB0cnVlIiB9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKwor Kz1pdGVtIGdldGMKKysKKytJPEluc3RhbmNlIG1ldGhvZC4+CisrUmV0dXJuIHRoZSBuZXh0IGNo YXJhY3Rlciwgb3IgdW5kZWYgaWYgbm9uZSByZW1haW4uCisrCisrPWN1dAorKworK3N1YiBnZXRj IHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysKKysgICAgIyMjIFJldHVybiB1bmRlZiByaWdo dCBhd2F5IGlmIGF0IEVPRjsgZWxzZSwgbW92ZSBwb3MgZm9yd2FyZDoKKysgICAgcmV0dXJuIHVu ZGVmIGlmICRzZWxmLT5lb2Y7CisrICAgIHN1YnN0cigkeyokc2VsZi0+e1NSfX0sICokc2VsZi0+ e1Bvc30rKywgMSk7CisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysK Kys9aXRlbSBnZXRsaW5lCisrCisrSTxJbnN0YW5jZSBtZXRob2QuPgorK1JldHVybiB0aGUgbmV4 dCBsaW5lLCBvciB1bmRlZiBvbiBlbmQgb2Ygc3RyaW5nLgorK0NhbiBzYWZlbHkgYmUgY2FsbGVk IGluIGFuIGFycmF5IGNvbnRleHQuCisrQ3VycmVudGx5LCBsaW5lcyBhcmUgZGVsaW1pdGVkIGJ5 ICJcbiIuCisrCisrPWN1dAorKworK3N1YiBnZXRsaW5lIHsKKysgICAgbXkgJHNlbGYgPSBzaGlm dDsKKysKKysgICAgIyMjIFJldHVybiB1bmRlZiByaWdodCBhd2F5IGlmIGF0IEVPRjoKKysgICAg cmV0dXJuIHVuZGVmIGlmICRzZWxmLT5lb2Y7CisrCisrICAgICMjIyBHZXQgbmV4dCBsaW5lOgor KyAgICBteSAkc3IgPSAqJHNlbGYtPntTUn07CisrICAgIG15ICRpICA9ICokc2VsZi0+e1Bvc307 CSAgICAgICAgIyMjIFN0YXJ0IG1hdGNoaW5nIGF0IHRoaXMgcG9pbnQuCisrCisrICAgICMjIyBN aW5pbWFsIGltcGFjdCBpbXBsZW1lbnRhdGlvbiEKKysgICAgIyMjIFdlIGRvIHRoZSBmYXN0IGZh c3QgdGhpbmcgKG5vIHJlZ2V4cHMpIGlmIHVzaW5nIHRoZQorKyAgICAjIyMgY2xhc3NpYyBpbnB1 dCByZWNvcmQgc2VwYXJhdG9yLgorKworKyAgICAjIyMgQ2FzZSAxOiAkLyBpcyB1bmRlZjogc2x1 cnAgYWxsLi4uCisrICAgIGlmICAgICghZGVmaW5lZCgkLykpIHsKKysJKiRzZWxmLT57UG9zfSA9 IGxlbmd0aCAkJHNyOworKyAgICAgICAgcmV0dXJuIHN1YnN0cigkJHNyLCAkaSk7CisrICAgIH0K KysKKysgICAgIyMjIENhc2UgMjogJC8gaXMgIlxuIjogem9vbSB6b29tIHpvb20uLi4KKysgICAg ZWxzaWYgKCQvIGVxICJcMDEyIikgeworKworKyAgICAgICAgIyMjIFNlZWsgYWhlYWQgZm9yICJc biIuLi4geWVzLCB0aGlzIHJlYWxseSBpcyBmYXN0ZXIgdGhhbiByZWdleHBzLgorKyAgICAgICAg bXkgJGxlbiA9IGxlbmd0aCgkJHNyKTsKKysgICAgICAgIGZvciAoOyAkaSA8ICRsZW47ICsrJGkp IHsKKysgICAgICAgICAgIGxhc3QgaWYgb3JkIChzdWJzdHIgKCQkc3IsICRpLCAxKSkgPT0gMTA7 CisrICAgICAgICB9CisrCisrICAgICAgICAjIyMgRXh0cmFjdCB0aGUgbGluZToKKysgICAgICAg IG15ICRsaW5lOworKyAgICAgICAgaWYgKCRpIDwgJGxlbikgeyAgICAgICAgICAgICAgICAjIyMg V2UgZm91bmQgYSAiXG4iOgorKyAgICAgICAgICAgICRsaW5lID0gc3Vic3RyICgkJHNyLCAqJHNl bGYtPntQb3N9LCAkaSAtICokc2VsZi0+e1Bvc30gKyAxKTsKKysgICAgICAgICAgICAqJHNlbGYt PntQb3N9ID0gJGkrMTsgICAgICAgICAgICAjIyMgUmVtZW1iZXIgd2hlcmUgd2UgZmluaXNoZWQg dXAuCisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICMjIyBObyAiXG4iOyBzbHVycCB0aGUgcmVtYWluZGVyOgorKyAgICAgICAgICAgICRsaW5lID0g c3Vic3RyICgkJHNyLCAqJHNlbGYtPntQb3N9LCAkaSAtICokc2VsZi0+e1Bvc30pOworKyAgICAg ICAgICAgICokc2VsZi0+e1Bvc30gPSAkbGVuOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJu ICRsaW5lOworKyAgICB9CisrCisrICAgICMjIyBDYXNlIDM6ICQvIGlzIHJlZiB0byBpbnQuIERv IGZpeGVkLXNpemUgcmVjb3Jkcy4KKysgICAgIyMjICAgICAgICAoVGhhbmtzIHRvIERvbWluaXF1 ZSBRdWF0cmF2YXV4LikKKysgICAgZWxzaWYgKHJlZigkLykpIHsKKysgICAgICAgIG15ICRsZW4g PSBsZW5ndGgoJCRzcik7CisrCQlteSAkaSA9ICR7JC99ICsgMDsKKysJCW15ICRsaW5lID0gc3Vi c3RyICgkJHNyLCAqJHNlbGYtPntQb3N9LCAkaSk7CisrCQkqJHNlbGYtPntQb3N9ICs9ICRpOwor KyAgICAgICAgKiRzZWxmLT57UG9zfSA9ICRsZW4gaWYgKCokc2VsZi0+e1Bvc30gPiAkbGVuKTsK KysJCXJldHVybiAkbGluZTsKKysgICAgfQorKworKyAgICAjIyMgQ2FzZSA0OiAkLyBpcyBlaXRo ZXIgIiIgKHBhcmFncmFwaHMpIG9yIHNvbWV0aGluZyB3ZWlyZC4uLgorKyAgICAjIyMgICAgICAg ICBUaGlzIGlzIEdyYWhhbSdzIGdlbmVyYWwtcHVycG9zZSBzdHVmZiwgd2hpY2ggbWlnaHQgYmUK KysgICAgIyMjICAgICAgICAgYSB0YWQgc2xvd2VyIHRoYW4gQ2FzZSAyIGZvciB0eXBpY2FsIGRh dGEsIGJlY2F1c2UKKysgICAgIyMjICAgICAgICAgb2YgdGhlIHJlZ2V4cHMuCisrICAgIGVsc2Ug eworKyAgICAgICAgcG9zKCQkc3IpID0gJGk7CisrCisrCSMjIyBJZiBpbiBwYXJhZ3JhcGggbW9k ZSwgc2tpcCBsZWFkaW5nIGxpbmVzIChhbmQgdXBkYXRlIGkhKToKKysgICAgICAgIGxlbmd0aCgk Lykgb3IKKysJICAgICgoJCRzciA9fiBtL1xHXG4qL2cpIGFuZCAoJGkgPSBwb3MoJCRzcikpKTsK KysKKysgICAgICAgICMjIyBJZiB3ZSBzZWUgdGhlIHNlcGFyYXRvciBpbiB0aGUgYnVmZmVyIGFo ZWFkLi4uCisrICAgICAgICBpZiAobGVuZ3RoKCQvKQorKwkgICAgPyAgJCRzciA9fiBtLFxRJC9c RSxnICAgICAgICAgICMjIyAgIChvcmRpbmFyeSBzZXApIFRCRDogcHJlY29tcCEKKysgICAgICAg ICAgICA6ICAkJHNyID1+IG0sXG5cbixnICAgICAgICAgICAgIyMjICAgKGEgcGFyYWdyYXBoKQor KyAgICAgICAgICAgICkgeworKyAgICAgICAgICAgICokc2VsZi0+e1Bvc30gPSBwb3MgJCRzcjsK KysgICAgICAgICAgICByZXR1cm4gc3Vic3RyKCQkc3IsICRpLCAqJHNlbGYtPntQb3N9LSRpKTsK KysgICAgICAgIH0KKysgICAgICAgICMjIyBFbHNlIGlmIG5vIHNlcGFyYXRvciByZW1haW5zLCBq dXN0IHNsdXJwIHRoZSByZXN0OgorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgKiRzZWxm LT57UG9zfSA9IGxlbmd0aCAkJHNyOworKyAgICAgICAgICAgIHJldHVybiBzdWJzdHIoJCRzciwg JGkpOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKysKKys9aXRlbSBnZXRsaW5lcworKworK0k8SW5zdGFuY2UgbWV0aG9kLj4KKytH ZXQgYWxsIHJlbWFpbmluZyBsaW5lcy4KKytJdCB3aWxsIGNyb2FrKCkgaWYgYWNjaWRlbnRhbGx5 IGNhbGxlZCBpbiBhIHNjYWxhciBjb250ZXh0LgorKworKz1jdXQKKysKKytzdWIgZ2V0bGluZXMg eworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKyAgICB3YW50YXJyYXkgb3IgY3JvYWsoImNhbid0 IGNhbGwgZ2V0bGluZXMgaW4gc2NhbGFyIGNvbnRleHQhIik7CisrICAgIG15ICgkbGluZSwgQGxp bmVzKTsKKysgICAgcHVzaCBAbGluZXMsICRsaW5lIHdoaWxlIChkZWZpbmVkKCRsaW5lID0gJHNl bGYtPmdldGxpbmUpKTsKKysgICAgQGxpbmVzOworK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisrCisrPWl0ZW0gcHJpbnQgQVJHUy4uLgorKworK0k8SW5zdGFuY2UgbWV0 aG9kLj4KKytQcmludCBBUkdTIHRvIHRoZSB1bmRlcmx5aW5nIHNjYWxhci4KKysKKytCPFdhcm5p bmc6PiB0aGlzIGNvbnRpbnVlcyB0byBhbHdheXMgY2F1c2UgYSBzZWVrIHRvIHRoZSBlbmQKKytv ZiB0aGUgc3RyaW5nLCBidXQgaWYgeW91IHBlcmZvcm0gc2VlaygpcyBhbmQgdGVsbCgpcywgaXQg aXMKKytzdGlsbCBzYWZlciB0byBleHBsaWNpdGx5IHNlZWstdG8tZW5kIGJlZm9yZSBzdWJzZXF1 ZW50IHByaW50KClzLgorKworKz1jdXQKKysKKytzdWIgcHJpbnQgeworKyAgICBteSAkc2VsZiA9 IHNoaWZ0OworKyAgICAqJHNlbGYtPntQb3N9ID0gbGVuZ3RoKCR7KiRzZWxmLT57U1J9fSAuPSBq b2luKCcnLCBAXykgLiAoZGVmaW5lZCgkXCkgPyAkXCA6ICIiKSk7CisrICAgIDE7CisrfQorK3N1 YiBfdW5zYWZlX3ByaW50IHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysgICAgbXkgJGFwcGVu ZCA9IGpvaW4oJycsIEBfKSAuICRcOworKyAgICAkeyokc2VsZi0+e1NSfX0gLj0gJGFwcGVuZDsK KysgICAgKiRzZWxmLT57UG9zfSAgICs9IGxlbmd0aCgkYXBwZW5kKTsKKysgICAgMTsKKyt9Cisr c3ViIF9vbGRfcHJpbnQgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKyAgICAkeyokc2VsZi0+ e1NSfX0gLj0gam9pbignJywgQF8pIC4gJFw7CisrICAgICokc2VsZi0+e1Bvc30gPSBsZW5ndGgo JHsqJHNlbGYtPntTUn19KTsKKysgICAgMTsKKyt9CisrCisrCisrIy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorKworKz1pdGVtIHJlYWQgQlVGLCBOQllURVMsIFtPRkZTRVRdCisrCisr STxJbnN0YW5jZSBtZXRob2QuPgorK1JlYWQgc29tZSBieXRlcyBmcm9tIHRoZSBzY2FsYXIuCisr UmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIDAgb24gZW5kLW9mLWZp bGUsIHVuZGVmIG9uIGVycm9yLgorKworKz1jdXQKKysKKytzdWIgcmVhZCB7CisrICAgIG15ICRz ZWxmID0gJF9bMF07CisrICAgIG15ICRuICAgID0gJF9bMl07CisrICAgIG15ICRvZmYgID0gJF9b M10gfHwgMDsKKysKKysgICAgbXkgJHJlYWQgPSBzdWJzdHIoJHsqJHNlbGYtPntTUn19LCAqJHNl bGYtPntQb3N9LCAkbik7CisrICAgICRuID0gbGVuZ3RoKCRyZWFkKTsKKysgICAgKiRzZWxmLT57 UG9zfSArPSAkbjsKKysgICAgKCRvZmYgPyBzdWJzdHIoJF9bMV0sICRvZmYpIDogJF9bMV0pID0g JHJlYWQ7CisrICAgIHJldHVybiAkbjsKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorKworKz1pdGVtIHdyaXRlIEJVRiwgTkJZVEVTLCBbT0ZGU0VUXQorKworK0k8SW5z dGFuY2UgbWV0aG9kLj4KKytXcml0ZSBzb21lIGJ5dGVzIHRvIHRoZSBzY2FsYXIuCisrCisrPWN1 dAorKworK3N1YiB3cml0ZSB7CisrICAgIG15ICRzZWxmID0gJF9bMF07CisrICAgIG15ICRuICAg ID0gJF9bMl07CisrICAgIG15ICRvZmYgID0gJF9bM10gfHwgMDsKKysKKysgICAgbXkgJGRhdGEg PSBzdWJzdHIoJF9bMV0sICRvZmYsICRuKTsKKysgICAgJG4gPSBsZW5ndGgoJGRhdGEpOworKyAg ICAkc2VsZi0+cHJpbnQoJGRhdGEpOworKyAgICByZXR1cm4gJG47CisrfQorKworKyMtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRlbSBzeXNyZWFkIEJVRiwgTEVOLCBbT0ZG U0VUXQorKworK0k8SW5zdGFuY2UgbWV0aG9kLj4KKytSZWFkIHNvbWUgYnl0ZXMgZnJvbSB0aGUg c2NhbGFyLgorK1JldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkLCAwIG9u IGVuZC1vZi1maWxlLCB1bmRlZiBvbiBlcnJvci4KKysKKys9Y3V0CisrCisrc3ViIHN5c3JlYWQg eworKyAgbXkgJHNlbGYgPSBzaGlmdDsKKysgICRzZWxmLT5yZWFkKEBfKTsKKyt9CisrCisrIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKz1pdGVtIHN5c3dyaXRlIEJVRiwgTkJZ VEVTLCBbT0ZGU0VUXQorKworK0k8SW5zdGFuY2UgbWV0aG9kLj4KKytXcml0ZSBzb21lIGJ5dGVz IHRvIHRoZSBzY2FsYXIuCisrCisrPWN1dAorKworK3N1YiBzeXN3cml0ZSB7CisrICBteSAkc2Vs ZiA9IHNoaWZ0OworKyAgJHNlbGYtPndyaXRlKEBfKTsKKyt9CisrCisrPWJhY2sKKysKKys9Y3V0 CisrCisrCisrIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKz1oZWFkMiBTZWVr aW5nL3RlbGxpbmcgYW5kIG90aGVyIGF0dHJpYnV0ZXMKKysKKys9b3ZlciA0CisrCisrPWN1dAor KworKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRlbSBhdXRvZmx1 c2gKKysKKytJPEluc3RhbmNlIG1ldGhvZC4+CisrTm8tb3AsIHByb3ZpZGVkIGZvciBPTyBjb21w YXRpYmlsaXR5LgorKworKz1jdXQKKysKKytzdWIgYXV0b2ZsdXNoIHt9CisrCisrIy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKz1pdGVtIGJpbm1vZGUKKysKKytJPEluc3RhbmNl IG1ldGhvZC4+CisrTm8tb3AsIHByb3ZpZGVkIGZvciBPTyBjb21wYXRpYmlsaXR5LgorKworKz1j dXQKKysKKytzdWIgYmlubW9kZSB7fQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKysKKys9aXRlbSBjbGVhcmVycgorKworK0k8SW5zdGFuY2UgbWV0aG9kLj4gIENsZWFyIHRo ZSBlcnJvciBhbmQgRU9GIGZsYWdzLiAgQSBuby1vcC4KKysKKys9Y3V0CisrCisrc3ViIGNsZWFy ZXJyIHsgMSB9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKz1pdGVt IGVvZgorKworK0k8SW5zdGFuY2UgbWV0aG9kLj4gIEFyZSB3ZSBhdCBlbmQgb2YgZmlsZT8KKysK Kys9Y3V0CisrCisrc3ViIGVvZiB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAgICgqJHNl bGYtPntQb3N9ID49IGxlbmd0aCgkeyokc2VsZi0+e1NSfX0pKTsKKyt9CisrCisrIy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKz1pdGVtIHNlZWsgT0ZGU0VULCBXSEVOQ0UKKysK KytJPEluc3RhbmNlIG1ldGhvZC4+ICBTZWVrIHRvIGEgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIHN0 cmVhbS4KKysKKys9Y3V0CisrCisrc3ViIHNlZWsgeworKyAgICBteSAoJHNlbGYsICRwb3MsICR3 aGVuY2UpID0gQF87CisrICAgIG15ICRlb2Zwb3MgPSBsZW5ndGgoJHsqJHNlbGYtPntTUn19KTsK KysKKysgICAgIyMjIFNlZWs6CisrICAgIGlmICAgICgkd2hlbmNlID09IDApIHsgKiRzZWxmLT57 UG9zfSA9ICRwb3MgfSAgICAgICAgICAgICAjIyMgU0VFS19TRVQKKysgICAgZWxzaWYgKCR3aGVu Y2UgPT0gMSkgeyAqJHNlbGYtPntQb3N9ICs9ICRwb3MgfSAgICAgICAgICAgICMjIyBTRUVLX0NV UgorKyAgICBlbHNpZiAoJHdoZW5jZSA9PSAyKSB7ICokc2VsZi0+e1Bvc30gPSAkZW9mcG9zICsg JHBvc30gICAgIyMjIFNFRUtfRU5ECisrICAgIGVsc2UgICAgICAgICAgICAgICAgIHsgY3JvYWsg ImJhZCBzZWVrIHdoZW5jZSAoJHdoZW5jZSkiIH0KKysKKysgICAgIyMjIEZpeHVwOgorKyAgICBp ZiAoKiRzZWxmLT57UG9zfSA8IDApICAgICAgIHsgKiRzZWxmLT57UG9zfSA9IDAgfQorKyAgICBp ZiAoKiRzZWxmLT57UG9zfSA+ICRlb2Zwb3MpIHsgKiRzZWxmLT57UG9zfSA9ICRlb2Zwb3MgfQor KyAgICByZXR1cm4gMTsKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor KworKz1pdGVtIHN5c3NlZWsgT0ZGU0VULCBXSEVOQ0UKKysKKytJPEluc3RhbmNlIG1ldGhvZC4+ IElkZW50aWNhbCB0byBDPHNlZWsgT0ZGU0VULCBXSEVOQ0U+LCBJPHEudi4+CisrCisrPWN1dAor KworK3N1YiBzeXNzZWVrIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysgICAgJHNlbGYtPnNl ZWsgKEBfKTsKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworKz1p dGVtIHRlbGwKKysKKytJPEluc3RhbmNlIG1ldGhvZC4+CisrUmV0dXJuIHRoZSBjdXJyZW50IHBv c2l0aW9uIGluIHRoZSBzdHJlYW0sIGFzIGEgbnVtZXJpYyBvZmZzZXQuCisrCisrPWN1dAorKwor K3N1YiB0ZWxsIHsgKntzaGlmdCgpfS0+e1Bvc30gfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKysKKys9aXRlbSAgdXNlX1JTIFtZRVNOT10KKysKKytJPEluc3RhbmNlIG1l dGhvZC4+CisrQjxEZXByZWNhdGVkIGFuZCBpZ25vcmVkLj4KKytPYmV5IHRoZSBjdXJyZW50IHNl dHRpbmcgb2YgJC8sIGxpa2UgSU86OkhhbmRsZSBkb2VzPworK0RlZmF1bHQgaXMgZmFsc2UgaW4g MS54LCBidXQgY29sZC13ZWxkZWQgdHJ1ZSBpbiAyLnggYW5kIGxhdGVyLgorKworKz1jdXQKKysK KytzdWIgdXNlX1JTIHsKKysgICAgbXkgKCRzZWxmLCAkeWVzbm8pID0gQF87CisrICAgIGNhcnAg InVzZV9SUyBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVkOyBcJC8gaXMgYWx3YXlzIGNvbnN1bHRl ZFxuIjsKKysgfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRl bSBzZXRwb3MgUE9TCisrCisrSTxJbnN0YW5jZSBtZXRob2QuPgorK1NldCB0aGUgY3VycmVudCBw b3NpdGlvbiwgdXNpbmcgdGhlIG9wYXF1ZSB2YWx1ZSByZXR1cm5lZCBieSBDPGdldHBvcygpPi4K KysKKys9Y3V0CisrCisrc3ViIHNldHBvcyB7IHNoaWZ0LT5zZWVrKCRfWzBdLDApIH0KKysKKysj LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrPWl0ZW0gZ2V0cG9zCisrCisrSTxJ bnN0YW5jZSBtZXRob2QuPgorK1JldHVybiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3Ry aW5nLCBhcyBhbiBvcGFxdWUgb2JqZWN0LgorKworKz1jdXQKKysKKysqZ2V0cG9zID0gXCZ0ZWxs OworKworKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKys9aXRlbSBzcmVm CisrCisrSTxJbnN0YW5jZSBtZXRob2QuPgorK1JldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgdW5k ZXJseWluZyBzY2FsYXIuCisrCisrPWN1dAorKworK3N1YiBzcmVmIHsgKntzaGlmdCgpfS0+e1NS fSB9CisrCisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgVGllZCBoYW5k bGUgbWV0aG9kcy4uLgorKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysjIENv bnZlbnRpb25hbCB0aWVoYW5kbGUgaW50ZXJmYWNlOgorK3N1YiBUSUVIQU5ETEUgeworKyAgICAo KGRlZmluZWQoJF9bMV0pICYmIFVOSVZFUlNBTDo6aXNhKCRfWzFdLCBfX1BBQ0tBR0VfXykpCisr ICAgICA/ICRfWzFdCisrICAgICA6IHNoaWZ0LT5uZXcoQF8pKTsKKyt9Cisrc3ViIEdFVEMgICAg ICB7IHNoaWZ0LT5nZXRjKEBfKSB9Cisrc3ViIFBSSU5UICAgICB7IHNoaWZ0LT5wcmludChAXykg fQorK3N1YiBQUklOVEYgICAgeyBzaGlmdC0+cHJpbnQoc3ByaW50ZihzaGlmdCwgQF8pKSB9Cisr c3ViIFJFQUQgICAgICB7IHNoaWZ0LT5yZWFkKEBfKSB9Cisrc3ViIFJFQURMSU5FICB7IHdhbnRh cnJheSA/IHNoaWZ0LT5nZXRsaW5lcyhAXykgOiBzaGlmdC0+Z2V0bGluZShAXykgfQorK3N1YiBX UklURSAgICAgeyBzaGlmdC0+d3JpdGUoQF8pOyB9Cisrc3ViIENMT1NFICAgICB7IHNoaWZ0LT5j bG9zZShAXyk7IH0KKytzdWIgU0VFSyAgICAgIHsgc2hpZnQtPnNlZWsoQF8pOyB9Cisrc3ViIFRF TEwgICAgICB7IHNoaWZ0LT50ZWxsKEBfKTsgfQorK3N1YiBFT0YgICAgICAgeyBzaGlmdC0+ZW9m KEBfKTsgfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKysKKysxOworKworK19fRU5EX18KKysKKysKKysKKys9YmFjawor KworKz1jdXQKKysKKysKKys9aGVhZDEgV0FSTklOR1MKKysKKytQZXJsJ3MgVElFSEFORExFIHNw ZWMgd2FzIGluY29tcGxldGUgcHJpb3IgdG8gNS4wMDVfNTc7CisraXQgd2FzIG1pc3Npbmcgc3Vw cG9ydCBmb3IgQzxzZWVrKCk+LCBDPHRlbGwoKT4sIGFuZCBDPGVvZigpPi4KKytBdHRlbXB0aW5n IHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMgd2l0aCBhbiBJTzo6U2NhbGFyIHdpbGwgbm90IHdvcmsK KytwcmlvciB0byA1LjAwNV81Ny4gSU86OlNjYWxhciB3aWxsIG5vdCBoYXZlIHRoZSByZWxldmFu dCBtZXRob2RzCisraW52b2tlZDsgYW5kIGV2ZW4gd29yc2UsIHRoaXMga2luZCBvZiBidWcgY2Fu IGxpZSBkb3JtYW50IGZvciBhIHdoaWxlLgorK0lmIHlvdSB0dXJuIHdhcm5pbmdzIG9uICh2aWEg QzwkXlc+IG9yIEM8cGVybCAtdz4pLAorK2FuZCB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXMu Li4KKysKKysgICAgYXR0ZW1wdCB0byBzZWVrIG9uIHVub3BlbmVkIGZpbGVoYW5kbGUKKysKKysu Li50aGVuIHlvdSBhcmUgcHJvYmFibHkgdHJ5aW5nIHRvIHVzZSBvbmUgb2YgdGhlc2UgZnVuY3Rp b25zCisrb24gYW4gSU86OlNjYWxhciB3aXRoIGFuIG9sZCBQZXJsLiAgVGhlIHJlbWVkeSBpcyB0 byBzaW1wbHkKKyt1c2UgdGhlIE9PIHZlcnNpb247IGUuZy46CisrCisrICAgICRTSC0+c2Vlaygw LDApOyAgICAjIyMgR09PRDogd2lsbCB3b3JrIG9uIGFueSA1LjAwNQorKyAgICBzZWVrKCRTSCww LDApOyAgICAgIyMjIFdBUk5JTkc6IHdpbGwgb25seSB3b3JrIG9uIDUuMDA1XzU3IGFuZCBiZXlv bmQKKysKKysKKys9aGVhZDEgVkVSU0lPTgorKworKyRJZDogU2NhbGFyLnBtLHYgMS42IDIwMDUv MDIvMTAgMjE6MjE6NTMgZGZzIEV4cCAkCisrCisrCisrPWhlYWQxIEFVVEhPUlMKKysKKys9aGVh ZDIgUHJpbWFyeSBNYWludGFpbmVyCisrCisrRGF2aWQgRi4gU2tvbGwgKEY8ZGZzQHJvYXJpbmdw ZW5ndWluLmNvbT4pLgorKworKz1oZWFkMiBQcmluY2lwYWwgYXV0aG9yCisrCisrRXJ5cSAoRjxl cnlxQHplZWdlZS5jb20+KS4KKytQcmVzaWRlbnQsIFplZUdlZSBTb2Z0d2FyZSBJbmMgKEY8aHR0 cDovL3d3dy56ZWVnZWUuY29tPikuCisrCisrCisrPWhlYWQyIE90aGVyIGNvbnRyaWJ1dG9ycwor KworK1RoZSBmdWxsIHNldCBvZiBjb250cmlidXRvcnMgYWx3YXlzIGluY2x1ZGVzIHRoZSBmb2xr cyBtZW50aW9uZWQKKytpbiBMPElPOjpTdHJpbmd5LyJDSEFOR0UgTE9HIj4uICBCdXQganVzdCB0 aGUgc2FtZSwgc3BlY2lhbAorK3RoYW5rcyB0byB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGZv ciB0aGVpciBpbnZhbHVhYmxlIGNvbnRyaWJ1dGlvbnMKKysoaWYgSSd2ZSBmb3Jnb3R0ZW4gb3Ig bWlzc3BlbGxlZCB5b3VyIG5hbWUsIHBsZWFzZSBlbWFpbCBtZSEpOgorKworK0k8QW5keSBHbGV3 LD4KKytmb3IgY29udHJpYnV0aW5nIEM8Z2V0YygpPi4KKysKKytJPEJyYW5kb24gQnJvd25pbmcs PgorK2ZvciBzdWdnZXN0aW5nIEM8b3BlbmVkKCk+LgorKworK0k8RGF2aWQgUmljaHRlciw+Cisr Zm9yIGZpbmRpbmcgYW5kIGZpeGluZyB0aGUgYnVnIGluIEM8UFJJTlRGKCk+LgorKworK0k8RXJp YyBMLiBCcmluZSw+CisrZm9yIGhpcyBvZmZzZXQtdXNpbmcgcmVhZCgpIGFuZCB3cml0ZSgpIGlt cGxlbWVudGF0aW9ucy4KKysKKytJPFJpY2hhcmQgSm9uZXMsPgorK2ZvciBoaXMgcGF0Y2hlcyB0 byBtYXNzaXZlbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgQzxnZXRsaW5lKCk+CisrYW5k IGFkZCBDPHN5c3JlYWQ+IGFuZCBDPHN5c3dyaXRlPi4KKysKKytJPEIuIEsuIE94bGV5IChiaW5r bGV5KSw+CisrZm9yIHN0cmluZ2lmaWNhdGlvbiBhbmQgaW5oZXJpdGFuY2UgaW1wcm92ZW1lbnRz LAorK2FuZCBzdW5kcnkgZ29vZCBpZGVhcy4KKysKKytJPERvdWcgV2lsc29uLD4KKytmb3IgdGhl IElPOjpIYW5kbGUgaW5oZXJpdGFuY2UgYW5kIGF1dG9tYXRpYyB0aWUtaW5nLgorKworKworKz1o ZWFkMSBTRUUgQUxTTworKworK0w8SU86OlN0cmluZz4sIHdoaWNoIGlzIHF1aXRlIHNpbWlsYXIg YnV0IHdoaWNoIHdhcyBkZXNpZ25lZAorK21vcmUtcmVjZW50bHkgYW5kIHdpdGggYW4gSU86Okhh bmRsZS1saWtlIGludGVyZmFjZSBpbiBtaW5kLAorK3NvIHlvdSBjb3VsZCBtaXggT08tIGFuZCBu YXRpdmUtZmlsZWhhbmRsZSB1c2FnZSB3aXRob3V0IHVzaW5nIHRpZWQoKS4KKysKKytJPE5vdGU6 PiBhcyBvZiB2ZXJzaW9uIDIueCwgdGhlc2UgY2xhc3NlcyBhbGwgd29yayBsaWtlCisrdGhlaXIg SU86OkhhbmRsZSBjb3VudGVycGFydHMsIHNvIHdlIGhhdmUgY29tcGFyYWJsZQorK2Z1bmN0aW9u YWxpdHkgdG8gSU86OlN0cmluZy4KKysKKys9Y3V0CisrCitkaWZmIC1OYXVyIG9sZC90ZXN0X3Np bXBsZV9wYXRjaC9saWIvVGVzdC9CdWlsZGVyL01vZHVsZS5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0 Y2gvbGliL1Rlc3QvQnVpbGRlci9Nb2R1bGUucG0KKy0tLSBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gv bGliL1Rlc3QvQnVpbGRlci9Nb2R1bGUucG0JMTk3MC0wMS0wMSAxMDowMDowMC4wMDAwMDAwMDAg KzEwMDAKKysrKyBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9Nb2R1bGUu cG0JMjAxNC0wMy0yNiAyMTo0ODoxMS41MTAyNTc2MTIgKzExMDAKK0BAIC0wLDAgKzEsMTczIEBA CisrcGFja2FnZSBUZXN0OjpCdWlsZGVyOjpNb2R1bGU7CisrCisrdXNlIHN0cmljdDsKKysKKyt1 c2UgVGVzdDo6QnVpbGRlciAwLjk5OworKworK3JlcXVpcmUgRXhwb3J0ZXI7Cisrb3VyIEBJU0Eg PSBxdyhFeHBvcnRlcik7CisrCisrb3VyICRWRVJTSU9OID0gJzEuMDAxMDAzJzsKKyskVkVSU0lP TiA9IGV2YWwgJFZFUlNJT047ICAgICAgIyMgbm8gY3JpdGljIChCdWlsdGluRnVuY3Rpb25zOjpQ cm9oaWJpdFN0cmluZ3lFdmFsKQorKworKworKz1oZWFkMSBOQU1FCisrCisrVGVzdDo6QnVpbGRl cjo6TW9kdWxlIC0gQmFzZSBjbGFzcyBmb3IgdGVzdCBtb2R1bGVzCisrCisrPWhlYWQxIFNZTk9Q U0lTCisrCisrICAjIEVtdWxhdGVzIFRlc3Q6OlNpbXBsZQorKyAgcGFja2FnZSBZb3VyOjpNb2R1 bGU7CisrCisrICBteSAkQ0xBU1MgPSBfX1BBQ0tBR0VfXzsKKysKKysgIHVzZSBiYXNlICdUZXN0 OjpCdWlsZGVyOjpNb2R1bGUnOworKyAgQEVYUE9SVCA9IHF3KG9rKTsKKysKKysgIHN1YiBvayAo JDskKSB7CisrICAgICAgbXkgJHRiID0gJENMQVNTLT5idWlsZGVyOworKyAgICAgIHJldHVybiAk dGItPm9rKEBfKTsKKysgIH0KKysgIAorKyAgMTsKKysKKysKKys9aGVhZDEgREVTQ1JJUFRJT04K KysKKytUaGlzIGlzIGEgc3VwZXJjbGFzcyBmb3IgVGVzdDo6QnVpbGRlci1iYXNlZCBtb2R1bGVz LiAgSXQgcHJvdmlkZXMgYQorK2hhbmRmdWwgb2YgY29tbW9uIGZ1bmN0aW9uYWxpdHkgYW5kIGEg bWV0aG9kIG9mIGdldHRpbmcgYXQgdGhlIHVuZGVybHlpbmcKKytUZXN0OjpCdWlsZGVyIG9iamVj dC4KKysKKysKKys9aGVhZDIgSW1wb3J0aW5nCisrCisrVGVzdDo6QnVpbGRlcjo6TW9kdWxlIGlz IGEgc3ViY2xhc3Mgb2YgRXhwb3J0ZXIgd2hpY2ggbWVhbnMgeW91cgorK21vZHVsZSBpcyBhbHNv IGEgc3ViY2xhc3Mgb2YgRXhwb3J0ZXIuICBARVhQT1JULCBARVhQT1JUX09LLCBldGMuLi4KKyth bGwgYWN0IG5vcm1hbGx5LgorKworK0EgZmV3IG1ldGhvZHMgYXJlIHByb3ZpZGVkIHRvIGRvIHRo ZSBDPHVzZSBZb3VyOjpNb2R1bGUgdGVzdHMgPT4gMjM+IHBhcnQKKytmb3IgeW91LgorKworKz1o ZWFkMyBpbXBvcnQKKysKKytUZXN0OjpCdWlsZGVyOjpNb2R1bGUgcHJvdmlkZXMgYW4gaW1wb3J0 KCkgbWV0aG9kIHdoaWNoIGFjdHMgaW4gdGhlCisrc2FtZSBiYXNpYyB3YXkgYXMgVGVzdDo6TW9y ZSdzLCBzZXR0aW5nIHRoZSBwbGFuIGFuZCBjb250cm9sbGluZworK2V4cG9ydGluZyBvZiBmdW5j dGlvbnMgYW5kIHZhcmlhYmxlcy4gIFRoaXMgYWxsb3dzIHlvdXIgbW9kdWxlIHRvIHNldAorK3Ro ZSBwbGFuIGluZGVwZW5kZW50IG9mIFRlc3Q6Ok1vcmUuCisrCisrQWxsIGFyZ3VtZW50cyBwYXNz ZWQgdG8gaW1wb3J0KCkgYXJlIHBhc3NlZCBvbnRvIAorK0M8PCBZb3VyOjpNb2R1bGUtPmJ1aWxk ZXItPnBsYW4oKSA+PiB3aXRoIHRoZSBleGNlcHRpb24gb2YgCisrQzw8IGltcG9ydCA9Pltxdyh0 aGluZ3MgdG8gaW1wb3J0KV0gPj4uCisrCisrICAgIHVzZSBZb3VyOjpNb2R1bGUgaW1wb3J0ID0+ IFtxdyh0aGlzIHRoYXQpXSwgdGVzdHMgPT4gMjM7CisrCisrc2F5cyB0byBpbXBvcnQgdGhlIGZ1 bmN0aW9ucyB0aGlzKCkgYW5kIHRoYXQoKSBhcyB3ZWxsIGFzIHNldCB0aGUgcGxhbgorK3RvIGJl IDIzIHRlc3RzLgorKworK2ltcG9ydCgpIGFsc28gc2V0cyB0aGUgZXhwb3J0ZWRfdG8oKSBhdHRy aWJ1dGUgb2YgeW91ciBidWlsZGVyIHRvIGJlCisrdGhlIGNhbGxlciBvZiB0aGUgaW1wb3J0KCkg ZnVuY3Rpb24uCisrCisrQWRkaXRpb25hbCBiZWhhdmlvcnMgY2FuIGJlIGFkZGVkIHRvIHlvdXIg aW1wb3J0KCkgbWV0aG9kIGJ5IG92ZXJyaWRpbmcKKytpbXBvcnRfZXh0cmEoKS4KKysKKys9Y3V0 CisrCisrc3ViIGltcG9ydCB7CisrICAgIG15KCRjbGFzcykgPSBzaGlmdDsKKysKKysgICAgIyBE b24ndCBydW4gYWxsIHRoaXMgd2hlbiBsb2FkaW5nIG91cnNlbGYuCisrICAgIHJldHVybiAxIGlm ICRjbGFzcyBlcSAnVGVzdDo6QnVpbGRlcjo6TW9kdWxlJzsKKysKKysgICAgbXkgJHRlc3QgPSAk Y2xhc3MtPmJ1aWxkZXI7CisrCisrICAgIG15ICRjYWxsZXIgPSBjYWxsZXI7CisrCisrICAgICR0 ZXN0LT5leHBvcnRlZF90bygkY2FsbGVyKTsKKysKKysgICAgJGNsYXNzLT5pbXBvcnRfZXh0cmEo IFxAXyApOworKyAgICBteShAaW1wb3J0cykgPSAkY2xhc3MtPl9zdHJpcF9pbXBvcnRzKCBcQF8g KTsKKysKKysgICAgJHRlc3QtPnBsYW4oQF8pOworKworKyAgICAkY2xhc3MtPmV4cG9ydF90b19s ZXZlbCggMSwgJGNsYXNzLCBAaW1wb3J0cyApOworK30KKysKKytzdWIgX3N0cmlwX2ltcG9ydHMg eworKyAgICBteSAkY2xhc3MgPSBzaGlmdDsKKysgICAgbXkgJGxpc3QgID0gc2hpZnQ7CisrCisr ICAgIG15IEBpbXBvcnRzID0gKCk7CisrICAgIG15IEBvdGhlciAgID0gKCk7CisrICAgIG15ICRp ZHggICAgID0gMDsKKysgICAgd2hpbGUoICRpZHggPD0gJCN7JGxpc3R9ICkgeworKyAgICAgICAg bXkgJGl0ZW0gPSAkbGlzdC0+WyRpZHhdOworKworKyAgICAgICAgaWYoIGRlZmluZWQgJGl0ZW0g YW5kICRpdGVtIGVxICdpbXBvcnQnICkgeworKyAgICAgICAgICAgIHB1c2ggQGltcG9ydHMsIEB7 ICRsaXN0LT5bICRpZHggKyAxIF0gfTsKKysgICAgICAgICAgICAkaWR4Kys7CisrICAgICAgICB9 CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBwdXNoIEBvdGhlciwgJGl0ZW07CisrICAg ICAgICB9CisrCisrICAgICAgICAkaWR4Kys7CisrICAgIH0KKysKKysgICAgQCRsaXN0ID0gQG90 aGVyOworKworKyAgICByZXR1cm4gQGltcG9ydHM7CisrfQorKworKz1oZWFkMyBpbXBvcnRfZXh0 cmEKKysKKysgICAgWW91cjo6TW9kdWxlLT5pbXBvcnRfZXh0cmEoXEBpbXBvcnRfYXJncyk7Cisr CisraW1wb3J0X2V4dHJhKCkgaXMgY2FsbGVkIGJ5IGltcG9ydCgpLiAgSXQgcHJvdmlkZXMgYW4g b3Bwb3J0dW5pdHkgZm9yIHlvdQorK3RvIGFkZCBiZWhhdmlvcnMgdG8geW91ciBtb2R1bGUgYmFz ZWQgb24gaXRzIGltcG9ydCBsaXN0LgorKworK0FueSBleHRyYSBhcmd1bWVudHMgd2hpY2ggc2hv dWxkbid0IGJlIHBhc3NlZCBvbiB0byBwbGFuKCkgc2hvdWxkIGJlIAorK3N0cmlwcGVkIG9mZiBi eSB0aGlzIG1ldGhvZC4KKysKKytTZWUgVGVzdDo6TW9yZSBmb3IgYW4gZXhhbXBsZSBvZiBpdHMg dXNlLgorKworK0I8Tk9URT4gVGhpcyBtZWNoYW5pc20gaXMgSTxWRVJZIEFMUEhBIEFORCBMSUtF TFkgVE8gQ0hBTkdFPiBhcyBpdAorK2ZlZWxzIGxpa2UgYSBiaXQgb2YgYW4gdWdseSBoYWNrIGlu IGl0cyBjdXJyZW50IGZvcm0uCisrCisrPWN1dAorKworK3N1YiBpbXBvcnRfZXh0cmEgeyB9Cisr CisrPWhlYWQyIEJ1aWxkZXIKKysKKytUZXN0OjpCdWlsZGVyOjpNb2R1bGUgcHJvdmlkZXMgc29t ZSBtZXRob2RzIG9mIGdldHRpbmcgYXQgdGhlIHVuZGVybHlpbmcKKytUZXN0OjpCdWlsZGVyIG9i amVjdC4KKysKKys9aGVhZDMgYnVpbGRlcgorKworKyAgbXkgJGJ1aWxkZXIgPSBZb3VyOjpDbGFz cy0+YnVpbGRlcjsKKysKKytUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBUZXN0OjpCdWlsZGVyIG9i amVjdCBhc3NvY2lhdGVkIHdpdGggWW91cjo6Q2xhc3MuCisrSXQgaXMgbm90IGEgY29uc3RydWN0 b3Igc28geW91IGNhbiBjYWxsIGl0IGFzIG9mdGVuIGFzIHlvdSBsaWtlLgorKworK1RoaXMgaXMg dGhlIHByZWZlcnJlZCB3YXkgdG8gZ2V0IHRoZSBUZXN0OjpCdWlsZGVyIG9iamVjdC4gIFlvdSBz aG91bGQKKytJPG5vdD4gZ2V0IGl0IHZpYSBDPDwgVGVzdDo6QnVpbGRlci0+bmV3ID4+IGFzIHdh cyBwcmV2aW91c2x5CisrcmVjb21tZW5kZWQuCisrCisrVGhlIG9iamVjdCByZXR1cm5lZCBieSBi dWlsZGVyKCkgbWF5IGNoYW5nZSBhdCBydW50aW1lIHNvIHlvdSBzaG91bGQKKytjYWxsIGJ1aWxk ZXIoKSBpbnNpZGUgZWFjaCBmdW5jdGlvbiByYXRoZXIgdGhhbiBzdG9yZSBpdCBpbiBhIGdsb2Jh bC4KKysKKysgIHN1YiBvayB7CisrICAgICAgbXkgJGJ1aWxkZXIgPSBZb3VyOjpDbGFzcy0+YnVp bGRlcjsKKysKKysgICAgICByZXR1cm4gJGJ1aWxkZXItPm9rKEBfKTsKKysgIH0KKysKKysKKys9 Y3V0CisrCisrc3ViIGJ1aWxkZXIgeworKyAgICByZXR1cm4gVGVzdDo6QnVpbGRlci0+bmV3Owor K30KKysKKysxOworZGlmZiAtTmF1ciBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVp bGRlci9UZXN0ZXIvQ29sb3IucG0gbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxk ZXIvVGVzdGVyL0NvbG9yLnBtCistLS0gb2xkL3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1 aWxkZXIvVGVzdGVyL0NvbG9yLnBtCTE5NzAtMDEtMDEgMTA6MDA6MDAuMDAwMDAwMDAwICsxMDAw CisrKysgbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIvVGVzdGVyL0NvbG9y LnBtCTIwMTQtMDMtMjYgMjE6NDg6MTEuNTEwMjU3NjEyICsxMTAwCitAQCAtMCwwICsxLDUxIEBA CisrcGFja2FnZSBUZXN0OjpCdWlsZGVyOjpUZXN0ZXI6OkNvbG9yOworKworK3VzZSBzdHJpY3Q7 Cisrb3VyICRWRVJTSU9OID0gIjEuMjNfMDAyIjsKKysKKytyZXF1aXJlIFRlc3Q6OkJ1aWxkZXI6 OlRlc3RlcjsKKysKKysKKys9aGVhZDEgTkFNRQorKworK1Rlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6 Q29sb3IgLSB0dXJuIG9uIGNvbG91ciBpbiBUZXN0OjpCdWlsZGVyOjpUZXN0ZXIKKysKKys9aGVh ZDEgU1lOT1BTSVMKKysKKysgICBXaGVuIHJ1bm5pbmcgYSB0ZXN0IHNjcmlwdAorKworKyAgICAg cGVybCAtTVRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6Q29sb3IgdGVzdC50CisrCisrPWhlYWQxIERF U0NSSVBUSU9OCisrCisrSW1wb3J0aW5nIHRoaXMgbW9kdWxlIGNhdXNlcyB0aGUgc3Vicm91dGlu ZSBjb2xvciBpbiBUZXN0OjpCdWlsZGVyOjpUZXN0ZXIKKyt0byBiZSBjYWxsZWQgd2l0aCBhIHRy dWUgdmFsdWUgY2F1c2luZyBjb2xvdXIgaGlnaGxpZ2h0aW5nIHRvIGJlIHR1cm5lZAorK29uIGlu IGRlYnVnIG91dHB1dC4KKysKKytUaGUgc29sZSBwdXJwb3NlIG9mIHRoaXMgbW9kdWxlIGlzIHRv IGVuYWJsZSBjb2xvdXIgaGlnaGxpZ2h0aW5nCisrZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorKwor Kz1jdXQKKysKKytzdWIgaW1wb3J0IHsKKysgICAgVGVzdDo6QnVpbGRlcjo6VGVzdGVyOjpjb2xv cigxKTsKKyt9CisrCisrPWhlYWQxIEFVVEhPUgorKworK0NvcHlyaWdodCBNYXJrIEZvd2xlciBF PGx0Pm1hcmtAdHdvc2hvcnRwbGFua3MuY29tRTxndD4gMjAwMi4KKysKKytUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKythbmQvb3IgbW9kaWZ5 IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorKworKz1oZWFkMSBCVUdT CisrCisrVGhpcyBtb2R1bGUgd2lsbCBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgVGVybTo6QU5TSUNv bG9yIGlzIGluc3RhbGxlZC4KKysKKys9aGVhZDEgU0VFIEFMU08KKysKKytMPFRlc3Q6OkJ1aWxk ZXI6OlRlc3Rlcj4sIEw8VGVybTo6QU5TSUNvbG9yPgorKworKz1jdXQKKysKKysxOworZGlmZiAt TmF1ciBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci9UZXN0ZXIucG0gbmV3 L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIvVGVzdGVyLnBtCistLS0gb2xkL3Rl c3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIvVGVzdGVyLnBtCTE5NzAtMDEtMDEgMTA6 MDA6MDAuMDAwMDAwMDAwICsxMDAwCisrKysgbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0 L0J1aWxkZXIvVGVzdGVyLnBtCTIwMTQtMDMtMjYgMjE6NDg6MTEuNTExMjU3NjIzICsxMTAwCitA QCAtMCwwICsxLDYyMCBAQAorK3BhY2thZ2UgVGVzdDo6QnVpbGRlcjo6VGVzdGVyOworKworK3Vz ZSBzdHJpY3Q7Cisrb3VyICRWRVJTSU9OID0gIjEuMjNfMDAzIjsKKysKKyt1c2UgVGVzdDo6QnVp bGRlciAwLjk4OworK3VzZSBTeW1ib2w7CisrdXNlIENhcnA7CisrCisrPWhlYWQxIE5BTUUKKysK KytUZXN0OjpCdWlsZGVyOjpUZXN0ZXIgLSB0ZXN0IHRlc3RzdWl0ZXMgdGhhdCBoYXZlIGJlZW4g YnVpbHQgd2l0aAorK1Rlc3Q6OkJ1aWxkZXIKKysKKys9aGVhZDEgU1lOT1BTSVMKKysKKysgICAg dXNlIFRlc3Q6OkJ1aWxkZXI6OlRlc3RlciB0ZXN0cyA9PiAxOworKyAgICB1c2UgVGVzdDo6TW9y ZTsKKysKKysgICAgdGVzdF9vdXQoIm5vdCBvayAxIC0gZm9vIik7CisrICAgIHRlc3RfZmFpbCgr MSk7CisrICAgIGZhaWwoImZvbyIpOworKyAgICB0ZXN0X3Rlc3QoImZhaWwgd29ya3MiKTsKKysK Kys9aGVhZDEgREVTQ1JJUFRJT04KKysKKytBIG1vZHVsZSB0aGF0IGhlbHBzIHlvdSB0ZXN0IHRl c3RpbmcgbW9kdWxlcyB0aGF0IGFyZSBidWlsdCB3aXRoCisrQjxUZXN0OjpCdWlsZGVyPi4KKysK KytUaGUgdGVzdGluZyBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBwZXJmb3JtaW5n IGEgdGhyZWUgc3RlcAorK3Byb2Nlc3MgZm9yIGVhY2ggdGVzdCB5b3Ugd2lzaCB0byB0ZXN0LiAg VGhpcyBwcm9jZXNzIHN0YXJ0cyB3aXRoIHVzaW5nCisrQzx0ZXN0X291dD4gYW5kIEM8dGVzdF9l cnI+IGluIGFkdmFuY2UgdG8gZGVjbGFyZSB3aGF0IHRoZSB0ZXN0c3VpdGUgeW91CisrYXJlIHRl c3Rpbmcgd2lsbCBvdXRwdXQgd2l0aCBCPFRlc3Q6OkJ1aWxkZXI+IHRvIHN0ZG91dCBhbmQgc3Rk ZXJyLgorKworK1lvdSB0aGVuIGNhbiBydW4gdGhlIHRlc3QocykgZnJvbSB5b3VyIHRlc3Qgc3Vp dGUgdGhhdCBjYWxsCisrQjxUZXN0OjpCdWlsZGVyPi4gIEF0IHRoaXMgcG9pbnQgdGhlIG91dHB1 dCBvZiBCPFRlc3Q6OkJ1aWxkZXI+IGlzCisrc2FmZWx5IGNhcHR1cmVkIGJ5IEI8VGVzdDo6QnVp bGRlcjo6VGVzdGVyPiByYXRoZXIgdGhhbiBiZWluZworK2ludGVycHJldGVkIGFzIHJlYWwgdGVz dCBvdXRwdXQuCisrCisrVGhlIGZpbmFsIHN0YWdlIGlzIHRvIGNhbGwgQzx0ZXN0X3Rlc3Q+IHRo YXQgd2lsbCBzaW1wbHkgY29tcGFyZSB3aGF0IHlvdQorK3ByZWRlY2xhcmVkIHRvIHdoYXQgQjxU ZXN0OjpCdWlsZGVyPiBhY3R1YWxseSBvdXRwdXR0ZWQsIGFuZCByZXBvcnQgdGhlCisrcmVzdWx0 cyBiYWNrIHdpdGggYSAib2siIG9yICJub3Qgb2siICh3aXRoIGRlYnVnZ2luZykgdG8gdGhlIG5v cm1hbAorK291dHB1dC4KKysKKys9Y3V0CisrCisrIyMjIworKyMgc2V0IHVwIHRlc3RpbmcKKysj IyMjCisrCisrbXkgJHQgPSBUZXN0OjpCdWlsZGVyLT5uZXc7CisrCisrIyMjCisrIyBtYWtlIHVz IGFuIGV4cG9ydGVyCisrIyMjCisrCisrdXNlIEV4cG9ydGVyOworK291ciBASVNBID0gcXcoRXhw b3J0ZXIpOworKworK291ciBARVhQT1JUID0gcXcodGVzdF9vdXQgdGVzdF9lcnIgdGVzdF9mYWls IHRlc3RfZGlhZyB0ZXN0X3Rlc3QgbGluZV9udW0pOworKworK3N1YiBpbXBvcnQgeworKyAgICBt eSAkY2xhc3MgPSBzaGlmdDsKKysgICAgbXkoQHBsYW4pID0gQF87CisrCisrICAgIG15ICRjYWxs ZXIgPSBjYWxsZXI7CisrCisrICAgICR0LT5leHBvcnRlZF90bygkY2FsbGVyKTsKKysgICAgJHQt PnBsYW4oQHBsYW4pOworKworKyAgICBteSBAaW1wb3J0cyA9ICgpOworKyAgICBmb3JlYWNoIG15 ICRpZHggKCAwIC4uICQjcGxhbiApIHsKKysgICAgICAgIGlmKCAkcGxhblskaWR4XSBlcSAnaW1w b3J0JyApIHsKKysgICAgICAgICAgICBAaW1wb3J0cyA9IEB7ICRwbGFuWyAkaWR4ICsgMSBdIH07 CisrICAgICAgICAgICAgbGFzdDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBfX1BBQ0tB R0VfXy0+ZXhwb3J0X3RvX2xldmVsKCAxLCBfX1BBQ0tBR0VfXywgQGltcG9ydHMgKTsKKyt9Cisr CisrIyMjCisrIyBzZXQgdXAgZmlsZSBoYW5kbGVzCisrIyMjCisrCisrIyBjcmVhdGUgc29tZSBw cml2YXRlIGZpbGUgaGFuZGxlcworK215ICRvdXRwdXRfaGFuZGxlID0gZ2Vuc3ltOworK215ICRl cnJvcl9oYW5kbGUgID0gZ2Vuc3ltOworKworKyMgYW5kIHRpZSB0aGVtIHRvIHRoaXMgcGFja2Fn ZQorK215ICRvdXQgPSB0aWUgKiRvdXRwdXRfaGFuZGxlLCAiVGVzdDo6QnVpbGRlcjo6VGVzdGVy OjpUaWUiLCAiU1RET1VUIjsKKytteSAkZXJyID0gdGllICokZXJyb3JfaGFuZGxlLCAgIlRlc3Q6 OkJ1aWxkZXI6OlRlc3Rlcjo6VGllIiwgIlNUREVSUiI7CisrCisrIyMjIworKyMgZXhwb3J0ZWQg ZnVuY3Rpb25zCisrIyMjIworKworKyMgZm9yIHJlbWVtYmVyaW5nIHRoYXQgd2UncmUgdGVzdGlu ZyBhbmQgd2hlcmUgd2UncmUgdGVzdGluZyBhdAorK215ICR0ZXN0aW5nID0gMDsKKytteSAkdGVz dGluZ19udW07CisrbXkgJG9yaWdpbmFsX2lzX3Bhc3Npbmc7CisrCisrIyByZW1lbWJlcmluZyB3 aGVyZSB0aGUgZmlsZSBoYW5kbGVzIHdlcmUgb3JpZ2luYWxseSBjb25uZWN0ZWQKKytteSAkb3Jp Z2luYWxfb3V0cHV0X2hhbmRsZTsKKytteSAkb3JpZ2luYWxfZmFpbHVyZV9oYW5kbGU7CisrbXkg JG9yaWdpbmFsX3RvZG9faGFuZGxlOworKworK215ICRvcmlnaW5hbF9oYXJuZXNzX2VudjsKKysK KysjIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRlc3RpbmcgYW5kIHJlZGlyZWN0cyB0aGUgZmlsZWhh bmRsZXMgZm9yIG5vdworK3N1YiBfc3RhcnRfdGVzdGluZyB7CisrICAgICMgZXZlbiBpZiB3ZSdy ZSBydW5uaW5nIHVuZGVyIFRlc3Q6Okhhcm5lc3MgcHJldGVuZCB3ZSdyZSBub3QKKysgICAgIyBm b3Igbm93LiAgVGhpcyBuZWVkZWQgc28gVGVzdDo6QnVpbGRlciBkb2Vzbid0IGFkZCBleHRyYSBz cGFjZXMKKysgICAgJG9yaWdpbmFsX2hhcm5lc3NfZW52ID0gJEVOVntIQVJORVNTX0FDVElWRX0g fHwgMDsKKysgICAgJEVOVntIQVJORVNTX0FDVElWRX0gPSAwOworKworKyAgICAjIHJlbWVtYmVy IHdoYXQgdGhlIGhhbmRsZXMgd2VyZSBzZXQgdG8KKysgICAgJG9yaWdpbmFsX291dHB1dF9oYW5k bGUgID0gJHQtPm91dHB1dCgpOworKyAgICAkb3JpZ2luYWxfZmFpbHVyZV9oYW5kbGUgPSAkdC0+ ZmFpbHVyZV9vdXRwdXQoKTsKKysgICAgJG9yaWdpbmFsX3RvZG9faGFuZGxlICAgID0gJHQtPnRv ZG9fb3V0cHV0KCk7CisrCisrICAgICMgc3dpdGNoIG91dCB0byBvdXIgb3duIGhhbmRsZXMKKysg ICAgJHQtPm91dHB1dCgkb3V0cHV0X2hhbmRsZSk7CisrICAgICR0LT5mYWlsdXJlX291dHB1dCgk ZXJyb3JfaGFuZGxlKTsKKysgICAgJHQtPnRvZG9fb3V0cHV0KCRvdXRwdXRfaGFuZGxlKTsKKysK KysgICAgIyBjbGVhciB0aGUgZXhwZWN0ZWQgbGlzdAorKyAgICAkb3V0LT5yZXNldCgpOworKyAg ICAkZXJyLT5yZXNldCgpOworKworKyAgICAjIHJlbWVtYmVyIHRoYXQgd2UncmUgdGVzdGluZwor KyAgICAkdGVzdGluZyAgICAgPSAxOworKyAgICAkdGVzdGluZ19udW0gPSAkdC0+Y3VycmVudF90 ZXN0OworKyAgICAkdC0+Y3VycmVudF90ZXN0KDApOworKyAgICAkb3JpZ2luYWxfaXNfcGFzc2lu ZyAgPSAkdC0+aXNfcGFzc2luZzsKKysgICAgJHQtPmlzX3Bhc3NpbmcoMSk7CisrCisrICAgICMg bG9vaywgd2Ugc2hvdWxkbid0IGRvIHRoZSBlbmRpbmcgc3R1ZmYKKysgICAgJHQtPm5vX2VuZGlu ZygxKTsKKyt9CisrCisrPWhlYWQyIEZ1bmN0aW9ucworKworK1RoZXNlIGFyZSB0aGUgc2l4IG1l dGhvZHMgdGhhdCBhcmUgZXhwb3J0ZWQgYXMgZGVmYXVsdC4KKysKKys9b3ZlciA0CisrCisrPWl0 ZW0gdGVzdF9vdXQKKysKKys9aXRlbSB0ZXN0X2VycgorKworK1Byb2NlZHVyZXMgZm9yIHByZWRl Y2xhcmluZyB0aGUgb3V0cHV0IHRoYXQgeW91ciB0ZXN0IHN1aXRlIGlzCisrZXhwZWN0ZWQgdG8g cHJvZHVjZSB1bnRpbCBDPHRlc3RfdGVzdD4gaXMgY2FsbGVkLiAgVGhlc2UgcHJvY2VkdXJlcwor K2F1dG9tYXRpY2FsbHkgYXNzdW1lIHRoYXQgZWFjaCBsaW5lIHRlcm1pbmF0ZXMgd2l0aCAiXG4i LiAgU28KKysKKysgICB0ZXN0X291dCgib2sgMSIsIm9rIDIiKTsKKysKKytpcyB0aGUgc2FtZSBh cworKworKyAgIHRlc3Rfb3V0KCJvayAxXG5vayAyIik7CisrCisrd2hpY2ggaXMgZXZlbiB0aGUg c2FtZSBhcworKworKyAgIHRlc3Rfb3V0KCJvayAxIik7CisrICAgdGVzdF9vdXQoIm9rIDIiKTsK KysKKytPbmNlIEM8dGVzdF9vdXQ+IG9yIEM8dGVzdF9lcnI+IChvciBDPHRlc3RfZmFpbD4gb3Ig Qzx0ZXN0X2RpYWc+KSBoYXZlCisrYmVlbiBjYWxsZWQsIGFsbCBmdXJ0aGVyIG91dHB1dCBmcm9t IEI8VGVzdDo6QnVpbGRlcj4gd2lsbCBiZQorK2NhcHR1cmVkIGJ5IEI8VGVzdDo6QnVpbGRlcjo6 VGVzdGVyPi4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbCBub3QKKytiZSBhYmxlIHBlcmZvcm0g ZnVydGhlciB0ZXN0cyB0byB0aGUgbm9ybWFsIG91dHB1dCBpbiB0aGUgbm9ybWFsIHdheQorK3Vu dGlsIHlvdSBjYWxsIEM8dGVzdF90ZXN0PiAod2VsbCwgdW5sZXNzIHlvdSBtYW51YWxseSBtZWRk bGUgd2l0aCB0aGUKKytvdXRwdXQgZmlsZWhhbmRsZXMpCisrCisrPWN1dAorKworK3N1YiB0ZXN0 X291dCB7CisrICAgICMgZG8gd2UgbmVlZCB0byBkbyBhbnkgc2V0dXA/CisrICAgIF9zdGFydF90 ZXN0aW5nKCkgdW5sZXNzICR0ZXN0aW5nOworKworKyAgICAkb3V0LT5leHBlY3QoQF8pOworK30K KysKKytzdWIgdGVzdF9lcnIgeworKyAgICAjIGRvIHdlIG5lZWQgdG8gZG8gYW55IHNldHVwPwor KyAgICBfc3RhcnRfdGVzdGluZygpIHVubGVzcyAkdGVzdGluZzsKKysKKysgICAgJGVyci0+ZXhw ZWN0KEBfKTsKKyt9CisrCisrPWl0ZW0gdGVzdF9mYWlsCisrCisrQmVjYXVzZSB0aGUgc3RhbmRh cmQgZmFpbHVyZSBtZXNzYWdlIHRoYXQgQjxUZXN0OjpCdWlsZGVyPiBwcm9kdWNlcworK3doZW5l dmVyIGEgdGVzdCBmYWlscyB3aWxsIGJlIGEgY29tbW9uIG9jY3VycmVuY2UgaW4geW91ciB0ZXN0 IGVycm9yCisrb3V0cHV0LCBhbmQgYmVjYXVzZSBpdCBoYXMgY2hhbmdlZCBiZXR3ZWVuIFRlc3Q6 OkJ1aWxkZXIgdmVyc2lvbnMsIHJhdGhlcgorK3RoYW4gZm9yY2luZyB5b3UgdG8gY2FsbCBDPHRl c3RfZXJyPiB3aXRoIHRoZSBzdHJpbmcgYWxsIHRoZSB0aW1lIGxpa2UKKytzbworKworKyAgICB0 ZXN0X2VycigiIyBGYWlsZWQgdGVzdCAoJDAgYXQgbGluZSAiLmxpbmVfbnVtKCsxKS4iKSIpOwor KworK0M8dGVzdF9mYWlsPiBleGlzdHMgYXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGNh biBiZSBjYWxsZWQKKytpbnN0ZWFkLiAgSXQgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgb2Zmc2V0 IGZyb20gdGhlIGN1cnJlbnQgbGluZSB0aGF0CisrdGhlIGxpbmUgdGhhdCBjYXVzZXMgdGhlIGZh aWwgaXMgb24uCisrCisrICAgIHRlc3RfZmFpbCgrMSk7CisrCisrVGhpcyBtZWFucyB0aGF0IHRo ZSBleGFtcGxlIGluIHRoZSBzeW5vcHNpcyBjb3VsZCBiZSByZXdyaXR0ZW4KKyttb3JlIHNpbXBs eSBhczoKKysKKysgICB0ZXN0X291dCgibm90IG9rIDEgLSBmb28iKTsKKysgICB0ZXN0X2ZhaWwo KzEpOworKyAgIGZhaWwoImZvbyIpOworKyAgIHRlc3RfdGVzdCgiZmFpbCB3b3JrcyIpOworKwor Kz1jdXQKKysKKytzdWIgdGVzdF9mYWlsIHsKKysgICAgIyBkbyB3ZSBuZWVkIHRvIGRvIGFueSBz ZXR1cD8KKysgICAgX3N0YXJ0X3Rlc3RpbmcoKSB1bmxlc3MgJHRlc3Rpbmc7CisrCisrICAgICMg d29yayBvdXQgd2hhdCBsaW5lIHdlIHNob3VsZCBiZSBvbgorKyAgICBteSggJHBhY2thZ2UsICRm aWxlbmFtZSwgJGxpbmUgKSA9IGNhbGxlcjsKKysgICAgJGxpbmUgPSAkbGluZSArICggc2hpZnQo KSB8fCAwICk7ICAgICMgcHJldmVudCB3YXJuaW5ncworKworKyAgICAjIGV4cGVjdCB0aGF0IG9u IHN0ZGVycgorKyAgICAkZXJyLT5leHBlY3QoIiMgICAgIEZhaWxlZCB0ZXN0ICgkZmlsZW5hbWUg YXQgbGluZSAkbGluZSkiKTsKKyt9CisrCisrPWl0ZW0gdGVzdF9kaWFnCisrCisrQXMgbW9zdCBv ZiB0aGUgcmVtYWluaW5nIGV4cGVjdGVkIG91dHB1dCB0byB0aGUgZXJyb3Igc3RyZWFtIHdpbGwg YmUKKytjcmVhdGVkIGJ5IFRlc3Q6OkJ1aWxkZXIncyBDPGRpYWc+IGZ1bmN0aW9uLCBCPFRlc3Q6 OkJ1aWxkZXI6OlRlc3Rlcj4KKytwcm92aWRlcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIEM8dGVz dF9kaWFnPiB0aGF0IHlvdSBjYW4gdXNlIGluc3RlYWQgb2YKKytDPHRlc3RfZXJyPi4KKysKKytU aGUgQzx0ZXN0X2RpYWc+IGZ1bmN0aW9uIHByZXBlbmRzIGNvbW1lbnQgaGFzaGVzIGFuZCBzcGFj aW5nIHRvIHRoZQorK3N0YXJ0IGFuZCBuZXdsaW5lcyB0byB0aGUgZW5kIG9mIHRoZSBleHBlY3Rl ZCBvdXRwdXQgcGFzc2VkIHRvIGl0IGFuZAorK2FkZHMgaXQgdG8gdGhlIGxpc3Qgb2YgZXhwZWN0 ZWQgZXJyb3Igb3V0cHV0LiAgU28sIGluc3RlYWQgb2Ygd3JpdGluZworKworKyAgIHRlc3RfZXJy KCIjIENvdWxkbid0IG9wZW4gZmlsZSIpOworKworK3lvdSBjYW4gd3JpdGUKKysKKysgICB0ZXN0 X2RpYWcoIkNvdWxkbid0IG9wZW4gZmlsZSIpOworKworK1JlbWVtYmVyIHRoYXQgQjxUZXN0OjpC dWlsZGVyPidzIGRpYWcgZnVuY3Rpb24gd2lsbCBub3QgYWRkIG5ld2xpbmVzIHRvCisrdGhlIGVu ZCBvZiBvdXRwdXQgYW5kIHRlc3RfZGlhZyB3aWxsLiBTbyB0byBjaGVjaworKworKyAgIFRlc3Q6 OkJ1aWxkZXItPm5ldy0+ZGlhZygiZm9vXG4iLCJiYXJcbiIpOworKworK1lvdSB3b3VsZCBkbwor KworKyAgdGVzdF9kaWFnKCJmb28iLCJiYXIiKQorKworK3dpdGhvdXQgdGhlIG5ld2xpbmVzLgor KworKz1jdXQKKysKKytzdWIgdGVzdF9kaWFnIHsKKysgICAgIyBkbyB3ZSBuZWVkIHRvIGRvIGFu eSBzZXR1cD8KKysgICAgX3N0YXJ0X3Rlc3RpbmcoKSB1bmxlc3MgJHRlc3Rpbmc7CisrCisrICAg ICMgZXhwZWN0IHRoZSBzYW1lIHRoaW5nLCBidXQgcHJlcGVuZGVkIHdpdGggIiMgICAgICIKKysg ICAgbG9jYWwgJF87CisrICAgICRlcnItPmV4cGVjdCggbWFwIHsgIiMgJF8iIH0gQF8gKTsKKyt9 CisrCisrPWl0ZW0gdGVzdF90ZXN0CisrCisrQWN0dWFsbHkgcGVyZm9ybXMgdGhlIG91dHB1dCBj aGVjayB0ZXN0aW5nIHRoZSB0ZXN0cywgY29tcGFyaW5nIHRoZQorK2RhdGEgKHdpdGggQzxlcT4p IHRoYXQgd2UgaGF2ZSBjYXB0dXJlZCBmcm9tIEI8VGVzdDo6QnVpbGRlcj4gYWdhaW5zdAorK3do YXQgd2FzIGRlY2xhcmVkIHdpdGggQzx0ZXN0X291dD4gYW5kIEM8dGVzdF9lcnI+LgorKworK1Ro aXMgdGFrZXMgbmFtZS92YWx1ZSBwYWlycyB0aGF0IGVmZmVjdCBob3cgdGhlIHRlc3QgaXMgcnVu LgorKworKz1vdmVyCisrCisrPWl0ZW0gdGl0bGUgKHN5bm9ueW0gJ25hbWUnLCAnbGFiZWwnKQor KworK1RoZSBuYW1lIG9mIHRoZSB0ZXN0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhl IEM8b2s+IG9yIEM8bm90Cisrb2s+LgorKworKz1pdGVtIHNraXBfb3V0CisrCisrU2V0dGluZyB0 aGlzIHRvIGEgdHJ1ZSB2YWx1ZSB3aWxsIGNhdXNlIHRoZSB0ZXN0IHRvIGlnbm9yZSBpZiB0aGUK KytvdXRwdXQgc2VudCBieSB0aGUgdGVzdCB0byB0aGUgb3V0cHV0IHN0cmVhbSBkb2VzIG5vdCBt YXRjaCB0aGF0CisrZGVjbGFyZWQgd2l0aCBDPHRlc3Rfb3V0Pi4KKysKKys9aXRlbSBza2lwX2Vy cgorKworK1NldHRpbmcgdGhpcyB0byBhIHRydWUgdmFsdWUgd2lsbCBjYXVzZSB0aGUgdGVzdCB0 byBpZ25vcmUgaWYgdGhlCisrb3V0cHV0IHNlbnQgYnkgdGhlIHRlc3QgdG8gdGhlIGVycm9yIHN0 cmVhbSBkb2VzIG5vdCBtYXRjaCB0aGF0CisrZGVjbGFyZWQgd2l0aCBDPHRlc3RfZXJyPi4KKysK Kys9YmFjaworKworK0FzIGEgY29udmVuaWVuY2UsIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBh c3NlZCB0aGVuIHRoaXMgYXJndW1lbnQKKytpcyBhc3N1bWVkIHRvIGJlIHRoZSBuYW1lIG9mIHRo ZSB0ZXN0IChhcyBpbiB0aGUgYWJvdmUgZXhhbXBsZXMuKQorKworK09uY2UgQzx0ZXN0X3Rlc3Q+ IGhhcyBiZWVuIHJ1biB0ZXN0IG91dHB1dCB3aWxsIGJlIHJlZGlyZWN0ZWQgYmFjayB0bworK3Ro ZSBvcmlnaW5hbCBmaWxlaGFuZGxlcyB0aGF0IEI8VGVzdDo6QnVpbGRlcj4gd2FzIGNvbm5lY3Rl ZCB0bworKyhwcm9iYWJseSBTVERPVVQgYW5kIFNUREVSUiwpIG1lYW5pbmcgYW55IGZ1cnRoZXIg dGVzdHMgeW91IHJ1bgorK3dpbGwgZnVuY3Rpb24gbm9ybWFsbHkgYW5kIGNhdXNlIHN1Y2Nlc3Mv ZXJyb3JzIGZvciBCPFRlc3Q6Okhhcm5lc3M+LgorKworKz1jdXQKKysKKytzdWIgdGVzdF90ZXN0 IHsKKysgICAgIyBkZWNvZGUgdGhlIGFyZ3VtZW50cyBhcyBkZXNjcmliZWQgaW4gdGhlIHBvZAor KyAgICBteSAkbWVzczsKKysgICAgbXkgJWFyZ3M7CisrICAgIGlmKCBAXyA9PSAxICkgeworKyAg ICAgICAgJG1lc3MgPSBzaGlmdAorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgJWFyZ3Mg PSBAXzsKKysgICAgICAgICRtZXNzID0gJGFyZ3N7bmFtZX0gaWYgZXhpc3RzKCAkYXJnc3tuYW1l fSApOworKyAgICAgICAgJG1lc3MgPSAkYXJnc3t0aXRsZX0gaWYgZXhpc3RzKCAkYXJnc3t0aXRs ZX0gKTsKKysgICAgICAgICRtZXNzID0gJGFyZ3N7bGFiZWx9IGlmIGV4aXN0cyggJGFyZ3N7bGFi ZWx9ICk7CisrICAgIH0KKysKKysgICAgIyBlciwgYXJlIHdlIHRlc3Rpbmc/CisrICAgIGNyb2Fr ICJOb3QgdGVzdGluZy4gIFlvdSBtdXN0IGRlY2xhcmUgb3V0cHV0IHdpdGggYSB0ZXN0IGZ1bmN0 aW9uIGZpcnN0LiIKKysgICAgICB1bmxlc3MgJHRlc3Rpbmc7CisrCisrICAgICMgb2theSwgcmVj b25uZWN0IHRoZSB0ZXN0IHN1aXRlIGJhY2sgdG8gdGhlIHNhdmVkIGhhbmRsZXMKKysgICAgJHQt Pm91dHB1dCgkb3JpZ2luYWxfb3V0cHV0X2hhbmRsZSk7CisrICAgICR0LT5mYWlsdXJlX291dHB1 dCgkb3JpZ2luYWxfZmFpbHVyZV9oYW5kbGUpOworKyAgICAkdC0+dG9kb19vdXRwdXQoJG9yaWdp bmFsX3RvZG9faGFuZGxlKTsKKysKKysgICAgIyByZXN0b3JlIHRoZSB0ZXN0IG5vLCBldGMsIGJh Y2sgdG8gdGhlIG9yaWdpbmFsIHBvaW50CisrICAgICR0LT5jdXJyZW50X3Rlc3QoJHRlc3Rpbmdf bnVtKTsKKysgICAgJHRlc3RpbmcgPSAwOworKyAgICAkdC0+aXNfcGFzc2luZygkb3JpZ2luYWxf aXNfcGFzc2luZyk7CisrCisrICAgICMgcmUtZW5hYmxlIHRoZSBvcmlnaW5hbCBzZXR0aW5nIG9m IHRoZSBoYXJuZXNzCisrICAgICRFTlZ7SEFSTkVTU19BQ1RJVkV9ID0gJG9yaWdpbmFsX2hhcm5l c3NfZW52OworKworKyAgICAjIGNoZWNrIHRoZSBvdXRwdXQgd2UndmUgc3Rhc2hlZAorKyAgICB1 bmxlc3MoICR0LT5vayggKCAkYXJnc3tza2lwX291dH0gfHwgJG91dC0+Y2hlY2sgKSAmJgorKyAg ICAgICAgICAgICAgICAgICAgKCAkYXJnc3tza2lwX2Vycn0gfHwgJGVyci0+Y2hlY2sgKSwgJG1l c3MgKSAKKysgICAgKQorKyAgICB7CisrICAgICAgICAjIHByaW50IG91dCB0aGUgZGlhZ25vc3Rp YyBpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhpcworKyAgICAgICAgIyB0ZXN0IGZhaWxlZAorKwor KyAgICAgICAgbG9jYWwgJF87CisrCisrICAgICAgICAkdC0+ZGlhZyggbWFwIHsgIiRfXG4iIH0g JG91dC0+Y29tcGxhaW50ICkKKysgICAgICAgICAgdW5sZXNzICRhcmdze3NraXBfb3V0fSB8fCAk b3V0LT5jaGVjazsKKysKKysgICAgICAgICR0LT5kaWFnKCBtYXAgeyAiJF9cbiIgfSAkZXJyLT5j b21wbGFpbnQgKQorKyAgICAgICAgICB1bmxlc3MgJGFyZ3N7c2tpcF9lcnJ9IHx8ICRlcnItPmNo ZWNrOworKyAgICB9CisrfQorKworKz1pdGVtIGxpbmVfbnVtCisrCisrQSB1dGlsaXR5IGZ1bmN0 aW9uIHRoYXQgcmV0dXJucyB0aGUgbGluZSBudW1iZXIgdGhhdCB0aGUgZnVuY3Rpb24gd2FzCisr Y2FsbGVkIG9uLiAgWW91IGNhbiBwYXNzIGl0IGFuIG9mZnNldCB3aGljaCB3aWxsIGJlIGFkZGVk IHRvIHRoZQorK3Jlc3VsdC4gIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIHdvcmtpbmcgb3V0IHRo ZSBjb3JyZWN0IHRleHQgb2YKKytkaWFnbm9zdGljIGZ1bmN0aW9ucyB0aGF0IGNvbnRhaW4gbGlu ZSBudW1iZXJzLgorKworK0Vzc2VudGlhbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIEM8X19M SU5FX18+IG1hY3JvLCBidXQgdGhlCisrQzxsaW5lX251bSgrMyk+IGlkaW9tIGlzIGFyZ3VhYmx5 IG5pY2VyLgorKworKz1jdXQKKysKKytzdWIgbGluZV9udW0geworKyAgICBteSggJHBhY2thZ2Us ICRmaWxlbmFtZSwgJGxpbmUgKSA9IGNhbGxlcjsKKysgICAgcmV0dXJuICRsaW5lICsgKCBzaGlm dCgpIHx8IDAgKTsgICAgIyBwcmV2ZW50IHdhcm5pbmdzCisrfQorKworKz1iYWNrCisrCisrSW4g YWRkaXRpb24gdG8gdGhlIHNpeCBleHBvcnRlZCBmdW5jdGlvbnMgdGhlcmUgZXhpc3RzIG9uZQor K2Z1bmN0aW9uIHRoYXQgY2FuIG9ubHkgYmUgYWNjZXNzZWQgd2l0aCBhIGZ1bGx5IHF1YWxpZmll ZCBmdW5jdGlvbgorK2NhbGwuCisrCisrPW92ZXIgNAorKworKz1pdGVtIGNvbG9yCisrCisrV2hl biBDPHRlc3RfdGVzdD4gaXMgY2FsbGVkIGFuZCB0aGUgb3V0cHV0IHRoYXQgeW91ciB0ZXN0cyBn ZW5lcmF0ZQorK2RvZXMgbm90IG1hdGNoIHRoYXQgd2hpY2ggeW91IGRlY2xhcmVkLCBDPHRlc3Rf dGVzdD4gd2lsbCBwcmludCBvdXQKKytkZWJ1ZyBpbmZvcm1hdGlvbiBzaG93aW5nIHRoZSB0d28g Y29uZmxpY3RpbmcgdmVyc2lvbnMuICBBcyB0aGlzCisrb3V0cHV0IGl0c2VsZiBpcyBkZWJ1ZyBp bmZvcm1hdGlvbiBpdCBjYW4gYmUgY29uZnVzaW5nIHdoaWNoIHBhcnQgb2YKKyt0aGUgb3V0cHV0 IGlzIGZyb20gQzx0ZXN0X3Rlc3Q+IGFuZCB3aGljaCB3YXMgdGhlIG9yaWdpbmFsIG91dHB1dCBm cm9tCisreW91ciBvcmlnaW5hbCB0ZXN0cy4gIEFsc28sIGl0IG1heSBiZSBoYXJkIHRvIHNwb3Qg dGhpbmdzIGxpa2UKKytleHRyYW5lb3VzIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiBsaW5lcyB0 aGF0IG1heSBjYXVzZSB5b3VyIHRlc3QgdG8KKytmYWlsIGV2ZW4gdGhvdWdoIHRoZSBvdXRwdXQg bG9va3Mgc2ltaWxhci4KKysKKytUbyBhc3Npc3QgeW91IEM8dGVzdF90ZXN0PiBjYW4gY29sb3Vy IHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkZWJ1ZworK2luZm9ybWF0aW9uIHRvIGRpc2FtYmlndWF0 ZSB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1dC4gVGhlIGRlYnVnCisrb3V0cHV0IHdpbGwg aGF2ZSBpdHMgYmFja2dyb3VuZCBjb2xvdXJlZCBncmVlbiBhbmQgcmVkLiAgVGhlIGdyZWVuCisr cGFydCByZXByZXNlbnRzIHRoZSB0ZXh0IHdoaWNoIGlzIHRoZSBzYW1lIGJldHdlZW4gdGhlIGV4 ZWN1dGVkIGFuZAorK2FjdHVhbCBvdXRwdXQsIHRoZSByZWQgc2hvd3Mgd2hpY2ggcGFydCBkaWZm ZXJzLgorKworK1RoZSBDPGNvbG9yPiBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGNvbG91cmluZyBz aG91bGQgb2NjdXIgb3Igbm90LgorK1Bhc3NpbmcgaXQgYSB0cnVlIG9yIGZhbHNlIHZhbHVlIHdp bGwgZW5hYmxlIG9yIGRpc2FibGUgY29sb3VyaW5nCisrcmVzcGVjdGl2ZWx5LCBhbmQgdGhlIGZ1 bmN0aW9uIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50IHdpbGwgcmV0dXJuIHRoZQorK2N1cnJlbnQg c2V0dGluZy4KKysKKytUbyBlbmFibGUgY29sb3VyaW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSwg eW91IGNhbiB1c2UgdGhlCisrQjxUZXh0OjpCdWlsZGVyOjpUZXN0ZXI6OkNvbG9yPiBtb2R1bGUg bGlrZSBzbzoKKysKKysgICBwZXJsIC1NbGliPVRleHQ6OkJ1aWxkZXI6OlRlc3Rlcjo6Q29sb3Ig dGVzdC50CisrCisrT3IgYnkgaW5jbHVkaW5nIHRoZSBCPFRlc3Q6OkJ1aWxkZXI6OlRlc3Rlcjo6 Q29sb3I+IG1vZHVsZSBkaXJlY3RseSBpbgorK3RoZSBQRVJMNUxJQi4KKysKKys9Y3V0CisrCisr bXkgJGNvbG9yOworKworK3N1YiBjb2xvciB7CisrICAgICRjb2xvciA9IHNoaWZ0IGlmIEBfOwor KyAgICAkY29sb3I7CisrfQorKworKz1iYWNrCisrCisrPWhlYWQxIEJVR1MKKysKKytDYWxscyBD PDxUZXN0OjpCdWlsZGVyLT5ub19lbmRpbmc+PiB0dXJuaW5nIG9mZiB0aGUgZW5kaW5nIHRlc3Rz LgorK1RoaXMgaXMgbmVlZGVkIGFzIG90aGVyd2lzZSBpdCB3aWxsIHRyaXAgb3V0IGJlY2F1c2Ug d2UndmUgcnVuIG1vcmUKKyt0ZXN0cyB0aGFuIHdlIHN0cmljdGx5IHNob3VsZCBoYXZlIGFuZCBp dCdsbCByZWdpc3RlciBhbnkgZmFpbHVyZXMgd2UKKytoYWQgdGhhdCB3ZSB3ZXJlIHRlc3Rpbmcg Zm9yIGFzIHJlYWwgZmFpbHVyZXMuCisrCisrVGhlIGNvbG9yIGZ1bmN0aW9uIGRvZXNuJ3Qgd29y ayB1bmxlc3MgQjxUZXJtOjpBTlNJQ29sb3I+IGlzCisrY29tcGF0aWJsZSB3aXRoIHlvdXIgdGVy bWluYWwuCisrCisrQnVncyAoYW5kIHJlcXVlc3RzIGZvciBuZXcgZmVhdHVyZXMpIGNhbiBiZSBy ZXBvcnRlZCB0byB0aGUgYXV0aG9yCisrdGhvdWdoIHRoZSBDUEFOIFJUIHN5c3RlbToKKytMPGh0 dHA6Ly9ydC5jcGFuLm9yZy9Ob0F1dGgvUmVwb3J0QnVnLmh0bWw/UXVldWU9VGVzdC1CdWlsZGVy LVRlc3Rlcj4KKysKKys9aGVhZDEgQVVUSE9SCisrCisrQ29weXJpZ2h0IE1hcmsgRm93bGVyIEU8 bHQ+bWFya0B0d29zaG9ydHBsYW5rcy5jb21FPGd0PiAyMDAyLCAyMDA0LgorKworK1NvbWUgY29k ZSB0YWtlbiBmcm9tIEI8VGVzdDo6TW9yZT4gYW5kIEI8VGVzdDo6Q2F0Y2g+LCB3cml0dGVuIGJ5 CisrTWljaGFlbCBHIFNjaHdlcm4gRTxsdD5zY2h3ZXJuQHBvYm94LmNvbUU8Z3Q+LiAgSGVuY2Us IHRob3NlIHBhcnRzCisrQ29weXJpZ2h0IE1pY2hlYWwgRyBTY2h3ZXJuIDIwMDEuICBVc2VkIGFu ZCBkaXN0cmlidXRlZCB3aXRoCisrcGVybWlzc2lvbi4KKysKKytUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKythbmQvb3IgbW9kaWZ5IGl0IHVu ZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorKworKz1oZWFkMSBNQUlOVEFJTkVS UworKworKz1vdmVyIDQKKysKKys9aXRlbSBDaGFkIEdyYW51bSBFPGx0PmV4b2Rpc3RAY3Bhbi5v cmdFPGd0PgorKworKz1iYWNrCisrCisrPWhlYWQxIE5PVEVTCisrCisrVGhhbmtzIHRvIFJpY2hh cmQgQ2xhbXAgRTxsdD5yaWNoYXJkY0B1bml4YmVhcmQubmV0RTxndD4gZm9yIGxldHRpbmcKKytt ZSB1c2UgaGlzIHRlc3Rpbmcgc3lzdGVtIHRvIHRyeSB0aGlzIG1vZHVsZSBvdXQgb24uCisrCisr PWhlYWQxIFNFRSBBTFNPCisrCisrTDxUZXN0OjpCdWlsZGVyPiwgTDxUZXN0OjpCdWlsZGVyOjpU ZXN0ZXI6OkNvbG9yPiwgTDxUZXN0OjpNb3JlPi4KKysKKys9Y3V0CisrCisrMTsKKysKKysjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworKyMgSGVscGVyIGNsYXNzIHRoYXQgaXMgdXNlZCB0byByZW1lbWJlciBleHBlY3Rl ZCBhbmQgcmVjZWl2ZWQgZGF0YQorKworK3BhY2thZ2UgVGVzdDo6QnVpbGRlcjo6VGVzdGVyOjpU aWU7CisrCisrIyMKKysjIGFkZCBsaW5lKHMpIHRvIGJlIGV4cGVjdGVkCisrCisrc3ViIGV4cGVj dCB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrCisrICAgIG15IEBjaGVja3MgPSBAXzsKKysg ICAgZm9yZWFjaCBteSAkY2hlY2sgKEBjaGVja3MpIHsKKysgICAgICAgICRjaGVjayA9ICRzZWxm LT5fYWNjb3VudF9mb3Jfc3VidGVzdCgkY2hlY2spOworKyAgICAgICAgJGNoZWNrID0gJHNlbGYt Pl90cmFuc2xhdGVfRmFpbGVkX2NoZWNrKCRjaGVjayk7CisrICAgICAgICBwdXNoIEB7ICRzZWxm LT57d2FudGVkfSB9LCByZWYgJGNoZWNrID8gJGNoZWNrIDogIiRjaGVja1xuIjsKKysgICAgfQor K30KKysKKytzdWIgX2FjY291bnRfZm9yX3N1YnRlc3QgeworKyAgICBteSggJHNlbGYsICRjaGVj ayApID0gQF87CisrCisrICAgICMgU2luY2Ugd2Ugc2hpcCB3aXRoIFRlc3Q6OkJ1aWxkZXIsIGNh bGxpbmcgYSBwcml2YXRlIG1ldGhvZCBpcyBzYWZlLi4uaXNoLgorKyAgICByZXR1cm4gcmVmKCRj aGVjaykgPyAkY2hlY2sgOiAkdC0+X2luZGVudCAuICRjaGVjazsKKyt9CisrCisrc3ViIF90cmFu c2xhdGVfRmFpbGVkX2NoZWNrIHsKKysgICAgbXkoICRzZWxmLCAkY2hlY2sgKSA9IEBfOworKwor KyAgICBpZiggJGNoZWNrID1+IC9cQSguKikjICAgICAoRmFpbGVkIC4qdGVzdCkgXCgoLio/KSBh dCBsaW5lIChcZCspXClcWig/IVxuKS8gKSB7CisrICAgICAgICAkY2hlY2sgPSAiL1xRJDFcRSNc XHMrXFEkMlxFLio/XFxuPy4qP1xRYXQgJDNcRSBsaW5lIFxRJDRcRS4qXFxuPy8iOworKyAgICB9 CisrCisrICAgIHJldHVybiAkY2hlY2s7CisrfQorKworKyMjCisrIyByZXR1cm4gdHJ1ZSBpZmYg dGhlIGV4cGVjdGVkIGRhdGEgbWF0Y2hlcyB0aGUgZ290IGRhdGEKKysKKytzdWIgY2hlY2sgewor KyAgICBteSAkc2VsZiA9IHNoaWZ0OworKworKyAgICAjIHR1cm4gb2ZmIHdhcm5pbmdzIGFzIHRo ZXNlIG1pZ2h0IGJlIHVuZGVmCisrICAgIGxvY2FsICReVyA9IDA7CisrCisrICAgIG15IEBjaGVj a3MgPSBAeyAkc2VsZi0+e3dhbnRlZH0gfTsKKysgICAgbXkgJGdvdCAgICA9ICRzZWxmLT57Z290 fTsKKysgICAgZm9yZWFjaCBteSAkY2hlY2sgKEBjaGVja3MpIHsKKysgICAgICAgICRjaGVjayA9 ICJcUSRjaGVja1xFIiB1bmxlc3MoICRjaGVjayA9fiBzLF4vKC4qKS8kLCQxLCBvciByZWYgJGNo ZWNrICk7CisrICAgICAgICByZXR1cm4gMCB1bmxlc3MgJGdvdCA9fiBzL14kY2hlY2svLzsKKysg ICAgfQorKworKyAgICByZXR1cm4gbGVuZ3RoICRnb3QgPT0gMDsKKyt9CisrCisrIyMKKysjIGEg Y29tcGxhaW50IG1lc3NhZ2UgYWJvdXQgdGhlIGlucHV0cyBub3QgbWF0Y2hpbmcgKHRvIGJlCisr IyB1c2VkIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMpCisrCisrc3ViIGNvbXBsYWludCB7CisrICAg IG15ICRzZWxmICAgPSBzaGlmdDsKKysgICAgbXkgJHR5cGUgICA9ICRzZWxmLT50eXBlOworKyAg ICBteSAkZ290ICAgID0gJHNlbGYtPmdvdDsKKysgICAgbXkgJHdhbnRlZCA9IGpvaW4gJycsIEB7 ICRzZWxmLT53YW50ZWQgfTsKKysKKysgICAgIyBhcmUgd2UgcnVubmluZyBpbiBjb2xvdXIgbW9k ZT8KKysgICAgaWYoVGVzdDo6QnVpbGRlcjo6VGVzdGVyOjpjb2xvcikgeworKyAgICAgICAgIyBn ZXQgY29sb3IKKysgICAgICAgIGV2YWwgeyByZXF1aXJlIFRlcm06OkFOU0lDb2xvciB9OworKyAg ICAgICAgdW5sZXNzKCRAKSB7CisrICAgICAgICAgICAgIyBjb2xvdXJzCisrCisrICAgICAgICAg ICAgbXkgJGdyZWVuID0gVGVybTo6QU5TSUNvbG9yOjpjb2xvcigiYmxhY2siKSAuIFRlcm06OkFO U0lDb2xvcjo6Y29sb3IoIm9uX2dyZWVuIik7CisrICAgICAgICAgICAgbXkgJHJlZCAgID0gVGVy bTo6QU5TSUNvbG9yOjpjb2xvcigiYmxhY2siKSAuIFRlcm06OkFOU0lDb2xvcjo6Y29sb3IoIm9u X3JlZCIpOworKyAgICAgICAgICAgIG15ICRyZXNldCA9IFRlcm06OkFOU0lDb2xvcjo6Y29sb3Io InJlc2V0Iik7CisrCisrICAgICAgICAgICAgIyB3b3JrIG91dCB3aGVyZSB0aGUgdHdvIHN0cmlu Z3Mgc3RhcnQgdG8gZGlmZmVyCisrICAgICAgICAgICAgbXkgJGNoYXIgPSAwOworKyAgICAgICAg ICAgICRjaGFyKysgd2hpbGUgc3Vic3RyKCAkZ290LCAkY2hhciwgMSApIGVxIHN1YnN0ciggJHdh bnRlZCwgJGNoYXIsIDEgKTsKKysKKysgICAgICAgICAgICAjIGdldCB0aGUgc3RhcnQgc3RyaW5n IGFuZCB0aGUgdHdvIGVuZCBzdHJpbmdzCisrICAgICAgICAgICAgbXkgJHN0YXJ0ID0gJGdyZWVu IC4gc3Vic3RyKCAkd2FudGVkLCAwLCAkY2hhciApOworKyAgICAgICAgICAgIG15ICRnb3RlbmQg ICAgPSAkcmVkIC4gc3Vic3RyKCAkZ290LCAgICAkY2hhciApIC4gJHJlc2V0OworKyAgICAgICAg ICAgIG15ICR3YW50ZWRlbmQgPSAkcmVkIC4gc3Vic3RyKCAkd2FudGVkLCAkY2hhciApIC4gJHJl c2V0OworKworKyAgICAgICAgICAgICMgbWFrZSB0aGUgc3RhcnQgdHVybiBncmVlbiBvbiBhbmQg b2ZmCisrICAgICAgICAgICAgJHN0YXJ0ID1+IHMvXG4vJHJlc2V0XG4kZ3JlZW4vZzsKKysKKysg ICAgICAgICAgICAjIG1ha2UgdGhlIGVuZHMgdHVybiByZWQgb24gYW5kIG9mZgorKyAgICAgICAg ICAgICRnb3RlbmQgICAgPX4gcy9cbi8kcmVzZXRcbiRyZWQvZzsKKysgICAgICAgICAgICAkd2Fu dGVkZW5kID1+IHMvXG4vJHJlc2V0XG4kcmVkL2c7CisrCisrICAgICAgICAgICAgIyByZWJ1aWxk IHRoZSBzdHJpbmdzCisrICAgICAgICAgICAgJGdvdCAgICA9ICRzdGFydCAuICRnb3RlbmQ7Cisr ICAgICAgICAgICAgJHdhbnRlZCA9ICRzdGFydCAuICR3YW50ZWRlbmQ7CisrICAgICAgICB9Cisr ICAgIH0KKysKKysgICAgcmV0dXJuICIkdHlwZSBpczpcbiIgLiAiJGdvdFxubm90OlxuJHdhbnRl ZFxuYXMgZXhwZWN0ZWQiOworK30KKysKKysjIworKyMgZm9yZ2V0IGFsbCBleHBlY3RlZCBhbmQg Z290IGRhdGEKKysKKytzdWIgcmVzZXQgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKyAgICAl JHNlbGYgPSAoCisrICAgICAgICB0eXBlICAgPT4gJHNlbGYtPnt0eXBlfSwKKysgICAgICAgIGdv dCAgICA9PiAnJywKKysgICAgICAgIHdhbnRlZCA9PiBbXSwKKysgICAgKTsKKyt9CisrCisrc3Vi IGdvdCB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAgIHJldHVybiAkc2VsZi0+e2dvdH07 CisrfQorKworK3N1YiB3YW50ZWQgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKyAgICByZXR1 cm4gJHNlbGYtPnt3YW50ZWR9OworK30KKysKKytzdWIgdHlwZSB7CisrICAgIG15ICRzZWxmID0g c2hpZnQ7CisrICAgIHJldHVybiAkc2VsZi0+e3R5cGV9OworK30KKysKKysjIyMKKysjIHRpZSBp bnRlcmZhY2UKKysjIyMKKysKKytzdWIgUFJJTlQgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0Owor KyAgICAkc2VsZi0+e2dvdH0gLj0gam9pbiAnJywgQF87CisrfQorKworK3N1YiBUSUVIQU5ETEUg eworKyAgICBteSggJGNsYXNzLCAkdHlwZSApID0gQF87CisrCisrICAgIG15ICRzZWxmID0gYmxl c3MgeyB0eXBlID0+ICR0eXBlIH0sICRjbGFzczsKKysKKysgICAgJHNlbGYtPnJlc2V0OworKwor KyAgICByZXR1cm4gJHNlbGY7CisrfQorKworK3N1YiBSRUFEICAgICB7IH0KKytzdWIgUkVBRExJ TkUgeyB9Cisrc3ViIEdFVEMgICAgIHsgfQorK3N1YiBGSUxFTk8gICB7IH0KKysKKysxOworZGlm ZiAtTmF1ciBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci5wbSBuZXcvdGVz dF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvQnVpbGRlci5wbQorLS0tIG9sZC90ZXN0X3NpbXBsZV9w YXRjaC9saWIvVGVzdC9CdWlsZGVyLnBtCTE5NzAtMDEtMDEgMTA6MDA6MDAuMDAwMDAwMDAwICsx MDAwCisrKysgbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L0J1aWxkZXIucG0JMjAxNC0w My0yNiAyMTo0ODoxMS41MTMyNTc2NDUgKzExMDAKK0BAIC0wLDAgKzEsMjY2NyBAQAorK3BhY2th Z2UgVGVzdDo6QnVpbGRlcjsKKysKKyt1c2UgNS4wMDY7CisrdXNlIHN0cmljdDsKKyt1c2Ugd2Fy bmluZ3M7CisrCisrb3VyICRWRVJTSU9OID0gJzEuMDAxMDAzJzsKKyskVkVSU0lPTiA9IGV2YWwg JFZFUlNJT047ICAgICMjIG5vIGNyaXRpYyAoQnVpbHRpbkZ1bmN0aW9uczo6UHJvaGliaXRTdHJp bmd5RXZhbCkKKysKKytCRUdJTiB7CisrICAgIGlmKCAkXSA8IDUuMDA4ICkgeworKyAgICAgICAg cmVxdWlyZSBUZXN0OjpCdWlsZGVyOjpJTzo6U2NhbGFyOworKyAgICB9CisrfQorKworKworKyMg TWFrZSBUZXN0OjpCdWlsZGVyIHRocmVhZC1zYWZlIGZvciBpdGhyZWFkcy4KKytCRUdJTiB7Cisr ICAgIHVzZSBDb25maWc7CisrICAgICMgTG9hZCB0aHJlYWRzOjpzaGFyZWQgd2hlbiB0aHJlYWRz IGFyZSB0dXJuZWQgb24uCisrICAgICMgNS44LjAncyB0aHJlYWRzIGFyZSBzbyBidXN0ZWQgd2Ug bm8gbG9uZ2VyIHN1cHBvcnQgdGhlbS4KKysgICAgaWYoICRdID49IDUuMDA4MDAxICYmICRDb25m aWd7dXNlaXRocmVhZHN9ICYmICRJTkN7J3RocmVhZHMucG0nfSApIHsKKysgICAgICAgIHJlcXVp cmUgdGhyZWFkczo6c2hhcmVkOworKworKyAgICAgICAgIyBIYWNrIGFyb3VuZCBZRVQgQU5PVEhF UiB0aHJlYWRzOjpzaGFyZWQgYnVnLiAgSXQgd291bGQKKysgICAgICAgICMgb2NjYXNpb25hbGx5 IGZvcmdldCB0aGUgY29udGVudHMgb2YgdGhlIHZhcmlhYmxlIHdoZW4gc2hhcmluZyBpdC4KKysg ICAgICAgICMgU28gd2UgZmlyc3QgY29weSB0aGUgZGF0YSwgdGhlbiBzaGFyZSwgdGhlbiBwdXQg b3VyIGNvcHkgYmFjay4KKysgICAgICAgICpzaGFyZSA9IHN1YiAoXFskQCVdKSB7CisrICAgICAg ICAgICAgbXkgJHR5cGUgPSByZWYgJF9bMF07CisrICAgICAgICAgICAgbXkgJGRhdGE7CisrCisr ICAgICAgICAgICAgaWYoICR0eXBlIGVxICdIQVNIJyApIHsKKysgICAgICAgICAgICAgICAgJSRk YXRhID0gJXsgJF9bMF0gfTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzaWYoICR0 eXBlIGVxICdBUlJBWScgKSB7CisrICAgICAgICAgICAgICAgIEAkZGF0YSA9IEB7ICRfWzBdIH07 CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2lmKCAkdHlwZSBlcSAnU0NBTEFSJyAp IHsKKysgICAgICAgICAgICAgICAgJCRkYXRhID0gJHsgJF9bMF0gfTsKKysgICAgICAgICAgICB9 CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIGRpZSggIlVua25vd24gdHlw ZTogIiAuICR0eXBlICk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICRfWzBdID0g JnRocmVhZHM6OnNoYXJlZDo6c2hhcmUoICRfWzBdICk7CisrCisrICAgICAgICAgICAgaWYoICR0 eXBlIGVxICdIQVNIJyApIHsKKysgICAgICAgICAgICAgICAgJXsgJF9bMF0gfSA9ICUkZGF0YTsK KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzaWYoICR0eXBlIGVxICdBUlJBWScgKSB7 CisrICAgICAgICAgICAgICAgIEB7ICRfWzBdIH0gPSBAJGRhdGE7CisrICAgICAgICAgICAgfQor KyAgICAgICAgICAgIGVsc2lmKCAkdHlwZSBlcSAnU0NBTEFSJyApIHsKKysgICAgICAgICAgICAg ICAgJHsgJF9bMF0gfSA9ICQkZGF0YTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxz ZSB7CisrICAgICAgICAgICAgICAgIGRpZSggIlVua25vd24gdHlwZTogIiAuICR0eXBlICk7Cisr ICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiAkX1swXTsKKysgICAgICAgIH07 CisrICAgIH0KKysgICAgIyA1LjguMCdzIHRocmVhZHM6OnNoYXJlZCBpcyBidXN0ZWQgd2hlbiB0 aHJlYWRzIGFyZSBvZmYKKysgICAgIyBhbmQgZWFybGllciBQZXJscyBqdXN0IGRvbid0IGhhdmUg dGhhdCBtb2R1bGUgYXQgYWxsLgorKyAgICBlbHNlIHsKKysgICAgICAgICpzaGFyZSA9IHN1YiB7 IHJldHVybiAkX1swXSB9OworKyAgICAgICAgKmxvY2sgID0gc3ViIHsgMCB9OworKyAgICB9Cisr fQorKworKz1oZWFkMSBOQU1FCisrCisrVGVzdDo6QnVpbGRlciAtIEJhY2tlbmQgZm9yIGJ1aWxk aW5nIHRlc3QgbGlicmFyaWVzCisrCisrPWhlYWQxIFNZTk9QU0lTCisrCisrICBwYWNrYWdlIE15 OjpUZXN0OjpNb2R1bGU7CisrICB1c2UgYmFzZSAnVGVzdDo6QnVpbGRlcjo6TW9kdWxlJzsKKysK KysgIG15ICRDTEFTUyA9IF9fUEFDS0FHRV9fOworKworKyAgc3ViIG9rIHsKKysgICAgICBteSgk dGVzdCwgJG5hbWUpID0gQF87CisrICAgICAgbXkgJHRiID0gJENMQVNTLT5idWlsZGVyOworKwor KyAgICAgICR0Yi0+b2soJHRlc3QsICRuYW1lKTsKKysgIH0KKysKKysKKys9aGVhZDEgREVTQ1JJ UFRJT04KKysKKytUZXN0OjpTaW1wbGUgYW5kIFRlc3Q6Ok1vcmUgaGF2ZSBwcm92ZW4gdG8gYmUg cG9wdWxhciB0ZXN0aW5nIG1vZHVsZXMsCisrYnV0IHRoZXkncmUgbm90IGFsd2F5cyBmbGV4aWJs ZSBlbm91Z2guICBUZXN0OjpCdWlsZGVyIHByb3ZpZGVzIGEKKytidWlsZGluZyBibG9jayB1cG9u IHdoaWNoIHRvIHdyaXRlIHlvdXIgb3duIHRlc3QgbGlicmFyaWVzIEk8d2hpY2ggY2FuCisrd29y ayB0b2dldGhlcj4uCisrCisrPWhlYWQyIENvbnN0cnVjdGlvbgorKworKz1vdmVyIDQKKysKKys9 aXRlbSBCPG5ldz4KKysKKysgIG15ICRUZXN0ID0gVGVzdDo6QnVpbGRlci0+bmV3OworKworK1Jl dHVybnMgYSBUZXN0OjpCdWlsZGVyIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3Rh dGUgb2YgdGhlCisrdGVzdC4KKysKKytTaW5jZSB5b3Ugb25seSBydW4gb25lIHRlc3QgcGVyIHBy b2dyYW0gQzxuZXc+IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lCisrVGVzdDo6QnVpbGRlciBvYmpl Y3QuICBObyBtYXR0ZXIgaG93IG1hbnkgdGltZXMgeW91IGNhbGwgQzxuZXcoKT4sIHlvdSdyZQor K2dldHRpbmcgdGhlIHNhbWUgb2JqZWN0LiAgVGhpcyBpcyBjYWxsZWQgYSBzaW5nbGV0b24uICBU aGlzIGlzIGRvbmUgc28gdGhhdAorK211bHRpcGxlIG1vZHVsZXMgc2hhcmUgc3VjaCBnbG9iYWwg aW5mb3JtYXRpb24gYXMgdGhlIHRlc3QgY291bnRlciBhbmQKKyt3aGVyZSB0ZXN0IG91dHB1dCBp cyBnb2luZy4KKysKKytJZiB5b3Ugd2FudCBhIGNvbXBsZXRlbHkgbmV3IFRlc3Q6OkJ1aWxkZXIg b2JqZWN0IGRpZmZlcmVudCBmcm9tIHRoZQorK3NpbmdsZXRvbiwgdXNlIEM8Y3JlYXRlPi4KKysK Kys9Y3V0CisrCisrb3VyICRUZXN0ID0gVGVzdDo6QnVpbGRlci0+bmV3OworKworK3N1YiBuZXcg eworKyAgICBteSgkY2xhc3MpID0gc2hpZnQ7CisrICAgICRUZXN0IHx8PSAkY2xhc3MtPmNyZWF0 ZTsKKysgICAgcmV0dXJuICRUZXN0OworK30KKysKKys9aXRlbSBCPGNyZWF0ZT4KKysKKysgIG15 ICRUZXN0ID0gVGVzdDo6QnVpbGRlci0+Y3JlYXRlOworKworK09rLCBzbyB0aGVyZSBjYW4gYmUg bW9yZSB0aGFuIG9uZSBUZXN0OjpCdWlsZGVyIG9iamVjdCBhbmQgdGhpcyBpcyBob3cKKyt5b3Ug Z2V0IGl0LiAgWW91IG1pZ2h0IHVzZSB0aGlzIGluc3RlYWQgb2YgQzxuZXcoKT4gaWYgeW91J3Jl IHRlc3RpbmcKKythIFRlc3Q6OkJ1aWxkZXIgYmFzZWQgbW9kdWxlLCBidXQgb3RoZXJ3aXNlIHlv dSBwcm9iYWJseSB3YW50IEM8bmV3Pi4KKysKKytCPE5PVEU+OiB0aGUgaW1wbGVtZW50YXRpb24g aXMgbm90IGNvbXBsZXRlLiAgQzxsZXZlbD4sIGZvciBleGFtcGxlLCBpcworK3N0aWxsIHNoYXJl ZCBhbW9uZ3N0IEI8YWxsPiBUZXN0OjpCdWlsZGVyIG9iamVjdHMsIGV2ZW4gb25lcyBjcmVhdGVk IHVzaW5nCisrdGhpcyBtZXRob2QuICBBbHNvLCB0aGUgbWV0aG9kIG5hbWUgbWF5IGNoYW5nZSBp biB0aGUgZnV0dXJlLgorKworKz1jdXQKKysKKytzdWIgY3JlYXRlIHsKKysgICAgbXkgJGNsYXNz ID0gc2hpZnQ7CisrCisrICAgIG15ICRzZWxmID0gYmxlc3Mge30sICRjbGFzczsKKysgICAgJHNl bGYtPnJlc2V0OworKworKyAgICByZXR1cm4gJHNlbGY7CisrfQorKworKworKyMgQ29weSBhbiBv YmplY3QsIGN1cnJlbnRseSBhIHNoYWxsb3cuCisrIyBUaGlzIGRvZXMgKm5vdCogYmxlc3MgdGhl IGRlc3RpbmF0aW9uLiAgVGhpcyBrZWVwcyB0aGUgZGVzdHJ1Y3RvciBmcm9tCisrIyBmaXJpbmcg d2hlbiB3ZSdyZSBqdXN0IHN0b3JpbmcgYSBjb3B5IG9mIHRoZSBvYmplY3QgdG8gcmVzdG9yZSBs YXRlci4KKytzdWIgX2NvcHkgeworKyAgICBteSgkc3JjLCAkZGVzdCkgPSBAXzsKKysKKysgICAg JSRkZXN0ID0gJSRzcmM7CisrICAgIF9zaGFyZV9rZXlzKCRkZXN0KTsKKysKKysgICAgcmV0dXJu OworK30KKysKKysKKys9aXRlbSBCPGNoaWxkPgorKworKyAgbXkgJGNoaWxkID0gJGJ1aWxkZXIt PmNoaWxkKCRuYW1lX29mX2NoaWxkKTsKKysgICRjaGlsZC0+cGxhbiggdGVzdHMgPT4gNCApOwor KyAgJGNoaWxkLT5vayhzb21lX2NvZGUoKSk7CisrICAuLi4KKysgICRjaGlsZC0+ZmluYWxpemU7 CisrCisrUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBDPFRlc3Q6OkJ1aWxkZXI+LiAgQW55IG91 dHB1dCBmcm9tIHRoaXMgY2hpbGQgd2lsbAorK2JlIGluZGVudGVkIGZvdXIgc3BhY2VzIG1vcmUg dGhhbiB0aGUgcGFyZW50J3MgaW5kZW50YXRpb24uICBXaGVuIGRvbmUsIHRoZQorK0M8ZmluYWxp emU+IG1ldGhvZCBJPG11c3Q+IGJlIGNhbGxlZCBleHBsaWNpdGx5LgorKworK1RyeWluZyB0byBj cmVhdGUgYSBuZXcgY2hpbGQgd2l0aCBhIHByZXZpb3VzIGNoaWxkIHN0aWxsIGFjdGl2ZSAoaS5l LiwKKytDPGZpbmFsaXplPiBub3QgY2FsbGVkKSB3aWxsIEM8Y3JvYWs+LgorKworK1RyeWluZyB0 byBydW4gYSB0ZXN0IHdoZW4geW91IGhhdmUgYW4gb3BlbiBjaGlsZCB3aWxsIGFsc28gQzxjcm9h az4gYW5kIGNhdXNlCisrdGhlIHRlc3Qgc3VpdGUgdG8gZmFpbC4KKysKKys9Y3V0CisrCisrc3Vi IGNoaWxkIHsKKysgICAgbXkoICRzZWxmLCAkbmFtZSApID0gQF87CisrCisrICAgIGlmKCAkc2Vs Zi0+e0NoaWxkX05hbWV9ICkgeworKyAgICAgICAgJHNlbGYtPmNyb2FrKCJZb3UgYWxyZWFkeSBo YXZlIGEgY2hpbGQgbmFtZWQgKCRzZWxmLT57Q2hpbGRfTmFtZX0pIHJ1bm5pbmciKTsKKysgICAg fQorKworKyAgICBteSAkcGFyZW50X2luX3RvZG8gPSAkc2VsZi0+aW5fdG9kbzsKKysKKysgICAg IyBDbGVhciAkVE9ETyBmb3IgdGhlIGNoaWxkLgorKyAgICBteSAkb3JpZ19UT0RPID0gJHNlbGYt PmZpbmRfVE9ETyh1bmRlZiwgMSwgdW5kZWYpOworKworKyAgICBteSAkY2xhc3MgPSByZWYgJHNl bGY7CisrICAgIG15ICRjaGlsZCA9ICRjbGFzcy0+Y3JlYXRlOworKworKyAgICAjIEFkZCB0byBv dXIgaW5kZW50YXRpb24KKysgICAgJGNoaWxkLT5faW5kZW50KCAkc2VsZi0+X2luZGVudCAuICcg ICAgJyApOworKworKyAgICAjIE1ha2UgdGhlIGNoaWxkIHVzZSB0aGUgc2FtZSBvdXRwdXRzIGFz IHRoZSBwYXJlbnQKKysgICAgZm9yIG15ICRtZXRob2QgKHF3KG91dHB1dCBmYWlsdXJlX291dHB1 dCB0b2RvX291dHB1dCkpIHsKKysgICAgICAgICRjaGlsZC0+JG1ldGhvZCggJHNlbGYtPiRtZXRo b2QgKTsKKysgICAgfQorKworKyAgICAjIEVuc3VyZSB0aGUgY2hpbGQgdW5kZXJzdGFuZHMgaWYg dGhleSdyZSBpbnNpZGUgYSBUT0RPCisrICAgIGlmKCAkcGFyZW50X2luX3RvZG8gKSB7CisrICAg ICAgICAkY2hpbGQtPmZhaWx1cmVfb3V0cHV0KCAkc2VsZi0+dG9kb19vdXRwdXQgKTsKKysgICAg fQorKworKyAgICAjIFRoaXMgd2lsbCBiZSByZXNldCBpbiBmaW5hbGl6ZS4gV2UgZG8gdGhpcyBo ZXJlIGxlc3Qgb25lIGNoaWxkIGZhaWx1cmUKKysgICAgIyBjYXVzZSBhbGwgY2hpbGRyZW4gdG8g ZmFpbC4KKysgICAgJGNoaWxkLT57Q2hpbGRfRXJyb3J9ID0gJD87CisrICAgICQ/ICAgICAgICAg ICAgICAgICAgICA9IDA7CisrICAgICRjaGlsZC0+e1BhcmVudH0gICAgICA9ICRzZWxmOworKyAg ICAkY2hpbGQtPntQYXJlbnRfVE9ET30gPSAkb3JpZ19UT0RPOworKyAgICAkY2hpbGQtPntOYW1l fSAgICAgICAgPSAkbmFtZSB8fCAiQ2hpbGQgb2YgIiAuICRzZWxmLT5uYW1lOworKyAgICAkc2Vs Zi0+e0NoaWxkX05hbWV9ICAgPSAkY2hpbGQtPm5hbWU7CisrICAgIHJldHVybiAkY2hpbGQ7Cisr fQorKworKworKz1pdGVtIEI8c3VidGVzdD4KKysKKysgICAgJGJ1aWxkZXItPnN1YnRlc3QoJG5h bWUsIFwmc3VidGVzdHMpOworKworK1NlZSBkb2N1bWVudGF0aW9uIG9mIEM8c3VidGVzdD4gaW4g VGVzdDo6TW9yZS4KKysKKys9Y3V0CisrCisrc3ViIHN1YnRlc3QgeworKyAgICBteSAkc2VsZiA9 IHNoaWZ0OworKyAgICBteSgkbmFtZSwgJHN1YnRlc3RzKSA9IEBfOworKworKyAgICBpZiAoJ0NP REUnIG5lIHJlZiAkc3VidGVzdHMpIHsKKysgICAgICAgICRzZWxmLT5jcm9haygic3VidGVzdCgp J3Mgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSBjb2RlIHJlZiIpOworKyAgICB9CisrCisrICAg ICMgVHVybiB0aGUgY2hpbGQgaW50byB0aGUgcGFyZW50IHNvIGFueW9uZSB3aG8gaGFzIHN0b3Jl ZCBhIGNvcHkgb2YKKysgICAgIyB0aGUgVGVzdDo6QnVpbGRlciBzaW5nbGV0b24gd2lsbCBnZXQg dGhlIGNoaWxkLgorKyAgICBteSAkZXJyb3I7CisrICAgIG15ICRjaGlsZDsKKysgICAgbXkgJHBh cmVudCA9IHt9OworKyAgICB7CisrICAgICAgICAjIGNoaWxkKCkgY2FsbHMgcmVzZXQoKSB3aGlj aCBzZXRzICRMZXZlbCB0byAxLCBzbyB3ZSBsb2NhbGl6ZQorKyAgICAgICAgIyAkTGV2ZWwgZmly c3QgdG8gbGltaXQgdGhlIHNjb3BlIG9mIHRoZSByZXNldCB0byB0aGUgc3VidGVzdC4KKysgICAg ICAgIGxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCAr IDE7CisrCisrICAgICAgICAjIFN0b3JlIHRoZSBndXRzIG9mICRzZWxmIGFzICRwYXJlbnQgYW5k IHR1cm4gJGNoaWxkIGludG8gJHNlbGYuCisrICAgICAgICAkY2hpbGQgID0gJHNlbGYtPmNoaWxk KCRuYW1lKTsKKysgICAgICAgIF9jb3B5KCRzZWxmLCAgJHBhcmVudCk7CisrICAgICAgICBfY29w eSgkY2hpbGQsICRzZWxmKTsKKysKKysgICAgICAgIG15ICRydW5fdGhlX3N1YnRlc3RzID0gc3Vi IHsKKysgICAgICAgICAgICAjIEFkZCBzdWJ0ZXN0IG5hbWUgZm9yIGNsYXJpZmljYXRpb24gb2Yg c3RhcnRpbmcgcG9pbnQKKysgICAgICAgICAgICAkc2VsZi0+bm90ZSgiU3VidGVzdDogJG5hbWUi KTsKKysgICAgICAgICAgICAkc3VidGVzdHMtPigpOworKyAgICAgICAgICAgICRzZWxmLT5kb25l X3Rlc3RpbmcgdW5sZXNzICRzZWxmLT5fcGxhbl9oYW5kbGVkOworKyAgICAgICAgICAgIDE7Cisr ICAgICAgICB9OworKworKyAgICAgICAgaWYoICFldmFsIHsgJHJ1bl90aGVfc3VidGVzdHMtPigp IH0gKSB7CisrICAgICAgICAgICAgJGVycm9yID0gJEA7CisrICAgICAgICB9CisrICAgIH0KKysK KysgICAgIyBSZXN0b3JlIHRoZSBwYXJlbnQgYW5kIHRoZSBjb3BpZWQgY2hpbGQuCisrICAgIF9j b3B5KCRzZWxmLCAgICRjaGlsZCk7CisrICAgIF9jb3B5KCRwYXJlbnQsICRzZWxmKTsKKysKKysg ICAgIyBSZXN0b3JlIHRoZSBwYXJlbnQncyAkVE9ETworKyAgICAkc2VsZi0+ZmluZF9UT0RPKHVu ZGVmLCAxLCAkY2hpbGQtPntQYXJlbnRfVE9ET30pOworKworKyAgICAjIERpZSAqYWZ0ZXIqIHdl IHJlc3RvcmUgdGhlIHBhcmVudC4KKysgICAgZGllICRlcnJvciBpZiAkZXJyb3IgYW5kICFldmFs IHsgJGVycm9yLT5pc2EoJ1Rlc3Q6OkJ1aWxkZXI6OkV4Y2VwdGlvbicpIH07CisrCisrICAgIGxv Y2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCArIDE7Cisr ICAgIG15ICRmaW5hbGl6ZSA9ICRjaGlsZC0+ZmluYWxpemU7CisrCisrICAgICRzZWxmLT5CQUlM X09VVCgkY2hpbGQtPntCYWlsZWRfT3V0X1JlYXNvbn0pIGlmICRjaGlsZC0+e0JhaWxlZF9PdXR9 OworKworKyAgICByZXR1cm4gJGZpbmFsaXplOworK30KKysKKys9YmVnaW4gX3ByaXZhdGUKKysK Kys9aXRlbSBCPF9wbGFuX2hhbmRsZWQ+CisrCisrICAgIGlmICggJFRlc3QtPl9wbGFuX2hhbmRs ZWQgKSB7IC4uLiB9CisrCisrUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZlbG9wZXIgaGFzIGV4cGxp Y2l0bHkgaGFuZGxlZCB0aGUgcGxhbiB2aWE6CisrCisrPW92ZXIgNAorKworKz1pdGVtICogRXhw bGljaXRseSBzZXR0aW5nIHRoZSBudW1iZXIgb2YgdGVzdHMKKysKKys9aXRlbSAqIFNldHRpbmcg J25vX3BsYW4nCisrCisrPWl0ZW0gKiBTZXQgJ3NraXBfYWxsJy4KKysKKys9YmFjaworKworK1Ro aXMgaXMgY3VycmVudGx5IHVzZWQgaW4gc3VidGVzdHMgd2hlbiB3ZSBpbXBsaWNpdGx5IGNhbGwg Qzw8ICRUZXN0LT5kb25lX3Rlc3RpbmcgPj4KKytpZiB0aGUgZGV2ZWxvcGVyIGhhcyBub3Qgc2V0 IGEgcGxhbi4KKysKKys9ZW5kIF9wcml2YXRlCisrCisrPWN1dAorKworK3N1YiBfcGxhbl9oYW5k bGVkIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysgICAgcmV0dXJuICRzZWxmLT57SGF2ZV9Q bGFufSB8fCAkc2VsZi0+e05vX1BsYW59IHx8ICRzZWxmLT57U2tpcF9BbGx9OworK30KKysKKysK Kys9aXRlbSBCPGZpbmFsaXplPgorKworKyAgbXkgJG9rID0gJGNoaWxkLT5maW5hbGl6ZTsKKysK KytXaGVuIHlvdXIgY2hpbGQgaXMgZG9uZSBydW5uaW5nIHRlc3RzLCB5b3UgbXVzdCBjYWxsIEM8 ZmluYWxpemU+IHRvIGNsZWFuIHVwCisrYW5kIHRlbGwgdGhlIHBhcmVudCB5b3VyIHBhc3MvZmFp bCBzdGF0dXMuCisrCisrQ2FsbGluZyBmaW5hbGl6ZSBvbiBhIGNoaWxkIHdpdGggb3BlbiBjaGls ZHJlbiB3aWxsIEM8Y3JvYWs+LgorKworK0lmIHRoZSBjaGlsZCBmYWxscyBvdXQgb2Ygc2NvcGUg YmVmb3JlIEM8ZmluYWxpemU+IGlzIGNhbGxlZCwgYSBmYWlsdXJlCisrZGlhZ25vc3RpYyB3aWxs IGJlIGlzc3VlZCBhbmQgdGhlIGNoaWxkIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBmYWlsZWQuCisr CisrTm8gYXR0ZW1wdCB0byBjYWxsIG1ldGhvZHMgb24gYSBjaGlsZCBhZnRlciBDPGZpbmFsaXpl PiBpcyBjYWxsZWQgaXMKKytndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisrCisrQ2FsbGluZyB0aGlz IG9uIHRoZSByb290IGJ1aWxkZXIgaXMgYSBuby1vcC4KKysKKys9Y3V0CisrCisrc3ViIGZpbmFs aXplIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysKKysgICAgcmV0dXJuIHVubGVzcyAkc2Vs Zi0+cGFyZW50OworKyAgICBpZiggJHNlbGYtPntDaGlsZF9OYW1lfSApIHsKKysgICAgICAgICRz ZWxmLT5jcm9haygiQ2FuJ3QgY2FsbCBmaW5hbGl6ZSgpIHdpdGggY2hpbGQgKCRzZWxmLT57Q2hp bGRfTmFtZX0pIGFjdGl2ZSIpOworKyAgICB9CisrCisrICAgIGxvY2FsICQ/ID0gMDsgICAgICMg ZG9uJ3QgZmFpbCBpZiAkc3VidGVzdHMgaGFwcGVuZWQgdG8gc2V0ICQ/IG5vbnplcm8KKysgICAg JHNlbGYtPl9lbmRpbmc7CisrCisrICAgICMgWFhYIFRoaXMgd2lsbCBvbmx5IGJlIG5lY2Vzc2Fy eSBmb3IgVEFQIGVudmVsb3BlcyAod2UgdGhpbmspCisrICAgICMkc2VsZi0+X3ByaW50KCAkc2Vs Zi0+aXNfcGFzc2luZyA/ICJQQVNTXG4iIDogIkZBSUxcbiIgKTsKKysKKysgICAgbG9jYWwgJFRl c3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsKKysgICAgbXkg JG9rID0gMTsKKysgICAgJHNlbGYtPnBhcmVudC0+e0NoaWxkX05hbWV9ID0gdW5kZWY7CisrICAg IHVubGVzcyAoJHNlbGYtPntCYWlsZWRfT3V0fSkgeworKyAgICAgICAgaWYgKCAkc2VsZi0+e1Nr aXBfQWxsfSApIHsKKysgICAgICAgICAgICAkc2VsZi0+cGFyZW50LT5za2lwKCRzZWxmLT57U2tp cF9BbGx9KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2lmICggbm90IEB7ICRzZWxmLT57VGVz dF9SZXN1bHRzfSB9ICkgeworKyAgICAgICAgICAgICRzZWxmLT5wYXJlbnQtPm9rKCAwLCBzcHJp bnRmIHFbTm8gdGVzdHMgcnVuIGZvciBzdWJ0ZXN0ICIlcyJdLCAkc2VsZi0+bmFtZSApOworKyAg ICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgJHNlbGYtPnBhcmVudC0+b2so ICRzZWxmLT5pc19wYXNzaW5nLCAkc2VsZi0+bmFtZSApOworKyAgICAgICAgfQorKyAgICB9Cisr ICAgICQ/ID0gJHNlbGYtPntDaGlsZF9FcnJvcn07CisrICAgIGRlbGV0ZSAkc2VsZi0+e1BhcmVu dH07CisrCisrICAgIHJldHVybiAkc2VsZi0+aXNfcGFzc2luZzsKKyt9CisrCisrc3ViIF9pbmRl bnQgICAgICB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrCisrICAgIGlmKCBAXyApIHsKKysg ICAgICAgICRzZWxmLT57SW5kZW50fSA9IHNoaWZ0OworKyAgICB9CisrCisrICAgIHJldHVybiAk c2VsZi0+e0luZGVudH07CisrfQorKworKz1pdGVtIEI8cGFyZW50PgorKworKyBpZiAoIG15ICRw YXJlbnQgPSAkYnVpbGRlci0+cGFyZW50ICkgeworKyAgICAgLi4uCisrIH0KKysKKytSZXR1cm5z IHRoZSBwYXJlbnQgQzxUZXN0OjpCdWlsZGVyPiBpbnN0YW5jZSwgaWYgYW55LiAgT25seSB1c2Vk IHdpdGggY2hpbGQKKytidWlsZGVycyBmb3IgbmVzdGVkIFRBUC4KKysKKys9Y3V0CisrCisrc3Vi IHBhcmVudCB7IHNoaWZ0LT57UGFyZW50fSB9CisrCisrPWl0ZW0gQjxuYW1lPgorKworKyBkaWFn ICRidWlsZGVyLT5uYW1lOworKworK1JldHVybnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnVp bGRlci4gIFRvcCBsZXZlbCBidWlsZGVycyBkZWZhdWx0IHRvIEM8JDA+CisrKHRoZSBuYW1lIG9m IHRoZSBleGVjdXRhYmxlKS4gIENoaWxkIGJ1aWxkZXJzIGFyZSBuYW1lZCB2aWEgdGhlIEM8Y2hp bGQ+CisrbWV0aG9kLiAgSWYgbm8gbmFtZSBpcyBzdXBwbGllZCwgd2lsbCBiZSBuYW1lZCAiQ2hp bGQgb2YgJHBhcmVudC0+bmFtZSIuCisrCisrPWN1dAorKworK3N1YiBuYW1lIHsgc2hpZnQtPntO YW1lfSB9CisrCisrc3ViIERFU1RST1kgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKyAgICBp ZiAoICRzZWxmLT5wYXJlbnQgYW5kICQkID09ICRzZWxmLT57T3JpZ2luYWxfUGlkfSApIHsKKysg ICAgICAgIG15ICRuYW1lID0gJHNlbGYtPm5hbWU7CisrICAgICAgICAkc2VsZi0+ZGlhZyg8PCJG QUlMIik7CisrQ2hpbGQgKCRuYW1lKSBleGl0ZWQgd2l0aG91dCBjYWxsaW5nIGZpbmFsaXplKCkK KytGQUlMCisrICAgICAgICAkc2VsZi0+cGFyZW50LT57SW5fRGVzdHJveX0gPSAxOworKyAgICAg ICAgJHNlbGYtPnBhcmVudC0+b2soMCwgJG5hbWUpOworKyAgICB9CisrfQorKworKz1pdGVtIEI8 cmVzZXQ+CisrCisrICAkVGVzdC0+cmVzZXQ7CisrCisrUmVpbml0aWFsaXplcyB0aGUgVGVzdDo6 QnVpbGRlciBzaW5nbGV0b24gdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorK01vc3RseSB1c2VmdWwg Zm9yIHRlc3RzIHJ1biBpbiBwZXJzaXN0ZW50IGVudmlyb25tZW50cyB3aGVyZSB0aGUgc2FtZQor K3Rlc3QgbWlnaHQgYmUgcnVuIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIHByb2Nlc3MuCisr CisrPWN1dAorKworK291ciAkTGV2ZWw7CisrCisrc3ViIHJlc2V0IHsgICAgIyMgbm8gY3JpdGlj IChTdWJyb3V0aW5lczo6UHJvaGliaXRCdWlsdGluSG9tb255bXMpCisrICAgIG15KCRzZWxmKSA9 IEBfOworKworKyAgICAjIFdlIGxlYXZlIHRoaXMgYSBnbG9iYWwgYmVjYXVzZSBpdCBoYXMgdG8g YmUgbG9jYWxpemVkIGFuZCBsb2NhbGl6aW5nCisrICAgICMgaGFzaCBrZXlzIGlzIGp1c3QgYXNr aW5nIGZvciBwYWluLiAgQWxzbywgaXQgd2FzIGRvY3VtZW50ZWQuCisrICAgICRMZXZlbCA9IDE7 CisrCisrICAgICRzZWxmLT57TmFtZX0gICAgICAgICA9ICQwOworKyAgICAkc2VsZi0+aXNfcGFz c2luZygxKTsKKysgICAgJHNlbGYtPntFbmRpbmd9ICAgICAgID0gMDsKKysgICAgJHNlbGYtPntI YXZlX1BsYW59ICAgID0gMDsKKysgICAgJHNlbGYtPntOb19QbGFufSAgICAgID0gMDsKKysgICAg JHNlbGYtPntIYXZlX091dHB1dF9QbGFufSA9IDA7CisrICAgICRzZWxmLT57RG9uZV9UZXN0aW5n fSA9IDA7CisrCisrICAgICRzZWxmLT57T3JpZ2luYWxfUGlkfSA9ICQkOworKyAgICAkc2VsZi0+ e0NoaWxkX05hbWV9ICAgPSB1bmRlZjsKKysgICAgJHNlbGYtPntJbmRlbnR9ICAgICB8fD0gJyc7 CisrCisrICAgICRzZWxmLT57Q3Vycl9UZXN0fSA9IDA7CisrICAgICRzZWxmLT57VGVzdF9SZXN1 bHRzfSA9ICZzaGFyZSggW10gKTsKKysKKysgICAgJHNlbGYtPntFeHBvcnRlZF9Ub30gICAgPSB1 bmRlZjsKKysgICAgJHNlbGYtPntFeHBlY3RlZF9UZXN0c30gPSAwOworKworKyAgICAkc2VsZi0+ e1NraXBfQWxsfSA9IDA7CisrCisrICAgICRzZWxmLT57VXNlX051bXN9ID0gMTsKKysKKysgICAg JHNlbGYtPntOb19IZWFkZXJ9ID0gMDsKKysgICAgJHNlbGYtPntOb19FbmRpbmd9ID0gMDsKKysK KysgICAgJHNlbGYtPntUb2RvfSAgICAgICA9IHVuZGVmOworKyAgICAkc2VsZi0+e1RvZG9fU3Rh Y2t9ID0gW107CisrICAgICRzZWxmLT57U3RhcnRfVG9kb30gPSAwOworKyAgICAkc2VsZi0+e09w ZW5lZF9UZXN0aGFuZGxlc30gPSAwOworKworKyAgICAkc2VsZi0+X3NoYXJlX2tleXM7CisrICAg ICRzZWxmLT5fZHVwX3N0ZGhhbmRsZXM7CisrCisrICAgIHJldHVybjsKKyt9CisrCisrCisrIyBT aGFyZWQgc2NhbGFyIHZhbHVlcyBhcmUgbG9zdCB3aGVuIGEgaGFzaCBpcyBjb3BpZWQsIHNvIHdl IGhhdmUKKysjIGEgc2VwYXJhdGUgbWV0aG9kIHRvIHJlc3RvcmUgdGhlbS4KKysjIFNoYXJlZCBy ZWZlcmVuY2VzIGFyZSByZXRhaW5lZCBhY3Jvc3MgY29waWVzLgorK3N1YiBfc2hhcmVfa2V5cyB7 CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrCisrICAgIHNoYXJlKCAkc2VsZi0+e0N1cnJfVGVz dH0gKTsKKysKKysgICAgcmV0dXJuOworK30KKysKKysKKys9YmFjaworKworKz1oZWFkMiBTZXR0 aW5nIHVwIHRlc3RzCisrCisrVGhlc2UgbWV0aG9kcyBhcmUgZm9yIHNldHRpbmcgdXAgdGVzdHMg YW5kIGRlY2xhcmluZyBob3cgbWFueSB0aGVyZQorK2FyZS4gIFlvdSB1c3VhbGx5IG9ubHkgd2Fu dCB0byBjYWxsIG9uZSBvZiB0aGVzZSBtZXRob2RzLgorKworKz1vdmVyIDQKKysKKys9aXRlbSBC PHBsYW4+CisrCisrICAkVGVzdC0+cGxhbignbm9fcGxhbicpOworKyAgJFRlc3QtPnBsYW4oIHNr aXBfYWxsID0+ICRyZWFzb24gKTsKKysgICRUZXN0LT5wbGFuKCB0ZXN0cyA9PiAkbnVtX3Rlc3Rz ICk7CisrCisrQSBjb252ZW5pZW50IHdheSB0byBzZXQgdXAgeW91ciB0ZXN0cy4gIENhbGwgdGhp cyBhbmQgVGVzdDo6QnVpbGRlcgorK3dpbGwgcHJpbnQgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMg YW5kIHRha2UgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbnMuCisrCisrSWYgeW91IGNhbGwgQzxwbGFu KCk+LCBkb24ndCBjYWxsIGFueSBvZiB0aGUgb3RoZXIgbWV0aG9kcyBiZWxvdy4KKysKKytJZiBh IGNoaWxkIGNhbGxzICJza2lwX2FsbCIgaW4gdGhlIHBsYW4sIGEgQzxUZXN0OjpCdWlsZGVyOjpF eGNlcHRpb24+IGlzCisrdGhyb3duLiAgVHJhcCB0aGlzIGVycm9yLCBjYWxsIEM8ZmluYWxpemUo KT4gYW5kIGRvbid0IHJ1biBhbnkgbW9yZSB0ZXN0cyBvbgorK3RoZSBjaGlsZC4KKysKKysgbXkg JGNoaWxkID0gJFRlc3QtPmNoaWxkKCdzb21lIGNoaWxkJyk7CisrIGV2YWwgeyAkY2hpbGQtPnBs YW4oICRjb25kaXRpb24gPyAoIHNraXBfYWxsID0+ICRyZWFzb24gKSA6ICggdGVzdHMgPT4gMyAp ICApIH07CisrIGlmICggZXZhbCB7ICRALT5pc2EoJ1Rlc3Q6OkJ1aWxkZXI6OkV4Y2VwdGlvbicp IH0gKSB7CisrICAgICRjaGlsZC0+ZmluYWxpemU7CisrICAgIHJldHVybjsKKysgfQorKyAjIHJ1 biB5b3VyIHRlc3RzCisrCisrPWN1dAorKworK215ICVwbGFuX2NtZHMgPSAoCisrICAgIG5vX3Bs YW4gICAgID0+IFwmbm9fcGxhbiwKKysgICAgc2tpcF9hbGwgICAgPT4gXCZza2lwX2FsbCwKKysg ICAgdGVzdHMgICAgICAgPT4gXCZfcGxhbl90ZXN0cywKKyspOworKworK3N1YiBwbGFuIHsKKysg ICAgbXkoICRzZWxmLCAkY21kLCAkYXJnICkgPSBAXzsKKysKKysgICAgcmV0dXJuIHVubGVzcyAk Y21kOworKworKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOworKworKyAgICAkc2VsZi0+ Y3JvYWsoIllvdSB0cmllZCB0byBwbGFuIHR3aWNlIikgaWYgJHNlbGYtPntIYXZlX1BsYW59Owor KworKyAgICBpZiggbXkgJG1ldGhvZCA9ICRwbGFuX2NtZHN7JGNtZH0gKSB7CisrICAgICAgICBs b2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOworKyAgICAgICAgJHNlbGYtPiRtZXRob2QoJGFyZyk7 CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBteSBAYXJncyA9IGdyZXAgeyBkZWZpbmVk IH0gKCAkY21kLCAkYXJnICk7CisrICAgICAgICAkc2VsZi0+Y3JvYWsoInBsYW4oKSBkb2Vzbid0 IHVuZGVyc3RhbmQgQGFyZ3MiKTsKKysgICAgfQorKworKyAgICByZXR1cm4gMTsKKyt9CisrCisr Cisrc3ViIF9wbGFuX3Rlc3RzIHsKKysgICAgbXkoJHNlbGYsICRhcmcpID0gQF87CisrCisrICAg IGlmKCRhcmcpIHsKKysgICAgICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7CisrICAgICAg ICByZXR1cm4gJHNlbGYtPmV4cGVjdGVkX3Rlc3RzKCRhcmcpOworKyAgICB9CisrICAgIGVsc2lm KCAhZGVmaW5lZCAkYXJnICkgeworKyAgICAgICAgJHNlbGYtPmNyb2FrKCJHb3QgYW4gdW5kZWZp bmVkIG51bWJlciBvZiB0ZXN0cyIpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgJHNl bGYtPmNyb2FrKCJZb3Ugc2FpZCB0byBydW4gMCB0ZXN0cyIpOworKyAgICB9CisrCisrICAgIHJl dHVybjsKKyt9CisrCisrPWl0ZW0gQjxleHBlY3RlZF90ZXN0cz4KKysKKysgICAgbXkgJG1heCA9 ICRUZXN0LT5leHBlY3RlZF90ZXN0czsKKysgICAgJFRlc3QtPmV4cGVjdGVkX3Rlc3RzKCRtYXgp OworKworK0dldHMvc2V0cyB0aGUgbnVtYmVyIG9mIHRlc3RzIHdlIGV4cGVjdCB0aGlzIHRlc3Qg dG8gcnVuIGFuZCBwcmludHMgb3V0CisrdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMuCisrCisrPWN1 dAorKworK3N1YiBleHBlY3RlZF90ZXN0cyB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAg IG15KCRtYXgpID0gQF87CisrCisrICAgIGlmKEBfKSB7CisrICAgICAgICAkc2VsZi0+Y3JvYWso Ik51bWJlciBvZiB0ZXN0cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIFlvdSBnYXZlIGl0 ICckbWF4JyIpCisrICAgICAgICAgIHVubGVzcyAkbWF4ID1+IC9eXCs/XGQrJC87CisrCisrICAg ICAgICAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSA9ICRtYXg7CisrICAgICAgICAkc2VsZi0+e0hh dmVfUGxhbn0gICAgICA9IDE7CisrCisrICAgICAgICAkc2VsZi0+X291dHB1dF9wbGFuKCRtYXgp IHVubGVzcyAkc2VsZi0+bm9faGVhZGVyOworKyAgICB9CisrICAgIHJldHVybiAkc2VsZi0+e0V4 cGVjdGVkX1Rlc3RzfTsKKyt9CisrCisrPWl0ZW0gQjxub19wbGFuPgorKworKyAgJFRlc3QtPm5v X3BsYW47CisrCisrRGVjbGFyZXMgdGhhdCB0aGlzIHRlc3Qgd2lsbCBydW4gYW4gaW5kZXRlcm1p bmF0ZSBudW1iZXIgb2YgdGVzdHMuCisrCisrPWN1dAorKworK3N1YiBub19wbGFuIHsKKysgICAg bXkoJHNlbGYsICRhcmcpID0gQF87CisrCisrICAgICRzZWxmLT5jYXJwKCJub19wbGFuIHRha2Vz IG5vIGFyZ3VtZW50cyIpIGlmICRhcmc7CisrCisrICAgICRzZWxmLT57Tm9fUGxhbn0gICA9IDE7 CisrICAgICRzZWxmLT57SGF2ZV9QbGFufSA9IDE7CisrCisrICAgIHJldHVybiAxOworK30KKysK Kys9YmVnaW4gcHJpdmF0ZQorKworKz1pdGVtIEI8X291dHB1dF9wbGFuPgorKworKyAgJHRiLT5f b3V0cHV0X3BsYW4oJG1heCk7CisrICAkdGItPl9vdXRwdXRfcGxhbigkbWF4LCAkZGlyZWN0aXZl KTsKKysgICR0Yi0+X291dHB1dF9wbGFuKCRtYXgsICRkaXJlY3RpdmUgPT4gJHJlYXNvbik7Cisr CisrSGFuZGxlcyBkaXNwbGF5aW5nIHRoZSB0ZXN0IHBsYW4uCisrCisrSWYgYSBDPCRkaXJlY3Rp dmU+IGFuZC9vciBDPCRyZWFzb24+IGFyZSBnaXZlbiB0aGV5IHdpbGwgYmUgb3V0cHV0IHdpdGgg dGhlCisrcGxhbi4gIFNvIGhlcmUncyB3aGF0IHNraXBwaW5nIGFsbCB0ZXN0cyBsb29rcyBsaWtl OgorKworKyAgICAkdGItPl9vdXRwdXRfcGxhbigwLCAiU0tJUCIsICJCZWNhdXNlIEkgc2FpZCBz byIpOworKworK0l0IHNldHMgQzw8ICR0Yi0+e0hhdmVfT3V0cHV0X1BsYW59ID4+IGFuZCB3aWxs IGNyb2FrIGlmIHRoZSBwbGFuIHdhcyBhbHJlYWR5Cisrb3V0cHV0LgorKworKz1lbmQgcHJpdmF0 ZQorKworKz1jdXQKKysKKytzdWIgX291dHB1dF9wbGFuIHsKKysgICAgbXkoJHNlbGYsICRtYXgs ICRkaXJlY3RpdmUsICRyZWFzb24pID0gQF87CisrCisrICAgICRzZWxmLT5jYXJwKCJUaGUgcGxh biB3YXMgYWxyZWFkeSBvdXRwdXQiKSBpZiAkc2VsZi0+e0hhdmVfT3V0cHV0X1BsYW59OworKwor KyAgICBteSAkcGxhbiA9ICIxLi4kbWF4IjsKKysgICAgJHBsYW4gLj0gIiAjICRkaXJlY3RpdmUi IGlmIGRlZmluZWQgJGRpcmVjdGl2ZTsKKysgICAgJHBsYW4gLj0gIiAkcmVhc29uIiAgICAgIGlm IGRlZmluZWQgJHJlYXNvbjsKKysKKysgICAgJHNlbGYtPl9wcmludCgiJHBsYW5cbiIpOworKwor KyAgICAkc2VsZi0+e0hhdmVfT3V0cHV0X1BsYW59ID0gMTsKKysKKysgICAgcmV0dXJuOworK30K KysKKysKKys9aXRlbSBCPGRvbmVfdGVzdGluZz4KKysKKysgICRUZXN0LT5kb25lX3Rlc3Rpbmco KTsKKysgICRUZXN0LT5kb25lX3Rlc3RpbmcoJG51bV90ZXN0cyk7CisrCisrRGVjbGFyZXMgdGhh dCB5b3UgYXJlIGRvbmUgdGVzdGluZywgbm8gbW9yZSB0ZXN0cyB3aWxsIGJlIHJ1biBhZnRlciB0 aGlzIHBvaW50LgorKworK0lmIGEgcGxhbiBoYXMgbm90IHlldCBiZWVuIG91dHB1dCwgaXQgd2ls bCBkbyBzby4KKysKKyskbnVtX3Rlc3RzIGlzIHRoZSBudW1iZXIgb2YgdGVzdHMgeW91IHBsYW5u ZWQgdG8gcnVuLiAgSWYgYSBudW1iZXJlZAorK3BsYW4gd2FzIGFscmVhZHkgZGVjbGFyZWQsIGFu ZCBpZiB0aGlzIGNvbnRyYWRpY3RzLCBhIGZhaWxpbmcgdGVzdAorK3dpbGwgYmUgcnVuIHRvIHJl ZmxlY3QgdGhlIHBsYW5uaW5nIG1pc3Rha2UuICBJZiBDPG5vX3BsYW4+IHdhcyBkZWNsYXJlZCwK Kyt0aGlzIHdpbGwgb3ZlcnJpZGUuCisrCisrSWYgQzxkb25lX3Rlc3RpbmcoKT4gaXMgY2FsbGVk IHR3aWNlLCB0aGUgc2Vjb25kIGNhbGwgd2lsbCBpc3N1ZSBhCisrZmFpbGluZyB0ZXN0LgorKwor K0lmIEM8JG51bV90ZXN0cz4gaXMgb21pdHRlZCwgdGhlIG51bWJlciBvZiB0ZXN0cyBydW4gd2ls bCBiZSB1c2VkLCBsaWtlCisrbm9fcGxhbi4KKysKKytDPGRvbmVfdGVzdGluZygpPiBpcywgaW4g ZWZmZWN0LCB1c2VkIHdoZW4geW91J2Qgd2FudCB0byB1c2UgQzxub19wbGFuPiwgYnV0Cisrc2Fm ZXIuIFlvdSdkIHVzZSBpdCBsaWtlIHNvOgorKworKyAgICAkVGVzdC0+b2soJGEgPT0gJGIpOwor KyAgICAkVGVzdC0+ZG9uZV90ZXN0aW5nKCk7CisrCisrT3IgdG8gcGxhbiBhIHZhcmlhYmxlIG51 bWJlciBvZiB0ZXN0czoKKysKKysgICAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKKysgICAgICAg ICRUZXN0LT5vaygkdGVzdCk7CisrICAgIH0KKysgICAgJFRlc3QtPmRvbmVfdGVzdGluZyhzY2Fs YXIgQHRlc3RzKTsKKysKKys9Y3V0CisrCisrc3ViIGRvbmVfdGVzdGluZyB7CisrICAgIG15KCRz ZWxmLCAkbnVtX3Rlc3RzKSA9IEBfOworKworKyAgICAjIElmIGRvbmVfdGVzdGluZygpIHNwZWNp ZmllZCB0aGUgbnVtYmVyIG9mIHRlc3RzLCBzaHV0IG9mZiBub19wbGFuLgorKyAgICBpZiggZGVm aW5lZCAkbnVtX3Rlc3RzICkgeworKyAgICAgICAgJHNlbGYtPntOb19QbGFufSA9IDA7CisrICAg IH0KKysgICAgZWxzZSB7CisrICAgICAgICAkbnVtX3Rlc3RzID0gJHNlbGYtPmN1cnJlbnRfdGVz dDsKKysgICAgfQorKworKyAgICBpZiggJHNlbGYtPntEb25lX1Rlc3Rpbmd9ICkgeworKyAgICAg ICAgbXkoJGZpbGUsICRsaW5lKSA9IEB7JHNlbGYtPntEb25lX1Rlc3Rpbmd9fVsxLDJdOworKyAg ICAgICAgJHNlbGYtPm9rKDAsICJkb25lX3Rlc3RpbmcoKSB3YXMgYWxyZWFkeSBjYWxsZWQgYXQg JGZpbGUgbGluZSAkbGluZSIpOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAgICRz ZWxmLT57RG9uZV9UZXN0aW5nfSA9IFtjYWxsZXJdOworKworKyAgICBpZiggJHNlbGYtPmV4cGVj dGVkX3Rlc3RzICYmICRudW1fdGVzdHMgIT0gJHNlbGYtPmV4cGVjdGVkX3Rlc3RzICkgeworKyAg ICAgICAgJHNlbGYtPm9rKDAsICJwbGFubmVkIHRvIHJ1biBAe1sgJHNlbGYtPmV4cGVjdGVkX3Rl c3RzIF19ICIuCisrICAgICAgICAgICAgICAgICAgICAgImJ1dCBkb25lX3Rlc3RpbmcoKSBleHBl Y3RzICRudW1fdGVzdHMiKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICRzZWxmLT57 RXhwZWN0ZWRfVGVzdHN9ID0gJG51bV90ZXN0czsKKysgICAgfQorKworKyAgICAkc2VsZi0+X291 dHB1dF9wbGFuKCRudW1fdGVzdHMpIHVubGVzcyAkc2VsZi0+e0hhdmVfT3V0cHV0X1BsYW59Owor KworKyAgICAkc2VsZi0+e0hhdmVfUGxhbn0gPSAxOworKworKyAgICAjIFRoZSB3cm9uZyBudW1i ZXIgb2YgdGVzdHMgd2VyZSBydW4KKysgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCkgaWYgJHNlbGYt PntFeHBlY3RlZF9UZXN0c30gIT0gJHNlbGYtPntDdXJyX1Rlc3R9OworKworKyAgICAjIE5vIHRl c3RzIHdlcmUgcnVuCisrICAgICRzZWxmLT5pc19wYXNzaW5nKDApIGlmICRzZWxmLT57Q3Vycl9U ZXN0fSA9PSAwOworKworKyAgICByZXR1cm4gMTsKKyt9CisrCisrCisrPWl0ZW0gQjxoYXNfcGxh bj4KKysKKysgICRwbGFuID0gJFRlc3QtPmhhc19wbGFuCisrCisrRmluZCBvdXQgd2hldGhlciBh IHBsYW4gaGFzIGJlZW4gZGVmaW5lZC4gQzwkcGxhbj4gaXMgZWl0aGVyIEM8dW5kZWY+IChubyBw bGFuCisraGFzIGJlZW4gc2V0KSwgQzxub19wbGFuPiAoaW5kZXRlcm1pbmF0ZSAjIG9mIHRlc3Rz KSBvciBhbiBpbnRlZ2VyICh0aGUgbnVtYmVyCisrb2YgZXhwZWN0ZWQgdGVzdHMpLgorKworKz1j dXQKKysKKytzdWIgaGFzX3BsYW4geworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKworKyAgICBy ZXR1cm4oICRzZWxmLT57RXhwZWN0ZWRfVGVzdHN9ICkgaWYgJHNlbGYtPntFeHBlY3RlZF9UZXN0 c307CisrICAgIHJldHVybignbm9fcGxhbicpIGlmICRzZWxmLT57Tm9fUGxhbn07CisrICAgIHJl dHVybih1bmRlZik7CisrfQorKworKz1pdGVtIEI8c2tpcF9hbGw+CisrCisrICAkVGVzdC0+c2tp cF9hbGw7CisrICAkVGVzdC0+c2tpcF9hbGwoJHJlYXNvbik7CisrCisrU2tpcHMgYWxsIHRoZSB0 ZXN0cywgdXNpbmcgdGhlIGdpdmVuIEM8JHJlYXNvbj4uICBFeGl0cyBpbW1lZGlhdGVseSB3aXRo IDAuCisrCisrPWN1dAorKworK3N1YiBza2lwX2FsbCB7CisrICAgIG15KCAkc2VsZiwgJHJlYXNv biApID0gQF87CisrCisrICAgICRzZWxmLT57U2tpcF9BbGx9ID0gJHNlbGYtPnBhcmVudCA/ICRy ZWFzb24gOiAxOworKworKyAgICAkc2VsZi0+X291dHB1dF9wbGFuKDAsICJTS0lQIiwgJHJlYXNv bikgdW5sZXNzICRzZWxmLT5ub19oZWFkZXI7CisrICAgIGlmICggJHNlbGYtPnBhcmVudCApIHsK KysgICAgICAgIGRpZSBibGVzcyB7fSA9PiAnVGVzdDo6QnVpbGRlcjo6RXhjZXB0aW9uJzsKKysg ICAgfQorKyAgICBleGl0KDApOworK30KKysKKys9aXRlbSBCPGV4cG9ydGVkX3RvPgorKworKyAg bXkgJHBhY2sgPSAkVGVzdC0+ZXhwb3J0ZWRfdG87CisrICAkVGVzdC0+ZXhwb3J0ZWRfdG8oJHBh Y2spOworKworK1RlbGxzIFRlc3Q6OkJ1aWxkZXIgd2hhdCBwYWNrYWdlIHlvdSBleHBvcnRlZCB5 b3VyIGZ1bmN0aW9ucyB0by4KKysKKytUaGlzIG1ldGhvZCBpc24ndCB0ZXJyaWJseSB1c2VmdWwg c2luY2UgbW9kdWxlcyB3aGljaCBzaGFyZSB0aGUgc2FtZQorK1Rlc3Q6OkJ1aWxkZXIgb2JqZWN0 IG1pZ2h0IGdldCBleHBvcnRlZCB0byBkaWZmZXJlbnQgcGFja2FnZXMgYW5kIG9ubHkKKyt0aGUg bGFzdCBvbmUgd2lsbCBiZSBob25vcmVkLgorKworKz1jdXQKKysKKytzdWIgZXhwb3J0ZWRfdG8g eworKyAgICBteSggJHNlbGYsICRwYWNrICkgPSBAXzsKKysKKysgICAgaWYoIGRlZmluZWQgJHBh Y2sgKSB7CisrICAgICAgICAkc2VsZi0+e0V4cG9ydGVkX1RvfSA9ICRwYWNrOworKyAgICB9Cisr ICAgIHJldHVybiAkc2VsZi0+e0V4cG9ydGVkX1RvfTsKKyt9CisrCisrPWJhY2sKKysKKys9aGVh ZDIgUnVubmluZyB0ZXN0cworKworK1RoZXNlIGFjdHVhbGx5IHJ1biB0aGUgdGVzdHMsIGFuYWxv Z291cyB0byB0aGUgZnVuY3Rpb25zIGluIFRlc3Q6Ok1vcmUuCisrCisrVGhleSBhbGwgcmV0dXJu IHRydWUgaWYgdGhlIHRlc3QgcGFzc2VkLCBmYWxzZSBpZiB0aGUgdGVzdCBmYWlsZWQuCisrCisr QzwkbmFtZT4gaXMgYWx3YXlzIG9wdGlvbmFsLgorKworKz1vdmVyIDQKKysKKys9aXRlbSBCPG9r PgorKworKyAgJFRlc3QtPm9rKCR0ZXN0LCAkbmFtZSk7CisrCisrWW91ciBiYXNpYyB0ZXN0LiAg UGFzcyBpZiBDPCR0ZXN0PiBpcyB0cnVlLCBmYWlsIGlmICR0ZXN0IGlzIGZhbHNlLiAgSnVzdAor K2xpa2UgVGVzdDo6U2ltcGxlJ3MgQzxvaygpPi4KKysKKys9Y3V0CisrCisrc3ViIG9rIHsKKysg ICAgbXkoICRzZWxmLCAkdGVzdCwgJG5hbWUgKSA9IEBfOworKworKyAgICBpZiAoICRzZWxmLT57 Q2hpbGRfTmFtZX0gYW5kIG5vdCAkc2VsZi0+e0luX0Rlc3Ryb3l9ICkgeworKyAgICAgICAgJG5h bWUgPSAndW5uYW1lZCB0ZXN0JyB1bmxlc3MgZGVmaW5lZCAkbmFtZTsKKysgICAgICAgICRzZWxm LT5pc19wYXNzaW5nKDApOworKyAgICAgICAgJHNlbGYtPmNyb2FrKCJDYW5ub3QgcnVuIHRlc3Qg KCRuYW1lKSB3aXRoIGFjdGl2ZSBjaGlsZHJlbiIpOworKyAgICB9CisrICAgICMgJHRlc3QgbWln aHQgY29udGFpbiBhbiBvYmplY3Qgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBhY2NpZGVudGFsbHkK KysgICAgIyBzdG9yZSwgc28gd2UgdHVybiBpdCBpbnRvIGEgYm9vbGVhbi4KKysgICAgJHRlc3Qg PSAkdGVzdCA/IDEgOiAwOworKworKyAgICBsb2NrICRzZWxmLT57Q3Vycl9UZXN0fTsKKysgICAg JHNlbGYtPntDdXJyX1Rlc3R9Kys7CisrCisrICAgICMgSW4gY2FzZSAkbmFtZSBpcyBhIHN0cmlu ZyBvdmVybG9hZGVkIG9iamVjdCwgZm9yY2UgaXQgdG8gc3RyaW5naWZ5LgorKyAgICAkc2VsZi0+ X3Vub3ZlcmxvYWRfc3RyKCBcJG5hbWUgKTsKKysKKysgICAgJHNlbGYtPmRpYWcoPDwiRVJSIikg aWYgZGVmaW5lZCAkbmFtZSBhbmQgJG5hbWUgPX4gL15bXGRcc10rJC87CisrICAgIFlvdSBuYW1l ZCB5b3VyIHRlc3QgJyRuYW1lJy4gIFlvdSBzaG91bGRuJ3QgdXNlIG51bWJlcnMgZm9yIHlvdXIg dGVzdCBuYW1lcy4KKysgICAgVmVyeSBjb25mdXNpbmcuCisrRVJSCisrCisrICAgICMgQ2FwdHVy ZSB0aGUgdmFsdWUgb2YgJFRPRE8gZm9yIHRoZSByZXN0IG9mIHRoaXMgb2soKSBjYWxsCisrICAg ICMgc28gaXQgY2FuIG1vcmUgZWFzaWx5IGJlIGZvdW5kIGJ5IG90aGVyIHJvdXRpbmVzLgorKyAg ICBteSAkdG9kbyAgICA9ICRzZWxmLT50b2RvKCk7CisrICAgIG15ICRpbl90b2RvID0gJHNlbGYt PmluX3RvZG87CisrICAgIGxvY2FsICRzZWxmLT57VG9kb30gPSAkdG9kbyBpZiAkaW5fdG9kbzsK KysKKysgICAgJHNlbGYtPl91bm92ZXJsb2FkX3N0ciggXCR0b2RvICk7CisrCisrICAgIG15ICRv dXQ7CisrICAgIG15ICRyZXN1bHQgPSAmc2hhcmUoIHt9ICk7CisrCisrICAgIHVubGVzcygkdGVz dCkgeworKyAgICAgICAgJG91dCAuPSAibm90ICI7CisrICAgICAgICBAJHJlc3VsdHsgJ29rJywg J2FjdHVhbF9vaycgfSA9ICggKCAkc2VsZi0+aW5fdG9kbyA/IDEgOiAwICksIDAgKTsKKysgICAg fQorKyAgICBlbHNlIHsKKysgICAgICAgIEAkcmVzdWx0eyAnb2snLCAnYWN0dWFsX29rJyB9ID0g KCAxLCAkdGVzdCApOworKyAgICB9CisrCisrICAgICRvdXQgLj0gIm9rIjsKKysgICAgJG91dCAu PSAiICRzZWxmLT57Q3Vycl9UZXN0fSIgaWYgJHNlbGYtPnVzZV9udW1iZXJzOworKworKyAgICBp ZiggZGVmaW5lZCAkbmFtZSApIHsKKysgICAgICAgICRuYW1lID1+IHN8I3xcXCN8ZzsgICAgIyAj IGluIGEgbmFtZSBjYW4gY29uZnVzZSBUZXN0OjpIYXJuZXNzLgorKyAgICAgICAgJG91dCAuPSAi IC0gJG5hbWUiOworKyAgICAgICAgJHJlc3VsdC0+e25hbWV9ID0gJG5hbWU7CisrICAgIH0KKysg ICAgZWxzZSB7CisrICAgICAgICAkcmVzdWx0LT57bmFtZX0gPSAnJzsKKysgICAgfQorKworKyAg ICBpZiggJHNlbGYtPmluX3RvZG8gKSB7CisrICAgICAgICAkb3V0IC49ICIgIyBUT0RPICR0b2Rv IjsKKysgICAgICAgICRyZXN1bHQtPntyZWFzb259ID0gJHRvZG87CisrICAgICAgICAkcmVzdWx0 LT57dHlwZX0gICA9ICd0b2RvJzsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICRyZXN1 bHQtPntyZWFzb259ID0gJyc7CisrICAgICAgICAkcmVzdWx0LT57dHlwZX0gICA9ICcnOworKyAg ICB9CisrCisrICAgICRzZWxmLT57VGVzdF9SZXN1bHRzfVsgJHNlbGYtPntDdXJyX1Rlc3R9IC0g MSBdID0gJHJlc3VsdDsKKysgICAgJG91dCAuPSAiXG4iOworKworKyAgICAkc2VsZi0+X3ByaW50 KCRvdXQpOworKworKyAgICB1bmxlc3MoJHRlc3QpIHsKKysgICAgICAgIG15ICRtc2cgPSAkc2Vs Zi0+aW5fdG9kbyA/ICJGYWlsZWQgKFRPRE8pIiA6ICJGYWlsZWQiOworKyAgICAgICAgJHNlbGYt Pl9wcmludF90b19maCggJHNlbGYtPl9kaWFnX2ZoLCAiXG4iICkgaWYgJEVOVntIQVJORVNTX0FD VElWRX07CisrCisrICAgICAgICBteSggdW5kZWYsICRmaWxlLCAkbGluZSApID0gJHNlbGYtPmNh bGxlcjsKKysgICAgICAgIGlmKCBkZWZpbmVkICRuYW1lICkgeworKyAgICAgICAgICAgICRzZWxm LT5kaWFnKHFxWyAgJG1zZyB0ZXN0ICckbmFtZSdcbl0pOworKyAgICAgICAgICAgICRzZWxmLT5k aWFnKHFxWyAgYXQgJGZpbGUgbGluZSAkbGluZS5cbl0pOworKyAgICAgICAgfQorKyAgICAgICAg ZWxzZSB7CisrICAgICAgICAgICAgJHNlbGYtPmRpYWcocXFbICAkbXNnIHRlc3QgYXQgJGZpbGUg bGluZSAkbGluZS5cbl0pOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgICRzZWxmLT5pc19w YXNzaW5nKDApIHVubGVzcyAkdGVzdCB8fCAkc2VsZi0+aW5fdG9kbzsKKysKKysgICAgIyBDaGVj ayB0aGF0IHdlIGhhdmVuJ3QgdmlvbGF0ZWQgdGhlIHBsYW4KKysgICAgJHNlbGYtPl9jaGVja19p c19wYXNzaW5nX3BsYW4oKTsKKysKKysgICAgcmV0dXJuICR0ZXN0ID8gMSA6IDA7CisrfQorKwor KworKyMgQ2hlY2sgdGhhdCB3ZSBoYXZlbid0IHlldCB2aW9sYXRlZCB0aGUgcGxhbiBhbmQgc2V0 CisrIyBpc19wYXNzaW5nKCkgYWNjb3JkaW5nbHkKKytzdWIgX2NoZWNrX2lzX3Bhc3NpbmdfcGxh biB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrCisrICAgIG15ICRwbGFuID0gJHNlbGYtPmhh c19wbGFuOworKyAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJHBsYW47ICAgICAgICAjIG5vIHBs YW4geWV0IGRlZmluZWQKKysgICAgcmV0dXJuIHVubGVzcyAkcGxhbiAhfiAvXEQvOyAgICAgICAg IyBubyBudW1lcmljIHBsYW4KKysgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCkgaWYgJHBsYW4gPCAk c2VsZi0+e0N1cnJfVGVzdH07CisrfQorKworKworK3N1YiBfdW5vdmVybG9hZCB7CisrICAgIG15 ICRzZWxmID0gc2hpZnQ7CisrICAgIG15ICR0eXBlID0gc2hpZnQ7CisrCisrICAgICRzZWxmLT5f dHJ5KHN1YiB7IHJlcXVpcmUgb3ZlcmxvYWQ7IH0sIGRpZV9vbl9mYWlsID0+IDEpOworKworKyAg ICBmb3JlYWNoIG15ICR0aGluZyAoQF8pIHsKKysgICAgICAgIGlmKCAkc2VsZi0+X2lzX29iamVj dCgkJHRoaW5nKSApIHsKKysgICAgICAgICAgICBpZiggbXkgJHN0cmluZ19tZXRoID0gb3Zlcmxv YWQ6Ok1ldGhvZCggJCR0aGluZywgJHR5cGUgKSApIHsKKysgICAgICAgICAgICAgICAgJCR0aGlu ZyA9ICQkdGhpbmctPiRzdHJpbmdfbWV0aCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K KysgICAgfQorKworKyAgICByZXR1cm47CisrfQorKworK3N1YiBfaXNfb2JqZWN0IHsKKysgICAg bXkoICRzZWxmLCAkdGhpbmcgKSA9IEBfOworKworKyAgICByZXR1cm4gJHNlbGYtPl90cnkoIHN1 YiB7IHJlZiAkdGhpbmcgJiYgJHRoaW5nLT5pc2EoJ1VOSVZFUlNBTCcpIH0gKSA/IDEgOiAwOwor K30KKysKKytzdWIgX3Vub3ZlcmxvYWRfc3RyIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysK KysgICAgcmV0dXJuICRzZWxmLT5fdW5vdmVybG9hZCggcVsiIl0sIEBfICk7CisrfQorKworK3N1 YiBfdW5vdmVybG9hZF9udW0geworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKworKyAgICAkc2Vs Zi0+X3Vub3ZlcmxvYWQoICcwKycsIEBfICk7CisrCisrICAgIGZvciBteSAkdmFsIChAXykgewor KyAgICAgICAgbmV4dCB1bmxlc3MgJHNlbGYtPl9pc19kdWFsdmFyKCQkdmFsKTsKKysgICAgICAg ICQkdmFsID0gJCR2YWwgKyAwOworKyAgICB9CisrCisrICAgIHJldHVybjsKKyt9CisrCisrIyBU aGlzIGlzIGEgaGFjayB0byBkZXRlY3QgYSBkdWFsdmFyIHN1Y2ggYXMgJCEKKytzdWIgX2lzX2R1 YWx2YXIgeworKyAgICBteSggJHNlbGYsICR2YWwgKSA9IEBfOworKworKyAgICAjIE9iamVjdHMg YXJlIG5vdCBkdWFsdmFycy4KKysgICAgcmV0dXJuIDAgaWYgcmVmICR2YWw7CisrCisrICAgIG5v IHdhcm5pbmdzICdudW1lcmljJzsKKysgICAgbXkgJG51bXZhbCA9ICR2YWwgKyAwOworKyAgICBy ZXR1cm4gKCRudW12YWwgIT0gMCBhbmQgJG51bXZhbCBuZSAkdmFsID8gMSA6IDApOworK30KKysK Kys9aXRlbSBCPGlzX2VxPgorKworKyAgJFRlc3QtPmlzX2VxKCRnb3QsICRleHBlY3RlZCwgJG5h bWUpOworKworK0xpa2UgVGVzdDo6TW9yZSdzIEM8aXMoKT4uICBDaGVja3MgaWYgQzwkZ290IGVx ICRleHBlY3RlZD4uICBUaGlzIGlzIHRoZQorK3N0cmluZyB2ZXJzaW9uLgorKworK0M8dW5kZWY+ IG9ubHkgZXZlciBtYXRjaGVzIGFub3RoZXIgQzx1bmRlZj4uCisrCisrPWl0ZW0gQjxpc19udW0+ CisrCisrICAkVGVzdC0+aXNfbnVtKCRnb3QsICRleHBlY3RlZCwgJG5hbWUpOworKworK0xpa2Ug VGVzdDo6TW9yZSdzIEM8aXMoKT4uICBDaGVja3MgaWYgQzwkZ290ID09ICRleHBlY3RlZD4uICBU aGlzIGlzIHRoZQorK251bWVyaWMgdmVyc2lvbi4KKysKKytDPHVuZGVmPiBvbmx5IGV2ZXIgbWF0 Y2hlcyBhbm90aGVyIEM8dW5kZWY+LgorKworKz1jdXQKKysKKytzdWIgaXNfZXEgeworKyAgICBt eSggJHNlbGYsICRnb3QsICRleHBlY3QsICRuYW1lICkgPSBAXzsKKysgICAgbG9jYWwgJExldmVs ID0gJExldmVsICsgMTsKKysKKysgICAgaWYoICFkZWZpbmVkICRnb3QgfHwgIWRlZmluZWQgJGV4 cGVjdCApIHsKKysgICAgICAgICMgdW5kZWYgb25seSBtYXRjaGVzIHVuZGVmIGFuZCBub3RoaW5n IGVsc2UKKysgICAgICAgIG15ICR0ZXN0ID0gIWRlZmluZWQgJGdvdCAmJiAhZGVmaW5lZCAkZXhw ZWN0OworKworKyAgICAgICAgJHNlbGYtPm9rKCAkdGVzdCwgJG5hbWUgKTsKKysgICAgICAgICRz ZWxmLT5faXNfZGlhZyggJGdvdCwgJ2VxJywgJGV4cGVjdCApIHVubGVzcyAkdGVzdDsKKysgICAg ICAgIHJldHVybiAkdGVzdDsKKysgICAgfQorKworKyAgICByZXR1cm4gJHNlbGYtPmNtcF9vaygg JGdvdCwgJ2VxJywgJGV4cGVjdCwgJG5hbWUgKTsKKyt9CisrCisrc3ViIGlzX251bSB7CisrICAg IG15KCAkc2VsZiwgJGdvdCwgJGV4cGVjdCwgJG5hbWUgKSA9IEBfOworKyAgICBsb2NhbCAkTGV2 ZWwgPSAkTGV2ZWwgKyAxOworKworKyAgICBpZiggIWRlZmluZWQgJGdvdCB8fCAhZGVmaW5lZCAk ZXhwZWN0ICkgeworKyAgICAgICAgIyB1bmRlZiBvbmx5IG1hdGNoZXMgdW5kZWYgYW5kIG5vdGhp bmcgZWxzZQorKyAgICAgICAgbXkgJHRlc3QgPSAhZGVmaW5lZCAkZ290ICYmICFkZWZpbmVkICRl eHBlY3Q7CisrCisrICAgICAgICAkc2VsZi0+b2soICR0ZXN0LCAkbmFtZSApOworKyAgICAgICAg JHNlbGYtPl9pc19kaWFnKCAkZ290LCAnPT0nLCAkZXhwZWN0ICkgdW5sZXNzICR0ZXN0OworKyAg ICAgICAgcmV0dXJuICR0ZXN0OworKyAgICB9CisrCisrICAgIHJldHVybiAkc2VsZi0+Y21wX29r KCAkZ290LCAnPT0nLCAkZXhwZWN0LCAkbmFtZSApOworK30KKysKKytzdWIgX2RpYWdfZm10IHsK KysgICAgbXkoICRzZWxmLCAkdHlwZSwgJHZhbCApID0gQF87CisrCisrICAgIGlmKCBkZWZpbmVk ICQkdmFsICkgeworKyAgICAgICAgaWYoICR0eXBlIGVxICdlcScgb3IgJHR5cGUgZXEgJ25lJyAp IHsKKysgICAgICAgICAgICAjIHF1b3RlIGFuZCBmb3JjZSBzdHJpbmcgY29udGV4dAorKyAgICAg ICAgICAgICQkdmFsID0gIickJHZhbCciOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7Cisr ICAgICAgICAgICAgIyBmb3JjZSBudW1lcmljIGNvbnRleHQKKysgICAgICAgICAgICAkc2VsZi0+ X3Vub3ZlcmxvYWRfbnVtKCR2YWwpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2Ugewor KyAgICAgICAgJCR2YWwgPSAndW5kZWYnOworKyAgICB9CisrCisrICAgIHJldHVybjsKKyt9Cisr Cisrc3ViIF9pc19kaWFnIHsKKysgICAgbXkoICRzZWxmLCAkZ290LCAkdHlwZSwgJGV4cGVjdCAp ID0gQF87CisrCisrICAgICRzZWxmLT5fZGlhZ19mbXQoICR0eXBlLCAkXyApIGZvciBcJGdvdCwg XCRleHBlY3Q7CisrCisrICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7CisrICAgIHJldHVy biAkc2VsZi0+ZGlhZyg8PCJESUFHTk9TVElDIik7CisrICAgICAgICAgZ290OiAkZ290CisrICAg IGV4cGVjdGVkOiAkZXhwZWN0CisrRElBR05PU1RJQworKworK30KKysKKytzdWIgX2lzbnRfZGlh ZyB7CisrICAgIG15KCAkc2VsZiwgJGdvdCwgJHR5cGUgKSA9IEBfOworKworKyAgICAkc2VsZi0+ X2RpYWdfZm10KCAkdHlwZSwgXCRnb3QgKTsKKysKKysgICAgbG9jYWwgJExldmVsID0gJExldmVs ICsgMTsKKysgICAgcmV0dXJuICRzZWxmLT5kaWFnKDw8IkRJQUdOT1NUSUMiKTsKKysgICAgICAg ICBnb3Q6ICRnb3QKKysgICAgZXhwZWN0ZWQ6IGFueXRoaW5nIGVsc2UKKytESUFHTk9TVElDCisr fQorKworKz1pdGVtIEI8aXNudF9lcT4KKysKKysgICRUZXN0LT5pc250X2VxKCRnb3QsICRkb250 X2V4cGVjdCwgJG5hbWUpOworKworK0xpa2UgVGVzdDo6TW9yZSdzIEM8aXNudCgpPi4gIENoZWNr cyBpZiBDPCRnb3QgbmUgJGRvbnRfZXhwZWN0Pi4gIFRoaXMgaXMKKyt0aGUgc3RyaW5nIHZlcnNp b24uCisrCisrPWl0ZW0gQjxpc250X251bT4KKysKKysgICRUZXN0LT5pc250X251bSgkZ290LCAk ZG9udF9leHBlY3QsICRuYW1lKTsKKysKKytMaWtlIFRlc3Q6Ok1vcmUncyBDPGlzbnQoKT4uICBD aGVja3MgaWYgQzwkZ290IG5lICRkb250X2V4cGVjdD4uICBUaGlzIGlzCisrdGhlIG51bWVyaWMg dmVyc2lvbi4KKysKKys9Y3V0CisrCisrc3ViIGlzbnRfZXEgeworKyAgICBteSggJHNlbGYsICRn b3QsICRkb250X2V4cGVjdCwgJG5hbWUgKSA9IEBfOworKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2 ZWwgKyAxOworKworKyAgICBpZiggIWRlZmluZWQgJGdvdCB8fCAhZGVmaW5lZCAkZG9udF9leHBl Y3QgKSB7CisrICAgICAgICAjIHVuZGVmIG9ubHkgbWF0Y2hlcyB1bmRlZiBhbmQgbm90aGluZyBl bHNlCisrICAgICAgICBteSAkdGVzdCA9IGRlZmluZWQgJGdvdCB8fCBkZWZpbmVkICRkb250X2V4 cGVjdDsKKysKKysgICAgICAgICRzZWxmLT5vayggJHRlc3QsICRuYW1lICk7CisrICAgICAgICAk c2VsZi0+X2lzbnRfZGlhZyggJGdvdCwgJ25lJyApIHVubGVzcyAkdGVzdDsKKysgICAgICAgIHJl dHVybiAkdGVzdDsKKysgICAgfQorKworKyAgICByZXR1cm4gJHNlbGYtPmNtcF9vayggJGdvdCwg J25lJywgJGRvbnRfZXhwZWN0LCAkbmFtZSApOworK30KKysKKytzdWIgaXNudF9udW0geworKyAg ICBteSggJHNlbGYsICRnb3QsICRkb250X2V4cGVjdCwgJG5hbWUgKSA9IEBfOworKyAgICBsb2Nh bCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOworKworKyAgICBpZiggIWRlZmluZWQgJGdvdCB8fCAhZGVm aW5lZCAkZG9udF9leHBlY3QgKSB7CisrICAgICAgICAjIHVuZGVmIG9ubHkgbWF0Y2hlcyB1bmRl ZiBhbmQgbm90aGluZyBlbHNlCisrICAgICAgICBteSAkdGVzdCA9IGRlZmluZWQgJGdvdCB8fCBk ZWZpbmVkICRkb250X2V4cGVjdDsKKysKKysgICAgICAgICRzZWxmLT5vayggJHRlc3QsICRuYW1l ICk7CisrICAgICAgICAkc2VsZi0+X2lzbnRfZGlhZyggJGdvdCwgJyE9JyApIHVubGVzcyAkdGVz dDsKKysgICAgICAgIHJldHVybiAkdGVzdDsKKysgICAgfQorKworKyAgICByZXR1cm4gJHNlbGYt PmNtcF9vayggJGdvdCwgJyE9JywgJGRvbnRfZXhwZWN0LCAkbmFtZSApOworK30KKysKKys9aXRl bSBCPGxpa2U+CisrCisrICAkVGVzdC0+bGlrZSgkdGhpbmcsIHFyLyRyZWdleC8sICRuYW1lKTsK KysgICRUZXN0LT5saWtlKCR0aGluZywgJy8kcmVnZXgvJywgJG5hbWUpOworKworK0xpa2UgVGVz dDo6TW9yZSdzIEM8bGlrZSgpPi4gIENoZWNrcyBpZiAkdGhpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4g QzwkcmVnZXg+LgorKworKz1pdGVtIEI8dW5saWtlPgorKworKyAgJFRlc3QtPnVubGlrZSgkdGhp bmcsIHFyLyRyZWdleC8sICRuYW1lKTsKKysgICRUZXN0LT51bmxpa2UoJHRoaW5nLCAnLyRyZWdl eC8nLCAkbmFtZSk7CisrCisrTGlrZSBUZXN0OjpNb3JlJ3MgQzx1bmxpa2UoKT4uICBDaGVja3Mg aWYgJHRoaW5nIEI8ZG9lcyBub3QgbWF0Y2g+IHRoZQorK2dpdmVuIEM8JHJlZ2V4Pi4KKysKKys9 Y3V0CisrCisrc3ViIGxpa2UgeworKyAgICBteSggJHNlbGYsICR0aGluZywgJHJlZ2V4LCAkbmFt ZSApID0gQF87CisrCisrICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7CisrICAgIHJldHVy biAkc2VsZi0+X3JlZ2V4X29rKCAkdGhpbmcsICRyZWdleCwgJz1+JywgJG5hbWUgKTsKKyt9Cisr Cisrc3ViIHVubGlrZSB7CisrICAgIG15KCAkc2VsZiwgJHRoaW5nLCAkcmVnZXgsICRuYW1lICkg PSBAXzsKKysKKysgICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsKKysgICAgcmV0dXJuICRz ZWxmLT5fcmVnZXhfb2soICR0aGluZywgJHJlZ2V4LCAnIX4nLCAkbmFtZSApOworK30KKysKKys9 aXRlbSBCPGNtcF9vaz4KKysKKysgICRUZXN0LT5jbXBfb2soJHRoaW5nLCAkdHlwZSwgJHRoYXQs ICRuYW1lKTsKKysKKytXb3JrcyBqdXN0IGxpa2UgVGVzdDo6TW9yZSdzIEM8Y21wX29rKCk+Lgor KworKyAgICAkVGVzdC0+Y21wX29rKCRiaWdfbnVtLCAnIT0nLCAkb3RoZXJfYmlnX251bSk7Cisr CisrPWN1dAorKworK215ICVudW1lcmljX2NtcHMgPSBtYXAgeyAoICRfLCAxICkgfSAoICI8Iiwg Ijw9IiwgIj4iLCAiPj0iLCAiPT0iLCAiIT0iLCAiPD0+IiApOworKworKyMgQmFkLCB0aGVzZSBh cmUgbm90IGNvbXBhcmlzb24gb3BlcmF0b3JzLiBTaG91bGQgd2UgaW5jbHVkZSBtb3JlPworK215 ICVjbXBfb2tfYmwgPSBtYXAgeyAoICRfLCAxICkgfSAoICI9IiwgIis9IiwgIi49IiwgIng9Iiwg Il49IiwgInw9IiwgInx8PSIsICImJj0iLCAiLi4uIik7CisrCisrc3ViIGNtcF9vayB7CisrICAg IG15KCAkc2VsZiwgJGdvdCwgJHR5cGUsICRleHBlY3QsICRuYW1lICkgPSBAXzsKKysKKysgICAg aWYgKCRjbXBfb2tfYmx7JHR5cGV9KSB7CisrICAgICAgICAkc2VsZi0+Y3JvYWsoIiR0eXBlIGlz IG5vdCBhIHZhbGlkIGNvbXBhcmlzb24gb3BlcmF0b3IgaW4gY21wX29rKCkiKTsKKysgICAgfQor KworKyAgICBteSAkdGVzdDsKKysgICAgbXkgJGVycm9yOworKyAgICB7CisrICAgICAgICAjIyBu byBjcml0aWMgKEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hpYml0U3RyaW5neUV2YWwpCisrCisrICAg ICAgICBsb2NhbCggJEAsICQhLCAkU0lHe19fRElFX199ICk7ICAgICMgaXNvbGF0ZSBldmFsCisr CisrICAgICAgICBteSgkcGFjaywgJGZpbGUsICRsaW5lKSA9ICRzZWxmLT5jYWxsZXIoKTsKKysK KysgICAgICAgICMgVGhpcyBpcyBzbyB0aGF0IHdhcm5pbmdzIGNvbWUgb3V0IGF0IHRoZSBjYWxs ZXIncyBsZXZlbAorKyAgICAgICAgJHRlc3QgPSBldmFsIHFxWworKyNsaW5lICRsaW5lICIoZXZh bCBpbiBjbXBfb2spICRmaWxlIgorK1wkZ290ICR0eXBlIFwkZXhwZWN0OworK107CisrICAgICAg ICAkZXJyb3IgPSAkQDsKKysgICAgfQorKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOwor KyAgICBteSAkb2sgPSAkc2VsZi0+b2soICR0ZXN0LCAkbmFtZSApOworKworKyAgICAjIFRyZWF0 IG92ZXJsb2FkZWQgb2JqZWN0cyBhcyBudW1iZXJzIGlmIHdlJ3JlIGFza2VkIHRvIGRvIGEKKysg ICAgIyBudW1lcmljIGNvbXBhcmlzb24uCisrICAgIG15ICR1bm92ZXJsb2FkCisrICAgICAgPSAk bnVtZXJpY19jbXBzeyR0eXBlfQorKyAgICAgID8gJ191bm92ZXJsb2FkX251bScKKysgICAgICA6 ICdfdW5vdmVybG9hZF9zdHInOworKworKyAgICAkc2VsZi0+ZGlhZyg8PCJFTkQiKSBpZiAkZXJy b3I7CisrQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdXNpbmcgJHR5cGU6CisrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrJGVycm9yCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrRU5ECisrCisrICAgIHVubGVzcygkb2spIHsKKysgICAgICAgICRz ZWxmLT4kdW5vdmVybG9hZCggXCRnb3QsIFwkZXhwZWN0ICk7CisrCisrICAgICAgICBpZiggJHR5 cGUgPX4gL14oZXF8PT0pJC8gKSB7CisrICAgICAgICAgICAgJHNlbGYtPl9pc19kaWFnKCAkZ290 LCAkdHlwZSwgJGV4cGVjdCApOworKyAgICAgICAgfQorKyAgICAgICAgZWxzaWYoICR0eXBlID1+ IC9eKG5lfCE9KSQvICkgeworKyAgICAgICAgICAgICRzZWxmLT5faXNudF9kaWFnKCAkZ290LCAk dHlwZSApOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgJHNlbGYt Pl9jbXBfZGlhZyggJGdvdCwgJHR5cGUsICRleHBlY3QgKTsKKysgICAgICAgIH0KKysgICAgfQor KyAgICByZXR1cm4gJG9rOworK30KKysKKytzdWIgX2NtcF9kaWFnIHsKKysgICAgbXkoICRzZWxm LCAkZ290LCAkdHlwZSwgJGV4cGVjdCApID0gQF87CisrCisrICAgICRnb3QgICAgPSBkZWZpbmVk ICRnb3QgICAgPyAiJyRnb3QnIiAgICA6ICd1bmRlZic7CisrICAgICRleHBlY3QgPSBkZWZpbmVk ICRleHBlY3QgPyAiJyRleHBlY3QnIiA6ICd1bmRlZic7CisrCisrICAgIGxvY2FsICRMZXZlbCA9 ICRMZXZlbCArIDE7CisrICAgIHJldHVybiAkc2VsZi0+ZGlhZyg8PCJESUFHTk9TVElDIik7Cisr ICAgICRnb3QKKysgICAgICAgICR0eXBlCisrICAgICRleHBlY3QKKytESUFHTk9TVElDCisrfQor KworK3N1YiBfY2FsbGVyX2NvbnRleHQgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKworKyAg ICBteSggJHBhY2ssICRmaWxlLCAkbGluZSApID0gJHNlbGYtPmNhbGxlcigxKTsKKysKKysgICAg bXkgJGNvZGUgPSAnJzsKKysgICAgJGNvZGUgLj0gIiNsaW5lICRsaW5lICRmaWxlXG4iIGlmIGRl ZmluZWQgJGZpbGUgYW5kIGRlZmluZWQgJGxpbmU7CisrCisrICAgIHJldHVybiAkY29kZTsKKyt9 CisrCisrPWJhY2sKKysKKysKKys9aGVhZDIgT3RoZXIgVGVzdGluZyBNZXRob2RzCisrCisrVGhl c2UgYXJlIG1ldGhvZHMgd2hpY2ggYXJlIHVzZWQgaW4gdGhlIGNvdXJzZSBvZiB3cml0aW5nIGEg dGVzdCBidXQgYXJlIG5vdCB0aGVtc2VsdmVzIHRlc3RzLgorKworKz1vdmVyIDQKKysKKys9aXRl bSBCPEJBSUxfT1VUPgorKworKyAgICAkVGVzdC0+QkFJTF9PVVQoJHJlYXNvbik7CisrCisrSW5k aWNhdGVzIHRvIHRoZSBUZXN0OjpIYXJuZXNzIHRoYXQgdGhpbmdzIGFyZSBnb2luZyBzbyBiYWRs eSBhbGwKKyt0ZXN0aW5nIHNob3VsZCB0ZXJtaW5hdGUuICBUaGlzIGluY2x1ZGVzIHJ1bm5pbmcg YW55IGFkZGl0aW9uYWwgdGVzdAorK3NjcmlwdHMuCisrCisrSXQgd2lsbCBleGl0IHdpdGggMjU1 LgorKworKz1jdXQKKysKKytzdWIgQkFJTF9PVVQgeworKyAgICBteSggJHNlbGYsICRyZWFzb24g KSA9IEBfOworKworKyAgICAkc2VsZi0+e0JhaWxlZF9PdXR9ID0gMTsKKysKKysgICAgaWYgKCRz ZWxmLT5wYXJlbnQpIHsKKysgICAgICAgICRzZWxmLT57QmFpbGVkX091dF9SZWFzb259ID0gJHJl YXNvbjsKKysgICAgICAgICRzZWxmLT5ub19lbmRpbmcoMSk7CisrICAgICAgICBkaWUgYmxlc3Mg e30gPT4gJ1Rlc3Q6OkJ1aWxkZXI6OkV4Y2VwdGlvbic7CisrICAgIH0KKysKKysgICAgJHNlbGYt Pl9wcmludCgiQmFpbCBvdXQhICAkcmVhc29uIik7CisrICAgIGV4aXQgMjU1OworK30KKysKKys9 Zm9yIGRlcHJlY2F0ZWQKKytCQUlMX09VVCgpIHVzZWQgdG8gYmUgQkFJTE9VVCgpCisrCisrPWN1 dAorKworK3sKKysgICAgbm8gd2FybmluZ3MgJ29uY2UnOworKyAgICAqQkFJTE9VVCA9IFwmQkFJ TF9PVVQ7CisrfQorKworKz1pdGVtIEI8c2tpcD4KKysKKysgICAgJFRlc3QtPnNraXA7CisrICAg ICRUZXN0LT5za2lwKCR3aHkpOworKworK1NraXBzIHRoZSBjdXJyZW50IHRlc3QsIHJlcG9ydGlu ZyBDPCR3aHk+LgorKworKz1jdXQKKysKKytzdWIgc2tpcCB7CisrICAgIG15KCAkc2VsZiwgJHdo eSApID0gQF87CisrICAgICR3aHkgfHw9ICcnOworKyAgICAkc2VsZi0+X3Vub3ZlcmxvYWRfc3Ry KCBcJHdoeSApOworKworKyAgICBsb2NrKCAkc2VsZi0+e0N1cnJfVGVzdH0gKTsKKysgICAgJHNl bGYtPntDdXJyX1Rlc3R9Kys7CisrCisrICAgICRzZWxmLT57VGVzdF9SZXN1bHRzfVsgJHNlbGYt PntDdXJyX1Rlc3R9IC0gMSBdID0gJnNoYXJlKAorKyAgICAgICAgeworKyAgICAgICAgICAgICdv aycgICAgICA9PiAxLAorKyAgICAgICAgICAgIGFjdHVhbF9vayA9PiAxLAorKyAgICAgICAgICAg IG5hbWUgICAgICA9PiAnJywKKysgICAgICAgICAgICB0eXBlICAgICAgPT4gJ3NraXAnLAorKyAg ICAgICAgICAgIHJlYXNvbiAgICA9PiAkd2h5LAorKyAgICAgICAgfQorKyAgICApOworKworKyAg ICBteSAkb3V0ID0gIm9rIjsKKysgICAgJG91dCAuPSAiICRzZWxmLT57Q3Vycl9UZXN0fSIgaWYg JHNlbGYtPnVzZV9udW1iZXJzOworKyAgICAkb3V0IC49ICIgIyBza2lwIjsKKysgICAgJG91dCAu PSAiICR3aHkiICAgICAgICAgICAgICAgaWYgbGVuZ3RoICR3aHk7CisrICAgICRvdXQgLj0gIlxu IjsKKysKKysgICAgJHNlbGYtPl9wcmludCgkb3V0KTsKKysKKysgICAgcmV0dXJuIDE7CisrfQor KworKz1pdGVtIEI8dG9kb19za2lwPgorKworKyAgJFRlc3QtPnRvZG9fc2tpcDsKKysgICRUZXN0 LT50b2RvX3NraXAoJHdoeSk7CisrCisrTGlrZSBDPHNraXAoKT4sIG9ubHkgaXQgd2lsbCBkZWNs YXJlIHRoZSB0ZXN0IGFzIGZhaWxpbmcgYW5kIFRPRE8uICBTaW1pbGFyCisrdG8KKysKKysgICAg cHJpbnQgIm5vdCBvayAkdG51bSAjIFRPRE8gJHdoeVxuIjsKKysKKys9Y3V0CisrCisrc3ViIHRv ZG9fc2tpcCB7CisrICAgIG15KCAkc2VsZiwgJHdoeSApID0gQF87CisrICAgICR3aHkgfHw9ICcn OworKworKyAgICBsb2NrKCAkc2VsZi0+e0N1cnJfVGVzdH0gKTsKKysgICAgJHNlbGYtPntDdXJy X1Rlc3R9Kys7CisrCisrICAgICRzZWxmLT57VGVzdF9SZXN1bHRzfVsgJHNlbGYtPntDdXJyX1Rl c3R9IC0gMSBdID0gJnNoYXJlKAorKyAgICAgICAgeworKyAgICAgICAgICAgICdvaycgICAgICA9 PiAxLAorKyAgICAgICAgICAgIGFjdHVhbF9vayA9PiAwLAorKyAgICAgICAgICAgIG5hbWUgICAg ICA9PiAnJywKKysgICAgICAgICAgICB0eXBlICAgICAgPT4gJ3RvZG9fc2tpcCcsCisrICAgICAg ICAgICAgcmVhc29uICAgID0+ICR3aHksCisrICAgICAgICB9CisrICAgICk7CisrCisrICAgIG15 ICRvdXQgPSAibm90IG9rIjsKKysgICAgJG91dCAuPSAiICRzZWxmLT57Q3Vycl9UZXN0fSIgaWYg JHNlbGYtPnVzZV9udW1iZXJzOworKyAgICAkb3V0IC49ICIgIyBUT0RPICYgU0tJUCAkd2h5XG4i OworKworKyAgICAkc2VsZi0+X3ByaW50KCRvdXQpOworKworKyAgICByZXR1cm4gMTsKKyt9Cisr CisrPWJlZ2luIF91bmltcGxlbWVudGVkCisrCisrPWl0ZW0gQjxza2lwX3Jlc3Q+CisrCisrICAk VGVzdC0+c2tpcF9yZXN0OworKyAgJFRlc3QtPnNraXBfcmVzdCgkcmVhc29uKTsKKysKKytMaWtl IEM8c2tpcCgpPiwgb25seSBpdCBza2lwcyBhbGwgdGhlIHJlc3Qgb2YgdGhlIHRlc3RzIHlvdSBw bGFuIHRvIHJ1bgorK2FuZCB0ZXJtaW5hdGVzIHRoZSB0ZXN0LgorKworK0lmIHlvdSdyZSBydW5u aW5nIHVuZGVyIEM8bm9fcGxhbj4sIGl0IHNraXBzIG9uY2UgYW5kIHRlcm1pbmF0ZXMgdGhlCisr dGVzdC4KKysKKys9ZW5kIF91bmltcGxlbWVudGVkCisrCisrPWJhY2sKKysKKysKKys9aGVhZDIg VGVzdCBidWlsZGluZyB1dGlsaXR5IG1ldGhvZHMKKysKKytUaGVzZSBtZXRob2RzIGFyZSB1c2Vm dWwgd2hlbiB3cml0aW5nIHlvdXIgb3duIHRlc3QgbWV0aG9kcy4KKysKKys9b3ZlciA0CisrCisr PWl0ZW0gQjxtYXliZV9yZWdleD4KKysKKysgICRUZXN0LT5tYXliZV9yZWdleChxci8kcmVnZXgv KTsKKysgICRUZXN0LT5tYXliZV9yZWdleCgnLyRyZWdleC8nKTsKKysKKytUaGlzIG1ldGhvZCB1 c2VkIHRvIGJlIHVzZWZ1bCBiYWNrIHdoZW4gVGVzdDo6QnVpbGRlciB3b3JrZWQgb24gUGVybHMK KytiZWZvcmUgNS42IHdoaWNoIGRpZG4ndCBoYXZlIHFyLy8uICBOb3cgaXRzIHByZXR0eSB1c2Vs ZXNzLgorKworK0NvbnZlbmllbmNlIG1ldGhvZCBmb3IgYnVpbGRpbmcgdGVzdGluZyBmdW5jdGlv bnMgdGhhdCB0YWtlIHJlZ3VsYXIKKytleHByZXNzaW9ucyBhcyBhcmd1bWVudHMuCisrCisrVGFr ZXMgYSBxdW90ZWQgcmVndWxhciBleHByZXNzaW9uIHByb2R1Y2VkIGJ5IEM8cXIvLz4sIG9yIGEg c3RyaW5nCisrcmVwcmVzZW50aW5nIGEgcmVndWxhciBleHByZXNzaW9uLgorKworK1JldHVybnMg YSBQZXJsIHZhbHVlIHdoaWNoIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGNvcnJlc3BvbmRp bmcKKytyZWd1bGFyIGV4cHJlc3Npb24sIG9yIEM8dW5kZWY+IGlmIGl0cyBhcmd1bWVudCBpcyBu b3QgcmVjb2duaXNlZC4KKysKKytGb3IgZXhhbXBsZSwgYSB2ZXJzaW9uIG9mIEM8bGlrZSgpPiwg c2FucyB0aGUgdXNlZnVsIGRpYWdub3N0aWMgbWVzc2FnZXMsCisrY291bGQgYmUgd3JpdHRlbiBh czoKKysKKysgIHN1YiBsYWNvbmljX2xpa2UgeworKyAgICAgIG15ICgkc2VsZiwgJHRoaW5nLCAk cmVnZXgsICRuYW1lKSA9IEBfOworKyAgICAgIG15ICR1c2FibGVfcmVnZXggPSAkc2VsZi0+bWF5 YmVfcmVnZXgoJHJlZ2V4KTsKKysgICAgICBkaWUgImV4cGVjdGluZyByZWdleCwgZm91bmQgJyRy ZWdleCdcbiIKKysgICAgICAgICAgdW5sZXNzICR1c2FibGVfcmVnZXg7CisrICAgICAgJHNlbGYt Pm9rKCR0aGluZyA9fiBtLyR1c2FibGVfcmVnZXgvLCAkbmFtZSk7CisrICB9CisrCisrPWN1dAor KworK3N1YiBtYXliZV9yZWdleCB7CisrICAgIG15KCAkc2VsZiwgJHJlZ2V4ICkgPSBAXzsKKysg ICAgbXkgJHVzYWJsZV9yZWdleCA9IHVuZGVmOworKworKyAgICByZXR1cm4gJHVzYWJsZV9yZWdl eCB1bmxlc3MgZGVmaW5lZCAkcmVnZXg7CisrCisrICAgIG15KCAkcmUsICRvcHRzICk7CisrCisr ICAgICMgQ2hlY2sgZm9yIHFyL2Zvby8KKysgICAgaWYoIF9pc19xcigkcmVnZXgpICkgeworKyAg ICAgICAgJHVzYWJsZV9yZWdleCA9ICRyZWdleDsKKysgICAgfQorKyAgICAjIENoZWNrIGZvciAn L2Zvby8nIG9yICdtLGZvbywnCisrICAgIGVsc2lmKCggJHJlLCAkb3B0cyApICAgICAgICA9ICRy ZWdleCA9fiBte14gLyguKikvIChcdyopICQgfXN4ICAgICAgICAgICAgICBvcgorKyAgICAgICAg ICAoIHVuZGVmLCAkcmUsICRvcHRzICkgPSAkcmVnZXggPX4gbSxeIG0oW15cd1xzXSkgKC4rKSBc MSAoXHcqKSAkLHN4CisrICAgICkKKysgICAgeworKyAgICAgICAgJHVzYWJsZV9yZWdleCA9IGxl bmd0aCAkb3B0cyA/ICIoPyRvcHRzKSRyZSIgOiAkcmU7CisrICAgIH0KKysKKysgICAgcmV0dXJu ICR1c2FibGVfcmVnZXg7CisrfQorKworK3N1YiBfaXNfcXIgeworKyAgICBteSAkcmVnZXggPSBz aGlmdDsKKysKKysgICAgIyBpc19yZWdleHAoKSBjaGVja3MgZm9yIHJlZ2V4ZXMgaW4gYSByb2J1 c3QgbWFubmVyLCBzYXkgaWYgdGhleSdyZQorKyAgICAjIGJsZXNzZWQuCisrICAgIHJldHVybiBy ZTo6aXNfcmVnZXhwKCRyZWdleCkgaWYgZGVmaW5lZCAmcmU6OmlzX3JlZ2V4cDsKKysgICAgcmV0 dXJuIHJlZiAkcmVnZXggZXEgJ1JlZ2V4cCc7CisrfQorKworK3N1YiBfcmVnZXhfb2sgeworKyAg ICBteSggJHNlbGYsICR0aGluZywgJHJlZ2V4LCAkY21wLCAkbmFtZSApID0gQF87CisrCisrICAg IG15ICRvayAgICAgICAgICAgPSAwOworKyAgICBteSAkdXNhYmxlX3JlZ2V4ID0gJHNlbGYtPm1h eWJlX3JlZ2V4KCRyZWdleCk7CisrICAgIHVubGVzcyggZGVmaW5lZCAkdXNhYmxlX3JlZ2V4ICkg eworKyAgICAgICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsKKysgICAgICAgICRvayA9ICRz ZWxmLT5vayggMCwgJG5hbWUgKTsKKysgICAgICAgICRzZWxmLT5kaWFnKCIgICAgJyRyZWdleCcg ZG9lc24ndCBsb29rIG11Y2ggbGlrZSBhIHJlZ2V4IHRvIG1lLiIpOworKyAgICAgICAgcmV0dXJu ICRvazsKKysgICAgfQorKworKyAgICB7CisrICAgICAgICBteSAkdGVzdDsKKysgICAgICAgIG15 ICRjb250ZXh0ID0gJHNlbGYtPl9jYWxsZXJfY29udGV4dDsKKysKKysgICAgICAgIHsKKysgICAg ICAgICAgICAjIyBubyBjcml0aWMgKEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hpYml0U3RyaW5neUV2 YWwpCisrCisrICAgICAgICAgICAgbG9jYWwoICRALCAkISwgJFNJR3tfX0RJRV9ffSApOyAgICAj IGlzb2xhdGUgZXZhbAorKworKyAgICAgICAgICAgICMgTm8gcG9pbnQgaW4gaXNzdWluZyBhbiB1 bmluaXQgd2FybmluZywgdGhleSdsbCBzZWUgaXQgaW4gdGhlIGRpYWdub3N0aWNzCisrICAgICAg ICAgICAgbm8gd2FybmluZ3MgJ3VuaW5pdGlhbGl6ZWQnOworKworKyAgICAgICAgICAgICR0ZXN0 ID0gZXZhbCAkY29udGV4dCAuIHF7JHRlc3QgPSAkdGhpbmcgPX4gLyR1c2FibGVfcmVnZXgvID8g MSA6IDB9OworKyAgICAgICAgfQorKworKyAgICAgICAgJHRlc3QgPSAhJHRlc3QgaWYgJGNtcCBl cSAnIX4nOworKworKyAgICAgICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsKKysgICAgICAg ICRvayA9ICRzZWxmLT5vayggJHRlc3QsICRuYW1lICk7CisrICAgIH0KKysKKysgICAgdW5sZXNz KCRvaykgeworKyAgICAgICAgJHRoaW5nID0gZGVmaW5lZCAkdGhpbmcgPyAiJyR0aGluZyciIDog J3VuZGVmJzsKKysgICAgICAgIG15ICRtYXRjaCA9ICRjbXAgZXEgJz1+JyA/ICJkb2Vzbid0IG1h dGNoIiA6ICJtYXRjaGVzIjsKKysKKysgICAgICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7 CisrICAgICAgICAkc2VsZi0+ZGlhZyggc3ByaW50ZiA8PCdESUFHTk9TVElDJywgJHRoaW5nLCAk bWF0Y2gsICRyZWdleCApOworKyAgICAgICAgICAgICAgICAgICVzCisrICAgICUxM3MgJyVzJwor K0RJQUdOT1NUSUMKKysKKysgICAgfQorKworKyAgICByZXR1cm4gJG9rOworK30KKysKKysjIEkn bSBub3QgcmVhZHkgdG8gcHVibGlzaCB0aGlzLiAgSXQgZG9lc24ndCBkZWFsIHdpdGggYXJyYXkg cmV0dXJuCisrIyB2YWx1ZXMgZnJvbSB0aGUgY29kZSBvciBjb250ZXh0LgorKworKz1iZWdpbiBw cml2YXRlCisrCisrPWl0ZW0gQjxfdHJ5PgorKworKyAgICBteSAkcmV0dXJuX2Zyb21fY29kZSAg ICAgICAgICA9ICRUZXN0LT50cnkoc3ViIHsgY29kZSB9KTsKKysgICAgbXkoJHJldHVybl9mcm9t X2NvZGUsICRlcnJvcikgPSAkVGVzdC0+dHJ5KHN1YiB7IGNvZGUgfSk7CisrCisrV29ya3MgbGlr ZSBldmFsIEJMT0NLIGV4Y2VwdCBpdCBlbnN1cmVzIGl0IGhhcyBubyBlZmZlY3Qgb24gdGhlIHJl c3QKKytvZiB0aGUgdGVzdCAoaWUuIEM8JEA+IGlzIG5vdCBzZXQpIG5vciBpcyBlZmZlY3RlZCBi eSBvdXRzaWRlCisraW50ZXJmZXJlbmNlIChpZS4gQzwkU0lHe19fRElFX199PikgYW5kIHdvcmtz IGFyb3VuZCBzb21lIHF1aXJrcyBpbiBvbGRlcgorK1BlcmxzLgorKworK0M8JGVycm9yPiBpcyB3 aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGluIEM8JEA+LgorKworK0l0IGlzIHN1Z2dlc3RlZCB5b3Ug dXNlIHRoaXMgaW4gcGxhY2Ugb2YgZXZhbCBCTE9DSy4KKysKKys9Y3V0CisrCisrc3ViIF90cnkg eworKyAgICBteSggJHNlbGYsICRjb2RlLCAlb3B0cyApID0gQF87CisrCisrICAgIG15ICRlcnJv cjsKKysgICAgbXkgJHJldHVybjsKKysgICAgeworKyAgICAgICAgbG9jYWwgJCE7ICAgICAgICAg ICAgICAgIyBldmFsIGNhbiBtZXNzIHVwICQhCisrICAgICAgICBsb2NhbCAkQDsgICAgICAgICAg ICAgICAjIGRvbid0IHNldCAkQCBpbiB0aGUgdGVzdAorKyAgICAgICAgbG9jYWwgJFNJR3tfX0RJ RV9ffTsgICAgIyBkb24ndCB0cmlwIGFuIG91dHNpZGUgRElFIGhhbmRsZXIuCisrICAgICAgICAk cmV0dXJuID0gZXZhbCB7ICRjb2RlLT4oKSB9OworKyAgICAgICAgJGVycm9yID0gJEA7CisrICAg IH0KKysKKysgICAgZGllICRlcnJvciBpZiAkZXJyb3IgYW5kICRvcHRze2RpZV9vbl9mYWlsfTsK KysKKysgICAgcmV0dXJuIHdhbnRhcnJheSA/ICggJHJldHVybiwgJGVycm9yICkgOiAkcmV0dXJu OworK30KKysKKys9ZW5kIHByaXZhdGUKKysKKysKKys9aXRlbSBCPGlzX2ZoPgorKworKyAgICBt eSAkaXNfZmggPSAkVGVzdC0+aXNfZmgoJHRoaW5nKTsKKysKKytEZXRlcm1pbmVzIGlmIHRoZSBn aXZlbiBDPCR0aGluZz4gY2FuIGJlIHVzZWQgYXMgYSBmaWxlaGFuZGxlLgorKworKz1jdXQKKysK KytzdWIgaXNfZmggeworKyAgICBteSAkc2VsZiAgICAgPSBzaGlmdDsKKysgICAgbXkgJG1heWJl X2ZoID0gc2hpZnQ7CisrICAgIHJldHVybiAwIHVubGVzcyBkZWZpbmVkICRtYXliZV9maDsKKysK KysgICAgcmV0dXJuIDEgaWYgcmVmICRtYXliZV9maCAgZXEgJ0dMT0InOyAgICAjIGl0cyBhIGds b2IgcmVmCisrICAgIHJldHVybiAxIGlmIHJlZiBcJG1heWJlX2ZoIGVxICdHTE9CJzsgICAgIyBp dHMgYSBnbG9iCisrCisrICAgIHJldHVybiBldmFsIHsgJG1heWJlX2ZoLT5pc2EoIklPOjpIYW5k bGUiKSB9IHx8CisrICAgICAgICAgICBldmFsIHsgdGllZCgkbWF5YmVfZmgpLT5jYW4oJ1RJRUhB TkRMRScpIH07CisrfQorKworKz1iYWNrCisrCisrCisrPWhlYWQyIFRlc3Qgc3R5bGUKKysKKysK Kys9b3ZlciA0CisrCisrPWl0ZW0gQjxsZXZlbD4KKysKKysgICAgJFRlc3QtPmxldmVsKCRob3df aGlnaCk7CisrCisrSG93IGZhciB1cCB0aGUgY2FsbCBzdGFjayBzaG91bGQgQzwkVGVzdD4gbG9v ayB3aGVuIHJlcG9ydGluZyB3aGVyZSB0aGUKKyt0ZXN0IGZhaWxlZC4KKysKKytEZWZhdWx0cyB0 byAxLgorKworK1NldHRpbmcgTDwkVGVzdDo6QnVpbGRlcjo6TGV2ZWw+IG92ZXJyaWRlcy4gIFRo aXMgaXMgdHlwaWNhbGx5IHVzZWZ1bAorK2xvY2FsaXplZDoKKysKKysgICAgc3ViIG15X29rIHsK KysgICAgICAgIG15ICR0ZXN0ID0gc2hpZnQ7CisrCisrICAgICAgICBsb2NhbCAkVGVzdDo6QnVp bGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOworKyAgICAgICAgJFRCLT5v aygkdGVzdCk7CisrICAgIH0KKysKKytUbyBiZSBwb2xpdGUgdG8gb3RoZXIgZnVuY3Rpb25zIHdy YXBwaW5nIHlvdXIgb3duIHlvdSB1c3VhbGx5IHdhbnQgdG8gaW5jcmVtZW50IEM8JExldmVsPiBy YXRoZXIgdGhhbiBzZXQgaXQgdG8gYSBjb25zdGFudC4KKysKKys9Y3V0CisrCisrc3ViIGxldmVs IHsKKysgICAgbXkoICRzZWxmLCAkbGV2ZWwgKSA9IEBfOworKworKyAgICBpZiggZGVmaW5lZCAk bGV2ZWwgKSB7CisrICAgICAgICAkTGV2ZWwgPSAkbGV2ZWw7CisrICAgIH0KKysgICAgcmV0dXJu ICRMZXZlbDsKKyt9CisrCisrPWl0ZW0gQjx1c2VfbnVtYmVycz4KKysKKysgICAgJFRlc3QtPnVz ZV9udW1iZXJzKCRvbl9vcl9vZmYpOworKworK1doZXRoZXIgb3Igbm90IHRoZSB0ZXN0IHNob3Vs ZCBvdXRwdXQgbnVtYmVycy4gIFRoYXQgaXMsIHRoaXMgaWYgdHJ1ZToKKysKKysgIG9rIDEKKysg IG9rIDIKKysgIG9rIDMKKysKKytvciB0aGlzIGlmIGZhbHNlCisrCisrICBvaworKyAgb2sKKysg IG9rCisrCisrTW9zdCB1c2VmdWwgd2hlbiB5b3UgY2FuJ3QgZGVwZW5kIG9uIHRoZSB0ZXN0IG91 dHB1dCBvcmRlciwgc3VjaCBhcworK3doZW4gdGhyZWFkcyBvciBmb3JraW5nIGlzIGludm9sdmVk LgorKworK0RlZmF1bHRzIHRvIG9uLgorKworKz1jdXQKKysKKytzdWIgdXNlX251bWJlcnMgewor KyAgICBteSggJHNlbGYsICR1c2VfbnVtcyApID0gQF87CisrCisrICAgIGlmKCBkZWZpbmVkICR1 c2VfbnVtcyApIHsKKysgICAgICAgICRzZWxmLT57VXNlX051bXN9ID0gJHVzZV9udW1zOworKyAg ICB9CisrICAgIHJldHVybiAkc2VsZi0+e1VzZV9OdW1zfTsKKyt9CisrCisrPWl0ZW0gQjxub19k aWFnPgorKworKyAgICAkVGVzdC0+bm9fZGlhZygkbm9fZGlhZyk7CisrCisrSWYgc2V0IHRydWUg bm8gZGlhZ25vc3RpY3Mgd2lsbCBiZSBwcmludGVkLiAgVGhpcyBpbmNsdWRlcyBjYWxscyB0bwor K0M8ZGlhZygpPi4KKysKKys9aXRlbSBCPG5vX2VuZGluZz4KKysKKysgICAgJFRlc3QtPm5vX2Vu ZGluZygkbm9fZW5kaW5nKTsKKysKKytOb3JtYWxseSwgVGVzdDo6QnVpbGRlciBkb2VzIHNvbWUg ZXh0cmEgZGlhZ25vc3RpY3Mgd2hlbiB0aGUgdGVzdAorK2VuZHMuICBJdCBhbHNvIGNoYW5nZXMg dGhlIGV4aXQgY29kZSBhcyBkZXNjcmliZWQgYmVsb3cuCisrCisrSWYgdGhpcyBpcyB0cnVlLCBu b25lIG9mIHRoYXQgd2lsbCBiZSBkb25lLgorKworKz1pdGVtIEI8bm9faGVhZGVyPgorKworKyAg ICAkVGVzdC0+bm9faGVhZGVyKCRub19oZWFkZXIpOworKworK0lmIHNldCB0byB0cnVlLCBubyAi MS4uTiIgaGVhZGVyIHdpbGwgYmUgcHJpbnRlZC4KKysKKys9Y3V0CisrCisrZm9yZWFjaCBteSAk YXR0cmlidXRlIChxdyhOb19IZWFkZXIgTm9fRW5kaW5nIE5vX0RpYWcpKSB7CisrICAgIG15ICRt ZXRob2QgPSBsYyAkYXR0cmlidXRlOworKworKyAgICBteSAkY29kZSA9IHN1YiB7CisrICAgICAg ICBteSggJHNlbGYsICRubyApID0gQF87CisrCisrICAgICAgICBpZiggZGVmaW5lZCAkbm8gKSB7 CisrICAgICAgICAgICAgJHNlbGYtPnskYXR0cmlidXRlfSA9ICRubzsKKysgICAgICAgIH0KKysg ICAgICAgIHJldHVybiAkc2VsZi0+eyRhdHRyaWJ1dGV9OworKyAgICB9OworKworKyAgICBubyBz dHJpY3QgJ3JlZnMnOyAgICAjIyBubyBjcml0aWMKKysgICAgKnsgX19QQUNLQUdFX18gLiAnOjon IC4gJG1ldGhvZCB9ID0gJGNvZGU7CisrfQorKworKz1iYWNrCisrCisrPWhlYWQyIE91dHB1dAor KworK0NvbnRyb2xsaW5nIHdoZXJlIHRoZSB0ZXN0IG91dHB1dCBnb2VzLgorKworK0l0J3Mgb2sg Zm9yIHlvdXIgdGVzdCB0byBjaGFuZ2Ugd2hlcmUgU1RET1VUIGFuZCBTVERFUlIgcG9pbnQgdG8s CisrVGVzdDo6QnVpbGRlcidzIGRlZmF1bHQgb3V0cHV0IHNldHRpbmdzIHdpbGwgbm90IGJlIGFm ZmVjdGVkLgorKworKz1vdmVyIDQKKysKKys9aXRlbSBCPGRpYWc+CisrCisrICAgICRUZXN0LT5k aWFnKEBtc2dzKTsKKysKKytQcmludHMgb3V0IHRoZSBnaXZlbiBDPEBtc2dzPi4gIExpa2UgQzxw cmludD4sIGFyZ3VtZW50cyBhcmUgc2ltcGx5CisrYXBwZW5kZWQgdG9nZXRoZXIuCisrCisrTm9y bWFsbHksIGl0IHVzZXMgdGhlIEM8ZmFpbHVyZV9vdXRwdXQoKT4gaGFuZGxlLCBidXQgaWYgdGhp cyBpcyBmb3IgYQorK1RPRE8gdGVzdCwgdGhlIEM8dG9kb19vdXRwdXQoKT4gaGFuZGxlIGlzIHVz ZWQuCisrCisrT3V0cHV0IHdpbGwgYmUgaW5kZW50ZWQgYW5kIG1hcmtlZCB3aXRoIGEgIyBzbyBh cyBub3QgdG8gaW50ZXJmZXJlCisrd2l0aCB0ZXN0IG91dHB1dC4gIEEgbmV3bGluZSB3aWxsIGJl IHB1dCBvbiB0aGUgZW5kIGlmIHRoZXJlIGlzbid0IG9uZQorK2FscmVhZHkuCisrCisrV2UgZW5j b3VyYWdlIHVzaW5nIHRoaXMgcmF0aGVyIHRoYW4gY2FsbGluZyBwcmludCBkaXJlY3RseS4KKysK KytSZXR1cm5zIGZhbHNlLiAgV2h5PyAgQmVjYXVzZSBDPGRpYWcoKT4gaXMgb2Z0ZW4gdXNlZCBp biBjb25qdW5jdGlvbiB3aXRoCisrYSBmYWlsaW5nIHRlc3QgKEM8b2soKSB8fCBkaWFnKCk+KSBp dCAicGFzc2VzIHRocm91Z2giIHRoZSBmYWlsdXJlLgorKworKyAgICByZXR1cm4gb2soLi4uKSB8 fCBkaWFnKC4uLik7CisrCisrPWZvciBibGFtZSB0cmFuc2ZlcgorK01hcmsgRm93bGVyIDxtYXJr QHR3b3Nob3J0cGxhbmtzLmNvbT4KKysKKys9Y3V0CisrCisrc3ViIGRpYWcgeworKyAgICBteSAk c2VsZiA9IHNoaWZ0OworKworKyAgICAkc2VsZi0+X3ByaW50X2NvbW1lbnQoICRzZWxmLT5fZGlh Z19maCwgQF8gKTsKKyt9CisrCisrPWl0ZW0gQjxub3RlPgorKworKyAgICAkVGVzdC0+bm90ZShA bXNncyk7CisrCisrTGlrZSBDPGRpYWcoKT4sIGJ1dCBpdCBwcmludHMgdG8gdGhlIEM8b3V0cHV0 KCk+IGhhbmRsZSBzbyBpdCB3aWxsIG5vdAorK25vcm1hbGx5IGJlIHNlZW4gYnkgdGhlIHVzZXIg ZXhjZXB0IGluIHZlcmJvc2UgbW9kZS4KKysKKys9Y3V0CisrCisrc3ViIG5vdGUgeworKyAgICBt eSAkc2VsZiA9IHNoaWZ0OworKworKyAgICAkc2VsZi0+X3ByaW50X2NvbW1lbnQoICRzZWxmLT5v dXRwdXQsIEBfICk7CisrfQorKworK3N1YiBfZGlhZ19maCB7CisrICAgIG15ICRzZWxmID0gc2hp ZnQ7CisrCisrICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7CisrICAgIHJldHVybiAkc2Vs Zi0+aW5fdG9kbyA/ICRzZWxmLT50b2RvX291dHB1dCA6ICRzZWxmLT5mYWlsdXJlX291dHB1dDsK Kyt9CisrCisrc3ViIF9wcmludF9jb21tZW50IHsKKysgICAgbXkoICRzZWxmLCAkZmgsIEBtc2dz ICkgPSBAXzsKKysKKysgICAgcmV0dXJuIGlmICRzZWxmLT5ub19kaWFnOworKyAgICByZXR1cm4g dW5sZXNzIEBtc2dzOworKworKyAgICAjIFByZXZlbnQgcHJpbnRpbmcgaGVhZGVycyB3aGVuIGNv bXBpbGluZyAoaS5lLiAtYykKKysgICAgcmV0dXJuIGlmICReQzsKKysKKysgICAgIyBTbWFzaCBh cmdzIHRvZ2V0aGVyIGxpa2UgcHJpbnQgZG9lcy4KKysgICAgIyBDb252ZXJ0IHVuZGVmIHRvICd1 bmRlZicgc28gaXRzIHJlYWRhYmxlLgorKyAgICBteSAkbXNnID0gam9pbiAnJywgbWFwIHsgZGVm aW5lZCgkXykgPyAkXyA6ICd1bmRlZicgfSBAbXNnczsKKysKKysgICAgIyBFc2NhcGUgdGhlIGJl Z2lubmluZywgX3ByaW50IHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LgorKyAgICAkbXNnID1+ IHMvXi8jIC87CisrCisrICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7CisrICAgICRzZWxm LT5fcHJpbnRfdG9fZmgoICRmaCwgJG1zZyApOworKworKyAgICByZXR1cm4gMDsKKyt9CisrCisr PWl0ZW0gQjxleHBsYWluPgorKworKyAgICBteSBAZHVtcCA9ICRUZXN0LT5leHBsYWluKEBtc2dz KTsKKysKKytXaWxsIGR1bXAgdGhlIGNvbnRlbnRzIG9mIGFueSByZWZlcmVuY2VzIGluIGEgaHVt YW4gcmVhZGFibGUgZm9ybWF0LgorK0hhbmR5IGZvciB0aGluZ3MgbGlrZS4uLgorKworKyAgICBp c19kZWVwbHkoJGhhdmUsICR3YW50KSB8fCBkaWFnIGV4cGxhaW4gJGhhdmU7CisrCisrb3IKKysK KysgICAgaXNfZGVlcGx5KCRoYXZlLCAkd2FudCkgfHwgbm90ZSBleHBsYWluICRoYXZlOworKwor Kz1jdXQKKysKKytzdWIgZXhwbGFpbiB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrCisrICAg IHJldHVybiBtYXAgeworKyAgICAgICAgcmVmICRfCisrICAgICAgICAgID8gZG8geworKyAgICAg ICAgICAgICRzZWxmLT5fdHJ5KHN1YiB7IHJlcXVpcmUgRGF0YTo6RHVtcGVyIH0sIGRpZV9vbl9m YWlsID0+IDEpOworKworKyAgICAgICAgICAgIG15ICRkdW1wZXIgPSBEYXRhOjpEdW1wZXItPm5l dyggWyRfXSApOworKyAgICAgICAgICAgICRkdW1wZXItPkluZGVudCgxKS0+VGVyc2UoMSk7Cisr ICAgICAgICAgICAgJGR1bXBlci0+U29ydGtleXMoMSkgaWYgJGR1bXBlci0+Y2FuKCJTb3J0a2V5 cyIpOworKyAgICAgICAgICAgICRkdW1wZXItPkR1bXA7CisrICAgICAgICAgIH0KKysgICAgICAg ICAgOiAkXworKyAgICB9IEBfOworK30KKysKKys9YmVnaW4gX3ByaXZhdGUKKysKKys9aXRlbSBC PF9wcmludD4KKysKKysgICAgJFRlc3QtPl9wcmludChAbXNncyk7CisrCisrUHJpbnRzIHRvIHRo ZSBDPG91dHB1dCgpPiBmaWxlaGFuZGxlLgorKworKz1lbmQgX3ByaXZhdGUKKysKKys9Y3V0Cisr Cisrc3ViIF9wcmludCB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAgIHJldHVybiAkc2Vs Zi0+X3ByaW50X3RvX2ZoKCAkc2VsZi0+b3V0cHV0LCBAXyApOworK30KKysKKytzdWIgX3ByaW50 X3RvX2ZoIHsKKysgICAgbXkoICRzZWxmLCAkZmgsIEBtc2dzICkgPSBAXzsKKysKKysgICAgIyBQ cmV2ZW50IHByaW50aW5nIGhlYWRlcnMgd2hlbiBvbmx5IGNvbXBpbGluZy4gIE1vc3RseSBmb3Ig d2hlbgorKyAgICAjIHRlc3RzIGFyZSBkZXBhcnNlZCB3aXRoIEI6OkRlcGFyc2UKKysgICAgcmV0 dXJuIGlmICReQzsKKysKKysgICAgbXkgJG1zZyA9IGpvaW4gJycsIEBtc2dzOworKyAgICBteSAk aW5kZW50ID0gJHNlbGYtPl9pbmRlbnQ7CisrCisrICAgIGxvY2FsKCAkXCwgJCIsICQsICkgPSAo IHVuZGVmLCAnICcsICcnICk7CisrCisrICAgICMgRXNjYXBlIGVhY2ggbGluZSBhZnRlciB0aGUg Zmlyc3Qgd2l0aCBhICMgc28gd2UgZG9uJ3QKKysgICAgIyBjb25mdXNlIFRlc3Q6Okhhcm5lc3Mu CisrICAgICRtc2cgPX4gc3tcbig/IVx6KX17XG4kaW5kZW50IyB9c2c7CisrCisrICAgICMgU3Rp Y2sgYSBuZXdsaW5lIG9uIHRoZSBlbmQgaWYgaXQgbmVlZHMgaXQuCisrICAgICRtc2cgLj0gIlxu IiB1bmxlc3MgJG1zZyA9fiAvXG5cei87CisrCisrICAgIHJldHVybiBwcmludCAkZmggJGluZGVu dCwgJG1zZzsKKyt9CisrCisrPWl0ZW0gQjxvdXRwdXQ+CisrCisrPWl0ZW0gQjxmYWlsdXJlX291 dHB1dD4KKysKKys9aXRlbSBCPHRvZG9fb3V0cHV0PgorKworKyAgICBteSAkZmlsZWhhbmRsZSA9 ICRUZXN0LT5vdXRwdXQ7CisrICAgICRUZXN0LT5vdXRwdXQoJGZpbGVoYW5kbGUpOworKyAgICAk VGVzdC0+b3V0cHV0KCRmaWxlbmFtZSk7CisrICAgICRUZXN0LT5vdXRwdXQoXCRzY2FsYXIpOwor KworK1RoZXNlIG1ldGhvZHMgY29udHJvbCB3aGVyZSBUZXN0OjpCdWlsZGVyIHdpbGwgcHJpbnQg aXRzIG91dHB1dC4KKytUaGV5IHRha2UgZWl0aGVyIGFuIG9wZW4gQzwkZmlsZWhhbmRsZT4sIGEg QzwkZmlsZW5hbWU+IHRvIG9wZW4gYW5kIHdyaXRlIHRvCisrb3IgYSBDPCRzY2FsYXI+IHJlZmVy ZW5jZSB0byBhcHBlbmQgdG8uICBJdCB3aWxsIGFsd2F5cyByZXR1cm4gYSBDPCRmaWxlaGFuZGxl Pi4KKysKKytCPG91dHB1dD4gaXMgd2hlcmUgbm9ybWFsICJvay9ub3Qgb2siIHRlc3Qgb3V0cHV0 IGdvZXMuCisrCisrRGVmYXVsdHMgdG8gU1RET1VULgorKworK0I8ZmFpbHVyZV9vdXRwdXQ+IGlz IHdoZXJlIGRpYWdub3N0aWMgb3V0cHV0IG9uIHRlc3QgZmFpbHVyZXMgYW5kCisrQzxkaWFnKCk+ IGdvZXMuICBJdCBpcyBub3JtYWxseSBub3QgcmVhZCBieSBUZXN0OjpIYXJuZXNzIGFuZCBpbnN0 ZWFkIGlzCisrZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorKworK0RlZmF1bHRzIHRvIFNUREVSUi4K KysKKytDPHRvZG9fb3V0cHV0PiBpcyB1c2VkIGluc3RlYWQgb2YgQzxmYWlsdXJlX291dHB1dCgp PiBmb3IgdGhlCisrZGlhZ25vc3RpY3Mgb2YgYSBmYWlsaW5nIFRPRE8gdGVzdC4gIFRoZXNlIHdp bGwgbm90IGJlIHNlZW4gYnkgdGhlCisrdXNlci4KKysKKytEZWZhdWx0cyB0byBTVERPVVQuCisr CisrPWN1dAorKworK3N1YiBvdXRwdXQgeworKyAgICBteSggJHNlbGYsICRmaCApID0gQF87Cisr CisrICAgIGlmKCBkZWZpbmVkICRmaCApIHsKKysgICAgICAgICRzZWxmLT57T3V0X0ZIfSA9ICRz ZWxmLT5fbmV3X2ZoKCRmaCk7CisrICAgIH0KKysgICAgcmV0dXJuICRzZWxmLT57T3V0X0ZIfTsK Kyt9CisrCisrc3ViIGZhaWx1cmVfb3V0cHV0IHsKKysgICAgbXkoICRzZWxmLCAkZmggKSA9IEBf OworKworKyAgICBpZiggZGVmaW5lZCAkZmggKSB7CisrICAgICAgICAkc2VsZi0+e0ZhaWxfRkh9 ID0gJHNlbGYtPl9uZXdfZmgoJGZoKTsKKysgICAgfQorKyAgICByZXR1cm4gJHNlbGYtPntGYWls X0ZIfTsKKyt9CisrCisrc3ViIHRvZG9fb3V0cHV0IHsKKysgICAgbXkoICRzZWxmLCAkZmggKSA9 IEBfOworKworKyAgICBpZiggZGVmaW5lZCAkZmggKSB7CisrICAgICAgICAkc2VsZi0+e1RvZG9f Rkh9ID0gJHNlbGYtPl9uZXdfZmgoJGZoKTsKKysgICAgfQorKyAgICByZXR1cm4gJHNlbGYtPntU b2RvX0ZIfTsKKyt9CisrCisrc3ViIF9uZXdfZmggeworKyAgICBteSAkc2VsZiA9IHNoaWZ0Owor KyAgICBteSgkZmlsZV9vcl9maCkgPSBzaGlmdDsKKysKKysgICAgbXkgJGZoOworKyAgICBpZigg JHNlbGYtPmlzX2ZoKCRmaWxlX29yX2ZoKSApIHsKKysgICAgICAgICRmaCA9ICRmaWxlX29yX2Zo OworKyAgICB9CisrICAgIGVsc2lmKCByZWYgJGZpbGVfb3JfZmggZXEgJ1NDQUxBUicgKSB7Cisr ICAgICAgICAjIFNjYWxhciByZWZzIGFzIGZpbGVoYW5kbGVzIHdhcyBhZGRlZCBpbiA1LjguCisr ICAgICAgICBpZiggJF0gPj0gNS4wMDggKSB7CisrICAgICAgICAgICAgb3BlbiAkZmgsICI+PiIs ICRmaWxlX29yX2ZoCisrICAgICAgICAgICAgICBvciAkc2VsZi0+Y3JvYWsoIkNhbid0IG9wZW4g c2NhbGFyIHJlZiAkZmlsZV9vcl9maDogJCEiKTsKKysgICAgICAgIH0KKysgICAgICAgICMgRW11 bGF0ZSBzY2FsYXIgcmVmIGZpbGVoYW5kbGVzIHdpdGggYSB0aWUuCisrICAgICAgICBlbHNlIHsK KysgICAgICAgICAgICAkZmggPSBUZXN0OjpCdWlsZGVyOjpJTzo6U2NhbGFyLT5uZXcoJGZpbGVf b3JfZmgpCisrICAgICAgICAgICAgICBvciAkc2VsZi0+Y3JvYWsoIkNhbid0IHRpZSBzY2FsYXIg cmVmICRmaWxlX29yX2ZoIik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAg ICAgICBvcGVuICRmaCwgIj4iLCAkZmlsZV9vcl9maAorKyAgICAgICAgICBvciAkc2VsZi0+Y3Jv YWsoIkNhbid0IG9wZW4gdGVzdCBvdXRwdXQgbG9nICRmaWxlX29yX2ZoOiAkISIpOworKyAgICAg ICAgX2F1dG9mbHVzaCgkZmgpOworKyAgICB9CisrCisrICAgIHJldHVybiAkZmg7CisrfQorKwor K3N1YiBfYXV0b2ZsdXNoIHsKKysgICAgbXkoJGZoKSA9IHNoaWZ0OworKyAgICBteSAkb2xkX2Zo ID0gc2VsZWN0ICRmaDsKKysgICAgJHwgPSAxOworKyAgICBzZWxlY3QgJG9sZF9maDsKKysKKysg ICAgcmV0dXJuOworK30KKysKKytteSggJFRlc3RvdXQsICRUZXN0ZXJyICk7CisrCisrc3ViIF9k dXBfc3RkaGFuZGxlcyB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrCisrICAgICRzZWxmLT5f b3Blbl90ZXN0aGFuZGxlczsKKysKKysgICAgIyBTZXQgZXZlcnl0aGluZyB0byB1bmJ1ZmZlcmVk IGVsc2UgcGxhaW4gcHJpbnRzIHRvIFNURE9VVCB3aWxsCisrICAgICMgY29tZSBvdXQgaW4gdGhl IHdyb25nIG9yZGVyIGZyb20gb3VyIG93biBwcmludHMuCisrICAgIF9hdXRvZmx1c2goJFRlc3Rv dXQpOworKyAgICBfYXV0b2ZsdXNoKCBcKlNURE9VVCApOworKyAgICBfYXV0b2ZsdXNoKCRUZXN0 ZXJyKTsKKysgICAgX2F1dG9mbHVzaCggXCpTVERFUlIgKTsKKysKKysgICAgJHNlbGYtPnJlc2V0 X291dHB1dHM7CisrCisrICAgIHJldHVybjsKKyt9CisrCisrc3ViIF9vcGVuX3Rlc3RoYW5kbGVz IHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysKKysgICAgcmV0dXJuIGlmICRzZWxmLT57T3Bl bmVkX1Rlc3RoYW5kbGVzfTsKKysKKysgICAgIyBXZSBkdXAgU1RET1VUIGFuZCBTVERFUlIgc28g cGVvcGxlIGNhbiBjaGFuZ2UgdGhlbSBpbiB0aGVpcgorKyAgICAjIHRlc3Qgc3VpdGVzIHdoaWxl IHN0aWxsIGdldHRpbmcgbm9ybWFsIHRlc3Qgb3V0cHV0LgorKyAgICBvcGVuKCAkVGVzdG91dCwg Ij4mU1RET1VUIiApIG9yIGRpZSAiQ2FuJ3QgZHVwIFNURE9VVDogICQhIjsKKysgICAgb3Blbigg JFRlc3RlcnIsICI+JlNUREVSUiIgKSBvciBkaWUgIkNhbid0IGR1cCBTVERFUlI6ICAkISI7Cisr CisrICAgICRzZWxmLT5fY29weV9pb19sYXllcnMoIFwqU1RET1VULCAkVGVzdG91dCApOworKyAg ICAkc2VsZi0+X2NvcHlfaW9fbGF5ZXJzKCBcKlNUREVSUiwgJFRlc3RlcnIgKTsKKysKKysgICAg JHNlbGYtPntPcGVuZWRfVGVzdGhhbmRsZXN9ID0gMTsKKysKKysgICAgcmV0dXJuOworK30KKysK KytzdWIgX2NvcHlfaW9fbGF5ZXJzIHsKKysgICAgbXkoICRzZWxmLCAkc3JjLCAkZHN0ICkgPSBA XzsKKysKKysgICAgJHNlbGYtPl90cnkoCisrICAgICAgICBzdWIgeworKyAgICAgICAgICAgIHJl cXVpcmUgUGVybElPOworKyAgICAgICAgICAgIG15IEBzcmNfbGF5ZXJzID0gUGVybElPOjpnZXRf bGF5ZXJzKCRzcmMpOworKworKyAgICAgICAgICAgIF9hcHBseV9sYXllcnMoJGRzdCwgQHNyY19s YXllcnMpIGlmIEBzcmNfbGF5ZXJzOworKyAgICAgICAgfQorKyAgICApOworKworKyAgICByZXR1 cm47CisrfQorKworK3N1YiBfYXBwbHlfbGF5ZXJzIHsKKysgICAgbXkgKCRmaCwgQGxheWVycykg PSBAXzsKKysgICAgbXkgJXNlZW47CisrICAgIG15IEB1bmlxdWUgPSBncmVwIHsgJF8gbmUgJ3Vu aXgnIGFuZCAhJHNlZW57JF99KysgfSBAbGF5ZXJzOworKyAgICBiaW5tb2RlKCRmaCwgam9pbigi OiIsICIiLCAicmF3IiwgQHVuaXF1ZSkpOworK30KKysKKysKKys9aXRlbSByZXNldF9vdXRwdXRz CisrCisrICAkdGItPnJlc2V0X291dHB1dHM7CisrCisrUmVzZXRzIGFsbCB0aGUgb3V0cHV0IGZp bGVoYW5kbGVzIGJhY2sgdG8gdGhlaXIgZGVmYXVsdHMuCisrCisrPWN1dAorKworK3N1YiByZXNl dF9vdXRwdXRzIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysKKysgICAgJHNlbGYtPm91dHB1 dCAgICAgICAgKCRUZXN0b3V0KTsKKysgICAgJHNlbGYtPmZhaWx1cmVfb3V0cHV0KCRUZXN0ZXJy KTsKKysgICAgJHNlbGYtPnRvZG9fb3V0cHV0ICAgKCRUZXN0b3V0KTsKKysKKysgICAgcmV0dXJu OworK30KKysKKys9aXRlbSBjYXJwCisrCisrICAkdGItPmNhcnAoQG1lc3NhZ2UpOworKworK1dh cm5zIHdpdGggQzxAbWVzc2FnZT4gYnV0IHRoZSBtZXNzYWdlIHdpbGwgYXBwZWFyIHRvIGNvbWUg ZnJvbSB0aGUKKytwb2ludCB3aGVyZSB0aGUgb3JpZ2luYWwgdGVzdCBmdW5jdGlvbiB3YXMgY2Fs bGVkIChDPDwgJHRiLT5jYWxsZXIgPj4pLgorKworKz1pdGVtIGNyb2FrCisrCisrICAkdGItPmNy b2FrKEBtZXNzYWdlKTsKKysKKytEaWVzIHdpdGggQzxAbWVzc2FnZT4gYnV0IHRoZSBtZXNzYWdl IHdpbGwgYXBwZWFyIHRvIGNvbWUgZnJvbSB0aGUKKytwb2ludCB3aGVyZSB0aGUgb3JpZ2luYWwg dGVzdCBmdW5jdGlvbiB3YXMgY2FsbGVkIChDPDwgJHRiLT5jYWxsZXIgPj4pLgorKworKz1jdXQK KysKKytzdWIgX21lc3NhZ2VfYXRfY2FsbGVyIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysK KysgICAgbG9jYWwgJExldmVsID0gJExldmVsICsgMTsKKysgICAgbXkoICRwYWNrLCAkZmlsZSwg JGxpbmUgKSA9ICRzZWxmLT5jYWxsZXI7CisrICAgIHJldHVybiBqb2luKCAiIiwgQF8gKSAuICIg YXQgJGZpbGUgbGluZSAkbGluZS5cbiI7CisrfQorKworK3N1YiBjYXJwIHsKKysgICAgbXkgJHNl bGYgPSBzaGlmdDsKKysgICAgcmV0dXJuIHdhcm4gJHNlbGYtPl9tZXNzYWdlX2F0X2NhbGxlcihA Xyk7CisrfQorKworK3N1YiBjcm9hayB7CisrICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAgIHJl dHVybiBkaWUgJHNlbGYtPl9tZXNzYWdlX2F0X2NhbGxlcihAXyk7CisrfQorKworKworKz1iYWNr CisrCisrCisrPWhlYWQyIFRlc3QgU3RhdHVzIGFuZCBJbmZvCisrCisrPW92ZXIgNAorKworKz1p dGVtIEI8Y3VycmVudF90ZXN0PgorKworKyAgICBteSAkY3Vycl90ZXN0ID0gJFRlc3QtPmN1cnJl bnRfdGVzdDsKKysgICAgJFRlc3QtPmN1cnJlbnRfdGVzdCgkbnVtKTsKKysKKytHZXRzL3NldHMg dGhlIGN1cnJlbnQgdGVzdCBudW1iZXIgd2UncmUgb24uICBZb3UgdXN1YWxseSBzaG91bGRuJ3QK KytoYXZlIHRvIHNldCB0aGlzLgorKworK0lmIHNldCBmb3J3YXJkLCB0aGUgZGV0YWlscyBvZiB0 aGUgbWlzc2luZyB0ZXN0cyBhcmUgZmlsbGVkIGluIGFzICd1bmtub3duJy4KKytpZiBzZXQgYmFj a3dhcmQsIHRoZSBkZXRhaWxzIG9mIHRoZSBpbnRlcnZlbmluZyB0ZXN0cyBhcmUgZGVsZXRlZC4g IFlvdQorK2NhbiBlcmFzZSBoaXN0b3J5IGlmIHlvdSByZWFsbHkgd2FudCB0by4KKysKKys9Y3V0 CisrCisrc3ViIGN1cnJlbnRfdGVzdCB7CisrICAgIG15KCAkc2VsZiwgJG51bSApID0gQF87Cisr CisrICAgIGxvY2soICRzZWxmLT57Q3Vycl9UZXN0fSApOworKyAgICBpZiggZGVmaW5lZCAkbnVt ICkgeworKyAgICAgICAgJHNlbGYtPntDdXJyX1Rlc3R9ID0gJG51bTsKKysKKysgICAgICAgICMg SWYgdGhlIHRlc3QgY291bnRlciBpcyBiZWluZyBwdXNoZWQgZm9yd2FyZCBmaWxsIGluIHRoZSBk ZXRhaWxzLgorKyAgICAgICAgbXkgJHRlc3RfcmVzdWx0cyA9ICRzZWxmLT57VGVzdF9SZXN1bHRz fTsKKysgICAgICAgIGlmKCAkbnVtID4gQCR0ZXN0X3Jlc3VsdHMgKSB7CisrICAgICAgICAgICAg bXkgJHN0YXJ0ID0gQCR0ZXN0X3Jlc3VsdHMgPyBAJHRlc3RfcmVzdWx0cyA6IDA7CisrICAgICAg ICAgICAgZm9yKCAkc3RhcnQgLi4gJG51bSAtIDEgKSB7CisrICAgICAgICAgICAgICAgICR0ZXN0 X3Jlc3VsdHMtPlskX10gPSAmc2hhcmUoCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAg ICAgICAgICAgICAgICAgICAgJ29rJyAgICAgID0+IDEsCisrICAgICAgICAgICAgICAgICAgICAg ICAgYWN0dWFsX29rID0+IHVuZGVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiAg ICA9PiAnaW5jcmVtZW50aW5nIHRlc3QgbnVtYmVyJywKKysgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlICAgICAgPT4gJ3Vua25vd24nLAorKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg ICAgICA9PiB1bmRlZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAp OworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgICMgSWYgYmFja3dhcmQsIHdp cGUgaGlzdG9yeS4gIEl0cyB0aGVpciBmdW5lcmFsLgorKyAgICAgICAgZWxzaWYoICRudW0gPCBA JHRlc3RfcmVzdWx0cyApIHsKKysgICAgICAgICAgICAkI3skdGVzdF9yZXN1bHRzfSA9ICRudW0g LSAxOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAkc2VsZi0+e0N1cnJfVGVzdH07 CisrfQorKworKz1pdGVtIEI8aXNfcGFzc2luZz4KKysKKysgICBteSAkb2sgPSAkYnVpbGRlci0+ aXNfcGFzc2luZzsKKysKKytJbmRpY2F0ZXMgaWYgdGhlIHRlc3Qgc3VpdGUgaXMgY3VycmVudGx5 IHBhc3NpbmcuCisrCisrTW9yZSBmb3JtYWxseSwgaXQgd2lsbCBiZSBmYWxzZSBpZiBhbnl0aGlu ZyBoYXMgaGFwcGVuZWQgd2hpY2ggbWFrZXMKKytpdCBpbXBvc3NpYmxlIGZvciB0aGUgdGVzdCBz dWl0ZSB0byBwYXNzLiAgVHJ1ZSBvdGhlcndpc2UuCisrCisrRm9yIGV4YW1wbGUsIGlmIG5vIHRl c3RzIGhhdmUgcnVuIEM8aXNfcGFzc2luZygpPiB3aWxsIGJlIHRydWUgYmVjYXVzZQorK2V2ZW4g dGhvdWdoIGEgc3VpdGUgd2l0aCBubyB0ZXN0cyBpcyBhIGZhaWx1cmUgeW91IGNhbiBhZGQgYSBw YXNzaW5nCisrdGVzdCB0byBpdCBhbmQgc3RhcnQgcGFzc2luZy4KKysKKytEb24ndCB0aGluayBh Ym91dCBpdCB0b28gbXVjaC4KKysKKys9Y3V0CisrCisrc3ViIGlzX3Bhc3NpbmcgeworKyAgICBt eSAkc2VsZiA9IHNoaWZ0OworKworKyAgICBpZiggQF8gKSB7CisrICAgICAgICAkc2VsZi0+e0lz X1Bhc3Npbmd9ID0gc2hpZnQ7CisrICAgIH0KKysKKysgICAgcmV0dXJuICRzZWxmLT57SXNfUGFz c2luZ307CisrfQorKworKworKz1pdGVtIEI8c3VtbWFyeT4KKysKKysgICAgbXkgQHRlc3RzID0g JFRlc3QtPnN1bW1hcnk7CisrCisrQSBzaW1wbGUgc3VtbWFyeSBvZiB0aGUgdGVzdHMgc28gZmFy LiAgVHJ1ZSBmb3IgcGFzcywgZmFsc2UgZm9yIGZhaWwuCisrVGhpcyBpcyBhIGxvZ2ljYWwgcGFz cy9mYWlsLCBzbyB0b2RvcyBhcmUgcGFzc2VzLgorKworK09mIGNvdXJzZSwgdGVzdCAjMSBpcyAk dGVzdHNbMF0sIGV0Yy4uLgorKworKz1jdXQKKysKKytzdWIgc3VtbWFyeSB7CisrICAgIG15KCRz ZWxmKSA9IHNoaWZ0OworKworKyAgICByZXR1cm4gbWFwIHsgJF8tPnsnb2snfSB9IEB7ICRzZWxm LT57VGVzdF9SZXN1bHRzfSB9OworK30KKysKKys9aXRlbSBCPGRldGFpbHM+CisrCisrICAgIG15 IEB0ZXN0cyA9ICRUZXN0LT5kZXRhaWxzOworKworK0xpa2UgQzxzdW1tYXJ5KCk+LCBidXQgd2l0 aCBhIGxvdCBtb3JlIGRldGFpbC4KKysKKysgICAgJHRlc3RzWyR0ZXN0X251bSAtIDFdID0gCisr ICAgICAgICAgICAgeyAnb2snICAgICAgID0+IGlzIHRoZSB0ZXN0IGNvbnNpZGVyZWQgYSBwYXNz PworKyAgICAgICAgICAgICAgYWN0dWFsX29rICA9PiBkaWQgaXQgbGl0ZXJhbGx5IHNheSAnb2sn PworKyAgICAgICAgICAgICAgbmFtZSAgICAgICA9PiBuYW1lIG9mIHRoZSB0ZXN0IChpZiBhbnkp CisrICAgICAgICAgICAgICB0eXBlICAgICAgID0+IHR5cGUgb2YgdGVzdCAoaWYgYW55LCBzZWUg YmVsb3cpLgorKyAgICAgICAgICAgICAgcmVhc29uICAgICA9PiByZWFzb24gZm9yIHRoZSBhYm92 ZSAoaWYgYW55KQorKyAgICAgICAgICAgIH07CisrCisrJ29rJyBpcyB0cnVlIGlmIFRlc3Q6Okhh cm5lc3Mgd2lsbCBjb25zaWRlciB0aGUgdGVzdCB0byBiZSBhIHBhc3MuCisrCisrJ2FjdHVhbF9v aycgaXMgYSByZWZsZWN0aW9uIG9mIHdoZXRoZXIgb3Igbm90IHRoZSB0ZXN0IGxpdGVyYWxseQor K3ByaW50ZWQgJ29rJyBvciAnbm90IG9rJy4gIFRoaXMgaXMgZm9yIGV4YW1pbmluZyB0aGUgcmVz dWx0IG9mICd0b2RvJworK3Rlc3RzLgorKworKyduYW1lJyBpcyB0aGUgbmFtZSBvZiB0aGUgdGVz dC4KKysKKysndHlwZScgaW5kaWNhdGVzIGlmIGl0IHdhcyBhIHNwZWNpYWwgdGVzdC4gIE5vcm1h bCB0ZXN0cyBoYXZlIGEgdHlwZQorK29mICcnLiAgVHlwZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xs b3dpbmc6CisrCisrICAgIHNraXAgICAgICAgIHNlZSBza2lwKCkKKysgICAgdG9kbyAgICAgICAg c2VlIHRvZG8oKQorKyAgICB0b2RvX3NraXAgICBzZWUgdG9kb19za2lwKCkKKysgICAgdW5rbm93 biAgICAgc2VlIGJlbG93CisrCisrU29tZXRpbWVzIHRoZSBUZXN0OjpCdWlsZGVyIHRlc3QgY291 bnRlciBpcyBpbmNyZW1lbnRlZCB3aXRob3V0IGl0CisrcHJpbnRpbmcgYW55IHRlc3Qgb3V0cHV0 LCBmb3IgZXhhbXBsZSwgd2hlbiBDPGN1cnJlbnRfdGVzdCgpPiBpcyBjaGFuZ2VkLgorK0luIHRo ZXNlIGNhc2VzLCBUZXN0OjpCdWlsZGVyIGRvZXNuJ3Qga25vdyB0aGUgcmVzdWx0IG9mIHRoZSB0 ZXN0LCBzbworK2l0cyB0eXBlIGlzICd1bmtub3duJy4gIFRoZXNlIGRldGFpbHMgZm9yIHRoZXNl IHRlc3RzIGFyZSBmaWxsZWQgaW4uCisrVGhleSBhcmUgY29uc2lkZXJlZCBvaywgYnV0IHRoZSBu YW1lIGFuZCBhY3R1YWxfb2sgaXMgbGVmdCBDPHVuZGVmPi4KKysKKytGb3IgZXhhbXBsZSAibm90 IG9rIDIzIC0gaG9sZSBjb3VudCAjIFRPRE8gaW5zdWZmaWNpZW50IGRvbnV0cyIgd291bGQKKyty ZXN1bHQgaW4gdGhpcyBzdHJ1Y3R1cmU6CisrCisrICAgICR0ZXN0c1syMl0gPSAgICAjIDIzIC0g MSwgc2luY2UgYXJyYXlzIHN0YXJ0IGZyb20gMC4KKysgICAgICB7IG9rICAgICAgICA9PiAxLCAg ICMgbG9naWNhbGx5LCB0aGUgdGVzdCBwYXNzZWQgc2luY2UgaXRzIHRvZG8KKysgICAgICAgIGFj dHVhbF9vayA9PiAwLCAgICMgaW4gYWJzb2x1dGUgdGVybXMsIGl0IGZhaWxlZAorKyAgICAgICAg bmFtZSAgICAgID0+ICdob2xlIGNvdW50JywKKysgICAgICAgIHR5cGUgICAgICA9PiAndG9kbycs CisrICAgICAgICByZWFzb24gICAgPT4gJ2luc3VmZmljaWVudCBkb251dHMnCisrICAgICAgfTsK KysKKys9Y3V0CisrCisrc3ViIGRldGFpbHMgeworKyAgICBteSAkc2VsZiA9IHNoaWZ0OworKyAg ICByZXR1cm4gQHsgJHNlbGYtPntUZXN0X1Jlc3VsdHN9IH07CisrfQorKworKz1pdGVtIEI8dG9k bz4KKysKKysgICAgbXkgJHRvZG9fcmVhc29uID0gJFRlc3QtPnRvZG87CisrICAgIG15ICR0b2Rv X3JlYXNvbiA9ICRUZXN0LT50b2RvKCRwYWNrKTsKKysKKytJZiB0aGUgY3VycmVudCB0ZXN0cyBh cmUgY29uc2lkZXJlZCAiVE9ETyIgaXQgd2lsbCByZXR1cm4gdGhlIHJlYXNvbiwKKytpZiBhbnku ICBUaGlzIHJlYXNvbiBjYW4gY29tZSBmcm9tIGEgQzwkVE9ETz4gdmFyaWFibGUgb3IgdGhlIGxh c3QgY2FsbAorK3RvIEM8dG9kb19zdGFydCgpPi4KKysKKytTaW5jZSBhIFRPRE8gdGVzdCBkb2Vz IG5vdCBuZWVkIGEgcmVhc29uLCB0aGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW4KKytlbXB0eSBz dHJpbmcgZXZlbiB3aGVuIGluc2lkZSBhIFRPRE8gYmxvY2suICBVc2UgQzw8ICRUZXN0LT5pbl90 b2RvID4+CisrdG8gZGV0ZXJtaW5lIGlmIHlvdSBhcmUgY3VycmVudGx5IGluc2lkZSBhIFRPRE8g YmxvY2suCisrCisrQzx0b2RvKCk+IGlzIGFib3V0IGZpbmRpbmcgdGhlIHJpZ2h0IHBhY2thZ2Ug dG8gbG9vayBmb3IgQzwkVE9ETz4gaW4uICBJdCdzCisrcHJldHR5IGdvb2QgYXQgZ3Vlc3Npbmcg dGhlIHJpZ2h0IHBhY2thZ2UgdG8gbG9vayBhdC4gIEl0IGZpcnN0IGxvb2tzIGZvcgorK3RoZSBj YWxsZXIgYmFzZWQgb24gQzwkTGV2ZWwgKyAxPiwgc2luY2UgQzx0b2RvKCk+IGlzIHVzdWFsbHkg Y2FsbGVkIGluc2lkZQorK2EgdGVzdCBmdW5jdGlvbi4gIEFzIGEgbGFzdCByZXNvcnQgaXQgd2ls bCB1c2UgQzxleHBvcnRlZF90bygpPi4KKysKKytTb21ldGltZXMgdGhlcmUgaXMgc29tZSBjb25m dXNpb24gYWJvdXQgd2hlcmUgdG9kbygpIHNob3VsZCBiZSBsb29raW5nCisrZm9yIHRoZSBDPCRU T0RPPiB2YXJpYWJsZS4gIElmIHlvdSB3YW50IHRvIGJlIHN1cmUsIHRlbGwgaXQgZXhwbGljaXRs eQorK3doYXQgJHBhY2sgdG8gdXNlLgorKworKz1jdXQKKysKKytzdWIgdG9kbyB7CisrICAgIG15 KCAkc2VsZiwgJHBhY2sgKSA9IEBfOworKworKyAgICByZXR1cm4gJHNlbGYtPntUb2RvfSBpZiBk ZWZpbmVkICRzZWxmLT57VG9kb307CisrCisrICAgIGxvY2FsICRMZXZlbCA9ICRMZXZlbCArIDE7 CisrICAgIG15ICR0b2RvID0gJHNlbGYtPmZpbmRfVE9ETygkcGFjayk7CisrICAgIHJldHVybiAk dG9kbyBpZiBkZWZpbmVkICR0b2RvOworKworKyAgICByZXR1cm4gJyc7CisrfQorKworKz1pdGVt IEI8ZmluZF9UT0RPPgorKworKyAgICBteSAkdG9kb19yZWFzb24gPSAkVGVzdC0+ZmluZF9UT0RP KCk7CisrICAgIG15ICR0b2RvX3JlYXNvbiA9ICRUZXN0LT5maW5kX1RPRE8oJHBhY2spOworKwor K0xpa2UgQzx0b2RvKCk+IGJ1dCBvbmx5IHJldHVybnMgdGhlIHZhbHVlIG9mIEM8JFRPRE8+IGln bm9yaW5nCisrQzx0b2RvX3N0YXJ0KCk+LgorKworK0NhbiBhbHNvIGJlIHVzZWQgdG8gc2V0IEM8 JFRPRE8+IHRvIGEgbmV3IHZhbHVlIHdoaWxlIHJldHVybmluZyB0aGUKKytvbGQgdmFsdWU6Cisr CisrICAgIG15ICRvbGRfcmVhc29uID0gJFRlc3QtPmZpbmRfVE9ETygkcGFjaywgMSwgJG5ld19y ZWFzb24pOworKworKz1jdXQKKysKKytzdWIgZmluZF9UT0RPIHsKKysgICAgbXkoICRzZWxmLCAk cGFjaywgJHNldCwgJG5ld192YWx1ZSApID0gQF87CisrCisrICAgICRwYWNrID0gJHBhY2sgfHwg JHNlbGYtPmNhbGxlcigxKSB8fCAkc2VsZi0+ZXhwb3J0ZWRfdG87CisrICAgIHJldHVybiB1bmxl c3MgJHBhY2s7CisrCisrICAgIG5vIHN0cmljdCAncmVmcyc7ICAgICMjIG5vIGNyaXRpYworKyAg ICBteSAkb2xkX3ZhbHVlID0gJHsgJHBhY2sgLiAnOjpUT0RPJyB9OworKyAgICAkc2V0IGFuZCAk eyAkcGFjayAuICc6OlRPRE8nIH0gPSAkbmV3X3ZhbHVlOworKyAgICByZXR1cm4gJG9sZF92YWx1 ZTsKKyt9CisrCisrPWl0ZW0gQjxpbl90b2RvPgorKworKyAgICBteSAkaW5fdG9kbyA9ICRUZXN0 LT5pbl90b2RvOworKworK1JldHVybnMgdHJ1ZSBpZiB0aGUgdGVzdCBpcyBjdXJyZW50bHkgaW5z aWRlIGEgVE9ETyBibG9jay4KKysKKys9Y3V0CisrCisrc3ViIGluX3RvZG8geworKyAgICBteSAk c2VsZiA9IHNoaWZ0OworKworKyAgICBsb2NhbCAkTGV2ZWwgPSAkTGV2ZWwgKyAxOworKyAgICBy ZXR1cm4oIGRlZmluZWQgJHNlbGYtPntUb2RvfSB8fCAkc2VsZi0+ZmluZF9UT0RPICkgPyAxIDog MDsKKyt9CisrCisrPWl0ZW0gQjx0b2RvX3N0YXJ0PgorKworKyAgICAkVGVzdC0+dG9kb19zdGFy dCgpOworKyAgICAkVGVzdC0+dG9kb19zdGFydCgkbWVzc2FnZSk7CisrCisrVGhpcyBtZXRob2Qg YWxsb3dzIHlvdSBkZWNsYXJlIGFsbCBzdWJzZXF1ZW50IHRlc3RzIGFzIFRPRE8gdGVzdHMsIHVw IHVudGlsCisrdGhlIEM8dG9kb19lbmQ+IG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuCisrCisrVGhl IEM8VE9ETzo+IGFuZCBDPCRUT0RPPiBzeW50YXggaXMgZ2VuZXJhbGx5IHByZXR0eSBnb29kIGFi b3V0IGZpZ3VyaW5nIG91dAorK3doZXRoZXIgb3Igbm90IHdlJ3JlIGluIGEgVE9ETyB0ZXN0LiAg SG93ZXZlciwgb2Z0ZW4gd2UgZmluZCB0aGF0IHRoaXMgaXMgbm90CisrcG9zc2libGUgdG8gZGV0 ZXJtaW5lIChzdWNoIGFzIHdoZW4gd2Ugd2FudCB0byB1c2UgQzwkVE9ETz4gYnV0CisrdGhlIHRl c3RzIGFyZSBiZWluZyBleGVjdXRlZCBpbiBvdGhlciBwYWNrYWdlcyB3aGljaCBjYW4ndCBiZSBp bmZlcnJlZAorK2JlZm9yZWhhbmQpLgorKworK05vdGUgdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHRv IG5lc3QgInRvZG8iIHRlc3RzCisrCisrICRUZXN0LT50b2RvX3N0YXJ0KCd3b3JraW5nIG9uIHRo aXMnKTsKKysgIyBsb3RzIG9mIGNvZGUKKysgJFRlc3QtPnRvZG9fc3RhcnQoJ3dvcmtpbmcgb24g dGhhdCcpOworKyAjIG1vcmUgY29kZQorKyAkVGVzdC0+dG9kb19lbmQ7CisrICRUZXN0LT50b2Rv X2VuZDsKKysKKytUaGlzIGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQsIGJ1dCBsYXJnZSB0 ZXN0aW5nIHN5c3RlbXMgb2Z0ZW4gaGF2ZSB3ZWlyZAorK2ludGVybmFsIG5lZWRzLgorKworK1dl J3ZlIHRyaWVkIHRvIG1ha2UgdGhpcyBhbHNvIHdvcmsgd2l0aCB0aGUgVE9ETzogc3ludGF4LCBi dXQgaXQncyBub3QKKytndWFyYW50ZWVkIGFuZCBpdHMgdXNlIGlzIGFsc28gZGlzY291cmFnZWQ6 CisrCisrIFRPRE86IHsKKysgICAgIGxvY2FsICRUT0RPID0gJ1dlIGhhdmUgd29yayB0byBkbyEn OworKyAgICAgJFRlc3QtPnRvZG9fc3RhcnQoJ3dvcmtpbmcgb24gdGhpcycpOworKyAgICAgIyBs b3RzIG9mIGNvZGUKKysgICAgICRUZXN0LT50b2RvX3N0YXJ0KCd3b3JraW5nIG9uIHRoYXQnKTsK KysgICAgICMgbW9yZSBjb2RlCisrICAgICAkVGVzdC0+dG9kb19lbmQ7CisrICAgICAkVGVzdC0+ dG9kb19lbmQ7CisrIH0KKysKKytQaWNrIG9uZSBzdHlsZSBvciBhbm90aGVyIG9mICJUT0RPIiB0 byBiZSBvbiB0aGUgc2FmZSBzaWRlLgorKworKz1jdXQKKysKKytzdWIgdG9kb19zdGFydCB7Cisr ICAgIG15ICRzZWxmID0gc2hpZnQ7CisrICAgIG15ICRtZXNzYWdlID0gQF8gPyBzaGlmdCA6ICcn OworKworKyAgICAkc2VsZi0+e1N0YXJ0X1RvZG99Kys7CisrICAgIGlmKCAkc2VsZi0+aW5fdG9k byApIHsKKysgICAgICAgIHB1c2ggQHsgJHNlbGYtPntUb2RvX1N0YWNrfSB9ID0+ICRzZWxmLT50 b2RvOworKyAgICB9CisrICAgICRzZWxmLT57VG9kb30gPSAkbWVzc2FnZTsKKysKKysgICAgcmV0 dXJuOworK30KKysKKys9aXRlbSBDPHRvZG9fZW5kPgorKworKyAkVGVzdC0+dG9kb19lbmQ7Cisr CisrU3RvcHMgcnVubmluZyB0ZXN0cyBhcyAiVE9ETyIgdGVzdHMuICBUaGlzIG1ldGhvZCBpcyBm YXRhbCBpZiBjYWxsZWQgd2l0aG91dCBhCisrcHJlY2VkaW5nIEM8dG9kb19zdGFydD4gbWV0aG9k IGNhbGwuCisrCisrPWN1dAorKworK3N1YiB0b2RvX2VuZCB7CisrICAgIG15ICRzZWxmID0gc2hp ZnQ7CisrCisrICAgIGlmKCAhJHNlbGYtPntTdGFydF9Ub2RvfSApIHsKKysgICAgICAgICRzZWxm LT5jcm9haygndG9kb19lbmQoKSBjYWxsZWQgd2l0aG91dCB0b2RvX3N0YXJ0KCknKTsKKysgICAg fQorKworKyAgICAkc2VsZi0+e1N0YXJ0X1RvZG99LS07CisrCisrICAgIGlmKCAkc2VsZi0+e1N0 YXJ0X1RvZG99ICYmIEB7ICRzZWxmLT57VG9kb19TdGFja30gfSApIHsKKysgICAgICAgICRzZWxm LT57VG9kb30gPSBwb3AgQHsgJHNlbGYtPntUb2RvX1N0YWNrfSB9OworKyAgICB9CisrICAgIGVs c2UgeworKyAgICAgICAgZGVsZXRlICRzZWxmLT57VG9kb307CisrICAgIH0KKysKKysgICAgcmV0 dXJuOworK30KKysKKys9aXRlbSBCPGNhbGxlcj4KKysKKysgICAgbXkgJHBhY2thZ2UgPSAkVGVz dC0+Y2FsbGVyOworKyAgICBteSgkcGFjaywgJGZpbGUsICRsaW5lKSA9ICRUZXN0LT5jYWxsZXI7 CisrICAgIG15KCRwYWNrLCAkZmlsZSwgJGxpbmUpID0gJFRlc3QtPmNhbGxlcigkaGVpZ2h0KTsK KysKKytMaWtlIHRoZSBub3JtYWwgQzxjYWxsZXIoKT4sIGV4Y2VwdCBpdCByZXBvcnRzIGFjY29y ZGluZyB0byB5b3VyIEM8bGV2ZWwoKT4uCisrCisrQzwkaGVpZ2h0PiB3aWxsIGJlIGFkZGVkIHRv IHRoZSBDPGxldmVsKCk+LgorKworK0lmIEM8Y2FsbGVyKCk+IHdpbmRzIHVwIG9mZiB0aGUgdG9w IG9mIHRoZSBzdGFjayBpdCByZXBvcnQgdGhlIGhpZ2hlc3QgY29udGV4dC4KKysKKys9Y3V0Cisr Cisrc3ViIGNhbGxlciB7ICAgICMjIG5vIGNyaXRpYyAoU3Vicm91dGluZXM6OlByb2hpYml0QnVp bHRpbkhvbW9ueW1zKQorKyAgICBteSggJHNlbGYsICRoZWlnaHQgKSA9IEBfOworKyAgICAkaGVp Z2h0IHx8PSAwOworKworKyAgICBteSAkbGV2ZWwgPSAkc2VsZi0+bGV2ZWwgKyAkaGVpZ2h0ICsg MTsKKysgICAgbXkgQGNhbGxlcjsKKysgICAgZG8geworKyAgICAgICAgQGNhbGxlciA9IENPUkU6 OmNhbGxlciggJGxldmVsICk7CisrICAgICAgICAkbGV2ZWwtLTsKKysgICAgfSB1bnRpbCBAY2Fs bGVyOworKyAgICByZXR1cm4gd2FudGFycmF5ID8gQGNhbGxlciA6ICRjYWxsZXJbMF07CisrfQor KworKz1iYWNrCisrCisrPWN1dAorKworKz1iZWdpbiBfcHJpdmF0ZQorKworKz1vdmVyIDQKKysK Kys9aXRlbSBCPF9zYW5pdHlfY2hlY2s+CisrCisrICAkc2VsZi0+X3Nhbml0eV9jaGVjaygpOwor KworK1J1bnMgYSBidW5jaCBvZiBlbmQgb2YgdGVzdCBzYW5pdHkgY2hlY2tzIHRvIG1ha2Ugc3Vy ZSByZWFsaXR5IGNhbWUKKyt0aHJvdWdoIG9rLiAgSWYgYW55dGhpbmcgaXMgd3JvbmcgaXQgd2ls bCBkaWUgd2l0aCBhIGZhaXJseSBmcmllbmRseQorK2Vycm9yIG1lc3NhZ2UuCisrCisrPWN1dAor KworKyMnIworK3N1YiBfc2FuaXR5X2NoZWNrIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsKKysK KysgICAgJHNlbGYtPl93aG9hKCAkc2VsZi0+e0N1cnJfVGVzdH0gPCAwLCAnU2F5cyBoZXJlIHlv dSByYW4gYSBuZWdhdGl2ZSBudW1iZXIgb2YgdGVzdHMhJyApOworKyAgICAkc2VsZi0+X3dob2Eo ICRzZWxmLT57Q3Vycl9UZXN0fSAhPSBAeyAkc2VsZi0+e1Rlc3RfUmVzdWx0c30gfSwKKysgICAg ICAgICdTb21laG93IHlvdSBnb3QgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHJlc3VsdHMgdGhhbiB0 ZXN0cyByYW4hJyApOworKworKyAgICByZXR1cm47CisrfQorKworKz1pdGVtIEI8X3dob2E+Cisr CisrICAkc2VsZi0+X3dob2EoJGNoZWNrLCAkZGVzY3JpcHRpb24pOworKworK0Egc2FuaXR5IGNo ZWNrLCBzaW1pbGFyIHRvIEM8YXNzZXJ0KCk+LiAgSWYgdGhlIEM8JGNoZWNrPiBpcyB0cnVlLCBz b21ldGhpbmcKKytoYXMgZ29uZSBob3JyaWJseSB3cm9uZy4gIEl0IHdpbGwgZGllIHdpdGggdGhl IGdpdmVuIEM8JGRlc2NyaXB0aW9uPiBhbmQKKythIG5vdGUgdG8gY29udGFjdCB0aGUgYXV0aG9y LgorKworKz1jdXQKKysKKytzdWIgX3dob2EgeworKyAgICBteSggJHNlbGYsICRjaGVjaywgJGRl c2MgKSA9IEBfOworKyAgICBpZigkY2hlY2spIHsKKysgICAgICAgIGxvY2FsICRMZXZlbCA9ICRM ZXZlbCArIDE7CisrICAgICAgICAkc2VsZi0+Y3JvYWsoPDwiV0hPQSIpOworK1dIT0EhICAkZGVz YworK1RoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEgIFBsZWFzZSBjb250YWN0IHRoZSBhdXRob3Ig aW1tZWRpYXRlbHkhCisrV0hPQQorKyAgICB9CisrCisrICAgIHJldHVybjsKKyt9CisrCisrPWl0 ZW0gQjxfbXlfZXhpdD4KKysKKysgIF9teV9leGl0KCRleGl0X251bSk7CisrCisrUGVybCBzZWVt cyB0byBoYXZlIHNvbWUgdHJvdWJsZSB3aXRoIGV4aXRpbmcgaW5zaWRlIGFuIEM8RU5EPiBibG9j ay4KKys1LjYuMSBkb2VzIHNvbWUgb2RkIHRoaW5ncy4gIEluc3RlYWQsIHRoaXMgZnVuY3Rpb24g ZWRpdHMgQzwkPz4KKytkaXJlY3RseS4gIEl0IHNob3VsZCBCPG9ubHk+IGJlIGNhbGxlZCBmcm9t IGluc2lkZSBhbiBDPEVORD4gYmxvY2suCisrSXQgZG9lc24ndCBhY3R1YWxseSBleGl0LCB0aGF0 J3MgeW91ciBqb2IuCisrCisrPWN1dAorKworK3N1YiBfbXlfZXhpdCB7CisrICAgICQ/ID0gJF9b MF07ICAgICMjIG5vIGNyaXRpYyAoVmFyaWFibGVzOjpSZXF1aXJlTG9jYWxpemVkUHVuY3R1YXRp b25WYXJzKQorKworKyAgICByZXR1cm4gMTsKKyt9CisrCisrPWJhY2sKKysKKys9ZW5kIF9wcml2 YXRlCisrCisrPWN1dAorKworK3N1YiBfZW5kaW5nIHsKKysgICAgbXkgJHNlbGYgPSBzaGlmdDsK KysgICAgcmV0dXJuIGlmICRzZWxmLT5ub19lbmRpbmc7CisrICAgIHJldHVybiBpZiAkc2VsZi0+ e0VuZGluZ30rKzsKKysKKysgICAgbXkgJHJlYWxfZXhpdF9jb2RlID0gJD87CisrCisrICAgICMg RG9uJ3QgYm90aGVyIHdpdGggYW4gZW5kaW5nIGlmIHRoaXMgaXMgYSBmb3JrZWQgY29weS4gIE9u bHkgdGhlIHBhcmVudAorKyAgICAjIHNob3VsZCBkbyB0aGUgZW5kaW5nLgorKyAgICBpZiggJHNl bGYtPntPcmlnaW5hbF9QaWR9ICE9ICQkICkgeworKyAgICAgICAgcmV0dXJuOworKyAgICB9Cisr CisrICAgICMgUmFuIHRlc3RzIGJ1dCBuZXZlciBkZWNsYXJlZCBhIHBsYW4gb3IgaGl0IGRvbmVf dGVzdGluZworKyAgICBpZiggISRzZWxmLT57SGF2ZV9QbGFufSBhbmQgJHNlbGYtPntDdXJyX1Rl c3R9ICkgeworKyAgICAgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCk7CisrICAgICAgICAkc2VsZi0+ ZGlhZygiVGVzdHMgd2VyZSBydW4gYnV0IG5vIHBsYW4gd2FzIGRlY2xhcmVkIGFuZCBkb25lX3Rl c3RpbmcoKSB3YXMgbm90IHNlZW4uIik7CisrCisrICAgICAgICBpZigkcmVhbF9leGl0X2NvZGUp IHsKKysgICAgICAgICAgICAkc2VsZi0+ZGlhZyg8PCJGQUlMIik7CisrTG9va3MgbGlrZSB5b3Vy IHRlc3QgZXhpdGVkIHdpdGggJHJlYWxfZXhpdF9jb2RlIGp1c3QgYWZ0ZXIgJHNlbGYtPntDdXJy X1Rlc3R9LgorK0ZBSUwKKysgICAgICAgICAgICAkc2VsZi0+aXNfcGFzc2luZygwKTsKKysgICAg ICAgICAgICBfbXlfZXhpdCgkcmVhbF9leGl0X2NvZGUpICYmIHJldHVybjsKKysgICAgICAgIH0K KysKKysgICAgICAgICMgQnV0IGlmIHRoZSB0ZXN0cyByYW4sIGhhbmRsZSBleGl0IGNvZGUuCisr ICAgICAgICBteSAkdGVzdF9yZXN1bHRzID0gJHNlbGYtPntUZXN0X1Jlc3VsdHN9OworKyAgICAg ICAgaWYoQCR0ZXN0X3Jlc3VsdHMpIHsKKysgICAgICAgICAgICBteSAkbnVtX2ZhaWxlZCA9IGdy ZXAgISRfLT57J29rJ30sIEB7JHRlc3RfcmVzdWx0c31bIDAgLi4gJHNlbGYtPntDdXJyX1Rlc3R9 IC0gMSBdOworKyAgICAgICAgICAgIGlmICgkbnVtX2ZhaWxlZCA+IDApIHsKKysKKysgICAgICAg ICAgICAgICAgbXkgJGV4aXRfY29kZSA9ICRudW1fZmFpbGVkIDw9IDI1NCA/ICRudW1fZmFpbGVk IDogMjU0OworKyAgICAgICAgICAgICAgICBfbXlfZXhpdCgkZXhpdF9jb2RlKSAmJiByZXR1cm47 CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgX215X2V4aXQoMjU0KSAmJiBy ZXR1cm47CisrICAgIH0KKysKKysgICAgIyBFeGl0IGlmIHBsYW4oKSB3YXMgbmV2ZXIgY2FsbGVk LiAgVGhpcyBpcyBzbyAicmVxdWlyZSBUZXN0OjpTaW1wbGUiCisrICAgICMgZG9lc24ndCBwdWtl LgorKyAgICBpZiggISRzZWxmLT57SGF2ZV9QbGFufSApIHsKKysgICAgICAgIHJldHVybjsKKysg ICAgfQorKworKyAgICAjIERvbid0IGRvIGFuIGVuZGluZyBpZiB3ZSBiYWlsZWQgb3V0LgorKyAg ICBpZiggJHNlbGYtPntCYWlsZWRfT3V0fSApIHsKKysgICAgICAgICRzZWxmLT5pc19wYXNzaW5n KDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgICMgRmlndXJlIG91dCBpZiB3ZSBw YXNzZWQgb3IgZmFpbGVkIGFuZCBwcmludCBoZWxwZnVsIG1lc3NhZ2VzLgorKyAgICBteSAkdGVz dF9yZXN1bHRzID0gJHNlbGYtPntUZXN0X1Jlc3VsdHN9OworKyAgICBpZihAJHRlc3RfcmVzdWx0 cykgeworKyAgICAgICAgIyBUaGUgcGxhbj8gIFdlIGhhdmUgbm8gcGxhbi4KKysgICAgICAgIGlm KCAkc2VsZi0+e05vX1BsYW59ICkgeworKyAgICAgICAgICAgICRzZWxmLT5fb3V0cHV0X3BsYW4o JHNlbGYtPntDdXJyX1Rlc3R9KSB1bmxlc3MgJHNlbGYtPm5vX2hlYWRlcjsKKysgICAgICAgICAg ICAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSA9ICRzZWxmLT57Q3Vycl9UZXN0fTsKKysgICAgICAg IH0KKysKKysgICAgICAgICMgQXV0by1leHRlbmRlZCBhcnJheXMgYW5kIGVsZW1lbnRzIHdoaWNo IGFyZW4ndCBleHBsaWNpdGx5CisrICAgICAgICAjIGZpbGxlZCBpbiB3aXRoIGEgc2hhcmVkIHJl ZmVyZW5jZSB3aWxsIHB1a2UgdW5kZXIgNS44LjAKKysgICAgICAgICMgaXRocmVhZHMuICBTbyB3 ZSBoYXZlIHRvIGZpbGwgdGhlbSBpbiBieSBoYW5kLiA6KAorKyAgICAgICAgbXkgJGVtcHR5X3Jl c3VsdCA9ICZzaGFyZSgge30gKTsKKysgICAgICAgIGZvciBteSAkaWR4ICggMCAuLiAkc2VsZi0+ e0V4cGVjdGVkX1Rlc3RzfSAtIDEgKSB7CisrICAgICAgICAgICAgJHRlc3RfcmVzdWx0cy0+WyRp ZHhdID0gJGVtcHR5X3Jlc3VsdAorKyAgICAgICAgICAgICAgdW5sZXNzIGRlZmluZWQgJHRlc3Rf cmVzdWx0cy0+WyRpZHhdOworKyAgICAgICAgfQorKworKyAgICAgICAgbXkgJG51bV9mYWlsZWQg PSBncmVwICEkXy0+eydvayd9LCBAeyR0ZXN0X3Jlc3VsdHN9WyAwIC4uICRzZWxmLT57Q3Vycl9U ZXN0fSAtIDEgXTsKKysKKysgICAgICAgIG15ICRudW1fZXh0cmEgPSAkc2VsZi0+e0N1cnJfVGVz dH0gLSAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfTsKKysKKysgICAgICAgIGlmKCAkbnVtX2V4dHJh ICE9IDAgKSB7CisrICAgICAgICAgICAgbXkgJHMgPSAkc2VsZi0+e0V4cGVjdGVkX1Rlc3RzfSA9 PSAxID8gJycgOiAncyc7CisrICAgICAgICAgICAgJHNlbGYtPmRpYWcoPDwiRkFJTCIpOworK0xv b2tzIGxpa2UgeW91IHBsYW5uZWQgJHNlbGYtPntFeHBlY3RlZF9UZXN0c30gdGVzdCRzIGJ1dCBy YW4gJHNlbGYtPntDdXJyX1Rlc3R9LgorK0ZBSUwKKysgICAgICAgICAgICAkc2VsZi0+aXNfcGFz c2luZygwKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmKCRudW1fZmFpbGVkKSB7CisrICAg ICAgICAgICAgbXkgJG51bV90ZXN0cyA9ICRzZWxmLT57Q3Vycl9UZXN0fTsKKysgICAgICAgICAg ICBteSAkcyA9ICRudW1fZmFpbGVkID09IDEgPyAnJyA6ICdzJzsKKysKKysgICAgICAgICAgICBt eSAkcXVhbGlmaWVyID0gJG51bV9leHRyYSA9PSAwID8gJycgOiAnIHJ1bic7CisrCisrICAgICAg ICAgICAgJHNlbGYtPmRpYWcoPDwiRkFJTCIpOworK0xvb2tzIGxpa2UgeW91IGZhaWxlZCAkbnVt X2ZhaWxlZCB0ZXN0JHMgb2YgJG51bV90ZXN0cyRxdWFsaWZpZXIuCisrRkFJTAorKyAgICAgICAg ICAgICRzZWxmLT5pc19wYXNzaW5nKDApOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYoJHJl YWxfZXhpdF9jb2RlKSB7CisrICAgICAgICAgICAgJHNlbGYtPmRpYWcoPDwiRkFJTCIpOworK0xv b2tzIGxpa2UgeW91ciB0ZXN0IGV4aXRlZCB3aXRoICRyZWFsX2V4aXRfY29kZSBqdXN0IGFmdGVy ICRzZWxmLT57Q3Vycl9UZXN0fS4KKytGQUlMCisrICAgICAgICAgICAgJHNlbGYtPmlzX3Bhc3Np bmcoMCk7CisrICAgICAgICAgICAgX215X2V4aXQoJHJlYWxfZXhpdF9jb2RlKSAmJiByZXR1cm47 CisrICAgICAgICB9CisrCisrICAgICAgICBteSAkZXhpdF9jb2RlOworKyAgICAgICAgaWYoJG51 bV9mYWlsZWQpIHsKKysgICAgICAgICAgICAkZXhpdF9jb2RlID0gJG51bV9mYWlsZWQgPD0gMjU0 ID8gJG51bV9mYWlsZWQgOiAyNTQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNpZiggJG51bV9l eHRyYSAhPSAwICkgeworKyAgICAgICAgICAgICRleGl0X2NvZGUgPSAyNTU7CisrICAgICAgICB9 CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAkZXhpdF9jb2RlID0gMDsKKysgICAgICAg IH0KKysKKysgICAgICAgIF9teV9leGl0KCRleGl0X2NvZGUpICYmIHJldHVybjsKKysgICAgfQor KyAgICBlbHNpZiggJHNlbGYtPntTa2lwX0FsbH0gKSB7CisrICAgICAgICBfbXlfZXhpdCgwKSAm JiByZXR1cm47CisrICAgIH0KKysgICAgZWxzaWYoJHJlYWxfZXhpdF9jb2RlKSB7CisrICAgICAg ICAkc2VsZi0+ZGlhZyg8PCJGQUlMIik7CisrTG9va3MgbGlrZSB5b3VyIHRlc3QgZXhpdGVkIHdp dGggJHJlYWxfZXhpdF9jb2RlIGJlZm9yZSBpdCBjb3VsZCBvdXRwdXQgYW55dGhpbmcuCisrRkFJ TAorKyAgICAgICAgJHNlbGYtPmlzX3Bhc3NpbmcoMCk7CisrICAgICAgICBfbXlfZXhpdCgkcmVh bF9leGl0X2NvZGUpICYmIHJldHVybjsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICRz ZWxmLT5kaWFnKCJObyB0ZXN0cyBydW4hXG4iKTsKKysgICAgICAgICRzZWxmLT5pc19wYXNzaW5n KDApOworKyAgICAgICAgX215X2V4aXQoMjU1KSAmJiByZXR1cm47CisrICAgIH0KKysKKysgICAg JHNlbGYtPmlzX3Bhc3NpbmcoMCk7CisrICAgICRzZWxmLT5fd2hvYSggMSwgIldlIGZlbGwgb2Zm IHRoZSBlbmQgb2YgX2VuZGluZygpIiApOworK30KKysKKytFTkQgeworKyAgICAkVGVzdC0+X2Vu ZGluZyBpZiBkZWZpbmVkICRUZXN0OworK30KKysKKys9aGVhZDEgRVhJVCBDT0RFUworKworK0lm IGFsbCB5b3VyIHRlc3RzIHBhc3NlZCwgVGVzdDo6QnVpbGRlciB3aWxsIGV4aXQgd2l0aCB6ZXJv ICh3aGljaCBpcworK25vcm1hbCkuICBJZiBhbnl0aGluZyBmYWlsZWQgaXQgd2lsbCBleGl0IHdp dGggaG93IG1hbnkgZmFpbGVkLiAgSWYKKyt5b3UgcnVuIGxlc3MgKG9yIG1vcmUpIHRlc3RzIHRo YW4geW91IHBsYW5uZWQsIHRoZSBtaXNzaW5nIChvciBleHRyYXMpCisrd2lsbCBiZSBjb25zaWRl cmVkIGZhaWx1cmVzLiAgSWYgbm8gdGVzdHMgd2VyZSBldmVyIHJ1biBUZXN0OjpCdWlsZGVyCisr d2lsbCB0aHJvdyBhIHdhcm5pbmcgYW5kIGV4aXQgd2l0aCAyNTUuICBJZiB0aGUgdGVzdCBkaWVk LCBldmVuIGFmdGVyCisraGF2aW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYWxsIGl0cyB0ZXN0 cywgaXQgd2lsbCBzdGlsbCBiZQorK2NvbnNpZGVyZWQgYSBmYWlsdXJlIGFuZCB3aWxsIGV4aXQg d2l0aCAyNTUuCisrCisrU28gdGhlIGV4aXQgY29kZXMgYXJlLi4uCisrCisrICAgIDAgICAgICAg ICAgICAgICAgICAgYWxsIHRlc3RzIHN1Y2Nlc3NmdWwKKysgICAgMjU1ICAgICAgICAgICAgICAg ICB0ZXN0IGRpZWQgb3IgYWxsIHBhc3NlZCBidXQgd3JvbmcgIyBvZiB0ZXN0cyBydW4KKysgICAg YW55IG90aGVyIG51bWJlciAgICBob3cgbWFueSBmYWlsZWQgKGluY2x1ZGluZyBtaXNzaW5nIG9y IGV4dHJhcykKKysKKytJZiB5b3UgZmFpbCBtb3JlIHRoYW4gMjU0IHRlc3RzLCBpdCB3aWxsIGJl IHJlcG9ydGVkIGFzIDI1NC4KKysKKys9aGVhZDEgVEhSRUFEUworKworK0luIHBlcmwgNS44LjEg YW5kIGxhdGVyLCBUZXN0OjpCdWlsZGVyIGlzIHRocmVhZC1zYWZlLiAgVGhlIHRlc3QKKytudW1i ZXIgaXMgc2hhcmVkIGFtb25nc3QgYWxsIHRocmVhZHMuICBUaGlzIG1lYW5zIGlmIG9uZSB0aHJl YWQgc2V0cworK3RoZSB0ZXN0IG51bWJlciB1c2luZyBDPGN1cnJlbnRfdGVzdCgpPiB0aGV5IHdp bGwgYWxsIGJlIGVmZmVjdGVkLgorKworK1doaWxlIHZlcnNpb25zIGVhcmxpZXIgdGhhbiA1Ljgu MSBoYWQgdGhyZWFkcyB0aGV5IGNvbnRhaW4gdG9vIG1hbnkKKytidWdzIHRvIHN1cHBvcnQuCisr CisrVGVzdDo6QnVpbGRlciBpcyBvbmx5IHRocmVhZC1hd2FyZSBpZiB0aHJlYWRzLnBtIGlzIGxv YWRlZCBJPGJlZm9yZT4KKytUZXN0OjpCdWlsZGVyLgorKworKz1oZWFkMSBNRU1PUlkKKysKKytB biBpbmZvcm1hdGl2ZSBoYXNoLCBhY2Nlc3NpYmxlIHZpYSBDPDxkZXRhaWxzKCk+PiwgaXMgc3Rv cmVkIGZvciBlYWNoCisrdGVzdCB5b3UgcGVyZm9ybS4gIFNvIG1lbW9yeSB1c2FnZSB3aWxsIHNj YWxlIGxpbmVhcmx5IHdpdGggZWFjaCB0ZXN0CisrcnVuLiBBbHRob3VnaCB0aGlzIGlzIG5vdCBh IHByb2JsZW0gZm9yIG1vc3QgdGVzdCBzdWl0ZXMsIGl0IGNhbgorK2JlY29tZSBhbiBpc3N1ZSBp ZiB5b3UgZG8gbGFyZ2UgKGh1bmRyZWQgdGhvdXNhbmRzIHRvIG1pbGxpb24pCisrY29tYmluYXRv cmljcyB0ZXN0cyBpbiB0aGUgc2FtZSBydW4uCisrCisrSW4gc3VjaCBjYXNlcywgeW91IGFyZSBh ZHZpc2VkIHRvIGVpdGhlciBzcGxpdCB0aGUgdGVzdCBmaWxlIGludG8gc21hbGxlcgorK29uZXMs IG9yIHVzZSBhIHJldmVyc2UgYXBwcm9hY2gsIGRvaW5nICJub3JtYWwiIChjb2RlKSBjb21wYXJl cyBhbmQKKyt0cmlnZ2VyaW5nIGZhaWwoKSBzaG91bGQgYW55dGhpbmcgZ28gdW5leHBlY3RlZC4K KysKKytGdXR1cmUgdmVyc2lvbnMgb2YgVGVzdDo6QnVpbGRlciB3aWxsIGhhdmUgYSB3YXkgdG8g dHVybiBoaXN0b3J5IG9mZi4KKysKKysKKys9aGVhZDEgRVhBTVBMRVMKKysKKytDUEFOIGNhbiBw cm92aWRlIHRoZSBiZXN0IGV4YW1wbGVzLiAgVGVzdDo6U2ltcGxlLCBUZXN0OjpNb3JlLAorK1Rl c3Q6OkV4Y2VwdGlvbiBhbmQgVGVzdDo6RGlmZmVyZW5jZXMgYWxsIHVzZSBUZXN0OjpCdWlsZGVy LgorKworKz1oZWFkMSBTRUUgQUxTTworKworK1Rlc3Q6OlNpbXBsZSwgVGVzdDo6TW9yZSwgVGVz dDo6SGFybmVzcworKworKz1oZWFkMSBBVVRIT1JTCisrCisrT3JpZ2luYWwgY29kZSBieSBjaHJv bWF0aWMsIG1haW50YWluZWQgYnkgTWljaGFlbCBHIFNjaHdlcm4KKytFPGx0PnNjaHdlcm5AcG9i b3guY29tRTxndD4KKysKKys9aGVhZDEgTUFJTlRBSU5FUlMKKysKKys9b3ZlciA0CisrCisrPWl0 ZW0gQ2hhZCBHcmFudW0gRTxsdD5leG9kaXN0QGNwYW4ub3JnRTxndD4KKysKKys9YmFjaworKwor Kz1oZWFkMSBDT1BZUklHSFQKKysKKytDb3B5cmlnaHQgMjAwMi0yMDA4IGJ5IGNocm9tYXRpYyBF PGx0PmNocm9tYXRpY0B3Z3oub3JnRTxndD4gYW5kCisrICAgICAgICAgICAgICAgICAgICAgICBN aWNoYWVsIEcgU2Nod2VybiBFPGx0PnNjaHdlcm5AcG9ib3guY29tRTxndD4uCisrCisrVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor K21vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KKysKKytTZWUg RjxodHRwOi8vd3d3LnBlcmwuY29tL3BlcmwvbWlzYy9BcnRpc3RpYy5odG1sPgorKworKz1jdXQK KysKKysxOworKworZGlmZiAtTmF1ciBvbGQvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvTW9y ZS5wbSBuZXcvdGVzdF9zaW1wbGVfcGF0Y2gvbGliL1Rlc3QvTW9yZS5wbQorLS0tIG9sZC90ZXN0 X3NpbXBsZV9wYXRjaC9saWIvVGVzdC9Nb3JlLnBtCTE5NzAtMDEtMDEgMTA6MDA6MDAuMDAwMDAw MDAwICsxMDAwCisrKysgbmV3L3Rlc3Rfc2ltcGxlX3BhdGNoL2xpYi9UZXN0L01vcmUucG0JMjAx NC0wMy0yNiAyMTo0ODoxMS41MTQyNTc2NTYgKzExMDAKK0BAIC0wLDAgKzEsMTkyMSBAQAorK3Bh Y2thZ2UgVGVzdDo6TW9yZTsKKysKKyt1c2UgNS4wMDY7CisrdXNlIHN0cmljdDsKKyt1c2Ugd2Fy bmluZ3M7CisrCisrIy0tLS0gcGVybGNyaXRpYyBleGVtcHRpb25zLiAtLS0tIworKworKyMgV2Ug dXNlIGEgbG90IG9mIHN1YnJvdXRpbmUgcHJvdG90eXBlcworKyMjIG5vIGNyaXRpYyAoU3Vicm91 dGluZXM6OlByb2hpYml0U3Vicm91dGluZVByb3RvdHlwZXMpCisrCisrIyBDYW4ndCB1c2UgQ2Fy cCBiZWNhdXNlIGl0IG1pZ2h0IGNhdXNlIHVzZV9vaygpIHRvIGFjY2lkZW50YWxseSBzdWNjZWVk CisrIyBldmVuIHRob3VnaCB0aGUgbW9kdWxlIGJlaW5nIHVzZWQgZm9yZ290IHRvIHVzZSBDYXJw LiAgWWVzLCB0aGlzCisrIyBhY3R1YWxseSBoYXBwZW5lZC4KKytzdWIgX2NhcnAgeworKyAgICBt eSggJGZpbGUsICRsaW5lICkgPSAoIGNhbGxlcigxKSApWyAxLCAyIF07CisrICAgIHJldHVybiB3 YXJuIEBfLCAiIGF0ICRmaWxlIGxpbmUgJGxpbmVcbiI7CisrfQorKworK291ciAkVkVSU0lPTiA9 ICcxLjAwMTAwMyc7CisrJFZFUlNJT04gPSBldmFsICRWRVJTSU9OOyAgICAjIyBubyBjcml0aWMg KEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hpYml0U3RyaW5neUV2YWwpCisrCisrdXNlIFRlc3Q6OkJ1 aWxkZXI6Ok1vZHVsZSAwLjk5OworK291ciBASVNBICAgID0gcXcoVGVzdDo6QnVpbGRlcjo6TW9k dWxlKTsKKytvdXIgQEVYUE9SVCA9IHF3KG9rIHVzZV9vayByZXF1aXJlX29rCisrICBpcyBpc250 IGxpa2UgdW5saWtlIGlzX2RlZXBseQorKyAgY21wX29rCisrICBza2lwIHRvZG8gdG9kb19za2lw CisrICBwYXNzIGZhaWwKKysgIGVxX2FycmF5IGVxX2hhc2ggZXFfc2V0CisrICAkVE9ETworKyAg cGxhbgorKyAgZG9uZV90ZXN0aW5nCisrICBjYW5fb2sgaXNhX29rIG5ld19vaworKyAgZGlhZyBu b3RlIGV4cGxhaW4KKysgIHN1YnRlc3QKKysgIEJBSUxfT1VUCisrKTsKKysKKys9aGVhZDEgTkFN RQorKworK1Rlc3Q6Ok1vcmUgLSB5ZXQgYW5vdGhlciBmcmFtZXdvcmsgZm9yIHdyaXRpbmcgdGVz dCBzY3JpcHRzCisrCisrPWhlYWQxIFNZTk9QU0lTCisrCisrICB1c2UgVGVzdDo6TW9yZSB0ZXN0 cyA9PiAyMzsKKysgICMgb3IKKysgIHVzZSBUZXN0OjpNb3JlIHNraXBfYWxsID0+ICRyZWFzb247 CisrICAjIG9yCisrICB1c2UgVGVzdDo6TW9yZTsgICAjIHNlZSBkb25lX3Rlc3RpbmcoKQorKwor KyAgcmVxdWlyZV9vayggJ1NvbWU6Ok1vZHVsZScgKTsKKysKKysgICMgVmFyaW91cyB3YXlzIHRv IHNheSAib2siCisrICBvaygkZ290IGVxICRleHBlY3RlZCwgJHRlc3RfbmFtZSk7CisrCisrICBp cyAgKCRnb3QsICRleHBlY3RlZCwgJHRlc3RfbmFtZSk7CisrICBpc250KCRnb3QsICRleHBlY3Rl ZCwgJHRlc3RfbmFtZSk7CisrCisrICAjIFJhdGhlciB0aGFuIHByaW50IFNUREVSUiAiIyBoZXJl J3Mgd2hhdCB3ZW50IHdyb25nXG4iCisrICBkaWFnKCJoZXJlJ3Mgd2hhdCB3ZW50IHdyb25nIik7 CisrCisrICBsaWtlICAoJGdvdCwgcXIvZXhwZWN0ZWQvLCAkdGVzdF9uYW1lKTsKKysgIHVubGlr ZSgkZ290LCBxci9leHBlY3RlZC8sICR0ZXN0X25hbWUpOworKworKyAgY21wX29rKCRnb3QsICc9 PScsICRleHBlY3RlZCwgJHRlc3RfbmFtZSk7CisrCisrICBpc19kZWVwbHkoJGdvdF9jb21wbGV4 X3N0cnVjdHVyZSwgJGV4cGVjdGVkX2NvbXBsZXhfc3RydWN0dXJlLCAkdGVzdF9uYW1lKTsKKysK KysgIFNLSVA6IHsKKysgICAgICBza2lwICR3aHksICRob3dfbWFueSB1bmxlc3MgJGhhdmVfc29t ZV9mZWF0dXJlOworKworKyAgICAgIG9rKCBmb28oKSwgICAgICAgJHRlc3RfbmFtZSApOworKyAg ICAgIGlzKCBmb28oNDIpLCAyMywgJHRlc3RfbmFtZSApOworKyAgfTsKKysKKysgIFRPRE86IHsK KysgICAgICBsb2NhbCAkVE9ETyA9ICR3aHk7CisrCisrICAgICAgb2soIGZvbygpLCAgICAgICAk dGVzdF9uYW1lICk7CisrICAgICAgaXMoIGZvbyg0MiksIDIzLCAkdGVzdF9uYW1lICk7CisrICB9 OworKworKyAgY2FuX29rKCRtb2R1bGUsIEBtZXRob2RzKTsKKysgIGlzYV9vaygkb2JqZWN0LCAk Y2xhc3MpOworKworKyAgcGFzcygkdGVzdF9uYW1lKTsKKysgIGZhaWwoJHRlc3RfbmFtZSk7Cisr CisrICBCQUlMX09VVCgkd2h5KTsKKysKKysgICMgVU5JTVBMRU1FTlRFRCEhIQorKyAgbXkgQHN0 YXR1cyA9IFRlc3Q6Ok1vcmU6OnN0YXR1czsKKysKKysKKys9aGVhZDEgREVTQ1JJUFRJT04KKysK KytCPFNUT1AhPiBJZiB5b3UncmUganVzdCBnZXR0aW5nIHN0YXJ0ZWQgd3JpdGluZyB0ZXN0cywg aGF2ZSBhIGxvb2sgYXQKKytMPFRlc3Q6OlNpbXBsZT4gZmlyc3QuICBUaGlzIGlzIGEgZHJvcCBp biByZXBsYWNlbWVudCBmb3IgVGVzdDo6U2ltcGxlCisrd2hpY2ggeW91IGNhbiBzd2l0Y2ggdG8g b25jZSB5b3UgZ2V0IHRoZSBoYW5nIG9mIGJhc2ljIHRlc3RpbmcuCisrCisrVGhlIHB1cnBvc2Ug b2YgdGhpcyBtb2R1bGUgaXMgdG8gcHJvdmlkZSBhIHdpZGUgcmFuZ2Ugb2YgdGVzdGluZworK3V0 aWxpdGllcy4gIFZhcmlvdXMgd2F5cyB0byBzYXkgIm9rIiB3aXRoIGJldHRlciBkaWFnbm9zdGlj cywKKytmYWNpbGl0aWVzIHRvIHNraXAgdGVzdHMsIHRlc3QgZnV0dXJlIGZlYXR1cmVzIGFuZCBj b21wYXJlIGNvbXBsaWNhdGVkCisrZGF0YSBzdHJ1Y3R1cmVzLiAgV2hpbGUgeW91IGNhbiBkbyBh bG1vc3QgYW55dGhpbmcgd2l0aCBhIHNpbXBsZQorK0M8b2soKT4gZnVuY3Rpb24sIGl0IGRvZXNu J3QgcHJvdmlkZSBnb29kIGRpYWdub3N0aWMgb3V0cHV0LgorKworKworKz1oZWFkMiBJIGxvdmUg aXQgd2hlbiBhIHBsYW4gY29tZXMgdG9nZXRoZXIKKysKKytCZWZvcmUgYW55dGhpbmcgZWxzZSwg eW91IG5lZWQgYSB0ZXN0aW5nIHBsYW4uICBUaGlzIGJhc2ljYWxseSBkZWNsYXJlcworK2hvdyBt YW55IHRlc3RzIHlvdXIgc2NyaXB0IGlzIGdvaW5nIHRvIHJ1biB0byBwcm90ZWN0IGFnYWluc3Qg cHJlbWF0dXJlCisrZmFpbHVyZS4KKysKKytUaGUgcHJlZmVycmVkIHdheSB0byBkbyB0aGlzIGlz IHRvIGRlY2xhcmUgYSBwbGFuIHdoZW4geW91IEM8dXNlIFRlc3Q6Ok1vcmU+LgorKworKyAgdXNl IFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjM7CisrCisrVGhlcmUgYXJlIGNhc2VzIHdoZW4geW91IHdp bGwgbm90IGtub3cgYmVmb3JlaGFuZCBob3cgbWFueSB0ZXN0cyB5b3VyCisrc2NyaXB0IGlzIGdv aW5nIHRvIHJ1bi4gIEluIHRoaXMgY2FzZSwgeW91IGNhbiBkZWNsYXJlIHlvdXIgdGVzdHMgYXQK Kyt0aGUgZW5kLgorKworKyAgdXNlIFRlc3Q6Ok1vcmU7CisrCisrICAuLi4gcnVuIHlvdXIgdGVz dHMgLi4uCisrCisrICBkb25lX3Rlc3RpbmcoICRudW1iZXJfb2ZfdGVzdHNfcnVuICk7CisrCisr U29tZXRpbWVzIHlvdSByZWFsbHkgZG9uJ3Qga25vdyBob3cgbWFueSB0ZXN0cyB3ZXJlIHJ1biwg b3IgaXQncyB0b28KKytkaWZmaWN1bHQgdG8gY2FsY3VsYXRlLiAgSW4gd2hpY2ggY2FzZSB5b3Ug Y2FuIGxlYXZlIG9mZgorKyRudW1iZXJfb2ZfdGVzdHNfcnVuLgorKworK0luIHNvbWUgY2FzZXMs IHlvdSdsbCB3YW50IHRvIGNvbXBsZXRlbHkgc2tpcCBhbiBlbnRpcmUgdGVzdGluZyBzY3JpcHQu CisrCisrICB1c2UgVGVzdDo6TW9yZSBza2lwX2FsbCA9PiAkc2tpcF9yZWFzb247CisrCisrWW91 ciBzY3JpcHQgd2lsbCBkZWNsYXJlIGEgc2tpcCB3aXRoIHRoZSByZWFzb24gd2h5IHlvdSBza2lw cGVkIGFuZAorK2V4aXQgaW1tZWRpYXRlbHkgd2l0aCBhIHplcm8gKHN1Y2Nlc3MpLiAgU2VlIEw8 VGVzdDo6SGFybmVzcz4gZm9yCisrZGV0YWlscy4KKysKKytJZiB5b3Ugd2FudCB0byBjb250cm9s IHdoYXQgZnVuY3Rpb25zIFRlc3Q6Ok1vcmUgd2lsbCBleHBvcnQsIHlvdQorK2hhdmUgdG8gdXNl IHRoZSAnaW1wb3J0JyBvcHRpb24uICBGb3IgZXhhbXBsZSwgdG8gaW1wb3J0IGV2ZXJ5dGhpbmcK KytidXQgJ2ZhaWwnLCB5b3UnZCBkbzoKKysKKysgIHVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDIz LCBpbXBvcnQgPT4gWychZmFpbCddOworKworK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRo ZSBwbGFuKCkgZnVuY3Rpb24uICBVc2VmdWwgZm9yIHdoZW4geW91CisraGF2ZSB0byBjYWxjdWxh dGUgdGhlIG51bWJlciBvZiB0ZXN0cy4KKysKKysgIHVzZSBUZXN0OjpNb3JlOworKyAgcGxhbiB0 ZXN0cyA9PiBrZXlzICVTdHVmZiAqIDM7CisrCisrb3IgZm9yIGRlY2lkaW5nIGJldHdlZW4gcnVu bmluZyB0aGUgdGVzdHMgYXQgYWxsOgorKworKyAgdXNlIFRlc3Q6Ok1vcmU7CisrICBpZiggJF5P IGVxICdNYWNPUycgKSB7CisrICAgICAgcGxhbiBza2lwX2FsbCA9PiAnVGVzdCBpcnJlbGV2YW50 IG9uIE1hY09TJzsKKysgIH0KKysgIGVsc2UgeworKyAgICAgIHBsYW4gdGVzdHMgPT4gNDI7Cisr ICB9CisrCisrPWN1dAorKworK3N1YiBwbGFuIHsKKysgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+ YnVpbGRlcjsKKysKKysgICAgcmV0dXJuICR0Yi0+cGxhbihAXyk7CisrfQorKworKyMgVGhpcyBp bXBsZW1lbnRzICJ1c2UgVGVzdDo6TW9yZSAnbm9fZGlhZyciIGJ1dCB0aGUgYmVoYXZpb3IgaXMK KysjIGRlcHJlY2F0ZWQuCisrc3ViIGltcG9ydF9leHRyYSB7CisrICAgIG15ICRjbGFzcyA9IHNo aWZ0OworKyAgICBteSAkbGlzdCAgPSBzaGlmdDsKKysKKysgICAgbXkgQG90aGVyID0gKCk7Cisr ICAgIG15ICRpZHggICA9IDA7CisrICAgIHdoaWxlKCAkaWR4IDw9ICQjeyRsaXN0fSApIHsKKysg ICAgICAgIG15ICRpdGVtID0gJGxpc3QtPlskaWR4XTsKKysKKysgICAgICAgIGlmKCBkZWZpbmVk ICRpdGVtIGFuZCAkaXRlbSBlcSAnbm9fZGlhZycgKSB7CisrICAgICAgICAgICAgJGNsYXNzLT5i dWlsZGVyLT5ub19kaWFnKDEpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAg ICAgICAgcHVzaCBAb3RoZXIsICRpdGVtOworKyAgICAgICAgfQorKworKyAgICAgICAgJGlkeCsr OworKyAgICB9CisrCisrICAgIEAkbGlzdCA9IEBvdGhlcjsKKysKKysgICAgcmV0dXJuOworK30K KysKKys9b3ZlciA0CisrCisrPWl0ZW0gQjxkb25lX3Rlc3Rpbmc+CisrCisrICAgIGRvbmVfdGVz dGluZygpOworKyAgICBkb25lX3Rlc3RpbmcoJG51bWJlcl9vZl90ZXN0cyk7CisrCisrSWYgeW91 IGRvbid0IGtub3cgaG93IG1hbnkgdGVzdHMgeW91J3JlIGdvaW5nIHRvIHJ1biwgeW91IGNhbiBp c3N1ZQorK3RoZSBwbGFuIHdoZW4geW91J3JlIGRvbmUgcnVubmluZyB0ZXN0cy4KKysKKyskbnVt YmVyX29mX3Rlc3RzIGlzIHRoZSBzYW1lIGFzIHBsYW4oKSwgaXQncyB0aGUgbnVtYmVyIG9mIHRl c3RzIHlvdQorK2V4cGVjdGVkIHRvIHJ1bi4gIFlvdSBjYW4gb21pdCB0aGlzLCBpbiB3aGljaCBj YXNlIHRoZSBudW1iZXIgb2YgdGVzdHMKKyt5b3UgcmFuIGRvZXNuJ3QgbWF0dGVyLCBqdXN0IHRo ZSBmYWN0IHRoYXQgeW91ciB0ZXN0cyByYW4gdG8KKytjb25jbHVzaW9uLgorKworK1RoaXMgaXMg c2FmZXIgdGhhbiBhbmQgcmVwbGFjZXMgdGhlICJub19wbGFuIiBwbGFuLgorKworKz1iYWNrCisr CisrPWN1dAorKworK3N1YiBkb25lX3Rlc3RpbmcgeworKyAgICBteSAkdGIgPSBUZXN0OjpNb3Jl LT5idWlsZGVyOworKyAgICAkdGItPmRvbmVfdGVzdGluZyhAXyk7CisrfQorKworKz1oZWFkMiBU ZXN0IG5hbWVzCisrCisrQnkgY29udmVudGlvbiwgZWFjaCB0ZXN0IGlzIGFzc2lnbmVkIGEgbnVt YmVyIGluIG9yZGVyLiAgVGhpcyBpcworK2xhcmdlbHkgZG9uZSBhdXRvbWF0aWNhbGx5IGZvciB5 b3UuICBIb3dldmVyLCBpdCdzIG9mdGVuIHZlcnkgdXNlZnVsIHRvCisrYXNzaWduIGEgbmFtZSB0 byBlYWNoIHRlc3QuICBXaGljaCB3b3VsZCB5b3UgcmF0aGVyIHNlZToKKysKKysgIG9rIDQKKysg IG5vdCBvayA1CisrICBvayA2CisrCisrb3IKKysKKysgIG9rIDQgLSBiYXNpYyBtdWx0aS12YXJp YWJsZQorKyAgbm90IG9rIDUgLSBzaW1wbGUgZXhwb25lbnRpYWwKKysgIG9rIDYgLSBmb3JjZSA9 PSBtYXNzICogYWNjZWxlcmF0aW9uCisrCisrVGhlIGxhdGVyIGdpdmVzIHlvdSBzb21lIGlkZWEg b2Ygd2hhdCBmYWlsZWQuICBJdCBhbHNvIG1ha2VzIGl0IGVhc2llcgorK3RvIGZpbmQgdGhlIHRl c3QgaW4geW91ciBzY3JpcHQsIHNpbXBseSBzZWFyY2ggZm9yICJzaW1wbGUKKytleHBvbmVudGlh bCIuCisrCisrQWxsIHRlc3QgZnVuY3Rpb25zIHRha2UgYSBuYW1lIGFyZ3VtZW50LiAgSXQncyBv cHRpb25hbCwgYnV0IGhpZ2hseQorK3N1Z2dlc3RlZCB0aGF0IHlvdSB1c2UgaXQuCisrCisrPWhl YWQyIEknbSBvaywgeW91J3JlIG5vdCBvay4KKysKKytUaGUgYmFzaWMgcHVycG9zZSBvZiB0aGlz IG1vZHVsZSBpcyB0byBwcmludCBvdXQgZWl0aGVyICJvayAjIiBvciAibm90Cisrb2sgIyIgZGVw ZW5kaW5nIG9uIGlmIGEgZ2l2ZW4gdGVzdCBzdWNjZWVkZWQgb3IgZmFpbGVkLiAgRXZlcnl0aGlu ZworK2Vsc2UgaXMganVzdCBncmF2eS4KKysKKytBbGwgb2YgdGhlIGZvbGxvd2luZyBwcmludCAi b2siIG9yICJub3Qgb2siIGRlcGVuZGluZyBvbiBpZiB0aGUgdGVzdAorK3N1Y2NlZWRlZCBvciBm YWlsZWQuICBUaGV5IGFsbCBhbHNvIHJldHVybiB0cnVlIG9yIGZhbHNlLAorK3Jlc3BlY3RpdmVs eS4KKysKKys9b3ZlciA0CisrCisrPWl0ZW0gQjxvaz4KKysKKysgIG9rKCRnb3QgZXEgJGV4cGVj dGVkLCAkdGVzdF9uYW1lKTsKKysKKytUaGlzIHNpbXBseSBldmFsdWF0ZXMgYW55IGV4cHJlc3Np b24gKEM8JGdvdCBlcSAkZXhwZWN0ZWQ+IGlzIGp1c3QgYQorK3NpbXBsZSBleGFtcGxlKSBhbmQg dXNlcyB0aGF0IHRvIGRldGVybWluZSBpZiB0aGUgdGVzdCBzdWNjZWVkZWQgb3IKKytmYWlsZWQu ICBBIHRydWUgZXhwcmVzc2lvbiBwYXNzZXMsIGEgZmFsc2Ugb25lIGZhaWxzLiAgVmVyeSBzaW1w bGUuCisrCisrRm9yIGV4YW1wbGU6CisrCisrICAgIG9rKCAkZXhwezl9ID09IDgxLCAgICAgICAg ICAgICAgICAgICAnc2ltcGxlIGV4cG9uZW50aWFsJyApOworKyAgICBvayggRmlsbS0+Y2FuKCdk Yl9NYWluJyksICAgICAgICAgICAgJ3NldF9kYigpJyApOworKyAgICBvayggJHAtPnRlc3RzID09 IDQsICAgICAgICAgICAgICAgICAgJ3NhdyB0ZXN0cycgKTsKKysgICAgb2soICFncmVwKCFkZWZp bmVkICRfLCBAaXRlbXMpLCAgICAgICdhbGwgaXRlbXMgZGVmaW5lZCcgKTsKKysKKysoTW5lbW9u aWM6ICAiVGhpcyBpcyBvay4iKQorKworKyR0ZXN0X25hbWUgaXMgYSB2ZXJ5IHNob3J0IGRlc2Ny aXB0aW9uIG9mIHRoZSB0ZXN0IHRoYXQgd2lsbCBiZSBwcmludGVkCisrb3V0LiAgSXQgbWFrZXMg aXQgdmVyeSBlYXN5IHRvIGZpbmQgYSB0ZXN0IGluIHlvdXIgc2NyaXB0IHdoZW4gaXQgZmFpbHMK KythbmQgZ2l2ZXMgb3RoZXJzIGFuIGlkZWEgb2YgeW91ciBpbnRlbnRpb25zLiAgJHRlc3RfbmFt ZSBpcyBvcHRpb25hbCwKKytidXQgd2UgQjx2ZXJ5PiBzdHJvbmdseSBlbmNvdXJhZ2UgaXRzIHVz ZS4KKysKKytTaG91bGQgYW4gb2soKSBmYWlsLCBpdCB3aWxsIHByb2R1Y2Ugc29tZSBkaWFnbm9z dGljczoKKysKKysgICAgbm90IG9rIDE4IC0gc3VmZmljaWVudCBtdWN1cworKyAgICAjICAgRmFp bGVkIHRlc3QgJ3N1ZmZpY2llbnQgbXVjdXMnCisrICAgICMgICBpbiBmb28udCBhdCBsaW5lIDQy LgorKworK1RoaXMgaXMgdGhlIHNhbWUgYXMgVGVzdDo6U2ltcGxlJ3Mgb2soKSByb3V0aW5lLgor KworKz1jdXQKKysKKytzdWIgb2sgKCQ7JCkgeworKyAgICBteSggJHRlc3QsICRuYW1lICkgPSBA XzsKKysgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsKKysKKysgICAgcmV0dXJuICR0 Yi0+b2soICR0ZXN0LCAkbmFtZSApOworK30KKysKKys9aXRlbSBCPGlzPgorKworKz1pdGVtIEI8 aXNudD4KKysKKysgIGlzICAoICRnb3QsICRleHBlY3RlZCwgJHRlc3RfbmFtZSApOworKyAgaXNu dCggJGdvdCwgJGV4cGVjdGVkLCAkdGVzdF9uYW1lICk7CisrCisrU2ltaWxhciB0byBvaygpLCBp cygpIGFuZCBpc250KCkgY29tcGFyZSB0aGVpciB0d28gYXJndW1lbnRzCisrd2l0aCBDPGVxPiBh bmQgQzxuZT4gcmVzcGVjdGl2ZWx5IGFuZCB1c2UgdGhlIHJlc3VsdCBvZiB0aGF0IHRvCisrZGV0 ZXJtaW5lIGlmIHRoZSB0ZXN0IHN1Y2NlZWRlZCBvciBmYWlsZWQuICBTbyB0aGVzZToKKysKKysg ICAgIyBJcyB0aGUgdWx0aW1hdGUgYW5zd2VyIDQyPworKyAgICBpcyggdWx0aW1hdGVfYW5zd2Vy KCksIDQyLCAgICAgICAgICAiTWVhbmluZyBvZiBMaWZlIiApOworKworKyAgICAjICRmb28gaXNu J3QgZW1wdHkKKysgICAgaXNudCggJGZvbywgJycsICAgICAiR290IHNvbWUgZm9vIiApOworKwor K2FyZSBzaW1pbGFyIHRvIHRoZXNlOgorKworKyAgICBvayggdWx0aW1hdGVfYW5zd2VyKCkgZXEg NDIsICAgICAgICAiTWVhbmluZyBvZiBMaWZlIiApOworKyAgICBvayggJGZvbyBuZSAnJywgICAg ICJHb3Qgc29tZSBmb28iICk7CisrCisrQzx1bmRlZj4gd2lsbCBvbmx5IGV2ZXIgbWF0Y2ggQzx1 bmRlZj4uICBTbyB5b3UgY2FuIHRlc3QgYSB2YWx1ZQorK2FnYWluc3QgQzx1bmRlZj4gbGlrZSB0 aGlzOgorKworKyAgICBpcygkbm90X2RlZmluZWQsIHVuZGVmLCAidW5kZWZpbmVkIGFzIGV4cGVj dGVkIik7CisrCisrKE1uZW1vbmljOiAgIlRoaXMgaXMgdGhhdC4iICAiVGhpcyBpc24ndCB0aGF0 LiIpCisrCisrU28gd2h5IHVzZSB0aGVzZT8gIFRoZXkgcHJvZHVjZSBiZXR0ZXIgZGlhZ25vc3Rp Y3Mgb24gZmFpbHVyZS4gIG9rKCkKKytjYW5ub3Qga25vdyB3aGF0IHlvdSBhcmUgdGVzdGluZyBm b3IgKGJleW9uZCB0aGUgbmFtZSksIGJ1dCBpcygpIGFuZAorK2lzbnQoKSBrbm93IHdoYXQgdGhl IHRlc3Qgd2FzIGFuZCB3aHkgaXQgZmFpbGVkLiAgRm9yIGV4YW1wbGUgdGhpcworK3Rlc3Q6Cisr CisrICAgIG15ICRmb28gPSAnd2FmZmxlJzsgIG15ICRiYXIgPSAneWFyYmxva29zJzsKKysgICAg aXMoICRmb28sICRiYXIsICAgJ0lzIGZvbyB0aGUgc2FtZSBhcyBiYXI/JyApOworKworK1dpbGwg cHJvZHVjZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorKworKyAgICBub3Qgb2sgMTcgLSBJcyBmb28g dGhlIHNhbWUgYXMgYmFyPworKyAgICAjICAgRmFpbGVkIHRlc3QgJ0lzIGZvbyB0aGUgc2FtZSBh cyBiYXI/JworKyAgICAjICAgaW4gZm9vLnQgYXQgbGluZSAxMzkuCisrICAgICMgICAgICAgICAg Z290OiAnd2FmZmxlJworKyAgICAjICAgICBleHBlY3RlZDogJ3lhcmJsb2tvcycKKysKKytTbyB5 b3UgY2FuIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nIHdpdGhvdXQgcmVydW5uaW5nIHRoZSB0 ZXN0LgorKworK1lvdSBhcmUgZW5jb3VyYWdlZCB0byB1c2UgaXMoKSBhbmQgaXNudCgpIG92ZXIg b2soKSB3aGVyZSBwb3NzaWJsZSwKKytob3dldmVyIGRvIG5vdCBiZSB0ZW1wdGVkIHRvIHVzZSB0 aGVtIHRvIGZpbmQgb3V0IGlmIHNvbWV0aGluZyBpcworK3RydWUgb3IgZmFsc2UhCisrCisrICAj IFhYWCBCQUQhCisrICBpcyggZXhpc3RzICRicm9va2x5bnt0cmVlfSwgMSwgJ0EgdHJlZSBncm93 cyBpbiBCcm9va2x5bicgKTsKKysKKytUaGlzIGRvZXMgbm90IGNoZWNrIGlmIEM8ZXhpc3RzICRi cm9va2x5bnt0cmVlfT4gaXMgdHJ1ZSwgaXQgY2hlY2tzIGlmCisraXQgcmV0dXJucyAxLiAgVmVy eSBkaWZmZXJlbnQuICBTaW1pbGFyIGNhdmVhdHMgZXhpc3QgZm9yIGZhbHNlIGFuZCAwLgorK0lu IHRoZXNlIGNhc2VzLCB1c2Ugb2soKS4KKysKKysgIG9rKCBleGlzdHMgJGJyb29rbHlue3RyZWV9 LCAgICAnQSB0cmVlIGdyb3dzIGluIEJyb29rbHluJyApOworKworK0Egc2ltcGxlIGNhbGwgdG8g aXNudCgpIHVzdWFsbHkgZG9lcyBub3QgcHJvdmlkZSBhIHN0cm9uZyB0ZXN0IGJ1dCB0aGVyZQor K2FyZSBjYXNlcyB3aGVuIHlvdSBjYW5ub3Qgc2F5IG11Y2ggbW9yZSBhYm91dCBhIHZhbHVlIHRo YW4gdGhhdCBpdCBpcworK2RpZmZlcmVudCBmcm9tIHNvbWUgb3RoZXIgdmFsdWU6CisrCisrICBu ZXdfb2sgJG9iaiwgIkZvbyI7CisrCisrICBteSAkY2xvbmUgPSAkb2JqLT5jbG9uZTsKKysgIGlz YV9vayAkb2JqLCAiRm9vIiwgIkZvby0+Y2xvbmUiOworKworKyAgaXNudCAkb2JqLCAkY2xvbmUs ICJjbG9uZSgpIHByb2R1Y2VzIGEgZGlmZmVyZW50IG9iamVjdCI7CisrCisrRm9yIHRob3NlIGdy YW1tYXRpY2FsIHBlZGFudHMgb3V0IHRoZXJlLCB0aGVyZSdzIGFuIEM8aXNuJ3QoKT4KKytmdW5j dGlvbiB3aGljaCBpcyBhbiBhbGlhcyBvZiBpc250KCkuCisrCisrPWN1dAorKworK3N1YiBpcyAo JCQ7JCkgeworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworKworKyAgICByZXR1 cm4gJHRiLT5pc19lcShAXyk7CisrfQorKworK3N1YiBpc250ICgkJDskKSB7CisrICAgIG15ICR0 YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CisrCisrICAgIHJldHVybiAkdGItPmlzbnRfZXEoQF8p OworK30KKysKKysqaXNuJ3QgPSBcJmlzbnQ7CisrCisrPWl0ZW0gQjxsaWtlPgorKworKyAgbGlr ZSggJGdvdCwgcXIvZXhwZWN0ZWQvLCAkdGVzdF9uYW1lICk7CisrCisrU2ltaWxhciB0byBvaygp LCBsaWtlKCkgbWF0Y2hlcyAkZ290IGFnYWluc3QgdGhlIHJlZ2V4IEM8cXIvZXhwZWN0ZWQvPi4K KysKKytTbyB0aGlzOgorKworKyAgICBsaWtlKCRnb3QsIHFyL2V4cGVjdGVkLywgJ3RoaXMgaXMg bGlrZSB0aGF0Jyk7CisrCisraXMgc2ltaWxhciB0bzoKKysKKysgICAgb2soICRnb3QgPX4gbS9l eHBlY3RlZC8sICd0aGlzIGlzIGxpa2UgdGhhdCcpOworKworKyhNbmVtb25pYyAiVGhpcyBpcyBs aWtlIHRoYXQiLikKKysKKytUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgcmVndWxhciBleHByZXNz aW9uLiAgSXQgbWF5IGJlIGdpdmVuIGFzIGEKKytyZWdleCByZWZlcmVuY2UgKGkuZS4gQzxxci8v Pikgb3IgKGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyCisrcGVybHMpIGFzIGEg c3RyaW5nIHRoYXQgbG9va3MgbGlrZSBhIHJlZ2V4IChhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzIGFy ZQorK2N1cnJlbnRseSBub3Qgc3VwcG9ydGVkKToKKysKKysgICAgbGlrZSggJGdvdCwgJy9leHBl Y3RlZC8nLCAndGhpcyBpcyBsaWtlIHRoYXQnICk7CisrCisrUmVnZXggb3B0aW9ucyBtYXkgYmUg cGxhY2VkIG9uIHRoZSBlbmQgKEM8Jy9leHBlY3RlZC9pJz4pLgorKworK0l0cyBhZHZhbnRhZ2Vz IG92ZXIgb2soKSBhcmUgc2ltaWxhciB0byB0aGF0IG9mIGlzKCkgYW5kIGlzbnQoKS4gIEJldHRl cgorK2RpYWdub3N0aWNzIG9uIGZhaWx1cmUuCisrCisrPWN1dAorKworK3N1YiBsaWtlICgkJDsk KSB7CisrICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CisrCisrICAgIHJldHVybiAk dGItPmxpa2UoQF8pOworK30KKysKKys9aXRlbSBCPHVubGlrZT4KKysKKysgIHVubGlrZSggJGdv dCwgcXIvZXhwZWN0ZWQvLCAkdGVzdF9uYW1lICk7CisrCisrV29ya3MgZXhhY3RseSBhcyBsaWtl KCksIG9ubHkgaXQgY2hlY2tzIGlmICRnb3QgQjxkb2VzIG5vdD4gbWF0Y2ggdGhlCisrZ2l2ZW4g cGF0dGVybi4KKysKKys9Y3V0CisrCisrc3ViIHVubGlrZSAoJCQ7JCkgeworKyAgICBteSAkdGIg PSBUZXN0OjpNb3JlLT5idWlsZGVyOworKworKyAgICByZXR1cm4gJHRiLT51bmxpa2UoQF8pOwor K30KKysKKys9aXRlbSBCPGNtcF9vaz4KKysKKysgIGNtcF9vayggJGdvdCwgJG9wLCAkZXhwZWN0 ZWQsICR0ZXN0X25hbWUgKTsKKysKKytIYWxmd2F5IGJldHdlZW4gQzxvaygpPiBhbmQgQzxpcygp PiBsaWVzIEM8Y21wX29rKCk+LiAgVGhpcyBhbGxvd3MgeW91CisrdG8gY29tcGFyZSB0d28gYXJn dW1lbnRzIHVzaW5nIGFueSBiaW5hcnkgcGVybCBvcGVyYXRvci4gIFRoZSB0ZXN0CisrcGFzc2Vz IGlmIHRoZSBjb21wYXJpc29uIGlzIHRydWUgYW5kIGZhaWxzIG90aGVyd2lzZS4KKysKKysgICAg IyBvayggJGdvdCBlcSAkZXhwZWN0ZWQgKTsKKysgICAgY21wX29rKCAkZ290LCAnZXEnLCAkZXhw ZWN0ZWQsICd0aGlzIGVxIHRoYXQnICk7CisrCisrICAgICMgb2soICRnb3QgPT0gJGV4cGVjdGVk ICk7CisrICAgIGNtcF9vayggJGdvdCwgJz09JywgJGV4cGVjdGVkLCAndGhpcyA9PSB0aGF0JyAp OworKworKyAgICAjIG9rKCAkZ290ICYmICRleHBlY3RlZCApOworKyAgICBjbXBfb2soICRnb3Qs ICcmJicsICRleHBlY3RlZCwgJ3RoaXMgJiYgdGhhdCcgKTsKKysgICAgLi4uZXRjLi4uCisrCisr SXRzIGFkdmFudGFnZSBvdmVyIG9rKCkgaXMgd2hlbiB0aGUgdGVzdCBmYWlscyB5b3UnbGwga25v dyB3aGF0ICRnb3QKKythbmQgJGV4cGVjdGVkIHdlcmU6CisrCisrICAgIG5vdCBvayAxCisrICAg ICMgICBGYWlsZWQgdGVzdCBpbiBmb28udCBhdCBsaW5lIDEyLgorKyAgICAjICAgICAnMjMnCisr ICAgICMgICAgICAgICAmJgorKyAgICAjICAgICB1bmRlZgorKworK0l0J3MgYWxzbyB1c2VmdWwg aW4gdGhvc2UgY2FzZXMgd2hlcmUgeW91IGFyZSBjb21wYXJpbmcgbnVtYmVycyBhbmQKKytpcygp J3MgdXNlIG9mIEM8ZXE+IHdpbGwgaW50ZXJmZXJlOgorKworKyAgICBjbXBfb2soICRiaWdfaGFp cnlfbnVtYmVyLCAnPT0nLCAkYW5vdGhlcl9iaWdfaGFpcnlfbnVtYmVyICk7CisrCisrSXQncyBl c3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGNvbXBhcmluZyBncmVhdGVyLXRoYW4gb3Igc21hbGxlci10 aGFuIAorK3JlbGF0aW9uIGJldHdlZW4gdmFsdWVzOgorKworKyAgICBjbXBfb2soICRzb21lX3Zh bHVlLCAnPD0nLCAkdXBwZXJfbGltaXQgKTsKKysKKysKKys9Y3V0CisrCisrc3ViIGNtcF9vaygk JCQ7JCkgeworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworKworKyAgICByZXR1 cm4gJHRiLT5jbXBfb2soQF8pOworK30KKysKKys9aXRlbSBCPGNhbl9vaz4KKysKKysgIGNhbl9v aygkbW9kdWxlLCBAbWV0aG9kcyk7CisrICBjYW5fb2soJG9iamVjdCwgQG1ldGhvZHMpOworKwor K0NoZWNrcyB0byBtYWtlIHN1cmUgdGhlICRtb2R1bGUgb3IgJG9iamVjdCBjYW4gZG8gdGhlc2Ug QG1ldGhvZHMKKysod29ya3Mgd2l0aCBmdW5jdGlvbnMsIHRvbykuCisrCisrICAgIGNhbl9vaygn Rm9vJywgcXcodGhpcyB0aGF0IHdoYXRldmVyKSk7CisrCisraXMgYWxtb3N0IGV4YWN0bHkgbGlr ZSBzYXlpbmc6CisrCisrICAgIG9rKCBGb28tPmNhbigndGhpcycpICYmIAorKyAgICAgICAgRm9v LT5jYW4oJ3RoYXQnKSAmJiAKKysgICAgICAgIEZvby0+Y2FuKCd3aGF0ZXZlcicpIAorKyAgICAg ICk7CisrCisrb25seSB3aXRob3V0IGFsbCB0aGUgdHlwaW5nIGFuZCB3aXRoIGEgYmV0dGVyIGlu dGVyZmFjZS4gIEhhbmR5IGZvcgorK3F1aWNrbHkgdGVzdGluZyBhbiBpbnRlcmZhY2UuCisrCisr Tm8gbWF0dGVyIGhvdyBtYW55IEBtZXRob2RzIHlvdSBjaGVjaywgYSBzaW5nbGUgY2FuX29rKCkg Y2FsbCBjb3VudHMKKythcyBvbmUgdGVzdC4gIElmIHlvdSBkZXNpcmUgb3RoZXJ3aXNlLCB1c2U6 CisrCisrICAgIGZvcmVhY2ggbXkgJG1ldGggKEBtZXRob2RzKSB7CisrICAgICAgICBjYW5fb2so J0ZvbycsICRtZXRoKTsKKysgICAgfQorKworKz1jdXQKKysKKytzdWIgY2FuX29rICgkQCkgewor KyAgICBteSggJHByb3RvLCBAbWV0aG9kcyApID0gQF87CisrICAgIG15ICRjbGFzcyA9IHJlZiAk cHJvdG8gfHwgJHByb3RvOworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworKwor KyAgICB1bmxlc3MoJGNsYXNzKSB7CisrICAgICAgICBteSAkb2sgPSAkdGItPm9rKCAwLCAiLT5j YW4oLi4uKSIgKTsKKysgICAgICAgICR0Yi0+ZGlhZygnICAgIGNhbl9vaygpIGNhbGxlZCB3aXRo IGVtcHR5IGNsYXNzIG9yIHJlZmVyZW5jZScpOworKyAgICAgICAgcmV0dXJuICRvazsKKysgICAg fQorKworKyAgICB1bmxlc3MoQG1ldGhvZHMpIHsKKysgICAgICAgIG15ICRvayA9ICR0Yi0+b2so IDAsICIkY2xhc3MtPmNhbiguLi4pIiApOworKyAgICAgICAgJHRiLT5kaWFnKCcgICAgY2FuX29r KCkgY2FsbGVkIHdpdGggbm8gbWV0aG9kcycpOworKyAgICAgICAgcmV0dXJuICRvazsKKysgICAg fQorKworKyAgICBteSBAbm9rID0gKCk7CisrICAgIGZvcmVhY2ggbXkgJG1ldGhvZCAoQG1ldGhv ZHMpIHsKKysgICAgICAgICR0Yi0+X3RyeSggc3ViIHsgJHByb3RvLT5jYW4oJG1ldGhvZCkgfSAp IG9yIHB1c2ggQG5vaywgJG1ldGhvZDsKKysgICAgfQorKworKyAgICBteSAkbmFtZSA9IChAbWV0 aG9kcyA9PSAxKSA/ICIkY2xhc3MtPmNhbignJG1ldGhvZHNbMF0nKSIgOgorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIkY2xhc3MtPmNhbiguLi4pIiAgICAgICAgICAgOworKwor KyAgICBteSAkb2sgPSAkdGItPm9rKCAhQG5vaywgJG5hbWUgKTsKKysKKysgICAgJHRiLT5kaWFn KCBtYXAgIiAgICAkY2xhc3MtPmNhbignJF8nKSBmYWlsZWRcbiIsIEBub2sgKTsKKysKKysgICAg cmV0dXJuICRvazsKKyt9CisrCisrPWl0ZW0gQjxpc2Ffb2s+CisrCisrICBpc2Ffb2soJG9iamVj dCwgICAkY2xhc3MsICRvYmplY3RfbmFtZSk7CisrICBpc2Ffb2soJHN1YmNsYXNzLCAkY2xhc3Ms ICRvYmplY3RfbmFtZSk7CisrICBpc2Ffb2soJHJlZiwgICAgICAkdHlwZSwgICRyZWZfbmFtZSk7 CisrCisrQ2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gQzw8ICRvYmplY3QtPmlzYSgkY2xhc3Mp ID4+LiAgQWxzbyBjaGVja3MgdG8gbWFrZQorK3N1cmUgdGhlIG9iamVjdCB3YXMgZGVmaW5lZCBp biB0aGUgZmlyc3QgcGxhY2UuICBIYW5keSBmb3IgdGhpcyBzb3J0Cisrb2YgdGhpbmc6CisrCisr ICAgIG15ICRvYmogPSBTb21lOjpNb2R1bGUtPm5ldzsKKysgICAgaXNhX29rKCAkb2JqLCAnU29t ZTo6TW9kdWxlJyApOworKworK3doZXJlIHlvdSdkIG90aGVyd2lzZSBoYXZlIHRvIHdyaXRlCisr CisrICAgIG15ICRvYmogPSBTb21lOjpNb2R1bGUtPm5ldzsKKysgICAgb2soIGRlZmluZWQgJG9i aiAmJiAkb2JqLT5pc2EoJ1NvbWU6Ok1vZHVsZScpICk7CisrCisrdG8gc2FmZWd1YXJkIGFnYWlu c3QgeW91ciB0ZXN0IHNjcmlwdCBibG93aW5nIHVwLgorKworK1lvdSBjYW4gYWxzbyB0ZXN0IGEg Y2xhc3MsIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGhhcyB0aGUgcmlnaHQgYW5jZXN0b3I6CisrCisr ICAgIGlzYV9vayggJ1ZvbGUnLCAnUm9kZW50JyApOworKworK0l0IHdvcmtzIG9uIHJlZmVyZW5j ZXMsIHRvbzoKKysKKysgICAgaXNhX29rKCAkYXJyYXlfcmVmLCAnQVJSQVknICk7CisrCisrVGhl IGRpYWdub3N0aWNzIG9mIHRoaXMgdGVzdCBub3JtYWxseSBqdXN0IHJlZmVyIHRvICd0aGUgb2Jq ZWN0Jy4gIElmCisreW91J2QgbGlrZSB0aGVtIHRvIGJlIG1vcmUgc3BlY2lmaWMsIHlvdSBjYW4g c3VwcGx5IGFuICRvYmplY3RfbmFtZQorKyhmb3IgZXhhbXBsZSAnVGVzdCBjdXN0b21lcicpLgor KworKz1jdXQKKysKKytzdWIgaXNhX29rICgkJDskKSB7CisrICAgIG15KCAkdGhpbmcsICRjbGFz cywgJHRoaW5nX25hbWUgKSA9IEBfOworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVy OworKworKyAgICBteSAkd2hhdGFtaTsKKysgICAgaWYoICFkZWZpbmVkICR0aGluZyApIHsKKysg ICAgICAgICR3aGF0YW1pID0gJ3VuZGVmJzsKKysgICAgfQorKyAgICBlbHNpZiggcmVmICR0aGlu ZyApIHsKKysgICAgICAgICR3aGF0YW1pID0gJ3JlZmVyZW5jZSc7CisrCisrICAgICAgICBsb2Nh bCgkQCwkISk7CisrICAgICAgICByZXF1aXJlIFNjYWxhcjo6VXRpbDsKKysgICAgICAgIGlmKCBT Y2FsYXI6OlV0aWw6OmJsZXNzZWQoJHRoaW5nKSApIHsKKysgICAgICAgICAgICAkd2hhdGFtaSA9 ICdvYmplY3QnOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgJHdo YXRhbWkgPSAnY2xhc3MnOworKyAgICB9CisrCisrICAgICMgV2UgY2FuJ3QgdXNlIFVOSVZFUlNB TDo6aXNhIGJlY2F1c2Ugd2Ugd2FudCB0byBob25vciBpc2EoKSBvdmVycmlkZXMKKysgICAgbXko ICRyc2x0LCAkZXJyb3IgKSA9ICR0Yi0+X3RyeSggc3ViIHsgJHRoaW5nLT5pc2EoJGNsYXNzKSB9 ICk7CisrCisrICAgIGlmKCRlcnJvcikgeworKyAgICAgICAgZGllIDw8V0hPQSB1bmxlc3MgJGVy cm9yID1+IC9eQ2FuJ3QgKGxvY2F0ZXxjYWxsKSBtZXRob2QgImlzYSIvOworK1dIT0EhIEkgdHJp ZWQgdG8gY2FsbCAtPmlzYSBvbiB5b3VyICR3aGF0YW1pIGFuZCBnb3Qgc29tZSB3ZWlyZCBlcnJv ci4KKytIZXJlJ3MgdGhlIGVycm9yLgorKyRlcnJvcgorK1dIT0EKKysgICAgfQorKworKyAgICAj IFNwZWNpYWwgY2FzZSBmb3IgaXNhX29rKCBbXSwgIkFSUkFZIiApIGFuZCBsaWtlCisrICAgIGlm KCAkd2hhdGFtaSBlcSAncmVmZXJlbmNlJyApIHsKKysgICAgICAgICRyc2x0ID0gVU5JVkVSU0FM Ojppc2EoJHRoaW5nLCAkY2xhc3MpOworKyAgICB9CisrCisrICAgIG15KCRkaWFnLCAkbmFtZSk7 CisrICAgIGlmKCBkZWZpbmVkICR0aGluZ19uYW1lICkgeworKyAgICAgICAgJG5hbWUgPSAiJyR0 aGluZ19uYW1lJyBpc2EgJyRjbGFzcyciOworKyAgICAgICAgJGRpYWcgPSBkZWZpbmVkICR0aGlu ZyA/ICInJHRoaW5nX25hbWUnIGlzbid0IGEgJyRjbGFzcyciIDogIickdGhpbmdfbmFtZScgaXNu J3QgZGVmaW5lZCI7CisrICAgIH0KKysgICAgZWxzaWYoICR3aGF0YW1pIGVxICdvYmplY3QnICkg eworKyAgICAgICAgbXkgJG15X2NsYXNzID0gcmVmICR0aGluZzsKKysgICAgICAgICR0aGluZ19u YW1lID0gcXFbQW4gb2JqZWN0IG9mIGNsYXNzICckbXlfY2xhc3MnXTsKKysgICAgICAgICRuYW1l ID0gIiR0aGluZ19uYW1lIGlzYSAnJGNsYXNzJyI7CisrICAgICAgICAkZGlhZyA9ICJUaGUgb2Jq ZWN0IG9mIGNsYXNzICckbXlfY2xhc3MnIGlzbid0IGEgJyRjbGFzcyciOworKyAgICB9CisrICAg IGVsc2lmKCAkd2hhdGFtaSBlcSAncmVmZXJlbmNlJyApIHsKKysgICAgICAgIG15ICR0eXBlID0g cmVmICR0aGluZzsKKysgICAgICAgICR0aGluZ19uYW1lID0gcXFbQSByZWZlcmVuY2Ugb2YgdHlw ZSAnJHR5cGUnXTsKKysgICAgICAgICRuYW1lID0gIiR0aGluZ19uYW1lIGlzYSAnJGNsYXNzJyI7 CisrICAgICAgICAkZGlhZyA9ICJUaGUgcmVmZXJlbmNlIG9mIHR5cGUgJyR0eXBlJyBpc24ndCBh ICckY2xhc3MnIjsKKysgICAgfQorKyAgICBlbHNpZiggJHdoYXRhbWkgZXEgJ3VuZGVmJyApIHsK KysgICAgICAgICR0aGluZ19uYW1lID0gJ3VuZGVmJzsKKysgICAgICAgICRuYW1lID0gIiR0aGlu Z19uYW1lIGlzYSAnJGNsYXNzJyI7CisrICAgICAgICAkZGlhZyA9ICIkdGhpbmdfbmFtZSBpc24n dCBkZWZpbmVkIjsKKysgICAgfQorKyAgICBlbHNpZiggJHdoYXRhbWkgZXEgJ2NsYXNzJyApIHsK KysgICAgICAgICR0aGluZ19uYW1lID0gcXFbVGhlIGNsYXNzIChvciBjbGFzcy1saWtlKSAnJHRo aW5nJ107CisrICAgICAgICAkbmFtZSA9ICIkdGhpbmdfbmFtZSBpc2EgJyRjbGFzcyciOworKyAg ICAgICAgJGRpYWcgPSAiJHRoaW5nX25hbWUgaXNuJ3QgYSAnJGNsYXNzJyI7CisrICAgIH0KKysg ICAgZWxzZSB7CisrICAgICAgICBkaWU7CisrICAgIH0KKysKKysgICAgbXkgJG9rOworKyAgICBp ZigkcnNsdCkgeworKyAgICAgICAgJG9rID0gJHRiLT5vayggMSwgJG5hbWUgKTsKKysgICAgfQor KyAgICBlbHNlIHsKKysgICAgICAgICRvayA9ICR0Yi0+b2soIDAsICRuYW1lICk7CisrICAgICAg ICAkdGItPmRpYWcoIiAgICAkZGlhZ1xuIik7CisrICAgIH0KKysKKysgICAgcmV0dXJuICRvazsK Kyt9CisrCisrPWl0ZW0gQjxuZXdfb2s+CisrCisrICBteSAkb2JqID0gbmV3X29rKCAkY2xhc3Mg KTsKKysgIG15ICRvYmogPSBuZXdfb2soICRjbGFzcyA9PiBcQGFyZ3MgKTsKKysgIG15ICRvYmog PSBuZXdfb2soICRjbGFzcyA9PiBcQGFyZ3MsICRvYmplY3RfbmFtZSApOworKworK0EgY29udmVu aWVuY2UgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgY3JlYXRpbmcgYW4gb2JqZWN0IGFuZCBjYWxs aW5nCisraXNhX29rKCkgb24gdGhhdCBvYmplY3QuCisrCisrSXQgaXMgYmFzaWNhbGx5IGVxdWl2 YWxlbnQgdG86CisrCisrICAgIG15ICRvYmogPSAkY2xhc3MtPm5ldyhAYXJncyk7CisrICAgIGlz YV9vayAkb2JqLCAkY2xhc3MsICRvYmplY3RfbmFtZTsKKysKKytJZiBAYXJncyBpcyBub3QgZ2l2 ZW4sIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZSB1c2VkLgorKworK1RoaXMgZnVuY3Rpb24gb25seSB3 b3JrcyBvbiBuZXcoKSBhbmQgaXQgYXNzdW1lcyBuZXcoKSB3aWxsIHJldHVybgorK2p1c3QgYSBz aW5nbGUgb2JqZWN0IHdoaWNoIGlzYSBDPCRjbGFzcz4uCisrCisrPWN1dAorKworK3N1YiBuZXdf b2sgeworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworKyAgICAkdGItPmNyb2Fr KCJuZXdfb2soKSBtdXN0IGJlIGdpdmVuIGF0IGxlYXN0IGEgY2xhc3MiKSB1bmxlc3MgQF87Cisr CisrICAgIG15KCAkY2xhc3MsICRhcmdzLCAkb2JqZWN0X25hbWUgKSA9IEBfOworKworKyAgICAk YXJncyB8fD0gW107CisrCisrICAgIG15ICRvYmo7CisrICAgIG15KCAkc3VjY2VzcywgJGVycm9y ICkgPSAkdGItPl90cnkoIHN1YiB7ICRvYmogPSAkY2xhc3MtPm5ldyhAJGFyZ3MpOyAxIH0gKTsK KysgICAgaWYoJHN1Y2Nlc3MpIHsKKysgICAgICAgIGxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZl bCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCArIDE7CisrICAgICAgICBpc2Ffb2sgJG9iaiwgJGNs YXNzLCAkb2JqZWN0X25hbWU7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICAkY2xhc3Mg PSAndW5kZWYnIGlmICFkZWZpbmVkICRjbGFzczsKKysgICAgICAgICR0Yi0+b2soIDAsICIkY2xh c3MtPm5ldygpIGRpZWQiICk7CisrICAgICAgICAkdGItPmRpYWcoIiAgICBFcnJvciB3YXM6ICAk ZXJyb3IiKTsKKysgICAgfQorKworKyAgICByZXR1cm4gJG9iajsKKyt9CisrCisrPWl0ZW0gQjxz dWJ0ZXN0PgorKworKyAgICBzdWJ0ZXN0ICRuYW1lID0+IFwmY29kZTsKKysKKytzdWJ0ZXN0KCkg cnVucyB0aGUgJmNvZGUgYXMgaXRzIG93biBsaXR0bGUgdGVzdCB3aXRoIGl0cyBvd24gcGxhbiBh bmQKKytpdHMgb3duIHJlc3VsdC4gIFRoZSBtYWluIHRlc3QgY291bnRzIHRoaXMgYXMgYSBzaW5n bGUgdGVzdCB1c2luZyB0aGUKKytyZXN1bHQgb2YgdGhlIHdob2xlIHN1YnRlc3QgdG8gZGV0ZXJt aW5lIGlmIGl0cyBvayBvciBub3Qgb2suCisrCisrRm9yIGV4YW1wbGUuLi4KKysKKysgIHVzZSBU ZXN0OjpNb3JlIHRlc3RzID0+IDM7CisrIAorKyAgcGFzcygiRmlyc3QgdGVzdCIpOworKworKyAg c3VidGVzdCAnQW4gZXhhbXBsZSBzdWJ0ZXN0JyA9PiBzdWIgeworKyAgICAgIHBsYW4gdGVzdHMg PT4gMjsKKysKKysgICAgICBwYXNzKCJUaGlzIGlzIGEgc3VidGVzdCIpOworKyAgICAgIHBhc3Mo IlNvIGlzIHRoaXMiKTsKKysgIH07CisrCisrICBwYXNzKCJUaGlyZCB0ZXN0Iik7CisrCisrVGhp cyB3b3VsZCBwcm9kdWNlLgorKworKyAgMS4uMworKyAgb2sgMSAtIEZpcnN0IHRlc3QKKysgICAg ICAjIFN1YnRlc3Q6IEFuIGV4YW1wbGUgc3VidGVzdAorKyAgICAgIDEuLjIKKysgICAgICBvayAx IC0gVGhpcyBpcyBhIHN1YnRlc3QKKysgICAgICBvayAyIC0gU28gaXMgdGhpcworKyAgb2sgMiAt IEFuIGV4YW1wbGUgc3VidGVzdAorKyAgb2sgMyAtIFRoaXJkIHRlc3QKKysKKytBIHN1YnRlc3Qg bWF5IGNhbGwgInNraXBfYWxsIi4gIE5vIHRlc3RzIHdpbGwgYmUgcnVuLCBidXQgdGhlIHN1YnRl c3QgaXMKKytjb25zaWRlcmVkIGEgc2tpcC4KKysKKysgIHN1YnRlc3QgJ3NraXBweScgPT4gc3Vi IHsKKysgICAgICBwbGFuIHNraXBfYWxsID0+ICdjdXogSSBzYWlkIHNvJzsKKysgICAgICBwYXNz KCd0aGlzIHRlc3Qgd2lsbCBuZXZlciBiZSBydW4nKTsKKysgIH07CisrCisrUmV0dXJucyB0cnVl IGlmIHRoZSBzdWJ0ZXN0IHBhc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorKworK0R1ZSB0byBob3cg c3VidGVzdHMgd29yaywgeW91IG1heSBvbWl0IGEgcGxhbiBpZiB5b3UgZGVzaXJlLiAgVGhpcyBh ZGRzIGFuCisraW1wbGljaXQgQzxkb25lX3Rlc3RpbmcoKT4gdG8gdGhlIGVuZCBvZiB5b3VyIHN1 YnRlc3QuICBUaGUgZm9sbG93aW5nIHR3bworK3N1YnRlc3RzIGFyZSBlcXVpdmFsZW50OgorKwor KyAgc3VidGVzdCAnc3VidGVzdCB3aXRoIGltcGxpY2l0IGRvbmVfdGVzdGluZygpJywgc3ViIHsK KysgICAgICBvayAxLCAnc3VidGVzdHMgd2l0aCBhbiBpbXBsaWNpdCBkb25lIHRlc3Rpbmcgc2hv dWxkIHdvcmsnOworKyAgICAgIG9rIDEsICcuLi4gYW5kIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSB0 ZXN0JzsKKysgICAgICBvayAxLCAnLi4uIG5vIG1hdHRlciBob3cgbWFueSB0ZXN0cyBhcmUgcnVu JzsKKysgIH07CisrCisrICBzdWJ0ZXN0ICdzdWJ0ZXN0IHdpdGggZXhwbGljaXQgZG9uZV90ZXN0 aW5nKCknLCBzdWIgeworKyAgICAgIG9rIDEsICdzdWJ0ZXN0cyB3aXRoIGFuIGV4cGxpY2l0IGRv bmUgdGVzdGluZyBzaG91bGQgd29yayc7CisrICAgICAgb2sgMSwgJy4uLiBhbmQgc3VwcG9ydCBt b3JlIHRoYW4gb25lIHRlc3QnOworKyAgICAgIG9rIDEsICcuLi4gbm8gbWF0dGVyIGhvdyBtYW55 IHRlc3RzIGFyZSBydW4nOworKyAgICAgIGRvbmVfdGVzdGluZygpOworKyAgfTsKKysKKys9Y3V0 CisrCisrc3ViIHN1YnRlc3QgeworKyAgICBteSAoJG5hbWUsICRzdWJ0ZXN0cykgPSBAXzsKKysK KysgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsKKysgICAgcmV0dXJuICR0Yi0+c3Vi dGVzdChAXyk7CisrfQorKworKz1pdGVtIEI8cGFzcz4KKysKKys9aXRlbSBCPGZhaWw+CisrCisr ICBwYXNzKCR0ZXN0X25hbWUpOworKyAgZmFpbCgkdGVzdF9uYW1lKTsKKysKKytTb21ldGltZXMg eW91IGp1c3Qgd2FudCB0byBzYXkgdGhhdCB0aGUgdGVzdHMgaGF2ZSBwYXNzZWQuICBVc3VhbGx5 CisrdGhlIGNhc2UgaXMgeW91J3ZlIGdvdCBzb21lIGNvbXBsaWNhdGVkIGNvbmRpdGlvbiB0aGF0 IGlzIGRpZmZpY3VsdCB0bworK3dlZGdlIGludG8gYW4gb2soKS4gIEluIHRoaXMgY2FzZSwgeW91 IGNhbiBzaW1wbHkgdXNlIHBhc3MoKSAodG8KKytkZWNsYXJlIHRoZSB0ZXN0IG9rKSBvciBmYWls IChmb3Igbm90IG9rKS4gIFRoZXkgYXJlIHN5bm9ueW1zIGZvcgorK29rKDEpIGFuZCBvaygwKS4K KysKKytVc2UgdGhlc2UgdmVyeSwgdmVyeSwgdmVyeSBzcGFyaW5nbHkuCisrCisrPWN1dAorKwor K3N1YiBwYXNzICg7JCkgeworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworKwor KyAgICByZXR1cm4gJHRiLT5vayggMSwgQF8gKTsKKyt9CisrCisrc3ViIGZhaWwgKDskKSB7Cisr ICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CisrCisrICAgIHJldHVybiAkdGItPm9r KCAwLCBAXyApOworK30KKysKKys9YmFjaworKworKworKz1oZWFkMiBNb2R1bGUgdGVzdHMKKysK KytTb21ldGltZXMgeW91IHdhbnQgdG8gdGVzdCBpZiBhIG1vZHVsZSwgb3IgYSBsaXN0IG9mIG1v ZHVsZXMsIGNhbgorK3N1Y2Nlc3NmdWxseSBsb2FkLiAgRm9yIGV4YW1wbGUsIHlvdSdsbCBvZnRl biB3YW50IGEgZmlyc3QgdGVzdCB3aGljaAorK3NpbXBseSBsb2FkcyBhbGwgdGhlIG1vZHVsZXMg aW4gdGhlIGRpc3RyaWJ1dGlvbiB0byBtYWtlIHN1cmUgdGhleQorK3dvcmsgYmVmb3JlIGdvaW5n IG9uIHRvIGRvIG1vcmUgY29tcGxpY2F0ZWQgdGVzdGluZy4KKysKKytGb3Igc3VjaCBwdXJwb3Nl cyB3ZSBoYXZlIEM8dXNlX29rPiBhbmQgQzxyZXF1aXJlX29rPi4KKysKKys9b3ZlciA0CisrCisr PWl0ZW0gQjxyZXF1aXJlX29rPgorKworKyAgIHJlcXVpcmVfb2soJG1vZHVsZSk7CisrICAgcmVx dWlyZV9vaygkZmlsZSk7CisrCisrVHJpZXMgdG8gQzxyZXF1aXJlPiB0aGUgZ2l2ZW4gJG1vZHVs ZSBvciAkZmlsZS4gIElmIGl0IGxvYWRzCisrc3VjY2Vzc2Z1bGx5LCB0aGUgdGVzdCB3aWxsIHBh c3MuICBPdGhlcndpc2UgaXQgZmFpbHMgYW5kIGRpc3BsYXlzIHRoZQorK2xvYWQgZXJyb3IuCisr CisrQzxyZXF1aXJlX29rPiB3aWxsIGd1ZXNzIHdoZXRoZXIgdGhlIGlucHV0IGlzIGEgbW9kdWxl IG5hbWUgb3IgYQorK2ZpbGVuYW1lLgorKworK05vIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBp ZiB0aGUgbG9hZCBmYWlscy4KKysKKysgICAgIyByZXF1aXJlIFNvbWU6Ok1vZHVsZQorKyAgICBy ZXF1aXJlX29rICJTb21lOjpNb2R1bGUiOworKworKyAgICAjIHJlcXVpcmUgIlNvbWUvRmlsZS5w bCI7CisrICAgIHJlcXVpcmVfb2sgIlNvbWUvRmlsZS5wbCI7CisrCisrICAgICMgc3RvcCB0ZXN0 aW5nIGlmIGFueSBvZiB5b3VyIG1vZHVsZXMgd2lsbCBub3QgbG9hZAorKyAgICBmb3IgbXkgJG1v ZHVsZSAoQG1vZHVsZSkgeworKyAgICAgICAgcmVxdWlyZV9vayAkbW9kdWxlIG9yIEJBSUxfT1VU ICJDYW4ndCBsb2FkICRtb2R1bGUiOworKyAgICB9CisrCisrPWN1dAorKworK3N1YiByZXF1aXJl X29rICgkKSB7CisrICAgIG15KCRtb2R1bGUpID0gc2hpZnQ7CisrICAgIG15ICR0YiA9IFRlc3Q6 Ok1vcmUtPmJ1aWxkZXI7CisrCisrICAgIG15ICRwYWNrID0gY2FsbGVyOworKworKyAgICAjIFRy eSB0byBkZXRlcm1pbmUgaWYgd2UndmUgYmVlbiBnaXZlbiBhIG1vZHVsZSBuYW1lIG9yIGZpbGUu CisrICAgICMgTW9kdWxlIG5hbWVzIG11c3QgYmUgYmFyZXdvcmRzLCBmaWxlcyBub3QuCisrICAg ICRtb2R1bGUgPSBxcVsnJG1vZHVsZSddIHVubGVzcyBfaXNfbW9kdWxlX25hbWUoJG1vZHVsZSk7 CisrCisrICAgIG15ICRjb2RlID0gPDxSRVFVSVJFOworK3BhY2thZ2UgJHBhY2s7CisrcmVxdWly ZSAkbW9kdWxlOworKzE7CisrUkVRVUlSRQorKworKyAgICBteSggJGV2YWxfcmVzdWx0LCAkZXZh bF9lcnJvciApID0gX2V2YWwoJGNvZGUpOworKyAgICBteSAkb2sgPSAkdGItPm9rKCAkZXZhbF9y ZXN1bHQsICJyZXF1aXJlICRtb2R1bGU7IiApOworKworKyAgICB1bmxlc3MoJG9rKSB7CisrICAg ICAgICBjaG9tcCAkZXZhbF9lcnJvcjsKKysgICAgICAgICR0Yi0+ZGlhZyg8PERJQUdOT1NUSUMp OworKyAgICBUcmllZCB0byByZXF1aXJlICckbW9kdWxlJy4KKysgICAgRXJyb3I6ICAkZXZhbF9l cnJvcgorK0RJQUdOT1NUSUMKKysKKysgICAgfQorKworKyAgICByZXR1cm4gJG9rOworK30KKysK KytzdWIgX2lzX21vZHVsZV9uYW1lIHsKKysgICAgbXkgJG1vZHVsZSA9IHNoaWZ0OworKworKyAg ICAjIE1vZHVsZSBuYW1lcyBzdGFydCB3aXRoIGEgbGV0dGVyLgorKyAgICAjIEVuZCB3aXRoIGFu IGFscGhhbnVtZXJpYy4KKysgICAgIyBUaGUgcmVzdCBpcyBhbiBhbHBoYW51bWVyaWMgb3IgOjoK KysgICAgJG1vZHVsZSA9fiBzL1xiOjpcYi8vZzsKKysKKysgICAgcmV0dXJuICRtb2R1bGUgPX4g L15bYS16QS1aXVx3KiQvID8gMSA6IDA7CisrfQorKworKworKz1pdGVtIEI8dXNlX29rPgorKwor KyAgIEJFR0lOIHsgdXNlX29rKCRtb2R1bGUpOyB9CisrICAgQkVHSU4geyB1c2Vfb2soJG1vZHVs ZSwgQGltcG9ydHMpOyB9CisrCisrTGlrZSBDPHJlcXVpcmVfb2s+LCBidXQgaXQgd2lsbCBDPHVz ZT4gdGhlICRtb2R1bGUgaW4gcXVlc3Rpb24gYW5kCisrb25seSBsb2FkcyBtb2R1bGVzLCBub3Qg ZmlsZXMuCisrCisrSWYgeW91IGp1c3Qgd2FudCB0byB0ZXN0IGEgbW9kdWxlIGNhbiBiZSBsb2Fk ZWQsIHVzZSBDPHJlcXVpcmVfb2s+LgorKworK0lmIHlvdSBqdXN0IHdhbnQgdG8gbG9hZCBhIG1v ZHVsZSBpbiBhIHRlc3QsIHdlIHJlY29tbWVuZCBzaW1wbHkgdXNpbmcKKytDPHVzZT4gZGlyZWN0 bHkuICBJdCB3aWxsIGNhdXNlIHRoZSB0ZXN0IHRvIHN0b3AuCisrCisrSXQncyByZWNvbW1lbmRl ZCB0aGF0IHlvdSBydW4gdXNlX29rKCkgaW5zaWRlIGEgQkVHSU4gYmxvY2sgc28gaXRzCisrZnVu Y3Rpb25zIGFyZSBleHBvcnRlZCBhdCBjb21waWxlLXRpbWUgYW5kIHByb3RvdHlwZXMgYXJlIHBy b3Blcmx5CisraG9ub3JlZC4KKysKKytJZiBAaW1wb3J0cyBhcmUgZ2l2ZW4sIHRoZXkgYXJlIHBh c3NlZCB0aHJvdWdoIHRvIHRoZSB1c2UuICBTbyB0aGlzOgorKworKyAgIEJFR0lOIHsgdXNlX29r KCdTb21lOjpNb2R1bGUnLCBxdyhmb28gYmFyKSkgfQorKworK2lzIGxpa2UgZG9pbmcgdGhpczoK KysKKysgICB1c2UgU29tZTo6TW9kdWxlIHF3KGZvbyBiYXIpOworKworK1ZlcnNpb24gbnVtYmVy cyBjYW4gYmUgY2hlY2tlZCBsaWtlIHNvOgorKworKyAgICMgSnVzdCBsaWtlICJ1c2UgU29tZTo6 TW9kdWxlIDEuMDIiCisrICAgQkVHSU4geyB1c2Vfb2soJ1NvbWU6Ok1vZHVsZScsIDEuMDIpIH0K KysKKytEb24ndCB0cnkgdG8gZG8gdGhpczoKKysKKysgICBCRUdJTiB7CisrICAgICAgIHVzZV9v aygnU29tZTo6TW9kdWxlJyk7CisrCisrICAgICAgIC4uLnNvbWUgY29kZSB0aGF0IGRlcGVuZHMg b24gdGhlIHVzZS4uLgorKyAgICAgICAuLi5oYXBwZW5pbmcgYXQgY29tcGlsZSB0aW1lLi4uCisr ICAgfQorKworK2JlY2F1c2UgdGhlIG5vdGlvbiBvZiAiY29tcGlsZS10aW1lIiBpcyByZWxhdGl2 ZS4gIEluc3RlYWQsIHlvdSB3YW50OgorKworKyAgQkVHSU4geyB1c2Vfb2soJ1NvbWU6Ok1vZHVs ZScpIH0KKysgIEJFR0lOIHsgLi4uc29tZSBjb2RlIHRoYXQgZGVwZW5kcyBvbiB0aGUgdXNlLi4u IH0KKysKKytJZiB5b3Ugd2FudCB0aGUgZXF1aXZhbGVudCBvZiBDPHVzZSBGb28gKCk+LCB1c2Ug YSBtb2R1bGUgYnV0IG5vdAorK2ltcG9ydCBhbnl0aGluZywgdXNlIEM8cmVxdWlyZV9vaz4uCisr CisrICBCRUdJTiB7IHJlcXVpcmVfb2sgIkZvbyIgfQorKworKz1jdXQKKysKKytzdWIgdXNlX29r ICgkO0ApIHsKKysgICAgbXkoICRtb2R1bGUsIEBpbXBvcnRzICkgPSBAXzsKKysgICAgQGltcG9y dHMgPSAoKSB1bmxlc3MgQGltcG9ydHM7CisrICAgIG15ICR0YiA9IFRlc3Q6Ok1vcmUtPmJ1aWxk ZXI7CisrCisrICAgIG15KCAkcGFjaywgJGZpbGVuYW1lLCAkbGluZSApID0gY2FsbGVyOworKyAg ICAkZmlsZW5hbWUgPX4geS9cblxyL18vOyAjIHNvIGl0IGRvZXNuJ3QgcnVuIG9mZiB0aGUgIiNs aW5lICRsaW5lICRmIiBsaW5lCisrCisrICAgIG15ICRjb2RlOworKyAgICBpZiggQGltcG9ydHMg PT0gMSBhbmQgJGltcG9ydHNbMF0gPX4gL15cZCsoPzpcLlxkKyk/JC8gKSB7CisrICAgICAgICAj IHByb2JhYmx5IGEgdmVyc2lvbiBjaGVjay4gIFBlcmwgbmVlZHMgdG8gc2VlIHRoZSBiYXJlIG51 bWJlcgorKyAgICAgICAgIyBmb3IgaXQgdG8gd29yayB3aXRoIG5vbi1FeHBvcnRlciBiYXNlZCBt b2R1bGVzLgorKyAgICAgICAgJGNvZGUgPSA8PFVTRTsKKytwYWNrYWdlICRwYWNrOworKworKyNs aW5lICRsaW5lICRmaWxlbmFtZQorK3VzZSAkbW9kdWxlICRpbXBvcnRzWzBdOworKzE7CisrVVNF CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICAkY29kZSA9IDw8VVNFOworK3BhY2thZ2Ug JHBhY2s7CisrCisrI2xpbmUgJGxpbmUgJGZpbGVuYW1lCisrdXNlICRtb2R1bGUgXEB7XCRhcmdz WzBdfTsKKysxOworK1VTRQorKyAgICB9CisrCisrICAgIG15KCAkZXZhbF9yZXN1bHQsICRldmFs X2Vycm9yICkgPSBfZXZhbCggJGNvZGUsIFxAaW1wb3J0cyApOworKyAgICBteSAkb2sgPSAkdGIt Pm9rKCAkZXZhbF9yZXN1bHQsICJ1c2UgJG1vZHVsZTsiICk7CisrCisrICAgIHVubGVzcygkb2sp IHsKKysgICAgICAgIGNob21wICRldmFsX2Vycm9yOworKyAgICAgICAgJEAgPX4gc3teQkVHSU4g ZmFpbGVkLS1jb21waWxhdGlvbiBhYm9ydGVkIGF0IC4qJH0KKysgICAgICAgICAgICAgICAge0JF R0lOIGZhaWxlZC0tY29tcGlsYXRpb24gYWJvcnRlZCBhdCAkZmlsZW5hbWUgbGluZSAkbGluZS59 bTsKKysgICAgICAgICR0Yi0+ZGlhZyg8PERJQUdOT1NUSUMpOworKyAgICBUcmllZCB0byB1c2Ug JyRtb2R1bGUnLgorKyAgICBFcnJvcjogICRldmFsX2Vycm9yCisrRElBR05PU1RJQworKworKyAg ICB9CisrCisrICAgIHJldHVybiAkb2s7CisrfQorKworK3N1YiBfZXZhbCB7CisrICAgIG15KCAk Y29kZSwgQGFyZ3MgKSA9IEBfOworKworKyAgICAjIFdvcmsgYXJvdW5kIG9kZGl0aWVzIHN1cnJv dW5kaW5nIHJlc2V0dGluZyBvZiAkQCBieSBpbW1lZGlhdGVseQorKyAgICAjIHN0b3JpbmcgaXQu CisrICAgIG15KCAkc2lnZGllLCAkZXZhbF9yZXN1bHQsICRldmFsX2Vycm9yICk7CisrICAgIHsK KysgICAgICAgIGxvY2FsKCAkQCwgJCEsICRTSUd7X19ESUVfX30gKTsgICAgIyBpc29sYXRlIGV2 YWwKKysgICAgICAgICRldmFsX3Jlc3VsdCA9IGV2YWwgJGNvZGU7ICAgICAgICAgICAgICAjIyBu byBjcml0aWMgKEJ1aWx0aW5GdW5jdGlvbnM6OlByb2hpYml0U3RyaW5neUV2YWwpCisrICAgICAg ICAkZXZhbF9lcnJvciAgPSAkQDsKKysgICAgICAgICRzaWdkaWUgICAgICA9ICRTSUd7X19ESUVf X30gfHwgdW5kZWY7CisrICAgIH0KKysgICAgIyBtYWtlIHN1cmUgdGhhdCAkY29kZSBnb3QgYSBj aGFuY2UgdG8gc2V0ICRTSUd7X19ESUVfX30KKysgICAgJFNJR3tfX0RJRV9ffSA9ICRzaWdkaWUg aWYgZGVmaW5lZCAkc2lnZGllOworKworKyAgICByZXR1cm4oICRldmFsX3Jlc3VsdCwgJGV2YWxf ZXJyb3IgKTsKKyt9CisrCisrCisrPWJhY2sKKysKKysKKys9aGVhZDIgQ29tcGxleCBkYXRhIHN0 cnVjdHVyZXMKKysKKytOb3QgZXZlcnl0aGluZyBpcyBhIHNpbXBsZSBlcSBjaGVjayBvciByZWdl eC4gIFRoZXJlIGFyZSB0aW1lcyB5b3UKKytuZWVkIHRvIHNlZSBpZiB0d28gZGF0YSBzdHJ1Y3R1 cmVzIGFyZSBlcXVpdmFsZW50LiAgRm9yIHRoZXNlCisraW5zdGFuY2VzIFRlc3Q6Ok1vcmUgcHJv dmlkZXMgYSBoYW5kZnVsIG9mIHVzZWZ1bCBmdW5jdGlvbnMuCisrCisrQjxOT1RFPiBJJ20gbm90 IHF1aXRlIHN1cmUgd2hhdCB3aWxsIGhhcHBlbiB3aXRoIGZpbGVoYW5kbGVzLgorKworKz1vdmVy IDQKKysKKys9aXRlbSBCPGlzX2RlZXBseT4KKysKKysgIGlzX2RlZXBseSggJGdvdCwgJGV4cGVj dGVkLCAkdGVzdF9uYW1lICk7CisrCisrU2ltaWxhciB0byBpcygpLCBleGNlcHQgdGhhdCBpZiAk Z290IGFuZCAkZXhwZWN0ZWQgYXJlIHJlZmVyZW5jZXMsIGl0CisrZG9lcyBhIGRlZXAgY29tcGFy aXNvbiB3YWxraW5nIGVhY2ggZGF0YSBzdHJ1Y3R1cmUgdG8gc2VlIGlmIHRoZXkgYXJlCisrZXF1 aXZhbGVudC4gIElmIHRoZSB0d28gc3RydWN0dXJlcyBhcmUgZGlmZmVyZW50LCBpdCB3aWxsIGRp c3BsYXkgdGhlCisrcGxhY2Ugd2hlcmUgdGhleSBzdGFydCBkaWZmZXJpbmcuCisrCisraXNfZGVl cGx5KCkgY29tcGFyZXMgdGhlIGRlcmVmZXJlbmNlZCB2YWx1ZXMgb2YgcmVmZXJlbmNlcywgdGhl CisrcmVmZXJlbmNlcyB0aGVtc2VsdmVzIChleGNlcHQgZm9yIHRoZWlyIHR5cGUpIGFyZSBpZ25v cmVkLiAgVGhpcyBtZWFucworK2FzcGVjdHMgc3VjaCBhcyBibGVzc2luZyBhbmQgdGllcyBhcmUg bm90IGNvbnNpZGVyZWQgImRpZmZlcmVudCIuCisrCisraXNfZGVlcGx5KCkgY3VycmVudGx5IGhh cyB2ZXJ5IGxpbWl0ZWQgaGFuZGxpbmcgb2YgZnVuY3Rpb24gcmVmZXJlbmNlCisrYW5kIGdsb2Jz LiAgSXQgbWVyZWx5IGNoZWNrcyBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgcmVmZXJlbnQuICBUaGlz IG1heQorK2ltcHJvdmUgaW4gdGhlIGZ1dHVyZS4KKysKKytMPFRlc3Q6OkRpZmZlcmVuY2VzPiBh bmQgTDxUZXN0OjpEZWVwPiBwcm92aWRlIG1vcmUgaW4tZGVwdGggZnVuY3Rpb25hbGl0eQorK2Fs b25nIHRoZXNlIGxpbmVzLgorKworKz1jdXQKKysKKytvdXIoIEBEYXRhX1N0YWNrLCAlUmVmc19T ZWVuICk7CisrbXkgJERORSA9IGJsZXNzIFtdLCAnRG9lczo6Tm90OjpFeGlzdCc7CisrCisrc3Vi IF9kbmUgeworKyAgICByZXR1cm4gcmVmICRfWzBdIGVxIHJlZiAkRE5FOworK30KKysKKysjIyBu byBjcml0aWMgKFN1YnJvdXRpbmVzOjpSZXF1aXJlQXJnVW5wYWNraW5nKQorK3N1YiBpc19kZWVw bHkgeworKyAgICBteSAkdGIgPSBUZXN0OjpNb3JlLT5idWlsZGVyOworKworKyAgICB1bmxlc3Mo IEBfID09IDIgb3IgQF8gPT0gMyApIHsKKysgICAgICAgIG15ICRtc2cgPSA8PCdXQVJOSU5HJzsK Kytpc19kZWVwbHkoKSB0YWtlcyB0d28gb3IgdGhyZWUgYXJncywgeW91IGdhdmUgJWQuCisrVGhp cyB1c3VhbGx5IG1lYW5zIHlvdSBwYXNzZWQgYW4gYXJyYXkgb3IgaGFzaCBpbnN0ZWFkIAorK29m IGEgcmVmZXJlbmNlIHRvIGl0CisrV0FSTklORworKyAgICAgICAgY2hvcCAkbXNnOyAgICAjIGNs aXAgb2ZmIG5ld2xpbmUgc28gY2FycCgpIHdpbGwgcHV0IGluIGxpbmUvZmlsZQorKworKyAgICAg ICAgX2NhcnAgc3ByaW50ZiAkbXNnLCBzY2FsYXIgQF87CisrCisrICAgICAgICByZXR1cm4gJHRi LT5vaygwKTsKKysgICAgfQorKworKyAgICBteSggJGdvdCwgJGV4cGVjdGVkLCAkbmFtZSApID0g QF87CisrCisrICAgICR0Yi0+X3Vub3ZlcmxvYWRfc3RyKCBcJGV4cGVjdGVkLCBcJGdvdCApOwor KworKyAgICBteSAkb2s7CisrICAgIGlmKCAhcmVmICRnb3QgYW5kICFyZWYgJGV4cGVjdGVkICkg eyAgICAjIG5laXRoZXIgaXMgYSByZWZlcmVuY2UKKysgICAgICAgICRvayA9ICR0Yi0+aXNfZXEo ICRnb3QsICRleHBlY3RlZCwgJG5hbWUgKTsKKysgICAgfQorKyAgICBlbHNpZiggIXJlZiAkZ290 IHhvciAhcmVmICRleHBlY3RlZCApIHsgICAgIyBvbmUncyBhIHJlZmVyZW5jZSwgb25lIGlzbid0 CisrICAgICAgICAkb2sgPSAkdGItPm9rKCAwLCAkbmFtZSApOworKyAgICAgICAgJHRiLT5kaWFn KCBfZm9ybWF0X3N0YWNrKHsgdmFscyA9PiBbICRnb3QsICRleHBlY3RlZCBdIH0pICk7CisrICAg IH0KKysgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYm90 aCByZWZlcmVuY2VzCisrICAgICAgICBsb2NhbCBARGF0YV9TdGFjayA9ICgpOworKyAgICAgICAg aWYoIF9kZWVwX2NoZWNrKCAkZ290LCAkZXhwZWN0ZWQgKSApIHsKKysgICAgICAgICAgICAkb2sg PSAkdGItPm9rKCAxLCAkbmFtZSApOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAg ICAgICAgICAgJG9rID0gJHRiLT5vayggMCwgJG5hbWUgKTsKKysgICAgICAgICAgICAkdGItPmRp YWcoIF9mb3JtYXRfc3RhY2soQERhdGFfU3RhY2spICk7CisrICAgICAgICB9CisrICAgIH0KKysK KysgICAgcmV0dXJuICRvazsKKyt9CisrCisrc3ViIF9mb3JtYXRfc3RhY2sgeworKyAgICBteShA U3RhY2spID0gQF87CisrCisrICAgIG15ICR2YXIgICAgICAgPSAnJEZPTyc7CisrICAgIG15ICRk aWRfYXJyb3cgPSAwOworKyAgICBmb3JlYWNoIG15ICRlbnRyeSAoQFN0YWNrKSB7CisrICAgICAg ICBteSAkdHlwZSA9ICRlbnRyeS0+e3R5cGV9IHx8ICcnOworKyAgICAgICAgbXkgJGlkeCA9ICRl bnRyeS0+eydpZHgnfTsKKysgICAgICAgIGlmKCAkdHlwZSBlcSAnSEFTSCcgKSB7CisrICAgICAg ICAgICAgJHZhciAuPSAiLT4iIHVubGVzcyAkZGlkX2Fycm93Kys7CisrICAgICAgICAgICAgJHZh ciAuPSAieyRpZHh9IjsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2lmKCAkdHlwZSBlcSAnQVJS QVknICkgeworKyAgICAgICAgICAgICR2YXIgLj0gIi0+IiB1bmxlc3MgJGRpZF9hcnJvdysrOwor KyAgICAgICAgICAgICR2YXIgLj0gIlskaWR4XSI7CisrICAgICAgICB9CisrICAgICAgICBlbHNp ZiggJHR5cGUgZXEgJ1JFRicgKSB7CisrICAgICAgICAgICAgJHZhciA9ICJcJHskdmFyfSI7Cisr ICAgICAgICB9CisrICAgIH0KKysKKysgICAgbXkgQHZhbHMgPSBAeyAkU3RhY2tbLTFde3ZhbHN9 IH1bIDAsIDEgXTsKKysgICAgbXkgQHZhcnMgPSAoKTsKKysgICAgKCAkdmFyc1swXSA9ICR2YXIg KSA9fiBzL1wkRk9PLyAgICAgXCRnb3QvOworKyAgICAoICR2YXJzWzFdID0gJHZhciApID1+IHMv XCRGT08vXCRleHBlY3RlZC87CisrCisrICAgIG15ICRvdXQgPSAiU3RydWN0dXJlcyBiZWdpbiBk aWZmZXJpbmcgYXQ6XG4iOworKyAgICBmb3JlYWNoIG15ICRpZHggKCAwIC4uICQjdmFscyApIHsK KysgICAgICAgIG15ICR2YWwgPSAkdmFsc1skaWR4XTsKKysgICAgICAgICR2YWxzWyRpZHhdCisr ICAgICAgICAgID0gIWRlZmluZWQgJHZhbCA/ICd1bmRlZicKKysgICAgICAgICAgOiBfZG5lKCR2 YWwpICAgID8gIkRvZXMgbm90IGV4aXN0IgorKyAgICAgICAgICA6IHJlZiAkdmFsICAgICAgPyAi JHZhbCIKKysgICAgICAgICAgOiAgICAgICAgICAgICAgICAgIickdmFsJyI7CisrICAgIH0KKysK KysgICAgJG91dCAuPSAiJHZhcnNbMF0gPSAkdmFsc1swXVxuIjsKKysgICAgJG91dCAuPSAiJHZh cnNbMV0gPSAkdmFsc1sxXVxuIjsKKysKKysgICAgJG91dCA9fiBzL14vICAgIC9tc2c7CisrICAg IHJldHVybiAkb3V0OworK30KKysKKytzdWIgX3R5cGUgeworKyAgICBteSAkdGhpbmcgPSBzaGlm dDsKKysKKysgICAgcmV0dXJuICcnIGlmICFyZWYgJHRoaW5nOworKworKyAgICBmb3IgbXkgJHR5 cGUgKHF3KFJlZ2V4cCBBUlJBWSBIQVNIIFJFRiBTQ0FMQVIgR0xPQiBDT0RFKSkgeworKyAgICAg ICAgcmV0dXJuICR0eXBlIGlmIFVOSVZFUlNBTDo6aXNhKCAkdGhpbmcsICR0eXBlICk7CisrICAg IH0KKysKKysgICAgcmV0dXJuICcnOworK30KKysKKys9YmFjaworKworKworKz1oZWFkMiBEaWFn bm9zdGljcworKworK0lmIHlvdSBwaWNrIHRoZSByaWdodCB0ZXN0IGZ1bmN0aW9uLCB5b3UnbGwg dXN1YWxseSBnZXQgYSBnb29kIGlkZWEgb2YKKyt3aGF0IHdlbnQgd3Jvbmcgd2hlbiBpdCBmYWls ZWQuICBCdXQgc29tZXRpbWVzIGl0IGRvZXNuJ3Qgd29yayBvdXQKKyt0aGF0IHdheS4gIFNvIGhl cmUgd2UgaGF2ZSB3YXlzIGZvciB5b3UgdG8gd3JpdGUgeW91ciBvd24gZGlhZ25vc3RpYworK21l c3NhZ2VzIHdoaWNoIGFyZSBzYWZlciB0aGFuIGp1c3QgQzxwcmludCBTVERFUlI+LgorKworKz1v dmVyIDQKKysKKys9aXRlbSBCPGRpYWc+CisrCisrICBkaWFnKEBkaWFnbm9zdGljX21lc3NhZ2Up OworKworK1ByaW50cyBhIGRpYWdub3N0aWMgbWVzc2FnZSB3aGljaCBpcyBndWFyYW50ZWVkIG5v dCB0byBpbnRlcmZlcmUgd2l0aAorK3Rlc3Qgb3V0cHV0LiAgTGlrZSBDPHByaW50PiBAZGlhZ25v c3RpY19tZXNzYWdlIGlzIHNpbXBseSBjb25jYXRlbmF0ZWQKKyt0b2dldGhlci4KKysKKytSZXR1 cm5zIGZhbHNlLCBzbyBhcyB0byBwcmVzZXJ2ZSBmYWlsdXJlLgorKworK0hhbmR5IGZvciB0aGlz IHNvcnQgb2YgdGhpbmc6CisrCisrICAgIG9rKCBncmVwKC9mb28vLCBAdXNlcnMpLCAiVGhlcmUn cyBhIGZvbyB1c2VyIiApIG9yCisrICAgICAgICBkaWFnKCJTaW5jZSB0aGVyZSdzIG5vIGZvbywg Y2hlY2sgdGhhdCAvZXRjL2JhciBpcyBzZXQgdXAgcmlnaHQiKTsKKysKKyt3aGljaCB3b3VsZCBw cm9kdWNlOgorKworKyAgICBub3Qgb2sgNDIgLSBUaGVyZSdzIGEgZm9vIHVzZXIKKysgICAgIyAg IEZhaWxlZCB0ZXN0ICdUaGVyZSdzIGEgZm9vIHVzZXInCisrICAgICMgICBpbiBmb28udCBhdCBs aW5lIDUyLgorKyAgICAjIFNpbmNlIHRoZXJlJ3Mgbm8gZm9vLCBjaGVjayB0aGF0IC9ldGMvYmFy IGlzIHNldCB1cCByaWdodC4KKysKKytZb3UgbWlnaHQgcmVtZW1iZXIgQzxvaygpIG9yIGRpYWco KT4gd2l0aCB0aGUgbW5lbW9uaWMgQzxvcGVuKCkgb3IKKytkaWUoKT4uCisrCisrQjxOT1RFPiBU aGUgZXhhY3QgZm9ybWF0dGluZyBvZiB0aGUgZGlhZ25vc3RpYyBvdXRwdXQgaXMgc3RpbGwKKytj aGFuZ2luZywgYnV0IGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB3aGF0ZXZlciB5b3UgdGhyb3cgYXQg aXQgd29uJ3QKKytpbnRlcmZlcmUgd2l0aCB0aGUgdGVzdC4KKysKKys9aXRlbSBCPG5vdGU+Cisr CisrICBub3RlKEBkaWFnbm9zdGljX21lc3NhZ2UpOworKworK0xpa2UgZGlhZygpLCBleGNlcHQg dGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgc2VlbiB3aGVuIHRoZSB0ZXN0IGlzIHJ1bgorK2luIGEg aGFybmVzcy4gIEl0IHdpbGwgb25seSBiZSB2aXNpYmxlIGluIHRoZSB2ZXJib3NlIFRBUCBzdHJl YW0uCisrCisrSGFuZHkgZm9yIHB1dHRpbmcgaW4gbm90ZXMgd2hpY2ggbWlnaHQgYmUgdXNlZnVs IGZvciBkZWJ1Z2dpbmcsIGJ1dAorK2Rvbid0IGluZGljYXRlIGEgcHJvYmxlbS4KKysKKysgICAg bm90ZSgiVGVtcGZpbGUgaXMgJHRlbXBmaWxlIik7CisrCisrPWN1dAorKworK3N1YiBkaWFnIHsK KysgICAgcmV0dXJuIFRlc3Q6Ok1vcmUtPmJ1aWxkZXItPmRpYWcoQF8pOworK30KKysKKytzdWIg bm90ZSB7CisrICAgIHJldHVybiBUZXN0OjpNb3JlLT5idWlsZGVyLT5ub3RlKEBfKTsKKyt9Cisr CisrPWl0ZW0gQjxleHBsYWluPgorKworKyAgbXkgQGR1bXAgPSBleHBsYWluIEBkaWFnbm9zdGlj X21lc3NhZ2U7CisrCisrV2lsbCBkdW1wIHRoZSBjb250ZW50cyBvZiBhbnkgcmVmZXJlbmNlcyBp biBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4KKytVc3VhbGx5IHlvdSB3YW50IHRvIHBhc3MgdGhp cyBpbnRvIEM8bm90ZT4gb3IgQzxkaWFnPi4KKysKKytIYW5keSBmb3IgdGhpbmdzIGxpa2UuLi4K KysKKysgICAgaXNfZGVlcGx5KCRoYXZlLCAkd2FudCkgfHwgZGlhZyBleHBsYWluICRoYXZlOwor KworK29yCisrCisrICAgIG5vdGUgZXhwbGFpbiBcJWFyZ3M7CisrICAgIFNvbWU6OkNsYXNzLT5t ZXRob2QoJWFyZ3MpOworKworKz1jdXQKKysKKytzdWIgZXhwbGFpbiB7CisrICAgIHJldHVybiBU ZXN0OjpNb3JlLT5idWlsZGVyLT5leHBsYWluKEBfKTsKKyt9CisrCisrPWJhY2sKKysKKysKKys9 aGVhZDIgQ29uZGl0aW9uYWwgdGVzdHMKKysKKytTb21ldGltZXMgcnVubmluZyBhIHRlc3QgdW5k ZXIgY2VydGFpbiBjb25kaXRpb25zIHdpbGwgY2F1c2UgdGhlCisrdGVzdCBzY3JpcHQgdG8gZGll LiAgQSBjZXJ0YWluIGZ1bmN0aW9uIG9yIG1ldGhvZCBpc24ndCBpbXBsZW1lbnRlZAorKyhzdWNo IGFzIGZvcmsoKSBvbiBNYWNPUyksIHNvbWUgcmVzb3VyY2UgaXNuJ3QgYXZhaWxhYmxlIChsaWtl IGEgCisrbmV0IGNvbm5lY3Rpb24pIG9yIGEgbW9kdWxlIGlzbid0IGF2YWlsYWJsZS4gIEluIHRo ZXNlIGNhc2VzIGl0J3MKKytuZWNlc3NhcnkgdG8gc2tpcCB0ZXN0cywgb3IgZGVjbGFyZSB0aGF0 IHRoZXkgYXJlIHN1cHBvc2VkIHRvIGZhaWwKKytidXQgd2lsbCB3b3JrIGluIHRoZSBmdXR1cmUg KGEgdG9kbyB0ZXN0KS4KKysKKytGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBtZWNoYW5pY3Mgb2Yg c2tpcCBhbmQgdG9kbyB0ZXN0cyBzZWUKKytMPFRlc3Q6Okhhcm5lc3M+LgorKworK1RoZSB3YXkg VGVzdDo6TW9yZSBoYW5kbGVzIHRoaXMgaXMgd2l0aCBhIG5hbWVkIGJsb2NrLiAgQmFzaWNhbGx5 LCBhCisrYmxvY2sgb2YgdGVzdHMgd2hpY2ggY2FuIGJlIHNraXBwZWQgb3ZlciBvciBtYWRlIHRv ZG8uICBJdCdzIGJlc3QgaWYgSQorK2p1c3Qgc2hvdyB5b3UuLi4KKysKKys9b3ZlciA0CisrCisr PWl0ZW0gQjxTS0lQOiBCTE9DSz4KKysKKysgIFNLSVA6IHsKKysgICAgICBza2lwICR3aHksICRo b3dfbWFueSBpZiAkY29uZGl0aW9uOworKworKyAgICAgIC4uLm5vcm1hbCB0ZXN0aW5nIGNvZGUg Z29lcyBoZXJlLi4uCisrICB9CisrCisrVGhpcyBkZWNsYXJlcyBhIGJsb2NrIG9mIHRlc3RzIHRo YXQgbWlnaHQgYmUgc2tpcHBlZCwgJGhvd19tYW55IHRlc3RzCisrdGhlcmUgYXJlLCAkd2h5IGFu ZCB1bmRlciB3aGF0ICRjb25kaXRpb24gdG8gc2tpcCB0aGVtLiAgQW4gZXhhbXBsZSBpcworK3Ro ZSBlYXNpZXN0IHdheSB0byBpbGx1c3RyYXRlOgorKworKyAgICBTS0lQOiB7CisrICAgICAgICBl dmFsIHsgcmVxdWlyZSBIVE1MOjpMaW50IH07CisrCisrICAgICAgICBza2lwICJIVE1MOjpMaW50 IG5vdCBpbnN0YWxsZWQiLCAyIGlmICRAOworKworKyAgICAgICAgbXkgJGxpbnQgPSBuZXcgSFRN TDo6TGludDsKKysgICAgICAgIGlzYV9vayggJGxpbnQsICJIVE1MOjpMaW50IiApOworKworKyAg ICAgICAgJGxpbnQtPnBhcnNlKCAkaHRtbCApOworKyAgICAgICAgaXMoICRsaW50LT5lcnJvcnMs IDAsICJObyBlcnJvcnMgZm91bmQgaW4gSFRNTCIgKTsKKysgICAgfQorKworK0lmIHRoZSB1c2Vy IGRvZXMgbm90IGhhdmUgSFRNTDo6TGludCBpbnN0YWxsZWQsIHRoZSB3aG9sZSBibG9jayBvZgor K2NvZGUgSTx3b24ndCBiZSBydW4gYXQgYWxsPi4gIFRlc3Q6Ok1vcmUgd2lsbCBvdXRwdXQgc3Bl Y2lhbCBvaydzCisrd2hpY2ggVGVzdDo6SGFybmVzcyBpbnRlcnByZXRzIGFzIHNraXBwZWQsIGJ1 dCBwYXNzaW5nLCB0ZXN0cy4KKysKKytJdCdzIGltcG9ydGFudCB0aGF0ICRob3dfbWFueSBhY2N1 cmF0ZWx5IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgdGVzdHMKKytpbiB0aGUgU0tJUCBibG9jayBz byB0aGUgIyBvZiB0ZXN0cyBydW4gd2lsbCBtYXRjaCB1cCB3aXRoIHlvdXIgcGxhbi4KKytJZiB5 b3VyIHBsYW4gaXMgQzxub19wbGFuPiAkaG93X21hbnkgaXMgb3B0aW9uYWwgYW5kIHdpbGwgZGVm YXVsdCB0byAxLgorKworK0l0J3MgcGVyZmVjdGx5IHNhZmUgdG8gbmVzdCBTS0lQIGJsb2Nrcy4g IEVhY2ggU0tJUCBibG9jayBtdXN0IGhhdmUKKyt0aGUgbGFiZWwgQzxTS0lQPiwgb3IgVGVzdDo6 TW9yZSBjYW4ndCB3b3JrIGl0cyBtYWdpYy4KKysKKytZb3UgZG9uJ3Qgc2tpcCB0ZXN0cyB3aGlj aCBhcmUgZmFpbGluZyBiZWNhdXNlIHRoZXJlJ3MgYSBidWcgaW4geW91cgorK3Byb2dyYW0sIG9y IGZvciB3aGljaCB5b3UgZG9uJ3QgeWV0IGhhdmUgY29kZSB3cml0dGVuLiAgRm9yIHRoYXQgeW91 CisrdXNlIFRPRE8uICBSZWFkIG9uLgorKworKz1jdXQKKysKKysjIyBubyBjcml0aWMgKFN1YnJv dXRpbmVzOjpSZXF1aXJlRmluYWxSZXR1cm4pCisrc3ViIHNraXAgeworKyAgICBteSggJHdoeSwg JGhvd19tYW55ICkgPSBAXzsKKysgICAgbXkgJHRiID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsKKysK KysgICAgdW5sZXNzKCBkZWZpbmVkICRob3dfbWFueSApIHsKKysgICAgICAgICMgJGhvd19tYW55 IGNhbiBvbmx5IGJlIGF2b2lkZWQgd2hlbiBub19wbGFuIGlzIGluIHVzZS4KKysgICAgICAgIF9j YXJwICJza2lwKCkgbmVlZHMgdG8ga25vdyBcJGhvd19tYW55IHRlc3RzIGFyZSBpbiB0aGUgYmxv Y2siCisrICAgICAgICAgIHVubGVzcyAkdGItPmhhc19wbGFuIGVxICdub19wbGFuJzsKKysgICAg ICAgICRob3dfbWFueSA9IDE7CisrICAgIH0KKysKKysgICAgaWYoIGRlZmluZWQgJGhvd19tYW55 IGFuZCAkaG93X21hbnkgPX4gL1xELyApIHsKKysgICAgICAgIF9jYXJwCisrICAgICAgICAgICJz a2lwKCkgd2FzIHBhc3NlZCBhIG5vbi1udW1lcmljIG51bWJlciBvZiB0ZXN0cy4gIERpZCB5b3Ug Z2V0IHRoZSBhcmd1bWVudHMgYmFja3dhcmRzPyI7CisrICAgICAgICAkaG93X21hbnkgPSAxOwor KyAgICB9CisrCisrICAgIGZvciggMSAuLiAkaG93X21hbnkgKSB7CisrICAgICAgICAkdGItPnNr aXAoJHdoeSk7CisrICAgIH0KKysKKysgICAgbm8gd2FybmluZ3MgJ2V4aXRpbmcnOworKyAgICBs YXN0IFNLSVA7CisrfQorKworKz1pdGVtIEI8VE9ETzogQkxPQ0s+CisrCisrICAgIFRPRE86IHsK KysgICAgICAgIGxvY2FsICRUT0RPID0gJHdoeSBpZiAkY29uZGl0aW9uOworKworKyAgICAgICAg Li4ubm9ybWFsIHRlc3RpbmcgY29kZSBnb2VzIGhlcmUuLi4KKysgICAgfQorKworK0RlY2xhcmVz IGEgYmxvY2sgb2YgdGVzdHMgeW91IGV4cGVjdCB0byBmYWlsIGFuZCAkd2h5LiAgUGVyaGFwcyBp dCdzCisrYmVjYXVzZSB5b3UgaGF2ZW4ndCBmaXhlZCBhIGJ1ZyBvciBoYXZlbid0IGZpbmlzaGVk IGEgbmV3IGZlYXR1cmU6CisrCisrICAgIFRPRE86IHsKKysgICAgICAgIGxvY2FsICRUT0RPID0g IlVSSTo6R2VsbGVyIG5vdCBmaW5pc2hlZCI7CisrCisrICAgICAgICBteSAkY2FyZCA9ICJFaWdo dCBvZiBjbHVicyI7CisrICAgICAgICBpcyggVVJJOjpHZWxsZXItPnlvdXJfY2FyZCwgJGNhcmQs ICdJcyBUSElTIHlvdXIgY2FyZD8nICk7CisrCisrICAgICAgICBteSAkc3Bvb247CisrICAgICAg ICBVUkk6OkdlbGxlci0+YmVuZF9zcG9vbjsKKysgICAgICAgIGlzKCAkc3Bvb24sICdiZW50Jywg ICAgIlNwb29uIGJlbmRpbmcsIHRoYXQncyBvcmlnaW5hbCIgKTsKKysgICAgfQorKworK1dpdGgg YSB0b2RvIGJsb2NrLCB0aGUgdGVzdHMgaW5zaWRlIGFyZSBleHBlY3RlZCB0byBmYWlsLiAgVGVz dDo6TW9yZQorK3dpbGwgcnVuIHRoZSB0ZXN0cyBub3JtYWxseSwgYnV0IHByaW50IG91dCBzcGVj aWFsIGZsYWdzIGluZGljYXRpbmcKKyt0aGV5IGFyZSAidG9kbyIuICBUZXN0OjpIYXJuZXNzIHdp bGwgaW50ZXJwcmV0IGZhaWx1cmVzIGFzIGJlaW5nIG9rLgorK1Nob3VsZCBhbnl0aGluZyBzdWNj ZWVkLCBpdCB3aWxsIHJlcG9ydCBpdCBhcyBhbiB1bmV4cGVjdGVkIHN1Y2Nlc3MuCisrWW91IHRo ZW4ga25vdyB0aGUgdGhpbmcgeW91IGhhZCB0b2RvIGlzIGRvbmUgYW5kIGNhbiByZW1vdmUgdGhl CisrVE9ETyBmbGFnLgorKworK1RoZSBuaWNlIHBhcnQgYWJvdXQgdG9kbyB0ZXN0cywgYXMgb3Bw b3NlZCB0byBzaW1wbHkgY29tbWVudGluZyBvdXQgYQorK2Jsb2NrIG9mIHRlc3RzLCBpcyBpdCdz IGxpa2UgaGF2aW5nIGEgcHJvZ3JhbW1hdGljIHRvZG8gbGlzdC4gIFlvdSBrbm93CisraG93IG11 Y2ggd29yayBpcyBsZWZ0IHRvIGJlIGRvbmUsIHlvdSdyZSBhd2FyZSBvZiB3aGF0IGJ1Z3MgdGhl cmUgYXJlLAorK2FuZCB5b3UnbGwga25vdyBpbW1lZGlhdGVseSB3aGVuIHRoZXkncmUgZml4ZWQu CisrCisrT25jZSBhIHRvZG8gdGVzdCBzdGFydHMgc3VjY2VlZGluZywgc2ltcGx5IG1vdmUgaXQg b3V0c2lkZSB0aGUgYmxvY2suCisrV2hlbiB0aGUgYmxvY2sgaXMgZW1wdHksIGRlbGV0ZSBpdC4K KysKKysKKys9aXRlbSBCPHRvZG9fc2tpcD4KKysKKysgICAgVE9ETzogeworKyAgICAgICAgdG9k b19za2lwICR3aHksICRob3dfbWFueSBpZiAkY29uZGl0aW9uOworKworKyAgICAgICAgLi4ubm9y bWFsIHRlc3RpbmcgY29kZS4uLgorKyAgICB9CisrCisrV2l0aCB0b2RvIHRlc3RzLCBpdCdzIGJl c3QgdG8gaGF2ZSB0aGUgdGVzdHMgYWN0dWFsbHkgcnVuLiAgVGhhdCB3YXkKKyt5b3UnbGwga25v dyB3aGVuIHRoZXkgc3RhcnQgcGFzc2luZy4gIFNvbWV0aW1lcyB0aGlzIGlzbid0IHBvc3NpYmxl LgorK09mdGVuIGEgZmFpbGluZyB0ZXN0IHdpbGwgY2F1c2UgdGhlIHdob2xlIHByb2dyYW0gdG8g ZGllIG9yIGhhbmcsIGV2ZW4KKytpbnNpZGUgYW4gQzxldmFsIEJMT0NLPiB3aXRoIGFuZCB1c2lu ZyBDPGFsYXJtPi4gIEluIHRoZXNlIGV4dHJlbWUKKytjYXNlcyB5b3UgaGF2ZSBubyBjaG9pY2Ug YnV0IHRvIHNraXAgb3ZlciB0aGUgYnJva2VuIHRlc3RzIGVudGlyZWx5LgorKworK1RoZSBzeW50 YXggYW5kIGJlaGF2aW9yIGlzIHNpbWlsYXIgdG8gYSBDPFNLSVA6IEJMT0NLPiBleGNlcHQgdGhl CisrdGVzdHMgd2lsbCBiZSBtYXJrZWQgYXMgZmFpbGluZyBidXQgdG9kby4gIFRlc3Q6Okhhcm5l c3Mgd2lsbAorK2ludGVycHJldCB0aGVtIGFzIHBhc3NpbmcuCisrCisrPWN1dAorKworK3N1YiB0 b2RvX3NraXAgeworKyAgICBteSggJHdoeSwgJGhvd19tYW55ICkgPSBAXzsKKysgICAgbXkgJHRi ID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsKKysKKysgICAgdW5sZXNzKCBkZWZpbmVkICRob3dfbWFu eSApIHsKKysgICAgICAgICMgJGhvd19tYW55IGNhbiBvbmx5IGJlIGF2b2lkZWQgd2hlbiBub19w bGFuIGlzIGluIHVzZS4KKysgICAgICAgIF9jYXJwICJ0b2RvX3NraXAoKSBuZWVkcyB0byBrbm93 IFwkaG93X21hbnkgdGVzdHMgYXJlIGluIHRoZSBibG9jayIKKysgICAgICAgICAgdW5sZXNzICR0 Yi0+aGFzX3BsYW4gZXEgJ25vX3BsYW4nOworKyAgICAgICAgJGhvd19tYW55ID0gMTsKKysgICAg fQorKworKyAgICBmb3IoIDEgLi4gJGhvd19tYW55ICkgeworKyAgICAgICAgJHRiLT50b2RvX3Nr aXAoJHdoeSk7CisrICAgIH0KKysKKysgICAgbm8gd2FybmluZ3MgJ2V4aXRpbmcnOworKyAgICBs YXN0IFRPRE87CisrfQorKworKz1pdGVtIFdoZW4gZG8gSSB1c2UgU0tJUCB2cy4gVE9ETz8KKysK KytCPElmIGl0J3Mgc29tZXRoaW5nIHRoZSB1c2VyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRvPiwg dXNlIFNLSVAuCisrVGhpcyBpbmNsdWRlcyBvcHRpb25hbCBtb2R1bGVzIHRoYXQgYXJlbid0IGlu c3RhbGxlZCwgcnVubmluZyB1bmRlcgorK2FuIE9TIHRoYXQgZG9lc24ndCBoYXZlIHNvbWUgZmVh dHVyZSAobGlrZSBmb3JrKCkgb3Igc3ltbGlua3MpLCBvciBtYXliZQorK3lvdSBuZWVkIGFuIElu dGVybmV0IGNvbm5lY3Rpb24gYW5kIG9uZSBpc24ndCBhdmFpbGFibGUuCisrCisrQjxJZiBpdCdz IHNvbWV0aGluZyB0aGUgcHJvZ3JhbW1lciBoYXNuJ3QgZG9uZSB5ZXQ+LCB1c2UgVE9ETy4gIFRo aXMKKytpcyBmb3IgYW55IGNvZGUgeW91IGhhdmVuJ3Qgd3JpdHRlbiB5ZXQsIG9yIGJ1Z3MgeW91 IGhhdmUgeWV0IHRvIGZpeCwKKytidXQgd2FudCB0byBwdXQgdGVzdHMgaW4geW91ciB0ZXN0aW5n IHNjcmlwdCAoYWx3YXlzIGEgZ29vZCBpZGVhKS4KKysKKysKKys9YmFjaworKworKworKz1oZWFk MiBUZXN0IGNvbnRyb2wKKysKKys9b3ZlciA0CisrCisrPWl0ZW0gQjxCQUlMX09VVD4KKysKKysg ICAgQkFJTF9PVVQoJHJlYXNvbik7CisrCisrSW5kaWNhdGVzIHRvIHRoZSBoYXJuZXNzIHRoYXQg dGhpbmdzIGFyZSBnb2luZyBzbyBiYWRseSBhbGwgdGVzdGluZworK3Nob3VsZCB0ZXJtaW5hdGUu ICBUaGlzIGluY2x1ZGVzIHRoZSBydW5uaW5nIG9mIGFueSBhZGRpdGlvbmFsIHRlc3Qgc2NyaXB0 cy4KKysKKytUaGlzIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gdGVzdGluZyBjYW5ub3QgY29udGlu dWUgc3VjaCBhcyBhIGNyaXRpY2FsCisrbW9kdWxlIGZhaWxpbmcgdG8gY29tcGlsZSBvciBhIG5l Y2Vzc2FyeSBleHRlcm5hbCB1dGlsaXR5IG5vdCBiZWluZworK2F2YWlsYWJsZSBzdWNoIGFzIGEg ZGF0YWJhc2UgY29ubmVjdGlvbiBmYWlsaW5nLgorKworK1RoZSB0ZXN0IHdpbGwgZXhpdCB3aXRo IDI1NS4KKysKKytGb3IgZXZlbiBiZXR0ZXIgY29udHJvbCBsb29rIGF0IEw8VGVzdDo6TW9zdD4u CisrCisrPWN1dAorKworK3N1YiBCQUlMX09VVCB7CisrICAgIG15ICRyZWFzb24gPSBzaGlmdDsK KysgICAgbXkgJHRiICAgICA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CisrCisrICAgICR0Yi0+QkFJ TF9PVVQoJHJlYXNvbik7CisrfQorKworKz1iYWNrCisrCisrCisrPWhlYWQyIERpc2NvdXJhZ2Vk IGNvbXBhcmlzb24gZnVuY3Rpb25zCisrCisrVGhlIHVzZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0 aW9ucyBpcyBkaXNjb3VyYWdlZCBhcyB0aGV5IGFyZSBub3QKKythY3R1YWxseSB0ZXN0aW5nIGZ1 bmN0aW9ucyBhbmQgcHJvZHVjZSBubyBkaWFnbm9zdGljcyB0byBoZWxwIGZpZ3VyZQorK291dCB3 aGF0IHdlbnQgd3JvbmcuICBUaGV5IHdlcmUgd3JpdHRlbiBiZWZvcmUgaXNfZGVlcGx5KCkgZXhp c3RlZAorK2JlY2F1c2UgSSBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyB0byBkaXNwbGF5IGEgdXNl ZnVsIGRpZmYgb2YgdHdvCisrYXJiaXRyYXJ5IGRhdGEgc3RydWN0dXJlcy4KKysKKytUaGVzZSBm dW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCBpbnNpZGUgYW4gb2soKS4KKysKKysgICAgb2soIGVx X2FycmF5KFxAZ290LCBcQGV4cGVjdGVkKSApOworKworK0M8aXNfZGVlcGx5KCk+IGNhbiBkbyB0 aGF0IGJldHRlciBhbmQgd2l0aCBkaWFnbm9zdGljcy4gIAorKworKyAgICBpc19kZWVwbHkoIFxA Z290LCBcQGV4cGVjdGVkICk7CisrCisrVGhleSBtYXkgYmUgZGVwcmVjYXRlZCBpbiBmdXR1cmUg dmVyc2lvbnMuCisrCisrPW92ZXIgNAorKworKz1pdGVtIEI8ZXFfYXJyYXk+CisrCisrICBteSAk aXNfZXEgPSBlcV9hcnJheShcQGdvdCwgXEBleHBlY3RlZCk7CisrCisrQ2hlY2tzIGlmIHR3byBh cnJheXMgYXJlIGVxdWl2YWxlbnQuICBUaGlzIGlzIGEgZGVlcCBjaGVjaywgc28KKyttdWx0aS1s ZXZlbCBzdHJ1Y3R1cmVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KKysKKys9Y3V0CisrCisrIycj Cisrc3ViIGVxX2FycmF5IHsKKysgICAgbG9jYWwgQERhdGFfU3RhY2sgPSAoKTsKKysgICAgX2Rl ZXBfY2hlY2soQF8pOworK30KKysKKytzdWIgX2VxX2FycmF5IHsKKysgICAgbXkoICRhMSwgJGEy ICkgPSBAXzsKKysKKysgICAgaWYoIGdyZXAgX3R5cGUoJF8pIG5lICdBUlJBWScsICRhMSwgJGEy ICkgeworKyAgICAgICAgd2FybiAiZXFfYXJyYXkgcGFzc2VkIGEgbm9uLWFycmF5IHJlZiI7Cisr ICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICByZXR1cm4gMSBpZiAkYTEgZXEgJGEy OworKworKyAgICBteSAkb2sgPSAxOworKyAgICBteSAkbWF4ID0gJCMkYTEgPiAkIyRhMiA/ICQj JGExIDogJCMkYTI7CisrICAgIGZvciggMCAuLiAkbWF4ICkgeworKyAgICAgICAgbXkgJGUxID0g JF8gPiAkIyRhMSA/ICRETkUgOiAkYTEtPlskX107CisrICAgICAgICBteSAkZTIgPSAkXyA+ICQj JGEyID8gJERORSA6ICRhMi0+WyRfXTsKKysKKysgICAgICAgIG5leHQgaWYgX2VxdWFsX25vbnJl ZnMoJGUxLCAkZTIpOworKworKyAgICAgICAgcHVzaCBARGF0YV9TdGFjaywgeyB0eXBlID0+ICdB UlJBWScsIGlkeCA9PiAkXywgdmFscyA9PiBbICRlMSwgJGUyIF0gfTsKKysgICAgICAgICRvayA9 IF9kZWVwX2NoZWNrKCAkZTEsICRlMiApOworKyAgICAgICAgcG9wIEBEYXRhX1N0YWNrIGlmICRv azsKKysKKysgICAgICAgIGxhc3QgdW5sZXNzICRvazsKKysgICAgfQorKworKyAgICByZXR1cm4g JG9rOworK30KKysKKytzdWIgX2VxdWFsX25vbnJlZnMgeworKyAgICBteSggJGUxLCAkZTIgKSA9 IEBfOworKworKyAgICByZXR1cm4gaWYgcmVmICRlMSBvciByZWYgJGUyOworKworKyAgICBpZiAo IGRlZmluZWQgJGUxICkgeworKyAgICAgICAgcmV0dXJuIDEgaWYgZGVmaW5lZCAkZTIgYW5kICRl MSBlcSAkZTI7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXR1cm4gMSBpZiAhZGVm aW5lZCAkZTI7CisrICAgIH0KKysKKysgICAgcmV0dXJuOworK30KKysKKytzdWIgX2RlZXBfY2hl Y2sgeworKyAgICBteSggJGUxLCAkZTIgKSA9IEBfOworKyAgICBteSAkdGIgPSBUZXN0OjpNb3Jl LT5idWlsZGVyOworKworKyAgICBteSAkb2sgPSAwOworKworKyAgICAjIEVmZmVjdGl2ZWx5IHR1 cm4gJVJlZnNfU2VlbiBpbnRvIGEgc3RhY2suICBUaGlzIGF2b2lkcyBwaWNraW5nIHVwCisrICAg ICMgdGhlIHNhbWUgcmVmZXJlbmNlZCB1c2VkIHR3aWNlIChzdWNoIGFzIFtcJGEsIFwkYV0pIHRv IGJlIGNvbnNpZGVyZWQKKysgICAgIyBjaXJjdWxhci4KKysgICAgbG9jYWwgJVJlZnNfU2VlbiA9 ICVSZWZzX1NlZW47CisrCisrICAgIHsKKysgICAgICAgICR0Yi0+X3Vub3ZlcmxvYWRfc3RyKCBc JGUxLCBcJGUyICk7CisrCisrICAgICAgICAjIEVpdGhlciB0aGV5J3JlIGJvdGggcmVmZXJlbmNl cyBvciBib3RoIG5vdC4KKysgICAgICAgIG15ICRzYW1lX3JlZiA9ICEoICFyZWYgJGUxIHhvciAh cmVmICRlMiApOworKyAgICAgICAgbXkgJG5vdF9yZWYgPSAoICFyZWYgJGUxIGFuZCAhcmVmICRl MiApOworKworKyAgICAgICAgaWYoIGRlZmluZWQgJGUxIHhvciBkZWZpbmVkICRlMiApIHsKKysg ICAgICAgICAgICAkb2sgPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzaWYoICFkZWZpbmVk ICRlMSBhbmQgIWRlZmluZWQgJGUyICkgeworKyAgICAgICAgICAgICMgU2hvcnRjdXQgaWYgdGhl eSdyZSBib3RoIHVuZGVmaW5lZC4KKysgICAgICAgICAgICAkb2sgPSAxOworKyAgICAgICAgfQor KyAgICAgICAgZWxzaWYoIF9kbmUoJGUxKSB4b3IgX2RuZSgkZTIpICkgeworKyAgICAgICAgICAg ICRvayA9IDA7CisrICAgICAgICB9CisrICAgICAgICBlbHNpZiggJHNhbWVfcmVmIGFuZCggJGUx IGVxICRlMiApICkgeworKyAgICAgICAgICAgICRvayA9IDE7CisrICAgICAgICB9CisrICAgICAg ICBlbHNpZigkbm90X3JlZikgeworKyAgICAgICAgICAgIHB1c2ggQERhdGFfU3RhY2ssIHsgdHlw ZSA9PiAnJywgdmFscyA9PiBbICRlMSwgJGUyIF0gfTsKKysgICAgICAgICAgICAkb2sgPSAwOwor KyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgaWYoICRSZWZzX1NlZW57 JGUxfSApIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICRSZWZzX1NlZW57JGUxfSBlcSAkZTI7 CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICAk UmVmc19TZWVueyRlMX0gPSAiJGUyIjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAg bXkgJHR5cGUgPSBfdHlwZSgkZTEpOworKyAgICAgICAgICAgICR0eXBlID0gJ0RJRkZFUkVOVCcg dW5sZXNzIF90eXBlKCRlMikgZXEgJHR5cGU7CisrCisrICAgICAgICAgICAgaWYoICR0eXBlIGVx ICdESUZGRVJFTlQnICkgeworKyAgICAgICAgICAgICAgICBwdXNoIEBEYXRhX1N0YWNrLCB7IHR5 cGUgPT4gJHR5cGUsIHZhbHMgPT4gWyAkZTEsICRlMiBdIH07CisrICAgICAgICAgICAgICAgICRv ayA9IDA7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2lmKCAkdHlwZSBlcSAnQVJS QVknICkgeworKyAgICAgICAgICAgICAgICAkb2sgPSBfZXFfYXJyYXkoICRlMSwgJGUyICk7Cisr ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2lmKCAkdHlwZSBlcSAnSEFTSCcgKSB7Cisr ICAgICAgICAgICAgICAgICRvayA9IF9lcV9oYXNoKCAkZTEsICRlMiApOworKyAgICAgICAgICAg IH0KKysgICAgICAgICAgICBlbHNpZiggJHR5cGUgZXEgJ1JFRicgKSB7CisrICAgICAgICAgICAg ICAgIHB1c2ggQERhdGFfU3RhY2ssIHsgdHlwZSA9PiAkdHlwZSwgdmFscyA9PiBbICRlMSwgJGUy IF0gfTsKKysgICAgICAgICAgICAgICAgJG9rID0gX2RlZXBfY2hlY2soICQkZTEsICQkZTIgKTsK KysgICAgICAgICAgICAgICAgcG9wIEBEYXRhX1N0YWNrIGlmICRvazsKKysgICAgICAgICAgICB9 CisrICAgICAgICAgICAgZWxzaWYoICR0eXBlIGVxICdTQ0FMQVInICkgeworKyAgICAgICAgICAg ICAgICBwdXNoIEBEYXRhX1N0YWNrLCB7IHR5cGUgPT4gJ1JFRicsIHZhbHMgPT4gWyAkZTEsICRl MiBdIH07CisrICAgICAgICAgICAgICAgICRvayA9IF9kZWVwX2NoZWNrKCAkJGUxLCAkJGUyICk7 CisrICAgICAgICAgICAgICAgIHBvcCBARGF0YV9TdGFjayBpZiAkb2s7CisrICAgICAgICAgICAg fQorKyAgICAgICAgICAgIGVsc2lmKCR0eXBlKSB7CisrICAgICAgICAgICAgICAgIHB1c2ggQERh dGFfU3RhY2ssIHsgdHlwZSA9PiAkdHlwZSwgdmFscyA9PiBbICRlMSwgJGUyIF0gfTsKKysgICAg ICAgICAgICAgICAgJG9rID0gMDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7 CisrICAgICAgICAgICAgICAgIF93aG9hKCAxLCAiTm8gdHlwZSBpbiBfZGVlcF9jaGVjayIgKTsK KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuICRvazsK Kyt9CisrCisrc3ViIF93aG9hIHsKKysgICAgbXkoICRjaGVjaywgJGRlc2MgKSA9IEBfOworKyAg ICBpZigkY2hlY2spIHsKKysgICAgICAgIGRpZSA8PCJXSE9BIjsKKytXSE9BISAgJGRlc2MKKytU aGlzIHNob3VsZCBuZXZlciBoYXBwZW4hICBQbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yIGltbWVk aWF0ZWx5IQorK1dIT0EKKysgICAgfQorK30KKysKKys9aXRlbSBCPGVxX2hhc2g+CisrCisrICBt eSAkaXNfZXEgPSBlcV9oYXNoKFwlZ290LCBcJWV4cGVjdGVkKTsKKysKKytEZXRlcm1pbmVzIGlm IHRoZSB0d28gaGFzaGVzIGNvbnRhaW4gdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzLiAgVGhpcwor K2lzIGEgZGVlcCBjaGVjay4KKysKKys9Y3V0CisrCisrc3ViIGVxX2hhc2ggeworKyAgICBsb2Nh bCBARGF0YV9TdGFjayA9ICgpOworKyAgICByZXR1cm4gX2RlZXBfY2hlY2soQF8pOworK30KKysK KytzdWIgX2VxX2hhc2ggeworKyAgICBteSggJGExLCAkYTIgKSA9IEBfOworKworKyAgICBpZigg Z3JlcCBfdHlwZSgkXykgbmUgJ0hBU0gnLCAkYTEsICRhMiApIHsKKysgICAgICAgIHdhcm4gImVx X2hhc2ggcGFzc2VkIGEgbm9uLWhhc2ggcmVmIjsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9 CisrCisrICAgIHJldHVybiAxIGlmICRhMSBlcSAkYTI7CisrCisrICAgIG15ICRvayA9IDE7Cisr ICAgIG15ICRiaWdnZXIgPSBrZXlzICUkYTEgPiBrZXlzICUkYTIgPyAkYTEgOiAkYTI7CisrICAg IGZvcmVhY2ggbXkgJGsgKCBrZXlzICUkYmlnZ2VyICkgeworKyAgICAgICAgbXkgJGUxID0gZXhp c3RzICRhMS0+eyRrfSA/ICRhMS0+eyRrfSA6ICRETkU7CisrICAgICAgICBteSAkZTIgPSBleGlz dHMgJGEyLT57JGt9ID8gJGEyLT57JGt9IDogJERORTsKKysKKysgICAgICAgIG5leHQgaWYgX2Vx dWFsX25vbnJlZnMoJGUxLCAkZTIpOworKworKyAgICAgICAgcHVzaCBARGF0YV9TdGFjaywgeyB0 eXBlID0+ICdIQVNIJywgaWR4ID0+ICRrLCB2YWxzID0+IFsgJGUxLCAkZTIgXSB9OworKyAgICAg ICAgJG9rID0gX2RlZXBfY2hlY2soICRlMSwgJGUyICk7CisrICAgICAgICBwb3AgQERhdGFfU3Rh Y2sgaWYgJG9rOworKworKyAgICAgICAgbGFzdCB1bmxlc3MgJG9rOworKyAgICB9CisrCisrICAg IHJldHVybiAkb2s7CisrfQorKworKz1pdGVtIEI8ZXFfc2V0PgorKworKyAgbXkgJGlzX2VxID0g ZXFfc2V0KFxAZ290LCBcQGV4cGVjdGVkKTsKKysKKytTaW1pbGFyIHRvIGVxX2FycmF5KCksIGV4 Y2VwdCB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGlzIEI8bm90PgorK2ltcG9ydGFudC4gIFRo aXMgaXMgYSBkZWVwIGNoZWNrLCBidXQgdGhlIGlycmVsZXZhbmN5IG9mIG9yZGVyIG9ubHkKKyth cHBsaWVzIHRvIHRoZSB0b3AgbGV2ZWwuCisrCisrICAgIG9rKCBlcV9zZXQoXEBnb3QsIFxAZXhw ZWN0ZWQpICk7CisrCisrSXMgYmV0dGVyIHdyaXR0ZW46CisrCisrICAgIGlzX2RlZXBseSggW3Nv cnQgQGdvdF0sIFtzb3J0IEBleHBlY3RlZF0gKTsKKysKKytCPE5PVEU+IEJ5IGhpc3RvcmljYWwg YWNjaWRlbnQsIHRoaXMgaXMgbm90IGEgdHJ1ZSBzZXQgY29tcGFyaXNvbi4KKytXaGlsZSB0aGUg b3JkZXIgb2YgZWxlbWVudHMgZG9lcyBub3QgbWF0dGVyLCBkdXBsaWNhdGUgZWxlbWVudHMgZG8u CisrCisrQjxOT1RFPiBlcV9zZXQoKSBkb2VzIG5vdCBrbm93IGhvdyB0byBkZWFsIHdpdGggcmVm ZXJlbmNlcyBhdCB0aGUgdG9wCisrbGV2ZWwuICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUg b2YgYSBjb21wYXJpc29uIHdoaWNoIG1pZ2h0IG5vdCB3b3JrOgorKworKyAgICBlcV9zZXQoW1wx LCBcMl0sIFtcMiwgXDFdKTsKKysKKytMPFRlc3Q6OkRlZXA+IGNvbnRhaW5zIG11Y2ggYmV0dGVy IHNldCBjb21wYXJpc29uIGZ1bmN0aW9ucy4KKysKKys9Y3V0CisrCisrc3ViIGVxX3NldCB7Cisr ICAgIG15KCAkYTEsICRhMiApID0gQF87CisrICAgIHJldHVybiAwIHVubGVzcyBAJGExID09IEAk YTI7CisrCisrICAgIG5vIHdhcm5pbmdzICd1bmluaXRpYWxpemVkJzsKKysKKysgICAgIyBJdCBy ZWFsbHkgZG9lc24ndCBtYXR0ZXIgaG93IHdlIHNvcnQgdGhlbSwgYXMgbG9uZyBhcyBib3RoIGFy cmF5cyBhcmUKKysgICAgIyBzb3J0ZWQgd2l0aCB0aGUgc2FtZSBhbGdvcml0aG0uCisrICAgICMK KysgICAgIyBFbnN1cmUgdGhhdCByZWZlcmVuY2VzIGFyZSBub3QgYWNjaWRlbnRhbGx5IHRyZWF0 ZWQgdGhlIHNhbWUgYXMgYQorKyAgICAjIHN0cmluZyBjb250YWluaW5nIHRoZSByZWZlcmVuY2Uu CisrICAgICMKKysgICAgIyBIYXZlIHRvIGlubGluZSB0aGUgc29ydCByb3V0aW5lIGR1ZSB0byBh IHRocmVhZGluZy9zb3J0IGJ1Zy4KKysgICAgIyBTZWUgW3J0LmNwYW4ub3JnIDY3ODJdCisrICAg ICMKKysgICAgIyBJIGRvbid0IGtub3cgaG93IHJlZmVyZW5jZXMgd291bGQgYmUgc29ydGVkIHNv IHdlIGp1c3QgZG9uJ3Qgc29ydAorKyAgICAjIHRoZW0uICBUaGlzIG1lYW5zIGVxX3NldCBkb2Vz bid0IHJlYWxseSB3b3JrIHdpdGggcmVmcy4KKysgICAgcmV0dXJuIGVxX2FycmF5KAorKyAgICAg ICAgWyBncmVwKCByZWYsIEAkYTEgKSwgc29ydCggZ3JlcCggIXJlZiwgQCRhMSApICkgXSwKKysg ICAgICAgIFsgZ3JlcCggcmVmLCBAJGEyICksIHNvcnQoIGdyZXAoICFyZWYsIEAkYTIgKSApIF0s CisrICAgICk7CisrfQorKworKz1iYWNrCisrCisrCisrPWhlYWQyIEV4dGVuZGluZyBhbmQgRW1i ZWRkaW5nIFRlc3Q6Ok1vcmUKKysKKytTb21ldGltZXMgdGhlIFRlc3Q6Ok1vcmUgaW50ZXJmYWNl IGlzbid0IHF1aXRlIGVub3VnaC4gIEZvcnR1bmF0ZWx5LAorK1Rlc3Q6Ok1vcmUgaXMgYnVpbHQg b24gdG9wIG9mIFRlc3Q6OkJ1aWxkZXIgd2hpY2ggcHJvdmlkZXMgYSBzaW5nbGUsCisrdW5pZmll ZCBiYWNrZW5kIGZvciBhbnkgdGVzdCBsaWJyYXJ5IHRvIHVzZS4gIFRoaXMgbWVhbnMgdHdvIHRl c3QKKytsaWJyYXJpZXMgd2hpY2ggYm90aCB1c2UgVGVzdDo6QnVpbGRlciBCPGNhbiBiZSB1c2Vk IHRvZ2V0aGVyIGluIHRoZQorK3NhbWUgcHJvZ3JhbT4uCisrCisrSWYgeW91IHNpbXBseSB3YW50 IHRvIGRvIGEgbGl0dGxlIHR3ZWFraW5nIG9mIGhvdyB0aGUgdGVzdHMgYmVoYXZlLAorK3lvdSBj YW4gYWNjZXNzIHRoZSB1bmRlcmx5aW5nIFRlc3Q6OkJ1aWxkZXIgb2JqZWN0IGxpa2Ugc286Cisr CisrPW92ZXIgNAorKworKz1pdGVtIEI8YnVpbGRlcj4KKysKKysgICAgbXkgJHRlc3RfYnVpbGRl ciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CisrCisrUmV0dXJucyB0aGUgVGVzdDo6QnVpbGRlciBv YmplY3QgdW5kZXJseWluZyBUZXN0OjpNb3JlIGZvciB5b3UgdG8gcGxheQorK3dpdGguCisrCisr CisrPWJhY2sKKysKKysKKys9aGVhZDEgRVhJVCBDT0RFUworKworK0lmIGFsbCB5b3VyIHRlc3Rz IHBhc3NlZCwgVGVzdDo6QnVpbGRlciB3aWxsIGV4aXQgd2l0aCB6ZXJvICh3aGljaCBpcworK25v cm1hbCkuICBJZiBhbnl0aGluZyBmYWlsZWQgaXQgd2lsbCBleGl0IHdpdGggaG93IG1hbnkgZmFp bGVkLiAgSWYKKyt5b3UgcnVuIGxlc3MgKG9yIG1vcmUpIHRlc3RzIHRoYW4geW91IHBsYW5uZWQs IHRoZSBtaXNzaW5nIChvciBleHRyYXMpCisrd2lsbCBiZSBjb25zaWRlcmVkIGZhaWx1cmVzLiAg SWYgbm8gdGVzdHMgd2VyZSBldmVyIHJ1biBUZXN0OjpCdWlsZGVyCisrd2lsbCB0aHJvdyBhIHdh cm5pbmcgYW5kIGV4aXQgd2l0aCAyNTUuICBJZiB0aGUgdGVzdCBkaWVkLCBldmVuIGFmdGVyCisr aGF2aW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYWxsIGl0cyB0ZXN0cywgaXQgd2lsbCBzdGls bCBiZQorK2NvbnNpZGVyZWQgYSBmYWlsdXJlIGFuZCB3aWxsIGV4aXQgd2l0aCAyNTUuCisrCisr U28gdGhlIGV4aXQgY29kZXMgYXJlLi4uCisrCisrICAgIDAgICAgICAgICAgICAgICAgICAgYWxs IHRlc3RzIHN1Y2Nlc3NmdWwKKysgICAgMjU1ICAgICAgICAgICAgICAgICB0ZXN0IGRpZWQgb3Ig YWxsIHBhc3NlZCBidXQgd3JvbmcgIyBvZiB0ZXN0cyBydW4KKysgICAgYW55IG90aGVyIG51bWJl ciAgICBob3cgbWFueSBmYWlsZWQgKGluY2x1ZGluZyBtaXNzaW5nIG9yIGV4dHJhcykKKysKKytJ ZiB5b3UgZmFpbCBtb3JlIHRoYW4gMjU0IHRlc3RzLCBpdCB3aWxsIGJlIHJlcG9ydGVkIGFzIDI1 NC4KKysKKytCPE5PVEU+ICBUaGlzIGJlaGF2aW9yIG1heSBnbyBhd2F5IGluIGZ1dHVyZSB2ZXJz aW9ucy4KKysKKysKKys9aGVhZDEgQ09NUEFUSUJJTElUWQorKworK1Rlc3Q6Ok1vcmUgd29ya3Mg d2l0aCBQZXJscyBhcyBvbGQgYXMgNS44LjEuCisrCisrVGhyZWFkIHN1cHBvcnQgaXMgbm90IHZl cnkgcmVsaWFibGUgYmVmb3JlIDUuMTAuMSwgYnV0IHRoYXQncworK2JlY2F1c2UgdGhyZWFkcyBh cmUgbm90IHZlcnkgcmVsaWFibGUgYmVmb3JlIDUuMTAuMS4KKysKKytBbHRob3VnaCBUZXN0OjpN b3JlIGhhcyBiZWVuIGEgY29yZSBtb2R1bGUgaW4gdmVyc2lvbnMgb2YgUGVybCBzaW5jZSA1LjYu MiwgVGVzdDo6TW9yZSBoYXMgZXZvbHZlZCBzaW5jZSB0aGVuLCBhbmQgbm90IGFsbCBvZiB0aGUg ZmVhdHVyZXMgeW91J3JlIHVzZWQgdG8gd2lsbCBiZSBwcmVzZW50IGluIHRoZSBzaGlwcGVkIHZl cnNpb24gb2YgVGVzdDo6TW9yZS4gSWYgeW91IGFyZSB3cml0aW5nIGEgbW9kdWxlLCBkb24ndCBm b3JnZXQgdG8gaW5kaWNhdGUgaW4geW91ciBwYWNrYWdlIG1ldGFkYXRhIHRoZSBtaW5pbXVtIHZl cnNpb24gb2YgVGVzdDo6TW9yZSB0aGF0IHlvdSByZXF1aXJlLiBGb3IgaW5zdGFuY2UsIGlmIHlv dSB3YW50IHRvIHVzZSBDPGRvbmVfdGVzdGluZygpPiBidXQgd2FudCB5b3VyIHRlc3Qgc2NyaXB0 IHRvIHJ1biBvbiBQZXJsIDUuMTAuMCwgeW91IHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IHJlcXVp cmUgVGVzdDo6TW9yZSA+IDAuODguCisrCisrS2V5IGZlYXR1cmUgbWlsZXN0b25lcyBpbmNsdWRl OgorKworKz1vdmVyIDQKKysKKys9aXRlbSBzdWJ0ZXN0cworKworK1N1YnRlc3RzIHdlcmUgcmVs ZWFzZWQgaW4gVGVzdDo6TW9yZSAwLjk0LCB3aGljaCBjYW1lIHdpdGggUGVybCA1LjEyLjAuIFN1 YnRlc3RzIGRpZCBub3QgaW1wbGljaXRseSBjYWxsIEM8ZG9uZV90ZXN0aW5nKCk+IHVudGlsIDAu OTY7IHRoZSBmaXJzdCBQZXJsIHdpdGggdGhhdCBmaXggd2FzIFBlcmwgNS4xNC4wIHdpdGggMC45 OC4KKysKKys9aXRlbSBDPGRvbmVfdGVzdGluZygpPgorKworK1RoaXMgd2FzIHJlbGVhc2VkIGlu IFRlc3Q6Ok1vcmUgMC44OCBhbmQgZmlyc3Qgc2hpcHBlZCB3aXRoIFBlcmwgaW4gNS4xMC4xIGFz IHBhcnQgb2YgVGVzdDo6TW9yZSAwLjkyLiAKKysKKys9aXRlbSBDPGNtcF9vaygpPgorKworK0Fs dGhvdWdoIEM8Y21wX29rKCk+IHdhcyBpbnRyb2R1Y2VkIGluIDAuNDAsIDAuODYgZml4ZWQgYW4g aW1wb3J0YW50IGJ1ZyB0byBtYWtlIGl0IHNhZmUgZm9yIG92ZXJsb2FkZWQgb2JqZWN0czsgdGhl IGZpeGVkIGZpcnN0IHNoaXBwZWQgd2l0aCBQZXJsIGluIDUuMTAuMSBhcyBwYXJ0IG9mIFRlc3Q6 Ok1vcmUgMC45Mi4KKysKKys9aXRlbSBDPG5ld19vaygpPiBDPG5vdGUoKT4gYW5kIEM8ZXhwbGFp bigpPgorKworK1RoZXNlIHdlcmUgd2FzIHJlbGVhc2VkIGluIFRlc3Q6Ok1vcmUgMC44MiwgYW5k IGZpcnN0IHNoaXBwZWQgd2l0aCBQZXJsIGluIDUuMTAuMSBhcyBwYXJ0IG9mIFRlc3Q6Ok1vcmUg MC45Mi4gCisrCisrPWJhY2sKKysKKytUaGVyZSBpcyBhIGZ1bGwgdmVyc2lvbiBoaXN0b3J5IGlu IHRoZSBDaGFuZ2VzIGZpbGUsIGFuZCB0aGUgVGVzdDo6TW9yZSB2ZXJzaW9ucyBpbmNsdWRlZCBh cyBjb3JlIGNhbiBiZSBmb3VuZCB1c2luZyBMPE1vZHVsZTo6Q29yZUxpc3Q+OgorKworKyAgICAk IGNvcmVsaXN0IC1hIFRlc3Q6Ok1vcmUKKysKKysKKys9aGVhZDEgQ0FWRUFUUyBhbmQgTk9URVMK KysKKys9b3ZlciA0CisrCisrPWl0ZW0gdXRmOCAvICJXaWRlIGNoYXJhY3RlciBpbiBwcmludCIK KysKKytJZiB5b3UgdXNlIHV0Zjggb3Igb3RoZXIgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgd2l0aCBU ZXN0OjpNb3JlIHlvdQorK21pZ2h0IGdldCBhICJXaWRlIGNoYXJhY3RlciBpbiBwcmludCIgd2Fy bmluZy4gIFVzaW5nIEM8YmlubW9kZQorK1NURE9VVCwgIjp1dGY4Ij4gd2lsbCBub3QgZml4IGl0 LiAgVGVzdDo6QnVpbGRlciAod2hpY2ggcG93ZXJzCisrVGVzdDo6TW9yZSkgZHVwbGljYXRlcyBT VERPVVQgYW5kIFNUREVSUi4gIFNvIGFueSBjaGFuZ2VzIHRvIHRoZW0sCisraW5jbHVkaW5nIGNo YW5naW5nIHRoZWlyIG91dHB1dCBkaXNjaXBsaW5lcywgd2lsbCBub3QgYmUgc2VlbSBieQorK1Rl c3Q6Ok1vcmUuCisrCisrT25lIHdvcmsgYXJvdW5kIGlzIHRvIGFwcGx5IGVuY29kaW5ncyB0byBT VERPVVQgYW5kIFNUREVSUiBhcyBlYXJseQorK2FzIHBvc3NpYmxlIGFuZCBiZWZvcmUgVGVzdDo6 TW9yZSAob3IgYW55IG90aGVyIFRlc3QgbW9kdWxlKSBsb2Fkcy4KKysKKysgICAgdXNlIG9wZW4g JzpzdGQnLCAnOmVuY29kaW5nKHV0ZjgpJzsKKysgICAgdXNlIFRlc3Q6Ok1vcmU7CisrCisrQSBt b3JlIGRpcmVjdCB3b3JrIGFyb3VuZCBpcyB0byBjaGFuZ2UgdGhlIGZpbGVoYW5kbGVzIHVzZWQg YnkKKytUZXN0OjpCdWlsZGVyLgorKworKyAgICBteSAkYnVpbGRlciA9IFRlc3Q6Ok1vcmUtPmJ1 aWxkZXI7CisrICAgIGJpbm1vZGUgJGJ1aWxkZXItPm91dHB1dCwgICAgICAgICAiOmVuY29kaW5n KHV0ZjgpIjsKKysgICAgYmlubW9kZSAkYnVpbGRlci0+ZmFpbHVyZV9vdXRwdXQsICI6ZW5jb2Rp bmcodXRmOCkiOworKyAgICBiaW5tb2RlICRidWlsZGVyLT50b2RvX291dHB1dCwgICAgIjplbmNv ZGluZyh1dGY4KSI7CisrCisrCisrPWl0ZW0gT3ZlcmxvYWRlZCBvYmplY3RzCisrCisrU3RyaW5n IG92ZXJsb2FkZWQgb2JqZWN0cyBhcmUgY29tcGFyZWQgQjxhcyBzdHJpbmdzPiAob3IgaW4gY21w X29rKCkncworK2Nhc2UsIHN0cmluZ3Mgb3IgbnVtYmVycyBhcyBhcHByb3ByaWF0ZSB0byB0aGUg Y29tcGFyaXNvbiBvcCkuICBUaGlzCisrcHJldmVudHMgVGVzdDo6TW9yZSBmcm9tIHBpZXJjaW5n IGFuIG9iamVjdCdzIGludGVyZmFjZSBhbGxvd2luZworK2JldHRlciBibGFja2JveCB0ZXN0aW5n LiAgU28gaWYgYSBmdW5jdGlvbiBzdGFydHMgcmV0dXJuaW5nIG92ZXJsb2FkZWQKKytvYmplY3Rz IGluc3RlYWQgb2YgYmFyZSBzdHJpbmdzIHlvdXIgdGVzdHMgd29uJ3Qgbm90aWNlIHRoZQorK2Rp ZmZlcmVuY2UuICBUaGlzIGlzIGdvb2QuCisrCisrSG93ZXZlciwgaXQgZG9lcyBtZWFuIHRoYXQg ZnVuY3Rpb25zIGxpa2UgaXNfZGVlcGx5KCkgY2Fubm90IGJlIHVzZWQgdG8KKyt0ZXN0IHRoZSBp bnRlcm5hbHMgb2Ygc3RyaW5nIG92ZXJsb2FkZWQgb2JqZWN0cy4gIEluIHRoaXMgY2FzZSBJIHdv dWxkCisrc3VnZ2VzdCBMPFRlc3Q6OkRlZXA+IHdoaWNoIGNvbnRhaW5zIG1vcmUgZmxleGlibGUg dGVzdGluZyBmdW5jdGlvbnMgZm9yCisrY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuCisrCisrCisr PWl0ZW0gVGhyZWFkcworKworK1Rlc3Q6Ok1vcmUgd2lsbCBvbmx5IGJlIGF3YXJlIG9mIHRocmVh ZHMgaWYgInVzZSB0aHJlYWRzIiBoYXMgYmVlbiBkb25lCisrSTxiZWZvcmU+IFRlc3Q6Ok1vcmUg aXMgbG9hZGVkLiAgVGhpcyBpcyBvazoKKysKKysgICAgdXNlIHRocmVhZHM7CisrICAgIHVzZSBU ZXN0OjpNb3JlOworKworK1RoaXMgbWF5IGNhdXNlIHByb2JsZW1zOgorKworKyAgICB1c2UgVGVz dDo6TW9yZQorKyAgICB1c2UgdGhyZWFkczsKKysKKys1LjguMSBhbmQgYWJvdmUgYXJlIHN1cHBv cnRlZC4gIEFueXRoaW5nIGJlbG93IHRoYXQgaGFzIHRvbyBtYW55IGJ1Z3MuCisrCisrPWJhY2sK KysKKysKKys9aGVhZDEgSElTVE9SWQorKworK1RoaXMgaXMgYSBjYXNlIG9mIGNvbnZlcmdlbnQg ZXZvbHV0aW9uIHdpdGggSm9zaHVhIFByaXRpa2luJ3MgVGVzdAorK21vZHVsZS4gIEkgd2FzIGxh cmdlbHkgdW5hd2FyZSBvZiBpdHMgZXhpc3RlbmNlIHdoZW4gSSdkIGZpcnN0Cisrd3JpdHRlbiBt eSBvd24gb2soKSByb3V0aW5lcy4gIFRoaXMgbW9kdWxlIGV4aXN0cyBiZWNhdXNlIEkgY2FuJ3QK KytmaWd1cmUgb3V0IGhvdyB0byBlYXNpbHkgd2VkZ2UgdGVzdCBuYW1lcyBpbnRvIFRlc3QncyBp bnRlcmZhY2UgKGFsb25nCisrd2l0aCBhIGZldyBvdGhlciBwcm9ibGVtcykuCisrCisrVGhlIGdv YWwgaGVyZSBpcyB0byBoYXZlIGEgdGVzdGluZyB1dGlsaXR5IHRoYXQncyBzaW1wbGUgdG8gbGVh cm4sCisrcXVpY2sgdG8gdXNlIGFuZCBkaWZmaWN1bHQgdG8gdHJpcCB5b3Vyc2VsZiB1cCB3aXRo IHdoaWxlIHN0aWxsCisrcHJvdmlkaW5nIG1vcmUgZmxleGliaWxpdHkgdGhhbiB0aGUgZXhpc3Rp bmcgVGVzdC5wbS4gIEFzIHN1Y2gsIHRoZQorK25hbWVzIG9mIHRoZSBtb3N0IGNvbW1vbiByb3V0 aW5lcyBhcmUga2VwdCB0aW55LCBzcGVjaWFsIGNhc2VzIGFuZAorK21hZ2ljIHNpZGUtZWZmZWN0 cyBhcmUga2VwdCB0byBhIG1pbmltdW0uICBXWVNJV1lHLgorKworKworKz1oZWFkMSBTRUUgQUxT TworKworK0w8VGVzdDo6U2ltcGxlPiBpZiBhbGwgdGhpcyBjb25mdXNlcyB5b3UgYW5kIHlvdSBq dXN0IHdhbnQgdG8gd3JpdGUKKytzb21lIHRlc3RzLiAgWW91IGNhbiB1cGdyYWRlIHRvIFRlc3Q6 Ok1vcmUgbGF0ZXIgKGl0J3MgZm9yd2FyZAorK2NvbXBhdGlibGUpLgorKworK0w8VGVzdDo6SGFy bmVzcz4gaXMgdGhlIHRlc3QgcnVubmVyIGFuZCBvdXRwdXQgaW50ZXJwcmV0ZXIgZm9yIFBlcmwu CisrSXQncyB0aGUgdGhpbmcgdGhhdCBwb3dlcnMgQzxtYWtlIHRlc3Q+IGFuZCB3aGVyZSB0aGUg Qzxwcm92ZT4gdXRpbGl0eQorK2NvbWVzIGZyb20uCisrCisrTDxUZXN0OjpMZWdhY3k+IHRlc3Rz IHdyaXR0ZW4gd2l0aCBUZXN0LnBtLCB0aGUgb3JpZ2luYWwgdGVzdGluZworK21vZHVsZSwgZG8g bm90IHBsYXkgd2VsbCB3aXRoIG90aGVyIHRlc3RpbmcgbGlicmFyaWVzLiAgVGVzdDo6TGVnYWN5 CisrZW11bGF0ZXMgdGhlIFRlc3QucG0gaW50ZXJmYWNlIGFuZCBkb2VzIHBsYXkgd2VsbCB3aXRo IG90aGVycy4KKysKKytMPFRlc3Q6OkRpZmZlcmVuY2VzPiBmb3IgbW9yZSB3YXlzIHRvIHRlc3Qg Y29tcGxleCBkYXRhIHN0cnVjdHVyZXMuCisrQW5kIGl0IHBsYXlzIHdlbGwgd2l0aCBUZXN0OjpN b3JlLgorKworK0w8VGVzdDo6Q2xhc3M+IGlzIGxpa2UgeFVuaXQgYnV0IG1vcmUgcGVybGlzaC4K KysKKytMPFRlc3Q6OkRlZXA+IGdpdmVzIHlvdSBtb3JlIHBvd2VyZnVsIGNvbXBsZXggZGF0YSBz dHJ1Y3R1cmUgdGVzdGluZy4KKysKKytMPFRlc3Q6OklubGluZT4gc2hvd3MgdGhlIGlkZWEgb2Yg ZW1iZWRkZWQgdGVzdGluZy4KKysKKytMPEJ1bmRsZTo6VGVzdD4gaW5zdGFsbHMgYSB3aG9sZSBi dW5jaCBvZiB1c2VmdWwgdGVzdCBtb2R1bGVzLgorKworKworKz1oZWFkMSBBVVRIT1JTCisrCisr TWljaGFlbCBHIFNjaHdlcm4gRTxsdD5zY2h3ZXJuQHBvYm94LmNvbUU8Z3Q+IHdpdGggbXVjaCBp bnNwaXJhdGlvbgorK2Zyb20gSm9zaHVhIFByaXRpa2luJ3MgVGVzdCBtb2R1bGUgYW5kIGxvdHMg b2YgaGVscCBmcm9tIEJhcnJpZQorK1NsYXltYWtlciwgVG9ueSBCb3dkZW4sIGJsYWNrc3Rhci5j by51aywgY2hyb21hdGljLCBGZXJnYWwgRGFseSBhbmQKKyt0aGUgcGVybC1xYSBnYW5nLgorKwor Kz1oZWFkMSBNQUlOVEFJTkVSUworKworKz1vdmVyIDQKKysKKys9aXRlbSBDaGFkIEdyYW51bSBF PGx0PmV4b2Rpc3RAY3Bhbi5vcmdFPGd0PgorKworKz1iYWNrCisrCisrCisrPWhlYWQxIEJVR1MK KysKKytTZWUgRjxodHRwOi8vcnQuY3Bhbi5vcmc+IHRvIHJlcG9ydCBhbmQgdmlldyBidWdzLgor KworKworKz1oZWFkMSBTT1VSQ0UKKysKKytUaGUgc291cmNlIGNvZGUgcmVwb3NpdG9yeSBmb3Ig VGVzdDo6TW9yZSBjYW4gYmUgZm91bmQgYXQKKytGPGh0dHA6Ly9naXRodWIuY29tL1Rlc3QtTW9y ZS90ZXN0LW1vcmUvPi4KKysKKysKKys9aGVhZDEgQ09QWVJJR0hUCisrCisrQ29weXJpZ2h0IDIw MDEtMjAwOCBieSBNaWNoYWVsIEcgU2Nod2VybiBFPGx0PnNjaHdlcm5AcG9ib3guY29tRTxndD4u CisrCisrVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorK21vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2Vs Zi4KKysKKytTZWUgRjxodHRwOi8vd3d3LnBlcmwuY29tL3BlcmwvbWlzYy9BcnRpc3RpYy5odG1s PgorKworKz1jdXQKKysKKysxOwo=