I2luY2x1ZGUgIi4uL2JuX2xjbC5oIgojaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MikKIyBpbmNsdWRlICIuLi9ibl9hc20uYyIgICAgICAgICAvKiBraW5kIG9mIGRpcnR5IGhhY2sgZm9yIFN1biBTdHVkaW8gKi8KI2Vsc2UKLyotCiAqIHg4Nl82NCBCSUdOVU0gYWNjZWxlcmF0b3IgdmVyc2lvbiAwLjEsIERlY2VtYmVyIDIwMDIuCiAqCiAqIEltcGxlbWVudGVkIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKICogcHJvamVjdC4KICoKICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCiAqIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuIFdhcnJhbnR5IG9mIGFueSBraW5kIGlzCiAqIGRpc2NsYWltZWQuCiAqCiAqIFEuIFZlcnNpb24gMC4xPyBJdCBkb2Vzbid0IHNvdW5kIGxpa2UgQW5keSwgaGUgdXNlZCB0byBhc3NpZ24gcmVhbAogKiAgICB2ZXJzaW9ucywgbGlrZSAxLjAuLi4KICogQS4gV2VsbCwgdGhhdCdzIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGJhc2ljYWxseSBhIHF1aWNrLW4tZGlydHkKICogICAgcHJvb2Ytb2YtY29uY2VwdCBoYWNrLiBBcyB5b3UgY2FuIHNlZSBpdCdzIGltcGxlbWVudGVkIHdpdGgKICogICAgaW5saW5lIGFzc2VtYmxlciwgd2hpY2ggbWVhbnMgdGhhdCB5b3UncmUgYm91bmQgdG8gR0NDIGFuZCB0aGF0CiAqICAgIHRoZXJlIG1pZ2h0IGJlIGVub3VnaCByb29tIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50LgogKgogKiBRLiBXaHkgaW5saW5lIGFzc2VtYmxlcj8KICogQS4geDg2XzY0IGZlYXR1cmVzIG93biBBQkkgd2hpY2ggSSdtIG5vdCBmYW1pbGlhciB3aXRoLiBUaGlzIGlzCiAqICAgIHdoeSBJIGRlY2lkZWQgdG8gbGV0IHRoZSBjb21waWxlciB0YWtlIGNhcmUgb2Ygc3Vicm91dGluZQogKiAgICBwcm9sb2d1ZS9lcGlsb2d1ZSBhcyB3ZWxsIGFzIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciByZWZlcmVuY2UuCiAqICAgIFdpbjY0IGltcGxlbWVudHMgZGlmZmVyZW50IEFCSSBmb3IgQU1ENjQsIGRpZmZlcmVudCBmcm9tIExpbnV4LgogKgogKiBRLiBIb3cgbXVjaCBmYXN0ZXIgZG9lcyBpdCBnZXQ/CiAqIEEuICdhcHBzL29wZW5zc2wgc3BlZWQgcnNhIGRzYScgb3V0cHV0IHdpdGggbm8tYXNtOgogKgogKiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKiAgICAgIHJzYSAgNTEyIGJpdHMgICAwLjAwMDZzICAgMC4wMDAxcyAgIDE2ODMuOCAgMTg0NTYuMgogKiAgICAgIHJzYSAxMDI0IGJpdHMgICAwLjAwMjhzICAgMC4wMDAycyAgICAzNTYuMCAgIDY0MDcuMAogKiAgICAgIHJzYSAyMDQ4IGJpdHMgICAwLjAxNzJzICAgMC4wMDA1cyAgICAgNTguMCAgIDE5NTcuOAogKiAgICAgIHJzYSA0MDk2IGJpdHMgICAwLjExNTVzICAgMC4wMDE4cyAgICAgIDguNyAgICA1NTUuNgogKiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKiAgICAgIGRzYSAgNTEyIGJpdHMgICAwLjAwMDVzICAgMC4wMDA2cyAgIDIxMDAuOCAgIDE3NjguMwogKiAgICAgIGRzYSAxMDI0IGJpdHMgICAwLjAwMTRzICAgMC4wMDE4cyAgICA2OTIuMyAgICA1NTkuMgogKiAgICAgIGRzYSAyMDQ4IGJpdHMgICAwLjAwNDlzICAgMC4wMDYxcyAgICAyMDQuNyAgICAxNjUuMAogKgogKiAgICAnYXBwcy9vcGVuc3NsIHNwZWVkIHJzYSBkc2EnIG91dHB1dCB3aXRoIHRoaXMgbW9kdWxlOgogKgogKiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKiAgICAgIHJzYSAgNTEyIGJpdHMgICAwLjAwMDRzICAgMC4wMDAwcyAgIDI3NjcuMSAgMzMyOTcuOQogKiAgICAgIHJzYSAxMDI0IGJpdHMgICAwLjAwMTJzICAgMC4wMDAxcyAgICA4NjcuNCAgMTQ2NzQuNwogKiAgICAgIHJzYSAyMDQ4IGJpdHMgICAwLjAwNjFzICAgMC4wMDAycyAgICAxNjQuMCAgIDUyNzAuMAogKiAgICAgIHJzYSA0MDk2IGJpdHMgICAwLjAzODRzICAgMC4wMDA2cyAgICAgMjYuMSAgIDE2NTAuOAogKiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKiAgICAgIGRzYSAgNTEyIGJpdHMgICAwLjAwMDJzICAgMC4wMDAzcyAgIDQ0NDIuMiAgIDM3ODYuMwogKiAgICAgIGRzYSAxMDI0IGJpdHMgICAwLjAwMDVzICAgMC4wMDA3cyAgIDE4MzUuMSAgIDE0OTcuNAogKiAgICAgIGRzYSAyMDQ4IGJpdHMgICAwLjAwMTZzICAgMC4wMDIwcyAgICA2MjAuNCAgICA1MDQuNgogKgogKiAgICBGb3IgdGhlIHJlZmVyZW5jZS4gSUEtMzIgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zCiAqICAgIHZlcnkgbXVjaCBsaWtlIDY0LWJpdCBjb2RlIGNvbXBpbGVkIHdpdGggbm8tYXNtIG9uIHRoZSBzYW1lCiAqICAgIG1hY2hpbmUuCiAqLwoKIyBpZmRlZiBfV0lONjQKIyAgZGVmaW5lIEJOX1VMT05HIHVuc2lnbmVkIGxvbmcgbG9uZwojIGVsc2UKIyAgZGVmaW5lIEJOX1VMT05HIHVuc2lnbmVkIGxvbmcKIyBlbmRpZgoKIyB1bmRlZiBtdWwKIyB1bmRlZiBtdWxfYWRkCiMgdW5kZWYgc3FyCgovKi0KICogIm0iKGEpLCAiK20iKHIpICAgICAgaXMgdGhlIHdheSB0byBmYXZvciBEaXJlY3RQYXRoILUtY29kZTsKICogImciKDApICAgICAgICAgICAgICAgbGV0IHRoZSBjb21waWxlciB0byBkZWNpZGUgd2hlcmUgZG9lcyBpdAogKiAgICAgICAgICAgICAgICAgICAgICB3YW50IHRvIGtlZXAgdGhlIHZhbHVlIG9mIHplcm87CiAqLwojIGRlZmluZSBtdWxfYWRkKHIsYSx3b3JkLGNhcnJ5KSBkbyB7ICAgXAogICAgICAgIHJlZ2lzdGVyIEJOX1VMT05HIGhpZ2gsbG93OyAgICAgXAogICAgICAgIGFzbSAoIm11bHEgJTMiICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiPWEiKGxvdyksIj1kIihoaWdoKSAgXAogICAgICAgICAgICAgICAgOiAiYSIod29yZCksIm0iKGEpICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIGFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgXAogICAgICAgICAgICAgICAgOiAiK3IiKGNhcnJ5KSwiK2QiKGhpZ2gpXAogICAgICAgICAgICAgICAgOiAiYSIobG93KSwiZyIoMCkgICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIGFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgXAogICAgICAgICAgICAgICAgOiAiK20iKHIpLCIrZCIoaGlnaCkgICAgXAogICAgICAgICAgICAgICAgOiAiciIoY2FycnkpLCJnIigwKSAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIGNhcnJ5PWhpZ2g7ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIH0gd2hpbGUgKDApCgojIGRlZmluZSBtdWwocixhLHdvcmQsY2FycnkpIGRvIHsgICAgICAgXAogICAgICAgIHJlZ2lzdGVyIEJOX1VMT05HIGhpZ2gsbG93OyAgICAgXAogICAgICAgIGFzbSAoIm11bHEgJTMiICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiPWEiKGxvdyksIj1kIihoaWdoKSAgXAogICAgICAgICAgICAgICAgOiAiYSIod29yZCksImciKGEpICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIGFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgXAogICAgICAgICAgICAgICAgOiAiK3IiKGNhcnJ5KSwiK2QiKGhpZ2gpXAogICAgICAgICAgICAgICAgOiAiYSIobG93KSwiZyIoMCkgICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIChyKT1jYXJyeSwgY2Fycnk9aGlnaDsgICAgICAgICAgXAogICAgICAgIH0gd2hpbGUgKDApCgojIGRlZmluZSBzcXIocjAscjEsYSkgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBhc20gKCJtdWxxICUyIiAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDogIj1hIihyMCksIj1kIihyMSkgICAgIFwKICAgICAgICAgICAgICAgIDogImEiKGEpICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDogImNjIik7CgpCTl9VTE9ORyBibl9tdWxfYWRkX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBpbnQgbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgIEJOX1VMT05HIHcpCnsKICAgIEJOX1VMT05HIGMxID0gMDsKCiAgICBpZiAobnVtIDw9IDApCiAgICAgICAgcmV0dXJuIChjMSk7CgogICAgd2hpbGUgKG51bSAmIH4zKSB7CiAgICAgICAgbXVsX2FkZChycFswXSwgYXBbMF0sIHcsIGMxKTsKICAgICAgICBtdWxfYWRkKHJwWzFdLCBhcFsxXSwgdywgYzEpOwogICAgICAgIG11bF9hZGQocnBbMl0sIGFwWzJdLCB3LCBjMSk7CiAgICAgICAgbXVsX2FkZChycFszXSwgYXBbM10sIHcsIGMxKTsKICAgICAgICBhcCArPSA0OwogICAgICAgIHJwICs9IDQ7CiAgICAgICAgbnVtIC09IDQ7CiAgICB9CiAgICBpZiAobnVtKSB7CiAgICAgICAgbXVsX2FkZChycFswXSwgYXBbMF0sIHcsIGMxKTsKICAgICAgICBpZiAoLS1udW0gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGMxOwogICAgICAgIG11bF9hZGQocnBbMV0sIGFwWzFdLCB3LCBjMSk7CiAgICAgICAgaWYgKC0tbnVtID09IDApCiAgICAgICAgICAgIHJldHVybiBjMTsKICAgICAgICBtdWxfYWRkKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogICAgICAgIHJldHVybiBjMTsKICAgIH0KCiAgICByZXR1cm4gKGMxKTsKfQoKQk5fVUxPTkcgYm5fbXVsX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBpbnQgbnVtLCBCTl9VTE9ORyB3KQp7CiAgICBCTl9VTE9ORyBjMSA9IDA7CgogICAgaWYgKG51bSA8PSAwKQogICAgICAgIHJldHVybiAoYzEpOwoKICAgIHdoaWxlIChudW0gJiB+MykgewogICAgICAgIG11bChycFswXSwgYXBbMF0sIHcsIGMxKTsKICAgICAgICBtdWwocnBbMV0sIGFwWzFdLCB3LCBjMSk7CiAgICAgICAgbXVsKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogICAgICAgIG11bChycFszXSwgYXBbM10sIHcsIGMxKTsKICAgICAgICBhcCArPSA0OwogICAgICAgIHJwICs9IDQ7CiAgICAgICAgbnVtIC09IDQ7CiAgICB9CiAgICBpZiAobnVtKSB7CiAgICAgICAgbXVsKHJwWzBdLCBhcFswXSwgdywgYzEpOwogICAgICAgIGlmICgtLW51bSA9PSAwKQogICAgICAgICAgICByZXR1cm4gYzE7CiAgICAgICAgbXVsKHJwWzFdLCBhcFsxXSwgdywgYzEpOwogICAgICAgIGlmICgtLW51bSA9PSAwKQogICAgICAgICAgICByZXR1cm4gYzE7CiAgICAgICAgbXVsKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogICAgfQogICAgcmV0dXJuIChjMSk7Cn0KCnZvaWQgYm5fc3FyX3dvcmRzKEJOX1VMT05HICpyLCBjb25zdCBCTl9VTE9ORyAqYSwgaW50IG4pCnsKICAgIGlmIChuIDw9IDApCiAgICAgICAgcmV0dXJuOwoKICAgIHdoaWxlIChuICYgfjMpIHsKICAgICAgICBzcXIoclswXSwgclsxXSwgYVswXSk7CiAgICAgICAgc3FyKHJbMl0sIHJbM10sIGFbMV0pOwogICAgICAgIHNxcihyWzRdLCByWzVdLCBhWzJdKTsKICAgICAgICBzcXIocls2XSwgcls3XSwgYVszXSk7CiAgICAgICAgYSArPSA0OwogICAgICAgIHIgKz0gODsKICAgICAgICBuIC09IDQ7CiAgICB9CiAgICBpZiAobikgewogICAgICAgIHNxcihyWzBdLCByWzFdLCBhWzBdKTsKICAgICAgICBpZiAoLS1uID09IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBzcXIoclsyXSwgclszXSwgYVsxXSk7CiAgICAgICAgaWYgKC0tbiA9PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgc3FyKHJbNF0sIHJbNV0sIGFbMl0pOwogICAgfQp9CgpCTl9VTE9ORyBibl9kaXZfd29yZHMoQk5fVUxPTkcgaCwgQk5fVUxPTkcgbCwgQk5fVUxPTkcgZCkKewogICAgQk5fVUxPTkcgcmV0LCB3YXN0ZTsKCiBhc20oImRpdnEgICAgICAlNCI6Ij1hIihyZXQpLCAiPWQiKHdhc3RlKQogOiAgICAgImEiKGwpLCAiZCIoaCksICJnIihkKQogOiAgICAgImNjIik7CgogICAgcmV0dXJuIHJldDsKfQoKQk5fVUxPTkcgYm5fYWRkX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgbikKewogICAgQk5fVUxPTkcgcmV0ID0gMCwgaSA9IDA7CgogICAgaWYgKG4gPD0gMCkKICAgICAgICByZXR1cm4gMDsKCiAgICBhc20gdm9sYXRpbGUgKCIgICAgICAgc3VicSAgICAlMiwlMiAgICAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIucDJhbGlnbiA0ICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIxOiAgICAgbW92cSAgICAoJTQsJTIsOCksJTAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgYWRjcSAgICAoJTUsJTIsOCksJTAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgbW92cSAgICAlMCwoJTMsJTIsOCkgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgbGVhcSAgICAxKCUyKSwlMiAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgbG9vcCAgICAxYiAgICAgICAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgc2JicSAgICAlMCwlMCAgICAgICAgICAgXG4iOiI9JmEiIChyZXQpLCAiK2MiKG4pLAogICAgICAgICAgICAgICAgICAiPSZyIihpKQogICAgICAgICAgICAgICAgICA6InIiKHJwKSwgInIiKGFwKSwgInIiKGJwKQogICAgICAgICAgICAgICAgICA6ImNjIiwgIm1lbW9yeSIpOwoKICAgIHJldHVybiByZXQgJiAxOwp9CgojIGlmbmRlZiBTSU1JQ1MKQk5fVUxPTkcgYm5fc3ViX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgbikKewogICAgQk5fVUxPTkcgcmV0ID0gMCwgaSA9IDA7CgogICAgaWYgKG4gPD0gMCkKICAgICAgICByZXR1cm4gMDsKCiAgICBhc20gdm9sYXRpbGUgKCIgICAgICAgc3VicSAgICAlMiwlMiAgICAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIucDJhbGlnbiA0ICAgICAgICAgICAgICAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIxOiAgICAgbW92cSAgICAoJTQsJTIsOCksJTAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgc2JicSAgICAoJTUsJTIsOCksJTAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgbW92cSAgICAlMCwoJTMsJTIsOCkgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgbGVhcSAgICAxKCUyKSwlMiAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgbG9vcCAgICAxYiAgICAgICAgICAgICAgXG4iCiAgICAgICAgICAgICAgICAgICIgICAgICAgc2JicSAgICAlMCwlMCAgICAgICAgICAgXG4iOiI9JmEiIChyZXQpLCAiK2MiKG4pLAogICAgICAgICAgICAgICAgICAiPSZyIihpKQogICAgICAgICAgICAgICAgICA6InIiKHJwKSwgInIiKGFwKSwgInIiKGJwKQogICAgICAgICAgICAgICAgICA6ImNjIiwgIm1lbW9yeSIpOwoKICAgIHJldHVybiByZXQgJiAxOwp9CiMgZWxzZQovKiBTaW1pY3MgMS40PDcgaGFzIGJ1Z2d5IHNiYnE6LSggKi8KIyAgZGVmaW5lIEJOX01BU0syIDB4ZmZmZmZmZmZmZmZmZmZmZkwKQk5fVUxPTkcgYm5fc3ViX3dvcmRzKEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSwgQk5fVUxPTkcgKmIsIGludCBuKQp7CiAgICBCTl9VTE9ORyB0MSwgdDI7CiAgICBpbnQgYyA9IDA7CgogICAgaWYgKG4gPD0gMCkKICAgICAgICByZXR1cm4gKChCTl9VTE9ORykwKTsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgdDEgPSBhWzBdOwogICAgICAgIHQyID0gYlswXTsKICAgICAgICByWzBdID0gKHQxIC0gdDIgLSBjKSAmIEJOX01BU0syOwogICAgICAgIGlmICh0MSAhPSB0MikKICAgICAgICAgICAgYyA9ICh0MSA8IHQyKTsKICAgICAgICBpZiAoLS1uIDw9IDApCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICB0MSA9IGFbMV07CiAgICAgICAgdDIgPSBiWzFdOwogICAgICAgIHJbMV0gPSAodDEgLSB0MiAtIGMpICYgQk5fTUFTSzI7CiAgICAgICAgaWYgKHQxICE9IHQyKQogICAgICAgICAgICBjID0gKHQxIDwgdDIpOwogICAgICAgIGlmICgtLW4gPD0gMCkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIHQxID0gYVsyXTsKICAgICAgICB0MiA9IGJbMl07CiAgICAgICAgclsyXSA9ICh0MSAtIHQyIC0gYykgJiBCTl9NQVNLMjsKICAgICAgICBpZiAodDEgIT0gdDIpCiAgICAgICAgICAgIGMgPSAodDEgPCB0Mik7CiAgICAgICAgaWYgKC0tbiA8PSAwKQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgdDEgPSBhWzNdOwogICAgICAgIHQyID0gYlszXTsKICAgICAgICByWzNdID0gKHQxIC0gdDIgLSBjKSAmIEJOX01BU0syOwogICAgICAgIGlmICh0MSAhPSB0MikKICAgICAgICAgICAgYyA9ICh0MSA8IHQyKTsKICAgICAgICBpZiAoLS1uIDw9IDApCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBhICs9IDQ7CiAgICAgICAgYiArPSA0OwogICAgICAgIHIgKz0gNDsKICAgIH0KICAgIHJldHVybiAoYyk7Cn0KIyBlbmRpZgoKLyogbXVsX2FkZF9jKGEsYixjMCxjMSxjMikgIC0tIGMrPWEqYiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIG11bF9hZGRfYzIoYSxiLGMwLGMxLGMyKSAtLSBjKz0yKmEqYiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIHNxcl9hZGRfYyhhLGksYzAsYzEsYzIpICAtLSBjKz1hW2ldXjIgZm9yIHRocmVlIHdvcmQgbnVtYmVyIGM9KGMyLGMxLGMwKSAqLwovKgogKiBzcXJfYWRkX2MyKGEsaSxjMCxjMSxjMikgLS0gYys9MiphW2ldKmFbal0gZm9yIHRocmVlIHdvcmQgbnVtYmVyCiAqIGM9KGMyLGMxLGMwKQogKi8KCi8qCiAqIEtlZXAgaW4gbWluZCB0aGF0IGNhcnJ5aW5nIGludG8gaGlnaCBwYXJ0IG9mIG11bHRpcGxpY2F0aW9uIHJlc3VsdAogKiBjYW4gbm90IG92ZXJmbG93LCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBhbGwtb25lcy4KICovCiMgaWYgMAovKiBvcmlnaW5hbCBtYWNyb3MgYXJlIGtlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcyAqLwojICBkZWZpbmUgbXVsX2FkZF9jKGEsYixjMCxjMSxjMikgeyAgICAgICBcCiAgICAgICAgQk5fVUxPTkcgdGE9KGEpLHRiPShiKTsgICAgICAgICBcCiAgICAgICAgdDEgPSB0YSAqIHRiOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgdDIgPSBCTl9VTVVMVF9ISUdIKHRhLHRiKTsgICAgICBcCiAgICAgICAgYzAgKz0gdDE7IHQyICs9IChjMDx0MSk/MTowOyAgICBcCiAgICAgICAgYzEgKz0gdDI7IGMyICs9IChjMTx0Mik/MTowOyAgICBcCiAgICAgICAgfQoKIyAgZGVmaW5lIG11bF9hZGRfYzIoYSxiLGMwLGMxLGMyKSB7ICAgICAgXAogICAgICAgIEJOX1VMT05HIHRhPShhKSx0Yj0oYiksdDA7ICAgICAgXAogICAgICAgIHQxID0gQk5fVU1VTFRfSElHSCh0YSx0Yik7ICAgICAgXAogICAgICAgIHQwID0gdGEgKiB0YjsgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGMwICs9IHQwOyB0MiA9IHQxKygoYzA8dDApPzE6MCk7XAogICAgICAgIGMxICs9IHQyOyBjMiArPSAoYzE8dDIpPzE6MDsgICAgXAogICAgICAgIGMwICs9IHQwOyB0MSArPSAoYzA8dDApPzE6MDsgICAgXAogICAgICAgIGMxICs9IHQxOyBjMiArPSAoYzE8dDEpPzE6MDsgICAgXAogICAgICAgIH0KIyBlbHNlCiMgIGRlZmluZSBtdWxfYWRkX2MoYSxiLGMwLGMxLGMyKSBkbyB7ICAgIFwKICAgICAgICBhc20gKCJtdWxxICUzIiAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDogIj1hIih0MSksIj1kIih0MikgICAgIFwKICAgICAgICAgICAgICAgIDogImEiKGEpLCJtIihiKSAgICAgICAgIFwKICAgICAgICAgICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgIFwKICAgICAgICBhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgIFwKICAgICAgICAgICAgICAgIDogIityIihjMCksIitkIih0MikgICAgIFwKICAgICAgICAgICAgICAgIDogImEiKHQxKSwiZyIoMCkgICAgICAgIFwKICAgICAgICAgICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgIFwKICAgICAgICBhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgIFwKICAgICAgICAgICAgICAgIDogIityIihjMSksIityIihjMikgICAgIFwKICAgICAgICAgICAgICAgIDogImQiKHQyKSwiZyIoMCkgICAgICAgIFwKICAgICAgICAgICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgIFwKICAgICAgICB9IHdoaWxlICgwKQoKIyAgZGVmaW5lIHNxcl9hZGRfYyhhLGksYzAsYzEsYzIpIGRvIHsgICAgXAogICAgICAgIGFzbSAoIm11bHEgJTIiICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiPWEiKHQxKSwiPWQiKHQyKSAgICAgXAogICAgICAgICAgICAgICAgOiAiYSIoYVtpXSkgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIGFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgXAogICAgICAgICAgICAgICAgOiAiK3IiKGMwKSwiK2QiKHQyKSAgICAgXAogICAgICAgICAgICAgICAgOiAiYSIodDEpLCJnIigwKSAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIGFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgXAogICAgICAgICAgICAgICAgOiAiK3IiKGMxKSwiK3IiKGMyKSAgICAgXAogICAgICAgICAgICAgICAgOiAiZCIodDIpLCJnIigwKSAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgXAogICAgICAgIH0gd2hpbGUgKDApCgojICBkZWZpbmUgbXVsX2FkZF9jMihhLGIsYzAsYzEsYzIpIGRvIHsgICBcCiAgICAgICAgYXNtICgibXVscSAlMyIgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICA6ICI9YSIodDEpLCI9ZCIodDIpICAgICBcCiAgICAgICAgICAgICAgICA6ICJhIihhKSwibSIoYikgICAgICAgICBcCiAgICAgICAgICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICBcCiAgICAgICAgYXNtICgiYWRkcSAlMywlMDsgYWRjcSAlNCwlMTsgYWRjcSAlNSwlMiIgICAgICAgXAogICAgICAgICAgICAgICAgOiAiK3IiKGMwKSwiK3IiKGMxKSwiK3IiKGMyKSAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIDogInIiKHQxKSwiciIodDIpLCJnIigwKSAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIGFzbSAoImFkZHEgJTMsJTA7IGFkY3EgJTQsJTE7IGFkY3EgJTUsJTIiICAgICAgIFwKICAgICAgICAgICAgICAgIDogIityIihjMCksIityIihjMSksIityIihjMikgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICA6ICJyIih0MSksInIiKHQyKSwiZyIoMCkgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICB9IHdoaWxlICgwKQojIGVuZGlmCgojIGRlZmluZSBzcXJfYWRkX2MyKGEsaSxqLGMwLGMxLGMyKSAgICAgIFwKICAgICAgICBtdWxfYWRkX2MyKChhKVtpXSwoYSlbal0sYzAsYzEsYzIpCgp2b2lkIGJuX211bF9jb21iYTgoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphLCBCTl9VTE9ORyAqYikKewogICAgQk5fVUxPTkcgdDEsIHQyOwogICAgQk5fVUxPTkcgYzEsIGMyLCBjMzsKCiAgICBjMSA9IDA7CiAgICBjMiA9IDA7CiAgICBjMyA9IDA7CiAgICBtdWxfYWRkX2MoYVswXSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgICByWzBdID0gYzE7CiAgICBjMSA9IDA7CiAgICBtdWxfYWRkX2MoYVswXSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVsxXSwgYlswXSwgYzIsIGMzLCBjMSk7CiAgICByWzFdID0gYzI7CiAgICBjMiA9IDA7CiAgICBtdWxfYWRkX2MoYVsyXSwgYlswXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVsxXSwgYlsxXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVswXSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgICByWzJdID0gYzM7CiAgICBjMyA9IDA7CiAgICBtdWxfYWRkX2MoYVswXSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVsxXSwgYlsyXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVsyXSwgYlsxXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVszXSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgICByWzNdID0gYzE7CiAgICBjMSA9IDA7CiAgICBtdWxfYWRkX2MoYVs0XSwgYlswXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVszXSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVsyXSwgYlsyXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVsxXSwgYlszXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVswXSwgYls0XSwgYzIsIGMzLCBjMSk7CiAgICByWzRdID0gYzI7CiAgICBjMiA9IDA7CiAgICBtdWxfYWRkX2MoYVswXSwgYls1XSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVsxXSwgYls0XSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVsyXSwgYlszXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVszXSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVs0XSwgYlsxXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVs1XSwgYlswXSwgYzMsIGMxLCBjMik7CiAgICByWzVdID0gYzM7CiAgICBjMyA9IDA7CiAgICBtdWxfYWRkX2MoYVs2XSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVs1XSwgYlsxXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVs0XSwgYlsyXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVszXSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVsyXSwgYls0XSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVsxXSwgYls1XSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVswXSwgYls2XSwgYzEsIGMyLCBjMyk7CiAgICByWzZdID0gYzE7CiAgICBjMSA9IDA7CiAgICBtdWxfYWRkX2MoYVswXSwgYls3XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVsxXSwgYls2XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVsyXSwgYls1XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVszXSwgYls0XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs0XSwgYlszXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs1XSwgYlsyXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs2XSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs3XSwgYlswXSwgYzIsIGMzLCBjMSk7CiAgICByWzddID0gYzI7CiAgICBjMiA9IDA7CiAgICBtdWxfYWRkX2MoYVs3XSwgYlsxXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVs2XSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVs1XSwgYlszXSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVs0XSwgYls0XSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVszXSwgYls1XSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVsyXSwgYls2XSwgYzMsIGMxLCBjMik7CiAgICBtdWxfYWRkX2MoYVsxXSwgYls3XSwgYzMsIGMxLCBjMik7CiAgICByWzhdID0gYzM7CiAgICBjMyA9IDA7CiAgICBtdWxfYWRkX2MoYVsyXSwgYls3XSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVszXSwgYls2XSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVs0XSwgYls1XSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVs1XSwgYls0XSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVs2XSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgICBtdWxfYWRkX2MoYVs3XSwgYlsyXSwgYzEsIGMyLCBjMyk7CiAgICByWzldID0gYzE7CiAgICBjMSA9IDA7CiAgICBtdWxfYWRkX2MoYVs3XSwgYlszXSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs2XSwgYls0XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs1XSwgYls1XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs0XSwgYls2XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVszXSwgYls3XSwgYzIsIGMzLCBjMSk7CiAgICByWzEwXSA9IGMyOwogICAgYzIgPSAwOwogICAgbXVsX2FkZF9jKGFbNF0sIGJbN10sIGMzLCBjMSwgYzIpOwogICAgbXVsX2FkZF9jKGFbNV0sIGJbNl0sIGMzLCBjMSwgYzIpOwogICAgbXVsX2FkZF9jKGFbNl0sIGJbNV0sIGMzLCBjMSwgYzIpOwogICAgbXVsX2FkZF9jKGFbN10sIGJbNF0sIGMzLCBjMSwgYzIpOwogICAgclsxMV0gPSBjMzsKICAgIGMzID0gMDsKICAgIG11bF9hZGRfYyhhWzddLCBiWzVdLCBjMSwgYzIsIGMzKTsKICAgIG11bF9hZGRfYyhhWzZdLCBiWzZdLCBjMSwgYzIsIGMzKTsKICAgIG11bF9hZGRfYyhhWzVdLCBiWzddLCBjMSwgYzIsIGMzKTsKICAgIHJbMTJdID0gYzE7CiAgICBjMSA9IDA7CiAgICBtdWxfYWRkX2MoYVs2XSwgYls3XSwgYzIsIGMzLCBjMSk7CiAgICBtdWxfYWRkX2MoYVs3XSwgYls2XSwgYzIsIGMzLCBjMSk7CiAgICByWzEzXSA9IGMyOwogICAgYzIgPSAwOwogICAgbXVsX2FkZF9jKGFbN10sIGJbN10sIGMzLCBjMSwgYzIpOwogICAgclsxNF0gPSBjMzsKICAgIHJbMTVdID0gYzE7Cn0KCnZvaWQgYm5fbXVsX2NvbWJhNChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiKQp7CiAgICBCTl9VTE9ORyB0MSwgdDI7CiAgICBCTl9VTE9ORyBjMSwgYzIsIGMzOwoKICAgIGMxID0gMDsKICAgIGMyID0gMDsKICAgIGMzID0gMDsKICAgIG11bF9hZGRfYyhhWzBdLCBiWzBdLCBjMSwgYzIsIGMzKTsKICAgIHJbMF0gPSBjMTsKICAgIGMxID0gMDsKICAgIG11bF9hZGRfYyhhWzBdLCBiWzFdLCBjMiwgYzMsIGMxKTsKICAgIG11bF9hZGRfYyhhWzFdLCBiWzBdLCBjMiwgYzMsIGMxKTsKICAgIHJbMV0gPSBjMjsKICAgIGMyID0gMDsKICAgIG11bF9hZGRfYyhhWzJdLCBiWzBdLCBjMywgYzEsIGMyKTsKICAgIG11bF9hZGRfYyhhWzFdLCBiWzFdLCBjMywgYzEsIGMyKTsKICAgIG11bF9hZGRfYyhhWzBdLCBiWzJdLCBjMywgYzEsIGMyKTsKICAgIHJbMl0gPSBjMzsKICAgIGMzID0gMDsKICAgIG11bF9hZGRfYyhhWzBdLCBiWzNdLCBjMSwgYzIsIGMzKTsKICAgIG11bF9hZGRfYyhhWzFdLCBiWzJdLCBjMSwgYzIsIGMzKTsKICAgIG11bF9hZGRfYyhhWzJdLCBiWzFdLCBjMSwgYzIsIGMzKTsKICAgIG11bF9hZGRfYyhhWzNdLCBiWzBdLCBjMSwgYzIsIGMzKTsKICAgIHJbM10gPSBjMTsKICAgIGMxID0gMDsKICAgIG11bF9hZGRfYyhhWzNdLCBiWzFdLCBjMiwgYzMsIGMxKTsKICAgIG11bF9hZGRfYyhhWzJdLCBiWzJdLCBjMiwgYzMsIGMxKTsKICAgIG11bF9hZGRfYyhhWzFdLCBiWzNdLCBjMiwgYzMsIGMxKTsKICAgIHJbNF0gPSBjMjsKICAgIGMyID0gMDsKICAgIG11bF9hZGRfYyhhWzJdLCBiWzNdLCBjMywgYzEsIGMyKTsKICAgIG11bF9hZGRfYyhhWzNdLCBiWzJdLCBjMywgYzEsIGMyKTsKICAgIHJbNV0gPSBjMzsKICAgIGMzID0gMDsKICAgIG11bF9hZGRfYyhhWzNdLCBiWzNdLCBjMSwgYzIsIGMzKTsKICAgIHJbNl0gPSBjMTsKICAgIHJbN10gPSBjMjsKfQoKdm9pZCBibl9zcXJfY29tYmE4KEJOX1VMT05HICpyLCBjb25zdCBCTl9VTE9ORyAqYSkKewogICAgQk5fVUxPTkcgdDEsIHQyOwogICAgQk5fVUxPTkcgYzEsIGMyLCBjMzsKCiAgICBjMSA9IDA7CiAgICBjMiA9IDA7CiAgICBjMyA9IDA7CiAgICBzcXJfYWRkX2MoYSwgMCwgYzEsIGMyLCBjMyk7CiAgICByWzBdID0gYzE7CiAgICBjMSA9IDA7CiAgICBzcXJfYWRkX2MyKGEsIDEsIDAsIGMyLCBjMywgYzEpOwogICAgclsxXSA9IGMyOwogICAgYzIgPSAwOwogICAgc3FyX2FkZF9jKGEsIDEsIGMzLCBjMSwgYzIpOwogICAgc3FyX2FkZF9jMihhLCAyLCAwLCBjMywgYzEsIGMyKTsKICAgIHJbMl0gPSBjMzsKICAgIGMzID0gMDsKICAgIHNxcl9hZGRfYzIoYSwgMywgMCwgYzEsIGMyLCBjMyk7CiAgICBzcXJfYWRkX2MyKGEsIDIsIDEsIGMxLCBjMiwgYzMpOwogICAgclszXSA9IGMxOwogICAgYzEgPSAwOwogICAgc3FyX2FkZF9jKGEsIDIsIGMyLCBjMywgYzEpOwogICAgc3FyX2FkZF9jMihhLCAzLCAxLCBjMiwgYzMsIGMxKTsKICAgIHNxcl9hZGRfYzIoYSwgNCwgMCwgYzIsIGMzLCBjMSk7CiAgICByWzRdID0gYzI7CiAgICBjMiA9IDA7CiAgICBzcXJfYWRkX2MyKGEsIDUsIDAsIGMzLCBjMSwgYzIpOwogICAgc3FyX2FkZF9jMihhLCA0LCAxLCBjMywgYzEsIGMyKTsKICAgIHNxcl9hZGRfYzIoYSwgMywgMiwgYzMsIGMxLCBjMik7CiAgICByWzVdID0gYzM7CiAgICBjMyA9IDA7CiAgICBzcXJfYWRkX2MoYSwgMywgYzEsIGMyLCBjMyk7CiAgICBzcXJfYWRkX2MyKGEsIDQsIDIsIGMxLCBjMiwgYzMpOwogICAgc3FyX2FkZF9jMihhLCA1LCAxLCBjMSwgYzIsIGMzKTsKICAgIHNxcl9hZGRfYzIoYSwgNiwgMCwgYzEsIGMyLCBjMyk7CiAgICByWzZdID0gYzE7CiAgICBjMSA9IDA7CiAgICBzcXJfYWRkX2MyKGEsIDcsIDAsIGMyLCBjMywgYzEpOwogICAgc3FyX2FkZF9jMihhLCA2LCAxLCBjMiwgYzMsIGMxKTsKICAgIHNxcl9hZGRfYzIoYSwgNSwgMiwgYzIsIGMzLCBjMSk7CiAgICBzcXJfYWRkX2MyKGEsIDQsIDMsIGMyLCBjMywgYzEpOwogICAgcls3XSA9IGMyOwogICAgYzIgPSAwOwogICAgc3FyX2FkZF9jKGEsIDQsIGMzLCBjMSwgYzIpOwogICAgc3FyX2FkZF9jMihhLCA1LCAzLCBjMywgYzEsIGMyKTsKICAgIHNxcl9hZGRfYzIoYSwgNiwgMiwgYzMsIGMxLCBjMik7CiAgICBzcXJfYWRkX2MyKGEsIDcsIDEsIGMzLCBjMSwgYzIpOwogICAgcls4XSA9IGMzOwogICAgYzMgPSAwOwogICAgc3FyX2FkZF9jMihhLCA3LCAyLCBjMSwgYzIsIGMzKTsKICAgIHNxcl9hZGRfYzIoYSwgNiwgMywgYzEsIGMyLCBjMyk7CiAgICBzcXJfYWRkX2MyKGEsIDUsIDQsIGMxLCBjMiwgYzMpOwogICAgcls5XSA9IGMxOwogICAgYzEgPSAwOwogICAgc3FyX2FkZF9jKGEsIDUsIGMyLCBjMywgYzEpOwogICAgc3FyX2FkZF9jMihhLCA2LCA0LCBjMiwgYzMsIGMxKTsKICAgIHNxcl9hZGRfYzIoYSwgNywgMywgYzIsIGMzLCBjMSk7CiAgICByWzEwXSA9IGMyOwogICAgYzIgPSAwOwogICAgc3FyX2FkZF9jMihhLCA3LCA0LCBjMywgYzEsIGMyKTsKICAgIHNxcl9hZGRfYzIoYSwgNiwgNSwgYzMsIGMxLCBjMik7CiAgICByWzExXSA9IGMzOwogICAgYzMgPSAwOwogICAgc3FyX2FkZF9jKGEsIDYsIGMxLCBjMiwgYzMpOwogICAgc3FyX2FkZF9jMihhLCA3LCA1LCBjMSwgYzIsIGMzKTsKICAgIHJbMTJdID0gYzE7CiAgICBjMSA9IDA7CiAgICBzcXJfYWRkX2MyKGEsIDcsIDYsIGMyLCBjMywgYzEpOwogICAgclsxM10gPSBjMjsKICAgIGMyID0gMDsKICAgIHNxcl9hZGRfYyhhLCA3LCBjMywgYzEsIGMyKTsKICAgIHJbMTRdID0gYzM7CiAgICByWzE1XSA9IGMxOwp9Cgp2b2lkIGJuX3Nxcl9jb21iYTQoQk5fVUxPTkcgKnIsIGNvbnN0IEJOX1VMT05HICphKQp7CiAgICBCTl9VTE9ORyB0MSwgdDI7CiAgICBCTl9VTE9ORyBjMSwgYzIsIGMzOwoKICAgIGMxID0gMDsKICAgIGMyID0gMDsKICAgIGMzID0gMDsKICAgIHNxcl9hZGRfYyhhLCAwLCBjMSwgYzIsIGMzKTsKICAgIHJbMF0gPSBjMTsKICAgIGMxID0gMDsKICAgIHNxcl9hZGRfYzIoYSwgMSwgMCwgYzIsIGMzLCBjMSk7CiAgICByWzFdID0gYzI7CiAgICBjMiA9IDA7CiAgICBzcXJfYWRkX2MoYSwgMSwgYzMsIGMxLCBjMik7CiAgICBzcXJfYWRkX2MyKGEsIDIsIDAsIGMzLCBjMSwgYzIpOwogICAgclsyXSA9IGMzOwogICAgYzMgPSAwOwogICAgc3FyX2FkZF9jMihhLCAzLCAwLCBjMSwgYzIsIGMzKTsKICAgIHNxcl9hZGRfYzIoYSwgMiwgMSwgYzEsIGMyLCBjMyk7CiAgICByWzNdID0gYzE7CiAgICBjMSA9IDA7CiAgICBzcXJfYWRkX2MoYSwgMiwgYzIsIGMzLCBjMSk7CiAgICBzcXJfYWRkX2MyKGEsIDMsIDEsIGMyLCBjMywgYzEpOwogICAgcls0XSA9IGMyOwogICAgYzIgPSAwOwogICAgc3FyX2FkZF9jMihhLCAzLCAyLCBjMywgYzEsIGMyKTsKICAgIHJbNV0gPSBjMzsKICAgIGMzID0gMDsKICAgIHNxcl9hZGRfYyhhLCAzLCBjMSwgYzIsIGMzKTsKICAgIHJbNl0gPSBjMTsKICAgIHJbN10gPSBjMjsKfQojZW5kaWYK