Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKi8KCiNpbmNsdWRlICJpbnRlcm5hbC5oIgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2lmIF9fR05VX0xJQlJBUllfXyA8IDUKCiNpZm5kZWYgX19hbHBoYV9fCiMgZGVmaW5lIF9fTlJfa2xvZ2N0bCBfX05SX3N5c2xvZwojaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4Kc3RhdGljIGlubGluZSBfc3lzY2FsbDMoaW50LCBrbG9nY3RsLCBpbnQsIHR5cGUsIGNoYXIgKiwgYiwgaW50LCBsZW4pOwojZWxzZQkJCQkJCQkvKiBfX2FscGhhX18gKi8KI2RlZmluZSBrbG9nY3RsIHN5c2xvZwojZW5kaWYKCiNlbHNlCiMgaW5jbHVkZSA8c3lzL2tsb2cuaD4KI2VuZGlmCgpzdGF0aWMgY29uc3QgY2hhciBkbWVzZ191c2FnZVtdID0gImRtZXNnIFstY10gWy1uIExFVkVMXSBbLXMgU0laRV1cbiIKI2lmbmRlZiBCQl9GRUFUVVJFX1RSSVZJQUxfSEVMUAoJIlxuUHJpbnRzIG9yIGNvbnRyb2xzIHRoZSBrZXJuZWwgcmluZyBidWZmZXJcblxuIgoJIk9wdGlvbnM6XG4iCgkiXHQtY1x0XHRDbGVhcnMgdGhlIHJpbmcgYnVmZmVyJ3MgY29udGVudHMgYWZ0ZXIgcHJpbnRpbmdcbiIKCSJcdC1uIExFVkVMXHRTZXRzIGNvbnNvbGUgbG9nZ2luZyBsZXZlbFxuIgoJIlx0LXMgU0laRVx0XHRVc2UgYSBidWZmZXIgb2Ygc2l6ZSBTSVpFXG4iCiNlbmRpZgoJOwoKaW50IGRtZXNnX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CgljaGFyICpidWY7CglpbnQgYnVmc2l6ZSA9IDgxOTY7CglpbnQgaTsKCWludCBuOwoJaW50IGxldmVsID0gMDsKCWludCBsYXN0YzsKCWludCBjbWQgPSAzOwoJaW50IHN0b3BEb2luZ1RoYXQ7CgoJYXJnYy0tOwoJYXJndisrOwoKCS8qIFBhcnNlIGFueSBvcHRpb25zICovCgl3aGlsZSAoYXJnYyAmJiAqKmFyZ3YgPT0gJy0nKSB7CgkJc3RvcERvaW5nVGhhdCA9IEZBTFNFOwoJCXdoaWxlIChzdG9wRG9pbmdUaGF0ID09IEZBTFNFICYmICorKygqYXJndikpIHsKCQkJc3dpdGNoICgqKmFyZ3YpIHsKCQkJY2FzZSAnYyc6CgkJCQljbWQgPSA0OwoJCQkJYnJlYWs7CgkJCWNhc2UgJ24nOgoJCQkJY21kID0gODsKCQkJCWlmICgtLWFyZ2MgPT0gMCkKCQkJCQlnb3RvIGVuZDsKCQkJCWxldmVsID0gYXRvaSgqKCsrYXJndikpOwoJCQkJaWYgKC0tYXJnYyA+IDApCgkJCQkJKythcmd2OwoJCQkJc3RvcERvaW5nVGhhdCA9IFRSVUU7CgkJCQlicmVhazsKCQkJY2FzZSAncyc6CgkJCQlpZiAoLS1hcmdjID09IDApCgkJCQkJZ290byBlbmQ7CgkJCQlidWZzaXplID0gYXRvaSgqKCsrYXJndikpOwoJCQkJaWYgKC0tYXJnYyA+IDApCgkJCQkJKythcmd2OwoJCQkJc3RvcERvaW5nVGhhdCA9IFRSVUU7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWdvdG8gZW5kOwoJCQl9CgkJfQoJfQoKCWlmIChhcmdjID4gMSkgewoJCWdvdG8gZW5kOwoJfQoKCWlmIChjbWQgPT0gOCkgewoJCW4gPSBrbG9nY3RsKGNtZCwgTlVMTCwgbGV2ZWwpOwoJCWlmIChuIDwgMCkgewoJCQlnb3RvIGtsb2djdGxfZXJyb3I7CgkJfQoJCWV4aXQoVFJVRSk7Cgl9CgoJaWYgKGJ1ZnNpemUgPCA0MDk2KQoJCWJ1ZnNpemUgPSA0MDk2OwoJYnVmID0gKGNoYXIgKikgeG1hbGxvYyhidWZzaXplKTsKCW4gPSBrbG9nY3RsKGNtZCwgYnVmLCBidWZzaXplKTsKCWlmIChuIDwgMCkgewoJCWdvdG8ga2xvZ2N0bF9lcnJvcjsKCX0KCglsYXN0YyA9ICdcbic7Cglmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJaWYgKChpID09IDAgfHwgYnVmW2kgLSAxXSA9PSAnXG4nKSAmJiBidWZbaV0gPT0gJzwnKSB7CgkJCWkrKzsKCQkJd2hpbGUgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykKCQkJCWkrKzsKCQkJaWYgKGJ1ZltpXSA9PSAnPicpCgkJCQlpKys7CgkJfQoJCWxhc3RjID0gYnVmW2ldOwoJCXB1dGNoYXIobGFzdGMpOwoJfQoJaWYgKGxhc3RjICE9ICdcbicpCgkJcHV0Y2hhcignXG4nKTsKCWV4aXQoVFJVRSk7CiAgZW5kOgoJdXNhZ2UoZG1lc2dfdXNhZ2UpOwoJZXhpdChGQUxTRSk7CiAga2xvZ2N0bF9lcnJvcjoKCXBlcnJvcigia2xvZ2N0bCIpOwoJcmV0dXJuKEZBTFNFKTsKfQo=