Skip to content
KernelIndex
Search⌘K

submission 30308

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-mla-submission.py
curl "https://kernelindex.com/api/v1/implementations/kernelbot-amd-mla-decode-30308?include=source"
interfacepython
Compatibility
measured onAMD Instinct MI300X
declared hardwareAMD Instinct MI300X
architecturesgfx942
dtypesbf16

Benchmark evidence

1 measurement across 1 GPU, fastest first.

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

Reported · How evidence levels are derived →

Source and license

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

Kernel source

amd-mla-submission.py1 lines
aW1wb3J0IG9zDQpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicNCmltcG9ydCB0b3JjaA0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KDQpDUFBfV1JBUFBFUiA9ICIiIg0Kdm9pZCBtbGFfZGVjb2RlKHRvcmNoOjpUZW5zb3IgeCwgdG9yY2g6OlRlbnNvciB5LCBpbnQgcG9zLCBpbnQgeG9mZiwgaW50IHlvZmYsDQogICAgICAgICAgICAgICAgaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMik7DQp2b2lkIGRpdl9zb2Z0bWF4KHRvcmNoOjpUZW5zb3IgcWssIGludCBicywgaW50IG5oLCBpbnQgc2wsIGludCBkbm9wZSwgaW50IGRyb3BlKTsNCiIiIg0KDQpDVURBX1NSQyA9ICIiIg0KI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPg0KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPg0KDQpfX2dsb2JhbF9fIHZvaWQgcm9wZV8zZF9rZXJuZWwoaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMiwgaW50IHBvcywNCiAgICAgICAgY29uc3QgX19oaXBfYmZsb2F0MTYgKngsIF9faGlwX2JmbG9hdDE2ICp5KSB7DQogICAgaW50IGQwX2lkeCA9IGJsb2NrSWR4Lng7DQogICAgaW50IGQxX2lkeCA9IGJsb2NrSWR4Lnk7DQogICAgX19oaXBfYmZsb2F0MTYgaWR4ID0gX19oYWRkKChfX2hpcF9iZmxvYXQxNilwb3MsIF9faGlwX2JmbG9hdDE2KGQxX2lkeCkpOw0KICAgIGZvciAoaW50IGQyX2lkeCA9IHRocmVhZElkeC54OyBkMl9pZHggPCBkMi8yOyBkMl9pZHggKz0gYmxvY2tEaW0ueCkgew0KICAgICAgICBmbG9hdCB4MSA9IChmbG9hdCl4W2QwX2lkeCAqIHhzMSArIGQxX2lkeCAqIHhzMiArIGQyX2lkeF07DQogICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KXhbZDBfaWR4ICogeHMxICsgZDFfaWR4ICogeHMyICsgZDJfaWR4ICsgZDIvMl07DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHRoZXRhID0gKF9faGlwX2JmbG9hdDE2KWQyX2lkeDsNCiAgICAgICAgdGhldGEgPSBfX2htdWwodGhldGEsIChfX2hpcF9iZmxvYXQxNikoLTIuMGYpKTsNCiAgICAgICAgdGhldGEgPSBfX2hkaXYodGhldGEsIChfX2hpcF9iZmxvYXQxNilkMik7DQogICAgICAgIHRoZXRhID0gX19wb3dmKChfX2hpcF9iZmxvYXQxNikxMDAwMC4wZiwgdGhldGEpOw0KICAgICAgICB0aGV0YSA9IF9faG11bCh0aGV0YSwgKF9faGlwX2JmbG9hdDE2KWlkeCk7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IGNvcyA9IGNvc2YoKGZsb2F0KXRoZXRhKTsNCiAgICAgICAgX19oaXBfYmZsb2F0MTYgc2luID0gc2luZigoZmxvYXQpdGhldGEpOw0KICAgICAgICB5W2QwX2lkeCAqIHlzMSArIGQxX2lkeCAqIHlzMiArIGQyX2lkeCAgICAgICBdID0gX19oc3ViKF9faG11bCh4MSwgY29zKSwgX19obXVsKHgyLCBzaW4pKTsNCiAgICAgICAgeVtkMF9pZHggKiB5czEgKyBkMV9pZHggKiB5czIgKyBkMl9pZHggKyBkMi8yXSA9IF9faGFkZChfX2htdWwoeDIsIGNvcyksIF9faG11bCh4MSwgc2luKSk7DQogICAgfQ0KfQ0KDQpfX2dsb2JhbF9fIHZvaWQgcm9wZV8zZF9rZXJuZWxfZDBhbGlnbmVkMihpbnQgZDAsIGludCBkMSwgaW50IGQyLCBpbnQgeHMxLCBpbnQgeHMyLCBpbnQgeXMxLCBpbnQgeXMyLCBpbnQgcG9zLA0KICAgICAgICBjb25zdCBfX2hpcF9iZmxvYXQxNiAqeCwgX19oaXBfYmZsb2F0MTYgKnkpIHsNCiAgICBpbnQgZDBfaWR4ID0gYmxvY2tJZHgueCAqIDIgKyB0aHJlYWRJZHgueCAvIDMyOw0KICAgIGludCBkMV9pZHggPSBibG9ja0lkeC55Ow0KICAgIF9faGlwX2JmbG9hdDE2IGlkeCA9IF9faGFkZCgoX19oaXBfYmZsb2F0MTYpcG9zLCBfX2hpcF9iZmxvYXQxNihkMV9pZHgpKTsNCiAgICBmb3IgKGludCBkMl9pZHggPSB0aHJlYWRJZHgueCAlIDMyOyBkMl9pZHggPCBkMi8yOyBkMl9pZHggKz0gMzIpIHsNCiAgICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpeFtkMF9pZHggKiB4czEgKyBkMV9pZHggKiB4czIgKyBkMl9pZHhdOw0KICAgICAgICBmbG9hdCB4MiA9IChmbG9hdCl4W2QwX2lkeCAqIHhzMSArIGQxX2lkeCAqIHhzMiArIGQyX2lkeCArIGQyLzJdOw0KICAgICAgICBfX2hpcF9iZmxvYXQxNiB0aGV0YSA9IChfX2hpcF9iZmxvYXQxNilkMl9pZHg7DQogICAgICAgIHRoZXRhID0gX19obXVsKHRoZXRhLCAoX19oaXBfYmZsb2F0MTYpKC0yLjBmKSk7DQogICAgICAgIHRoZXRhID0gX19oZGl2KHRoZXRhLCAoX19oaXBfYmZsb2F0MTYpZDIpOw0KICAgICAgICB0aGV0YSA9IF9fcG93ZigoX19oaXBfYmZsb2F0MTYpMTAwMDAuMGYsIHRoZXRhKTsNCiAgICAgICAgdGhldGEgPSBfX2htdWwodGhldGEsIChfX2hpcF9iZmxvYXQxNilpZHgpOw0KICAgICAgICBfX2hpcF9iZmxvYXQxNiBjb3MgPSBjb3NmKChmbG9hdCl0aGV0YSk7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHNpbiA9IHNpbmYoKGZsb2F0KXRoZXRhKTsNCiAgICAgICAgeVtkMF9pZHggKiB5czEgKyBkMV9pZHggKiB5czIgKyBkMl9pZHggICAgICAgXSA9IF9faHN1YihfX2htdWwoeDEsIGNvcyksIF9faG11bCh4Miwgc2luKSk7DQogICAgICAgIHlbZDBfaWR4ICogeXMxICsgZDFfaWR4ICogeXMyICsgZDJfaWR4ICsgZDIvMl0gPSBfX2hhZGQoX19obXVsKHgyLCBjb3MpLCBfX2htdWwoeDEsIHNpbikpOw0KICAgIH0NCn0NCg0Kdm9pZCBtbGFfZGVjb2RlKHRvcmNoOjpUZW5zb3IgeCwgdG9yY2g6OlRlbnNvciB5LCBpbnQgcG9zLCBpbnQgeG9mZiwgaW50IHlvZmYsDQogICAgICAgICAgICAgICAgaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMikgew0KDQogICAgX19oaXBfYmZsb2F0MTYgKnhfcHRyID0gKF9faGlwX2JmbG9hdDE2ICopeC5kYXRhX3B0cigpICsgeG9mZjsNCiAgICBfX2hpcF9iZmxvYXQxNiAqeV9wdHIgPSAoX19oaXBfYmZsb2F0MTYgKil5LmRhdGFfcHRyKCkgKyB5b2ZmOw0KICAgIGlmIChkMCAlIDIgPT0gMCkgew0KICAgICAgICByb3BlXzNkX2tlcm5lbF9kMGFsaWduZWQyPDw8ZGltMyhkMC8yLCBkMSksIGRpbTMoNjQpPj4+KGQwLCBkMSwgZDIsIHhzMSwgeHMyLCB5czEsIHlzMiwgcG9zLCB4X3B0ciwgeV9wdHIpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgcm9wZV8zZF9rZXJuZWw8PDxkaW0zKGQwLCBkMSksIGRpbTMoNjQpPj4+KGQwLCBkMSwgZDIsIHhzMSwgeHMyLCB5czEsIHlzMiwgcG9zLCB4X3B0ciwgeV9wdHIpOw0KICAgIH0NCg0KfQ0KDQpfX2dsb2JhbF9fIHZvaWQgZGl2X3NvZnRtYXhfa2VybmVsKF9faGlwX2JmbG9hdDE2ICpwdHIsIGludCBicywgaW50IG5oLCBpbnQgc2wsIGZsb2F0IHNjYWxlKSB7DQogICAgaW50IHRoaXNfYnMgPSBibG9ja0lkeC54Ow0KICAgIGludCB0aGlzX25oID0gYmxvY2tJZHgueTsNCiAgICBpbnQgaWR4ID0gdGhpc19icyAqIG5oICogc2wgKyB0aGlzX25oICogc2w7DQoNCiAgICBfX3NoYXJlZF9fIF9faGlwX2JmbG9hdDE2IHNfdmFsWzgxOTJdOyAvLyBtc2wgPSA4MTkyDQogICAgX19zaGFyZWRfXyBmbG9hdCBzdW1fdmFsWzI1Nl07DQoNCiAgICBmbG9hdCB0aHJlYWRfc3VtID0gMC4wZjsNCiAgICBmb3IgKGludCBpID0gdGhyZWFkSWR4Lng7IGkgPCBzbDsgaSArPSBibG9ja0RpbS54KSB7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHZhbCA9IHB0cltpZHggKyBpXTsNCiAgICAgICAgZmxvYXQgc2NhbGVkX3ZhbCA9IChmbG9hdCl2YWwgKiBzY2FsZTsgLy8gU2NhbGUgYnkgMS9zcXJ0KGRub3BlICsgZHJvcGUpDQogICAgICAgIGZsb2F0IGV4cF92YWwgPSBleHBmKHNjYWxlZF92YWwpOw0KICAgICAgICB0aHJlYWRfc3VtICs9IGV4cF92YWw7DQogICAgICAgIHNfdmFsW2ldID0gKF9faGlwX2JmbG9hdDE2KWV4cF92YWw7DQogICAgfQ0KICAgIHN1bV92YWxbdGhyZWFkSWR4LnhdID0gdGhyZWFkX3N1bTsNCg0KICAgIF9fc3luY3RocmVhZHMoKTsNCg0KICAgIGlmICh0aHJlYWRJZHgueCA8IDE2KSB7DQogICAgICAgIHRocmVhZF9zdW0gPSAwLjBmOw0KICAgICAgICBmb3IgKGludCBpID0gdGhyZWFkSWR4Lng7IGkgPCBibG9ja0RpbS54OyBpICs9IDE2KSB7DQogICAgICAgICAgICB0aHJlYWRfc3VtICs9IHN1bV92YWxbaV07DQogICAgICAgIH0NCiAgICAgICAgc3VtX3ZhbFt0aHJlYWRJZHgueF0gPSB0aHJlYWRfc3VtOw0KICAgIH0NCiAgICBfX3N5bmN0aHJlYWRzKCk7DQoNCiAgICBpZiAodGhyZWFkSWR4LnggPT0gMCkgew0KICAgICAgICB0aHJlYWRfc3VtID0gMC4wZjsNCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7DQogICAgICAgICAgICB0aHJlYWRfc3VtICs9IHN1bV92YWxbaV07DQogICAgICAgIH0NCiAgICAgICAgc3VtX3ZhbFswXSA9IHRocmVhZF9zdW07DQogICAgfQ0KDQogICAgX19zeW5jdGhyZWFkcygpOw0KDQogICAgZmxvYXQgdG90YWxfc3VtID0gc3VtX3ZhbFswXTsNCiAgICBmb3IgKGludCBpID0gdGhyZWFkSWR4Lng7IGkgPCBzbDsgaSArPSBibG9ja0RpbS54KSB7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHZhbCA9IHNfdmFsW2ldOw0KICAgICAgICBmbG9hdCBzb2Z0bWF4X3ZhbCA9IChmbG9hdCl2YWwgLyB0b3RhbF9zdW07DQogICAgICAgIHB0cltpZHggKyBpXSA9IChfX2hpcF9iZmxvYXQxNilzb2Z0bWF4X3ZhbDsNCiAgICB9DQp9DQoNCnZvaWQgZGl2X3NvZnRtYXgodG9yY2g6OlRlbnNvciBxaywgaW50IGJzLCBpbnQgbmgsIGludCBzbCwgaW50IGRub3BlLCBpbnQgZHJvcGUpIHsNCiAgICBfX2hpcF9iZmxvYXQxNiAqcWtfcHRyID0gKF9faGlwX2JmbG9hdDE2ICopcWsuZGF0YV9wdHIoKTsNCiAgICBmbG9hdCBzY2FsZSA9IDEuMGYgLyBzcXJ0ZigoZmxvYXQpKGRub3BlICsgZHJvcGUpKTsNCiAgICBkaXZfc29mdG1heF9rZXJuZWw8PDxkaW0zKGJzLCBuaCksIGRpbTMoMjU2KT4+Pihxa19wdHIsIGJzLCBuaCwgc2wsIHNjYWxlKTsNCn0NCiIiIg0KDQppbXBvcnQgb3MNCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiDQoNCm1vZHVsZSA9IGxvYWRfaW5saW5lKA0KICAgIG5hbWU9J21sYV9kZWNvZGUnLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnbWxhX2RlY29kZScsICdkaXZfc29mdG1heCddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMyIsICItdyJdLA0KKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZGF0YQ0KDQogICAgYnMgPSBjb25maWcuYmF0Y2hfc2l6ZQ0KICAgIHNsID0gY29uZmlnLnNlcV9sZW4NCiAgICBwbCA9IGt2X2NhY2hlLnNlcV9sZW4NCiAgICBtc2wgPSBjb25maWcubWF4X3NlcV9sZW4NCiAgICBuaCA9IGNvbmZpZy5uX2hlYWRzDQogICAgZCA9ICBjb25maWcuZGltDQogICAgZHEgPSBjb25maWcucV9sb3JhX3JhbmsNCiAgICBka3YgPSBjb25maWcua3ZfbG9yYV9yYW5rDQogICAgZG5vcGUgPSBjb25maWcucWtfbm9wZV9oZWFkX2RpbQ0KICAgIGRyb3BlID0gY29uZmlnLnFrX3JvcGVfaGVhZF9kaW0NCiAgICBkdiA9IGNvbmZpZy52X2hlYWRfZGltDQoNCiAgICB3RFEgID0gY29uZmlnLlFfcHJval9kb3duX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbZHEsIGRdDQogICAgd0RLViA9IGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2RrdiArIGRyb3BlLCBkXQ0KICAgIHdVUSAgPSBjb25maWcuUV9wcm9qX3VwX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFtuaCAqIChkbm9wZSArIGRyb3BlKSwgZHFdDQogICAgd1VLViA9IGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW25oICogKGRub3BlICsgZHYpLCBka3ZdDQogICAgd08gICA9IGNvbmZpZy53b193ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2QsIG5oICogZHZdDQoNCiAgICB4ID0geC52aWV3KGJzLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbYnMsIGRdDQogICAgcUQgPSB4IEAgd0RRLlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2JzLCBkcV0gPSBbYnMsIGRdIEAgW2RxLCBkXQ0KICAgIHFVID0gKHFEIEAgd1VRLlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFticywgbmggKiAoZG5vcGUgKyBkcm9wZSldID0gW2JzLCBkcV0gQCBbbmggKiAoZG5vcGUgKyBkcm9wZSksIGRxXQ0KICAgIHFVID0gcVUudmlldyhicyAqIG5oLCBzbCwgZG5vcGUgKyBkcm9wZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFticyAqIG5oLCBzbCwgZG5vcGUgKyBkcm9wZV0NCiAgICAjIHFVWzosIDosIGRub3BlOl0gPSByb3BlKHFVWzosIDosIGRub3BlOl0sIHBsKQ0KICAgIG1vZHVsZS5tbGFfZGVjb2RlKHFVLCBxVSwgcGwsIGRub3BlLCBkbm9wZSwgYnMgKiBuaCwgc2wsIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlKQ0KICAgIHFVID0gcVUudmlldyhicywgbmgsIGRub3BlICsgZHJvcGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFticywgbmgsIGRub3BlICsgZHJvcGVdDQoNCiAgICBrdl9jYWNoZS5kYXRhWzosIHBsOnBsK3NsLCA6XSA9ICh4IEAgd0RLVi5UKS52aWV3KGJzLCBzbCwgZGt2ICsgZHJvcGUpICAgICAgIyBbYnMsIHNsLCBka3YgKyBkcm9wZV0gPSBbYnMsIGRdIEAgW2RrdiArIGRyb3BlLCBkXQ0KICAgIGt2X2NhY2hlLnNlcV9sZW4gKz0gMQ0KICAgICMga1IgPSByb3BlKGt2X2NhY2hlLmRhdGFbOiwgOnBsK3NsLCBka3Y6XSwgMCkudmlldyhicywgcGwrc2wsIGRyb3BlKQ0KICAgIGtSID0gdG9yY2guZW1wdHkoKGJzLCBwbCArIHNsLCBkcm9wZSksIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKQ0KICAgIG1vZHVsZS5tbGFfZGVjb2RlKGt2X2NhY2hlLmRhdGEsIGtSLCAwLCBka3YsIDAsIGJzLCBwbCArIHNsLCBkcm9wZSwgbXNsICogKGRrdiArIGRyb3BlKSwgZGt2ICsgZHJvcGUsIChwbCArIHNsKSAqIGRyb3BlLCBkcm9wZSkNCg0KICAgIHdVS1YgPSB3VUtWLnZpZXcobmgsIGRub3BlICsgZHYsIGRrdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFtuaCwgZG5vcGUgKyBkdiwgZGt2XQ0KICAgICMgcUN3VUsgPSB0b3JjaC5lbXB0eSgoYnMsIG5oLCBka3YpLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykNCiAgICAjIGZvciBpX25oIGluIHJhbmdlKG5oKToNCiAgICAjICAgICBxQ3dVS1s6LCBpX25oLCA6XSA9IHFVWzosIGlfbmgsIDpkbm9wZV0gQCB3VUtWW2lfbmgsIDpkbm9wZSwgOl0NCiAgICBxQ3dVSyA9IHRvcmNoLmJtbShxVVs6LCA6LCA6ZG5vcGVdLnRyYW5zcG9zZSgwLCAxKSwgd1VLVls6LCA6ZG5vcGUsIDpdKSAgICAgIyBbbmgsIGJzLCBka3ZdID0gW2JzLCBuaCwgZG5vcGVdIEAgW25oLCBkbm9wZSwgZGt2XQ0KDQogICAgIyBxayA9IHRvcmNoLmVtcHR5KChicywgbmgsIHBsK3NsKSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT0nY3VkYScpDQogICAgIyBmb3IgaV9icyBpbiByYW5nZShicyk6DQogICAgIyAgICAgcWtbaV9icywgOiwgOl0gPSBxQ3dVS1tpX2JzLCA6LCA6XSBAIGt2X2NhY2hlLmRhdGFbaV9icywgOnBsK3NsLCA6ZGt2XS5UICsgcVVbaV9icywgOiwgZG5vcGU6XSBAIGtSW2lfYnMsIDpwbCtzbCwgOl0uVA0KICAgIHFrID0gdG9yY2guYm1tKHFDd1VLLnRyYW5zcG9zZSgwLCAxKSwga3ZfY2FjaGUuZGF0YVs6LCA6cGwrc2wsIDpka3ZdLnRyYW5zcG9zZSgxLCAyKSkgIyBbYnMsIG5oLCBwbCtzbF0gPSBbbmgsIGJzLCBka3ZdIEAgW2JzLCBwbCtzbCwgZGt2XQ0KICAgIHFrICs9IHRvcmNoLmJtbShxVVs6LCA6LCBkbm9wZTpdLCBrUi50cmFuc3Bvc2UoMSwgMikpICAgICAgICAgICAgICAgICAgICAgICAjIFticywgbmgsIHBsK3NsXSA9IFticywgbmgsIGRyb3BlXSBAIFticywgcGwrc2wsIGRyb3BlXQ0KICAgICMgcWsgPSB0b3JjaC5ibW0ocUN3VUssIGt2X2NhY2hlLmRhdGFbOiwgOnBsK3NsLCA6ZGt2XS50cmFuc3Bvc2UoMSwgMikpICsgdG9yY2guYm1tKHFVWzosIDosIGRub3BlOl0sIGtSLnRyYW5zcG9zZSgxLCAyKSkNCg0KICAgICMgcWsgPSB0b3JjaC5zb2Z0bWF4KHFrIC8gKChkbm9wZSArIGRyb3BlKSAqKiAwLjUpLCBkaW09LTEpICAgICAgICAgICAgICAgICAjIFticywgbmgsIHBsK3NsXQ0KICAgIG1vZHVsZS5kaXZfc29mdG1heChxaywgYnMsIG5oLCBwbCArIHNsLCBkbm9wZSwgZHJvcGUpICMgQ3VzdG9tIHNvZnRtYXgga2VybmVsDQoNCg0KICAgICMgcWtrdkMgPSB0b3JjaC5lbXB0eSgoYnMsIG5oLCBka3YpLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykNCiAgICAjIGZvciBpX2JzIGluIHJhbmdlKGJzKToNCiAgICAjICAgICBxa2t2Q1tpX2JzLCA6LCA6XSA9IHFrW2lfYnMsIDosIDpdIEAga3ZfY2FjaGUuZGF0YVtpX2JzLCA6cGwrc2wsIDpka3ZdDQogICAgcWtrdkMgPSB0b3JjaC5ibW0ocWssIGt2X2NhY2hlLmRhdGFbOiwgOnBsK3NsLCA6ZGt2XSkgICAgICAgICAgICAgICAgICAgICAgICMgW2JzLCBuaCwgZGt2XSA9IFticywgbmgsIHBsK3NsXSBAIFticywgcGwrc2wsIGRrdl0NCg0KICAgICMgcWt2ID0gdG9yY2guZW1wdHkoKGJzLCBuaCwgZHYpLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykNCiAgICAjIGZvciBpX25oIGluIHJhbmdlKG5oKToNCiAgICAjICAgICBxa3ZbOiwgaV9uaCwgOl0gPSBxa2t2Q1s6LCBpX25oLCA6XSBAIHdVS1ZbaV9uaCwgZG5vcGU6LCA6XS5UDQogICAgcWt2ID0gdG9yY2guYm1tKHFra3ZDLnRyYW5zcG9zZSgwLCAxKSwgd1VLVls6LCBkbm9wZTosIDpdLnRyYW5zcG9zZSgxLCAyKSkudHJhbnNwb3NlKDAsIDEpICMgW2JzLCBuaCwgZHZdID0gW2JzLCBuaCwgZGt2XSBAIFtuaCwgZHYsIGRrdl0NCg0KICAgIG91dHB1dCA9IChxa3YucmVzaGFwZShicywgbmggKiBkdikgQCB3Ty5UKS52aWV3KGJzLCBzbCwgZCkgICAgICAgICAgICAgICAgICAjIFticywgc2wsIGRdID0gW2JzLCBuaCAqIGR2XSBAIFtkLCBuaCAqIGR2XQ0KDQogICAgcmV0dXJuIG91dHB1dCwga3ZfY2FjaGUuZGF0YQ==

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

