Skip to content
KernelIndex
Search⌘K

submission 20839

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

amd-fp8-mm-hip-128x128-32x64-pretrans_128x128-swz.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-fp8-mm-20839?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, 512]
AMD Instinct MI300X
53.6µs
#63 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 256]
AMD Instinct MI300X
55.6µs
#69 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 1536]
AMD Instinct MI300X
67.9µs
#48 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=576 · seed=12346
AMD Instinct MI300X
81.6µs
#28 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 256]
AMD Instinct MI300X
96.1µs
#26 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 512]
AMD Instinct MI300X
96.3µs
#25 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2048]
AMD Instinct MI300X
111.3µs
#24 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 2304]
AMD Instinct MI300X
117.7µs
#26 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 1536]
AMD Instinct MI300X
140.3µs
#22 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=512 · seed=6563
AMD Instinct MI300X
153.5µs
#62 of 98
2025-05-12
Show all 18 measurements ›
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=512 · seed=12341
AMD Instinct MI300X
162.3µs
#23 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=1536 · seed=8135
AMD Instinct MI300X
172.6µs
#55 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [1024, 7168] · n=4608 · seed=7531
AMD Instinct MI300X
203.2µs
#30 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=1536 · seed=6543
AMD Instinct MI300X
253.2µs
#17 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2048]
AMD Instinct MI300X
333.8µs
#16 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 2304]
AMD Instinct MI300X
364.5µs
#14 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=576 · seed=9863
AMD Instinct MI300X
511.4µs
#78 of 98
2025-05-12
AMD FP8 blockwise GEMMfp32/fp8_e4m3fnuz · [6144, 7168] · n=4608 · seed=65436
AMD Instinct MI300X
631.9µs
#9 of 98
2025-05-12

Reported · How evidence levels are derived →

Source and license

sourceavailable
revision digestsha256:5d295554e40dad57b9eb034b7e45816484d16a78c09c2a8476a9cddd27821359
license declaredunknown
license concludedunknown
imported2026-08-15

Kernel source

