submission 10058
KernelBot user 160 · 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.
sub.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-10058?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=512 · seed=6563
AMD Instinct MI300X
320.1µs
#82 of 98
2025-04-27
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
320.6µs
#82 of 98
2025-04-27
Show all 18 measurements ›Showing all 18 measurements ⌄
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
321.3µs
#75 of 98
2025-04-27
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
328.5µs
#67 of 98
2025-04-27
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
335.4µs
#61 of 98
2025-04-27
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
358.2µs
#69 of 98
2025-04-27
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
735.8µs
#75 of 98
2025-04-27
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
2.05ms
#75 of 98
2025-04-27
Reported · How evidence levels are derived →
Source and license
sourceavailable
revision digestsha256:ef3fb84577d7ea5f19acbcdf89c0c5b1eb2dcafc51ef0ab07ca2cdb2c0d04139
license declaredunknown
license concludedunknown
imported2026-08-15
Kernel source
sub.py1 lines
IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKCmN1ZGFfc3JjID0gciIiIgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KCl9faG9zdF9fIF9fZGV2aWNlX18gX19mb3JjZWlubGluZV9fIHVpbnQxNl90IGNkaXYodWludDE2X3QgYSwgdWludDE2X3QgYikgewogIHJldHVybiAoYSArIGIgLSAxKSAvIGI7Cn0KCiNkZWZpbmUgQkxPQ0tfRElNIDEyOAoKdGVtcGxhdGUgPGNvbnN0IHVpbnQzMl90IEJOLCBjb25zdCB1aW50MzJfdCBCSywgY29uc3QgdWludDMyX3QgQk0sCiAgICAgICAgICBjb25zdCB1aW50MzJfdCBXSVRFUk4sIGNvbnN0IHVpbnQzMl90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkCmZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqQV9zY2FsZSwgY29uc3QgZmxvYXQgKkJfc2NhbGUsIF9faGlwX2JmbG9hdDE2ICpDLAogICAgICAgICAgICAgIHVpbnQzMl90IE4sIHVpbnQzMl90IEssIHVpbnQzMl90IE0pIHsKICB1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CgogIHN0YXRpYyBjb25zdGV4cHIgdWludDE2X3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgdWludDE2X3QgV0FSUFNJWkUgPSA2NDsKICBzdGF0aWMgY29uc3RleHByIHVpbnQxNl90IFdOID0gMzIgKiBXSVRFUk47CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVtVGhyZWFkcyA9IChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSk7CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBTVUJCTiA9IEJOIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBTVUJCTSA9IEJNIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBzdHJpZGVBID0gbnVtVGhyZWFkcyAvIFNVQkJOOwogIHN0YXRpYyBjb25zdGV4cHIgdWludDE2X3Qgc3RyaWRlQiA9IG51bVRocmVhZHMgLyBTVUJCTTsKCiAgdWludDMyX3Qgcm93T2Zmc2V0QyA9IGJsb2NrSWR4LnkgKiBCTjsKICB1aW50MzJfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHVpbnQzMl90IGNvbE9mZnNldEEgPSByb3dPZmZzZXRDOwogIHVpbnQzMl90IGNvbE9mZnNldEIgPSBjb2xPZmZzZXRDOwogIHVpbnQxNl90IE1fc2NhbGUgPSBjZGl2KE0sIEJMT0NLX0RJTSk7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJLIDw9IDEyOCAmJiBCTSA8PSAxMjgsICJSYW5nZSBhYm92ZSAxMjggaXMgbm90IHN1cHBvcnRlZCIpOwoKICB1aW50MTZfdCBpbm5lckNvbEEgPSB0aHJlYWRJZHgueCAlIFNVQkJOOwogIHVpbnQxNl90IGlubmVyUm93QSA9IHRocmVhZElkeC54IC8gU1VCQk47CiAgdWludDE2X3QgaW5uZXJDb2xCID0gdGhyZWFkSWR4LnggJSBTVUJCTTsKICB1aW50MTZfdCBpbm5lclJvd0IgPSB0aHJlYWRJZHgueCAvIFNVQkJNOwoKICB1aW50MTZfdCBsYW5lSWR4ID0gdGhyZWFkSWR4LnggJSBXQVJQU0laRTsKICB1aW50MTZfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICB1aW50MTZfdCB3YXJwQ29sT2Zmc2V0ID0gKHdhcnBJZHggJSAoQk0gLyBXTSkpICogV007CiAgdWludDE2X3Qgd2FycFJvd09mZnNldCA9ICh3YXJwSWR4IC8gKEJNIC8gV00pKSAqIFdOOwogIHVpbnQxNl90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHVpbnQxNl90IHdhcnBZID0gbGFuZUlkeCAvIDMyOwoKICBfX3NoYXJlZF9fIF9faGlwX2ZwOF9lNG0zX2ZudXogQXNbQktdW0JOXSwgQnNbQktdW0JNXTsKICBfX3NoYXJlZF9fIGZsb2F0IFdzW0JOICsgMV07CgogIF9faGlwX2ZwOF9lNG0zX2ZudXogYVtXSVRFUk5dWzhdLCBiW1dJVEVSTV1bOF07CiAgZmxvYXR4MTYgZFtXSVRFUk5dW1dJVEVSTV0gPSB7MH07CgogIGZvciAodWludDE2X3QgdGlsZU9mZnNldCA9IDA7IHRpbGVPZmZzZXQgPCBLOyB0aWxlT2Zmc2V0ICs9IEJLKSB7CiAgICAvLyBsb2FkIGZyb20gZ2xvYmFsIHRvIHNoYXJlZCBtZW1vcnkgaW4gY29hbGVzY2VkIG1hbm5lcgogICAgZm9yICh1aW50MTZfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQVsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgKiBOICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpXSk7CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQogICAgaWYgKHRocmVhZElkeC54IDwgU1VCQk4pIHsKICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQ0ICo+KCZXc1t0aHJlYWRJZHgueCAqIFZFQ1RPUl9TSVpFXSkgPQogICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQ0ICo+KAogICAgICAgICAgICAgICZBX3NjYWxlWyh0aWxlT2Zmc2V0IC8gQkxPQ0tfRElNKSAqIE4gKwogICAgICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRSldKTsKICAgIH0KICAgIGZvciAodWludDE2X3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQkspIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICo+KAogICAgICAgICAgICAgICAgJkJbKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpICogTSArCiAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKV0pOwogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpIDwgQk0pIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9IDAuMGY7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aHJlYWRJZHgueCA9PSBudW1UaHJlYWRzIC0gMSkgeyAvLyBsb2FkIHVzaW5nIGRpZmZlcmVudCB3YXJwCiAgICAgIFdzW0JOXSA9IEJfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEIgLyBCTE9DS19ESU0pXTsKICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKICAgIGZsb2F0eDE2IGNbV0lURVJOXVtXSVRFUk1dID0gezB9OwogICAgZm9yICh1aW50MTZfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAodWludDE2X3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCA4OyArK2kpIHsKICAgICAgICAgIGFbd25dW2ldID0KICAgICAgICAgICAgICBBc1tCS09mZnNldCArIHdhcnBZICogOCArIGldW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgd2FycFhdOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHVpbnQxNl90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgODsgKytpKSB7CiAgICAgICAgICBiW3dtXVtpXSA9CiAgICAgICAgICAgICAgQnNbQktPZmZzZXQgKyB3YXJwWSAqIDggKyBpXVt3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh1aW50MTZfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICAgICAgZm9yICh1aW50MTZfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBjW3duXVt3bV0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzMyeDMyeDE2X2ZwOF9mcDgoCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihhW3duXSksCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihiW3dtXSksIGNbd25dW3dtXSwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKHVpbnQxNl90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgZm9yICh1aW50MTZfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgZm9yICh1aW50MTZfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICBkW3duXVt3bV1baSArIGogKiA0XSArPQogICAgICAgICAgICAgICAgY1t3bl1bd21dW2kgKyBqICogNF0gKgogICAgICAgICAgICAgICAgV3Nbd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGldICogYl9zY2FsZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICBmb3IgKHVpbnQxNl90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgIGZvciAodWludDE2X3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHVpbnQxNl90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgaWYgKChyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpIDwKICAgICAgICAgICAgICAgICAgTiAmJgogICAgICAgICAgICAgIChjb2xPZmZzZXRDICsgd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWCkgPCBNKQogICAgICAgICAgICBDWyhyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpICoKICAgICAgICAgICAgICAgICAgTSArCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKV0gPQogICAgICAgICAgICAgICAgKF9faGlwX2JmbG9hdDE2KWRbd25dW3dtXVtpICsgaiAqIDRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpIHsKICB1aW50MzJfdCBOID0gQS5zaXplKDApLCBLID0gQS5zaXplKDEpLCBNID0gQi5zaXplKDApOwoKICBjb25zdCB1aW50MzJfdCBCSyA9IDEyODsKICBjb25zdCB1aW50MzJfdCBCTiA9IDEyODsKICBjb25zdCB1aW50MzJfdCBCTSA9IDEyODsKICBjb25zdCB1aW50MzJfdCBXSVRFUk4gPSAxOwogIGNvbnN0IHVpbnQzMl90IFdJVEVSTSA9IDE7CiAgZGltMyBudW1UaHJlYWRzKChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSkpOwogIGRpbTMgbnVtQmxvY2tzKGNkaXYoTSwgQk0pLCBjZGl2KE4sIEJOKSk7CiAgZnA4X21tX2tlcm5lbDxCTiwgQkssIEJNLCBXSVRFUk4sIFdJVEVSTT48PDxudW1CbG9ja3MsIG51bVRocmVhZHM+Pj4oCiAgICAgIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUIuZGF0YV9wdHIoKSwKICAgICAgQV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwgQl9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgKF9faGlwX2JmbG9hdDE2ICopQy5kYXRhX3B0cigpLCBOLCBLLCBNKTsKICByZXR1cm4gQzsKfQoiIiIKCmNwcF9zcmMgPSByIiIiCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKTsKIiIiCgppZiBzeXMuc3Rkb3V0IGlzIE5vbmU6CiAgICBzeXMuc3Rkb3V0ID0gb3BlbigiL2Rldi9zdGRvdXQiLCAidyIpCmlmIHN5cy5zdGRlcnIgaXMgTm9uZToKICAgIHN5cy5zdGRlcnIgPSBvcGVuKCIvZGV2L3N0ZGVyciIsICJ3IikKCm1vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4X21tIiwKICAgIGNwcF9zb3VyY2VzPVtjcHBfc3JjXSwKICAgIGN1ZGFfc291cmNlcz1bY3VkYV9zcmNdLAogICAgZnVuY3Rpb25zPVsiZnA4X21tIl0sCiAgICB2ZXJib3NlPVRydWUsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi1PMyIsICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCJdLAopCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQogICAgcmV0dXJuIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykKSource 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 9617.
- IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKCmN1ZGFfc3JjID0gciIiIgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KCl9faG9zdF9fIF9fZGV2aWNlX18gX19mb3JjZWlubGluZV9fIHNpemVfdCBjZGl2KHNpemVfdCBhLCBzaXplX3QgYikgewogIHJldHVybiAoYSArIGIgLSAxKSAvIGI7Cn0KCiNkZWZpbmUgQkxPQ0tfRElNIDEyOAoKdGVtcGxhdGUgPGNvbnN0IHNpemVfdCBCTiwgY29uc3Qgc2l6ZV90IEJLLCBjb25zdCBzaXplX3QgQk0sCiAgICAgICAgICBjb25zdCBzaXplX3QgV0lURVJOLCBjb25zdCBzaXplX3QgV0lURVJNPgogICAgICAgICAgX19nbG9iYWxfXyBfX2xhdW5jaF9ib3VuZHNfXygxMDI0LCA0KQpfX2dsb2JhbF9fIHZvaWQgZnA4X21tX2tlcm5lbChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6ICpCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqQV9zY2FsZSwgY29uc3QgZmxvYXQgKkJfc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2ICpDLCBzaXplX3QgTiwgc2l6ZV90IEssIHNpemVfdCBNKSB7CiAgdXNpbmcgZmxvYXR4MTYgPSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oMTYgKiBzaXplb2YoZmxvYXQpKSkpIGZsb2F0OwoKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBWRUNUT1JfU0laRSA9IDQ7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgV0FSUFNJWkUgPSA2NDsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBXTiA9IDMyICogV0lURVJOOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFdNID0gMzIgKiBXSVRFUk07CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtVGhyZWFkcyA9IChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSk7CiAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgU1VCQk4gPSBCTiAvIFZFQ1RPUl9TSVpFOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IFNVQkJNID0gQk0gLyBWRUNUT1JfU0laRTsKICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzdHJpZGVBID0gbnVtVGhyZWFkcyAvIFNVQkJOOwogIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0cmlkZUIgPSBudW1UaHJlYWRzIC8gU1VCQk07CgogIHNpemVfdCByb3dPZmZzZXRDID0gYmxvY2tJZHgueSAqIEJOOwogIHNpemVfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHNpemVfdCBjb2xPZmZzZXRBID0gcm93T2Zmc2V0QzsKICBzaXplX3QgY29sT2Zmc2V0QiA9IGNvbE9mZnNldEM7CiAgc2l6ZV90IE1fc2NhbGUgPSBjZGl2KE0sIEJMT0NLX0RJTSk7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJLIDw9IDEyOCAmJiBCTSA8PSAxMjgsICJSYW5nZSBhYm92ZSAxMjggaXMgbm90IHN1cHBvcnRlZCIpOwoKICBzaXplX3QgaW5uZXJDb2xBID0gdGhyZWFkSWR4LnggJSBTVUJCTjsKICBzaXplX3QgaW5uZXJSb3dBID0gdGhyZWFkSWR4LnggLyBTVUJCTjsKICBzaXplX3QgaW5uZXJDb2xCID0gdGhyZWFkSWR4LnggJSBTVUJCTTsKICBzaXplX3QgaW5uZXJSb3dCID0gdGhyZWFkSWR4LnggLyBTVUJCTTsKCiAgc2l6ZV90IGxhbmVJZHggPSB0aHJlYWRJZHgueCAlIFdBUlBTSVpFOwogIHNpemVfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICBzaXplX3Qgd2FycENvbE9mZnNldCA9ICh3YXJwSWR4ICUgKEJNIC8gV00pKSAqIFdNOwogIHNpemVfdCB3YXJwUm93T2Zmc2V0ID0gKHdhcnBJZHggLyAoQk0gLyBXTSkpICogV047CiAgc2l6ZV90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHNpemVfdCB3YXJwWSA9IGxhbmVJZHggLyAzMjsKCiAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IEFzW0JLXVtCTl0sIEJzW0JLXVtCTV07CiAgX19zaGFyZWRfXyBmbG9hdCBXc1tCTiArIDFdOwoKICBfX2hpcF9mcDhfZTRtM19mbnV6IGFbV0lURVJOXVs4XSwgYltXSVRFUk1dWzhdOwogIGZsb2F0eDE2IGRbV0lURVJOXVtXSVRFUk1dID0gezB9OwogIGZsb2F0IGJfc2NhbGU7CgogIGZvciAoc2l6ZV90IHRpbGVPZmZzZXQgPSAwOyB0aWxlT2Zmc2V0IDwgSzsgdGlsZU9mZnNldCArPSBCSykgewogICAgLy8gbG9hZCBmcm9tIGdsb2JhbCB0byBzaGFyZWQgbWVtb3J5IGluIGNvYWxlc2NlZCBtYW5uZXIKICAgIGZvciAoc2l6ZV90IGlubmVyUm93T2Zmc2V0QSA9IDA7IGlubmVyUm93T2Zmc2V0QSA8IEJLOwogICAgICAgICBpbm5lclJvd09mZnNldEEgKz0gc3RyaWRlQSkgewogICAgICBpZiAoKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0EpIDwgSyAmJgogICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSkgPCBOICYmCiAgICAgICAgICAoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLKSB7CiAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKj4oCiAgICAgICAgICAgICZBc1tpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0FdW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSkgPQogICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCAqPigKICAgICAgICAgICAgICAgICZBWyh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSAqIE4gKwogICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyBpbm5lckNvbEEgKiBWRUNUT1JfU0laRSldKTsKICAgICAgfSBlbHNlIGlmICgoaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEJLKSB7CiAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQgKj4oCiAgICAgICAgICAgICZBc1tpbm5lclJvd09mZnNldEEgKyBpbm5lclJvd0FdW2lubmVyQ29sQSAqIFZFQ1RPUl9TSVpFXSkgPSAwLjBmOwogICAgICB9CiAgICB9CiAgICBpZiAodGhyZWFkSWR4LnggPCBTVUJCTikgewogICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdDQgKj4oJldzW3RocmVhZElkeC54ICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdDQgKj4oCiAgICAgICAgICAgICAgJkFfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTiArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEEgKyB0aHJlYWRJZHgueCAqIFZFQ1RPUl9TSVpFKV0pOwogICAgfQogICAgZm9yIChzaXplX3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQkspIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICo+KAogICAgICAgICAgICAgICAgJkJbKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpICogTSArCiAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKV0pOwogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpIDwgQk0pIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9IDAuMGY7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aHJlYWRJZHgueCA9PSBudW1UaHJlYWRzIC0gMSkgeyAvLyBsb2FkIHVzaW5nIGRpZmZlcmVudCB3YXJwCiAgICAgIFdzW0JOXSA9IEJfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEIgLyBCTE9DS19ESU0pXTsKICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKICAgIGZsb2F0eDE2IGMgPSB7MH07CiAgICBmb3IgKHNpemVfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYVt3bl1baV0gPQogICAgICAgICAgICAgIEFzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycFJvd09mZnNldCArIHduICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7ICsraSkgewogICAgICAgICAgYlt3bV1baV0gPQogICAgICAgICAgICAgIEJzW0JLT2Zmc2V0ICsgd2FycFkgKiA4ICsgaV1bd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWF07CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBjID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8zMngzMngxNl9mcDhfZnA4KAogICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGxvbmcgKj4oYVt3bl0pLAogICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGxvbmcgKj4oYlt3bV0pLCBjLCAwLCAwLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoc2l6ZV90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgZm9yIChzaXplX3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICBkW3duXVt3bV1baSArIGogKiA0XSArPQogICAgICAgICAgICAgICAgY1tpICsgaiAqIDRdICoKICAgICAgICAgICAgICAgIFdzW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgaiAqIDggKyB3YXJwWSAqIDQgKyBpXSAqIGJfc2NhbGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgX19zeW5jdGhyZWFkcygpOwogIH0KCiBmb3IgKHNpemVfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICBmb3IgKHNpemVfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpIHsKICAgICAgICAgIHNpemVfdCByb3cgPSByb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduKjMyICsgaio4ICsgd2FycFkqNCArIGk7CiAgICAgICAgICBzaXplX3QgY29sID0gY29sT2Zmc2V0QyArIHdhcnBDb2xPZmZzZXQgKyB3bSozMiArIHdhcnBYOwogICAgICAgICAgaWYgKHJvdyA8IE4gJiYgY29sIDwgTSkgewogICAgICAgICAgICAvLyBpbnNpZGUgeW91ciBmaW5hbC1zdG9yZSBsb29wcywgaW5zdGVhZCBvZiB0bXAuZGF0YSB1c2U6CiAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2IHRtcCA9IChfX2hpcF9iZmxvYXQxNilkW3duXVt3bV1baSArIGoqNF07CiAgICAgICAgICAgIC8vIHJlaW50ZXJwcmV0IHRoZSAxNuKAkGJpdCBmb290cHJpbnQgb2YgdG1wCiAgICAgICAgICAgIHVpbnQxNl90IHJhdyA9ICpyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oJnRtcCk7CiAgICAgICAgICAgIC8vIGZvcm0gYSB1aW50MTZfdCogdG8gQ1tyb3cs4oCGY29sXQogICAgICAgICAgICBhdXRvIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPigmQ1tyb3cqTSArIGNvbF0pOwogICAgICAgICAgICAvLyBub27igJB0ZW1wb3JhbCBzdG9yZSBvZiB0aGUgcmF3IGJpdHMKICAgICAgICAgICAgX19idWlsdGluX25vbnRlbXBvcmFsX3N0b3JlKHJhdywgZHN0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKSB7CiAgc2l6ZV90IE4gPSBBLnNpemUoMCksIEsgPSBBLnNpemUoMSksIE0gPSBCLnNpemUoMCk7CgogIGNvbnN0IHNpemVfdCBCSyA9IDEyODsKICBjb25zdCBzaXplX3QgQk4gPSAxMjg7CiAgY29uc3Qgc2l6ZV90IEJNID0gMTI4OwogIGNvbnN0IHNpemVfdCBXSVRFUk4gPSAxOwogIGNvbnN0IHNpemVfdCBXSVRFUk0gPSAxOwogIGRpbTMgbnVtVGhyZWFkcygoQk4gKiBCTSkgLyAoMTYgKiBXSVRFUk4gKiBXSVRFUk0pKTsKICBkaW0zIG51bUJsb2NrcyhjZGl2KE0sIEJNKSwgY2RpdihOLCBCTikpOwogIGZwOF9tbV9rZXJuZWw8Qk4sIEJLLCBCTSwgV0lURVJOLCBXSVRFUk0+PDw8bnVtQmxvY2tzLCBudW1UaHJlYWRzPj4+KAogICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXogKilCLmRhdGFfcHRyKCksCiAgICAgIEFfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksIEJfc2NhbGUuZGF0YV9wdHI8ZmxvYXQ+KCksCiAgICAgIChfX2hpcF9iZmxvYXQxNiAqKUMuZGF0YV9wdHIoKSwgTiwgSywgTSk7CiAgcmV0dXJuIEM7Cn0KIiIiCgpjcHBfc3JjID0gciIiIgphdDo6VGVuc29yIGZwOF9tbShhdDo6VGVuc29yIEEsIGF0OjpUZW5zb3IgQiwgYXQ6OlRlbnNvciBBX3NjYWxlLAogICAgICAgICAgICAgICAgICBhdDo6VGVuc29yIEJfc2NhbGUsIGF0OjpUZW5zb3IgQyk7CiIiIgoKaWYgc3lzLnN0ZG91dCBpcyBOb25lOgogICAgc3lzLnN0ZG91dCA9IG9wZW4oIi9kZXYvc3Rkb3V0IiwgInciKQppZiBzeXMuc3RkZXJyIGlzIE5vbmU6CiAgICBzeXMuc3RkZXJyID0gb3BlbigiL2Rldi9zdGRlcnIiLCAidyIpCgptb2R1bGUgPSBsb2FkX2lubGluZSgKICAgIG5hbWU9ImZwOF9tbSIsCiAgICBjcHBfc291cmNlcz1bY3BwX3NyY10sCiAgICBjdWRhX3NvdXJjZXM9W2N1ZGFfc3JjXSwKICAgIGZ1bmN0aW9ucz1bImZwOF9tbSJdLAogICAgdmVyYm9zZT1UcnVlLAogICAgZXh0cmFfY3VkYV9jZmxhZ3M9WwogICAgICAgICItT2Zhc3QiLAogICAgICAgICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLAogICAgICAgICItc3RkPWMrKzIwIiwKICAgICAgICAiLWZmcC1jb250cmFjdD1mYXN0IiwKICAgICAgICAiLWxoaXBfaGNjIiwKICAgIF0sCikKCmRlZiBjdXN0b21fa2VybmVsKGRhdGE6IGlucHV0X3QpIC0+IG91dHB1dF90OgogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGEKICAgIHJldHVybiBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpCg==No newline at end of file+ IyFQT1BDT1JOIGxlYWRlcmJvYXJkIGFtZC1mcDgtbW0KIyFQT1BDT1JOIGdwdXMgTUkzMDAKCmltcG9ydCBvcwppbXBvcnQgc3lzCmZyb20gdGFzayBpbXBvcnQgaW5wdXRfdCwgb3V0cHV0X3QKZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQoKb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyIKCmN1ZGFfc3JjID0gciIiIgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPgojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4KCl9faG9zdF9fIF9fZGV2aWNlX18gX19mb3JjZWlubGluZV9fIHVpbnQxNl90IGNkaXYodWludDE2X3QgYSwgdWludDE2X3QgYikgewogIHJldHVybiAoYSArIGIgLSAxKSAvIGI7Cn0KCiNkZWZpbmUgQkxPQ0tfRElNIDEyOAoKdGVtcGxhdGUgPGNvbnN0IHVpbnQzMl90IEJOLCBjb25zdCB1aW50MzJfdCBCSywgY29uc3QgdWludDMyX3QgQk0sCiAgICAgICAgICBjb25zdCB1aW50MzJfdCBXSVRFUk4sIGNvbnN0IHVpbnQzMl90IFdJVEVSTT4KX19nbG9iYWxfXyB2b2lkCmZwOF9tbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiAqQiwKICAgICAgICAgICAgICBjb25zdCBmbG9hdCAqQV9zY2FsZSwgY29uc3QgZmxvYXQgKkJfc2NhbGUsIF9faGlwX2JmbG9hdDE2ICpDLAogICAgICAgICAgICAgIHVpbnQzMl90IE4sIHVpbnQzMl90IEssIHVpbnQzMl90IE0pIHsKICB1c2luZyBmbG9hdHgxNiA9IF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNiAqIHNpemVvZihmbG9hdCkpKSkgZmxvYXQ7CgogIHN0YXRpYyBjb25zdGV4cHIgdWludDE2X3QgVkVDVE9SX1NJWkUgPSA0OwogIHN0YXRpYyBjb25zdGV4cHIgdWludDE2X3QgV0FSUFNJWkUgPSA2NDsKICBzdGF0aWMgY29uc3RleHByIHVpbnQxNl90IFdOID0gMzIgKiBXSVRFUk47CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBXTSA9IDMyICogV0lURVJNOwogIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgbnVtVGhyZWFkcyA9IChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSk7CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBTVUJCTiA9IEJOIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBTVUJCTSA9IEJNIC8gVkVDVE9SX1NJWkU7CiAgc3RhdGljIGNvbnN0ZXhwciB1aW50MTZfdCBzdHJpZGVBID0gbnVtVGhyZWFkcyAvIFNVQkJOOwogIHN0YXRpYyBjb25zdGV4cHIgdWludDE2X3Qgc3RyaWRlQiA9IG51bVRocmVhZHMgLyBTVUJCTTsKCiAgdWludDMyX3Qgcm93T2Zmc2V0QyA9IGJsb2NrSWR4LnkgKiBCTjsKICB1aW50MzJfdCBjb2xPZmZzZXRDID0gYmxvY2tJZHgueCAqIEJNOwogIHVpbnQzMl90IGNvbE9mZnNldEEgPSByb3dPZmZzZXRDOwogIHVpbnQzMl90IGNvbE9mZnNldEIgPSBjb2xPZmZzZXRDOwogIHVpbnQxNl90IE1fc2NhbGUgPSBjZGl2KE0sIEJMT0NLX0RJTSk7CgogIHN0YXRpY19hc3NlcnQobnVtVGhyZWFkcyAlIEJOID09IDAsICJCTiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBudW1UaHJlYWRzIik7CiAgc3RhdGljX2Fzc2VydChudW1UaHJlYWRzICUgQk0gPT0gMCwgIkJNIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIG51bVRocmVhZHMiKTsKICBzdGF0aWNfYXNzZXJ0KEJLIDw9IDEyOCAmJiBCTSA8PSAxMjgsICJSYW5nZSBhYm92ZSAxMjggaXMgbm90IHN1cHBvcnRlZCIpOwoKICB1aW50MTZfdCBpbm5lckNvbEEgPSB0aHJlYWRJZHgueCAlIFNVQkJOOwogIHVpbnQxNl90IGlubmVyUm93QSA9IHRocmVhZElkeC54IC8gU1VCQk47CiAgdWludDE2X3QgaW5uZXJDb2xCID0gdGhyZWFkSWR4LnggJSBTVUJCTTsKICB1aW50MTZfdCBpbm5lclJvd0IgPSB0aHJlYWRJZHgueCAvIFNVQkJNOwoKICB1aW50MTZfdCBsYW5lSWR4ID0gdGhyZWFkSWR4LnggJSBXQVJQU0laRTsKICB1aW50MTZfdCB3YXJwSWR4ID0gdGhyZWFkSWR4LnggLyBXQVJQU0laRTsKICB1aW50MTZfdCB3YXJwQ29sT2Zmc2V0ID0gKHdhcnBJZHggJSAoQk0gLyBXTSkpICogV007CiAgdWludDE2X3Qgd2FycFJvd09mZnNldCA9ICh3YXJwSWR4IC8gKEJNIC8gV00pKSAqIFdOOwogIHVpbnQxNl90IHdhcnBYID0gbGFuZUlkeCAlIDMyOwogIHVpbnQxNl90IHdhcnBZID0gbGFuZUlkeCAvIDMyOwoKICBfX3NoYXJlZF9fIF9faGlwX2ZwOF9lNG0zX2ZudXogQXNbQktdW0JOXSwgQnNbQktdW0JNXTsKICBfX3NoYXJlZF9fIGZsb2F0IFdzW0JOICsgMV07CgogIF9faGlwX2ZwOF9lNG0zX2ZudXogYVtXSVRFUk5dWzhdLCBiW1dJVEVSTV1bOF07CiAgZmxvYXR4MTYgZFtXSVRFUk5dW1dJVEVSTV0gPSB7MH07CgogIGZvciAodWludDE2X3QgdGlsZU9mZnNldCA9IDA7IHRpbGVPZmZzZXQgPCBLOyB0aWxlT2Zmc2V0ICs9IEJLKSB7CiAgICAvLyBsb2FkIGZyb20gZ2xvYmFsIHRvIHNoYXJlZCBtZW1vcnkgaW4gY29hbGVzY2VkIG1hbm5lcgogICAgZm9yICh1aW50MTZfdCBpbm5lclJvd09mZnNldEEgPSAwOyBpbm5lclJvd09mZnNldEEgPCBCSzsKICAgICAgICAgaW5uZXJSb3dPZmZzZXRBICs9IHN0cmlkZUEpIHsKICAgICAgaWYgKCh0aWxlT2Zmc2V0ICsgaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBKSA8IEsgJiYKICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpIDwgTiAmJgogICAgICAgICAgKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0KICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQgKj4oCiAgICAgICAgICAgICAgICAmQVsodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgKiBOICsKICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgaW5uZXJDb2xBICogVkVDVE9SX1NJWkUpXSk7CiAgICAgIH0gZWxzZSBpZiAoKGlubmVyUm93T2Zmc2V0QSArIGlubmVyUm93QSkgPCBCSykgewogICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0ICo+KAogICAgICAgICAgICAmQXNbaW5uZXJSb3dPZmZzZXRBICsgaW5uZXJSb3dBXVtpbm5lckNvbEEgKiBWRUNUT1JfU0laRV0pID0gMC4wZjsKICAgICAgfQogICAgfQogICAgaWYgKHRocmVhZElkeC54IDwgU1VCQk4pIHsKICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQ0ICo+KCZXc1t0aHJlYWRJZHgueCAqIFZFQ1RPUl9TSVpFXSkgPQogICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQ0ICo+KAogICAgICAgICAgICAgICZBX3NjYWxlWyh0aWxlT2Zmc2V0IC8gQkxPQ0tfRElNKSAqIE4gKwogICAgICAgICAgICAgICAgICAgICAgIChjb2xPZmZzZXRBICsgdGhyZWFkSWR4LnggKiBWRUNUT1JfU0laRSldKTsKICAgIH0KICAgIGZvciAodWludDE2X3QgaW5uZXJSb3dPZmZzZXRCID0gMDsgaW5uZXJSb3dPZmZzZXRCIDwgQks7CiAgICAgICAgIGlubmVyUm93T2Zmc2V0QiArPSBzdHJpZGVCKSB7CiAgICAgIGlmICgodGlsZU9mZnNldCArIGlubmVyUm93T2Zmc2V0QiArIGlubmVyUm93QikgPCBLICYmCiAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKSA8IE0gJiYKICAgICAgICAgIChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQkspIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9CiAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0ICo+KAogICAgICAgICAgICAgICAgJkJbKHRpbGVPZmZzZXQgKyBpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpICogTSArCiAgICAgICAgICAgICAgICAgICAoY29sT2Zmc2V0QiArIGlubmVyQ29sQiAqIFZFQ1RPUl9TSVpFKV0pOwogICAgICB9IGVsc2UgaWYgKChpbm5lclJvd09mZnNldEIgKyBpbm5lclJvd0IpIDwgQksgJiYKICAgICAgICAgICAgICAgICAoaW5uZXJDb2xCICogVkVDVE9SX1NJWkUpIDwgQk0pIHsKICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxmbG9hdCAqPigKICAgICAgICAgICAgJkJzW2lubmVyUm93T2Zmc2V0QiArIGlubmVyUm93Ql1baW5uZXJDb2xCICogVkVDVE9SX1NJWkVdKSA9IDAuMGY7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aHJlYWRJZHgueCA9PSBudW1UaHJlYWRzIC0gMSkgeyAvLyBsb2FkIHVzaW5nIGRpZmZlcmVudCB3YXJwCiAgICAgIFdzW0JOXSA9IEJfc2NhbGVbKHRpbGVPZmZzZXQgLyBCTE9DS19ESU0pICogTV9zY2FsZSArCiAgICAgICAgICAgICAgICAgICAgICAgKGNvbE9mZnNldEIgLyBCTE9DS19ESU0pXTsKICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CgogICAgZmxvYXQgYl9zY2FsZSA9IFdzW0JOXTsKICAgIGZsb2F0eDE2IGNbV0lURVJOXVtXSVRFUk1dID0gezB9OwogICAgZm9yICh1aW50MTZfdCBCS09mZnNldCA9IDA7IEJLT2Zmc2V0IDwgQks7IEJLT2Zmc2V0ICs9IDE2KSB7CiAgICAgIGZvciAodWludDE2X3Qgd24gPSAwOyB3biA8IFdJVEVSTjsgKyt3bikgewogICAgICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCA4OyArK2kpIHsKICAgICAgICAgIGFbd25dW2ldID0KICAgICAgICAgICAgICBBc1tCS09mZnNldCArIHdhcnBZICogOCArIGldW3dhcnBSb3dPZmZzZXQgKyB3biAqIDMyICsgd2FycFhdOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHVpbnQxNl90IHdtID0gMDsgd20gPCBXSVRFUk07ICsrd20pIHsKICAgICAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgODsgKytpKSB7CiAgICAgICAgICBiW3dtXVtpXSA9CiAgICAgICAgICAgICAgQnNbQktPZmZzZXQgKyB3YXJwWSAqIDggKyBpXVt3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh1aW50MTZfdCB3biA9IDA7IHduIDwgV0lURVJOOyArK3duKSB7CiAgICAgICAgZm9yICh1aW50MTZfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgICBjW3duXVt3bV0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzMyeDMyeDE2X2ZwOF9mcDgoCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihhW3duXSksCiAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyAqPihiW3dtXSksIGNbd25dW3dtXSwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmb3IgKHVpbnQxNl90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgICAgZm9yICh1aW50MTZfdCB3bSA9IDA7IHdtIDwgV0lURVJNOyArK3dtKSB7CiAgICAgICAgZm9yICh1aW50MTZfdCBqID0gMDsgaiA8IDQ7ICsraikgewogICAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgICBkW3duXVt3bV1baSArIGogKiA0XSArPQogICAgICAgICAgICAgICAgY1t3bl1bd21dW2kgKyBqICogNF0gKgogICAgICAgICAgICAgICAgV3Nbd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGldICogYl9zY2FsZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBfX3N5bmN0aHJlYWRzKCk7CiAgfQoKICBmb3IgKHVpbnQxNl90IHduID0gMDsgd24gPCBXSVRFUk47ICsrd24pIHsKICAgIGZvciAodWludDE2X3Qgd20gPSAwOyB3bSA8IFdJVEVSTTsgKyt3bSkgewogICAgICBmb3IgKHVpbnQxNl90IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICAgICAgaWYgKChyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpIDwKICAgICAgICAgICAgICAgICAgTiAmJgogICAgICAgICAgICAgIChjb2xPZmZzZXRDICsgd2FycENvbE9mZnNldCArIHdtICogMzIgKyB3YXJwWCkgPCBNKQogICAgICAgICAgICBDWyhyb3dPZmZzZXRDICsgd2FycFJvd09mZnNldCArIHduICogMzIgKyBqICogOCArIHdhcnBZICogNCArIGkpICoKICAgICAgICAgICAgICAgICAgTSArCiAgICAgICAgICAgICAgKGNvbE9mZnNldEMgKyB3YXJwQ29sT2Zmc2V0ICsgd20gKiAzMiArIHdhcnBYKV0gPQogICAgICAgICAgICAgICAgKF9faGlwX2JmbG9hdDE2KWRbd25dW3dtXVtpICsgaiAqIDRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKYXQ6OlRlbnNvciBmcDhfbW0oYXQ6OlRlbnNvciBBLCBhdDo6VGVuc29yIEIsIGF0OjpUZW5zb3IgQV9zY2FsZSwKICAgICAgICAgICAgICAgICAgYXQ6OlRlbnNvciBCX3NjYWxlLCBhdDo6VGVuc29yIEMpIHsKICB1aW50MzJfdCBOID0gQS5zaXplKDApLCBLID0gQS5zaXplKDEpLCBNID0gQi5zaXplKDApOwoKICBjb25zdCB1aW50MzJfdCBCSyA9IDEyODsKICBjb25zdCB1aW50MzJfdCBCTiA9IDEyODsKICBjb25zdCB1aW50MzJfdCBCTSA9IDEyODsKICBjb25zdCB1aW50MzJfdCBXSVRFUk4gPSAxOwogIGNvbnN0IHVpbnQzMl90IFdJVEVSTSA9IDE7CiAgZGltMyBudW1UaHJlYWRzKChCTiAqIEJNKSAvICgxNiAqIFdJVEVSTiAqIFdJVEVSTSkpOwogIGRpbTMgbnVtQmxvY2tzKGNkaXYoTSwgQk0pLCBjZGl2KE4sIEJOKSk7CiAgZnA4X21tX2tlcm5lbDxCTiwgQkssIEJNLCBXSVRFUk4sIFdJVEVSTT48PDxudW1CbG9ja3MsIG51bVRocmVhZHM+Pj4oCiAgICAgIChfX2hpcF9mcDhfZTRtM19mbnV6ICopQS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiAqKUIuZGF0YV9wdHIoKSwKICAgICAgQV9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwgQl9zY2FsZS5kYXRhX3B0cjxmbG9hdD4oKSwKICAgICAgKF9faGlwX2JmbG9hdDE2ICopQy5kYXRhX3B0cigpLCBOLCBLLCBNKTsKICByZXR1cm4gQzsKfQoiIiIKCmNwcF9zcmMgPSByIiIiCmF0OjpUZW5zb3IgZnA4X21tKGF0OjpUZW5zb3IgQSwgYXQ6OlRlbnNvciBCLCBhdDo6VGVuc29yIEFfc2NhbGUsCiAgICAgICAgICAgICAgICAgIGF0OjpUZW5zb3IgQl9zY2FsZSwgYXQ6OlRlbnNvciBDKTsKIiIiCgppZiBzeXMuc3Rkb3V0IGlzIE5vbmU6CiAgICBzeXMuc3Rkb3V0ID0gb3BlbigiL2Rldi9zdGRvdXQiLCAidyIpCmlmIHN5cy5zdGRlcnIgaXMgTm9uZToKICAgIHN5cy5zdGRlcnIgPSBvcGVuKCIvZGV2L3N0ZGVyciIsICJ3IikKCm1vZHVsZSA9IGxvYWRfaW5saW5lKAogICAgbmFtZT0iZnA4X21tIiwKICAgIGNwcF9zb3VyY2VzPVtjcHBfc3JjXSwKICAgIGN1ZGFfc291cmNlcz1bY3VkYV9zcmNdLAogICAgZnVuY3Rpb25zPVsiZnA4X21tIl0sCiAgICB2ZXJib3NlPVRydWUsCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi1PMyIsICItLW9mZmxvYWQtYXJjaD1nZng5NDIiLCAiLXN0ZD1jKysyMCJdLAopCgoKZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6CiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQogICAgcmV0dXJuIG1vZHVsZS5mcDhfbW0oYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYykKNo newline at end of file
Best evidence level for this revision: reported
JSON