submission 33220
KernelBot user 346 · 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-fp8-mm-33220?include=source"interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesfp32, fp8_e4m3fnuz
Benchmark evidence
18 measurements across 1 GPU, fastest first.
Operation / workload
Hardware
Latency
Rank
Observed
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
105.5µs
#46 of 98
2025-07-11
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
106.3µs
#45 of 98
2025-07-11
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
117.1µs
#25 of 98
2025-07-11
Show all 18 measurements ›Showing all 18 measurements ⌄
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
203.7µs
#31 of 98
2025-07-11
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
203.9µs
#45 of 98
2025-07-11
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
206.6µs
#41 of 98
2025-07-11
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
363.5µs
#38 of 98
2025-07-11
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
899.4µs
#29 of 98
2025-07-11
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:f642986e4075a892363eb05d8da11fb56ba4346cc8ee0cf22bc4d9d3d300fd3f
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
submission.py1 lines
aW1wb3J0IHRvcmNoCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKIyBDKysgaW1wbGVtZW50YXRpb24gb2YgRlA4IEdFTU0gKG1hdGNoaW5nIGN1c3RvbV9rZXJuZWxfMSBsb2dpYykKY3VkYV9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgoKI2RlZmluZSBTSE1CTE9DSyA2NAojZGVmaW5lIFRCTE9DSyAxNgoKdXNpbmcgZmxvYXQxNiAgPSBfX2hpcF9iZmxvYXQxNjsKdXNpbmcgVmVjNCAgICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIElWZWM0ICAgID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YodWludDMyX3QpKSkpIHVpbnQzMl90Owp1c2luZyBWZWMxNiAgICA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIGZsb2F0OHg4ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDggKiBzaXplb2YodWludDhfdCkpKSkgdWludDhfdDsKCmlubGluZSBfX2RldmljZV9fIHVpbnQ2NF90IGNhc3Rmcm9tOHg4KGNvbnN0IGZsb2F0OHg4JiBmKQp7CiAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPigmZik7Cn0KCmlubGluZSBfX2RldmljZV9fIFZlYzQgbWZtYShjb25zdCBmbG9hdDh4OCYgYTAsIGNvbnN0IGZsb2F0OHg4JiBhMSwgY29uc3QgZmxvYXQ4eDgmIGIwLCBjb25zdCBmbG9hdDh4OCYgYjEpCnsKICAgIFZlYzQgcmV0ID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGNhc3Rmcm9tOHg4KGEwKSwgY2FzdGZyb204eDgoYjApLCBWZWM0e30sIDAsIDAsIDApOwogICAgcmV0dXJuIF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChjYXN0ZnJvbTh4OChhMSksIGNhc3Rmcm9tOHg4KGIxKSwgcmV0LCAwLCAwLCAwKTsKfQoKLy8gSEVJR0hUIDw9IDQKLy8gV0lEVEggPiA0IGNhdXNlcyByZWdpc3RlciBzcGlsbAp0ZW1wbGF0ZTxpbnQgV0lEVEgsIGludCBIRUlHSFQgPSA0PgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oVEJMT0NLKlRCTE9DSyoyLCA0KQpmcDhfZ2VtbV9rZXJuZWwoCiAgICBjb25zdCB1aW50OF90KiBfX3Jlc3RyaWN0X18gYSwKICAgIGNvbnN0IHVpbnQ4X3QqIF9fcmVzdHJpY3RfXyBiLAogICAgZmxvYXQxNiogX19yZXN0cmljdF9fIGMsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2IsCiAgICBpbnQgTURJTSwgaW50IE5ESU0sIGludCBLRElNCikgewogICAgY29uc3QgaW50IFggPSBibG9ja0lkeC54ICogU0hNQkxPQ0sgKiBXSURUSDsKICAgIGNvbnN0IGludCBZID0gYmxvY2tJZHgueSAqIFRCTE9DSyAqIEhFSUdIVDsKICAgIAogICAgY29uc3QgaW50IFRYID0gdGhyZWFkSWR4LnglVEJMT0NLOwogICAgY29uc3QgaW50IFRZID0gdGhyZWFkSWR4LnklNDsKICAgIGNvbnN0IGludCBUWiA9ICh0aHJlYWRJZHgueS80KSU0OwogICAgY29uc3QgaW50IFRZWiA9IHRocmVhZElkeC55JTE2OwogICAgY29uc3QgaW50IFRXID0gKHRocmVhZElkeC55LzE2KSUyOwoKICAgIF9fc2hhcmVkX18gdWludDhfdCBhX3NoYXJlZFtXSURUSF1bNF1bNF1bNF1bVEJMT0NLXVs0XTsKICAgIF9fc2hhcmVkX18gdWludDhfdCBiX3NoYXJlZFs0XVtIRUlHSFRdWzRdW1RCTE9DS11bNF07CiAgICBfX3NoYXJlZF9fIGZsb2F0ICAgc2NhbGFyWzRdW1RCTE9DS11bV0lEVEhdOwoKICAgIGlmIChUVyAhPSAwKQogICAgewogICAgICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgSVZlYzQgdGVtcF9hW1dJRFRIXSwgdGVtcF9iOwoKICAgICAgICAgICAgaW50IHR4MyA9IChUWCAmIDMpIDw8IDI7CiAgICAgICAgICAgIGludCBpMSA9IFRYID4+IDI7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNICYmIFkgKyA0KlRYIDwgTkRJTSkKICAgICAgICAgICAgICAgIHRlbXBfYltqMV0gPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KCZiWyhrMCArIFRaKlRCTE9DSyArIFRZICsgNCpqMSkqTkRJTSArIFkgKyA0KlRYXSk7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNICYmIFggPCBNRElNKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIHRlbXBfYVtuXVtqMV0gPSAoWCArIG4qU0hNQkxPQ0sgPCBNRElNKSA/ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oJmFbKGswICsgajEqVEJMT0NLICsgVFlaKSpNRElNICsgWCArIDQqVFggKyBuKlNITUJMT0NLXSkgOiAwOwoKICAgICAgICAgICAgaWYgKGswICE9IDApIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGlmIChpMSA8IEhFSUdIVCkKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgICAgIGJfc2hhcmVkW1RaXVtpMV1bVFldW3R4MyArIG1dW2oxXSA9ICh0ZW1wX2JbajFdID4+ICg4Km0pKSAmIDB4RkY7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIGFfc2hhcmVkW25dW2kxXVtUWl1bVFldW3R4MyArIG1dW2oxXSA9ICh0ZW1wX2Fbbl1bajFdID4+ICg4Km0pKSAmIDB4RkY7CgogICAgICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBWZWMxNiByZWdfcmVzW1dJRFRIXTsKICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKSByZWdfcmVzW25dID0ge307CgogICAgZmxvYXQgdG1wX2FbV0lEVEhdOwogICAgZmxvYXQgdG1wX2I7CiAgICBpZiAoVFogPT0gMCkKICAgIHsKICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgdG1wX2Fbbl0gPSAoWCArIFRZKlRCTE9DSyArIG4qU0hNQkxPQ0sgPCBNRElNKSA/IHNjYWxlX2FbWCArIFRZKlRCTE9DSyArIFRYICsgbipTSE1CTE9DS10gOiAwOwogICAgICAgIHRtcF9iID0gc2NhbGVfYltZLzEyOF07CiAgICB9CgogICAgZm9yIChpbnQgazE9MDsgazEgPCBLRElNOyBrMSArPSAyKlNITUJMT0NLKQogICAgewogICAgICAgIGlmIChUWiA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspIHNjYWxhcltUWV1bVFhdW25dID0gdG1wX2IgKiB0bXBfYVtuXTsKCiAgICAgICAgICAgIGlmIChrMSArIDIqU0hNQkxPQ0sgPCBLRElNKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgICAgICB0bXBfYVtuXSA9IChYICsgVFkqVEJMT0NLICsgbipTSE1CTE9DSyA8IE1ESU0pID8gc2NhbGVfYVsoazEvMTI4ICsgMSkqTURJTSArIFggKyBUWSpUQkxPQ0sgKyBUWCArIG4qU0hNQkxPQ0tdIDogMDsKICAgICAgICAgICAgICAgIHRtcF9iID0gc2NhbGVfYlsoazEvMTI4ICsgMSkqKChORElNKzEyNykvMTI4KSArIChZLzEyOCldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGsyPTA7IGsyIDwgMipTSE1CTE9DSzsgazIgKz0gU0hNQkxPQ0spCiAgICAgICAgewogICAgICAgICAgICBpbnQgazAgPSBrMSArIGsyOwoKICAgICAgICAgICAgX19zeW5jdGhyZWFkcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgZmxvYXQ4eDggYTBfbG9hZFtXSURUSF0sIGExX2xvYWRbV0lEVEhdOwogICAgICAgICAgICBmbG9hdDh4OCBiMF9sb2FkW0hFSUdIVF0sIGIxX2xvYWRbSEVJR0hUXTsKCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw4OyBtKyspCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxIRUlHSFQ7IG4rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjBfbG9hZFtuXVttXSA9IGJfc2hhcmVkW20vNCArIDBdW25dW1RZXVtUWF1bbSU0XTsKICAgICAgICAgICAgICAgIGIxX2xvYWRbbl1bbV0gPSBiX3NoYXJlZFttLzQgKyAyXVtuXVtUWV1bVFhdW20lNF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw4OyBtKyspCiAgICAgICAgICAgIGZvciAoaW50IHI9MDsgcjxXSURUSDsgcisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhMF9sb2FkW3JdW21dID0gYV9zaGFyZWRbcl1bVFpdW20lNF1bVFldW1RYXVttLzQgKyAwXTsKICAgICAgICAgICAgICAgIGExX2xvYWRbcl1bbV0gPSBhX3NoYXJlZFtyXVtUWl1bbSU0XVtUWV1bVFhdW20vNCArIDJdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBWZWM0IHNjYWxbV0lEVEhdOwogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgICAgIHNjYWxbbl1bbV0gPSBzY2FsYXJbVFpdW1RZKjQgKyBtXVtuXTsKCiAgICAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxIRUlHSFQ7IG4rKykKICAgICAgICAgICAgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZlYzQgcmVzID0gbWZtYShhMF9sb2FkW3IxXSwgYTFfbG9hZFtyMV0sIGIwX2xvYWRbbl0sIGIxX2xvYWRbbl0pOwoKICAgICAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICAgICAgcmVnX3Jlc1tyMV1bbSpIRUlHSFQgKyBuXSArPSBzY2FsW3IxXVttXSAqIHJlc1ttXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBqPTA7IGo8NDsgaiArKykgZm9yIChpbnQgaT0wOyBpPEhFSUdIVDsgaSArKykgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICBpZiAoWSArIGkqVEJMT0NLIDwgTkRJTSAmJiA0KlRZWiArIFggKyByMSpTSE1CTE9DSyA8IE1ESU0pCiAgICAgICAgY1soNCpUWVogKyBqICsgWCArIHIxKlNITUJMT0NLKSpORElNICsgWSArIGkqVEJMT0NLICsgVFhdID0gKGZsb2F0MTYpIHJlZ19yZXNbcjFdW2oqSEVJR0hUICsgaV07Cn0KCnZvaWQgbGF1bmNoSGlwKAogICAgY29uc3Qgdm9pZCogYSwKICAgIGNvbnN0IHZvaWQqIGIsCiAgICB2b2lkKiBjLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYiwKICAgIGludCBNLCBpbnQgTiwgaW50IEsKKSB7CiAgICBkaW0zIGJsb2NrKFRCTE9DSywgMzIsIDEpOwoKICAgIGludCBtaTMwMF90aHJlYWRzID0gU0hNQkxPQ0sgKiBTSE1CTE9DSyAqIDMwNDsKICAgIGludCBicGN1ID0gTSAqIE4gLyBtaTMwMF90aHJlYWRzOwoKICAgIGlmIChicGN1ID49IDggJiYgTSA+PSA0KlNITUJMT0NLKQogICAgewogICAgICAgIGRpbTMgZ3JpZCgoTSArIDQqU0hNQkxPQ0sgLSAxKSAvIFNITUJMT0NLIC8gNCwgTiAvIFNITUJMT0NLKTsKCiAgICAgICAgZnA4X2dlbW1fa2VybmVsPDQ+PDw8Z3JpZCwgYmxvY2ssIDAsIDA+Pj4oCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGEpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxmbG9hdDE2Kj4oYyksCiAgICAgICAgICAgIHNjYWxlX2EsCiAgICAgICAgICAgIHNjYWxlX2IsCiAgICAgICAgICAgIE0sIE4sIEspOwogICAgfQogICAgZWxzZSBpZiAoYnBjdSA+PSAzICYmIE0gPj0gMipTSE1CTE9DSykKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyAyKlNITUJMT0NLIC0gMSkgLyBTSE1CTE9DSyAvIDIsIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDwyPjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyBTSE1CTE9DSyAtIDEpIC8gU0hNQkxPQ0ssIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDwxPjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KfQoiIiIKCiMgQysrIGltcGxlbWVudGF0aW9uIG9mIEZQOCBHRU1NIChtYXRjaGluZyBjdXN0b21fa2VybmVsXzEgbG9naWMpCmNwcF9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPHRvcmNoL2V4dGVuc2lvbi5oPgojaW5jbHVkZSA8QVRlbi9BVGVuLmg+Cgp2b2lkIGxhdW5jaEhpcCgKICAgIGNvbnN0IHZvaWQqIGEsCiAgICBjb25zdCB2b2lkKiBiLAogICAgdm9pZCogYywKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9hLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2IsCiAgICBpbnQgTSwgaW50IE4sIGludCBLCik7Cgp2b2lkIGZwOF9nZW1tKAogICAgdG9yY2g6OlRlbnNvciBhLAogICAgdG9yY2g6OlRlbnNvciBiLAogICAgdG9yY2g6OlRlbnNvciBjLAogICAgdG9yY2g6OlRlbnNvciBhX3NjYWxlLAogICAgdG9yY2g6OlRlbnNvciBiX3NjYWxlCikgewogICAgY29uc3QgaW50IG0gPSBhLnNpemUoMCk7CiAgICBjb25zdCBpbnQgbiA9IGIuc2l6ZSgwKTsKICAgIGNvbnN0IGludCBrID0gYS5zaXplKDEpOwoKICAgIGxhdW5jaEhpcCgKICAgICAgICBhLmRhdGFfcHRyKCksCiAgICAgICAgYi5kYXRhX3B0cigpLAogICAgICAgIGMuZGF0YV9wdHIoKSwKICAgICAgICBhX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAgIGJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgICAgbSwgbiwgawogICAgKTsKfQoKUFlCSU5EMTFfTU9EVUxFKFRPUkNIX0VYVEVOU0lPTl9OQU1FLCBtKSB7CiAgICBtLmRlZigiZnA4X2dlbW0iLCAmZnA4X2dlbW0sICJGUDggR0VNTSIpOwp9CiIiIgoKaW1wb3J0IG9zCm9zLmVudmlyb25bJ1BZVE9SQ0hfUk9DTV9BUkNIJ10gPSAnZ2Z4OTQyJwoKIyBDb21waWxlIHRoZSBDKysgZXh0ZW5zaW9uIGlubGluZQpjcHBfZXh0ZW5zaW9uID0gbG9hZF9pbmxpbmUoCiAgICBuYW1lPSJmcDhfZ2VtbV9jcHAiLAogICAgY3BwX3NvdXJjZXM9Y3BwX3NvdXJjZSwKICAgIGN1ZGFfc291cmNlcz1jdWRhX3NvdXJjZSwKICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLU8zIiwgIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzE3Il0sCiAgICBleHRyYV9jZmxhZ3M9WyctTzMnXSwKICAgIHZlcmJvc2U9RmFsc2UKKQoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQoKICAgIGNwcF9leHRlbnNpb24uZnA4X2dlbW0oYSwgYiwgYywgYV9zY2FsZSwgYl9zY2FsZSkKCiAgICByZXR1cm4gYwo=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 submission 33210.
- aW1wb3J0IHRvcmNoCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKIyBDKysgaW1wbGVtZW50YXRpb24gb2YgRlA4IEdFTU0gKG1hdGNoaW5nIGN1c3RvbV9rZXJuZWxfMSBsb2dpYykKY3VkYV9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgoKI2RlZmluZSBTSE1CTE9DSyA2NAojZGVmaW5lIFRCTE9DSyAxNgoKdXNpbmcgZmxvYXQxNiAgPSBfX2hpcF9iZmxvYXQxNjsKdXNpbmcgVmVjNCAgICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIElWZWM0ICAgID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YodWludDMyX3QpKSkpIHVpbnQzMl90Owp1c2luZyBWZWMxNiAgICA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIGZsb2F0OHg4ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDggKiBzaXplb2YodWludDhfdCkpKSkgdWludDhfdDsKCmlubGluZSBfX2RldmljZV9fIHVpbnQ2NF90IGNhc3Rmcm9tOHg4KGNvbnN0IGZsb2F0OHg4JiBmKQp7CiAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPigmZik7Cn0KCmlubGluZSBfX2RldmljZV9fIFZlYzQgbWZtYShjb25zdCBmbG9hdDh4OCYgYTAsIGNvbnN0IGZsb2F0OHg4JiBhMSwgY29uc3QgZmxvYXQ4eDgmIGIwLCBjb25zdCBmbG9hdDh4OCYgYjEpCnsKICAgIFZlYzQgcmV0ID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGNhc3Rmcm9tOHg4KGEwKSwgY2FzdGZyb204eDgoYjApLCBWZWM0e30sIDAsIDAsIDApOwogICAgcmV0dXJuIF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChjYXN0ZnJvbTh4OChhMSksIGNhc3Rmcm9tOHg4KGIxKSwgcmV0LCAwLCAwLCAwKTsKfQoKdGVtcGxhdGU8aW50IFdJRFRIPgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oVEJMT0NLKlRCTE9DSyoyLCA0KQpmcDhfZ2VtbV9rZXJuZWwoCiAgICBjb25zdCB1aW50OF90KiBfX3Jlc3RyaWN0X18gYSwKICAgIGNvbnN0IHVpbnQ4X3QqIF9fcmVzdHJpY3RfXyBiLAogICAgZmxvYXQxNiogX19yZXN0cmljdF9fIGMsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2IsCiAgICBpbnQgTURJTSwgaW50IE5ESU0sIGludCBLRElNCikgewogICAgY29uc3QgaW50IFggPSBibG9ja0lkeC54ICogU0hNQkxPQ0sgKiBXSURUSDsKICAgIGNvbnN0IGludCBZID0gYmxvY2tJZHgueSAqIFNITUJMT0NLOwogICAgCiAgICBjb25zdCBpbnQgVFggPSB0aHJlYWRJZHgueCVUQkxPQ0s7CiAgICBjb25zdCBpbnQgVFkgPSB0aHJlYWRJZHgueSU0OwogICAgY29uc3QgaW50IFRaID0gKHRocmVhZElkeC55LzQpJTQ7CiAgICBjb25zdCBpbnQgVFlaID0gdGhyZWFkSWR4LnklMTY7CiAgICBjb25zdCBpbnQgVFcgPSAodGhyZWFkSWR4LnkvMTYpJTI7CgogICAgX19zaGFyZWRfXyB1aW50OF90IGFfc2hhcmVkW1dJRFRIXVs0XVs0XVs0XVtUQkxPQ0tdWzRdOwogICAgX19zaGFyZWRfXyB1aW50OF90IGJfc2hhcmVkWzRdWzRdWzRdW1RCTE9DS11bNF07CiAgICBfX3NoYXJlZF9fIGZsb2F0ICAgc2NhbGFyWzRdW1RCTE9DS11bV0lEVEhdOwoKICAgIGlmIChUVyAhPSAwKQogICAgewogICAgICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgSVZlYzQgdGVtcF9hW1dJRFRIXSwgdGVtcF9iOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgaWYgKGswICsgajEqVEJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgICAgIHRlbXBfYltqMV0gPSAoWSArIDQqVFggPCBORElNKSA/ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oJmJbKGswICsgajEqVEJMT0NLICsgVFlaKSpORElNICsgWSArIDQqVFhdKSA6IDA7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKSBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIHRlbXBfYVtuXVtqMV0gPSAoWCArIDQqVFggKyBuKlNITUJMT0NLIDwgTURJTSkgPyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KCZhWyhrMCArIGoxKlRCTE9DSyArIFRZWikqTURJTSArIFggKyA0KlRYICsgbipTSE1CTE9DS10pIDogMDsKCiAgICAgICAgICAgIGludCB0eDMgPSAoVFggJiAzKSA8PCAyOwogICAgICAgICAgICBpbnQgaTEgPSBUWCA+PiAyOwoKICAgICAgICAgICAgaWYgKGswICE9IDApIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGZvciAoaW50IGoxPTA7IGoxPDQ7IGoxKyspCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICBiX3NoYXJlZFtqMV1bVFpdW1RZXVt0eDMgKyBtXVtpMV0gPSAodGVtcF9iW2oxXSA+PiAoOCptKSkgJiAweEZGOwoKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICBhX3NoYXJlZFtuXVtpMV1bVFpdW1RZXVt0eDMgKyBtXVtqMV0gPSAodGVtcF9hW25dW2oxXSA+PiAoOCptKSkgJiAweEZGOwoKICAgICAgICAgICAgX19zeW5jdGhyZWFkcygpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgVmVjMTYgcmVnX3Jlc1tXSURUSF07CiAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykgcmVnX3Jlc1tuXSA9IHt9OwoKICAgIGZsb2F0IHRtcF9hW1dJRFRIXTsKICAgIGZsb2F0IHRtcF9iOwogICAgaWYgKFRaID09IDApCiAgICB7CiAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgIHRtcF9hW25dID0gKFggKyBUWSpUQkxPQ0sgKyBuKlNITUJMT0NLIDwgTURJTSkgPyBzY2FsZV9hW1ggKyBUWSpUQkxPQ0sgKyBUWCArIG4qU0hNQkxPQ0tdIDogMDsKICAgICAgICB0bXBfYiA9IHNjYWxlX2JbWS8xMjhdOwogICAgfQoKICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgIHsKICAgICAgICBpZiAoVFogPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKSBzY2FsYXJbVFldW1RYXVtuXSA9IHRtcF9iICogdG1wX2Fbbl07CgogICAgICAgICAgICBpZiAoazEgKyAyKlNITUJMT0NLIDwgS0RJTSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspCiAgICAgICAgICAgICAgICAgICAgdG1wX2Fbbl0gPSAoWCArIFRZKlRCTE9DSyArIG4qU0hNQkxPQ0sgPCBNRElNKSA/IHNjYWxlX2FbKGsxLzEyOCArIDEpKk1ESU0gKyBYICsgVFkqVEJMT0NLICsgVFggKyBuKlNITUJMT0NLXSA6IDA7CiAgICAgICAgICAgICAgICB0bXBfYiA9IHNjYWxlX2JbKGsxLzEyOCArIDEpKigoTkRJTSsxMjcpLzEyOCkgKyAoWS8xMjgpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgCiAgICAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZsb2F0OHg4IGEwX2xvYWRbV0lEVEhdLCBhMV9sb2FkW1dJRFRIXTsKICAgICAgICAgICAgZmxvYXQ4eDggYjBfbG9hZFs0XSwgYjFfbG9hZFs0XTsKCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08ODsgbSsrKQogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPDQ7IG4rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjBfbG9hZFtuXVttXSA9IGJfc2hhcmVkW20vNCArIDBdW20lNF1bVFldW1RYXVtuXTsKICAgICAgICAgICAgICAgIGIxX2xvYWRbbl1bbV0gPSBiX3NoYXJlZFttLzQgKyAyXVttJTRdW1RZXVtUWF1bbl07CiAgICAgICAgICAgIH0KCiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08ODsgbSsrKQogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgcj0wOyByPFdJRFRIOyByKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGEwX2xvYWRbcl1bbV0gPSBhX3NoYXJlZFtyXVtUWl1bbSU0XVtUWV1bVFhdW20vNCArIDBdOwogICAgICAgICAgICAgICAgYTFfbG9hZFtyXVttXSA9IGFfc2hhcmVkW3JdW1RaXVttJTRdW1RZXVtUWF1bbS80ICsgMl07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFZlYzQgc2NhbFtXSURUSF07CiAgICAjcHJhZ21hIHVucm9sbAogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICBzY2FsW25dW21dID0gc2NhbGFyW1RaXVtUWSo0ICsgbV1bbl07CgogICAgICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgI3ByYWdtYSB1bnJvbGwKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPDQ7IG4rKykKICAgICNwcmFnbWEgdW5yb2xsCiAgICAgICAgICAgIGZvciAoaW50IHIxPTA7IHIxPFdJRFRIOyByMSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBWZWM0IHJlcyA9IG1mbWEoYTBfbG9hZFtyMV0sIGExX2xvYWRbcjFdLCBiMF9sb2FkW25dLCBiMV9sb2FkW25dKTsKCiAgICAgICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICAgICAgICAgIHJlZ19yZXNbcjFdW20qNCArIG5dICs9IHNjYWxbcjFdW21dICogcmVzW21dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGo9MDsgajw0OyBqICsrKSBmb3IgKGludCBpPTA7IGk8NDsgaSArKykgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICBpZiAoWSArIGkqVEJMT0NLIDwgTkRJTSAmJiA0KlRZWiArIFggKyByMSpTSE1CTE9DSyA8IE1ESU0pCiAgICAgICAgY1soNCpUWVogKyBqICsgWCArIHIxKlNITUJMT0NLKSpORElNICsgWSArIGkqVEJMT0NLICsgVFhdID0gKGZsb2F0MTYpIHJlZ19yZXNbcjFdW2oqNCArIGldOwp9Cgp2b2lkIGxhdW5jaEhpcCgKICAgIGNvbnN0IHZvaWQqIGEsCiAgICBjb25zdCB2b2lkKiBiLAogICAgdm9pZCogYywKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9hLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2IsCiAgICBpbnQgTSwgaW50IE4sIGludCBLCikgewogICAgZGltMyBibG9jayhUQkxPQ0ssIDMyLCAxKTsKCiAgICBpbnQgbWkzMDBfdGhyZWFkcyA9IFNITUJMT0NLICogU0hNQkxPQ0sgKiAzMDQ7CiAgICBpbnQgYnBjdSA9IE0gKiBOIC8gbWkzMDBfdGhyZWFkczsKCiAgICBpZiAoYnBjdSA+PSA2ICYmIE0gPj0gNCpTSE1CTE9DSykKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyA0KlNITUJMT0NLIC0gMSkgLyBTSE1CTE9DSyAvIDQsIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDw0Pjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KICAgIGVsc2UgaWYgKGJwY3UgPj0gMiAmJiBNID49IDIqU0hNQkxPQ0spCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgMipTSE1CTE9DSyAtIDEpIC8gU0hNQkxPQ0sgLyAyLCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8Mj48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZGltMyBncmlkKChNICsgU0hNQkxPQ0sgLSAxKSAvIFNITUJMT0NLLCBOIC8gU0hNQkxPQ0spOwoKICAgICAgICBmcDhfZ2VtbV9rZXJuZWw8MT48PDxncmlkLCBibG9jaywgMCwgMD4+PigKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYSksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGIpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGZsb2F0MTYqPihjKSwKICAgICAgICAgICAgc2NhbGVfYSwKICAgICAgICAgICAgc2NhbGVfYiwKICAgICAgICAgICAgTSwgTiwgSyk7CiAgICB9Cn0KIiIiCgojIEMrKyBpbXBsZW1lbnRhdGlvbiBvZiBGUDggR0VNTSAobWF0Y2hpbmcgY3VzdG9tX2tlcm5lbF8xIGxvZ2ljKQpjcHBfc291cmNlID0gIiIiCiNpbmNsdWRlIDx0b3JjaC9leHRlbnNpb24uaD4KI2luY2x1ZGUgPEFUZW4vQVRlbi5oPgoKdm9pZCBsYXVuY2hIaXAoCiAgICBjb25zdCB2b2lkKiBhLAogICAgY29uc3Qgdm9pZCogYiwKICAgIHZvaWQqIGMsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYSwKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9iLAogICAgaW50IE0sIGludCBOLCBpbnQgSwopOwoKdm9pZCBmcDhfZ2VtbSgKICAgIHRvcmNoOjpUZW5zb3IgYSwKICAgIHRvcmNoOjpUZW5zb3IgYiwKICAgIHRvcmNoOjpUZW5zb3IgYywKICAgIHRvcmNoOjpUZW5zb3IgYV9zY2FsZSwKICAgIHRvcmNoOjpUZW5zb3IgYl9zY2FsZQopIHsKICAgIGNvbnN0IGludCBtID0gYS5zaXplKDApOwogICAgY29uc3QgaW50IG4gPSBiLnNpemUoMCk7CiAgICBjb25zdCBpbnQgayA9IGEuc2l6ZSgxKTsKCiAgICBsYXVuY2hIaXAoCiAgICAgICAgYS5kYXRhX3B0cigpLAogICAgICAgIGIuZGF0YV9wdHIoKSwKICAgICAgICBjLmRhdGFfcHRyKCksCiAgICAgICAgYV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgICBiX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAgIG0sIG4sIGsKICAgICk7Cn0KClBZQklORDExX01PRFVMRShUT1JDSF9FWFRFTlNJT05fTkFNRSwgbSkgewogICAgbS5kZWYoImZwOF9nZW1tIiwgJmZwOF9nZW1tLCAiRlA4IEdFTU0iKTsKfQoiIiIKCmltcG9ydCBvcwpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicKCiMgQ29tcGlsZSB0aGUgQysrIGV4dGVuc2lvbiBpbmxpbmUKY3BwX2V4dGVuc2lvbiA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4X2dlbW1fY3BwIiwKICAgIGNwcF9zb3VyY2VzPWNwcF9zb3VyY2UsCiAgICBjdWRhX3NvdXJjZXM9Y3VkYV9zb3VyY2UsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi1PMyIsICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysxNyJdLAogICAgZXh0cmFfY2ZsYWdzPVsnLU8zJ10sCiAgICB2ZXJib3NlPUZhbHNlCikKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKCiAgICBjcHBfZXh0ZW5zaW9uLmZwOF9nZW1tKGEsIGIsIGMsIGFfc2NhbGUsIGJfc2NhbGUpCgogICAgcmV0dXJuIGMKNo newline at end of file+ aW1wb3J0IHRvcmNoCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKIyBDKysgaW1wbGVtZW50YXRpb24gb2YgRlA4IEdFTU0gKG1hdGNoaW5nIGN1c3RvbV9rZXJuZWxfMSBsb2dpYykKY3VkYV9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgoKI2RlZmluZSBTSE1CTE9DSyA2NAojZGVmaW5lIFRCTE9DSyAxNgoKdXNpbmcgZmxvYXQxNiAgPSBfX2hpcF9iZmxvYXQxNjsKdXNpbmcgVmVjNCAgICAgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNCAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIElWZWM0ICAgID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDQgKiBzaXplb2YodWludDMyX3QpKSkpIHVpbnQzMl90Owp1c2luZyBWZWMxNiAgICA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CnVzaW5nIGZsb2F0OHg4ID0gX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDggKiBzaXplb2YodWludDhfdCkpKSkgdWludDhfdDsKCmlubGluZSBfX2RldmljZV9fIHVpbnQ2NF90IGNhc3Rmcm9tOHg4KGNvbnN0IGZsb2F0OHg4JiBmKQp7CiAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0X3QqPigmZik7Cn0KCmlubGluZSBfX2RldmljZV9fIFZlYzQgbWZtYShjb25zdCBmbG9hdDh4OCYgYTAsIGNvbnN0IGZsb2F0OHg4JiBhMSwgY29uc3QgZmxvYXQ4eDgmIGIwLCBjb25zdCBmbG9hdDh4OCYgYjEpCnsKICAgIFZlYzQgcmV0ID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGNhc3Rmcm9tOHg4KGEwKSwgY2FzdGZyb204eDgoYjApLCBWZWM0e30sIDAsIDAsIDApOwogICAgcmV0dXJuIF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChjYXN0ZnJvbTh4OChhMSksIGNhc3Rmcm9tOHg4KGIxKSwgcmV0LCAwLCAwLCAwKTsKfQoKLy8gSEVJR0hUIDw9IDQKLy8gV0lEVEggPiA0IGNhdXNlcyByZWdpc3RlciBzcGlsbAp0ZW1wbGF0ZTxpbnQgV0lEVEgsIGludCBIRUlHSFQgPSA0PgpfX2dsb2JhbF9fIHZvaWQgX19sYXVuY2hfYm91bmRzX18oVEJMT0NLKlRCTE9DSyoyLCA0KQpmcDhfZ2VtbV9rZXJuZWwoCiAgICBjb25zdCB1aW50OF90KiBfX3Jlc3RyaWN0X18gYSwKICAgIGNvbnN0IHVpbnQ4X3QqIF9fcmVzdHJpY3RfXyBiLAogICAgZmxvYXQxNiogX19yZXN0cmljdF9fIGMsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogX19yZXN0cmljdF9fIHNjYWxlX2IsCiAgICBpbnQgTURJTSwgaW50IE5ESU0sIGludCBLRElNCikgewogICAgY29uc3QgaW50IFggPSBibG9ja0lkeC54ICogU0hNQkxPQ0sgKiBXSURUSDsKICAgIGNvbnN0IGludCBZID0gYmxvY2tJZHgueSAqIFRCTE9DSyAqIEhFSUdIVDsKICAgIAogICAgY29uc3QgaW50IFRYID0gdGhyZWFkSWR4LnglVEJMT0NLOwogICAgY29uc3QgaW50IFRZID0gdGhyZWFkSWR4LnklNDsKICAgIGNvbnN0IGludCBUWiA9ICh0aHJlYWRJZHgueS80KSU0OwogICAgY29uc3QgaW50IFRZWiA9IHRocmVhZElkeC55JTE2OwogICAgY29uc3QgaW50IFRXID0gKHRocmVhZElkeC55LzE2KSUyOwoKICAgIF9fc2hhcmVkX18gdWludDhfdCBhX3NoYXJlZFtXSURUSF1bNF1bNF1bNF1bVEJMT0NLXVs0XTsKICAgIF9fc2hhcmVkX18gdWludDhfdCBiX3NoYXJlZFs0XVtIRUlHSFRdWzRdW1RCTE9DS11bNF07CiAgICBfX3NoYXJlZF9fIGZsb2F0ICAgc2NhbGFyWzRdW1RCTE9DS11bV0lEVEhdOwoKICAgIGlmIChUVyAhPSAwKQogICAgewogICAgICAgIGZvciAoaW50IGsxPTA7IGsxIDwgS0RJTTsgazEgKz0gMipTSE1CTE9DSykKICAgICAgICBmb3IgKGludCBrMj0wOyBrMiA8IDIqU0hNQkxPQ0s7IGsyICs9IFNITUJMT0NLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGswID0gazEgKyBrMjsKICAgICAgICAgICAgSVZlYzQgdGVtcF9hW1dJRFRIXSwgdGVtcF9iOwoKICAgICAgICAgICAgaW50IHR4MyA9IChUWCAmIDMpIDw8IDI7CiAgICAgICAgICAgIGludCBpMSA9IFRYID4+IDI7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNICYmIFkgKyA0KlRYIDwgTkRJTSkKICAgICAgICAgICAgICAgIHRlbXBfYltqMV0gPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KCZiWyhrMCArIFRaKlRCTE9DSyArIFRZICsgNCpqMSkqTkRJTSArIFkgKyA0KlRYXSk7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBpZiAoazAgKyBqMSpUQkxPQ0sgPCBLRElNICYmIFggPCBNRElNKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIHRlbXBfYVtuXVtqMV0gPSAoWCArIG4qU0hNQkxPQ0sgPCBNRElNKSA/ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oJmFbKGswICsgajEqVEJMT0NLICsgVFlaKSpNRElNICsgWCArIDQqVFggKyBuKlNITUJMT0NLXSkgOiAwOwoKICAgICAgICAgICAgaWYgKGswICE9IDApIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGlmIChpMSA8IEhFSUdIVCkKICAgICAgICAgICAgZm9yIChpbnQgajE9MDsgajE8NDsgajErKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgICAgIGJfc2hhcmVkW1RaXVtpMV1bVFldW3R4MyArIG1dW2oxXSA9ICh0ZW1wX2JbajFdID4+ICg4Km0pKSAmIDB4RkY7CgogICAgICAgICAgICBmb3IgKGludCBqMT0wOyBqMTw0OyBqMSsrKQogICAgICAgICAgICBmb3IgKGludCBtPTA7IG08NDsgbSsrKQogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgIGFfc2hhcmVkW25dW2kxXVtUWl1bVFldW3R4MyArIG1dW2oxXSA9ICh0ZW1wX2Fbbl1bajFdID4+ICg4Km0pKSAmIDB4RkY7CgogICAgICAgICAgICBfX3N5bmN0aHJlYWRzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBWZWMxNiByZWdfcmVzW1dJRFRIXTsKICAgIGZvciAoaW50IG49MDsgbjxXSURUSDsgbisrKSByZWdfcmVzW25dID0ge307CgogICAgZmxvYXQgdG1wX2FbV0lEVEhdOwogICAgZmxvYXQgdG1wX2I7CiAgICBpZiAoVFogPT0gMCkKICAgIHsKICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgdG1wX2Fbbl0gPSAoWCArIFRZKlRCTE9DSyArIG4qU0hNQkxPQ0sgPCBNRElNKSA/IHNjYWxlX2FbWCArIFRZKlRCTE9DSyArIFRYICsgbipTSE1CTE9DS10gOiAwOwogICAgICAgIHRtcF9iID0gc2NhbGVfYltZLzEyOF07CiAgICB9CgogICAgZm9yIChpbnQgazE9MDsgazEgPCBLRElNOyBrMSArPSAyKlNITUJMT0NLKQogICAgewogICAgICAgIGlmIChUWiA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgbj0wOyBuPFdJRFRIOyBuKyspIHNjYWxhcltUWV1bVFhdW25dID0gdG1wX2IgKiB0bXBfYVtuXTsKCiAgICAgICAgICAgIGlmIChrMSArIDIqU0hNQkxPQ0sgPCBLRElNKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgICAgICAgICB0bXBfYVtuXSA9IChYICsgVFkqVEJMT0NLICsgbipTSE1CTE9DSyA8IE1ESU0pID8gc2NhbGVfYVsoazEvMTI4ICsgMSkqTURJTSArIFggKyBUWSpUQkxPQ0sgKyBUWCArIG4qU0hNQkxPQ0tdIDogMDsKICAgICAgICAgICAgICAgIHRtcF9iID0gc2NhbGVfYlsoazEvMTI4ICsgMSkqKChORElNKzEyNykvMTI4KSArIChZLzEyOCldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGsyPTA7IGsyIDwgMipTSE1CTE9DSzsgazIgKz0gU0hNQkxPQ0spCiAgICAgICAgewogICAgICAgICAgICBpbnQgazAgPSBrMSArIGsyOwoKICAgICAgICAgICAgX19zeW5jdGhyZWFkcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgZmxvYXQ4eDggYTBfbG9hZFtXSURUSF0sIGExX2xvYWRbV0lEVEhdOwogICAgICAgICAgICBmbG9hdDh4OCBiMF9sb2FkW0hFSUdIVF0sIGIxX2xvYWRbSEVJR0hUXTsKCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw4OyBtKyspCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxIRUlHSFQ7IG4rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjBfbG9hZFtuXVttXSA9IGJfc2hhcmVkW20vNCArIDBdW25dW1RZXVtUWF1bbSU0XTsKICAgICAgICAgICAgICAgIGIxX2xvYWRbbl1bbV0gPSBiX3NoYXJlZFttLzQgKyAyXVtuXVtUWV1bVFhdW20lNF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw4OyBtKyspCiAgICAgICAgICAgIGZvciAoaW50IHI9MDsgcjxXSURUSDsgcisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhMF9sb2FkW3JdW21dID0gYV9zaGFyZWRbcl1bVFpdW20lNF1bVFldW1RYXVttLzQgKyAwXTsKICAgICAgICAgICAgICAgIGExX2xvYWRbcl1bbV0gPSBhX3NoYXJlZFtyXVtUWl1bbSU0XVtUWV1bVFhdW20vNCArIDJdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBWZWM0IHNjYWxbV0lEVEhdOwogICAgICAgICAgICBmb3IgKGludCBuPTA7IG48V0lEVEg7IG4rKykKICAgICAgICAgICAgZm9yIChpbnQgbT0wOyBtPDQ7IG0rKykKICAgICAgICAgICAgICAgIHNjYWxbbl1bbV0gPSBzY2FsYXJbVFpdW1RZKjQgKyBtXVtuXTsKCiAgICAgICAgICAgIF9fc3luY3RocmVhZHMoKTsKCiAgICAgICAgICAgIGZvciAoaW50IG49MDsgbjxIRUlHSFQ7IG4rKykKICAgICAgICAgICAgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFZlYzQgcmVzID0gbWZtYShhMF9sb2FkW3IxXSwgYTFfbG9hZFtyMV0sIGIwX2xvYWRbbl0sIGIxX2xvYWRbbl0pOwoKICAgICAgICAgICAgICAgIGZvciAoaW50IG09MDsgbTw0OyBtKyspCiAgICAgICAgICAgICAgICAgICAgcmVnX3Jlc1tyMV1bbSpIRUlHSFQgKyBuXSArPSBzY2FsW3IxXVttXSAqIHJlc1ttXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBqPTA7IGo8NDsgaiArKykgZm9yIChpbnQgaT0wOyBpPEhFSUdIVDsgaSArKykgZm9yIChpbnQgcjE9MDsgcjE8V0lEVEg7IHIxKyspCiAgICBpZiAoWSArIGkqVEJMT0NLIDwgTkRJTSAmJiA0KlRZWiArIFggKyByMSpTSE1CTE9DSyA8IE1ESU0pCiAgICAgICAgY1soNCpUWVogKyBqICsgWCArIHIxKlNITUJMT0NLKSpORElNICsgWSArIGkqVEJMT0NLICsgVFhdID0gKGZsb2F0MTYpIHJlZ19yZXNbcjFdW2oqSEVJR0hUICsgaV07Cn0KCnZvaWQgbGF1bmNoSGlwKAogICAgY29uc3Qgdm9pZCogYSwKICAgIGNvbnN0IHZvaWQqIGIsCiAgICB2b2lkKiBjLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2EsCiAgICBjb25zdCBmbG9hdCogc2NhbGVfYiwKICAgIGludCBNLCBpbnQgTiwgaW50IEsKKSB7CiAgICBkaW0zIGJsb2NrKFRCTE9DSywgMzIsIDEpOwoKICAgIGludCBtaTMwMF90aHJlYWRzID0gU0hNQkxPQ0sgKiBTSE1CTE9DSyAqIDMwNDsKICAgIGludCBicGN1ID0gTSAqIE4gLyBtaTMwMF90aHJlYWRzOwoKICAgIGlmIChicGN1ID49IDggJiYgTSA+PSA0KlNITUJMT0NLKQogICAgewogICAgICAgIGRpbTMgZ3JpZCgoTSArIDQqU0hNQkxPQ0sgLSAxKSAvIFNITUJMT0NLIC8gNCwgTiAvIFNITUJMT0NLKTsKCiAgICAgICAgZnA4X2dlbW1fa2VybmVsPDQ+PDw8Z3JpZCwgYmxvY2ssIDAsIDA+Pj4oCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGEpLAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxmbG9hdDE2Kj4oYyksCiAgICAgICAgICAgIHNjYWxlX2EsCiAgICAgICAgICAgIHNjYWxlX2IsCiAgICAgICAgICAgIE0sIE4sIEspOwogICAgfQogICAgZWxzZSBpZiAoYnBjdSA+PSAzICYmIE0gPj0gMipTSE1CTE9DSykKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyAyKlNITUJMT0NLIC0gMSkgLyBTSE1CTE9DSyAvIDIsIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDwyPjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBkaW0zIGdyaWQoKE0gKyBTSE1CTE9DSyAtIDEpIC8gU0hNQkxPQ0ssIE4gLyBTSE1CTE9DSyk7CgogICAgICAgIGZwOF9nZW1tX2tlcm5lbDwxPjw8PGdyaWQsIGJsb2NrLCAwLCAwPj4+KAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhKSwKICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYiksCiAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQxNio+KGMpLAogICAgICAgICAgICBzY2FsZV9hLAogICAgICAgICAgICBzY2FsZV9iLAogICAgICAgICAgICBNLCBOLCBLKTsKICAgIH0KfQoiIiIKCiMgQysrIGltcGxlbWVudGF0aW9uIG9mIEZQOCBHRU1NIChtYXRjaGluZyBjdXN0b21fa2VybmVsXzEgbG9naWMpCmNwcF9zb3VyY2UgPSAiIiIKI2luY2x1ZGUgPHRvcmNoL2V4dGVuc2lvbi5oPgojaW5jbHVkZSA8QVRlbi9BVGVuLmg+Cgp2b2lkIGxhdW5jaEhpcCgKICAgIGNvbnN0IHZvaWQqIGEsCiAgICBjb25zdCB2b2lkKiBiLAogICAgdm9pZCogYywKICAgIGNvbnN0IGZsb2F0KiBzY2FsZV9hLAogICAgY29uc3QgZmxvYXQqIHNjYWxlX2IsCiAgICBpbnQgTSwgaW50IE4sIGludCBLCik7Cgp2b2lkIGZwOF9nZW1tKAogICAgdG9yY2g6OlRlbnNvciBhLAogICAgdG9yY2g6OlRlbnNvciBiLAogICAgdG9yY2g6OlRlbnNvciBjLAogICAgdG9yY2g6OlRlbnNvciBhX3NjYWxlLAogICAgdG9yY2g6OlRlbnNvciBiX3NjYWxlCikgewogICAgY29uc3QgaW50IG0gPSBhLnNpemUoMCk7CiAgICBjb25zdCBpbnQgbiA9IGIuc2l6ZSgwKTsKICAgIGNvbnN0IGludCBrID0gYS5zaXplKDEpOwoKICAgIGxhdW5jaEhpcCgKICAgICAgICBhLmRhdGFfcHRyKCksCiAgICAgICAgYi5kYXRhX3B0cigpLAogICAgICAgIGMuZGF0YV9wdHIoKSwKICAgICAgICBhX3NjYWxlLmRhdGFfcHRyPGZsb2F0PigpLAogICAgICAgIGJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgICAgbSwgbiwgawogICAgKTsKfQoKUFlCSU5EMTFfTU9EVUxFKFRPUkNIX0VYVEVOU0lPTl9OQU1FLCBtKSB7CiAgICBtLmRlZigiZnA4X2dlbW0iLCAmZnA4X2dlbW0sICJGUDggR0VNTSIpOwp9CiIiIgoKaW1wb3J0IG9zCm9zLmVudmlyb25bJ1BZVE9SQ0hfUk9DTV9BUkNIJ10gPSAnZ2Z4OTQyJwoKIyBDb21waWxlIHRoZSBDKysgZXh0ZW5zaW9uIGlubGluZQpjcHBfZXh0ZW5zaW9uID0gbG9hZF9pbmxpbmUoCiAgICBuYW1lPSJmcDhfZ2VtbV9jcHAiLAogICAgY3BwX3NvdXJjZXM9Y3BwX3NvdXJjZSwKICAgIGN1ZGFfc291cmNlcz1jdWRhX3NvdXJjZSwKICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLU8zIiwgIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzE3Il0sCiAgICBleHRyYV9jZmxhZ3M9WyctTzMnXSwKICAgIHZlcmJvc2U9RmFsc2UKKQoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQoKICAgIGNwcF9leHRlbnNpb24uZnA4X2dlbW0oYSwgYiwgYywgYV9zY2FsZSwgYl9zY2FsZSkKCiAgICByZXR1cm4gYwo=No newline at end of file
Best evidence level for this revision: reported
JSON