Skip to content
KernelIndex
Search⌘K

amd-mixture-of-experts · submission 14173

KernelBot user 212 · 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.

submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mixture-of-experts-14173?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp16

Benchmark evidence

2 measurements across 1 GPU, fastest first.

Operation / workload
Hardware
Latency
Rank
Observed
AMD DeepSeek-style MoE layerfp16 · [1, 2048, 7168]
AMD Instinct MI300X
7.42s
#116 of 118
2025-05-01
AMD DeepSeek-style MoE layerfp16 · [1, 8192, 7168]
AMD Instinct MI300X
11.5s
#117 of 118
2025-05-01

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:39618ad7cb1b22a65661998f05125dae030fdc56d3aa798848d405a1e1dcaacc
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

submission.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1taXh0dXJlLW9mLWV4cGVydHMnLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiwgc2VlOiBodHRwczovL3Rpbnl1cmwuY29tL2FtZC1jb21wLW1vZQojID4gSW1wbGVtZW50IGEgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIChNb0UpIGxheWVyIGZvciBlZmZpY2llbnQgdHJhbnNmb3JtZXIgbW9kZWxzCiMgPiBvbiBhIHNpbmdsZSBNSTMwMFggZGV2aWNlLgojID4KIyA+IE1vRSBpcyBhIHRlY2huaXF1ZSB0aGF0IGFsbG93cyBzY2FsaW5nIG1vZGVsIGNhcGFjaXR5IHdpdGhvdXQgcHJvcG9ydGlvbmFsbHkgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGNvc3RzCiMgPiBieSB1c2luZyBhIHJvdXRpbmcgbWVjaGFuaXNtIHRvIHNlbGVjdGl2ZWx5IGFjdGl2YXRlIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCB0b2tlbi4KIyA+CiMgPiBZb3VyIHRhc2s6CiMgPiAtIEltcGxlbWVudCB0b2tlbiByb3V0aW5nIHVzaW5nIGEgc2ltcGxlIHNvZnRtYXgtYmFzZWQgbGVhcm5lZCByb3V0ZXIKIyA+IC0gUm91dGUgdG9rZW5zIHRvIHRoZSB0b3AtayBleHBlcnRzIGJhc2VkIG9uIHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIFByb2Nlc3MgdG9rZW5zIHRocm91Z2ggdGhlaXIgYXNzaWduZWQgZXhwZXJ0cwojID4gLSBDb21iaW5lIGV4cGVydCBvdXRwdXRzIHdlaWdodGVkIGJ5IHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIENhbGN1bGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgbG9zc2VzIGZvciB0cmFpbmluZyBzdGFiaWxpdHkKIyA+CiMgPiBJbnB1dDoKIyA+IC0gYGRhdGFgOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKIyA+ICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFticywgc2VxX2xlbiwgZF9oaWRkZW5dCiMgPiAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKIyA+ICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKIyA+CiMgPiBPdXRwdXQ6CiMgPiAtIFR1cGxlIGNvbnRhaW5pbmc6CiMgPiAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFticywgc2VxX2xlbiwgZF9tb2RlbF0KIyA+ICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhIGxpa2Ugcm91dGVyIHByb2JhYmlsaXRpZXMgYW5kIGxvc3NlcwojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCgpjbGFzcyBFeHBlcnQobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc6IERpY3QsIGRfZXhwZXJ0OiBPcHRpb25hbFtpbnRdID0gTm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmFjdF9mbiA9IG5uLlNpTFUoKQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQogICAgICAgIHNlbGYuZF9leHBlcnQ6IGludCA9IGNvbmZpZ1siZF9leHBlcnQiXSBpZiBkX2V4cGVydCBpcyBOb25lIGVsc2UgZF9leHBlcnQKCiAgICAgICAgc2VsZi5XX2dhdGUgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfdXAgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfZG93biA9IG5uLkxpbmVhcihzZWxmLmRfZXhwZXJ0LCBzZWxmLmRfaGlkZGVuLCBiaWFzPUZhbHNlKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIGdhdGUgPSBzZWxmLmFjdF9mbihzZWxmLldfZ2F0ZSh4KSkKICAgICAgICBvdXQgPSBzZWxmLldfZG93bihnYXRlICogc2VsZi5XX3VwKHgpKQogICAgICAgIHJldHVybiBvdXQKCgpjbGFzcyBNb0VHYXRlKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnRvcF9rOiBpbnQgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYubnVtX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICAgICAgc2VsZi5kX2hpZGRlbjogaW50ID0gY29uZmlnWyJkX2hpZGRlbiJdCgogICAgICAgIHNlbGYuV19nID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYubnVtX2V4cGVydHMsIGJpYXM9RmFsc2UpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiBUdXBsZVt0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06CiAgICAgICAgbG9naXRzID0gc2VsZi5XX2coeCkKICAgICAgICBzY29yZXMgPSBsb2dpdHMuc29mdG1heChkaW09LTEpCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcyA9IHRvcmNoLnRvcGsoCiAgICAgICAgICAgIHNjb3Jlcywgaz1zZWxmLnRvcF9rLCBkaW09LTEsIHNvcnRlZD1GYWxzZQogICAgICAgICkKCiAgICAgICAgIyBwcmludCgiaW5wdXQiLCB4LnNoYXBlKQogICAgICAgICMgcHJpbnQoInRvcGtfaW5kaWNlcyIsIHRvcGtfaW5kaWNlcy5zaGFwZSkKICAgICAgICAjIHByaW50KCJ0b3BrX3Njb3JlcyIsIHRvcGtfc2NvcmVzLnNoYXBlKQoKICAgICAgICByZXR1cm4gdG9wa19pbmRpY2VzLCB0b3BrX3Njb3JlcwoKCmNsYXNzIE1vRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgY29uZmlnOiBEaWN0LAogICAgICAgIGVfZ2F0ZTogbm4uUGFyYW1ldGVyLAogICAgICAgIGVfdXA6IG5uLlBhcmFtZXRlciwKICAgICAgICBlX2Rvd246IG5uLlBhcmFtZXRlciwKICAgICk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmV4cGVydHMgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICBbRXhwZXJ0KGNvbmZpZykgZm9yIF8gaW4gcmFuZ2UoY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0pXQogICAgICAgICkKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcpCiAgICAgICAgc2hhcmVkX2V4cGVydF9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydCA9IEV4cGVydChjb25maWc9Y29uZmlnLCBkX2V4cGVydD1zaGFyZWRfZXhwZXJ0X2RpbSkKICAgICAgICBzZWxmLmVfZ2F0ZSA9IGVfZ2F0ZQogICAgICAgIHNlbGYuZV91cCA9IGVfdXAKICAgICAgICBzZWxmLmVfZG93biA9IGVfZG93bgoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIHNoYXJlZF9vdXRwdXQgPSBzZWxmLnNoYXJlZF9leHBlcnQoeCkKICAgICAgICBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcyA9IHNlbGYuZ2F0aW5nX25ldHdvcmsoeCkKICAgICAgICBiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fZGltID0geC5zaGFwZQogICAgICAgICIiIgogICAgICAgIG9yaWdfc2hhcGUgPSB4LnNoYXBlCiAgICAgICAgeF9mbGF0ID0geC52aWV3KC0xLCBoaWRkZW5fZGltKQogICAgICAgIGZsYXRfZXhwZXJ0X2luZGljZXMgPSBleHBlcnRfaW5kaWNlcy52aWV3KC0xKQogICAgICAgIGZsYXRfZXhwZXJ0X3dlaWdodHMgPSBleHBlcnRfc2NvcmVzLnZpZXcoLTEsIDEpCiAgICAgICAgcm91dGVkX291dHB1dF9mbGF0ID0gc2VsZi5tb2VfaW5mZXIoCiAgICAgICAgICAgIHhfZmxhdCwgZmxhdF9leHBlcnRfaW5kaWNlcywgZmxhdF9leHBlcnRfd2VpZ2h0cwogICAgICAgICkKCiAgICAgICAgcm91dGVkX291dHB1dCA9IHJvdXRlZF9vdXRwdXRfZmxhdC52aWV3KCpvcmlnX3NoYXBlKQogICAgICAgICIiIgogICAgICAgICMgcHJpbnQoImV4cGVydF9zY29yZXMiLCBleHBlcnRfc2NvcmVzLnNoYXBlKQogICAgICAgIHJvdXRlZF9vdXRwdXQgPSBzZWxmLm1vZV9pbmZlcih4LCBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcykKICAgICAgICByZXR1cm4gcm91dGVkX291dHB1dCArIHNoYXJlZF9vdXRwdXQKCiAgICBAdG9yY2gubm9fZ3JhZCgpCiAgICBkZWYgbW9lX2luZmVyKAogICAgICAgIHNlbGYsCiAgICAgICAgeDogdG9yY2guVGVuc29yLAogICAgICAgIGV4cGVydF9pbmRpY2VzOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgZXhwZXJ0X3Njb3JlczogdG9yY2guVGVuc29yLAogICAgICAgICMgZmxhdF9leHBlcnRfaW5kaWNlczogdG9yY2guVGVuc29yLAogICAgICAgICMgZmxhdF9leHBlcnRfd2VpZ2h0czogdG9yY2guVGVuc29yLAogICAgKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICAjIHByaW50KHguZHR5cGUpCiAgICAgICAgIyBwcmludChzZWxmLmVfZ2F0ZS5kdHlwZSkKCiAgICAgICAgb3V0ID0gdG9yY2guemVyb3NfbGlrZSh4KQogICAgICAgIGZvciBpIGluIHJhbmdlKGJhdGNoX3NpemUpOgogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShzZXFfbGVuKToKICAgICAgICAgICAgICAgIGlucHV0ID0geFtpLCBqXS50byhzZWxmLmVfZ2F0ZS5kdHlwZSkKICAgICAgICAgICAgICAgIGlkeCA9IGV4cGVydF9pbmRpY2VzW2ksIGpdCiAgICAgICAgICAgICAgICBnYXRlID0gRi5zaWx1KHNlbGYuZV9nYXRlW2lkeF0ubWF0bXVsKGlucHV0KSwgaW5wbGFjZT1UcnVlKQogICAgICAgICAgICAgICAgIyB5ID0gc2VsZi5lX2Rvd25baWR4XS5tYXRtdWwoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICAjIHByaW50KCJlX2Rvd24iLCBzZWxmLmVfZG93bltpZHhdLnNoYXBlKQogICAgICAgICAgICAgICAgIyBwcmludCgiZ2F0ZSIsIGdhdGUuc2hhcGUpCiAgICAgICAgICAgICAgICAjIHByaW50KAogICAgICAgICAgICAgICAgIyAiZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkiLAogICAgICAgICAgICAgICAgIyAoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpLnVuc3F1ZWV6ZSgyKS5zaGFwZSwKICAgICAgICAgICAgICAgICMgKQogICAgICAgICAgICAgICAgIyB5ID0gc2VsZi5lX2Rvd25baWR4XS5kb3QoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICB5ID0gdG9yY2guYm1tKAogICAgICAgICAgICAgICAgICAgIHNlbGYuZV9kb3duW2lkeF0sCiAgICAgICAgICAgICAgICAgICAgKGdhdGUgKiBzZWxmLmVfdXBbaWR4XS5tYXRtdWwoaW5wdXQpKS51bnNxdWVlemVfKDIpLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIyBwcmludCgieSIsIHkuc2hhcGUpCiAgICAgICAgICAgICAgICB5LnNxdWVlemVfKDIpCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgICMgcHJpbnQoImV4cGVydF9zY29yZXNbaSwgal0iLCBleHBlcnRfc2NvcmVzW2ksIGpdLnNoYXBlKQogICAgICAgICAgICAgICAgeSA9IHkgKiBleHBlcnRfc2NvcmVzW2ksIGpdWzosIE5vbmVdCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgIG91dFtpLCBqXSA9IHkuc3VtKGRpbT0wKQoKICAgICAgICByZXR1cm4gb3V0CiAgICAgICAgIiIiCiAgICAgICAgcHJpbnQoIngiLCB4LnNoYXBlKQogICAgICAgIHByaW50KCJmbGF0X2V4cGVydF9pbmRpY2VzIiwgZmxhdF9leHBlcnRfaW5kaWNlcy5zaGFwZSkKICAgICAgICBwcmludCgiZmxhdF9leHBlcnRfd2VpZ2h0cyIsIGZsYXRfZXhwZXJ0X3dlaWdodHMuc2hhcGUpCiAgICAgICAgZXhwZXJ0X2NhY2hlID0gdG9yY2guemVyb3NfbGlrZSh4KQogICAgICAgIGlkeHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmFyZ3NvcnQoKQogICAgICAgIHByaW50KCJpZHhzIiwgaWR4cy5zaGFwZSkKICAgICAgICBjb3VudHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmJpbmNvdW50KCkuY3B1KCkubnVtcHkoKQogICAgICAgIHRva2Vuc19wZXJfZXhwZXJ0ID0gY291bnRzLmN1bXN1bSgpCiAgICAgICAgcHJpbnQoInRva2Vuc19wZXJfZXhwZXJ0IiwgdG9rZW5zX3Blcl9leHBlcnQuc2hhcGUpCiAgICAgICAgbnVtX3Blcl90b2sgPSBzZWxmLmNvbmZpZ1sibl9leHBlcnRzX3Blcl90b2tlbiJdCiAgICAgICAgdG9rZW5faWR4cyA9IGlkeHMgLy8gbnVtX3Blcl90b2sKICAgICAgICBmb3IgZXhwZXJ0X2lkLCBlbmRfaWR4IGluIGVudW1lcmF0ZSh0b2tlbnNfcGVyX2V4cGVydCk6CiAgICAgICAgICAgIHN0YXJ0X2lkeCA9IDAgaWYgZXhwZXJ0X2lkID09IDAgZWxzZSB0b2tlbnNfcGVyX2V4cGVydFtleHBlcnRfaWQgLSAxXQogICAgICAgICAgICBpZiBzdGFydF9pZHggPT0gZW5kX2lkeDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBleHBlcnQgPSBzZWxmLmV4cGVydHNbZXhwZXJ0X2lkXQogICAgICAgICAgICBleHBfdG9rZW5faWR4cyA9IHRva2VuX2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdCiAgICAgICAgICAgIGV4cGVydF90b2tlbnMgPSB4W2V4cF90b2tlbl9pZHhzXQogICAgICAgICAgICBleHBlcnRfb3V0ID0gZXhwZXJ0KGV4cGVydF90b2tlbnMpCiAgICAgICAgICAgIGV4cGVydF9vdXQubXVsXyhmbGF0X2V4cGVydF93ZWlnaHRzW2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdXSkKICAgICAgICAgICAgZXhwZXJ0X2NhY2hlLnNjYXR0ZXJfcmVkdWNlXygKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBleHBfdG9rZW5faWR4cy52aWV3KC0xLCAxKS5yZXBlYXQoMSwgeC5zaGFwZVstMV0pLAogICAgICAgICAgICAgICAgZXhwZXJ0X291dCwKICAgICAgICAgICAgICAgIHJlZHVjZT0ic3VtIiwKICAgICAgICAgICAgKQoKICAgICAgICBwcmludCgiZXhwZXJ0X2NhY2hlIiwgZXhwZXJ0X2NhY2hlLnNoYXBlKQogICAgICAgIHJldHVybiBleHBlcnRfY2FjaGUKICAgICAgICAiIiIKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgICIiIgogICAgU3VibWlzc2lvbiB0ZW1wbGF0ZSBmb3IgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIHVzaW5nIFB5VG9yY2guCgogICAgQXJnczoKICAgICAgICBkYXRhOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKICAgICAgICAgICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fc2l6ZV0KICAgICAgICAgICAgLSB3ZWlnaHRzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbW9kZWwgd2VpZ2h0cwogICAgICAgICAgICAtIGNvbmZpZzogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwoKICAgIFJldHVybnM6CiAgICAgICAgVHVwbGUgY29udGFpbmluZzoKICAgICAgICAgICAgLSBvdXRwdXQ6IFByb2Nlc3NlZCB0ZW5zb3IgW2JhdGNoX3NpemUsIHNlcV9sZW4sIGRfbW9kZWxdCiAgICAgICAgICAgIC0gYXV4X2RhdGE6IERpY3Rpb25hcnkgd2l0aCBhdXhpbGlhcnkgZGF0YQogICAgIiIiCiAgICBpbnB1dF90ZW5zb3IsIHdlaWdodHMsIGNvbmZpZyA9IGRhdGEKICAgIG51bV9leHBlcnRzID0gY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0KCiAgICBneCwgZ3kgPSB3ZWlnaHRzW2YiZXhwZXJ0cy4wLjAud2VpZ2h0Il0uc2hhcGUKICAgIHV4LCB1eSA9IHdlaWdodHNbZiJleHBlcnRzLjAuMS53ZWlnaHQiXS5zaGFwZQogICAgZHgsIGR5ID0gd2VpZ2h0c1tmImV4cGVydHMuMC4yLndlaWdodCJdLnNoYXBlCgogICAgZV9nYXRlID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCBneSwgZ3gpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKICAgIGVfdXAgPSB0b3JjaC56ZXJvcygobnVtX2V4cGVydHMsIHV5LCB1eCksIGRldmljZT1pbnB1dF90ZW5zb3IuZGV2aWNlKQogICAgZV9kb3duID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCBkeSwgZHgpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKCiAgICBmb3IgaSBpbiByYW5nZShudW1fZXhwZXJ0cyk6CiAgICAgICAgZV9nYXRlW2ldID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0udCgpCiAgICAgICAgZV91cFtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdLnQoKQogICAgICAgIGVfZG93bltpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdLnQoKQoKICAgIG1vZSA9IE1vRShjb25maWcsIGVfZ2F0ZSwgZV91cCwgZV9kb3duKQoKICAgICMgRmlsbCBpbiB0aGUgZ2l2ZW4gd2VpZ2h0cyBvZiB0aGUgbW9kZWwKICAgIG1vZS5nYXRpbmdfbmV0d29yay5XX2cud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInJvdXRlci53ZWlnaHQiXSkKCiAgICAiIiIKICAgIGZvciBpIGluIHJhbmdlKG51bV9leHBlcnRzKToKICAgICAgICBnYXRlX3Byb2pfd2VpZ2h0ID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0KICAgICAgICB1cF9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdCiAgICAgICAgZG93bl9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdCgogICAgICAgICMgVHJhbnNwb3NlIHdlaWdodHMgdG8gbWF0Y2ggZXhwZWN0ZWQgc2hhcGUgZm9yIG5uLkxpbmVhcgogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZ2F0ZS53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZ2F0ZV9wcm9qX3dlaWdodC50KCkpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV191cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIodXBfcHJval93ZWlnaHQudCgpKQogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZG93bl9wcm9qX3dlaWdodC50KCkpCiAgICAiIiIKCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX2dhdGUud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKAogICAgICAgIHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjAud2VpZ2h0Il0udCgpCiAgICApCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX3VwLndlaWdodCA9IG5uLlBhcmFtZXRlcih3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCJdLnQoKSkKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgICAgd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMi53ZWlnaHQiXS50KCkKICAgICkKCiAgICAjIFJ1biB0aGUgbW9kZWwKICAgIG91dHB1dCA9IG1vZShpbnB1dF90ZW5zb3IpCgogICAgcmV0dXJuIG91dHB1dAo=

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

