Skip to content
KernelIndex
Search⌘K

submission 31156

KernelBot user 203 · python · License unknown

Use it

Vendorable · source mirrored · license unknownView source →

No package. Vendor the mirrored source: 1 lines, June 9 Researcher Reciprocity License v1.0.

mla_opt_submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mla-decode-31156?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesbf16

Benchmark evidence

1 measurement across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD MLA decodebf16 · [128, 1, 7168]
AMD Instinct MI300X
10.4ms
#41 of 79
2025-06-03

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:a1e677f496a96993e726db7b26f4b850b493774f5a90b537c250f0f8c1175a2c
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

mla_opt_submission.py1 lines
ZnJvbSBwaXAuX2ludGVybmFsIGltcG9ydCBtYWluIGFzIHBpcF9tYWluCnBpcF9tYWluKFsiaW5zdGFsbCIsInRpbGVsYW5nLXJvY20iXSkKCmltcG9ydCBtYXRoCmZyb20gZGF0YWNsYXNzZXMgaW1wb3J0IGRhdGFjbGFzcwppbXBvcnQgdG9yY2gKZnJvbSB0b3JjaCBpbXBvcnQgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHRhc2sgaW1wb3J0IGlucHV0X3QsIG91dHB1dF90CmltcG9ydCB0aWxlbGFuZwpmcm9tIHRpbGVsYW5nLmF1dG90dW5lciBpbXBvcnQgKgppbXBvcnQgdGlsZWxhbmcubGFuZ3VhZ2UgYXMgVAoKdGlsZWxhbmcuY2FjaGUuY2xlYXJfY2FjaGUoKQojIHRpbGVsYW5nLmRpc2FibGVfY2FjaGUoKQoKQkFTRV9DT05GSUdTID0gewogICAgMTI4OiB7J2Jsb2NrX04nOiAxNiwgJ2Jsb2NrX0gnOiA2NCwgJ251bV9zcGxpdCc6IDEsICdudW1fc3RhZ2VzJzogMSwgJ2VuYWJsZV9yYXN0ZXJpemF0aW9uJzogRmFsc2V9LAogICAgNTEyOiB7J2Jsb2NrX04nOiAxNiwgJ2Jsb2NrX0gnOiA2NCwgJ251bV9zcGxpdCc6IDEsICdudW1fc3RhZ2VzJzogMCwgJ2VuYWJsZV9yYXN0ZXJpemF0aW9uJzogRmFsc2V9LAogICAgMTAyNDogeydibG9ja19OJzogMTYsICdibG9ja19IJzogNjQsICdudW1fc3BsaXQnOiAxLCAnbnVtX3N0YWdlcyc6IDAsICdlbmFibGVfcmFzdGVyaXphdGlvbic6IEZhbHNlfSwKICAgIDIwNDg6IHsnYmxvY2tfTic6IDE2LCAnYmxvY2tfSCc6IDY0LCAnbnVtX3NwbGl0JzogMSwgJ251bV9zdGFnZXMnOiAwLCAnZW5hYmxlX3Jhc3Rlcml6YXRpb24nOiBGYWxzZX0sCiAgICA0MDk2OiB7J2Jsb2NrX04nOiAxNiwgJ2Jsb2NrX0gnOiA2NCwgJ251bV9zcGxpdCc6IDEsICdudW1fc3RhZ2VzJzogMCwgJ2VuYWJsZV9yYXN0ZXJpemF0aW9uJzogRmFsc2V9LAogICAgNjE0NDogeydibG9ja19OJzogMTYsICdibG9ja19IJzogNjQsICdudW1fc3BsaXQnOiAyLCAnbnVtX3N0YWdlcyc6IDAsICdlbmFibGVfcmFzdGVyaXphdGlvbic6IEZhbHNlfQp9CgpQUkVGSUxMX0NPTkZJR1MgPSBCQVNFX0NPTkZJR1MuY29weSgpCmNvbmZpZ180MDk2ID0gQkFTRV9DT05GSUdTWzQwOTZdCmZvciBpIGluIHJhbmdlKDQwOTcsIDQxOTcpOiAgIyA0MDk35YiwNDE5NgogICAgUFJFRklMTF9DT05GSUdTW2ldID0gY29uZmlnXzQwOTYKCgpkZWYgZ2V0X29wdGltYWxfa2VybmVsKGJhdGNoLCBoZWFkcywga3ZfaGVhZF9udW0sIHNlcWxlbl9rdiwgZGltLCBwZV9kaW0pOgogICAgdXNlX2F1dG90dW5lID0gc2VxbGVuX2t2ID4gNjE0NAogICAgaWYgdXNlX2F1dG90dW5lOgogICAgICAgIHByaW50KGYiW0FVVE8gVFVORV0gVXNpbmcgYXV0b3R1bmUgZm9yIHNlcWxlbl9rdj17c2VxbGVuX2t2fSIpCiAgICAgICAgCiAgICAgICAgIyDkvb/nlKggYXV0b3R1bmUg54mI5pys55qEIGtlcm5lbAogICAgICAgIGtlcm5lbCA9IGZsYXNobWxhX2RlY29kZV9hdXRvdHVuZSgKICAgICAgICAgICAgYmF0Y2gsCiAgICAgICAgICAgIGhlYWRzLAogICAgICAgICAgICBrdl9oZWFkX251bSwKICAgICAgICAgICAgc2VxbGVuX2t2KzEsCiAgICAgICAgICAgIGRpbSwKICAgICAgICAgICAgcGVfZGltCiAgICAgICAgKQogICAgICAgIGJlc3RfY29uZmlnID0ga2VybmVsLmNvbmZpZwogICAgICAgIHByaW50KGYiW0FVVE8gVFVORV0gQmVzdCBjb25maWc6IHtiZXN0X2NvbmZpZ30iKQogICAgICAgIHJldHVybiBrZXJuZWwsIGJlc3RfY29uZmlnCiAgICBlbHNlOgogICAgICAgIHByaW50KGYiW05PIEFVVE8gVFVORV0gVXNpbmcgbm8gYXV0b3R1bmUgZm9yIHNlcWxlbl9rdj17c2VxbGVuX2t2fSIpCiAgICAgICAgaWYgc2VxbGVuX2t2IGluIFBSRUZJTExfQ09ORklHUzoKICAgICAgICAgICAgYmVzdF9jb25maWcgPSBQUkVGSUxMX0NPTkZJR1Nbc2VxbGVuX2t2XQogICAgICAgICAgICBrZXJuZWwgPSBmbGFzaG1sYV9kZWNvZGVfbm9fdHVuaW5nKAogICAgICAgICAgICAgICAgYmF0Y2gsCiAgICAgICAgICAgICAgICBoZWFkcywKICAgICAgICAgICAgICAgIGt2X2hlYWRfbnVtLAogICAgICAgICAgICAgICAgc2VxbGVuX2t2KzEsCiAgICAgICAgICAgICAgICBkaW0sCiAgICAgICAgICAgICAgICBwZV9kaW0sCiAgICAgICAgICAgICAgICAqKmJlc3RfY29uZmlnCiAgICAgICAgICAgICkKICAgICAgICAgICAgcmV0dXJuIGtlcm5lbCwgYmVzdF9jb25maWcKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gTm9uZQoKCkB0aWxlbGFuZy5qaXQob3V0X2lkeD1bNl0pCmRlZiBmbGFzaG1sYV9kZWNvZGVfbm9fdHVuaW5nKGJhdGNoLAogICAgICAgICAgICAgICAgICAgIGhlYWRzLAogICAgICAgICAgICAgICAgICAgIGt2X2hlYWRfbnVtLAogICAgICAgICAgICAgICAgICAgIHNlcWxlbl9rdiwKICAgICAgICAgICAgICAgICAgICBkaW0sCiAgICAgICAgICAgICAgICAgICAgcGVfZGltLAogICAgICAgICAgICAgICAgICAgIGJsb2NrX04sCiAgICAgICAgICAgICAgICAgICAgYmxvY2tfSCwKICAgICAgICAgICAgICAgICAgICBudW1fc3BsaXQsCiAgICAgICAgICAgICAgICAgICAgdGhyZWFkcz0yNTYsCiAgICAgICAgICAgICAgICAgICAgbnVtX3N0YWdlcz0yLAogICAgICAgICAgICAgICAgICAgIGVuYWJsZV9yYXN0ZXJpemF0aW9uPVRydWUpOgogICAgIyBzY2FsZSA9ICgxLjAgLyAoZGltICsgcGVfZGltKSkqKjAuNSAqIDEuNDQyNjk1MDQgICMgbG9nMihlKQogICAgc2NhbGUgPSAoMS4wIC8gKDEyOCArIDY0KSkqKjAuNSAqIDEuNDQyNjk1MDQKICAgICMgZHR5cGUgPSAiZmxvYXQxNiIKICAgIGR0eXBlID0gImJmbG9hdDE2IgogICAgYWNjdW1fZHR5cGUgPSAiZmxvYXQiCiAgICBrdl9ncm91cF9udW0gPSBoZWFkcyAvLyBrdl9oZWFkX251bQogICAgVkFMSURfQkxPQ0tfSCA9IG1pbihibG9ja19ILCBrdl9ncm91cF9udW0pCiAgICBhc3NlcnQga3ZfaGVhZF9udW0gPT0gMSwgImt2X2hlYWRfbnVtIG11c3QgYmUgMSIKICAgIGtfcGFjayA9IDEKICAgIHZlY19zaXplID0gNCAqIGtfcGFjawoKICAgIEBULm1hY3JvCiAgICBkZWYgZmxhc2hfYXR0bigKICAgICAgICAgICAgUTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBRX3BlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtWOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS19wZTogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICB3aXRoIFQuS2VybmVsKGJhdGNoLCBoZWFkcyAvLyBtaW4oYmxvY2tfSCwga3ZfZ3JvdXBfbnVtKSwgdGhyZWFkcz10aHJlYWRzKSBhcyAoYngsIGJ5KToKICAgICAgICAgICAgUV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGR0eXBlKQogICAgICAgICAgICBRX3BlX2xvY2FsID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtWX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKFtibG9ja19OLCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgS19wZV9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIGFjY19zID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBhY2Nfc19jYXN0ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGR0eXBlKQogICAgICAgICAgICBhY2NfbyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4X3ByZXYgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zY2FsZSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbG9nc3VtID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgY3VyX2t2X2hlYWQgPSBieSAvLyAoa3ZfZ3JvdXBfbnVtIC8vIGJsb2NrX0gpCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTAsIGVuYWJsZT1lbmFibGVfcmFzdGVyaXphdGlvbikKCiAgICAgICAgICAgIFQuY29weShRW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSwgUV9sb2NhbCkKICAgICAgICAgICAgVC5jb3B5KFFfcGVbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdLCBRX3BlX2xvY2FsKQogICAgICAgICAgICBULmZpbGwoYWNjX28sIDApCiAgICAgICAgICAgIFQuZmlsbChsb2dzdW0sIDApCiAgICAgICAgICAgIFQuZmlsbChzY29yZXNfbWF4LCAtVC5pbmZpbml0eShhY2N1bV9kdHlwZSkpCgogICAgICAgICAgICBsb29wX3JhbmdlID0gVC5jZWlsZGl2KHNlcWxlbl9rdiwgYmxvY2tfTikKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQobG9vcF9yYW5nZSwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAgICAgICAgIFQuY29weShLVltieCwgayAqIGJsb2NrX046KGsgKyAxKSAqIGJsb2NrX04sIGN1cl9rdl9oZWFkLCA6XSwgS1Zfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNvcHkoS19wZVtieCwgayAqIGJsb2NrX046KGsgKyAxKSAqIGJsb2NrX04sIGN1cl9rdl9oZWFkLCA6XSwgS19wZV9zaGFyZWQsIGNvYWxlc2NlZF93aWR0aD12ZWNfc2l6ZSkKICAgICAgICAgICAgICAgIFQuY2xlYXIoYWNjX3MpCiAgICAgICAgICAgICAgICBULmdlbW0oUV9sb2NhbCwgS1Zfc2hhcmVkLCBhY2NfcywgdHJhbnNwb3NlX0I9VHJ1ZSwgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuZ2VtbSgKICAgICAgICAgICAgICAgICAgICBRX3BlX2xvY2FsLAogICAgICAgICAgICAgICAgICAgIEtfcGVfc2hhcmVkLAogICAgICAgICAgICAgICAgICAgIGFjY19zLAogICAgICAgICAgICAgICAgICAgIHRyYW5zcG9zZV9CPVRydWUsCiAgICAgICAgICAgICAgICAgICAgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuY29weShzY29yZXNfbWF4LCBzY29yZXNfbWF4X3ByZXYpCiAgICAgICAgICAgICAgICBULmZpbGwoc2NvcmVzX21heCwgLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpKQogICAgICAgICAgICAgICAgVC5yZWR1Y2VfbWF4KGFjY19zLCBzY29yZXNfbWF4LCBkaW09MSwgY2xlYXI9RmFsc2UpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIHNjb3Jlc19zY2FsZVtpXSA9IFQuZXhwMihzY29yZXNfbWF4X3ByZXZbaV0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgYmxvY2tfTik6CiAgICAgICAgICAgICAgICAgICAgYWNjX3NbaSwgal0gPSBULmV4cDIoYWNjX3NbaSwgal0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX3N1bShhY2Nfcywgc2NvcmVzX3N1bSwgZGltPTEpCiAgICAgICAgICAgICAgICAjIFQuY29weShhY2NfcywgU19zaGFyZWQpCiAgICAgICAgICAgICAgICBULmNvcHkoYWNjX3MsIGFjY19zX2Nhc3QpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIGxvZ3N1bVtpXSA9IGxvZ3N1bVtpXSAqIHNjb3Jlc19zY2FsZVtpXSArIHNjb3Jlc19zdW1baV0KICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgZGltKToKICAgICAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAqPSBzY29yZXNfc2NhbGVbaV0KICAgICAgICAgICAgICAgIFQuZ2VtbShhY2Nfc19jYXN0LCBLVl9zaGFyZWQsIGFjY19vLCBwb2xpY3k9VC5HZW1tV2FycFBvbGljeS5GdWxsUm93KQogICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAvPSBsb2dzdW1baV0KICAgICAgICAgICAgVC5jb3B5KGFjY19vLCBPdXRwdXRbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdKQoKICAgIEBULm1hY3JvCiAgICBkZWYgZmxhc2hfYXR0bl9zcGxpdCgKICAgICAgICAgICAgUTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBRX3BlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtWOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS19wZTogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIGdsc2U6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdF0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0X3BhcnRpYWw6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdCwgZGltXSwgYWNjdW1fZHR5cGUpLAogICAgKToKICAgICAgICB3aXRoIFQuS2VybmVsKAogICAgICAgICAgICAgICAgYmF0Y2gsIGhlYWRzIC8vIG1pbihibG9ja19ILCBrdl9ncm91cF9udW0pLCBudW1fc3BsaXQsCiAgICAgICAgICAgICAgICB0aHJlYWRzPXRocmVhZHMpIGFzIChieCwgYnksIGJ6KToKICAgICAgICAgICAgUV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGR0eXBlKQogICAgICAgICAgICBRX3BlX2xvY2FsID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtWX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKFtibG9ja19OLCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgS19wZV9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIGFjY19zID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBhY2Nfc19jYXN0ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGR0eXBlKQogICAgICAgICAgICBhY2NfbyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4X3ByZXYgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zY2FsZSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbG9nc3VtID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgY3VyX2t2X2hlYWQgPSBieSAvLyAoa3ZfZ3JvdXBfbnVtIC8vIGJsb2NrX0gpCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTAsIGVuYWJsZT1lbmFibGVfcmFzdGVyaXphdGlvbikKICAgICAgICAgICAgVC5jb3B5KFFbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdLCBRX2xvY2FsKQogICAgICAgICAgICBULmNvcHkoUV9wZVtieCwgYnkgKiBWQUxJRF9CTE9DS19IOihieSArIDEpICogVkFMSURfQkxPQ0tfSCwgOl0sIFFfcGVfbG9jYWwpCiAgICAgICAgICAgIFQuZmlsbChhY2NfbywgMCkKICAgICAgICAgICAgVC5maWxsKGxvZ3N1bSwgMCkKICAgICAgICAgICAgVC5maWxsKHNjb3Jlc19tYXgsIC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKSkKCiAgICAgICAgICAgIGxvb3BfcmFuZ2UgPSBULmNlaWxkaXYoKHNlcWxlbl9rdiAvLyBudW1fc3BsaXQpLCBibG9ja19OKQogICAgICAgICAgICBmb3IgayBpbiBULlBpcGVsaW5lZChsb29wX3JhbmdlLCBudW1fc3RhZ2VzPW51bV9zdGFnZXMpOgogICAgICAgICAgICAgICAga3Zfc3RhcnQgPSAoc2VxbGVuX2t2IC8vIG51bV9zcGxpdCkgKiBieiArIGsgKiBibG9ja19OCiAgICAgICAgICAgICAgICBrdl9lbmQgPSAoc2VxbGVuX2t2IC8vIG51bV9zcGxpdCkgKiBieiArIChrICsgMSkgKiBibG9ja19OCiAgICAgICAgICAgICAgICBULmNvcHkoS1ZbYngsIGt2X3N0YXJ0Omt2X2VuZCwgY3VyX2t2X2hlYWQsIDpdLCBLVl9zaGFyZWQsIGNvYWxlc2NlZF93aWR0aD12ZWNfc2l6ZSkKICAgICAgICAgICAgICAgIFQuY29weShLX3BlW2J4LCBrdl9zdGFydDprdl9lbmQsIGN1cl9rdl9oZWFkLCA6XSwgS19wZV9zaGFyZWQsIGNvYWxlc2NlZF93aWR0aD12ZWNfc2l6ZSkKICAgICAgICAgICAgICAgIFQuY2xlYXIoYWNjX3MpCiAgICAgICAgICAgICAgICBULmdlbW0oUV9sb2NhbCwgS1Zfc2hhcmVkLCBhY2NfcywgdHJhbnNwb3NlX0I9VHJ1ZSwgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuZ2VtbSgKICAgICAgICAgICAgICAgICAgICBRX3BlX2xvY2FsLAogICAgICAgICAgICAgICAgICAgIEtfcGVfc2hhcmVkLAogICAgICAgICAgICAgICAgICAgIGFjY19zLAogICAgICAgICAgICAgICAgICAgIHRyYW5zcG9zZV9CPVRydWUsCiAgICAgICAgICAgICAgICAgICAgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuY29weShzY29yZXNfbWF4LCBzY29yZXNfbWF4X3ByZXYpCiAgICAgICAgICAgICAgICBULmZpbGwoc2NvcmVzX21heCwgLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpKQogICAgICAgICAgICAgICAgVC5yZWR1Y2VfbWF4KGFjY19zLCBzY29yZXNfbWF4LCBkaW09MSwgY2xlYXI9RmFsc2UpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIHNjb3Jlc19zY2FsZVtpXSA9IFQuZXhwMihzY29yZXNfbWF4X3ByZXZbaV0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgYmxvY2tfTik6CiAgICAgICAgICAgICAgICAgICAgYWNjX3NbaSwgal0gPSBULmV4cDIoYWNjX3NbaSwgal0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX3N1bShhY2Nfcywgc2NvcmVzX3N1bSwgZGltPTEpCiAgICAgICAgICAgICAgICBULmNvcHkoYWNjX3MsIGFjY19zX2Nhc3QpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIGxvZ3N1bVtpXSA9IGxvZ3N1bVtpXSAqIHNjb3Jlc19zY2FsZVtpXSArIHNjb3Jlc19zdW1baV0KICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgZGltKToKICAgICAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAqPSBzY29yZXNfc2NhbGVbaV0KICAgICAgICAgICAgICAgIFQuZ2VtbShhY2Nfc19jYXN0LCBLVl9zaGFyZWQsIGFjY19vLCBwb2xpY3k9VC5HZW1tV2FycFBvbGljeS5GdWxsUm93KQogICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAvPSBsb2dzdW1baV0KICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgIGxvZ3N1bVtpXSA9IFQubG9nMihsb2dzdW1baV0pICsgc2NvcmVzX21heFtpXSAqIHNjYWxlCiAgICAgICAgICAgIFQuY29weShsb2dzdW0sIGdsc2VbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIGJ6XSkKICAgICAgICAgICAgVC5jb3B5KGFjY19vLCBPdXRwdXRfcGFydGlhbFtieCwgYnkgKiBWQUxJRF9CTE9DS19IOihieSArIDEpICogVkFMSURfQkxPQ0tfSCwgYnosIDpdKQoKICAgIEBULm1hY3JvCiAgICBkZWYgY29tYmluZSgKICAgICAgICAgICAgZ2xzZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0XSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXRfcGFydGlhbDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0LCBkaW1dLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICB3aXRoIFQuS2VybmVsKGhlYWRzLCBiYXRjaCwgdGhyZWFkcz0xMjgpIGFzIChieSwgYnopOgogICAgICAgICAgICBwb19sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2RpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBvX2FjY3VtX2xvY2FsID0gVC5hbGxvY19mcmFnbWVudChbZGltXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxzZV9sb2NhbF9zcGxpdCA9IFQuYWxsb2NfbG9jYWwoWzFdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbHNlX2xvZ3N1bV9sb2NhbCA9IFQuYWxsb2NfbG9jYWwoWzFdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbHNlX21heF9sb2NhbCA9IFQuYWxsb2NfbG9jYWwoWzFdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NhbGVfbG9jYWwgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCgogICAgICAgICAgICBULmFubm90YXRlX2xheW91dCh7CiAgICAgICAgICAgICAgICBsc2VfbG9nc3VtX2xvY2FsOiBULkZyYWdtZW50KGxzZV9sb2dzdW1fbG9jYWwuc2hhcGUsIGZvcndhcmRfdGhyZWFkX2ZuPWxhbWJkYSBpOiBpKSwKICAgICAgICAgICAgfSkKCiAgICAgICAgICAgIFQuY2xlYXIobHNlX2xvZ3N1bV9sb2NhbCkKICAgICAgICAgICAgVC5jbGVhcihvX2FjY3VtX2xvY2FsKQogICAgICAgICAgICBsc2VfbWF4X2xvY2FsWzBdID0gLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGZvciBrIGluIFQuc2VyaWFsKG51bV9zcGxpdCk6CiAgICAgICAgICAgICAgICBsc2VfbWF4X2xvY2FsWzBdID0gVC5tYXgobHNlX21heF9sb2NhbFswXSwgZ2xzZVtieiwgYnksIGtdKQogICAgICAgICAgICBmb3IgayBpbiBULlBpcGVsaW5lZChudW1fc3BsaXQsIG51bV9zdGFnZXM9MSk6CiAgICAgICAgICAgICAgICBsc2VfbG9jYWxfc3BsaXRbMF0gPSBnbHNlW2J6LCBieSwga10KICAgICAgICAgICAgICAgIGxzZV9sb2dzdW1fbG9jYWxbMF0gKz0gVC5leHAyKGxzZV9sb2NhbF9zcGxpdFswXSAtIGxzZV9tYXhfbG9jYWxbMF0pCiAgICAgICAgICAgIGxzZV9sb2dzdW1fbG9jYWxbMF0gPSBULmxvZzIobHNlX2xvZ3N1bV9sb2NhbFswXSkgKyBsc2VfbWF4X2xvY2FsWzBdCiAgICAgICAgICAgIGZvciBrIGluIFQuc2VyaWFsKG51bV9zcGxpdCk6CiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGRpbSk6CiAgICAgICAgICAgICAgICAgICAgcG9fbG9jYWxbaV0gPSBPdXRwdXRfcGFydGlhbFtieiwgYnksIGssIGldCiAgICAgICAgICAgICAgICBsc2VfbG9jYWxfc3BsaXRbMF0gPSBnbHNlW2J6LCBieSwga10KICAgICAgICAgICAgICAgIHNjYWxlX2xvY2FsWzBdID0gVC5leHAyKGxzZV9sb2NhbF9zcGxpdFswXSAtIGxzZV9sb2dzdW1fbG9jYWxbMF0pCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGRpbSk6CiAgICAgICAgICAgICAgICAgICAgb19hY2N1bV9sb2NhbFtpXSArPSBwb19sb2NhbFtpXSAqIHNjYWxlX2xvY2FsWzBdCiAgICAgICAgICAgIGZvciBpIGluIFQuUGFyYWxsZWwoZGltKToKICAgICAgICAgICAgICAgIE91dHB1dFtieiwgYnksIGldID0gb19hY2N1bV9sb2NhbFtpXQoKICAgIEBULnByaW1fZnVuYwogICAgZGVmIG1haW5fc3BsaXQoCiAgICAgICAgICAgIFE6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgUV9wZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLVjogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtfcGU6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBnbHNlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXRdLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dF9wYXJ0aWFsOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXQsIGRpbV0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0OiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBkaW1dLCBkdHlwZSksCiAgICApOgogICAgICAgIGZsYXNoX2F0dG5fc3BsaXQoUSwgUV9wZSwgS1YsIEtfcGUsIGdsc2UsIE91dHB1dF9wYXJ0aWFsKQogICAgICAgIGNvbWJpbmUoZ2xzZSwgT3V0cHV0X3BhcnRpYWwsIE91dHB1dCkKCiAgICBAVC5wcmltX2Z1bmMKICAgIGRlZiBtYWluX25vX3NwbGl0KAogICAgICAgICAgICBROiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIFFfcGU6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS1Y6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLX3BlOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgZ2xzZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0XSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXRfcGFydGlhbDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0LCBkaW1dLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICBmbGFzaF9hdHRuKFEsIFFfcGUsIEtWLCBLX3BlLCBPdXRwdXQpCgogICAgaWYgbnVtX3NwbGl0ID4gMToKICAgICAgICByZXR1cm4gbWFpbl9zcGxpdAogICAgZWxzZToKICAgICAgICByZXR1cm4gbWFpbl9ub19zcGxpdAoKCmRlZiBnZXRfY29uZmlncygpOgogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgYmxvY2tfTiA9IFsxNiwgMzIsIDY0LCAxMjhdCiAgICBibG9ja19IID0gWzE2LCAzMiwgNjQsIDEyOF0KICAgIG51bV9zcGxpdCA9IFsxLCAyLCA0LCA4LCAxNl0KICAgIG51bV9zdGFnZXMgPSBbMCwgMV0KICAgIGVuYWJsZV9yYXN0ZXJpemF0aW9uID0gW0ZhbHNlLCBUcnVlXQoKICAgIF9jb25maWdzID0gbGlzdChpdGVydG9vbHMucHJvZHVjdChibG9ja19OLCBibG9ja19ILCBudW1fc3BsaXQsIG51bV9zdGFnZXMsIGVuYWJsZV9yYXN0ZXJpemF0aW9uKSkKICAgIAogICAgcmV0dXJuIFt7CiAgICAgICAgImJsb2NrX04iOiBjWzBdLAogICAgICAgICJibG9ja19IIjogY1sxXSwKICAgICAgICAibnVtX3NwbGl0IjogY1syXSwKICAgICAgICAibnVtX3N0YWdlcyI6IGNbM10sCiAgICAgICAgImVuYWJsZV9yYXN0ZXJpemF0aW9uIjogY1s0XSwKICAgIH0gZm9yIGMgaW4gX2NvbmZpZ3NdCgpAdGlsZWxhbmcuYXV0b3R1bmUoY29uZmlncz1nZXRfY29uZmlncygpLCBjYWNoZV9pbnB1dF90ZW5zb3JzPUZhbHNlKQpAdGlsZWxhbmcuaml0KG91dF9pZHg9WzZdKQpkZWYgZmxhc2htbGFfZGVjb2RlX2F1dG90dW5lKGJhdGNoLAogICAgICAgICAgICAgICAgICAgIGhlYWRzLAogICAgICAgICAgICAgICAgICAgIGt2X2hlYWRfbnVtLAogICAgICAgICAgICAgICAgICAgIHNlcWxlbl9rdiwKICAgICAgICAgICAgICAgICAgICBkaW0sCiAgICAgICAgICAgICAgICAgICAgcGVfZGltLAogICAgICAgICAgICAgICAgICAgIGJsb2NrX04sCiAgICAgICAgICAgICAgICAgICAgYmxvY2tfSCwKICAgICAgICAgICAgICAgICAgICBudW1fc3BsaXQsCiAgICAgICAgICAgICAgICAgICAgdGhyZWFkcz0yNTYsCiAgICAgICAgICAgICAgICAgICAgbnVtX3N0YWdlcz0yLAogICAgICAgICAgICAgICAgICAgIGVuYWJsZV9yYXN0ZXJpemF0aW9uPVRydWUpOgogICAgIyBzY2FsZSA9ICgxLjAgLyAoZGltICsgcGVfZGltKSkqKjAuNSAqIDEuNDQyNjk1MDQgICMgbG9nMihlKQogICAgc2NhbGUgPSAoMS4wIC8gKDEyOCArIDY0KSkqKjAuNSAqIDEuNDQyNjk1MDQKICAgICMgZHR5cGUgPSAiZmxvYXQxNiIKICAgIGR0eXBlID0gImJmbG9hdDE2IgogICAgYWNjdW1fZHR5cGUgPSAiZmxvYXQiCiAgICBrdl9ncm91cF9udW0gPSBoZWFkcyAvLyBrdl9oZWFkX251bQogICAgVkFMSURfQkxPQ0tfSCA9IG1pbihibG9ja19ILCBrdl9ncm91cF9udW0pCiAgICBhc3NlcnQga3ZfaGVhZF9udW0gPT0gMSwgImt2X2hlYWRfbnVtIG11c3QgYmUgMSIKICAgIGtfcGFjayA9IDEKICAgIHZlY19zaXplID0gNCAqIGtfcGFjawoKICAgIEBULm1hY3JvCiAgICBkZWYgZmxhc2hfYXR0bigKICAgICAgICAgICAgUTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBRX3BlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtWOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS19wZTogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICB3aXRoIFQuS2VybmVsKGJhdGNoLCBoZWFkcyAvLyBtaW4oYmxvY2tfSCwga3ZfZ3JvdXBfbnVtKSwgdGhyZWFkcz10aHJlYWRzKSBhcyAoYngsIGJ5KToKICAgICAgICAgICAgUV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGR0eXBlKQogICAgICAgICAgICBRX3BlX2xvY2FsID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtWX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKFtibG9ja19OLCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgS19wZV9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIGFjY19zID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBhY2Nfc19jYXN0ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGR0eXBlKQogICAgICAgICAgICBhY2NfbyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4X3ByZXYgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zY2FsZSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbG9nc3VtID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgY3VyX2t2X2hlYWQgPSBieSAvLyAoa3ZfZ3JvdXBfbnVtIC8vIGJsb2NrX0gpCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTAsIGVuYWJsZT1lbmFibGVfcmFzdGVyaXphdGlvbikKCiAgICAgICAgICAgIFQuY29weShRW2J4LCBieSAqIFZBTElEX0JMT0NLX0g6KGJ5ICsgMSkgKiBWQUxJRF9CTE9DS19ILCA6XSwgUV9sb2NhbCkKICAgICAgICAgICAgVC5jb3B5KFFfcGVbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdLCBRX3BlX2xvY2FsKQogICAgICAgICAgICBULmZpbGwoYWNjX28sIDApCiAgICAgICAgICAgIFQuZmlsbChsb2dzdW0sIDApCiAgICAgICAgICAgIFQuZmlsbChzY29yZXNfbWF4LCAtVC5pbmZpbml0eShhY2N1bV9kdHlwZSkpCgogICAgICAgICAgICBsb29wX3JhbmdlID0gVC5jZWlsZGl2KHNlcWxlbl9rdiwgYmxvY2tfTikKICAgICAgICAgICAgZm9yIGsgaW4gVC5QaXBlbGluZWQobG9vcF9yYW5nZSwgbnVtX3N0YWdlcz1udW1fc3RhZ2VzKToKICAgICAgICAgICAgICAgIFQuY29weShLVltieCwgayAqIGJsb2NrX046KGsgKyAxKSAqIGJsb2NrX04sIGN1cl9rdl9oZWFkLCA6XSwgS1Zfc2hhcmVkLCBjb2FsZXNjZWRfd2lkdGg9dmVjX3NpemUpCiAgICAgICAgICAgICAgICBULmNvcHkoS19wZVtieCwgayAqIGJsb2NrX046KGsgKyAxKSAqIGJsb2NrX04sIGN1cl9rdl9oZWFkLCA6XSwgS19wZV9zaGFyZWQsIGNvYWxlc2NlZF93aWR0aD12ZWNfc2l6ZSkKICAgICAgICAgICAgICAgIFQuY2xlYXIoYWNjX3MpCiAgICAgICAgICAgICAgICBULmdlbW0oUV9sb2NhbCwgS1Zfc2hhcmVkLCBhY2NfcywgdHJhbnNwb3NlX0I9VHJ1ZSwgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuZ2VtbSgKICAgICAgICAgICAgICAgICAgICBRX3BlX2xvY2FsLAogICAgICAgICAgICAgICAgICAgIEtfcGVfc2hhcmVkLAogICAgICAgICAgICAgICAgICAgIGFjY19zLAogICAgICAgICAgICAgICAgICAgIHRyYW5zcG9zZV9CPVRydWUsCiAgICAgICAgICAgICAgICAgICAgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuY29weShzY29yZXNfbWF4LCBzY29yZXNfbWF4X3ByZXYpCiAgICAgICAgICAgICAgICBULmZpbGwoc2NvcmVzX21heCwgLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpKQogICAgICAgICAgICAgICAgVC5yZWR1Y2VfbWF4KGFjY19zLCBzY29yZXNfbWF4LCBkaW09MSwgY2xlYXI9RmFsc2UpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIHNjb3Jlc19zY2FsZVtpXSA9IFQuZXhwMihzY29yZXNfbWF4X3ByZXZbaV0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgYmxvY2tfTik6CiAgICAgICAgICAgICAgICAgICAgYWNjX3NbaSwgal0gPSBULmV4cDIoYWNjX3NbaSwgal0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX3N1bShhY2Nfcywgc2NvcmVzX3N1bSwgZGltPTEpCiAgICAgICAgICAgICAgICAjIFQuY29weShhY2NfcywgU19zaGFyZWQpCiAgICAgICAgICAgICAgICBULmNvcHkoYWNjX3MsIGFjY19zX2Nhc3QpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIGxvZ3N1bVtpXSA9IGxvZ3N1bVtpXSAqIHNjb3Jlc19zY2FsZVtpXSArIHNjb3Jlc19zdW1baV0KICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgZGltKToKICAgICAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAqPSBzY29yZXNfc2NhbGVbaV0KICAgICAgICAgICAgICAgIFQuZ2VtbShhY2Nfc19jYXN0LCBLVl9zaGFyZWQsIGFjY19vLCBwb2xpY3k9VC5HZW1tV2FycFBvbGljeS5GdWxsUm93KQogICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAvPSBsb2dzdW1baV0KICAgICAgICAgICAgVC5jb3B5KGFjY19vLCBPdXRwdXRbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdKQoKICAgIEBULm1hY3JvCiAgICBkZWYgZmxhc2hfYXR0bl9zcGxpdCgKICAgICAgICAgICAgUTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBRX3BlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtWOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS19wZTogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBwZV9kaW1dLCBkdHlwZSksCiAgICAgICAgICAgIGdsc2U6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdF0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0X3BhcnRpYWw6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIG51bV9zcGxpdCwgZGltXSwgYWNjdW1fZHR5cGUpLAogICAgKToKICAgICAgICB3aXRoIFQuS2VybmVsKAogICAgICAgICAgICAgICAgYmF0Y2gsIGhlYWRzIC8vIG1pbihibG9ja19ILCBrdl9ncm91cF9udW0pLCBudW1fc3BsaXQsCiAgICAgICAgICAgICAgICB0aHJlYWRzPXRocmVhZHMpIGFzIChieCwgYnksIGJ6KToKICAgICAgICAgICAgUV9sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGR0eXBlKQogICAgICAgICAgICBRX3BlX2xvY2FsID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIEtWX3NoYXJlZCA9IFQuYWxsb2Nfc2hhcmVkKFtibG9ja19OLCBkaW1dLCBkdHlwZSkKICAgICAgICAgICAgS19wZV9zaGFyZWQgPSBULmFsbG9jX3NoYXJlZChbYmxvY2tfTiwgcGVfZGltXSwgZHR5cGUpCiAgICAgICAgICAgIGFjY19zID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBhY2Nfc19jYXN0ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSCwgYmxvY2tfTl0sIGR0eXBlKQogICAgICAgICAgICBhY2NfbyA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0gsIGRpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4ID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBzY29yZXNfbWF4X3ByZXYgPSBULmFsbG9jX2ZyYWdtZW50KFtibG9ja19IXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIHNjb3Jlc19zY2FsZSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NvcmVzX3N1bSA9IFQuYWxsb2NfZnJhZ21lbnQoW2Jsb2NrX0hdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbG9nc3VtID0gVC5hbGxvY19mcmFnbWVudChbYmxvY2tfSF0sIGFjY3VtX2R0eXBlKQoKICAgICAgICAgICAgY3VyX2t2X2hlYWQgPSBieSAvLyAoa3ZfZ3JvdXBfbnVtIC8vIGJsb2NrX0gpCiAgICAgICAgICAgIFQudXNlX3N3aXp6bGUoMTAsIGVuYWJsZT1lbmFibGVfcmFzdGVyaXphdGlvbikKICAgICAgICAgICAgVC5jb3B5KFFbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIDpdLCBRX2xvY2FsKQogICAgICAgICAgICBULmNvcHkoUV9wZVtieCwgYnkgKiBWQUxJRF9CTE9DS19IOihieSArIDEpICogVkFMSURfQkxPQ0tfSCwgOl0sIFFfcGVfbG9jYWwpCiAgICAgICAgICAgIFQuZmlsbChhY2NfbywgMCkKICAgICAgICAgICAgVC5maWxsKGxvZ3N1bSwgMCkKICAgICAgICAgICAgVC5maWxsKHNjb3Jlc19tYXgsIC1ULmluZmluaXR5KGFjY3VtX2R0eXBlKSkKCiAgICAgICAgICAgIGxvb3BfcmFuZ2UgPSBULmNlaWxkaXYoKHNlcWxlbl9rdiAvLyBudW1fc3BsaXQpLCBibG9ja19OKQogICAgICAgICAgICBmb3IgayBpbiBULlBpcGVsaW5lZChsb29wX3JhbmdlLCBudW1fc3RhZ2VzPW51bV9zdGFnZXMpOgogICAgICAgICAgICAgICAga3Zfc3RhcnQgPSAoc2VxbGVuX2t2IC8vIG51bV9zcGxpdCkgKiBieiArIGsgKiBibG9ja19OCiAgICAgICAgICAgICAgICBrdl9lbmQgPSAoc2VxbGVuX2t2IC8vIG51bV9zcGxpdCkgKiBieiArIChrICsgMSkgKiBibG9ja19OCiAgICAgICAgICAgICAgICBULmNvcHkoS1ZbYngsIGt2X3N0YXJ0Omt2X2VuZCwgY3VyX2t2X2hlYWQsIDpdLCBLVl9zaGFyZWQsIGNvYWxlc2NlZF93aWR0aD12ZWNfc2l6ZSkKICAgICAgICAgICAgICAgIFQuY29weShLX3BlW2J4LCBrdl9zdGFydDprdl9lbmQsIGN1cl9rdl9oZWFkLCA6XSwgS19wZV9zaGFyZWQsIGNvYWxlc2NlZF93aWR0aD12ZWNfc2l6ZSkKICAgICAgICAgICAgICAgIFQuY2xlYXIoYWNjX3MpCiAgICAgICAgICAgICAgICBULmdlbW0oUV9sb2NhbCwgS1Zfc2hhcmVkLCBhY2NfcywgdHJhbnNwb3NlX0I9VHJ1ZSwgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuZ2VtbSgKICAgICAgICAgICAgICAgICAgICBRX3BlX2xvY2FsLAogICAgICAgICAgICAgICAgICAgIEtfcGVfc2hhcmVkLAogICAgICAgICAgICAgICAgICAgIGFjY19zLAogICAgICAgICAgICAgICAgICAgIHRyYW5zcG9zZV9CPVRydWUsCiAgICAgICAgICAgICAgICAgICAgcG9saWN5PVQuR2VtbVdhcnBQb2xpY3kuRnVsbFJvdykKICAgICAgICAgICAgICAgIFQuY29weShzY29yZXNfbWF4LCBzY29yZXNfbWF4X3ByZXYpCiAgICAgICAgICAgICAgICBULmZpbGwoc2NvcmVzX21heCwgLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpKQogICAgICAgICAgICAgICAgVC5yZWR1Y2VfbWF4KGFjY19zLCBzY29yZXNfbWF4LCBkaW09MSwgY2xlYXI9RmFsc2UpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIHNjb3Jlc19zY2FsZVtpXSA9IFQuZXhwMihzY29yZXNfbWF4X3ByZXZbaV0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgYmxvY2tfTik6CiAgICAgICAgICAgICAgICAgICAgYWNjX3NbaSwgal0gPSBULmV4cDIoYWNjX3NbaSwgal0gKiBzY2FsZSAtIHNjb3Jlc19tYXhbaV0gKiBzY2FsZSkKICAgICAgICAgICAgICAgIFQucmVkdWNlX3N1bShhY2Nfcywgc2NvcmVzX3N1bSwgZGltPTEpCiAgICAgICAgICAgICAgICBULmNvcHkoYWNjX3MsIGFjY19zX2Nhc3QpCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGJsb2NrX0gpOgogICAgICAgICAgICAgICAgICAgIGxvZ3N1bVtpXSA9IGxvZ3N1bVtpXSAqIHNjb3Jlc19zY2FsZVtpXSArIHNjb3Jlc19zdW1baV0KICAgICAgICAgICAgICAgIGZvciBpLCBqIGluIFQuUGFyYWxsZWwoYmxvY2tfSCwgZGltKToKICAgICAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAqPSBzY29yZXNfc2NhbGVbaV0KICAgICAgICAgICAgICAgIFQuZ2VtbShhY2Nfc19jYXN0LCBLVl9zaGFyZWQsIGFjY19vLCBwb2xpY3k9VC5HZW1tV2FycFBvbGljeS5GdWxsUm93KQogICAgICAgICAgICBmb3IgaSwgaiBpbiBULlBhcmFsbGVsKGJsb2NrX0gsIGRpbSk6CiAgICAgICAgICAgICAgICBhY2Nfb1tpLCBqXSAvPSBsb2dzdW1baV0KICAgICAgICAgICAgZm9yIGkgaW4gVC5QYXJhbGxlbChibG9ja19IKToKICAgICAgICAgICAgICAgIGxvZ3N1bVtpXSA9IFQubG9nMihsb2dzdW1baV0pICsgc2NvcmVzX21heFtpXSAqIHNjYWxlCiAgICAgICAgICAgIFQuY29weShsb2dzdW0sIGdsc2VbYngsIGJ5ICogVkFMSURfQkxPQ0tfSDooYnkgKyAxKSAqIFZBTElEX0JMT0NLX0gsIGJ6XSkKICAgICAgICAgICAgVC5jb3B5KGFjY19vLCBPdXRwdXRfcGFydGlhbFtieCwgYnkgKiBWQUxJRF9CTE9DS19IOihieSArIDEpICogVkFMSURfQkxPQ0tfSCwgYnosIDpdKQoKICAgIEBULm1hY3JvCiAgICBkZWYgY29tYmluZSgKICAgICAgICAgICAgZ2xzZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0XSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXRfcGFydGlhbDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0LCBkaW1dLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICB3aXRoIFQuS2VybmVsKGhlYWRzLCBiYXRjaCwgdGhyZWFkcz0xMjgpIGFzIChieSwgYnopOgogICAgICAgICAgICBwb19sb2NhbCA9IFQuYWxsb2NfZnJhZ21lbnQoW2RpbV0sIGFjY3VtX2R0eXBlKQogICAgICAgICAgICBvX2FjY3VtX2xvY2FsID0gVC5hbGxvY19mcmFnbWVudChbZGltXSwgYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGxzZV9sb2NhbF9zcGxpdCA9IFQuYWxsb2NfbG9jYWwoWzFdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbHNlX2xvZ3N1bV9sb2NhbCA9IFQuYWxsb2NfbG9jYWwoWzFdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgbHNlX21heF9sb2NhbCA9IFQuYWxsb2NfbG9jYWwoWzFdLCBhY2N1bV9kdHlwZSkKICAgICAgICAgICAgc2NhbGVfbG9jYWwgPSBULmFsbG9jX2xvY2FsKFsxXSwgYWNjdW1fZHR5cGUpCgogICAgICAgICAgICBULmFubm90YXRlX2xheW91dCh7CiAgICAgICAgICAgICAgICBsc2VfbG9nc3VtX2xvY2FsOiBULkZyYWdtZW50KGxzZV9sb2dzdW1fbG9jYWwuc2hhcGUsIGZvcndhcmRfdGhyZWFkX2ZuPWxhbWJkYSBpOiBpKSwKICAgICAgICAgICAgfSkKCiAgICAgICAgICAgIFQuY2xlYXIobHNlX2xvZ3N1bV9sb2NhbCkKICAgICAgICAgICAgVC5jbGVhcihvX2FjY3VtX2xvY2FsKQogICAgICAgICAgICBsc2VfbWF4X2xvY2FsWzBdID0gLVQuaW5maW5pdHkoYWNjdW1fZHR5cGUpCiAgICAgICAgICAgIGZvciBrIGluIFQuc2VyaWFsKG51bV9zcGxpdCk6CiAgICAgICAgICAgICAgICBsc2VfbWF4X2xvY2FsWzBdID0gVC5tYXgobHNlX21heF9sb2NhbFswXSwgZ2xzZVtieiwgYnksIGtdKQogICAgICAgICAgICBmb3IgayBpbiBULlBpcGVsaW5lZChudW1fc3BsaXQsIG51bV9zdGFnZXM9MSk6CiAgICAgICAgICAgICAgICBsc2VfbG9jYWxfc3BsaXRbMF0gPSBnbHNlW2J6LCBieSwga10KICAgICAgICAgICAgICAgIGxzZV9sb2dzdW1fbG9jYWxbMF0gKz0gVC5leHAyKGxzZV9sb2NhbF9zcGxpdFswXSAtIGxzZV9tYXhfbG9jYWxbMF0pCiAgICAgICAgICAgIGxzZV9sb2dzdW1fbG9jYWxbMF0gPSBULmxvZzIobHNlX2xvZ3N1bV9sb2NhbFswXSkgKyBsc2VfbWF4X2xvY2FsWzBdCiAgICAgICAgICAgIGZvciBrIGluIFQuc2VyaWFsKG51bV9zcGxpdCk6CiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGRpbSk6CiAgICAgICAgICAgICAgICAgICAgcG9fbG9jYWxbaV0gPSBPdXRwdXRfcGFydGlhbFtieiwgYnksIGssIGldCiAgICAgICAgICAgICAgICBsc2VfbG9jYWxfc3BsaXRbMF0gPSBnbHNlW2J6LCBieSwga10KICAgICAgICAgICAgICAgIHNjYWxlX2xvY2FsWzBdID0gVC5leHAyKGxzZV9sb2NhbF9zcGxpdFswXSAtIGxzZV9sb2dzdW1fbG9jYWxbMF0pCiAgICAgICAgICAgICAgICBmb3IgaSBpbiBULlBhcmFsbGVsKGRpbSk6CiAgICAgICAgICAgICAgICAgICAgb19hY2N1bV9sb2NhbFtpXSArPSBwb19sb2NhbFtpXSAqIHNjYWxlX2xvY2FsWzBdCiAgICAgICAgICAgIGZvciBpIGluIFQuUGFyYWxsZWwoZGltKToKICAgICAgICAgICAgICAgIE91dHB1dFtieiwgYnksIGldID0gb19hY2N1bV9sb2NhbFtpXQoKICAgIEBULnByaW1fZnVuYwogICAgZGVmIG1haW5fc3BsaXQoCiAgICAgICAgICAgIFE6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIGRpbV0sIGR0eXBlKSwKICAgICAgICAgICAgUV9wZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLVjogVC5UZW5zb3IoW2JhdGNoLCBzZXFsZW5fa3YsIGt2X2hlYWRfbnVtLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIEtfcGU6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgcGVfZGltXSwgZHR5cGUpLAogICAgICAgICAgICBnbHNlOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXRdLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dF9wYXJ0aWFsOiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBudW1fc3BsaXQsIGRpbV0sIGFjY3VtX2R0eXBlKSwKICAgICAgICAgICAgT3V0cHV0OiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBkaW1dLCBkdHlwZSksCiAgICApOgogICAgICAgIGZsYXNoX2F0dG5fc3BsaXQoUSwgUV9wZSwgS1YsIEtfcGUsIGdsc2UsIE91dHB1dF9wYXJ0aWFsKQogICAgICAgIGNvbWJpbmUoZ2xzZSwgT3V0cHV0X3BhcnRpYWwsIE91dHB1dCkKCiAgICBAVC5wcmltX2Z1bmMKICAgIGRlZiBtYWluX25vX3NwbGl0KAogICAgICAgICAgICBROiBULlRlbnNvcihbYmF0Y2gsIGhlYWRzLCBkaW1dLCBkdHlwZSksCiAgICAgICAgICAgIFFfcGU6IFQuVGVuc29yKFtiYXRjaCwgaGVhZHMsIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgS1Y6IFQuVGVuc29yKFtiYXRjaCwgc2VxbGVuX2t2LCBrdl9oZWFkX251bSwgZGltXSwgZHR5cGUpLAogICAgICAgICAgICBLX3BlOiBULlRlbnNvcihbYmF0Y2gsIHNlcWxlbl9rdiwga3ZfaGVhZF9udW0sIHBlX2RpbV0sIGR0eXBlKSwKICAgICAgICAgICAgZ2xzZTogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0XSwgYWNjdW1fZHR5cGUpLAogICAgICAgICAgICBPdXRwdXRfcGFydGlhbDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgbnVtX3NwbGl0LCBkaW1dLCBhY2N1bV9kdHlwZSksCiAgICAgICAgICAgIE91dHB1dDogVC5UZW5zb3IoW2JhdGNoLCBoZWFkcywgZGltXSwgZHR5cGUpLAogICAgKToKICAgICAgICBmbGFzaF9hdHRuKFEsIFFfcGUsIEtWLCBLX3BlLCBPdXRwdXQpCgogICAgaWYgbnVtX3NwbGl0ID4gMToKICAgICAgICByZXR1cm4gbWFpbl9zcGxpdAogICAgZWxzZToKICAgICAgICByZXR1cm4gbWFpbl9ub19zcGxpdAoKY2xhc3MgUm9QRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRfbW9kZWw6IGludCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5kX21vZGVsID0gZF9tb2RlbAogICAgICAgIHRoZXRhID0gMTAwMDAgKiogKC10b3JjaC5hcmFuZ2UoMCwgZF9tb2RlbC8vMixkdHlwZT10b3JjaC5iZmxvYXQxNikgLyAoZF9tb2RlbC8vMikpCiAgICAgICAgdGhldGEgPSB0aGV0YS50bygiY3VkYSIpCiAgICAgICAgc2VsZi5yZWdpc3Rlcl9idWZmZXIoInRoZXRhIiwgdGhldGEpCgogICAgZGVmIHJvdGF0ZV9oYWxmKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIHgxLCB4MiA9IHguY2h1bmsoMiwgZGltPS0xKQogICAgICAgIHJldHVybiB0b3JjaC5jYXQoKC14MiwgeDEpLCBkaW09LTEpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yLCBzdGFydF9wb3M6IGludCA9IDApIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBzZXFfbGVuID0geC5zaXplKC0yKQogICAgICAgIGRfbW9kZWwgPSB4LnNpemUoLTEpCiAgICAgICAgYXNzZXJ0IGRfbW9kZWwgPT0gc2VsZi5kX21vZGVsCiAgICAgICAgc2VxX2lkeCA9IHRvcmNoLmFyYW5nZShzdGFydF9wb3MsIHN0YXJ0X3BvcyArIHNlcV9sZW4sIGRldmljZT14LmRldmljZSkKICAgICAgICBpZHhfdGhldGEgPSB0b3JjaC5laW5zdW0oJ3MsZC0+c2QnLCBzZXFfaWR4LCBzZWxmLnRoZXRhKQogICAgICAgIGlkeF90aGV0YTIgPSB0b3JjaC5jYXQoW2lkeF90aGV0YSwgaWR4X3RoZXRhXSwgZGltPS0xKQogICAgICAgIGNvcyA9IGlkeF90aGV0YTIuY29zKCkudG8odG9yY2guYmZsb2F0MTYpCiAgICAgICAgc2luID0gaWR4X3RoZXRhMi5zaW4oKS50byh0b3JjaC5iZmxvYXQxNikKICAgICAgICByZXR1cm4geCAqIGNvcyArIHNlbGYucm90YXRlX2hhbGYoeCkgKiBzaW4KCgpjbGFzcyBLVkNhY2hlKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwga3ZfY2FjaGVfc2hhcGU6IHR1cGxlKSAtPiBOb25lOgogICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogICAgICAgIHNlbGYucmVnaXN0ZXJfYnVmZmVyKCdkYXRhJywgdG9yY2guemVyb3Moa3ZfY2FjaGVfc2hhcGUsIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKSkKICAgICAgICBzZWxmLnNlcV9sZW4gPSAwCiAgICAgICAgc2VsZi56ZXJvKCkKCiAgICBkZWYgemVybyhzZWxmKSAtPiBOb25lOgogICAgICAgIHNlbGYuZGF0YS56ZXJvXygpCiAgICAKICAgIGRlZiBnZXRfZGF0YShzZWxmKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIGNfa3Y6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIGFzc2VydCBzZWxmLnNlcV9sZW4gKyBjX2t2LnNpemUoMSkgPD0gc2VsZi5kYXRhLnNpemUoMSksICJLViBDYWNoZSBFeGNlZWRlZCIKCiAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5kYXRhLnRvKGNfa3YuZHR5cGUpCiAgICAgICAgc2VsZi5kYXRhWwogICAgICAgICAgICA6LCBzZWxmLnNlcV9sZW4gOiBzZWxmLnNlcV9sZW4gKyBjX2t2LnNpemUoMSksIDoKICAgICAgICBdID0gY19rdgogICAgICAgIHNlbGYuc2VxX2xlbiArPSBjX2t2LnNpemUoMSkKCiAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVs6LCA6c2VsZi5zZXFfbGVuXSwgc2VsZi5zZXFfbGVuCgpAZGF0YWNsYXNzCmNsYXNzIENvbmZpZzoKICAgIGJhdGNoX3NpemU6IGludAogICAgZGltOiBpbnQKICAgIG5faGVhZHM6IGludAogICAgcV9sb3JhX3Jhbms6IGludCAKICAgIGt2X2xvcmFfcmFuazogaW50CiAgICBxa19ub3BlX2hlYWRfZGltOiBpbnQKICAgIHFrX3JvcGVfaGVhZF9kaW06IGludAogICAgdl9oZWFkX2RpbTogaW50CiAgICBzZXFfbGVuOiBpbnQKICAgIG1heF9zZXFfbGVuOiBpbnQKICAgIGt2X2NhY2hlX3NoYXBlOiB0dXBsZQogICAgUV9wcm9qX2Rvd25fd2VpZ2h0OiB0b3JjaC5UZW5zb3IKICAgIFFfcHJval91cF93ZWlnaHQ6IHRvcmNoLlRlbnNvcgogICAgS1ZfcHJval9kb3duX3dlaWdodDogdG9yY2guVGVuc29yCiAgICBLVl9wcm9qX3VwX3dlaWdodDogdG9yY2guVGVuc29yCiAgICB3b193ZWlnaHQ6IHRvcmNoLlRlbnNvcgoKY2xhc3MgTUxBKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBDb25maWcsIG1sYV90bF9rZXJuZWw6IHRpbGVsYW5nLkpJVEtlcm5lbCwga2VybmVsX2Jlc3RfY29uZmlnKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLmRpbSA9IGNvbmZpZy5kaW0KICAgICAgICBzZWxmLm5faGVhZHMgPSBjb25maWcubl9oZWFkcwogICAgICAgIHNlbGYucV9sb3JhX3JhbmsgPSBjb25maWcucV9sb3JhX3JhbmsKICAgICAgICBzZWxmLmt2X2xvcmFfcmFuayA9IGNvbmZpZy5rdl9sb3JhX3JhbmsKICAgICAgICBzZWxmLm5vcGVfaGVhZF9kaW0gPSBjb25maWcucWtfbm9wZV9oZWFkX2RpbQogICAgICAgIHNlbGYucm9wZV9oZWFkX2RpbSA9IGNvbmZpZy5xa19yb3BlX2hlYWRfZGltCiAgICAgICAgc2VsZi52X2hlYWRfZGltID0gY29uZmlnLnZfaGVhZF9kaW0KICAgICAgICBkZXZpY2UgPSAiY3VkYSIKICAgICAgICBzZWxmLlFfcHJval9kb3duID0gbm4uTGluZWFyKHNlbGYuZGltLCBzZWxmLnFfbG9yYV9yYW5rLCBiaWFzPUZhbHNlLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPWRldmljZSkKICAgICAgICBzZWxmLktWX3Byb2pfZG93biA9IG5uLkxpbmVhcihzZWxmLmRpbSwgc2VsZi5rdl9sb3JhX3JhbmsgKyBzZWxmLnJvcGVfaGVhZF9kaW0sIGJpYXM9RmFsc2UsIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9ZGV2aWNlKQoKICAgICAgICBzZWxmLlFfcHJval91cCA9IG5uLkxpbmVhcihzZWxmLnFfbG9yYV9yYW5rLCAoc2VsZi5ub3BlX2hlYWRfZGltICsgc2VsZi5yb3BlX2hlYWRfZGltKSAqIHNlbGYubl9oZWFkcywgYmlhcz1GYWxzZSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT1kZXZpY2UpCiAgICAgICAgc2VsZi5LVl9wcm9qX3VwID0gbm4uTGluZWFyKHNlbGYua3ZfbG9yYV9yYW5rLCAoc2VsZi5ub3BlX2hlYWRfZGltICsgc2VsZi52X2hlYWRfZGltKSAqIHNlbGYubl9oZWFkcywgYmlhcz1GYWxzZSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT1kZXZpY2UpCgogICAgICAgICMgUm9QRSBvbiBoYWxmIGVtYmVkZGluZ3MKICAgICAgICBzZWxmLnFfcm9wZSA9IFJvUEUoc2VsZi5yb3BlX2hlYWRfZGltKQogICAgICAgIHNlbGYua19yb3BlID0gUm9QRShzZWxmLnJvcGVfaGVhZF9kaW0pCgogICAgICAgICMgT3V0cHV0IHByb2plY3Rpb24KICAgICAgICBzZWxmLndvID0gbm4uTGluZWFyKHNlbGYudl9oZWFkX2RpbSAqIHNlbGYubl9oZWFkcywgc2VsZi5kaW0sIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBiaWFzPUZhbHNlLCBkZXZpY2U9ZGV2aWNlKQogICAgICAgIHNlbGYuZXBzID0gMWUtNgogICAgICAgIHNlbGYubWxhX3RsX2tlcm5lbCA9IG1sYV90bF9rZXJuZWwKICAgICAgICBzZWxmLmtlcm5lbF9iZXN0X2NvbmZpZyA9IGtlcm5lbF9iZXN0X2NvbmZpZwogICAKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvciwga3ZfY2FjaGU6IEtWQ2FjaGUpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICAjIHNlcV9sZW4gPSAxIGFsd2F5cyBoZXJlCiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgbW9kZWxfZGltID0geC5zaXplKCkKCiAgICAgICAgcV9sb3JhID0gc2VsZi5RX3Byb2pfZG93bih4KQogICAgICAgIGt2X2xvcmEgPSBzZWxmLktWX3Byb2pfZG93bih4KQogICAgICAgIGt2X2xvcmEsIGt2X2xlbiA9IGt2X2NhY2hlKGt2X2xvcmEpIAogICAgICAgIHF1ZXJ5X3BvcyA9IGt2X2xlbiAtIDEKCiAgICAgICAgcV9ub3BlX2FuZF9wZSA9IHNlbGYuUV9wcm9qX3VwKHFfbG9yYSkudmlldygKICAgICAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgc2VsZi5uX2hlYWRzLCBzZWxmLm5vcGVfaGVhZF9kaW0gKyBzZWxmLnJvcGVfaGVhZF9kaW0pLnRyYW5zcG9zZSgxLCAyKQogICAgICAgIHEsIHFfcGUgPSB0b3JjaC5zcGxpdChxX25vcGVfYW5kX3BlLCBbc2VsZi5ub3BlX2hlYWRfZGltLCBzZWxmLnJvcGVfaGVhZF9kaW1dLCBkaW09LTEpCiAgICAgICAgcV9wZSA9IHNlbGYucV9yb3BlKHFfcGUsIHN0YXJ0X3Bvcz1xdWVyeV9wb3MpCgogICAgICAgIGt2LCBrX3BlID0gdG9yY2guc3BsaXQoa3ZfbG9yYSwgW3NlbGYua3ZfbG9yYV9yYW5rLCBzZWxmLnJvcGVfaGVhZF9kaW1dLCBkaW09LTEpCiAgICAgICAga19wZSA9IGtfcGVbOiwgTm9uZSwgOiwgOl0KICAgICAgICBrX3BlID0gc2VsZi5rX3JvcGUoa19wZSkKCiAgICAgICAgS1ZfcHJval91cCA9IHNlbGYuS1ZfcHJval91cC53ZWlnaHQudmlldyhzZWxmLm5faGVhZHMsIC0xLCBzZWxmLmt2X2xvcmFfcmFuaykKICAgICAgICBxX2Fic29yYiA9IEtWX3Byb2pfdXBbOiwgOnNlbGYubm9wZV9oZWFkX2RpbSwgOl0KICAgICAgICBvdXRfYWJzb3JiID0gS1ZfcHJval91cFs6LCBzZWxmLm5vcGVfaGVhZF9kaW06LCA6XQogICAgICAgIHEgPSB0b3JjaC5tYXRtdWwocSwgcV9hYnNvcmIpCiAgICAgICAgCiAgICAgICAgbnVtX3NwbGl0cyA9IHNlbGYua2VybmVsX2Jlc3RfY29uZmlnWydudW1fc3BsaXQnXQogICAgICAgIGdsc2UgPSB0b3JjaC56ZXJvcygoYmF0Y2hfc2l6ZSwgc2VsZi5uX2hlYWRzLCBudW1fc3BsaXRzKSwgZHR5cGU9dG9yY2guZmxvYXQsIGRldmljZT14LmRldmljZSkKICAgICAgICBvdXRwdXRfcGFydGlhbCA9IHRvcmNoLnplcm9zKChiYXRjaF9zaXplLCBzZWxmLm5faGVhZHMsIG51bV9zcGxpdHMsIHNlbGYua3ZfbG9yYV9yYW5rKSwgZHR5cGU9dG9yY2guZmxvYXQsIGRldmljZT14LmRldmljZSkKICAgICAgICAKICAgICAgICBxX3RsID0gcS52aWV3KGJhdGNoX3NpemUsIHNlbGYubl9oZWFkcywgc2VsZi5rdl9sb3JhX3JhbmspCiAgICAgICAgcV9wZV90bCA9IHFfcGUudmlldyhiYXRjaF9zaXplLCBzZWxmLm5faGVhZHMsIHNlbGYucm9wZV9oZWFkX2RpbSkKICAgICAgICBrdl90bCA9IGt2LnZpZXcoYmF0Y2hfc2l6ZSwga3ZfbGVuLCAxLCBzZWxmLmt2X2xvcmFfcmFuaykuY29udGlndW91cygpCiAgICAgICAga19wZV90bCA9IGtfcGUudHJhbnNwb3NlKDEsIDIpCgogICAgICAgIHRsX2F0dG5fb3V0ID0gdG9yY2guemVyb3MoKGJhdGNoX3NpemUsIHNlbGYubl9oZWFkcywgc2VsZi5rdl9sb3JhX3JhbmspLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPXguZGV2aWNlKQogICAgICAgIGlmIGt2X2xlbiA8IDEzMDoKICAgICAgICAgICAgc29mdG1heF9zY2FsZSA9IDEgLyBtYXRoLnNxcnQoc2VsZi5yb3BlX2hlYWRfZGltICsgc2VsZi5ub3BlX2hlYWRfZGltKQogICAgICAgICAgICBhdHRuX3dlaWdodHMgPSAodG9yY2gubWF0bXVsKHFfcGUsIGtfcGUubVQpICsgdG9yY2gubWF0bXVsKHEsIGt2LnVuc3F1ZWV6ZSgtMykubVQpKSAqIHNvZnRtYXhfc2NhbGUKICAgICAgICAgICAgYXR0bl93ZWlnaHRzX3NvZnRtYXggPSBubi5mdW5jdGlvbmFsLnNvZnRtYXgoYXR0bl93ZWlnaHRzLCBkaW09LTEsIGR0eXBlPXRvcmNoLmZsb2F0MzIpLnRvKHEuZHR5cGUpCiAgICAgICAgICAgIHRsX2F0dG5fb3V0ID0gdG9yY2guZWluc3VtKCdiaHFsLCBibGMgLT4gYmhxYycsIGF0dG5fd2VpZ2h0c19zb2Z0bWF4LCBrdikKCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdGxfYXR0bl9vdXQgPSBzZWxmLm1sYV90bF9rZXJuZWwoCiAgICAgICAgICAgICAgICBxX3RsLCAgICAgICAgIAogICAgICAgICAgICAgICAgcV9wZV90bCwgICAgIAogICAgICAgICAgICAgICAga3ZfdGwsIAogICAgICAgICAgICAgICAga19wZV90bCwgICAgIAogICAgICAgICAgICAgICAgZ2xzZSwKICAgICAgICAgICAgICAgIG91dHB1dF9wYXJ0aWFsLAogICAgICAgICAgICApCgogICAgICAgIHRsX2F0dG5fb3V0ID0gdGxfYXR0bl9vdXQudmlldyhiYXRjaF9zaXplLCBzZWxmLm5faGVhZHMsIDEsIHNlbGYua3ZfbG9yYV9yYW5rKQogICAgICAgIG91dF9hYnNvcmIgPSBvdXRfYWJzb3JiLnRyYW5zcG9zZSgtMiwgLTEpLmNvbnRpZ3VvdXMoKQoKICAgICAgICB0bF9hdHRuX291dCA9IHRvcmNoLm1hdG11bCh0bF9hdHRuX291dCwgb3V0X2Fic29yYikKICAgIAogICAgICAgIHRsX2F0dG5fb3V0ID0gdGxfYXR0bl9vdXQudHJhbnNwb3NlKDEsIDIpLmNvbnRpZ3VvdXMoKQogICAgICAgIHRsX2F0dG5fb3V0ID0gdGxfYXR0bl9vdXQucmVzaGFwZShiYXRjaF9zaXplLCAxLCBzZWxmLm5faGVhZHMgKiBzZWxmLnZfaGVhZF9kaW0pCiAgICAgICAgdGxfYXR0bl9vdXQgPSBzZWxmLndvKHRsX2F0dG5fb3V0KQogICAgICAgIHJldHVybiB0bF9hdHRuX291dCwga3ZfY2FjaGUuZ2V0X2RhdGEoKSAKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgY29uZmlnLCB4LCBrdl9jYWNoZSA9IGRhdGEKICAgIG1sYV90bF9rZXJuZWwsIGtlcm5lbF9iZXN0X2NvbmZpZyA9IGdldF9vcHRpbWFsX2tlcm5lbCgKICAgICAgICBiYXRjaD1jb25maWcuYmF0Y2hfc2l6ZSwKICAgICAgICBoZWFkcz1jb25maWcubl9oZWFkcywKICAgICAgICBrdl9oZWFkX251bT0xLAogICAgICAgIHNlcWxlbl9rdj1rdl9jYWNoZS5zZXFfbGVuLAogICAgICAgIGRpbT1jb25maWcua3ZfbG9yYV9yYW5rLAogICAgICAgIHBlX2RpbT1jb25maWcucWtfcm9wZV9oZWFkX2RpbQogICAgKQogICAgbW9kZWwgPSBNTEEoY29uZmlnLCBtbGFfdGxfa2VybmVsLCBrZXJuZWxfYmVzdF9jb25maWcpCiAgICBtb2RlbC5RX3Byb2pfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoY29uZmlnLlFfcHJval9kb3duX3dlaWdodCkKICAgIG1vZGVsLlFfcHJval91cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoY29uZmlnLlFfcHJval91cF93ZWlnaHQpCiAgICBtb2RlbC5LVl9wcm9qX2Rvd24ud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0KQogICAgbW9kZWwuS1ZfcHJval91cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoY29uZmlnLktWX3Byb2pfdXBfd2VpZ2h0KQogICAgbW9kZWwud28ud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKGNvbmZpZy53b193ZWlnaHQpCiAgICBvdXRwdXQsIGt2X2NhY2hlID0gbW9kZWwoeCwga3ZfY2FjaGUpCiAgICByZXR1cm4gb3V0cHV0LCBrdl9jYWNoZQ==

Source code from GPU Mode and the KernelBot dataset · June 9 Researcher Reciprocity License v1.0

Best evidence level for this revision: reported

JSON