- aW1wb3J0IG9zDQpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicNCmltcG9ydCB0b3JjaA0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KDQpDUFBfV1JBUFBFUiA9ICIiIg0Kdm9pZCBtbGFfZGVjb2RlKHRvcmNoOjpUZW5zb3IgeCwgdG9yY2g6OlRlbnNvciB5LCBpbnQgcG9zLCBpbnQgeG9mZiwgaW50IHlvZmYsDQogICAgICAgICAgICAgICAgaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMik7DQoiIiINCg0KQ1VEQV9TUkMgPSAiIiINCiNpbmNsdWRlIDxoaXAvaGlwX3J1bnRpbWUuaD4NCiNpbmNsdWRlIDxoaXAvYW1kX2RldGFpbC9hbWRfaGlwX2JmMTYuaD4NCg0KX19nbG9iYWxfXyB2b2lkIHJvcGVfM2Rfa2VybmVsKGludCBkMCwgaW50IGQxLCBpbnQgZDIsIGludCB4czEsIGludCB4czIsIGludCB5czEsIGludCB5czIsIGludCBwb3MsDQogICAgICAgIGNvbnN0IF9faGlwX2JmbG9hdDE2ICp4LCBfX2hpcF9iZmxvYXQxNiAqeSkgew0KICAgIGludCBkMF9pZHggPSBibG9ja0lkeC54Ow0KICAgIGludCBkMV9pZHggPSBibG9ja0lkeC55Ow0KICAgIF9faGlwX2JmbG9hdDE2IGlkeCA9IF9faGFkZCgoX19oaXBfYmZsb2F0MTYpcG9zLCBfX2hpcF9iZmxvYXQxNihkMV9pZHgpKTsNCiAgICBmb3IgKGludCBkMl9pZHggPSB0aHJlYWRJZHgueDsgZDJfaWR4IDwgZDIvMjsgZDJfaWR4ICs9IGJsb2NrRGltLngpIHsNCiAgICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpeFtkMF9pZHggKiB4czEgKyBkMV9pZHggKiB4czIgKyBkMl9pZHhdOw0KICAgICAgICBmbG9hdCB4MiA9IChmbG9hdCl4W2QwX2lkeCAqIHhzMSArIGQxX2lkeCAqIHhzMiArIGQyX2lkeCArIGQyLzJdOw0KICAgICAgICBfX2hpcF9iZmxvYXQxNiB0aGV0YSA9IChfX2hpcF9iZmxvYXQxNilkMl9pZHg7DQogICAgICAgIHRoZXRhID0gX19obXVsKHRoZXRhLCAoX19oaXBfYmZsb2F0MTYpKC0yLjBmKSk7DQogICAgICAgIHRoZXRhID0gX19oZGl2KHRoZXRhLCAoX19oaXBfYmZsb2F0MTYpZDIpOw0KICAgICAgICB0aGV0YSA9IF9fcG93ZigoX19oaXBfYmZsb2F0MTYpMTAwMDAuMGYsIHRoZXRhKTsNCiAgICAgICAgdGhldGEgPSBfX2htdWwodGhldGEsIChfX2hpcF9iZmxvYXQxNilpZHgpOw0KICAgICAgICBfX2hpcF9iZmxvYXQxNiBjb3MgPSBjb3NmKChmbG9hdCl0aGV0YSk7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHNpbiA9IHNpbmYoKGZsb2F0KXRoZXRhKTsNCiAgICAgICAgeVtkMF9pZHggKiB5czEgKyBkMV9pZHggKiB5czIgKyBkMl9pZHggICAgICAgXSA9IF9faHN1YihfX2htdWwoeDEsIGNvcyksIF9faG11bCh4Miwgc2luKSk7DQogICAgICAgIHlbZDBfaWR4ICogeXMxICsgZDFfaWR4ICogeXMyICsgZDJfaWR4ICsgZDIvMl0gPSBfX2hhZGQoX19obXVsKHgyLCBjb3MpLCBfX2htdWwoeDEsIHNpbikpOw0KICAgIH0NCn0NCg0Kdm9pZCBtbGFfZGVjb2RlKHRvcmNoOjpUZW5zb3IgeCwgdG9yY2g6OlRlbnNvciB5LCBpbnQgcG9zLCBpbnQgeG9mZiwgaW50IHlvZmYsDQogICAgICAgICAgICAgICAgaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMikgew0KDQogICAgX19oaXBfYmZsb2F0MTYgKnhfcHRyID0gKF9faGlwX2JmbG9hdDE2ICopeC5kYXRhX3B0cigpICsgeG9mZjsNCiAgICBfX2hpcF9iZmxvYXQxNiAqeV9wdHIgPSAoX19oaXBfYmZsb2F0MTYgKil5LmRhdGFfcHRyKCkgKyB5b2ZmOw0KICAgIHJvcGVfM2Rfa2VybmVsPDw8ZGltMyhkMCwgZDEpLCBkaW0zKDY0KT4+PihkMCwgZDEsIGQyLCB4czEsIHhzMiwgeXMxLCB5czIsIHBvcywgeF9wdHIsIHlfcHRyKTsNCn0NCiIiIg0KDQppbXBvcnQgb3MNCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiDQoNCm1vZHVsZSA9IGxvYWRfaW5saW5lKA0KICAgIG5hbWU9J21sYV9kZWNvZGUnLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnbWxhX2RlY29kZSddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMyIsICItdyJdLA0KKQ0KDQpkZWYgcm9wZSh4OiB0b3JjaC5UZW5zb3IsIHBvczogaW50KSAtPiB0b3JjaC5UZW5zb3I6DQoNCiAgICBuLCBzbCwgZCA9IHguc2hhcGUNCg0KICAgIHRoZXRhID0gdG9yY2guYXJhbmdlKGQgLy8gMiwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT0nY3VkYScpDQogICAgdGhldGEgPSAxMDAwMCAqKiAoLTIgKiB0aGV0YSAvIGQpDQogICAgaWR4ID0gdG9yY2guYXJhbmdlKHBvcywgcG9zICsgc2wsIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKQ0KICAgIGlkeF90aGV0YSA9IHRvcmNoLmVpbnN1bSgncyxkLT5zZCcsIGlkeCwgdGhldGEpDQogICAgY29zID0gdG9yY2guY29zKGlkeF90aGV0YSkudG8odG9yY2guYmZsb2F0MTYpDQogICAgc2luID0gdG9yY2guc2luKGlkeF90aGV0YSkudG8odG9yY2guYmZsb2F0MTYpDQoNCiAgICB5ID0gdG9yY2guZW1wdHlfbGlrZSh4KQ0KICAgIHgxID0geFs6LCA6LCA6ZC8vMl0NCiAgICB4MiA9IHhbOiwgOiwgZC8vMjpdDQogICAgeVs6LCA6LCA6ZC8vMl0gPSB4MSAqIGNvcyAtIHgyICogc2luDQogICAgeVs6LCA6LCBkLy8yOl0gPSB4MiAqIGNvcyArIHgxICogc2luDQogICAgcmV0dXJuIHkNCg0KZGVmIGN1c3RvbV9rZXJuZWwoZGF0YTogaW5wdXRfdCkgLT4gb3V0cHV0X3Q6DQogICAgY29uZmlnLCB4LCBrdl9jYWNoZSA9IGRhdGENCg0KICAgIGJzID0gY29uZmlnLmJhdGNoX3NpemUNCiAgICBzbCA9IGNvbmZpZy5zZXFfbGVuDQogICAgcGwgPSBrdl9jYWNoZS5zZXFfbGVuDQogICAgbXNsID0gY29uZmlnLm1heF9zZXFfbGVuDQogICAgbmggPSBjb25maWcubl9oZWFkcw0KICAgIGQgPSAgY29uZmlnLmRpbQ0KICAgIGRxID0gY29uZmlnLnFfbG9yYV9yYW5rDQogICAgZGt2ID0gY29uZmlnLmt2X2xvcmFfcmFuaw0KICAgIGRub3BlID0gY29uZmlnLnFrX25vcGVfaGVhZF9kaW0NCiAgICBkcm9wZSA9IGNvbmZpZy5xa19yb3BlX2hlYWRfZGltDQogICAgZHYgPSBjb25maWcudl9oZWFkX2RpbQ0KDQogICAgd0RRICA9IGNvbmZpZy5RX3Byb2pfZG93bl93ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAjIFtkcSwgZF0NCiAgICB3REtWID0gY29uZmlnLktWX3Byb2pfZG93bl93ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICMgW2RrdiArIGRyb3BlLCBkXQ0KICAgIHdVUSAgPSBjb25maWcuUV9wcm9qX3VwX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbbmggKiAoZG5vcGUgKyBkcm9wZSksIGRxXQ0KICAgIHdVS1YgPSBjb25maWcuS1ZfcHJval91cF93ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgIyBbbmggKiAoZG5vcGUgKyBkdiksIGRrdl0NCiAgICB3TyAgID0gY29uZmlnLndvX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2QsIG5oICogZHZdDQoNCiAgICB4ID0geC52aWV3KGJzLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2JzLCBkXQ0KICAgIHFEID0geCBAIHdEUS5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbYnMsIGRxXQ0KICAgIHFVID0gKHFEIEAgd1VRLlQpLnZpZXcoYnMgKiBuaCwgc2wsIGRub3BlICsgZHJvcGUpICAgICAgIyBbYnMqbmgsIHNsLCBkbm9wZSArIGRyb3BlXQ0KICAgICMgcVVbOiwgOiwgZG5vcGU6XSA9IHJvcGUocVVbOiwgOiwgZG5vcGU6XSwgcGwpDQogICAgbW9kdWxlLm1sYV9kZWNvZGUocVUsIHFVLCBwbCwgZG5vcGUsIGRub3BlLCBicypuaCwgc2wsIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlKQ0KDQogICAgcVUgPSBxVS52aWV3KGJzLCBuaCwgZG5vcGUgKyBkcm9wZSkgICAgICAgICAgICAgICAgICAgICAjIFticywgbmgsIGRub3BlICsgZHJvcGVdDQoNCiAgICB3REtWID0gd0RLVi52aWV3KGRrdiArIGRyb3BlLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbZGt2ICsgZHJvcGUsIGRdDQogICAga3ZfY2FjaGUuZGF0YVs6LCBwbDpwbCsxLCA6XSA9ICh4IEAgd0RLVi5UKS52aWV3KGJzLCAxLCBka3YgKyBkcm9wZSkNCiAgICBrdl9jYWNoZS5zZXFfbGVuICs9IDENCiAgICAjIGtSID0gcm9wZShrdl9jYWNoZS5kYXRhWzosIDpwbCsxLCBka3Y6XSwgMCkudmlldyhicywgcGwrc2wsIGRyb3BlKSAgICAgICAgICAjIFticywgcGwrc2wsIGRyb3BlXQ0KICAgIGtSID0gdG9yY2guZW1wdHkoKGJzLCBwbCArIHNsLCBkcm9wZSksIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKQ0KICAgIG1vZHVsZS5tbGFfZGVjb2RlKGt2X2NhY2hlLmRhdGEsIGtSLCAwLCBka3YsIDAsIGJzLCBwbCArIHNsLCBkcm9wZSwgbXNsICogKGRrdiArIGRyb3BlKSwgZGt2ICsgZHJvcGUsIChwbCArIHNsKSAqIGRyb3BlLCBkcm9wZSkNCg0KICAgIHdVS1YgPSB3VUtWLnZpZXcobmgsIGRub3BlICsgZHYsIGRrdikNCiAgICAjIHFDd1VLID0gdG9yY2guZW1wdHkoKGJzLCBuaCwgZGt2KSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT0nY3VkYScpDQogICAgIyBmb3IgaV9uaCBpbiByYW5nZShuaCk6DQogICAgIyAgICAgcUN3VUtbOiwgaV9uaCwgOl0gPSBxVVs6LCBpX25oLCA6ZG5vcGVdIEAgd1VLVltpX25oLCA6ZG5vcGUsIDpdDQogICAgcUN3VUsgPSB0b3JjaC5ibW0ocVVbOiwgOiwgOmRub3BlXS50cmFuc3Bvc2UoMCwgMSksIHdVS1ZbOiwgOmRub3BlLCA6XSkudHJhbnNwb3NlKDAsIDEpICAjIFticywgbmgsIGRrdl0NCg0KICAgICMgcWsgPSB0b3JjaC5lbXB0eSgoYnMsIG5oLCBwbCtzbCksIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKQ0KICAgICMgZm9yIGlfYnMgaW4gcmFuZ2UoYnMpOg0KICAgICMgICAgIHFrW2lfYnMsIDosIDpdID0gcUN3VUtbaV9icywgOiwgOl0gQCBrdl9jYWNoZS5kYXRhW2lfYnMsIDpwbCtzbCwgOmRrdl0uVCArIHFVW2lfYnMsIDosIGRub3BlOl0gQCBrUltpX2JzLCA6cGwrc2wsIDpdLlQNCiAgICBxayA9IHRvcmNoLmJtbShxQ3dVSywga3ZfY2FjaGUuZGF0YVs6LCA6cGwrc2wsIDpka3ZdLnRyYW5zcG9zZSgxLCAyKSkgKyB0b3JjaC5ibW0ocVVbOiwgOiwgZG5vcGU6XSwga1IudHJhbnNwb3NlKDEsIDIpKQ0KICAgIHFrID0gdG9yY2guc29mdG1heChxayAvICgoZG5vcGUgKyBkcm9wZSkgKiogMC41KSwgZGltPS0xKSAgICAgICAgICAgICAgICAgICAjIFticywgbmgsIHBsK3NsXQ0KDQogICAgIyBxa2t2QyA9IHRvcmNoLmVtcHR5KChicywgbmgsIGRrdiksIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKQ0KICAgICMgZm9yIGlfYnMgaW4gcmFuZ2UoYnMpOg0KICAgICMgICAgIHFra3ZDW2lfYnMsIDosIDpdID0gcWtbaV9icywgOiwgOl0gQCBrdl9jYWNoZS5kYXRhW2lfYnMsIDpwbCtzbCwgOmRrdl0NCiAgICBxa2t2QyA9IHRvcmNoLmJtbShxaywga3ZfY2FjaGUuZGF0YVs6LCA6cGwrc2wsIDpka3ZdKSAgICAgICAgICAgICAgICAgICAgICAgIyBbYnMsIG5oLCBka3ZdDQoNCiAgICAjIHFrdiA9IHRvcmNoLmVtcHR5KChicywgbmgsIGR2KSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT0nY3VkYScpDQogICAgIyBmb3IgaV9uaCBpbiByYW5nZShuaCk6DQogICAgIyAgICAgcWt2WzosIGlfbmgsIDpdID0gcWtrdkNbOiwgaV9uaCwgOl0gQCB3VUtWW2lfbmgsIGRub3BlOiwgOl0uVA0KICAgIHFrdiA9IHRvcmNoLmJtbShxa2t2Qy50cmFuc3Bvc2UoMCwgMSksIHdVS1ZbOiwgZG5vcGU6LCA6XS50cmFuc3Bvc2UoMSwgMikpLnRyYW5zcG9zZSgwLCAxKQ0KDQogICAgb3V0cHV0ID0gKHFrdi5yZXNoYXBlKGJzLCBuaCAqIGR2KSBAIHdPLlQpLnZpZXcoYnMsIHNsLCBkKSAgIyBbYnMsIHNsLCBkXQ0KDQogICAgcmV0dXJuIG91dHB1dCwga3ZfY2FjaGUuZGF0YQ==
No newline at end of file
+ aW1wb3J0IG9zDQpvcy5lbnZpcm9uWydQWVRPUkNIX1JPQ01fQVJDSCddID0gJ2dmeDk0MicNCmltcG9ydCB0b3JjaA0KZnJvbSB0b3JjaC51dGlscy5jcHBfZXh0ZW5zaW9uIGltcG9ydCBsb2FkX2lubGluZQ0KZnJvbSB0YXNrIGltcG9ydCBpbnB1dF90LCBvdXRwdXRfdA0KDQpDUFBfV1JBUFBFUiA9ICIiIg0Kdm9pZCBtbGFfZGVjb2RlKHRvcmNoOjpUZW5zb3IgeCwgdG9yY2g6OlRlbnNvciB5LCBpbnQgcG9zLCBpbnQgeG9mZiwgaW50IHlvZmYsDQogICAgICAgICAgICAgICAgaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMik7DQp2b2lkIGRpdl9zb2Z0bWF4KHRvcmNoOjpUZW5zb3IgcWssIGludCBicywgaW50IG5oLCBpbnQgc2wsIGludCBkbm9wZSwgaW50IGRyb3BlKTsNCiIiIg0KDQpDVURBX1NSQyA9ICIiIg0KI2luY2x1ZGUgPGhpcC9oaXBfcnVudGltZS5oPg0KI2luY2x1ZGUgPGhpcC9hbWRfZGV0YWlsL2FtZF9oaXBfYmYxNi5oPg0KDQpfX2dsb2JhbF9fIHZvaWQgcm9wZV8zZF9rZXJuZWwoaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMiwgaW50IHBvcywNCiAgICAgICAgY29uc3QgX19oaXBfYmZsb2F0MTYgKngsIF9faGlwX2JmbG9hdDE2ICp5KSB7DQogICAgaW50IGQwX2lkeCA9IGJsb2NrSWR4Lng7DQogICAgaW50IGQxX2lkeCA9IGJsb2NrSWR4Lnk7DQogICAgX19oaXBfYmZsb2F0MTYgaWR4ID0gX19oYWRkKChfX2hpcF9iZmxvYXQxNilwb3MsIF9faGlwX2JmbG9hdDE2KGQxX2lkeCkpOw0KICAgIGZvciAoaW50IGQyX2lkeCA9IHRocmVhZElkeC54OyBkMl9pZHggPCBkMi8yOyBkMl9pZHggKz0gYmxvY2tEaW0ueCkgew0KICAgICAgICBmbG9hdCB4MSA9IChmbG9hdCl4W2QwX2lkeCAqIHhzMSArIGQxX2lkeCAqIHhzMiArIGQyX2lkeF07DQogICAgICAgIGZsb2F0IHgyID0gKGZsb2F0KXhbZDBfaWR4ICogeHMxICsgZDFfaWR4ICogeHMyICsgZDJfaWR4ICsgZDIvMl07DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHRoZXRhID0gKF9faGlwX2JmbG9hdDE2KWQyX2lkeDsNCiAgICAgICAgdGhldGEgPSBfX2htdWwodGhldGEsIChfX2hpcF9iZmxvYXQxNikoLTIuMGYpKTsNCiAgICAgICAgdGhldGEgPSBfX2hkaXYodGhldGEsIChfX2hpcF9iZmxvYXQxNilkMik7DQogICAgICAgIHRoZXRhID0gX19wb3dmKChfX2hpcF9iZmxvYXQxNikxMDAwMC4wZiwgdGhldGEpOw0KICAgICAgICB0aGV0YSA9IF9faG11bCh0aGV0YSwgKF9faGlwX2JmbG9hdDE2KWlkeCk7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IGNvcyA9IGNvc2YoKGZsb2F0KXRoZXRhKTsNCiAgICAgICAgX19oaXBfYmZsb2F0MTYgc2luID0gc2luZigoZmxvYXQpdGhldGEpOw0KICAgICAgICB5W2QwX2lkeCAqIHlzMSArIGQxX2lkeCAqIHlzMiArIGQyX2lkeCAgICAgICBdID0gX19oc3ViKF9faG11bCh4MSwgY29zKSwgX19obXVsKHgyLCBzaW4pKTsNCiAgICAgICAgeVtkMF9pZHggKiB5czEgKyBkMV9pZHggKiB5czIgKyBkMl9pZHggKyBkMi8yXSA9IF9faGFkZChfX2htdWwoeDIsIGNvcyksIF9faG11bCh4MSwgc2luKSk7DQogICAgfQ0KfQ0KDQpfX2dsb2JhbF9fIHZvaWQgcm9wZV8zZF9rZXJuZWxfZDBhbGlnbmVkMihpbnQgZDAsIGludCBkMSwgaW50IGQyLCBpbnQgeHMxLCBpbnQgeHMyLCBpbnQgeXMxLCBpbnQgeXMyLCBpbnQgcG9zLA0KICAgICAgICBjb25zdCBfX2hpcF9iZmxvYXQxNiAqeCwgX19oaXBfYmZsb2F0MTYgKnkpIHsNCiAgICBpbnQgZDBfaWR4ID0gYmxvY2tJZHgueCAqIDIgKyB0aHJlYWRJZHgueCAvIDMyOw0KICAgIGludCBkMV9pZHggPSBibG9ja0lkeC55Ow0KICAgIF9faGlwX2JmbG9hdDE2IGlkeCA9IF9faGFkZCgoX19oaXBfYmZsb2F0MTYpcG9zLCBfX2hpcF9iZmxvYXQxNihkMV9pZHgpKTsNCiAgICBmb3IgKGludCBkMl9pZHggPSB0aHJlYWRJZHgueCAlIDMyOyBkMl9pZHggPCBkMi8yOyBkMl9pZHggKz0gMzIpIHsNCiAgICAgICAgZmxvYXQgeDEgPSAoZmxvYXQpeFtkMF9pZHggKiB4czEgKyBkMV9pZHggKiB4czIgKyBkMl9pZHhdOw0KICAgICAgICBmbG9hdCB4MiA9IChmbG9hdCl4W2QwX2lkeCAqIHhzMSArIGQxX2lkeCAqIHhzMiArIGQyX2lkeCArIGQyLzJdOw0KICAgICAgICBfX2hpcF9iZmxvYXQxNiB0aGV0YSA9IChfX2hpcF9iZmxvYXQxNilkMl9pZHg7DQogICAgICAgIHRoZXRhID0gX19obXVsKHRoZXRhLCAoX19oaXBfYmZsb2F0MTYpKC0yLjBmKSk7DQogICAgICAgIHRoZXRhID0gX19oZGl2KHRoZXRhLCAoX19oaXBfYmZsb2F0MTYpZDIpOw0KICAgICAgICB0aGV0YSA9IF9fcG93ZigoX19oaXBfYmZsb2F0MTYpMTAwMDAuMGYsIHRoZXRhKTsNCiAgICAgICAgdGhldGEgPSBfX2htdWwodGhldGEsIChfX2hpcF9iZmxvYXQxNilpZHgpOw0KICAgICAgICBfX2hpcF9iZmxvYXQxNiBjb3MgPSBjb3NmKChmbG9hdCl0aGV0YSk7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHNpbiA9IHNpbmYoKGZsb2F0KXRoZXRhKTsNCiAgICAgICAgeVtkMF9pZHggKiB5czEgKyBkMV9pZHggKiB5czIgKyBkMl9pZHggICAgICAgXSA9IF9faHN1YihfX2htdWwoeDEsIGNvcyksIF9faG11bCh4Miwgc2luKSk7DQogICAgICAgIHlbZDBfaWR4ICogeXMxICsgZDFfaWR4ICogeXMyICsgZDJfaWR4ICsgZDIvMl0gPSBfX2hhZGQoX19obXVsKHgyLCBjb3MpLCBfX2htdWwoeDEsIHNpbikpOw0KICAgIH0NCn0NCg0Kdm9pZCBtbGFfZGVjb2RlKHRvcmNoOjpUZW5zb3IgeCwgdG9yY2g6OlRlbnNvciB5LCBpbnQgcG9zLCBpbnQgeG9mZiwgaW50IHlvZmYsDQogICAgICAgICAgICAgICAgaW50IGQwLCBpbnQgZDEsIGludCBkMiwgaW50IHhzMSwgaW50IHhzMiwgaW50IHlzMSwgaW50IHlzMikgew0KDQogICAgX19oaXBfYmZsb2F0MTYgKnhfcHRyID0gKF9faGlwX2JmbG9hdDE2ICopeC5kYXRhX3B0cigpICsgeG9mZjsNCiAgICBfX2hpcF9iZmxvYXQxNiAqeV9wdHIgPSAoX19oaXBfYmZsb2F0MTYgKil5LmRhdGFfcHRyKCkgKyB5b2ZmOw0KICAgIGlmIChkMCAlIDIgPT0gMCkgew0KICAgICAgICByb3BlXzNkX2tlcm5lbF9kMGFsaWduZWQyPDw8ZGltMyhkMC8yLCBkMSksIGRpbTMoNjQpPj4+KGQwLCBkMSwgZDIsIHhzMSwgeHMyLCB5czEsIHlzMiwgcG9zLCB4X3B0ciwgeV9wdHIpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgcm9wZV8zZF9rZXJuZWw8PDxkaW0zKGQwLCBkMSksIGRpbTMoNjQpPj4+KGQwLCBkMSwgZDIsIHhzMSwgeHMyLCB5czEsIHlzMiwgcG9zLCB4X3B0ciwgeV9wdHIpOw0KICAgIH0NCg0KfQ0KDQpfX2dsb2JhbF9fIHZvaWQgZGl2X3NvZnRtYXhfa2VybmVsKF9faGlwX2JmbG9hdDE2ICpwdHIsIGludCBicywgaW50IG5oLCBpbnQgc2wsIGZsb2F0IHNjYWxlKSB7DQogICAgaW50IHRoaXNfYnMgPSBibG9ja0lkeC54Ow0KICAgIGludCB0aGlzX25oID0gYmxvY2tJZHgueTsNCiAgICBpbnQgaWR4ID0gdGhpc19icyAqIG5oICogc2wgKyB0aGlzX25oICogc2w7DQoNCiAgICBfX3NoYXJlZF9fIF9faGlwX2JmbG9hdDE2IHNfdmFsWzgxOTJdOyAvLyBtc2wgPSA4MTkyDQogICAgX19zaGFyZWRfXyBmbG9hdCBzdW1fdmFsWzI1Nl07DQoNCiAgICBmbG9hdCB0aHJlYWRfc3VtID0gMC4wZjsNCiAgICBmb3IgKGludCBpID0gdGhyZWFkSWR4Lng7IGkgPCBzbDsgaSArPSBibG9ja0RpbS54KSB7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHZhbCA9IHB0cltpZHggKyBpXTsNCiAgICAgICAgZmxvYXQgc2NhbGVkX3ZhbCA9IChmbG9hdCl2YWwgKiBzY2FsZTsgLy8gU2NhbGUgYnkgMS9zcXJ0KGRub3BlICsgZHJvcGUpDQogICAgICAgIGZsb2F0IGV4cF92YWwgPSBleHBmKHNjYWxlZF92YWwpOw0KICAgICAgICB0aHJlYWRfc3VtICs9IGV4cF92YWw7DQogICAgICAgIHNfdmFsW2ldID0gKF9faGlwX2JmbG9hdDE2KWV4cF92YWw7DQogICAgfQ0KICAgIHN1bV92YWxbdGhyZWFkSWR4LnhdID0gdGhyZWFkX3N1bTsNCg0KICAgIF9fc3luY3RocmVhZHMoKTsNCg0KICAgIGlmICh0aHJlYWRJZHgueCA8IDE2KSB7DQogICAgICAgIHRocmVhZF9zdW0gPSAwLjBmOw0KICAgICAgICBmb3IgKGludCBpID0gdGhyZWFkSWR4Lng7IGkgPCBibG9ja0RpbS54OyBpICs9IDE2KSB7DQogICAgICAgICAgICB0aHJlYWRfc3VtICs9IHN1bV92YWxbaV07DQogICAgICAgIH0NCiAgICAgICAgc3VtX3ZhbFt0aHJlYWRJZHgueF0gPSB0aHJlYWRfc3VtOw0KICAgIH0NCiAgICBfX3N5bmN0aHJlYWRzKCk7DQoNCiAgICBpZiAodGhyZWFkSWR4LnggPT0gMCkgew0KICAgICAgICB0aHJlYWRfc3VtID0gMC4wZjsNCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7DQogICAgICAgICAgICB0aHJlYWRfc3VtICs9IHN1bV92YWxbaV07DQogICAgICAgIH0NCiAgICAgICAgc3VtX3ZhbFswXSA9IHRocmVhZF9zdW07DQogICAgfQ0KDQogICAgX19zeW5jdGhyZWFkcygpOw0KDQogICAgZmxvYXQgdG90YWxfc3VtID0gc3VtX3ZhbFswXTsNCiAgICBmb3IgKGludCBpID0gdGhyZWFkSWR4Lng7IGkgPCBzbDsgaSArPSBibG9ja0RpbS54KSB7DQogICAgICAgIF9faGlwX2JmbG9hdDE2IHZhbCA9IHNfdmFsW2ldOw0KICAgICAgICBmbG9hdCBzb2Z0bWF4X3ZhbCA9IChmbG9hdCl2YWwgLyB0b3RhbF9zdW07DQogICAgICAgIHB0cltpZHggKyBpXSA9IChfX2hpcF9iZmxvYXQxNilzb2Z0bWF4X3ZhbDsNCiAgICB9DQp9DQoNCnZvaWQgZGl2X3NvZnRtYXgodG9yY2g6OlRlbnNvciBxaywgaW50IGJzLCBpbnQgbmgsIGludCBzbCwgaW50IGRub3BlLCBpbnQgZHJvcGUpIHsNCiAgICBfX2hpcF9iZmxvYXQxNiAqcWtfcHRyID0gKF9faGlwX2JmbG9hdDE2ICopcWsuZGF0YV9wdHIoKTsNCiAgICBmbG9hdCBzY2FsZSA9IDEuMGYgLyBzcXJ0ZigoZmxvYXQpKGRub3BlICsgZHJvcGUpKTsNCiAgICBkaXZfc29mdG1heF9rZXJuZWw8PDxkaW0zKGJzLCBuaCksIGRpbTMoMjU2KT4+Pihxa19wdHIsIGJzLCBuaCwgc2wsIHNjYWxlKTsNCn0NCiIiIg0KDQppbXBvcnQgb3MNCm9zLmVudmlyb25bIkNYWCJdID0gImNsYW5nKysiDQoNCm1vZHVsZSA9IGxvYWRfaW5saW5lKA0KICAgIG5hbWU9J21sYV9kZWNvZGUnLA0KICAgIGNwcF9zb3VyY2VzPVtDUFBfV1JBUFBFUl0sDQogICAgY3VkYV9zb3VyY2VzPVtDVURBX1NSQ10sDQogICAgZnVuY3Rpb25zPVsnbWxhX2RlY29kZScsICdkaXZfc29mdG1heCddLA0KICAgIHZlcmJvc2U9VHJ1ZSwNCiAgICBleHRyYV9jdWRhX2NmbGFncz1bIi0tb2ZmbG9hZC1hcmNoPWdmeDk0MiIsICItc3RkPWMrKzIwIiwgIi1PMyIsICItdyJdLA0KKQ0KDQpkZWYgY3VzdG9tX2tlcm5lbChkYXRhOiBpbnB1dF90KSAtPiBvdXRwdXRfdDoNCiAgICBjb25maWcsIHgsIGt2X2NhY2hlID0gZGF0YQ0KDQogICAgYnMgPSBjb25maWcuYmF0Y2hfc2l6ZQ0KICAgIHNsID0gY29uZmlnLnNlcV9sZW4NCiAgICBwbCA9IGt2X2NhY2hlLnNlcV9sZW4NCiAgICBtc2wgPSBjb25maWcubWF4X3NlcV9sZW4NCiAgICBuaCA9IGNvbmZpZy5uX2hlYWRzDQogICAgZCA9ICBjb25maWcuZGltDQogICAgZHEgPSBjb25maWcucV9sb3JhX3JhbmsNCiAgICBka3YgPSBjb25maWcua3ZfbG9yYV9yYW5rDQogICAgZG5vcGUgPSBjb25maWcucWtfbm9wZV9oZWFkX2RpbQ0KICAgIGRyb3BlID0gY29uZmlnLnFrX3JvcGVfaGVhZF9kaW0NCiAgICBkdiA9IGNvbmZpZy52X2hlYWRfZGltDQoNCiAgICB3RFEgID0gY29uZmlnLlFfcHJval9kb3duX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbZHEsIGRdDQogICAgd0RLViA9IGNvbmZpZy5LVl9wcm9qX2Rvd25fd2VpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2RrdiArIGRyb3BlLCBkXQ0KICAgIHdVUSAgPSBjb25maWcuUV9wcm9qX3VwX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFtuaCAqIChkbm9wZSArIGRyb3BlKSwgZHFdDQogICAgd1VLViA9IGNvbmZpZy5LVl9wcm9qX3VwX3dlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW25oICogKGRub3BlICsgZHYpLCBka3ZdDQogICAgd08gICA9IGNvbmZpZy53b193ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2QsIG5oICogZHZdDQoNCiAgICB4ID0geC52aWV3KGJzLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbYnMsIGRdDQogICAgcUQgPSB4IEAgd0RRLlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgW2JzLCBkcV0gPSBbYnMsIGRdIEAgW2RxLCBkXQ0KICAgIHFVID0gKHFEIEAgd1VRLlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFticywgbmggKiAoZG5vcGUgKyBkcm9wZSldID0gW2JzLCBkcV0gQCBbbmggKiAoZG5vcGUgKyBkcm9wZSksIGRxXQ0KICAgIHFVID0gcVUudmlldyhicyAqIG5oLCBzbCwgZG5vcGUgKyBkcm9wZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFticyAqIG5oLCBzbCwgZG5vcGUgKyBkcm9wZV0NCiAgICAjIHFVWzosIDosIGRub3BlOl0gPSByb3BlKHFVWzosIDosIGRub3BlOl0sIHBsKQ0KICAgIG1vZHVsZS5tbGFfZGVjb2RlKHFVLCBxVSwgcGwsIGRub3BlLCBkbm9wZSwgYnMgKiBuaCwgc2wsIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlLCBkbm9wZSArIGRyb3BlKQ0KICAgIHFVID0gcVUudmlldyhicywgbmgsIGRub3BlICsgZHJvcGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFticywgbmgsIGRub3BlICsgZHJvcGVdDQoNCiAgICBrdl9jYWNoZS5kYXRhWzosIHBsOnBsK3NsLCA6XSA9ICh4IEAgd0RLVi5UKS52aWV3KGJzLCBzbCwgZGt2ICsgZHJvcGUpICAgICAgIyBbYnMsIHNsLCBka3YgKyBkcm9wZV0gPSBbYnMsIGRdIEAgW2RrdiArIGRyb3BlLCBkXQ0KICAgIGt2X2NhY2hlLnNlcV9sZW4gKz0gMQ0KICAgICMga1IgPSByb3BlKGt2X2NhY2hlLmRhdGFbOiwgOnBsK3NsLCBka3Y6XSwgMCkudmlldyhicywgcGwrc2wsIGRyb3BlKQ0KICAgIGtSID0gdG9yY2guZW1wdHkoKGJzLCBwbCArIHNsLCBkcm9wZSksIGR0eXBlPXRvcmNoLmJmbG9hdDE2LCBkZXZpY2U9J2N1ZGEnKQ0KICAgIG1vZHVsZS5tbGFfZGVjb2RlKGt2X2NhY2hlLmRhdGEsIGtSLCAwLCBka3YsIDAsIGJzLCBwbCArIHNsLCBkcm9wZSwgbXNsICogKGRrdiArIGRyb3BlKSwgZGt2ICsgZHJvcGUsIChwbCArIHNsKSAqIGRyb3BlLCBkcm9wZSkNCg0KICAgIHdVS1YgPSB3VUtWLnZpZXcobmgsIGRub3BlICsgZHYsIGRrdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFtuaCwgZG5vcGUgKyBkdiwgZGt2XQ0KICAgICMgcUN3VUsgPSB0b3JjaC5lbXB0eSgoYnMsIG5oLCBka3YpLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykNCiAgICAjIGZvciBpX25oIGluIHJhbmdlKG5oKToNCiAgICAjICAgICBxQ3dVS1s6LCBpX25oLCA6XSA9IHFVWzosIGlfbmgsIDpkbm9wZV0gQCB3VUtWW2lfbmgsIDpkbm9wZSwgOl0NCiAgICBxQ3dVSyA9IHRvcmNoLmJtbShxVVs6LCA6LCA6ZG5vcGVdLnRyYW5zcG9zZSgwLCAxKSwgd1VLVls6LCA6ZG5vcGUsIDpdKSAgICAgIyBbbmgsIGJzLCBka3ZdID0gW2JzLCBuaCwgZG5vcGVdIEAgW25oLCBkbm9wZSwgZGt2XQ0KDQogICAgIyBxayA9IHRvcmNoLmVtcHR5KChicywgbmgsIHBsK3NsKSwgZHR5cGU9dG9yY2guYmZsb2F0MTYsIGRldmljZT0nY3VkYScpDQogICAgIyBmb3IgaV9icyBpbiByYW5nZShicyk6DQogICAgIyAgICAgcWtbaV9icywgOiwgOl0gPSBxQ3dVS1tpX2JzLCA6LCA6XSBAIGt2X2NhY2hlLmRhdGFbaV9icywgOnBsK3NsLCA6ZGt2XS5UICsgcVVbaV9icywgOiwgZG5vcGU6XSBAIGtSW2lfYnMsIDpwbCtzbCwgOl0uVA0KICAgIHFrID0gdG9yY2guYm1tKHFDd1VLLnRyYW5zcG9zZSgwLCAxKSwga3ZfY2FjaGUuZGF0YVs6LCA6cGwrc2wsIDpka3ZdLnRyYW5zcG9zZSgxLCAyKSkgIyBbYnMsIG5oLCBwbCtzbF0gPSBbbmgsIGJzLCBka3ZdIEAgW2JzLCBwbCtzbCwgZGt2XQ0KICAgIHFrICs9IHRvcmNoLmJtbShxVVs6LCA6LCBkbm9wZTpdLCBrUi50cmFuc3Bvc2UoMSwgMikpICAgICAgICAgICAgICAgICAgICAgICAjIFticywgbmgsIHBsK3NsXSA9IFticywgbmgsIGRyb3BlXSBAIFticywgcGwrc2wsIGRyb3BlXQ0KICAgICMgcWsgPSB0b3JjaC5ibW0ocUN3VUssIGt2X2NhY2hlLmRhdGFbOiwgOnBsK3NsLCA6ZGt2XS50cmFuc3Bvc2UoMSwgMikpICsgdG9yY2guYm1tKHFVWzosIDosIGRub3BlOl0sIGtSLnRyYW5zcG9zZSgxLCAyKSkNCg0KICAgICMgcWsgPSB0b3JjaC5zb2Z0bWF4KHFrIC8gKChkbm9wZSArIGRyb3BlKSAqKiAwLjUpLCBkaW09LTEpICAgICAgICAgICAgICAgICAjIFticywgbmgsIHBsK3NsXQ0KICAgIG1vZHVsZS5kaXZfc29mdG1heChxaywgYnMsIG5oLCBwbCArIHNsLCBkbm9wZSwgZHJvcGUpICMgQ3VzdG9tIHNvZnRtYXgga2VybmVsDQoNCg0KICAgICMgcWtrdkMgPSB0b3JjaC5lbXB0eSgoYnMsIG5oLCBka3YpLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykNCiAgICAjIGZvciBpX2JzIGluIHJhbmdlKGJzKToNCiAgICAjICAgICBxa2t2Q1tpX2JzLCA6LCA6XSA9IHFrW2lfYnMsIDosIDpdIEAga3ZfY2FjaGUuZGF0YVtpX2JzLCA6cGwrc2wsIDpka3ZdDQogICAgcWtrdkMgPSB0b3JjaC5ibW0ocWssIGt2X2NhY2hlLmRhdGFbOiwgOnBsK3NsLCA6ZGt2XSkgICAgICAgICAgICAgICAgICAgICAgICMgW2JzLCBuaCwgZGt2XSA9IFticywgbmgsIHBsK3NsXSBAIFticywgcGwrc2wsIGRrdl0NCg0KICAgICMgcWt2ID0gdG9yY2guZW1wdHkoKGJzLCBuaCwgZHYpLCBkdHlwZT10b3JjaC5iZmxvYXQxNiwgZGV2aWNlPSdjdWRhJykNCiAgICAjIGZvciBpX25oIGluIHJhbmdlKG5oKToNCiAgICAjICAgICBxa3ZbOiwgaV9uaCwgOl0gPSBxa2t2Q1s6LCBpX25oLCA6XSBAIHdVS1ZbaV9uaCwgZG5vcGU6LCA6XS5UDQogICAgcWt2ID0gdG9yY2guYm1tKHFra3ZDLnRyYW5zcG9zZSgwLCAxKSwgd1VLVls6LCBkbm9wZTosIDpdLnRyYW5zcG9zZSgxLCAyKSkudHJhbnNwb3NlKDAsIDEpICMgW2JzLCBuaCwgZHZdID0gW2JzLCBuaCwgZGt2XSBAIFtuaCwgZHYsIGRrdl0NCg0KICAgIG91dHB1dCA9IChxa3YucmVzaGFwZShicywgbmggKiBkdikgQCB3Ty5UKS52aWV3KGJzLCBzbCwgZCkgICAgICAgICAgICAgICAgICAjIFticywgc2wsIGRdID0gW2JzLCBuaCAqIGR2XSBAIFtkLCBuaCAqIGR2XQ0KDQogICAgcmV0dXJuIG91dHB1dCwga3ZfY2FjaGUuZGF0YQ==
No newline at end of file

Best evidence level for this revision: reported

JSON