Changes from previous submission

Against this author's previous submission amd-mixture-of-experts · submission 14057.

- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1taXh0dXJlLW9mLWV4cGVydHMnLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiwgc2VlOiBodHRwczovL3Rpbnl1cmwuY29tL2FtZC1jb21wLW1vZQojID4gSW1wbGVtZW50IGEgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIChNb0UpIGxheWVyIGZvciBlZmZpY2llbnQgdHJhbnNmb3JtZXIgbW9kZWxzCiMgPiBvbiBhIHNpbmdsZSBNSTMwMFggZGV2aWNlLgojID4KIyA+IE1vRSBpcyBhIHRlY2huaXF1ZSB0aGF0IGFsbG93cyBzY2FsaW5nIG1vZGVsIGNhcGFjaXR5IHdpdGhvdXQgcHJvcG9ydGlvbmFsbHkgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGNvc3RzCiMgPiBieSB1c2luZyBhIHJvdXRpbmcgbWVjaGFuaXNtIHRvIHNlbGVjdGl2ZWx5IGFjdGl2YXRlIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCB0b2tlbi4KIyA+CiMgPiBZb3VyIHRhc2s6CiMgPiAtIEltcGxlbWVudCB0b2tlbiByb3V0aW5nIHVzaW5nIGEgc2ltcGxlIHNvZnRtYXgtYmFzZWQgbGVhcm5lZCByb3V0ZXIKIyA+IC0gUm91dGUgdG9rZW5zIHRvIHRoZSB0b3AtayBleHBlcnRzIGJhc2VkIG9uIHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIFByb2Nlc3MgdG9rZW5zIHRocm91Z2ggdGhlaXIgYXNzaWduZWQgZXhwZXJ0cwojID4gLSBDb21iaW5lIGV4cGVydCBvdXRwdXRzIHdlaWdodGVkIGJ5IHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIENhbGN1bGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgbG9zc2VzIGZvciB0cmFpbmluZyBzdGFiaWxpdHkKIyA+CiMgPiBJbnB1dDoKIyA+IC0gYGRhdGFgOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKIyA+ICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFticywgc2VxX2xlbiwgZF9oaWRkZW5dCiMgPiAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKIyA+ICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKIyA+CiMgPiBPdXRwdXQ6CiMgPiAtIFR1cGxlIGNvbnRhaW5pbmc6CiMgPiAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFticywgc2VxX2xlbiwgZF9tb2RlbF0KIyA+ICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhIGxpa2Ugcm91dGVyIHByb2JhYmlsaXRpZXMgYW5kIGxvc3NlcwojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCgpjbGFzcyBFeHBlcnQobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc6IERpY3QsIGRfZXhwZXJ0OiBPcHRpb25hbFtpbnRdID0gTm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmFjdF9mbiA9IG5uLlNpTFUoKQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQogICAgICAgIHNlbGYuZF9leHBlcnQ6IGludCA9IGNvbmZpZ1siZF9leHBlcnQiXSBpZiBkX2V4cGVydCBpcyBOb25lIGVsc2UgZF9leHBlcnQKCiAgICAgICAgc2VsZi5XX2dhdGUgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfdXAgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfZG93biA9IG5uLkxpbmVhcihzZWxmLmRfZXhwZXJ0LCBzZWxmLmRfaGlkZGVuLCBiaWFzPUZhbHNlKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIGdhdGUgPSBzZWxmLmFjdF9mbihzZWxmLldfZ2F0ZSh4KSkKICAgICAgICBvdXQgPSBzZWxmLldfZG93bihnYXRlICogc2VsZi5XX3VwKHgpKQogICAgICAgIHJldHVybiBvdXQKCgpjbGFzcyBNb0VHYXRlKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnRvcF9rOiBpbnQgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYubnVtX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICAgICAgc2VsZi5kX2hpZGRlbjogaW50ID0gY29uZmlnWyJkX2hpZGRlbiJdCgogICAgICAgIHNlbGYuV19nID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYubnVtX2V4cGVydHMsIGJpYXM9RmFsc2UpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiBUdXBsZVt0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06CiAgICAgICAgbG9naXRzID0gc2VsZi5XX2coeCkKICAgICAgICBzY29yZXMgPSBsb2dpdHMuc29mdG1heChkaW09LTEpCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcyA9IHRvcmNoLnRvcGsoCiAgICAgICAgICAgIHNjb3Jlcywgaz1zZWxmLnRvcF9rLCBkaW09LTEsIHNvcnRlZD1GYWxzZQogICAgICAgICkKCiAgICAgICAgIyBwcmludCgiaW5wdXQiLCB4LnNoYXBlKQogICAgICAgICMgcHJpbnQoInRvcGtfaW5kaWNlcyIsIHRvcGtfaW5kaWNlcy5zaGFwZSkKICAgICAgICAjIHByaW50KCJ0b3BrX3Njb3JlcyIsIHRvcGtfc2NvcmVzLnNoYXBlKQoKICAgICAgICByZXR1cm4gdG9wa19pbmRpY2VzLCB0b3BrX3Njb3JlcwoKCmNsYXNzIE1vRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZzogRGljdCk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmV4cGVydHMgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICBbRXhwZXJ0KGNvbmZpZykgZm9yIF8gaW4gcmFuZ2UoY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0pXQogICAgICAgICkKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcpCiAgICAgICAgc2hhcmVkX2V4cGVydF9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydCA9IEV4cGVydChjb25maWc9Y29uZmlnLCBkX2V4cGVydD1zaGFyZWRfZXhwZXJ0X2RpbSkKCiAgICBkZWYgZm9yd2FyZChzZWxmLCB4OiB0b3JjaC5UZW5zb3IpIC0+IHRvcmNoLlRlbnNvcjoKICAgICAgICBzaGFyZWRfb3V0cHV0ID0gc2VsZi5zaGFyZWRfZXhwZXJ0KHgpCiAgICAgICAgZXhwZXJ0X2luZGljZXMsIGV4cGVydF9zY29yZXMgPSBzZWxmLmdhdGluZ19uZXR3b3JrKHgpCiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICAiIiIKICAgICAgICBvcmlnX3NoYXBlID0geC5zaGFwZQogICAgICAgIHhfZmxhdCA9IHgudmlldygtMSwgaGlkZGVuX2RpbSkKICAgICAgICBmbGF0X2V4cGVydF9pbmRpY2VzID0gZXhwZXJ0X2luZGljZXMudmlldygtMSkKICAgICAgICBmbGF0X2V4cGVydF93ZWlnaHRzID0gZXhwZXJ0X3Njb3Jlcy52aWV3KC0xLCAxKQogICAgICAgIHJvdXRlZF9vdXRwdXRfZmxhdCA9IHNlbGYubW9lX2luZmVyKAogICAgICAgICAgICB4X2ZsYXQsIGZsYXRfZXhwZXJ0X2luZGljZXMsIGZsYXRfZXhwZXJ0X3dlaWdodHMKICAgICAgICApCgogICAgICAgIHJvdXRlZF9vdXRwdXQgPSByb3V0ZWRfb3V0cHV0X2ZsYXQudmlldygqb3JpZ19zaGFwZSkKICAgICAgICAiIiIKICAgICAgICAjIHByaW50KCJleHBlcnRfc2NvcmVzIiwgZXhwZXJ0X3Njb3Jlcy5zaGFwZSkKICAgICAgICByb3V0ZWRfb3V0cHV0ID0gc2VsZi5tb2VfaW5mZXIoeCwgZXhwZXJ0X2luZGljZXMsIGV4cGVydF9zY29yZXMpCiAgICAgICAgcmV0dXJuIHJvdXRlZF9vdXRwdXQgKyBzaGFyZWRfb3V0cHV0CgogICAgQHRvcmNoLm5vX2dyYWQoKQogICAgZGVmIG1vZV9pbmZlcigKICAgICAgICBzZWxmLAogICAgICAgIHg6IHRvcmNoLlRlbnNvciwKICAgICAgICBleHBlcnRfaW5kaWNlczogdG9yY2guVGVuc29yLAogICAgICAgIGV4cGVydF9zY29yZXM6IHRvcmNoLlRlbnNvciwKICAgICAgICAjIGZsYXRfZXhwZXJ0X2luZGljZXM6IHRvcmNoLlRlbnNvciwKICAgICAgICAjIGZsYXRfZXhwZXJ0X3dlaWdodHM6IHRvcmNoLlRlbnNvciwKICAgICkgLT4gdG9yY2guVGVuc29yOgogICAgICAgIGJhdGNoX3NpemUsIHNlcV9sZW4sIGhpZGRlbl9kaW0gPSB4LnNoYXBlCiAgICAgICAgIyBwcmludCh4LmR0eXBlKQogICAgICAgICMgcHJpbnQoc2VsZi5lX2dhdGUuZHR5cGUpCgogICAgICAgIG91dCA9IHRvcmNoLnplcm9zX2xpa2UoeCkKICAgICAgICBmb3IgaSBpbiByYW5nZShiYXRjaF9zaXplKToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2Uoc2VxX2xlbik6CiAgICAgICAgICAgICAgICBpbnB1dCA9IHhbaSwgal0udG8oc2VsZi5lX2dhdGUuZHR5cGUpCiAgICAgICAgICAgICAgICBpZHggPSBleHBlcnRfaW5kaWNlc1tpLCBqXQogICAgICAgICAgICAgICAgZ2F0ZSA9IG5uLlNpTFUoKShzZWxmLmVfZ2F0ZVtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICAjIHkgPSBzZWxmLmVfZG93bltpZHhdLm1hdG11bChnYXRlICogc2VsZi5lX3VwW2lkeF0ubWF0bXVsKGlucHV0KSkKICAgICAgICAgICAgICAgICMgcHJpbnQoImVfZG93biIsIHNlbGYuZV9kb3duW2lkeF0uc2hhcGUpCiAgICAgICAgICAgICAgICAjIHByaW50KCJnYXRlIiwgZ2F0ZS5zaGFwZSkKICAgICAgICAgICAgICAgICMgcHJpbnQoCiAgICAgICAgICAgICAgICAjICJnYXRlICogc2VsZi5lX3VwW2lkeF0ubWF0bXVsKGlucHV0KSIsCiAgICAgICAgICAgICAgICAjIChnYXRlICogc2VsZi5lX3VwW2lkeF0ubWF0bXVsKGlucHV0KSkudW5zcXVlZXplKDIpLnNoYXBlLAogICAgICAgICAgICAgICAgIyApCiAgICAgICAgICAgICAgICAjIHkgPSBzZWxmLmVfZG93bltpZHhdLmRvdChnYXRlICogc2VsZi5lX3VwW2lkeF0ubWF0bXVsKGlucHV0KSkKICAgICAgICAgICAgICAgIHkgPSB0b3JjaC5ibW0oCiAgICAgICAgICAgICAgICAgICAgc2VsZi5lX2Rvd25baWR4XSwKICAgICAgICAgICAgICAgICAgICAoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpLnVuc3F1ZWV6ZV8oMiksCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgIHkuc3F1ZWV6ZV8oMikKICAgICAgICAgICAgICAgICMgcHJpbnQoInkiLCB5LnNoYXBlKQogICAgICAgICAgICAgICAgIyBwcmludCgiZXhwZXJ0X3Njb3Jlc1tpLCBqXSIsIGV4cGVydF9zY29yZXNbaSwgal0uc2hhcGUpCiAgICAgICAgICAgICAgICB5ID0geSAqIGV4cGVydF9zY29yZXNbaSwgal1bOiwgTm9uZV0KICAgICAgICAgICAgICAgICMgcHJpbnQoInkiLCB5LnNoYXBlKQogICAgICAgICAgICAgICAgb3V0W2ksIGpdID0geS5zdW0oZGltPTApCgogICAgICAgIHJldHVybiBvdXQKICAgICAgICAiIiIKICAgICAgICBwcmludCgieCIsIHguc2hhcGUpCiAgICAgICAgcHJpbnQoImZsYXRfZXhwZXJ0X2luZGljZXMiLCBmbGF0X2V4cGVydF9pbmRpY2VzLnNoYXBlKQogICAgICAgIHByaW50KCJmbGF0X2V4cGVydF93ZWlnaHRzIiwgZmxhdF9leHBlcnRfd2VpZ2h0cy5zaGFwZSkKICAgICAgICBleHBlcnRfY2FjaGUgPSB0b3JjaC56ZXJvc19saWtlKHgpCiAgICAgICAgaWR4cyA9IGZsYXRfZXhwZXJ0X2luZGljZXMuYXJnc29ydCgpCiAgICAgICAgcHJpbnQoImlkeHMiLCBpZHhzLnNoYXBlKQogICAgICAgIGNvdW50cyA9IGZsYXRfZXhwZXJ0X2luZGljZXMuYmluY291bnQoKS5jcHUoKS5udW1weSgpCiAgICAgICAgdG9rZW5zX3Blcl9leHBlcnQgPSBjb3VudHMuY3Vtc3VtKCkKICAgICAgICBwcmludCgidG9rZW5zX3Blcl9leHBlcnQiLCB0b2tlbnNfcGVyX2V4cGVydC5zaGFwZSkKICAgICAgICBudW1fcGVyX3RvayA9IHNlbGYuY29uZmlnWyJuX2V4cGVydHNfcGVyX3Rva2VuIl0KICAgICAgICB0b2tlbl9pZHhzID0gaWR4cyAvLyBudW1fcGVyX3RvawogICAgICAgIGZvciBleHBlcnRfaWQsIGVuZF9pZHggaW4gZW51bWVyYXRlKHRva2Vuc19wZXJfZXhwZXJ0KToKICAgICAgICAgICAgc3RhcnRfaWR4ID0gMCBpZiBleHBlcnRfaWQgPT0gMCBlbHNlIHRva2Vuc19wZXJfZXhwZXJ0W2V4cGVydF9pZCAtIDFdCiAgICAgICAgICAgIGlmIHN0YXJ0X2lkeCA9PSBlbmRfaWR4OgogICAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgICAgIGV4cGVydCA9IHNlbGYuZXhwZXJ0c1tleHBlcnRfaWRdCiAgICAgICAgICAgIGV4cF90b2tlbl9pZHhzID0gdG9rZW5faWR4c1tzdGFydF9pZHg6ZW5kX2lkeF0KICAgICAgICAgICAgZXhwZXJ0X3Rva2VucyA9IHhbZXhwX3Rva2VuX2lkeHNdCiAgICAgICAgICAgIGV4cGVydF9vdXQgPSBleHBlcnQoZXhwZXJ0X3Rva2VucykKICAgICAgICAgICAgZXhwZXJ0X291dC5tdWxfKGZsYXRfZXhwZXJ0X3dlaWdodHNbaWR4c1tzdGFydF9pZHg6ZW5kX2lkeF1dKQogICAgICAgICAgICBleHBlcnRfY2FjaGUuc2NhdHRlcl9yZWR1Y2VfKAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIGV4cF90b2tlbl9pZHhzLnZpZXcoLTEsIDEpLnJlcGVhdCgxLCB4LnNoYXBlWy0xXSksCiAgICAgICAgICAgICAgICBleHBlcnRfb3V0LAogICAgICAgICAgICAgICAgcmVkdWNlPSJzdW0iLAogICAgICAgICAgICApCgogICAgICAgIHByaW50KCJleHBlcnRfY2FjaGUiLCBleHBlcnRfY2FjaGUuc2hhcGUpCiAgICAgICAgcmV0dXJuIGV4cGVydF9jYWNoZQogICAgICAgICIiIgoKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgIiIiCiAgICBTdWJtaXNzaW9uIHRlbXBsYXRlIGZvciBEZWVwU2Vlay1zdHlsZSBNaXh0dXJlIG9mIEV4cGVydHMgdXNpbmcgUHlUb3JjaC4KCiAgICBBcmdzOgogICAgICAgIGRhdGE6IFR1cGxlIG9mIChpbnB1dDogdG9yY2guVGVuc29yLCB3ZWlnaHRzOiBEaWN0W3N0ciwgdG9yY2guVGVuc29yXSwgY29uZmlnOiBEaWN0KQogICAgICAgICAgICAtIGlucHV0OiBJbnB1dCB0ZW5zb3Igb2Ygc2hhcGUgW2JhdGNoX3NpemUsIHNlcV9sZW4sIGhpZGRlbl9zaXplXQogICAgICAgICAgICAtIHdlaWdodHM6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCB3ZWlnaHRzCiAgICAgICAgICAgIC0gY29uZmlnOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbW9kZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCgogICAgUmV0dXJuczoKICAgICAgICBUdXBsZSBjb250YWluaW5nOgogICAgICAgICAgICAtIG91dHB1dDogUHJvY2Vzc2VkIHRlbnNvciBbYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgZF9tb2RlbF0KICAgICAgICAgICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhCiAgICAiIiIKICAgIGlucHV0X3RlbnNvciwgd2VpZ2h0cywgY29uZmlnID0gZGF0YQogICAgbnVtX2V4cGVydHMgPSBjb25maWdbIm5fcm91dGVkX2V4cGVydHMiXQogICAgbW9lID0gTW9FKGNvbmZpZykKCiAgICAjIEZpbGwgaW4gdGhlIGdpdmVuIHdlaWdodHMgb2YgdGhlIG1vZGVsCiAgICBtb2UuZ2F0aW5nX25ldHdvcmsuV19nLndlaWdodCA9IG5uLlBhcmFtZXRlcih3ZWlnaHRzWyJyb3V0ZXIud2VpZ2h0Il0pCgogICAgZ3gsIGd5ID0gd2VpZ2h0c1tmImV4cGVydHMuMC4wLndlaWdodCJdLnNoYXBlCiAgICB1eCwgdXkgPSB3ZWlnaHRzW2YiZXhwZXJ0cy4wLjEud2VpZ2h0Il0uc2hhcGUKICAgIGR4LCBkeSA9IHdlaWdodHNbZiJleHBlcnRzLjAuMi53ZWlnaHQiXS5zaGFwZQoKICAgIGVfZ2F0ZSA9IHRvcmNoLnplcm9zKChudW1fZXhwZXJ0cywgZ3ksIGd4KSwgZGV2aWNlPWlucHV0X3RlbnNvci5kZXZpY2UpCiAgICBlX3VwID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCB1eSwgdXgpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKICAgIGVfZG93biA9IHRvcmNoLnplcm9zKChudW1fZXhwZXJ0cywgZHksIGR4KSwgZGV2aWNlPWlucHV0X3RlbnNvci5kZXZpY2UpCgogICAgZm9yIGkgaW4gcmFuZ2UobnVtX2V4cGVydHMpOgogICAgICAgIGVfZ2F0ZVtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4wLndlaWdodCJdLnQoKQogICAgICAgIGVfdXBbaV0gPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMS53ZWlnaHQiXS50KCkKICAgICAgICBlX2Rvd25baV0gPSB3ZWlnaHRzW2YiZXhwZXJ0cy57aX0uMi53ZWlnaHQiXS50KCkKCiAgICBtb2UuZV9nYXRlID0gbm4uUGFyYW1ldGVyKGVfZ2F0ZSkKICAgIG1vZS5lX3VwID0gbm4uUGFyYW1ldGVyKGVfdXApCiAgICBtb2UuZV9kb3duID0gbm4uUGFyYW1ldGVyKGVfZG93bikKCiAgICAiIiIKICAgIGZvciBpIGluIHJhbmdlKG51bV9leHBlcnRzKToKICAgICAgICBnYXRlX3Byb2pfd2VpZ2h0ID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0KICAgICAgICB1cF9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdCiAgICAgICAgZG93bl9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdCgogICAgICAgICMgVHJhbnNwb3NlIHdlaWdodHMgdG8gbWF0Y2ggZXhwZWN0ZWQgc2hhcGUgZm9yIG5uLkxpbmVhcgogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZ2F0ZS53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZ2F0ZV9wcm9qX3dlaWdodC50KCkpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV191cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIodXBfcHJval93ZWlnaHQudCgpKQogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZG93bl9wcm9qX3dlaWdodC50KCkpCiAgICAiIiIKCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX2dhdGUud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKAogICAgICAgIHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjAud2VpZ2h0Il0udCgpCiAgICApCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX3VwLndlaWdodCA9IG5uLlBhcmFtZXRlcih3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCJdLnQoKSkKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgICAgd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMi53ZWlnaHQiXS50KCkKICAgICkKCiAgICAjIFJ1biB0aGUgbW9kZWwKICAgIG91dHB1dCA9IG1vZShpbnB1dF90ZW5zb3IpCgogICAgcmV0dXJuIG91dHB1dAo=
No newline at end of file
+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1taXh0dXJlLW9mLWV4cGVydHMKCiMgVGhpcyBpcyBhIHN1Ym1pc3Npb24gdGVtcGxhdGUgZm9yIHBvcGNvcm4gbGVhZGVyYm9hcmQgJ2FtZC1taXh0dXJlLW9mLWV4cGVydHMnLgojIFlvdXIgdGFzayBpcyBhcyBmb2xsb3dzOgojID4gRm9yIGEgbW9yZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiwgc2VlOiBodHRwczovL3Rpbnl1cmwuY29tL2FtZC1jb21wLW1vZQojID4gSW1wbGVtZW50IGEgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIChNb0UpIGxheWVyIGZvciBlZmZpY2llbnQgdHJhbnNmb3JtZXIgbW9kZWxzCiMgPiBvbiBhIHNpbmdsZSBNSTMwMFggZGV2aWNlLgojID4KIyA+IE1vRSBpcyBhIHRlY2huaXF1ZSB0aGF0IGFsbG93cyBzY2FsaW5nIG1vZGVsIGNhcGFjaXR5IHdpdGhvdXQgcHJvcG9ydGlvbmFsbHkgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGNvc3RzCiMgPiBieSB1c2luZyBhIHJvdXRpbmcgbWVjaGFuaXNtIHRvIHNlbGVjdGl2ZWx5IGFjdGl2YXRlIG9ubHkgYSBzdWJzZXQgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCB0b2tlbi4KIyA+CiMgPiBZb3VyIHRhc2s6CiMgPiAtIEltcGxlbWVudCB0b2tlbiByb3V0aW5nIHVzaW5nIGEgc2ltcGxlIHNvZnRtYXgtYmFzZWQgbGVhcm5lZCByb3V0ZXIKIyA+IC0gUm91dGUgdG9rZW5zIHRvIHRoZSB0b3AtayBleHBlcnRzIGJhc2VkIG9uIHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIFByb2Nlc3MgdG9rZW5zIHRocm91Z2ggdGhlaXIgYXNzaWduZWQgZXhwZXJ0cwojID4gLSBDb21iaW5lIGV4cGVydCBvdXRwdXRzIHdlaWdodGVkIGJ5IHJvdXRlciBwcm9iYWJpbGl0aWVzCiMgPiAtIENhbGN1bGF0ZSBhcHByb3ByaWF0ZSBhdXhpbGlhcnkgbG9zc2VzIGZvciB0cmFpbmluZyBzdGFiaWxpdHkKIyA+CiMgPiBJbnB1dDoKIyA+IC0gYGRhdGFgOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKIyA+ICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFticywgc2VxX2xlbiwgZF9oaWRkZW5dCiMgPiAgIC0gd2VpZ2h0czogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIHdlaWdodHMKIyA+ICAgLSBjb25maWc6IERpY3Rpb25hcnkgY29udGFpbmluZyBtb2RlbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKIyA+CiMgPiBPdXRwdXQ6CiMgPiAtIFR1cGxlIGNvbnRhaW5pbmc6CiMgPiAgIC0gb3V0cHV0OiBQcm9jZXNzZWQgdGVuc29yIFticywgc2VxX2xlbiwgZF9tb2RlbF0KIyA+ICAgLSBhdXhfZGF0YTogRGljdGlvbmFyeSB3aXRoIGF1eGlsaWFyeSBkYXRhIGxpa2Ugcm91dGVyIHByb2JhYmlsaXRpZXMgYW5kIGxvc3NlcwojIFRoZSBkZWFkbGluZSBmb3IgdGhpcyBsZWFkZXJib2FyZCBpcyAyMDI1LTA1LTI3IDAwOjAwOjAwKzAwOjAwCgojIFlvdSBjYW4gYXV0b21hdGljYWxseSByb3V0ZSB0aGlzIGZpbGUgdG8gc3BlY2lmaWMgR1BVcyBieSBhZGRpbmcgYSBsaW5lCiMgYCMhUE9QQ09STiBncHVzIDxHUFVzPmAgdG8gdGhlIGhlYWRlciBvZiB0aGlzIGZpbGUuCiMgSGFwcHkgaGFja2luZyEKCmltcG9ydCBtYXRoCmltcG9ydCB0b3JjaAppbXBvcnQgdG9yY2gubm4gYXMgbm4KaW1wb3J0IHRvcmNoLm5uLmZ1bmN0aW9uYWwgYXMgRgpmcm9tIHR5cGluZyBpbXBvcnQgRGljdCwgVHVwbGUsIE9wdGlvbmFsCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKCgpjbGFzcyBFeHBlcnQobm4uTW9kdWxlKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc6IERpY3QsIGRfZXhwZXJ0OiBPcHRpb25hbFtpbnRdID0gTm9uZSk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmFjdF9mbiA9IG5uLlNpTFUoKQogICAgICAgIHNlbGYuZF9oaWRkZW46IGludCA9IGNvbmZpZ1siZF9oaWRkZW4iXQogICAgICAgIHNlbGYuZF9leHBlcnQ6IGludCA9IGNvbmZpZ1siZF9leHBlcnQiXSBpZiBkX2V4cGVydCBpcyBOb25lIGVsc2UgZF9leHBlcnQKCiAgICAgICAgc2VsZi5XX2dhdGUgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfdXAgPSBubi5MaW5lYXIoc2VsZi5kX2hpZGRlbiwgc2VsZi5kX2V4cGVydCwgYmlhcz1GYWxzZSkKICAgICAgICBzZWxmLldfZG93biA9IG5uLkxpbmVhcihzZWxmLmRfZXhwZXJ0LCBzZWxmLmRfaGlkZGVuLCBiaWFzPUZhbHNlKQoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIGdhdGUgPSBzZWxmLmFjdF9mbihzZWxmLldfZ2F0ZSh4KSkKICAgICAgICBvdXQgPSBzZWxmLldfZG93bihnYXRlICogc2VsZi5XX3VwKHgpKQogICAgICAgIHJldHVybiBvdXQKCgpjbGFzcyBNb0VHYXRlKG5uLk1vZHVsZSk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnOiBEaWN0KToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLnRvcF9rOiBpbnQgPSBjb25maWdbIm5fZXhwZXJ0c19wZXJfdG9rZW4iXQogICAgICAgIHNlbGYubnVtX2V4cGVydHM6IGludCA9IGNvbmZpZ1sibl9yb3V0ZWRfZXhwZXJ0cyJdCiAgICAgICAgc2VsZi5kX2hpZGRlbjogaW50ID0gY29uZmlnWyJkX2hpZGRlbiJdCgogICAgICAgIHNlbGYuV19nID0gbm4uTGluZWFyKHNlbGYuZF9oaWRkZW4sIHNlbGYubnVtX2V4cGVydHMsIGJpYXM9RmFsc2UpCgogICAgZGVmIGZvcndhcmQoc2VsZiwgeDogdG9yY2guVGVuc29yKSAtPiBUdXBsZVt0b3JjaC5UZW5zb3IsIHRvcmNoLlRlbnNvcl06CiAgICAgICAgbG9naXRzID0gc2VsZi5XX2coeCkKICAgICAgICBzY29yZXMgPSBsb2dpdHMuc29mdG1heChkaW09LTEpCiAgICAgICAgdG9wa19zY29yZXMsIHRvcGtfaW5kaWNlcyA9IHRvcmNoLnRvcGsoCiAgICAgICAgICAgIHNjb3Jlcywgaz1zZWxmLnRvcF9rLCBkaW09LTEsIHNvcnRlZD1GYWxzZQogICAgICAgICkKCiAgICAgICAgIyBwcmludCgiaW5wdXQiLCB4LnNoYXBlKQogICAgICAgICMgcHJpbnQoInRvcGtfaW5kaWNlcyIsIHRvcGtfaW5kaWNlcy5zaGFwZSkKICAgICAgICAjIHByaW50KCJ0b3BrX3Njb3JlcyIsIHRvcGtfc2NvcmVzLnNoYXBlKQoKICAgICAgICByZXR1cm4gdG9wa19pbmRpY2VzLCB0b3BrX3Njb3JlcwoKCmNsYXNzIE1vRShubi5Nb2R1bGUpOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgY29uZmlnOiBEaWN0LAogICAgICAgIGVfZ2F0ZTogbm4uUGFyYW1ldGVyLAogICAgICAgIGVfdXA6IG5uLlBhcmFtZXRlciwKICAgICAgICBlX2Rvd246IG5uLlBhcmFtZXRlciwKICAgICk6CiAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKICAgICAgICBzZWxmLmV4cGVydHMgPSBubi5Nb2R1bGVMaXN0KAogICAgICAgICAgICBbRXhwZXJ0KGNvbmZpZykgZm9yIF8gaW4gcmFuZ2UoY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0pXQogICAgICAgICkKICAgICAgICBzZWxmLmdhdGluZ19uZXR3b3JrID0gTW9FR2F0ZShjb25maWcpCiAgICAgICAgc2hhcmVkX2V4cGVydF9kaW0gPSBjb25maWdbImRfZXhwZXJ0Il0gKiBjb25maWdbIm5fc2hhcmVkX2V4cGVydHMiXQogICAgICAgIHNlbGYuc2hhcmVkX2V4cGVydCA9IEV4cGVydChjb25maWc9Y29uZmlnLCBkX2V4cGVydD1zaGFyZWRfZXhwZXJ0X2RpbSkKICAgICAgICBzZWxmLmVfZ2F0ZSA9IGVfZ2F0ZQogICAgICAgIHNlbGYuZV91cCA9IGVfdXAKICAgICAgICBzZWxmLmVfZG93biA9IGVfZG93bgoKICAgIGRlZiBmb3J3YXJkKHNlbGYsIHg6IHRvcmNoLlRlbnNvcikgLT4gdG9yY2guVGVuc29yOgogICAgICAgIHNoYXJlZF9vdXRwdXQgPSBzZWxmLnNoYXJlZF9leHBlcnQoeCkKICAgICAgICBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcyA9IHNlbGYuZ2F0aW5nX25ldHdvcmsoeCkKICAgICAgICBiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fZGltID0geC5zaGFwZQogICAgICAgICIiIgogICAgICAgIG9yaWdfc2hhcGUgPSB4LnNoYXBlCiAgICAgICAgeF9mbGF0ID0geC52aWV3KC0xLCBoaWRkZW5fZGltKQogICAgICAgIGZsYXRfZXhwZXJ0X2luZGljZXMgPSBleHBlcnRfaW5kaWNlcy52aWV3KC0xKQogICAgICAgIGZsYXRfZXhwZXJ0X3dlaWdodHMgPSBleHBlcnRfc2NvcmVzLnZpZXcoLTEsIDEpCiAgICAgICAgcm91dGVkX291dHB1dF9mbGF0ID0gc2VsZi5tb2VfaW5mZXIoCiAgICAgICAgICAgIHhfZmxhdCwgZmxhdF9leHBlcnRfaW5kaWNlcywgZmxhdF9leHBlcnRfd2VpZ2h0cwogICAgICAgICkKCiAgICAgICAgcm91dGVkX291dHB1dCA9IHJvdXRlZF9vdXRwdXRfZmxhdC52aWV3KCpvcmlnX3NoYXBlKQogICAgICAgICIiIgogICAgICAgICMgcHJpbnQoImV4cGVydF9zY29yZXMiLCBleHBlcnRfc2NvcmVzLnNoYXBlKQogICAgICAgIHJvdXRlZF9vdXRwdXQgPSBzZWxmLm1vZV9pbmZlcih4LCBleHBlcnRfaW5kaWNlcywgZXhwZXJ0X3Njb3JlcykKICAgICAgICByZXR1cm4gcm91dGVkX291dHB1dCArIHNoYXJlZF9vdXRwdXQKCiAgICBAdG9yY2gubm9fZ3JhZCgpCiAgICBkZWYgbW9lX2luZmVyKAogICAgICAgIHNlbGYsCiAgICAgICAgeDogdG9yY2guVGVuc29yLAogICAgICAgIGV4cGVydF9pbmRpY2VzOiB0b3JjaC5UZW5zb3IsCiAgICAgICAgZXhwZXJ0X3Njb3JlczogdG9yY2guVGVuc29yLAogICAgICAgICMgZmxhdF9leHBlcnRfaW5kaWNlczogdG9yY2guVGVuc29yLAogICAgICAgICMgZmxhdF9leHBlcnRfd2VpZ2h0czogdG9yY2guVGVuc29yLAogICAgKSAtPiB0b3JjaC5UZW5zb3I6CiAgICAgICAgYmF0Y2hfc2l6ZSwgc2VxX2xlbiwgaGlkZGVuX2RpbSA9IHguc2hhcGUKICAgICAgICAjIHByaW50KHguZHR5cGUpCiAgICAgICAgIyBwcmludChzZWxmLmVfZ2F0ZS5kdHlwZSkKCiAgICAgICAgb3V0ID0gdG9yY2guemVyb3NfbGlrZSh4KQogICAgICAgIGZvciBpIGluIHJhbmdlKGJhdGNoX3NpemUpOgogICAgICAgICAgICBmb3IgaiBpbiByYW5nZShzZXFfbGVuKToKICAgICAgICAgICAgICAgIGlucHV0ID0geFtpLCBqXS50byhzZWxmLmVfZ2F0ZS5kdHlwZSkKICAgICAgICAgICAgICAgIGlkeCA9IGV4cGVydF9pbmRpY2VzW2ksIGpdCiAgICAgICAgICAgICAgICBnYXRlID0gRi5zaWx1KHNlbGYuZV9nYXRlW2lkeF0ubWF0bXVsKGlucHV0KSwgaW5wbGFjZT1UcnVlKQogICAgICAgICAgICAgICAgIyB5ID0gc2VsZi5lX2Rvd25baWR4XS5tYXRtdWwoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICAjIHByaW50KCJlX2Rvd24iLCBzZWxmLmVfZG93bltpZHhdLnNoYXBlKQogICAgICAgICAgICAgICAgIyBwcmludCgiZ2F0ZSIsIGdhdGUuc2hhcGUpCiAgICAgICAgICAgICAgICAjIHByaW50KAogICAgICAgICAgICAgICAgIyAiZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkiLAogICAgICAgICAgICAgICAgIyAoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpLnVuc3F1ZWV6ZSgyKS5zaGFwZSwKICAgICAgICAgICAgICAgICMgKQogICAgICAgICAgICAgICAgIyB5ID0gc2VsZi5lX2Rvd25baWR4XS5kb3QoZ2F0ZSAqIHNlbGYuZV91cFtpZHhdLm1hdG11bChpbnB1dCkpCiAgICAgICAgICAgICAgICB5ID0gdG9yY2guYm1tKAogICAgICAgICAgICAgICAgICAgIHNlbGYuZV9kb3duW2lkeF0sCiAgICAgICAgICAgICAgICAgICAgKGdhdGUgKiBzZWxmLmVfdXBbaWR4XS5tYXRtdWwoaW5wdXQpKS51bnNxdWVlemVfKDIpLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIyBwcmludCgieSIsIHkuc2hhcGUpCiAgICAgICAgICAgICAgICB5LnNxdWVlemVfKDIpCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgICMgcHJpbnQoImV4cGVydF9zY29yZXNbaSwgal0iLCBleHBlcnRfc2NvcmVzW2ksIGpdLnNoYXBlKQogICAgICAgICAgICAgICAgeSA9IHkgKiBleHBlcnRfc2NvcmVzW2ksIGpdWzosIE5vbmVdCiAgICAgICAgICAgICAgICAjIHByaW50KCJ5IiwgeS5zaGFwZSkKICAgICAgICAgICAgICAgIG91dFtpLCBqXSA9IHkuc3VtKGRpbT0wKQoKICAgICAgICByZXR1cm4gb3V0CiAgICAgICAgIiIiCiAgICAgICAgcHJpbnQoIngiLCB4LnNoYXBlKQogICAgICAgIHByaW50KCJmbGF0X2V4cGVydF9pbmRpY2VzIiwgZmxhdF9leHBlcnRfaW5kaWNlcy5zaGFwZSkKICAgICAgICBwcmludCgiZmxhdF9leHBlcnRfd2VpZ2h0cyIsIGZsYXRfZXhwZXJ0X3dlaWdodHMuc2hhcGUpCiAgICAgICAgZXhwZXJ0X2NhY2hlID0gdG9yY2guemVyb3NfbGlrZSh4KQogICAgICAgIGlkeHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmFyZ3NvcnQoKQogICAgICAgIHByaW50KCJpZHhzIiwgaWR4cy5zaGFwZSkKICAgICAgICBjb3VudHMgPSBmbGF0X2V4cGVydF9pbmRpY2VzLmJpbmNvdW50KCkuY3B1KCkubnVtcHkoKQogICAgICAgIHRva2Vuc19wZXJfZXhwZXJ0ID0gY291bnRzLmN1bXN1bSgpCiAgICAgICAgcHJpbnQoInRva2Vuc19wZXJfZXhwZXJ0IiwgdG9rZW5zX3Blcl9leHBlcnQuc2hhcGUpCiAgICAgICAgbnVtX3Blcl90b2sgPSBzZWxmLmNvbmZpZ1sibl9leHBlcnRzX3Blcl90b2tlbiJdCiAgICAgICAgdG9rZW5faWR4cyA9IGlkeHMgLy8gbnVtX3Blcl90b2sKICAgICAgICBmb3IgZXhwZXJ0X2lkLCBlbmRfaWR4IGluIGVudW1lcmF0ZSh0b2tlbnNfcGVyX2V4cGVydCk6CiAgICAgICAgICAgIHN0YXJ0X2lkeCA9IDAgaWYgZXhwZXJ0X2lkID09IDAgZWxzZSB0b2tlbnNfcGVyX2V4cGVydFtleHBlcnRfaWQgLSAxXQogICAgICAgICAgICBpZiBzdGFydF9pZHggPT0gZW5kX2lkeDoKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBleHBlcnQgPSBzZWxmLmV4cGVydHNbZXhwZXJ0X2lkXQogICAgICAgICAgICBleHBfdG9rZW5faWR4cyA9IHRva2VuX2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdCiAgICAgICAgICAgIGV4cGVydF90b2tlbnMgPSB4W2V4cF90b2tlbl9pZHhzXQogICAgICAgICAgICBleHBlcnRfb3V0ID0gZXhwZXJ0KGV4cGVydF90b2tlbnMpCiAgICAgICAgICAgIGV4cGVydF9vdXQubXVsXyhmbGF0X2V4cGVydF93ZWlnaHRzW2lkeHNbc3RhcnRfaWR4OmVuZF9pZHhdXSkKICAgICAgICAgICAgZXhwZXJ0X2NhY2hlLnNjYXR0ZXJfcmVkdWNlXygKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBleHBfdG9rZW5faWR4cy52aWV3KC0xLCAxKS5yZXBlYXQoMSwgeC5zaGFwZVstMV0pLAogICAgICAgICAgICAgICAgZXhwZXJ0X291dCwKICAgICAgICAgICAgICAgIHJlZHVjZT0ic3VtIiwKICAgICAgICAgICAgKQoKICAgICAgICBwcmludCgiZXhwZXJ0X2NhY2hlIiwgZXhwZXJ0X2NhY2hlLnNoYXBlKQogICAgICAgIHJldHVybiBleHBlcnRfY2FjaGUKICAgICAgICAiIiIKCgpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoKICAgICIiIgogICAgU3VibWlzc2lvbiB0ZW1wbGF0ZSBmb3IgRGVlcFNlZWstc3R5bGUgTWl4dHVyZSBvZiBFeHBlcnRzIHVzaW5nIFB5VG9yY2guCgogICAgQXJnczoKICAgICAgICBkYXRhOiBUdXBsZSBvZiAoaW5wdXQ6IHRvcmNoLlRlbnNvciwgd2VpZ2h0czogRGljdFtzdHIsIHRvcmNoLlRlbnNvcl0sIGNvbmZpZzogRGljdCkKICAgICAgICAgICAgLSBpbnB1dDogSW5wdXQgdGVuc29yIG9mIHNoYXBlIFtiYXRjaF9zaXplLCBzZXFfbGVuLCBoaWRkZW5fc2l6ZV0KICAgICAgICAgICAgLSB3ZWlnaHRzOiBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbW9kZWwgd2VpZ2h0cwogICAgICAgICAgICAtIGNvbmZpZzogRGljdGlvbmFyeSBjb250YWluaW5nIG1vZGVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwoKICAgIFJldHVybnM6CiAgICAgICAgVHVwbGUgY29udGFpbmluZzoKICAgICAgICAgICAgLSBvdXRwdXQ6IFByb2Nlc3NlZCB0ZW5zb3IgW2JhdGNoX3NpemUsIHNlcV9sZW4sIGRfbW9kZWxdCiAgICAgICAgICAgIC0gYXV4X2RhdGE6IERpY3Rpb25hcnkgd2l0aCBhdXhpbGlhcnkgZGF0YQogICAgIiIiCiAgICBpbnB1dF90ZW5zb3IsIHdlaWdodHMsIGNvbmZpZyA9IGRhdGEKICAgIG51bV9leHBlcnRzID0gY29uZmlnWyJuX3JvdXRlZF9leHBlcnRzIl0KCiAgICBneCwgZ3kgPSB3ZWlnaHRzW2YiZXhwZXJ0cy4wLjAud2VpZ2h0Il0uc2hhcGUKICAgIHV4LCB1eSA9IHdlaWdodHNbZiJleHBlcnRzLjAuMS53ZWlnaHQiXS5zaGFwZQogICAgZHgsIGR5ID0gd2VpZ2h0c1tmImV4cGVydHMuMC4yLndlaWdodCJdLnNoYXBlCgogICAgZV9nYXRlID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCBneSwgZ3gpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKICAgIGVfdXAgPSB0b3JjaC56ZXJvcygobnVtX2V4cGVydHMsIHV5LCB1eCksIGRldmljZT1pbnB1dF90ZW5zb3IuZGV2aWNlKQogICAgZV9kb3duID0gdG9yY2guemVyb3MoKG51bV9leHBlcnRzLCBkeSwgZHgpLCBkZXZpY2U9aW5wdXRfdGVuc29yLmRldmljZSkKCiAgICBmb3IgaSBpbiByYW5nZShudW1fZXhwZXJ0cyk6CiAgICAgICAgZV9nYXRlW2ldID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0udCgpCiAgICAgICAgZV91cFtpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdLnQoKQogICAgICAgIGVfZG93bltpXSA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdLnQoKQoKICAgIG1vZSA9IE1vRShjb25maWcsIGVfZ2F0ZSwgZV91cCwgZV9kb3duKQoKICAgICMgRmlsbCBpbiB0aGUgZ2l2ZW4gd2VpZ2h0cyBvZiB0aGUgbW9kZWwKICAgIG1vZS5nYXRpbmdfbmV0d29yay5XX2cud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKHdlaWdodHNbInJvdXRlci53ZWlnaHQiXSkKCiAgICAiIiIKICAgIGZvciBpIGluIHJhbmdlKG51bV9leHBlcnRzKToKICAgICAgICBnYXRlX3Byb2pfd2VpZ2h0ID0gd2VpZ2h0c1tmImV4cGVydHMue2l9LjAud2VpZ2h0Il0KICAgICAgICB1cF9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4xLndlaWdodCJdCiAgICAgICAgZG93bl9wcm9qX3dlaWdodCA9IHdlaWdodHNbZiJleHBlcnRzLntpfS4yLndlaWdodCJdCgogICAgICAgICMgVHJhbnNwb3NlIHdlaWdodHMgdG8gbWF0Y2ggZXhwZWN0ZWQgc2hhcGUgZm9yIG5uLkxpbmVhcgogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZ2F0ZS53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZ2F0ZV9wcm9qX3dlaWdodC50KCkpCiAgICAgICAgbW9lLmV4cGVydHNbaV0uV191cC53ZWlnaHQgPSBubi5QYXJhbWV0ZXIodXBfcHJval93ZWlnaHQudCgpKQogICAgICAgIG1vZS5leHBlcnRzW2ldLldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoZG93bl9wcm9qX3dlaWdodC50KCkpCiAgICAiIiIKCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX2dhdGUud2VpZ2h0ID0gbm4uUGFyYW1ldGVyKAogICAgICAgIHdlaWdodHNbInNoYXJlZF9leHBlcnRzLjAud2VpZ2h0Il0udCgpCiAgICApCiAgICBtb2Uuc2hhcmVkX2V4cGVydC5XX3VwLndlaWdodCA9IG5uLlBhcmFtZXRlcih3ZWlnaHRzWyJzaGFyZWRfZXhwZXJ0cy4xLndlaWdodCJdLnQoKSkKICAgIG1vZS5zaGFyZWRfZXhwZXJ0LldfZG93bi53ZWlnaHQgPSBubi5QYXJhbWV0ZXIoCiAgICAgICAgd2VpZ2h0c1sic2hhcmVkX2V4cGVydHMuMi53ZWlnaHQiXS50KCkKICAgICkKCiAgICAjIFJ1biB0aGUgbW9kZWwKICAgIG91dHB1dCA9IG1vZShpbnB1dF90ZW5zb3IpCgogICAgcmV0dXJuIG91dHB1dAo=
No newline at end of file

Best evidence level for this revision: reported

JSON