I2luY2x1ZGUgIi4uL2JuX2xjbC5oIgojaWYgIShkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MikKIyBpbmNsdWRlICIuLi9ibl9hc20uYyIJLyoga2luZCBvZiBkaXJ0eSBoYWNrIGZvciBTdW4gU3R1ZGlvICovCiNlbHNlCi8qCiAqIHg4Nl82NCBCSUdOVU0gYWNjZWxlcmF0b3IgdmVyc2lvbiAwLjEsIERlY2VtYmVyIDIwMDIuCiAqCiAqIEltcGxlbWVudGVkIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKICogcHJvamVjdC4KICoKICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCiAqIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuIFdhcnJhbnR5IG9mIGFueSBraW5kIGlzCiAqIGRpc2NsYWltZWQuCiAqCiAqIFEuIFZlcnNpb24gMC4xPyBJdCBkb2Vzbid0IHNvdW5kIGxpa2UgQW5keSwgaGUgdXNlZCB0byBhc3NpZ24gcmVhbAogKiAgICB2ZXJzaW9ucywgbGlrZSAxLjAuLi4KICogQS4gV2VsbCwgdGhhdCdzIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGJhc2ljYWxseSBhIHF1aWNrLW4tZGlydHkKICogICAgcHJvb2Ytb2YtY29uY2VwdCBoYWNrLiBBcyB5b3UgY2FuIHNlZSBpdCdzIGltcGxlbWVudGVkIHdpdGgKICogICAgaW5saW5lIGFzc2VtYmxlciwgd2hpY2ggbWVhbnMgdGhhdCB5b3UncmUgYm91bmQgdG8gR0NDIGFuZCB0aGF0CiAqICAgIHRoZXJlIG1pZ2h0IGJlIGVub3VnaCByb29tIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50LgogKgogKiBRLiBXaHkgaW5saW5lIGFzc2VtYmxlcj8KICogQS4geDg2XzY0IGZlYXR1cmVzIG93biBBQkkgd2hpY2ggSSdtIG5vdCBmYW1pbGlhciB3aXRoLiBUaGlzIGlzCiAqICAgIHdoeSBJIGRlY2lkZWQgdG8gbGV0IHRoZSBjb21waWxlciB0YWtlIGNhcmUgb2Ygc3Vicm91dGluZQogKiAgICBwcm9sb2d1ZS9lcGlsb2d1ZSBhcyB3ZWxsIGFzIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciByZWZlcmVuY2UuCiAqICAgIFdpbjY0IGltcGxlbWVudHMgZGlmZmVyZW50IEFCSSBmb3IgQU1ENjQsIGRpZmZlcmVudCBmcm9tIExpbnV4LgogKgogKiBRLiBIb3cgbXVjaCBmYXN0ZXIgZG9lcyBpdCBnZXQ/CiAqIEEuICdhcHBzL29wZW5zc2wgc3BlZWQgcnNhIGRzYScgb3V0cHV0IHdpdGggbm8tYXNtOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNnMgICAwLjAwMDFzICAgMTY4My44ICAxODQ1Ni4yCiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMjhzICAgMC4wMDAycyAgICAzNTYuMCAgIDY0MDcuMAogKglyc2EgMjA0OCBiaXRzICAgMC4wMTcycyAgIDAuMDAwNXMgICAgIDU4LjAgICAxOTU3LjgKICoJcnNhIDQwOTYgYml0cyAgIDAuMTE1NXMgICAwLjAwMThzICAgICAgOC43ICAgIDU1NS42CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDA1cyAgIDAuMDAwNnMgICAyMTAwLjggICAxNzY4LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAxNHMgICAwLjAwMThzICAgIDY5Mi4zICAgIDU1OS4yCiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwNDlzICAgMC4wMDYxcyAgICAyMDQuNyAgICAxNjUuMAogKgogKiAgICAnYXBwcy9vcGVuc3NsIHNwZWVkIHJzYSBkc2EnIG91dHB1dCB3aXRoIHRoaXMgbW9kdWxlOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNHMgICAwLjAwMDBzICAgMjc2Ny4xICAzMzI5Ny45CiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMTJzICAgMC4wMDAxcyAgICA4NjcuNCAgMTQ2NzQuNwogKglyc2EgMjA0OCBiaXRzICAgMC4wMDYxcyAgIDAuMDAwMnMgICAgMTY0LjAgICA1MjcwLjAKICoJcnNhIDQwOTYgYml0cyAgIDAuMDM4NHMgICAwLjAwMDZzICAgICAyNi4xICAgMTY1MC44CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDAycyAgIDAuMDAwM3MgICA0NDQyLjIgICAzNzg2LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAwNXMgICAwLjAwMDdzICAgMTgzNS4xICAgMTQ5Ny40CiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwMTZzICAgMC4wMDIwcyAgICA2MjAuNCAgICA1MDQuNgogKgogKiAgICBGb3IgdGhlIHJlZmVyZW5jZS4gSUEtMzIgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zCiAqICAgIHZlcnkgbXVjaCBsaWtlIDY0LWJpdCBjb2RlIGNvbXBpbGVkIHdpdGggbm8tYXNtIG9uIHRoZSBzYW1lCiAqICAgIG1hY2hpbmUuCiAqLwoKI2lmZGVmIF9XSU42NAojZGVmaW5lIEJOX1VMT05HIHVuc2lnbmVkIGxvbmcgbG9uZwojZWxzZQojZGVmaW5lIEJOX1VMT05HIHVuc2lnbmVkIGxvbmcKI2VuZGlmCgojdW5kZWYgbXVsCiN1bmRlZiBtdWxfYWRkCiN1bmRlZiBzcXIKCi8qCiAqICJtIihhKSwgIittIihyKQlpcyB0aGUgd2F5IHRvIGZhdm9yIERpcmVjdFBhdGggtS1jb2RlOwogKiAiZyIoMCkJCWxldCB0aGUgY29tcGlsZXIgdG8gZGVjaWRlIHdoZXJlIGRvZXMgaXQKICoJCQl3YW50IHRvIGtlZXAgdGhlIHZhbHVlIG9mIHplcm87CiAqLwojZGVmaW5lIG11bF9hZGQocixhLHdvcmQsY2FycnkpIGRvIHsJXAoJcmVnaXN0ZXIgQk5fVUxPTkcgaGlnaCxsb3c7CVwKCWFzbSAoIm11bHEgJTMiCQkJXAoJCTogIj1hIihsb3cpLCI9ZCIoaGlnaCkJXAoJCTogImEiKHdvcmQpLCJtIihhKQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoY2FycnkpLCIrZCIoaGlnaClcCgkJOiAiYSIobG93KSwiZyIoMCkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIglcCgkJOiAiK20iKHIpLCIrZCIoaGlnaCkJXAoJCTogInIiKGNhcnJ5KSwiZyIoMCkJXAoJCTogImNjIik7CQlcCgljYXJyeT1oaWdoOwkJCVwKCX0gd2hpbGUgKDApCgojZGVmaW5lIG11bChyLGEsd29yZCxjYXJyeSkgZG8gewlcCglyZWdpc3RlciBCTl9VTE9ORyBoaWdoLGxvdzsJXAoJYXNtICgibXVscSAlMyIJCQlcCgkJOiAiPWEiKGxvdyksIj1kIihoaWdoKQlcCgkJOiAiYSIod29yZCksImciKGEpCVwKCQk6ICJjYyIpOwkJXAoJYXNtICgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIJXAoJCTogIityIihjYXJyeSksIitkIihoaWdoKVwKCQk6ICJhIihsb3cpLCJnIigwKQlcCgkJOiAiY2MiKTsJCVwKCShyKT1jYXJyeSwgY2Fycnk9aGlnaDsJCVwKCX0gd2hpbGUgKDApCgojZGVmaW5lIHNxcihyMCxyMSxhKQkJCVwKCWFzbSAoIm11bHEgJTIiCQkJXAoJCTogIj1hIihyMCksIj1kIihyMSkJXAoJCTogImEiKGEpCQlcCgkJOiAiY2MiKTsKCkJOX1VMT05HIGJuX211bF9hZGRfd29yZHMoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGludCBudW0sIEJOX1VMT05HIHcpCgl7CglCTl9VTE9ORyBjMT0wOwoKCWlmIChudW0gPD0gMCkgcmV0dXJuKGMxKTsKCgl3aGlsZSAobnVtJn4zKQoJCXsKCQltdWxfYWRkKHJwWzBdLGFwWzBdLHcsYzEpOwoJCW11bF9hZGQocnBbMV0sYXBbMV0sdyxjMSk7CgkJbXVsX2FkZChycFsyXSxhcFsyXSx3LGMxKTsKCQltdWxfYWRkKHJwWzNdLGFwWzNdLHcsYzEpOwoJCWFwKz00OyBycCs9NDsgbnVtLT00OwoJCX0KCWlmIChudW0pCgkJewoJCW11bF9hZGQocnBbMF0sYXBbMF0sdyxjMSk7IGlmICgtLW51bT09MCkgcmV0dXJuIGMxOwoJCW11bF9hZGQocnBbMV0sYXBbMV0sdyxjMSk7IGlmICgtLW51bT09MCkgcmV0dXJuIGMxOwoJCW11bF9hZGQocnBbMl0sYXBbMl0sdyxjMSk7IHJldHVybiBjMTsKCQl9CgkKCXJldHVybihjMSk7Cgl9IAoKQk5fVUxPTkcgYm5fbXVsX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBpbnQgbnVtLCBCTl9VTE9ORyB3KQoJewoJQk5fVUxPTkcgYzE9MDsKCglpZiAobnVtIDw9IDApIHJldHVybihjMSk7CgoJd2hpbGUgKG51bSZ+MykKCQl7CgkJbXVsKHJwWzBdLGFwWzBdLHcsYzEpOwoJCW11bChycFsxXSxhcFsxXSx3LGMxKTsKCQltdWwocnBbMl0sYXBbMl0sdyxjMSk7CgkJbXVsKHJwWzNdLGFwWzNdLHcsYzEpOwoJCWFwKz00OyBycCs9NDsgbnVtLT00OwoJCX0KCWlmIChudW0pCgkJewoJCW11bChycFswXSxhcFswXSx3LGMxKTsgaWYgKC0tbnVtID09IDApIHJldHVybiBjMTsKCQltdWwocnBbMV0sYXBbMV0sdyxjMSk7IGlmICgtLW51bSA9PSAwKSByZXR1cm4gYzE7CgkJbXVsKHJwWzJdLGFwWzJdLHcsYzEpOwoJCX0KCXJldHVybihjMSk7Cgl9IAoKdm9pZCBibl9zcXJfd29yZHMoQk5fVUxPTkcgKnIsIGNvbnN0IEJOX1VMT05HICphLCBpbnQgbikKICAgICAgICB7CglpZiAobiA8PSAwKSByZXR1cm47CgoJd2hpbGUgKG4mfjMpCgkJewoJCXNxcihyWzBdLHJbMV0sYVswXSk7CgkJc3FyKHJbMl0sclszXSxhWzFdKTsKCQlzcXIocls0XSxyWzVdLGFbMl0pOwoJCXNxcihyWzZdLHJbN10sYVszXSk7CgkJYSs9NDsgcis9ODsgbi09NDsKCQl9CglpZiAobikKCQl7CgkJc3FyKHJbMF0sclsxXSxhWzBdKTsgaWYgKC0tbiA9PSAwKSByZXR1cm47CgkJc3FyKHJbMl0sclszXSxhWzFdKTsgaWYgKC0tbiA9PSAwKSByZXR1cm47CgkJc3FyKHJbNF0scls1XSxhWzJdKTsKCQl9Cgl9CgpCTl9VTE9ORyBibl9kaXZfd29yZHMoQk5fVUxPTkcgaCwgQk5fVUxPTkcgbCwgQk5fVUxPTkcgZCkKewlCTl9VTE9ORyByZXQsd2FzdGU7CgoJYXNtICgiZGl2cQklNCIKCQk6ICI9YSIocmV0KSwiPWQiKHdhc3RlKQoJCTogImEiKGwpLCJkIihoKSwiZyIoZCkKCQk6ICJjYyIpOwoKCXJldHVybiByZXQ7Cn0KCkJOX1VMT05HIGJuX2FkZF93b3JkcyAoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCxpbnQgbikKeyBCTl9VTE9ORyByZXQ9MCxpPTA7CgoJaWYgKG4gPD0gMCkgcmV0dXJuIDA7CgoJYXNtICgKCSIJc3VicQklMiwlMgkJXG4iCgkiLnAyYWxpZ24gNAkJCVxuIgoJIjE6CW1vdnEJKCU0LCUyLDgpLCUwCVxuIgoJIglhZGNxCSglNSwlMiw4KSwlMAlcbiIKCSIJbW92cQklMCwoJTMsJTIsOCkJXG4iCgkiCWxlYXEJMSglMiksJTIJXG4iCgkiCWxvb3AJMWIJCVxuIgoJIglzYmJxCSUwLCUwCQlcbiIKCQk6ICI9JmEiKHJldCksIitjIihuKSwiPSZyIihpKQoJCTogInIiKHJwKSwiciIoYXApLCJyIihicCkKCQk6ICJjYyIKCSk7CgogIHJldHVybiByZXQmMTsKfQoKI2lmbmRlZiBTSU1JQ1MKQk5fVUxPTkcgYm5fc3ViX3dvcmRzIChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLGludCBuKQp7IEJOX1VMT05HIHJldD0wLGk9MDsKCglpZiAobiA8PSAwKSByZXR1cm4gMDsKCglhc20gKAoJIglzdWJxCSUyLCUyCQlcbiIKCSIucDJhbGlnbiA0CQkJXG4iCgkiMToJbW92cQkoJTQsJTIsOCksJTAJXG4iCgkiCXNiYnEJKCU1LCUyLDgpLCUwCVxuIgoJIgltb3ZxCSUwLCglMywlMiw4KQlcbiIKCSIJbGVhcQkxKCUyKSwlMglcbiIKCSIJbG9vcAkxYgkJXG4iCgkiCXNiYnEJJTAsJTAJCVxuIgoJCTogIj0mYSIocmV0KSwiK2MiKG4pLCI9JnIiKGkpCgkJOiAiciIocnApLCJyIihhcCksInIiKGJwKQoJCTogImNjIgoJKTsKCiAgcmV0dXJuIHJldCYxOwp9CiNlbHNlCi8qIFNpbWljcyAxLjQ8NyBoYXMgYnVnZ3kgc2JicTotKCAqLwojZGVmaW5lIEJOX01BU0syIDB4ZmZmZmZmZmZmZmZmZmZmZkwKQk5fVUxPTkcgYm5fc3ViX3dvcmRzKEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSwgQk5fVUxPTkcgKmIsIGludCBuKQogICAgICAgIHsKCUJOX1VMT05HIHQxLHQyOwoJaW50IGM9MDsKCglpZiAobiA8PSAwKSByZXR1cm4oKEJOX1VMT05HKTApOwoKCWZvciAoOzspCgkJewoJCXQxPWFbMF07IHQyPWJbMF07CgkJclswXT0odDEtdDItYykmQk5fTUFTSzI7CgkJaWYgKHQxICE9IHQyKSBjPSh0MSA8IHQyKTsKCQlpZiAoLS1uIDw9IDApIGJyZWFrOwoKCQl0MT1hWzFdOyB0Mj1iWzFdOwoJCXJbMV09KHQxLXQyLWMpJkJOX01BU0syOwoJCWlmICh0MSAhPSB0MikgYz0odDEgPCB0Mik7CgkJaWYgKC0tbiA8PSAwKSBicmVhazsKCgkJdDE9YVsyXTsgdDI9YlsyXTsKCQlyWzJdPSh0MS10Mi1jKSZCTl9NQVNLMjsKCQlpZiAodDEgIT0gdDIpIGM9KHQxIDwgdDIpOwoJCWlmICgtLW4gPD0gMCkgYnJlYWs7CgoJCXQxPWFbM107IHQyPWJbM107CgkJclszXT0odDEtdDItYykmQk5fTUFTSzI7CgkJaWYgKHQxICE9IHQyKSBjPSh0MSA8IHQyKTsKCQlpZiAoLS1uIDw9IDApIGJyZWFrOwoKCQlhKz00OwoJCWIrPTQ7CgkJcis9NDsKCQl9CglyZXR1cm4oYyk7Cgl9CiNlbmRpZgoKLyogbXVsX2FkZF9jKGEsYixjMCxjMSxjMikgIC0tIGMrPWEqYiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIG11bF9hZGRfYzIoYSxiLGMwLGMxLGMyKSAtLSBjKz0yKmEqYiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIHNxcl9hZGRfYyhhLGksYzAsYzEsYzIpICAtLSBjKz1hW2ldXjIgZm9yIHRocmVlIHdvcmQgbnVtYmVyIGM9KGMyLGMxLGMwKSAqLwovKiBzcXJfYWRkX2MyKGEsaSxjMCxjMSxjMikgLS0gYys9MiphW2ldKmFbal0gZm9yIHRocmVlIHdvcmQgbnVtYmVyIGM9KGMyLGMxLGMwKSAqLwoKI2lmIDAKLyogb3JpZ2luYWwgbWFjcm9zIGFyZSBrZXB0IGZvciByZWZlcmVuY2UgcHVycG9zZXMgKi8KI2RlZmluZSBtdWxfYWRkX2MoYSxiLGMwLGMxLGMyKSB7CVwKCUJOX1VMT05HIHRhPShhKSx0Yj0oYik7CQlcCgl0MSA9IHRhICogdGI7CQkJXAoJdDIgPSBCTl9VTVVMVF9ISUdIKHRhLHRiKTsJXAoJYzAgKz0gdDE7IHQyICs9IChjMDx0MSk/MTowOwlcCgljMSArPSB0MjsgYzIgKz0gKGMxPHQyKT8xOjA7CVwKCX0KCiNkZWZpbmUgbXVsX2FkZF9jMihhLGIsYzAsYzEsYzIpIHsJXAoJQk5fVUxPTkcgdGE9KGEpLHRiPShiKSx0MDsJXAoJdDEgPSBCTl9VTVVMVF9ISUdIKHRhLHRiKTsJXAoJdDAgPSB0YSAqIHRiOwkJCVwKCXQyID0gdDErdDE7IGMyICs9ICh0Mjx0MSk/MTowOwlcCgl0MSA9IHQwK3QwOyB0MiArPSAodDE8dDApPzE6MDsJXAoJYzAgKz0gdDE7IHQyICs9IChjMDx0MSk/MTowOwlcCgljMSArPSB0MjsgYzIgKz0gKGMxPHQyKT8xOjA7CVwKCX0KI2Vsc2UKI2RlZmluZSBtdWxfYWRkX2MoYSxiLGMwLGMxLGMyKQlkbyB7CVwKCWFzbSAoIm11bHEgJTMiCQkJXAoJCTogIj1hIih0MSksIj1kIih0MikJXAoJCTogImEiKGEpLCJtIihiKQkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIglcCgkJOiAiK3IiKGMwKSwiK2QiKHQyKQlcCgkJOiAiYSIodDEpLCJnIigwKQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoYzEpLCIrciIoYzIpCVwKCQk6ICJkIih0MiksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJfSB3aGlsZSAoMCkKCiNkZWZpbmUgc3FyX2FkZF9jKGEsaSxjMCxjMSxjMikJZG8gewlcCglhc20gKCJtdWxxICUyIgkJCVwKCQk6ICI9YSIodDEpLCI9ZCIodDIpCVwKCQk6ICJhIihhW2ldKQkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIglcCgkJOiAiK3IiKGMwKSwiK2QiKHQyKQlcCgkJOiAiYSIodDEpLCJnIigwKQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiCVwKCQk6ICIrciIoYzEpLCIrciIoYzIpCVwKCQk6ICJkIih0MiksImciKDApCVwKCQk6ICJjYyIpOwkJXAoJfSB3aGlsZSAoMCkKCiNkZWZpbmUgbXVsX2FkZF9jMihhLGIsYzAsYzEsYzIpIGRvIHsJXAoJYXNtICgibXVscSAlMyIJCQlcCgkJOiAiPWEiKHQxKSwiPWQiKHQyKQlcCgkJOiAiYSIoYSksIm0iKGIpCQlcCgkJOiAiY2MiKTsJCVwKCWFzbSAoImFkZHEgJTAsJTA7IGFkY3EgJTIsJTEiCVwKCQk6ICIrZCIodDIpLCIrciIoYzIpCVwKCQk6ICJnIigwKQkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUwLCUwOyBhZGNxICUyLCUxIglcCgkJOiAiK2EiKHQxKSwiK2QiKHQyKQlcCgkJOiAiZyIoMCkJCVwKCQk6ICJjYyIpOwkJXAoJYXNtICgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIJXAoJCTogIityIihjMCksIitkIih0MikJXAoJCTogImEiKHQxKSwiZyIoMCkJXAoJCTogImNjIik7CQlcCglhc20gKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIglcCgkJOiAiK3IiKGMxKSwiK3IiKGMyKQlcCgkJOiAiZCIodDIpLCJnIigwKQlcCgkJOiAiY2MiKTsJCVwKCX0gd2hpbGUgKDApCiNlbmRpZgoKI2RlZmluZSBzcXJfYWRkX2MyKGEsaSxqLGMwLGMxLGMyKQlcCgltdWxfYWRkX2MyKChhKVtpXSwoYSlbal0sYzAsYzEsYzIpCgp2b2lkIGJuX211bF9jb21iYTgoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphLCBCTl9VTE9ORyAqYikKCXsKCUJOX1VMT05HIHQxLHQyOwoJQk5fVUxPTkcgYzEsYzIsYzM7CgoJYzE9MDsKCWMyPTA7CgljMz0wOwoJbXVsX2FkZF9jKGFbMF0sYlswXSxjMSxjMixjMyk7CglyWzBdPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzBdLGJbMV0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbMV0sYlswXSxjMixjMyxjMSk7CglyWzFdPWMyOwoJYzI9MDsKCW11bF9hZGRfYyhhWzJdLGJbMF0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbMV0sYlsxXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVswXSxiWzJdLGMzLGMxLGMyKTsKCXJbMl09YzM7CgljMz0wOwoJbXVsX2FkZF9jKGFbMF0sYlszXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVsxXSxiWzJdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzJdLGJbMV0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbM10sYlswXSxjMSxjMixjMyk7CglyWzNdPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzRdLGJbMF0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbM10sYlsxXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsyXSxiWzJdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzFdLGJbM10sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbMF0sYls0XSxjMixjMyxjMSk7CglyWzRdPWMyOwoJYzI9MDsKCW11bF9hZGRfYyhhWzBdLGJbNV0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbMV0sYls0XSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVsyXSxiWzNdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzNdLGJbMl0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbNF0sYlsxXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVs1XSxiWzBdLGMzLGMxLGMyKTsKCXJbNV09YzM7CgljMz0wOwoJbXVsX2FkZF9jKGFbNl0sYlswXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVs1XSxiWzFdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzRdLGJbMl0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbM10sYlszXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVsyXSxiWzRdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzFdLGJbNV0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbMF0sYls2XSxjMSxjMixjMyk7CglyWzZdPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzBdLGJbN10sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbMV0sYls2XSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsyXSxiWzVdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzNdLGJbNF0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbNF0sYlszXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVs1XSxiWzJdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzZdLGJbMV0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbN10sYlswXSxjMixjMyxjMSk7CglyWzddPWMyOwoJYzI9MDsKCW11bF9hZGRfYyhhWzddLGJbMV0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbNl0sYlsyXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVs1XSxiWzNdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzRdLGJbNF0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbM10sYls1XSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVsyXSxiWzZdLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzFdLGJbN10sYzMsYzEsYzIpOwoJcls4XT1jMzsKCWMzPTA7CgltdWxfYWRkX2MoYVsyXSxiWzddLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzNdLGJbNl0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbNF0sYls1XSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVs1XSxiWzRdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzZdLGJbM10sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbN10sYlsyXSxjMSxjMixjMyk7CglyWzldPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzddLGJbM10sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbNl0sYls0XSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVs1XSxiWzVdLGMyLGMzLGMxKTsKCW11bF9hZGRfYyhhWzRdLGJbNl0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbM10sYls3XSxjMixjMyxjMSk7CglyWzEwXT1jMjsKCWMyPTA7CgltdWxfYWRkX2MoYVs0XSxiWzddLGMzLGMxLGMyKTsKCW11bF9hZGRfYyhhWzVdLGJbNl0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbNl0sYls1XSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVs3XSxiWzRdLGMzLGMxLGMyKTsKCXJbMTFdPWMzOwoJYzM9MDsKCW11bF9hZGRfYyhhWzddLGJbNV0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbNl0sYls2XSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVs1XSxiWzddLGMxLGMyLGMzKTsKCXJbMTJdPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzZdLGJbN10sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbN10sYls2XSxjMixjMyxjMSk7CglyWzEzXT1jMjsKCWMyPTA7CgltdWxfYWRkX2MoYVs3XSxiWzddLGMzLGMxLGMyKTsKCXJbMTRdPWMzOwoJclsxNV09YzE7Cgl9Cgp2b2lkIGJuX211bF9jb21iYTQoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphLCBCTl9VTE9ORyAqYikKCXsKCUJOX1VMT05HIHQxLHQyOwoJQk5fVUxPTkcgYzEsYzIsYzM7CgoJYzE9MDsKCWMyPTA7CgljMz0wOwoJbXVsX2FkZF9jKGFbMF0sYlswXSxjMSxjMixjMyk7CglyWzBdPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzBdLGJbMV0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbMV0sYlswXSxjMixjMyxjMSk7CglyWzFdPWMyOwoJYzI9MDsKCW11bF9hZGRfYyhhWzJdLGJbMF0sYzMsYzEsYzIpOwoJbXVsX2FkZF9jKGFbMV0sYlsxXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVswXSxiWzJdLGMzLGMxLGMyKTsKCXJbMl09YzM7CgljMz0wOwoJbXVsX2FkZF9jKGFbMF0sYlszXSxjMSxjMixjMyk7CgltdWxfYWRkX2MoYVsxXSxiWzJdLGMxLGMyLGMzKTsKCW11bF9hZGRfYyhhWzJdLGJbMV0sYzEsYzIsYzMpOwoJbXVsX2FkZF9jKGFbM10sYlswXSxjMSxjMixjMyk7CglyWzNdPWMxOwoJYzE9MDsKCW11bF9hZGRfYyhhWzNdLGJbMV0sYzIsYzMsYzEpOwoJbXVsX2FkZF9jKGFbMl0sYlsyXSxjMixjMyxjMSk7CgltdWxfYWRkX2MoYVsxXSxiWzNdLGMyLGMzLGMxKTsKCXJbNF09YzI7CgljMj0wOwoJbXVsX2FkZF9jKGFbMl0sYlszXSxjMyxjMSxjMik7CgltdWxfYWRkX2MoYVszXSxiWzJdLGMzLGMxLGMyKTsKCXJbNV09YzM7CgljMz0wOwoJbXVsX2FkZF9jKGFbM10sYlszXSxjMSxjMixjMyk7CglyWzZdPWMxOwoJcls3XT1jMjsKCX0KCnZvaWQgYm5fc3FyX2NvbWJhOChCTl9VTE9ORyAqciwgY29uc3QgQk5fVUxPTkcgKmEpCgl7CglCTl9VTE9ORyB0MSx0MjsKCUJOX1VMT05HIGMxLGMyLGMzOwoKCWMxPTA7CgljMj0wOwoJYzM9MDsKCXNxcl9hZGRfYyhhLDAsYzEsYzIsYzMpOwoJclswXT1jMTsKCWMxPTA7CglzcXJfYWRkX2MyKGEsMSwwLGMyLGMzLGMxKTsKCXJbMV09YzI7CgljMj0wOwoJc3FyX2FkZF9jKGEsMSxjMyxjMSxjMik7CglzcXJfYWRkX2MyKGEsMiwwLGMzLGMxLGMyKTsKCXJbMl09YzM7CgljMz0wOwoJc3FyX2FkZF9jMihhLDMsMCxjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsMiwxLGMxLGMyLGMzKTsKCXJbM109YzE7CgljMT0wOwoJc3FyX2FkZF9jKGEsMixjMixjMyxjMSk7CglzcXJfYWRkX2MyKGEsMywxLGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSw0LDAsYzIsYzMsYzEpOwoJcls0XT1jMjsKCWMyPTA7CglzcXJfYWRkX2MyKGEsNSwwLGMzLGMxLGMyKTsKCXNxcl9hZGRfYzIoYSw0LDEsYzMsYzEsYzIpOwoJc3FyX2FkZF9jMihhLDMsMixjMyxjMSxjMik7CglyWzVdPWMzOwoJYzM9MDsKCXNxcl9hZGRfYyhhLDMsYzEsYzIsYzMpOwoJc3FyX2FkZF9jMihhLDQsMixjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsNSwxLGMxLGMyLGMzKTsKCXNxcl9hZGRfYzIoYSw2LDAsYzEsYzIsYzMpOwoJcls2XT1jMTsKCWMxPTA7CglzcXJfYWRkX2MyKGEsNywwLGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSw2LDEsYzIsYzMsYzEpOwoJc3FyX2FkZF9jMihhLDUsMixjMixjMyxjMSk7CglzcXJfYWRkX2MyKGEsNCwzLGMyLGMzLGMxKTsKCXJbN109YzI7CgljMj0wOwoJc3FyX2FkZF9jKGEsNCxjMyxjMSxjMik7CglzcXJfYWRkX2MyKGEsNSwzLGMzLGMxLGMyKTsKCXNxcl9hZGRfYzIoYSw2LDIsYzMsYzEsYzIpOwoJc3FyX2FkZF9jMihhLDcsMSxjMyxjMSxjMik7CglyWzhdPWMzOwoJYzM9MDsKCXNxcl9hZGRfYzIoYSw3LDIsYzEsYzIsYzMpOwoJc3FyX2FkZF9jMihhLDYsMyxjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsNSw0LGMxLGMyLGMzKTsKCXJbOV09YzE7CgljMT0wOwoJc3FyX2FkZF9jKGEsNSxjMixjMyxjMSk7CglzcXJfYWRkX2MyKGEsNiw0LGMyLGMzLGMxKTsKCXNxcl9hZGRfYzIoYSw3LDMsYzIsYzMsYzEpOwoJclsxMF09YzI7CgljMj0wOwoJc3FyX2FkZF9jMihhLDcsNCxjMyxjMSxjMik7CglzcXJfYWRkX2MyKGEsNiw1LGMzLGMxLGMyKTsKCXJbMTFdPWMzOwoJYzM9MDsKCXNxcl9hZGRfYyhhLDYsYzEsYzIsYzMpOwoJc3FyX2FkZF9jMihhLDcsNSxjMSxjMixjMyk7CglyWzEyXT1jMTsKCWMxPTA7CglzcXJfYWRkX2MyKGEsNyw2LGMyLGMzLGMxKTsKCXJbMTNdPWMyOwoJYzI9MDsKCXNxcl9hZGRfYyhhLDcsYzMsYzEsYzIpOwoJclsxNF09YzM7CglyWzE1XT1jMTsKCX0KCnZvaWQgYm5fc3FyX2NvbWJhNChCTl9VTE9ORyAqciwgY29uc3QgQk5fVUxPTkcgKmEpCgl7CglCTl9VTE9ORyB0MSx0MjsKCUJOX1VMT05HIGMxLGMyLGMzOwoKCWMxPTA7CgljMj0wOwoJYzM9MDsKCXNxcl9hZGRfYyhhLDAsYzEsYzIsYzMpOwoJclswXT1jMTsKCWMxPTA7CglzcXJfYWRkX2MyKGEsMSwwLGMyLGMzLGMxKTsKCXJbMV09YzI7CgljMj0wOwoJc3FyX2FkZF9jKGEsMSxjMyxjMSxjMik7CglzcXJfYWRkX2MyKGEsMiwwLGMzLGMxLGMyKTsKCXJbMl09YzM7CgljMz0wOwoJc3FyX2FkZF9jMihhLDMsMCxjMSxjMixjMyk7CglzcXJfYWRkX2MyKGEsMiwxLGMxLGMyLGMzKTsKCXJbM109YzE7CgljMT0wOwoJc3FyX2FkZF9jKGEsMixjMixjMyxjMSk7CglzcXJfYWRkX2MyKGEsMywxLGMyLGMzLGMxKTsKCXJbNF09YzI7CgljMj0wOwoJc3FyX2FkZF9jMihhLDMsMixjMyxjMSxjMik7CglyWzVdPWMzOwoJYzM9MDsKCXNxcl9hZGRfYyhhLDMsYzEsYzIsYzMpOwoJcls2XT1jMTsKCXJbN109YzI7Cgl9CiNlbmRpZgo=