amd-fp8-mm-hip-128x128-32x64-pretrans_128x128-swz.py1 lines
IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+DQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsNCg0KLy8gc3dpenpsZSBmdW5jdGlvbiBmb3IgOC1mcDggLyAxMjgtZnA4DQojZGVmaW5lIFNXWihtLCBuKSAoKChtKSAqIDggKyAobikpICUgMTI4KQ0KDQpfX2dsb2JhbF9fIHZvaWQgZnA4X21tXzMyeDMyKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIGEsIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIGIsIGNvbnN0IGZsb2F0KiBhcywgY29uc3QgZmxvYXQqIGJzLA0KICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2KiBjLCBpbnQgbSwgaW50IG4sIGludCBrKSB7DQoNCiAgICAvLyBZb3VyIGltcGxlbWVudGF0aW9uIGhlcmUNCiAgICAvLyBpbnQgY3ggPSB0aHJlYWRJZHgueCArIGJsb2NrRGltLnggKiBibG9ja0lkeC54Ow0KICAgIC8vIGludCBjeSA9IHRocmVhZElkeC55ICsgYmxvY2tEaW0ueSAqIGJsb2NrSWR4Lnk7DQogICAgLy8gaWYoY3ggPj0gbSB8fCBjeSA+PSBuKSByZXR1cm47DQoNCiAgICB1c2luZyBmbG9hdDQgPSBmbG9hdCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsNCg0KICAgIF9fc2hhcmVkX18gbG9uZyBsZHNfYVszMl1bMTddOw0KICAgIF9fc2hhcmVkX18gbG9uZyBsZHNfYlszMl1bMTddOw0KICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogKmxkc19hX2ZwOCA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihsZHNfYSk7DQogICAgX19oaXBfZnA4X2U0bTNfZm51eiAqbGRzX2JfZnA4ID0gcmVpbnRlcnByZXRfY2FzdDxfX2hpcF9mcDhfZTRtM19mbnV6ICo+KGxkc19iKTsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAzMjsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMzI7DQoNCiAgICBpbnQgd2F2ZV9tID0gKHRocmVhZElkeC55IC8gMikgKiAxNjsNCiAgICBpbnQgd2F2ZV9uID0gKHRocmVhZElkeC55ICUgMikgKiAxNjsNCg0KICAgIGludCB0aHJlYWRfY19tID0gKHRocmVhZElkeC54IC8gMTYpICogNDsNCiAgICBpbnQgdGhyZWFkX2NfbiA9ICB0aHJlYWRJZHgueCAlIDE2OyAvLyBieSBmbG9hdA0KDQogICAgLy8gaW50IGNwX3NoYXJlZF9tbiA9IHRocmVhZElkeC55ICogOCArIHRocmVhZElkeC54IC8gODsNCiAgICAvLyBpbnQgY3Bfc2hhcmVkX2sgID0gKHRocmVhZElkeC54ICUgOCkgKiAyOyAvLyBieSBsb25nDQoNCiAgICAvLyBpbnQgY3BfZ2xvYmFsX20gPSB0aHJlYWRfYmxvY2tfbSArIGNwX3NoYXJlZF9tbjsNCiAgICAvLyBpbnQgY3BfZ2xvYmFsX24gPSB0aHJlYWRfYmxvY2tfbiArIGNwX3NoYXJlZF9tbjsNCiAgICAvLyBpbnQgY3BfZ2xvYmFsX2sgPSBjcF9zaGFyZWRfazsNCg0KICAgIGludCBjcF9yb3cgPSB0aHJlYWRJZHgueSAqIDMyICsgdGhyZWFkSWR4LnggLyAyOyAvLyBieSBmcDgNCiAgICBpbnQgY3BfY29sID0gKHRocmVhZElkeC54ICUgMikgKiAxNjsgICAgICAgICAgICAvLyBieSBmcDgNCiAgICBpbnQgY3BfZ2xvYmFsX2sgPSBjcF9yb3c7DQogICAgaW50IGNwX2dsb2JhbF9tID0gY3BfY29sICsgdGhyZWFkX2Jsb2NrX207ICAgICAgLy8gYnkgZnA4DQogICAgaW50IGNwX2dsb2JhbF9uID0gY3BfY29sICsgdGhyZWFkX2Jsb2NrX247ICAgICAgLy8gYnkgZnA4DQoNCiAgICBpbnQgbGRzX3NoYXJlZF9tID0gd2F2ZV9tICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX3NoYXJlZF9uID0gd2F2ZV9uICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX3NoYXJlZF9rID0gdGhyZWFkSWR4LnggLyAxNjsgLy8gYnkgbG9uZw0KDQogICAgaW50IGNfbSA9IHRocmVhZF9ibG9ja19tICsgd2F2ZV9tICsgdGhyZWFkX2NfbTsNCiAgICBpbnQgY19uID0gdGhyZWFkX2Jsb2NrX24gKyB3YXZlX24gKyB0aHJlYWRfY19uOw0KDQogICAgZmxvYXQ0ICphX3B0ciA9IChmbG9hdDQgKilhOw0KICAgIGZsb2F0NCAqYl9wdHIgPSAoZmxvYXQ0ICopYjsNCg0KICAgIGZsb2F0NCB0aWxlX2QgPSB7MH07DQoNCiAgICBpbnQgYXNfbSA9ICB0aHJlYWRfYmxvY2tfbSArIHdhdmVfbSArIHRocmVhZF9jX207DQogICAgaW50IGJzX24gPSAodGhyZWFkX2Jsb2NrX24gKyB3YXZlX24gKyB0aHJlYWRfY19uKSAvIEJMT0NLOw0KICAgIC8vIGZsb2F0ICphc19wdHIgPSAoZmxvYXQqKSZhc1thc19tICogay9CTE9DS107DQogICAgLy8gZmxvYXQgKmJzX3B0ciA9IChmbG9hdCopJmJzW2JzX24gKiBrL0JMT0NLXTsNCiAgICBmbG9hdCAqYXNfcHRyID0gKGZsb2F0KikmYXNbYXNfbV07DQogICAgZmxvYXQgKmJzX3B0ciA9IChmbG9hdCopJmJzW2JzX25dOw0KDQogICAgZm9yIChpbnQgaWIgPSAwOyBpYiA8IGs7IGliICs9IEJMT0NLKSB7DQogICAgICAgIC8vIGZsb2F0NCBsZGdfYSA9IGFfcHRyW2NwX2dsb2JhbF9tICogay8xNiArIGNwX2dsb2JhbF9rLzIgKyBpYi8xNl07DQogICAgICAgIC8vIGZsb2F0NCBsZGdfYiA9IGJfcHRyW2NwX2dsb2JhbF9uICogay8xNiArIGNwX2dsb2JhbF9rLzIgKyBpYi8xNl07DQogICAgICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogbGRnX2FbMTZdLCBsZGdfYlsxNl07DQogICAgICAgICooZmxvYXQ0ICopbGRnX2EgPSBhX3B0clsoY3BfZ2xvYmFsX2sgKyBpYikgKiBtLzE2ICsgY3BfZ2xvYmFsX20vMTZdOw0KICAgICAgICAqKGZsb2F0NCAqKWxkZ19iID0gYl9wdHJbKGNwX2dsb2JhbF9rICsgaWIpICogbi8xNiArIGNwX2dsb2JhbF9uLzE2XTsNCiAgICAgICAgZmxvYXQ0IHRoaXNfYXMgPSAqKGZsb2F0NCAqKSgmYXNfcHRyWzBdKTsNCiAgICAgICAgZmxvYXQgIHRoaXNfYnMgPSBic19wdHJbMF07DQogICAgICAgIC8vICooZmxvYXQ0ICopKCZsZHNfYVtjcF9zaGFyZWRfbW5dW2NwX3NoYXJlZF9rXSkgPSBsZGdfYTsNCiAgICAgICAgLy8gKihmbG9hdDQgKikoJmxkc19iW2NwX3NoYXJlZF9tbl1bY3Bfc2hhcmVkX2tdKSA9IGxkZ19iOw0KICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgMTY7IGlpKyspIHsNCiAgICAgICAgICAgIGxkc19hX2ZwOFsoY3BfY29sICsgaWkpICogMTM2ICsgY3Bfcm93XSA9IGxkZ19hW2lpXTsNCiAgICAgICAgICAgIGxkc19iX2ZwOFsoY3BfY29sICsgaWkpICogMTM2ICsgY3Bfcm93XSA9IGxkZ19iW2lpXTsNCiAgICAgICAgfQ0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7DQogICAgICAgIGZsb2F0NCBibG9ja190aWxlX2QgPSB7MH07DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArICAwXSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAgMF0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArICA0XSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAgNF0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArICA4XSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAgOF0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArIDEyXSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAxMl0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIF9fc3luY3RocmVhZHMoKTsNCiAgICAgICAgdGlsZV9kWzBdICs9IGJsb2NrX3RpbGVfZFswXSAqIHRoaXNfYXNbMF0gKiB0aGlzX2JzOw0KICAgICAgICB0aWxlX2RbMV0gKz0gYmxvY2tfdGlsZV9kWzFdICogdGhpc19hc1sxXSAqIHRoaXNfYnM7DQogICAgICAgIHRpbGVfZFsyXSArPSBibG9ja190aWxlX2RbMl0gKiB0aGlzX2FzWzJdICogdGhpc19iczsNCiAgICAgICAgdGlsZV9kWzNdICs9IGJsb2NrX3RpbGVfZFszXSAqIHRoaXNfYXNbM10gKiB0aGlzX2JzOw0KICAgICAgICBhc19wdHIgKz0gbTsNCiAgICAgICAgYnNfcHRyICs9IChuK0JMT0NLLTEpL0JMT0NLOw0KICAgIH0NCg0KICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSByZXN1bHQgYXMgYmYxNg0KICAgIGNbKGNfbSArIDApICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFswXSk7DQogICAgY1soY19tICsgMSkgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzFdKTsNCiAgICBjWyhjX20gKyAyKSAqIG4gKyBjX25dID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMl0pOw0KICAgIGNbKGNfbSArIDMpICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFszXSk7DQp9DQoNCl9fZ2xvYmFsX18gdm9pZCBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjgoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogX19yZXN0cmljdF9fIGEsIGludCBtLCBpbnQgbikgew0KICAgIC8vIHRyYW5zcG9zZSBpbiBldmVyeSAxMjh4MTI4IGJsb2NrDQoNCiAgICB1c2luZyBmbG9hdDQgPSBmbG9hdCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAxMjg7DQogICAgaW50IHRocmVhZF9ibG9ja19uID0gYmxvY2tJZHgueSAqIDEyODsNCg0KICAgIGludCB0aHJlYWRfbSA9ICh0aHJlYWRJZHgueCAvIDgpICogMTY7DQogICAgaW50IHRocmVhZF9uID0gKHRocmVhZElkeC54ICUgOCkgKiAxNjsNCg0KICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogZGF0YVsxNl1bMTZdOw0KICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogZGF0YV90WzE2XVsxNl07DQoNCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsNCiAgICAgICAgKihmbG9hdDQgKikmZGF0YVtpXVswXSA9ICooZmxvYXQ0ICopJmFbKHRocmVhZF9ibG9ja19tICsgdGhyZWFkX20gKyBpKSAqIG4gKyB0aHJlYWRfYmxvY2tfbiArIHRocmVhZF9uXTsNCiAgICB9DQoNCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsNCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxNjsgaisrKSB7DQogICAgICAgICAgICBkYXRhX3Rbal1baV0gPSBkYXRhW2ldW2pdOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7DQogICAgICAgICooZmxvYXQ0ICopJmFbKHRocmVhZF9ibG9ja19tICsgdGhyZWFkX24gKyBpKSAqIG4gKyB0aHJlYWRfYmxvY2tfbiArIHRocmVhZF9tXSA9ICooZmxvYXQ0ICopJmRhdGFfdFtpXVswXTsNCiAgICB9DQp9DQoNCl9fbGF1bmNoX2JvdW5kc19fKDUxMiwgMikNCl9fZ2xvYmFsX18gdm9pZCBmcDhfbW1fMTI4eDEyOChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBfX3Jlc3RyaWN0X18gYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIF9fcmVzdHJpY3RfXyBiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIF9fcmVzdHJpY3RfXyBhcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBfX3Jlc3RyaWN0X18gYnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiogX19yZXN0cmljdF9fIGMsIGludCBtLCBpbnQgbiwgaW50IGspIHsNCg0KICAgIHVzaW5nIGZsb2F0NCA9IGZsb2F0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOw0KDQogICAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IGxkc19hWzEyOF1bMTI4XTsNCiAgICBfX3NoYXJlZF9fIF9faGlwX2ZwOF9lNG0zX2ZudXogbGRzX2JbMTI4XVsxMjhdOw0KDQogICAgaW50IHRocmVhZF9ibG9ja19tID0gYmxvY2tJZHgueCAqIDEyODsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMTI4Ow0KDQogICAgaW50IHdhdmVfbSA9ICh0aHJlYWRJZHgueSAvIDIpICogMzI7DQogICAgaW50IHdhdmVfbiA9ICh0aHJlYWRJZHgueSAlIDIpICogNjQ7DQoNCiAgICBpbnQgdGhyZWFkX2NfbSA9ICh0aHJlYWRJZHgueCAvIDE2KSAqIDQ7DQogICAgaW50IHRocmVhZF9jX24gPSAgdGhyZWFkSWR4LnggJSAxNjsNCg0KICAgIC8vIExER1NUUyBBJkIgUGFyYW1ldGVycw0KICAgIGludCBzdHNfbW4gPSB0aHJlYWRJZHgueSAqIDggKyB0aHJlYWRJZHgueCAvIDg7DQogICAgaW50IHN0c19rICA9ICh0aHJlYWRJZHgueCAlIDgpICogMTY7DQogICAgaW50IGxkZ19tID0gdGhyZWFkX2Jsb2NrX20gKyBzdHNfazsNCiAgICBpbnQgbGRnX24gPSB0aHJlYWRfYmxvY2tfbiArIHN0c19rOw0KICAgIGludCBsZGdfayA9IHN0c19tbjsNCg0KICAgIC8vIExEUyBBJkIgUGFyYW1ldGVycw0KICAgIGludCBsZHNfbSA9IHdhdmVfbSArIHRocmVhZElkeC54ICUgMTY7DQogICAgaW50IGxkc19uID0gd2F2ZV9uICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX2sgPSAodGhyZWFkSWR4LnggLyAxNikgKiA4Ow0KDQogICAgLy8gQyZEIFBhcmFtZXRlcnMNCiAgICBpbnQgY19tID0gdGhyZWFkX2Jsb2NrX20gKyB3YXZlX20gKyB0aHJlYWRfY19tOw0KICAgIGludCBjX24gPSB0aHJlYWRfYmxvY2tfbiArIHdhdmVfbiArIHRocmVhZF9jX247DQoNCiAgICBpbnQgYXNfbSA9IGNfbTsNCiAgICBpbnQgYnNfbiA9IGNfbiAvIEJMT0NLOw0KDQogICAgZmxvYXQ0IHRpbGVfZFsyXVs0XSA9IHswfTsNCg0KICAgIGZvciAoaW50IGliID0gMDsgaWIgPCBrL0JMT0NLOyBpYisrKSB7DQogICAgICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogbGRnX2FbMl1bMTZdLCBsZGdfYlsyXVsxNl07DQogICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgICAgICAqKGZsb2F0NCAqKWxkZ19hW2lpXSA9ICooZmxvYXQ0ICopJmFbKGxkZ19rICsgaWIqQkxPQ0sgKyBpaSo2NCkgKiBtICsgbGRnX21dOw0KICAgICAgICAgICAgKihmbG9hdDQgKilsZGdfYltpaV0gPSAqKGZsb2F0NCAqKSZiWyhsZGdfayArIGliKkJMT0NLICsgaWkqNjQpICogbiArIGxkZ19uXTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZsb2F0IHRoaXNfYXNbMl1bNF07DQogICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgICAgICAqKGZsb2F0NCAqKXRoaXNfYXNbaWldID0gKihmbG9hdDQgKikmYXNbaWIqbSArIGFzX20gKyBpaSoxNl07DQogICAgICAgIH0NCiAgICAgICAgZmxvYXQgdGhpc19icyA9IGJzW2liICogKChuK0JMT0NLLTEpL0JMT0NLKSArIGJzX25dOw0KDQogICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgICAgICAqKGxvbmcgKikmbGRzX2Fbc3RzX21uICsgaWkqNjRdW1NXWihzdHNfbW4sIHN0c19rICAgICldID0gKihsb25nICopJmxkZ19hW2lpXVswXTsNCiAgICAgICAgICAgICoobG9uZyAqKSZsZHNfYVtzdHNfbW4gKyBpaSo2NF1bU1daKHN0c19tbiwgc3RzX2sgKyA4KV0gPSAqKGxvbmcgKikmbGRnX2FbaWldWzhdOw0KICAgICAgICAgICAgKihsb25nICopJmxkc19iW3N0c19tbiArIGlpKjY0XVtTV1ooc3RzX21uLCBzdHNfayAgICApXSA9ICoobG9uZyAqKSZsZGdfYltpaV1bMF07DQogICAgICAgICAgICAqKGxvbmcgKikmbGRzX2Jbc3RzX21uICsgaWkqNjRdW1NXWihzdHNfbW4sIHN0c19rICsgOCldID0gKihsb25nICopJmxkZ19iW2lpXVs4XTsNCiAgICAgICAgfQ0KDQogICAgICAgIF9fc3luY3RocmVhZHMoKTsNCg0KICAgICAgICBmbG9hdDQgYmxvY2tfdGlsZV9kWzJdWzRdID0gezB9Ow0KICAgICAgICBsb25nIHRpbGVfYVsyXVs0XSwgdGlsZV9iWzRdWzRdOw0KICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgMjsgaWkrKykgew0KICAgICAgICAgICAgZm9yIChpbnQga2sgPSAwOyBrayA8IDQ7IGtrKyspIHsNCiAgICAgICAgICAgICAgICB0aWxlX2FbaWldW2trXSA9ICoobG9uZyAqKSZsZHNfYVtsZHNfbSArIGlpKjE2XVtTV1oobGRzX20sIGxkc19rICsga2sqMzIpXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmb3IgKGludCBqaiA9IDA7IGpqIDwgNDsgamorKykgew0KICAgICAgICAgICAgZm9yIChpbnQga2sgPSAwOyBrayA8IDQ7IGtrKyspIHsNCiAgICAgICAgICAgICAgICB0aWxlX2JbampdW2trXSA9ICoobG9uZyAqKSZsZHNfYltsZHNfbiArIGpqKjE2XVtTV1oobGRzX24sIGxkc19rICsga2sqMzIpXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgMjsgaWkrKykgew0KICAgICAgICAgICAgZm9yIChpbnQgamogPSAwOyBqaiA8IDQ7IGpqKyspIHsNCiAgICAgICAgICAgICAgICBmb3IgKGludCBrayA9IDA7IGtrIDwgNDsga2srKykgew0KICAgICAgICAgICAgICAgICAgICBibG9ja190aWxlX2RbaWldW2pqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOCh0aWxlX2FbaWldW2trXSwgdGlsZV9iW2pqXVtra10sIGJsb2NrX3RpbGVfZFtpaV1bampdLCAwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZm9yIChpbnQga2sgPSAwOyBrayA8IDQ7IGtrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgdGlsZV9kW2lpXVtqal1ba2tdICs9IGJsb2NrX3RpbGVfZFtpaV1bampdW2trXSAqIHRoaXNfYXNbaWldW2trXSAqIHRoaXNfYnM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgX19zeW5jdGhyZWFkcygpOw0KICAgIH0NCg0KICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSByZXN1bHQgYXMgYmYxNg0KICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgIGZvciAoaW50IGpqID0gMDsgamogPCA0OyBqaisrKSB7DQogICAgICAgICAgICBmb3IgKGludCBrayA9IDA7IGtrIDwgNDsga2srKykgew0KICAgICAgICAgICAgICAgIGNbKGNfbSArIGlpKjE2ICsga2spICogbiArIGNfbiArIGpqKjE2XSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kW2lpXVtqal1ba2tdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBtID0gYS5zaXplKDApOw0KICAgIGludCBuID0gYi5zaXplKDApOw0KICAgIGludCBrID0gYS5zaXplKDEpOw0KLy8gaGlwRXZlbnRfdCBzdGFydCwgZW5kOw0KLy8gaGlwRXZlbnRDcmVhdGUoJnN0YXJ0KTsNCi8vIGhpcEV2ZW50Q3JlYXRlKCZlbmQpOw0KLy8gaGlwRXZlbnRSZWNvcmQoc3RhcnQpOw0KICAgIGlmIChtICUgMTI4ICE9IDAgfHwgbiAlIDEyOCAhPSAwKSB7DQogICAgICAgIGZwOF9tbV8zMngzMjw8PGRpbTMoKG0rMzEpLzMyLCAobiszMSkvMzIpLCBkaW0zKDY0LCA0KSwgMCwgMD4+PiAoDQogICAgICAgICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiopYS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiopYi5kYXRhX3B0cigpLA0KICAgICAgICAgICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAoX19oaXBfYmZsb2F0MTYqKWMuZGF0YV9wdHIoKSwgbSwgbiwgayk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobSsxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIGssIG0pOw0KICAgICAgICBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobisxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIGssIG4pOw0KICAgICAgICBmcDhfbW1fMTI4eDEyODw8PGRpbTMoKG0rMTI3KS8xMjgsIChuKzEyNykvMTI4KSwgZGltMyg2NCwgOCksIDAsIDA+Pj4gKA0KICAgICAgICAgICAgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwNCiAgICAgICAgICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9faGlwX2JmbG9hdDE2KiljLmRhdGFfcHRyKCksIG0sIG4sIGspOw0KICAgICAgICAvLyBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobSsxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIGssIG0pOw0KICAgICAgICAvLyBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobisxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIGssIG4pOw0KICAgIH0NCi8vIGhpcEV2ZW50UmVjb3JkKGVuZCk7DQovLyBoaXBFdmVudFN5bmNocm9uaXplKGVuZCk7DQovLyBmbG9hdCBtc2VjOw0KLy8gaGlwRXZlbnRFbGFwc2VkVGltZSgmbXNlYywgc3RhcnQsIGVuZCk7DQovLyBmbG9hdCB1c2VjID0gbXNlYyAqIDEwMDA7DQovLyBhcy5kYXRhX3B0cjxmbG9hdD4oKVswXSA9IHVzZWM7DQovLyBoaXBFdmVudERlc3Ryb3koc3RhcnQpOw0KLy8gaGlwRXZlbnREZXN0cm95KGVuZCk7DQogICAgLy9DMTBfQ1VEQV9DSEVDSyhjdWRhR2V0TGFzdEVycm9yKCkpOw0KfQ0KIiIiDQoNCmltcG9ydCBvcw0Kb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyINCg0KbW9kdWxlID0gbG9hZF9pbmxpbmUoDQogICAgbmFtZT0nZnA4X21tJywNCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMyJdLA0KKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgICMgdG1wID0gYV9zY2FsZVswXVswXQ0KICAgICMgaW1wb3J0IG51bXB5IGFzIG5wDQogICAgIyByYW5kaW50ID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgMjApDQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQ0KICAgICMgaWYgcmFuZGludCAlIDIwID09IDA6DQogICAgIyAgICAgcHJpbnQoZiJNIE4gSyA9IHthLnNoYXBlWzBdOjR9IHtiLnNoYXBlWzBdOjR9IHthLnNoYXBlWzFdOjR9LCBUaW1lID0ge2Ffc2NhbGVbMF1bMF06LjJmfSB1cyIpDQogICAgIyBhX3NjYWxlWzBdWzBdID0gdG1wDQogICAgcmV0dXJuIGM=

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 16190.

- IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+DQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsNCg0KX19nbG9iYWxfXyB2b2lkIGN1c3RvbV9rZXJuZWwoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYSwgY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogYiwgY29uc3QgZmxvYXQqIGFzLCBjb25zdCBmbG9hdCogYnMsDQogICAgICAgICAgICAgICAgICAgX19oaXBfYmZsb2F0MTYqIGMsIGludCBtLCBpbnQgbiwgaW50IGspIHsNCg0KICAgIC8vIFlvdXIgaW1wbGVtZW50YXRpb24gaGVyZQ0KICAgIC8vIGludCBjeCA9IHRocmVhZElkeC54ICsgYmxvY2tEaW0ueCAqIGJsb2NrSWR4Lng7DQogICAgLy8gaW50IGN5ID0gdGhyZWFkSWR4LnkgKyBibG9ja0RpbS55ICogYmxvY2tJZHgueTsNCiAgICAvLyBpZihjeCA+PSBtIHx8IGN5ID49IG4pIHJldHVybjsNCg0KICAgIHVzaW5nIGZsb2F0NCA9IGZsb2F0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOw0KDQogICAgX19zaGFyZWRfXyBsb25nIGxkc19hWzY0XVsxN107DQogICAgX19zaGFyZWRfXyBsb25nIGxkc19iWzY0XVsxN107DQoNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX20gPSBibG9ja0lkeC54ICogNjQ7DQogICAgaW50IHRocmVhZF9ibG9ja19uID0gYmxvY2tJZHgueSAqIDY0Ow0KDQogICAgaW50IHdhdmVfbSA9ICh0aHJlYWRJZHgueSAvIDIpICogMTY7DQogICAgaW50IHdhdmVfbiA9ICh0aHJlYWRJZHgueSAlIDIpICogMzI7DQoNCiAgICBpbnQgdGhyZWFkX2NfbSA9ICh0aHJlYWRJZHgueCAvIDE2KSAqIDQ7DQogICAgaW50IHRocmVhZF9jX24gPSAgdGhyZWFkSWR4LnggJSAxNjsgLy8gYnkgZmxvYXQNCg0KICAgIGludCBjcF9zaGFyZWRfbW4gPSB0aHJlYWRJZHgueSAqIDggKyB0aHJlYWRJZHgueCAvIDg7DQogICAgaW50IGNwX3NoYXJlZF9rICA9ICh0aHJlYWRJZHgueCAlIDgpICogMjsgLy8gYnkgbG9uZw0KDQogICAgaW50IGNwX2dsb2JhbF9tID0gdGhyZWFkX2Jsb2NrX20gKyBjcF9zaGFyZWRfbW47DQogICAgaW50IGNwX2dsb2JhbF9uID0gdGhyZWFkX2Jsb2NrX24gKyBjcF9zaGFyZWRfbW47DQogICAgaW50IGNwX2dsb2JhbF9rID0gY3Bfc2hhcmVkX2s7DQoNCiAgICBpbnQgaXNfbGdkX2EgPSBjcF9nbG9iYWxfbSA8IG07DQogICAgaW50IGlzX2xnZF9iID0gY3BfZ2xvYmFsX24gPCBuOw0KDQogICAgaW50IGxkc19tID0gd2F2ZV9tICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX24gPSB3YXZlX24gKyB0aHJlYWRJZHgueCAlIDE2Ow0KICAgIGludCBsZHNfayA9IHRocmVhZElkeC54IC8gMTY7IC8vIGJ5IGxvbmcNCg0KICAgIGludCBjX20gPSB0aHJlYWRfYmxvY2tfbSArIHdhdmVfbSArIHRocmVhZF9jX207DQogICAgaW50IGNfbiA9IHRocmVhZF9ibG9ja19uICsgd2F2ZV9uICsgdGhyZWFkX2NfbjsNCg0KICAgIGZsb2F0NCAqYV9wdHIgPSAmKCgoZmxvYXQ0ICopYSlbY3BfZ2xvYmFsX20gKiBrLzE2ICsgY3BfZ2xvYmFsX2svMl0pOw0KICAgIGZsb2F0NCAqYl9wdHIgPSAmKCgoZmxvYXQ0ICopYilbY3BfZ2xvYmFsX24gKiBrLzE2ICsgY3BfZ2xvYmFsX2svMl0pOw0KDQogICAgZmxvYXQ0IHRpbGVfZFsyXSA9IHswfTsNCg0KICAgIGludCBhc19tID0gIHRocmVhZF9ibG9ja19tICsgd2F2ZV9tICsgdGhyZWFkX2NfbTsNCiAgICBpbnQgYnNfbiA9ICh0aHJlYWRfYmxvY2tfbiArIHdhdmVfbiArIHRocmVhZF9jX24pIC8gQkxPQ0s7DQogICAgZmxvYXQgKmFzX3B0ciA9IChmbG9hdCopJmFzW2FzX21dOw0KICAgIGZsb2F0ICpic19wdHIgPSAoZmxvYXQqKSZic1tic19uXTsNCg0KICAgIGZvciAoaW50IGliID0gMDsgaWIgPCBrL0JMT0NLOyBpYisrKSB7DQogICAgICAgIGZsb2F0NCBsZGdfYSA9IGlzX2xnZF9hID8gYV9wdHJbMF0gOiAwOw0KICAgICAgICBmbG9hdDQgbGRnX2IgPSBpc19sZ2RfYiA/IGJfcHRyWzBdIDogMDsNCiAgICAgICAgYV9wdHIgKz0gODsNCiAgICAgICAgYl9wdHIgKz0gODsNCiAgICAgICAgZmxvYXQ0IHRoaXNfYXMgPSAqKGZsb2F0NCAqKSgmYXNfcHRyWzBdKTsNCiAgICAgICAgZmxvYXQgIHRoaXNfYnMgPSBic19wdHJbMF07DQogICAgICAgIGFzX3B0ciArPSBtOw0KICAgICAgICBic19wdHIgKz0gKG4rQkxPQ0stMSkvQkxPQ0s7DQogICAgICAgICooZmxvYXQ0ICopKCZsZHNfYVtjcF9zaGFyZWRfbW5dW2NwX3NoYXJlZF9rXSkgPSBsZGdfYTsNCiAgICAgICAgKihmbG9hdDQgKikoJmxkc19iW2NwX3NoYXJlZF9tbl1bY3Bfc2hhcmVkX2tdKSA9IGxkZ19iOw0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7DQogICAgICAgIGZsb2F0NCBibG9ja190aWxlX2RbMl0gPSB7MH07DQogICAgICAgIGJsb2NrX3RpbGVfZFswXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfbV1bbGRzX2sgKyAgMF0sIGxkc19iW2xkc19uXVtsZHNfayArICAwXSwgYmxvY2tfdGlsZV9kWzBdLCAwLCAwLCAwKTsNCiAgICAgICAgYmxvY2tfdGlsZV9kWzBdID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGxkc19hW2xkc19tXVtsZHNfayArICA0XSwgbGRzX2JbbGRzX25dW2xkc19rICsgIDRdLCBibG9ja190aWxlX2RbMF0sIDAsIDAsIDApOw0KICAgICAgICBibG9ja190aWxlX2RbMF0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgobGRzX2FbbGRzX21dW2xkc19rICsgIDhdLCBsZHNfYltsZHNfbl1bbGRzX2sgKyAgOF0sIGJsb2NrX3RpbGVfZFswXSwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZFswXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfbV1bbGRzX2sgKyAxMl0sIGxkc19iW2xkc19uXVtsZHNfayArIDEyXSwgYmxvY2tfdGlsZV9kWzBdLCAwLCAwLCAwKTsNCiAgICAgICAgdGlsZV9kWzBdWzBdICs9IGJsb2NrX3RpbGVfZFswXVswXSAqIHRoaXNfYXNbMF0gKiB0aGlzX2JzOw0KICAgICAgICB0aWxlX2RbMF1bMV0gKz0gYmxvY2tfdGlsZV9kWzBdWzFdICogdGhpc19hc1sxXSAqIHRoaXNfYnM7DQogICAgICAgIHRpbGVfZFswXVsyXSArPSBibG9ja190aWxlX2RbMF1bMl0gKiB0aGlzX2FzWzJdICogdGhpc19iczsNCiAgICAgICAgdGlsZV9kWzBdWzNdICs9IGJsb2NrX3RpbGVfZFswXVszXSAqIHRoaXNfYXNbM10gKiB0aGlzX2JzOw0KICAgICAgICBibG9ja190aWxlX2RbMV0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgobGRzX2FbbGRzX21dW2xkc19rICsgIDBdLCBsZHNfYltsZHNfbisxNl1bbGRzX2sgKyAgMF0sIGJsb2NrX3RpbGVfZFsxXSwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZFsxXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfbV1bbGRzX2sgKyAgNF0sIGxkc19iW2xkc19uKzE2XVtsZHNfayArICA0XSwgYmxvY2tfdGlsZV9kWzFdLCAwLCAwLCAwKTsNCiAgICAgICAgYmxvY2tfdGlsZV9kWzFdID0gX19idWlsdGluX2FtZGdjbl9tZm1hX2YzMl8xNngxNngzMl9mcDhfZnA4KGxkc19hW2xkc19tXVtsZHNfayArICA4XSwgbGRzX2JbbGRzX24rMTZdW2xkc19rICsgIDhdLCBibG9ja190aWxlX2RbMV0sIDAsIDAsIDApOw0KICAgICAgICBibG9ja190aWxlX2RbMV0gPSBfX2J1aWx0aW5fYW1kZ2NuX21mbWFfZjMyXzE2eDE2eDMyX2ZwOF9mcDgobGRzX2FbbGRzX21dW2xkc19rICsgMTJdLCBsZHNfYltsZHNfbisxNl1bbGRzX2sgKyAxMl0sIGJsb2NrX3RpbGVfZFsxXSwgMCwgMCwgMCk7DQogICAgICAgIHRpbGVfZFsxXVswXSArPSBibG9ja190aWxlX2RbMV1bMF0gKiB0aGlzX2FzWzBdICogdGhpc19iczsNCiAgICAgICAgdGlsZV9kWzFdWzFdICs9IGJsb2NrX3RpbGVfZFsxXVsxXSAqIHRoaXNfYXNbMV0gKiB0aGlzX2JzOw0KICAgICAgICB0aWxlX2RbMV1bMl0gKz0gYmxvY2tfdGlsZV9kWzFdWzJdICogdGhpc19hc1syXSAqIHRoaXNfYnM7DQogICAgICAgIHRpbGVfZFsxXVszXSArPSBibG9ja190aWxlX2RbMV1bM10gKiB0aGlzX2FzWzNdICogdGhpc19iczsNCiAgICAgICAgX19zeW5jdGhyZWFkcygpOw0KICAgIH0NCg0KICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSByZXN1bHQgYXMgYmYxNg0KICAgIGNbKGNfbSArIDApICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFswXVswXSk7DQogICAgY1soY19tICsgMSkgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzBdWzFdKTsNCiAgICBjWyhjX20gKyAyKSAqIG4gKyBjX25dID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMF1bMl0pOw0KICAgIGNbKGNfbSArIDMpICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFswXVszXSk7DQogICAgY1soY19tICsgMCkgKiBuICsgY19uICsgMTZdID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMV1bMF0pOw0KICAgIGNbKGNfbSArIDEpICogbiArIGNfbiArIDE2XSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzFdWzFdKTsNCiAgICBjWyhjX20gKyAyKSAqIG4gKyBjX24gKyAxNl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFsxXVsyXSk7DQogICAgY1soY19tICsgMykgKiBuICsgY19uICsgMTZdID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMV1bM10pOw0KfQ0KDQp2b2lkIGZwOF9tbSh0b3JjaDo6VGVuc29yIGEsIHRvcmNoOjpUZW5zb3IgYiwgdG9yY2g6OlRlbnNvciBhcywgdG9yY2g6OlRlbnNvciBicywgdG9yY2g6OlRlbnNvciBjKSB7DQogICAgaW50IG0gPSBhLnNpemUoMCk7DQogICAgaW50IG4gPSBiLnNpemUoMCk7DQogICAgaW50IGsgPSBhLnNpemUoMSk7DQogICAgY3VzdG9tX2tlcm5lbDw8PGRpbTMoKG0rNjMpLzY0LCAobis2MykvNjQpLCBkaW0zKDY0LCA4KSwgMCwgMD4+PiAoKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwNCiAgICBhcy5kYXRhX3B0cjxmbG9hdD4oKSwgYnMuZGF0YV9wdHI8ZmxvYXQ+KCksIChfX2hpcF9iZmxvYXQxNiopYy5kYXRhX3B0cigpLCBtLCBuLCBrKTsNCiAgICAvL0MxMF9DVURBX0NIRUNLKGN1ZGFHZXRMYXN0RXJyb3IoKSk7DQp9DQoiIiINCg0KaW1wb3J0IG9zDQpvcy5lbnZpcm9uWyJDWFgiXSA9ICJjbGFuZysrIg0KDQptb2R1bGUgPSBsb2FkX2lubGluZSgNCiAgICBuYW1lPSdmcDhfbW0nLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnZnA4X21tJ10sDQogICAgdmVyYm9zZT1UcnVlLA0KICAgIGV4dHJhX2N1ZGFfY2ZsYWdzPVsiLS1vZmZsb2FkLWFyY2g9Z2Z4OTQyIiwgIi1zdGQ9YysrMjAiLCAiLU8zIl0sDQopDQoNCg0KZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6DQogICAgYSwgYiwgYV9zY2FsZSwgYl9zY2FsZSwgYyA9IGRhdGENCiAgICBhID0gYS5jb250aWd1b3VzKCkNCiAgICBiID0gYi5jb250aWd1b3VzKCkNCiAgICBtb2R1bGUuZnA4X21tKGEsIGIsIGFfc2NhbGUsIGJfc2NhbGUsIGMpDQogICAgcmV0dXJuIGMNCg0K
No newline at end of file
+ IyBUaGlzIHNjcmlwdCBwcm92aWRlcyBhIHRlbXBsYXRlIGZvciB1c2luZyBsb2FkX2lubGluZSB0byBydW4gYSBISVAga2VybmVsIGZvcg0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KQ1BQX1dSQVBQRVIgPSAiIiINCnZvaWQgZnA4X21tKHRvcmNoOjpUZW5zb3IgYSwgdG9yY2g6OlRlbnNvciBiLCB0b3JjaDo6VGVuc29yIGFzLCB0b3JjaDo6VGVuc29yIGJzLCB0b3JjaDo6VGVuc29yIGMpOw0KIiIiDQoNCkNVREFfU1JDID0gIiIiDQojaW5jbHVkZSA8aGlwL2hpcF9ydW50aW1lLmg+DQojaW5jbHVkZSA8aGlwL2FtZF9kZXRhaWwvYW1kX2hpcF9mcDguaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KY29uc3RleHByIGNvbnN0IGludCBCTE9DSyA9IDEyODsNCg0KLy8gc3dpenpsZSBmdW5jdGlvbiBmb3IgOC1mcDggLyAxMjgtZnA4DQojZGVmaW5lIFNXWihtLCBuKSAoKChtKSAqIDggKyAobikpICUgMTI4KQ0KDQpfX2dsb2JhbF9fIHZvaWQgZnA4X21tXzMyeDMyKGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIGEsIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIGIsIGNvbnN0IGZsb2F0KiBhcywgY29uc3QgZmxvYXQqIGJzLA0KICAgICAgICAgICAgICAgICAgIF9faGlwX2JmbG9hdDE2KiBjLCBpbnQgbSwgaW50IG4sIGludCBrKSB7DQoNCiAgICAvLyBZb3VyIGltcGxlbWVudGF0aW9uIGhlcmUNCiAgICAvLyBpbnQgY3ggPSB0aHJlYWRJZHgueCArIGJsb2NrRGltLnggKiBibG9ja0lkeC54Ow0KICAgIC8vIGludCBjeSA9IHRocmVhZElkeC55ICsgYmxvY2tEaW0ueSAqIGJsb2NrSWR4Lnk7DQogICAgLy8gaWYoY3ggPj0gbSB8fCBjeSA+PSBuKSByZXR1cm47DQoNCiAgICB1c2luZyBmbG9hdDQgPSBmbG9hdCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsNCg0KICAgIF9fc2hhcmVkX18gbG9uZyBsZHNfYVszMl1bMTddOw0KICAgIF9fc2hhcmVkX18gbG9uZyBsZHNfYlszMl1bMTddOw0KICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogKmxkc19hX2ZwOCA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19oaXBfZnA4X2U0bTNfZm51eiAqPihsZHNfYSk7DQogICAgX19oaXBfZnA4X2U0bTNfZm51eiAqbGRzX2JfZnA4ID0gcmVpbnRlcnByZXRfY2FzdDxfX2hpcF9mcDhfZTRtM19mbnV6ICo+KGxkc19iKTsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAzMjsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMzI7DQoNCiAgICBpbnQgd2F2ZV9tID0gKHRocmVhZElkeC55IC8gMikgKiAxNjsNCiAgICBpbnQgd2F2ZV9uID0gKHRocmVhZElkeC55ICUgMikgKiAxNjsNCg0KICAgIGludCB0aHJlYWRfY19tID0gKHRocmVhZElkeC54IC8gMTYpICogNDsNCiAgICBpbnQgdGhyZWFkX2NfbiA9ICB0aHJlYWRJZHgueCAlIDE2OyAvLyBieSBmbG9hdA0KDQogICAgLy8gaW50IGNwX3NoYXJlZF9tbiA9IHRocmVhZElkeC55ICogOCArIHRocmVhZElkeC54IC8gODsNCiAgICAvLyBpbnQgY3Bfc2hhcmVkX2sgID0gKHRocmVhZElkeC54ICUgOCkgKiAyOyAvLyBieSBsb25nDQoNCiAgICAvLyBpbnQgY3BfZ2xvYmFsX20gPSB0aHJlYWRfYmxvY2tfbSArIGNwX3NoYXJlZF9tbjsNCiAgICAvLyBpbnQgY3BfZ2xvYmFsX24gPSB0aHJlYWRfYmxvY2tfbiArIGNwX3NoYXJlZF9tbjsNCiAgICAvLyBpbnQgY3BfZ2xvYmFsX2sgPSBjcF9zaGFyZWRfazsNCg0KICAgIGludCBjcF9yb3cgPSB0aHJlYWRJZHgueSAqIDMyICsgdGhyZWFkSWR4LnggLyAyOyAvLyBieSBmcDgNCiAgICBpbnQgY3BfY29sID0gKHRocmVhZElkeC54ICUgMikgKiAxNjsgICAgICAgICAgICAvLyBieSBmcDgNCiAgICBpbnQgY3BfZ2xvYmFsX2sgPSBjcF9yb3c7DQogICAgaW50IGNwX2dsb2JhbF9tID0gY3BfY29sICsgdGhyZWFkX2Jsb2NrX207ICAgICAgLy8gYnkgZnA4DQogICAgaW50IGNwX2dsb2JhbF9uID0gY3BfY29sICsgdGhyZWFkX2Jsb2NrX247ICAgICAgLy8gYnkgZnA4DQoNCiAgICBpbnQgbGRzX3NoYXJlZF9tID0gd2F2ZV9tICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX3NoYXJlZF9uID0gd2F2ZV9uICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX3NoYXJlZF9rID0gdGhyZWFkSWR4LnggLyAxNjsgLy8gYnkgbG9uZw0KDQogICAgaW50IGNfbSA9IHRocmVhZF9ibG9ja19tICsgd2F2ZV9tICsgdGhyZWFkX2NfbTsNCiAgICBpbnQgY19uID0gdGhyZWFkX2Jsb2NrX24gKyB3YXZlX24gKyB0aHJlYWRfY19uOw0KDQogICAgZmxvYXQ0ICphX3B0ciA9IChmbG9hdDQgKilhOw0KICAgIGZsb2F0NCAqYl9wdHIgPSAoZmxvYXQ0ICopYjsNCg0KICAgIGZsb2F0NCB0aWxlX2QgPSB7MH07DQoNCiAgICBpbnQgYXNfbSA9ICB0aHJlYWRfYmxvY2tfbSArIHdhdmVfbSArIHRocmVhZF9jX207DQogICAgaW50IGJzX24gPSAodGhyZWFkX2Jsb2NrX24gKyB3YXZlX24gKyB0aHJlYWRfY19uKSAvIEJMT0NLOw0KICAgIC8vIGZsb2F0ICphc19wdHIgPSAoZmxvYXQqKSZhc1thc19tICogay9CTE9DS107DQogICAgLy8gZmxvYXQgKmJzX3B0ciA9IChmbG9hdCopJmJzW2JzX24gKiBrL0JMT0NLXTsNCiAgICBmbG9hdCAqYXNfcHRyID0gKGZsb2F0KikmYXNbYXNfbV07DQogICAgZmxvYXQgKmJzX3B0ciA9IChmbG9hdCopJmJzW2JzX25dOw0KDQogICAgZm9yIChpbnQgaWIgPSAwOyBpYiA8IGs7IGliICs9IEJMT0NLKSB7DQogICAgICAgIC8vIGZsb2F0NCBsZGdfYSA9IGFfcHRyW2NwX2dsb2JhbF9tICogay8xNiArIGNwX2dsb2JhbF9rLzIgKyBpYi8xNl07DQogICAgICAgIC8vIGZsb2F0NCBsZGdfYiA9IGJfcHRyW2NwX2dsb2JhbF9uICogay8xNiArIGNwX2dsb2JhbF9rLzIgKyBpYi8xNl07DQogICAgICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogbGRnX2FbMTZdLCBsZGdfYlsxNl07DQogICAgICAgICooZmxvYXQ0ICopbGRnX2EgPSBhX3B0clsoY3BfZ2xvYmFsX2sgKyBpYikgKiBtLzE2ICsgY3BfZ2xvYmFsX20vMTZdOw0KICAgICAgICAqKGZsb2F0NCAqKWxkZ19iID0gYl9wdHJbKGNwX2dsb2JhbF9rICsgaWIpICogbi8xNiArIGNwX2dsb2JhbF9uLzE2XTsNCiAgICAgICAgZmxvYXQ0IHRoaXNfYXMgPSAqKGZsb2F0NCAqKSgmYXNfcHRyWzBdKTsNCiAgICAgICAgZmxvYXQgIHRoaXNfYnMgPSBic19wdHJbMF07DQogICAgICAgIC8vICooZmxvYXQ0ICopKCZsZHNfYVtjcF9zaGFyZWRfbW5dW2NwX3NoYXJlZF9rXSkgPSBsZGdfYTsNCiAgICAgICAgLy8gKihmbG9hdDQgKikoJmxkc19iW2NwX3NoYXJlZF9tbl1bY3Bfc2hhcmVkX2tdKSA9IGxkZ19iOw0KICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgMTY7IGlpKyspIHsNCiAgICAgICAgICAgIGxkc19hX2ZwOFsoY3BfY29sICsgaWkpICogMTM2ICsgY3Bfcm93XSA9IGxkZ19hW2lpXTsNCiAgICAgICAgICAgIGxkc19iX2ZwOFsoY3BfY29sICsgaWkpICogMTM2ICsgY3Bfcm93XSA9IGxkZ19iW2lpXTsNCiAgICAgICAgfQ0KICAgICAgICBfX3N5bmN0aHJlYWRzKCk7DQogICAgICAgIGZsb2F0NCBibG9ja190aWxlX2QgPSB7MH07DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArICAwXSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAgMF0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArICA0XSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAgNF0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArICA4XSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAgOF0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIGJsb2NrX3RpbGVfZCA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOChsZHNfYVtsZHNfc2hhcmVkX21dW2xkc19zaGFyZWRfayArIDEyXSwgbGRzX2JbbGRzX3NoYXJlZF9uXVtsZHNfc2hhcmVkX2sgKyAxMl0sIGJsb2NrX3RpbGVfZCwgMCwgMCwgMCk7DQogICAgICAgIF9fc3luY3RocmVhZHMoKTsNCiAgICAgICAgdGlsZV9kWzBdICs9IGJsb2NrX3RpbGVfZFswXSAqIHRoaXNfYXNbMF0gKiB0aGlzX2JzOw0KICAgICAgICB0aWxlX2RbMV0gKz0gYmxvY2tfdGlsZV9kWzFdICogdGhpc19hc1sxXSAqIHRoaXNfYnM7DQogICAgICAgIHRpbGVfZFsyXSArPSBibG9ja190aWxlX2RbMl0gKiB0aGlzX2FzWzJdICogdGhpc19iczsNCiAgICAgICAgdGlsZV9kWzNdICs9IGJsb2NrX3RpbGVfZFszXSAqIHRoaXNfYXNbM10gKiB0aGlzX2JzOw0KICAgICAgICBhc19wdHIgKz0gbTsNCiAgICAgICAgYnNfcHRyICs9IChuK0JMT0NLLTEpL0JMT0NLOw0KICAgIH0NCg0KICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSByZXN1bHQgYXMgYmYxNg0KICAgIGNbKGNfbSArIDApICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFswXSk7DQogICAgY1soY19tICsgMSkgKiBuICsgY19uXSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kWzFdKTsNCiAgICBjWyhjX20gKyAyKSAqIG4gKyBjX25dID0gKF9faGlwX2JmbG9hdDE2KSh0aWxlX2RbMl0pOw0KICAgIGNbKGNfbSArIDMpICogbiArIGNfbl0gPSAoX19oaXBfYmZsb2F0MTYpKHRpbGVfZFszXSk7DQp9DQoNCl9fZ2xvYmFsX18gdm9pZCBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjgoY29uc3QgX19oaXBfZnA4X2U0bTNfZm51eiogX19yZXN0cmljdF9fIGEsIGludCBtLCBpbnQgbikgew0KICAgIC8vIHRyYW5zcG9zZSBpbiBldmVyeSAxMjh4MTI4IGJsb2NrDQoNCiAgICB1c2luZyBmbG9hdDQgPSBmbG9hdCBfX2F0dHJpYnV0ZV9fKChleHRfdmVjdG9yX3R5cGUoNCkpKTsNCg0KICAgIGludCB0aHJlYWRfYmxvY2tfbSA9IGJsb2NrSWR4LnggKiAxMjg7DQogICAgaW50IHRocmVhZF9ibG9ja19uID0gYmxvY2tJZHgueSAqIDEyODsNCg0KICAgIGludCB0aHJlYWRfbSA9ICh0aHJlYWRJZHgueCAvIDgpICogMTY7DQogICAgaW50IHRocmVhZF9uID0gKHRocmVhZElkeC54ICUgOCkgKiAxNjsNCg0KICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogZGF0YVsxNl1bMTZdOw0KICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogZGF0YV90WzE2XVsxNl07DQoNCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsNCiAgICAgICAgKihmbG9hdDQgKikmZGF0YVtpXVswXSA9ICooZmxvYXQ0ICopJmFbKHRocmVhZF9ibG9ja19tICsgdGhyZWFkX20gKyBpKSAqIG4gKyB0aHJlYWRfYmxvY2tfbiArIHRocmVhZF9uXTsNCiAgICB9DQoNCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsNCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxNjsgaisrKSB7DQogICAgICAgICAgICBkYXRhX3Rbal1baV0gPSBkYXRhW2ldW2pdOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7DQogICAgICAgICooZmxvYXQ0ICopJmFbKHRocmVhZF9ibG9ja19tICsgdGhyZWFkX24gKyBpKSAqIG4gKyB0aHJlYWRfYmxvY2tfbiArIHRocmVhZF9tXSA9ICooZmxvYXQ0ICopJmRhdGFfdFtpXVswXTsNCiAgICB9DQp9DQoNCl9fbGF1bmNoX2JvdW5kc19fKDUxMiwgMikNCl9fZ2xvYmFsX18gdm9pZCBmcDhfbW1fMTI4eDEyOChjb25zdCBfX2hpcF9mcDhfZTRtM19mbnV6KiBfX3Jlc3RyaWN0X18gYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9faGlwX2ZwOF9lNG0zX2ZudXoqIF9fcmVzdHJpY3RfXyBiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIF9fcmVzdHJpY3RfXyBhcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBfX3Jlc3RyaWN0X18gYnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2hpcF9iZmxvYXQxNiogX19yZXN0cmljdF9fIGMsIGludCBtLCBpbnQgbiwgaW50IGspIHsNCg0KICAgIHVzaW5nIGZsb2F0NCA9IGZsb2F0IF9fYXR0cmlidXRlX18oKGV4dF92ZWN0b3JfdHlwZSg0KSkpOw0KDQogICAgX19zaGFyZWRfXyBfX2hpcF9mcDhfZTRtM19mbnV6IGxkc19hWzEyOF1bMTI4XTsNCiAgICBfX3NoYXJlZF9fIF9faGlwX2ZwOF9lNG0zX2ZudXogbGRzX2JbMTI4XVsxMjhdOw0KDQogICAgaW50IHRocmVhZF9ibG9ja19tID0gYmxvY2tJZHgueCAqIDEyODsNCiAgICBpbnQgdGhyZWFkX2Jsb2NrX24gPSBibG9ja0lkeC55ICogMTI4Ow0KDQogICAgaW50IHdhdmVfbSA9ICh0aHJlYWRJZHgueSAvIDIpICogMzI7DQogICAgaW50IHdhdmVfbiA9ICh0aHJlYWRJZHgueSAlIDIpICogNjQ7DQoNCiAgICBpbnQgdGhyZWFkX2NfbSA9ICh0aHJlYWRJZHgueCAvIDE2KSAqIDQ7DQogICAgaW50IHRocmVhZF9jX24gPSAgdGhyZWFkSWR4LnggJSAxNjsNCg0KICAgIC8vIExER1NUUyBBJkIgUGFyYW1ldGVycw0KICAgIGludCBzdHNfbW4gPSB0aHJlYWRJZHgueSAqIDggKyB0aHJlYWRJZHgueCAvIDg7DQogICAgaW50IHN0c19rICA9ICh0aHJlYWRJZHgueCAlIDgpICogMTY7DQogICAgaW50IGxkZ19tID0gdGhyZWFkX2Jsb2NrX20gKyBzdHNfazsNCiAgICBpbnQgbGRnX24gPSB0aHJlYWRfYmxvY2tfbiArIHN0c19rOw0KICAgIGludCBsZGdfayA9IHN0c19tbjsNCg0KICAgIC8vIExEUyBBJkIgUGFyYW1ldGVycw0KICAgIGludCBsZHNfbSA9IHdhdmVfbSArIHRocmVhZElkeC54ICUgMTY7DQogICAgaW50IGxkc19uID0gd2F2ZV9uICsgdGhyZWFkSWR4LnggJSAxNjsNCiAgICBpbnQgbGRzX2sgPSAodGhyZWFkSWR4LnggLyAxNikgKiA4Ow0KDQogICAgLy8gQyZEIFBhcmFtZXRlcnMNCiAgICBpbnQgY19tID0gdGhyZWFkX2Jsb2NrX20gKyB3YXZlX20gKyB0aHJlYWRfY19tOw0KICAgIGludCBjX24gPSB0aHJlYWRfYmxvY2tfbiArIHdhdmVfbiArIHRocmVhZF9jX247DQoNCiAgICBpbnQgYXNfbSA9IGNfbTsNCiAgICBpbnQgYnNfbiA9IGNfbiAvIEJMT0NLOw0KDQogICAgZmxvYXQ0IHRpbGVfZFsyXVs0XSA9IHswfTsNCg0KICAgIGZvciAoaW50IGliID0gMDsgaWIgPCBrL0JMT0NLOyBpYisrKSB7DQogICAgICAgIF9faGlwX2ZwOF9lNG0zX2ZudXogbGRnX2FbMl1bMTZdLCBsZGdfYlsyXVsxNl07DQogICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgICAgICAqKGZsb2F0NCAqKWxkZ19hW2lpXSA9ICooZmxvYXQ0ICopJmFbKGxkZ19rICsgaWIqQkxPQ0sgKyBpaSo2NCkgKiBtICsgbGRnX21dOw0KICAgICAgICAgICAgKihmbG9hdDQgKilsZGdfYltpaV0gPSAqKGZsb2F0NCAqKSZiWyhsZGdfayArIGliKkJMT0NLICsgaWkqNjQpICogbiArIGxkZ19uXTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZsb2F0IHRoaXNfYXNbMl1bNF07DQogICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgICAgICAqKGZsb2F0NCAqKXRoaXNfYXNbaWldID0gKihmbG9hdDQgKikmYXNbaWIqbSArIGFzX20gKyBpaSoxNl07DQogICAgICAgIH0NCiAgICAgICAgZmxvYXQgdGhpc19icyA9IGJzW2liICogKChuK0JMT0NLLTEpL0JMT0NLKSArIGJzX25dOw0KDQogICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgICAgICAqKGxvbmcgKikmbGRzX2Fbc3RzX21uICsgaWkqNjRdW1NXWihzdHNfbW4sIHN0c19rICAgICldID0gKihsb25nICopJmxkZ19hW2lpXVswXTsNCiAgICAgICAgICAgICoobG9uZyAqKSZsZHNfYVtzdHNfbW4gKyBpaSo2NF1bU1daKHN0c19tbiwgc3RzX2sgKyA4KV0gPSAqKGxvbmcgKikmbGRnX2FbaWldWzhdOw0KICAgICAgICAgICAgKihsb25nICopJmxkc19iW3N0c19tbiArIGlpKjY0XVtTV1ooc3RzX21uLCBzdHNfayAgICApXSA9ICoobG9uZyAqKSZsZGdfYltpaV1bMF07DQogICAgICAgICAgICAqKGxvbmcgKikmbGRzX2Jbc3RzX21uICsgaWkqNjRdW1NXWihzdHNfbW4sIHN0c19rICsgOCldID0gKihsb25nICopJmxkZ19iW2lpXVs4XTsNCiAgICAgICAgfQ0KDQogICAgICAgIF9fc3luY3RocmVhZHMoKTsNCg0KICAgICAgICBmbG9hdDQgYmxvY2tfdGlsZV9kWzJdWzRdID0gezB9Ow0KICAgICAgICBsb25nIHRpbGVfYVsyXVs0XSwgdGlsZV9iWzRdWzRdOw0KICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgMjsgaWkrKykgew0KICAgICAgICAgICAgZm9yIChpbnQga2sgPSAwOyBrayA8IDQ7IGtrKyspIHsNCiAgICAgICAgICAgICAgICB0aWxlX2FbaWldW2trXSA9ICoobG9uZyAqKSZsZHNfYVtsZHNfbSArIGlpKjE2XVtTV1oobGRzX20sIGxkc19rICsga2sqMzIpXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmb3IgKGludCBqaiA9IDA7IGpqIDwgNDsgamorKykgew0KICAgICAgICAgICAgZm9yIChpbnQga2sgPSAwOyBrayA8IDQ7IGtrKyspIHsNCiAgICAgICAgICAgICAgICB0aWxlX2JbampdW2trXSA9ICoobG9uZyAqKSZsZHNfYltsZHNfbiArIGpqKjE2XVtTV1oobGRzX24sIGxkc19rICsga2sqMzIpXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgMjsgaWkrKykgew0KICAgICAgICAgICAgZm9yIChpbnQgamogPSAwOyBqaiA8IDQ7IGpqKyspIHsNCiAgICAgICAgICAgICAgICBmb3IgKGludCBrayA9IDA7IGtrIDwgNDsga2srKykgew0KICAgICAgICAgICAgICAgICAgICBibG9ja190aWxlX2RbaWldW2pqXSA9IF9fYnVpbHRpbl9hbWRnY25fbWZtYV9mMzJfMTZ4MTZ4MzJfZnA4X2ZwOCh0aWxlX2FbaWldW2trXSwgdGlsZV9iW2pqXVtra10sIGJsb2NrX3RpbGVfZFtpaV1bampdLCAwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZm9yIChpbnQga2sgPSAwOyBrayA8IDQ7IGtrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgdGlsZV9kW2lpXVtqal1ba2tdICs9IGJsb2NrX3RpbGVfZFtpaV1bampdW2trXSAqIHRoaXNfYXNbaWldW2trXSAqIHRoaXNfYnM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgX19zeW5jdGhyZWFkcygpOw0KICAgIH0NCg0KICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSByZXN1bHQgYXMgYmYxNg0KICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCAyOyBpaSsrKSB7DQogICAgICAgIGZvciAoaW50IGpqID0gMDsgamogPCA0OyBqaisrKSB7DQogICAgICAgICAgICBmb3IgKGludCBrayA9IDA7IGtrIDwgNDsga2srKykgew0KICAgICAgICAgICAgICAgIGNbKGNfbSArIGlpKjE2ICsga2spICogbiArIGNfbiArIGpqKjE2XSA9IChfX2hpcF9iZmxvYXQxNikodGlsZV9kW2lpXVtqal1ba2tdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0Kdm9pZCBmcDhfbW0odG9yY2g6OlRlbnNvciBhLCB0b3JjaDo6VGVuc29yIGIsIHRvcmNoOjpUZW5zb3IgYXMsIHRvcmNoOjpUZW5zb3IgYnMsIHRvcmNoOjpUZW5zb3IgYykgew0KICAgIGludCBtID0gYS5zaXplKDApOw0KICAgIGludCBuID0gYi5zaXplKDApOw0KICAgIGludCBrID0gYS5zaXplKDEpOw0KLy8gaGlwRXZlbnRfdCBzdGFydCwgZW5kOw0KLy8gaGlwRXZlbnRDcmVhdGUoJnN0YXJ0KTsNCi8vIGhpcEV2ZW50Q3JlYXRlKCZlbmQpOw0KLy8gaGlwRXZlbnRSZWNvcmQoc3RhcnQpOw0KICAgIGlmIChtICUgMTI4ICE9IDAgfHwgbiAlIDEyOCAhPSAwKSB7DQogICAgICAgIGZwOF9tbV8zMngzMjw8PGRpbTMoKG0rMzEpLzMyLCAobiszMSkvMzIpLCBkaW0zKDY0LCA0KSwgMCwgMD4+PiAoDQogICAgICAgICAgICAoX19oaXBfZnA4X2U0bTNfZm51eiopYS5kYXRhX3B0cigpLCAoX19oaXBfZnA4X2U0bTNfZm51eiopYi5kYXRhX3B0cigpLA0KICAgICAgICAgICAgYXMuZGF0YV9wdHI8ZmxvYXQ+KCksIGJzLmRhdGFfcHRyPGZsb2F0PigpLCAoX19oaXBfYmZsb2F0MTYqKWMuZGF0YV9wdHIoKSwgbSwgbiwgayk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobSsxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIGssIG0pOw0KICAgICAgICBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobisxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIGssIG4pOw0KICAgICAgICBmcDhfbW1fMTI4eDEyODw8PGRpbTMoKG0rMTI3KS8xMjgsIChuKzEyNykvMTI4KSwgZGltMyg2NCwgOCksIDAsIDA+Pj4gKA0KICAgICAgICAgICAgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWEuZGF0YV9wdHIoKSwgKF9faGlwX2ZwOF9lNG0zX2ZudXoqKWIuZGF0YV9wdHIoKSwNCiAgICAgICAgICAgIGFzLmRhdGFfcHRyPGZsb2F0PigpLCBicy5kYXRhX3B0cjxmbG9hdD4oKSwgKF9faGlwX2JmbG9hdDE2KiljLmRhdGFfcHRyKCksIG0sIG4sIGspOw0KICAgICAgICAvLyBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobSsxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KilhLmRhdGFfcHRyKCksIGssIG0pOw0KICAgICAgICAvLyBpbnNpdHVfdHJhbnNwb3NlXzEyOHgxMjg8PDxkaW0zKChrKzEyNykvMTI4LCAobisxMjcpLzEyOCksIGRpbTMoNjQpLCAwLCAwPj4+KChfX2hpcF9mcDhfZTRtM19mbnV6KiliLmRhdGFfcHRyKCksIGssIG4pOw0KICAgIH0NCi8vIGhpcEV2ZW50UmVjb3JkKGVuZCk7DQovLyBoaXBFdmVudFN5bmNocm9uaXplKGVuZCk7DQovLyBmbG9hdCBtc2VjOw0KLy8gaGlwRXZlbnRFbGFwc2VkVGltZSgmbXNlYywgc3RhcnQsIGVuZCk7DQovLyBmbG9hdCB1c2VjID0gbXNlYyAqIDEwMDA7DQovLyBhcy5kYXRhX3B0cjxmbG9hdD4oKVswXSA9IHVzZWM7DQovLyBoaXBFdmVudERlc3Ryb3koc3RhcnQpOw0KLy8gaGlwRXZlbnREZXN0cm95KGVuZCk7DQogICAgLy9DMTBfQ1VEQV9DSEVDSyhjdWRhR2V0TGFzdEVycm9yKCkpOw0KfQ0KIiIiDQoNCmltcG9ydCBvcw0Kb3MuZW52aXJvblsiQ1hYIl0gPSAiY2xhbmcrKyINCg0KbW9kdWxlID0gbG9hZF9pbmxpbmUoDQogICAgbmFtZT0nZnA4X21tJywNCiAgICBjcHBfc291cmNlcz1bQ1BQX1dSQVBQRVJdLA0KICAgIGN1ZGFfc291cmNlcz1bQ1VEQV9TUkNdLA0KICAgIGZ1bmN0aW9ucz1bJ2ZwOF9tbSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMyJdLA0KKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjID0gZGF0YQ0KICAgICMgdG1wID0gYV9zY2FsZVswXVswXQ0KICAgICMgaW1wb3J0IG51bXB5IGFzIG5wDQogICAgIyByYW5kaW50ID0gbnAucmFuZG9tLnJhbmRpbnQoMCwgMjApDQogICAgbW9kdWxlLmZwOF9tbShhLCBiLCBhX3NjYWxlLCBiX3NjYWxlLCBjKQ0KICAgICMgaWYgcmFuZGludCAlIDIwID09IDA6DQogICAgIyAgICAgcHJpbnQoZiJNIE4gSyA9IHthLnNoYXBlWzBdOjR9IHtiLnNoYXBlWzBdOjR9IHthLnNoYXBlWzFdOjR9LCBUaW1lID0ge2Ffc2NhbGVbMF1bMF06LjJmfSB1cyIpDQogICAgIyBhX3NjYWxlWzBdWzBdID0gdG1wDQogICAgcmV0dXJuIGM=
No newline at end of file

Best evidence level for this revision: reported

JSON