Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZW5AY29kZXBvZXQub3JnPi4gSSByaXBwZWQgb3V0IE5hdGl2ZSBMYW5ndWFnZSAKICogU3VwcG9ydCwgcmVwbGFjZWQgZ2V0b3B0LCBhZGRlZCBzb21lIGdvdG9zIGZvciByZWR1bmRhbnQgc3R1ZmYuCiAqCiAqIEF1ZGl0ZWQgYW5kIGNsZWFuZWQgdXAgb24gNyBNYXJjaCAyMDAzIHRvIHJlZHVjZSBzaXplIG9mCiAqIGNoZWNrIGVycm9yIGhhbmRsaW5nIGJ5IEVyaWsgQW5kZXJzZW4gPGFuZGVyc2VuQGNvZGVwb2V0Lm9yZz4KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Z2V0b3B0Lmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3lzL2tsb2cuaD4KCiNpbmNsdWRlICJidXN5Ym94LmgiCgppbnQgZG1lc2dfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWNoYXIgKmJ1ZjsKCWludCBidWZzaXplID0gODE5NjsKCWludCBpLCBuOwoJaW50IGxldmVsID0gMDsKCWludCBsYXN0YzsKCWludCBjbWQgPSAzOwoKCXdoaWxlICgoaSA9IGdldG9wdChhcmdjLCBhcmd2LCAiY246czoiKSkgPiAwKSB7CgkJc3dpdGNoIChpKSB7CgkJCWNhc2UgJ2MnOgoJCQkJY21kID0gNDsKCQkJCWJyZWFrOwoJCQljYXNlICduJzoKCQkJCWNtZCA9IDg7CgkJCQlsZXZlbCA9IGJiX3hnZXRsYXJnKG9wdGFyZywgMTAsIDAsIDEwKTsKCQkJCWJyZWFrOwoJCQljYXNlICdzJzoKCQkJCS8qIEkgdGhpbmsgYSA1MTJrIG1heCBrZXJuZWwgcmluZyBidWZmZXIgaXMgYmlnIGVub3VnaCBmb3IKCQkJCSAqIGFueWJvZHksIGFzIHRoZSBkZWZhdWx0IGlzIDE2ay4uLiAgQ291bGQgYmUgd3JvbmcgdGhvdWdoLgoJCQkJICogSWYgc28gSSdtIHN1cmUgSSdsbCBoZWFyIGFib3V0IGl0IGJ5IHRoZSBlbnJhZ2VkIG1hc3NlcyovCgkJCQlidWZzaXplID0gYmJfeGdldGxhcmcob3B0YXJnLCAxMCwgNDA5NiwgNTEyKjEwMjQpOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQliYl9zaG93X3VzYWdlKCk7CgkJfQoJfQoKCWlmIChvcHRpbmQgPCBhcmdjKSB7CgkJYmJfc2hvd191c2FnZSgpOwoJfQoKCWlmIChjbWQgPT0gOCkgewoJCWlmIChrbG9nY3RsKGNtZCwgTlVMTCwgbGV2ZWwpIDwgMCkKCQkJZ290byBkaWVfdGhlX2RlYXRoOwoJCWdvdG8gYWxsX2RvbmU7Cgl9CgoJYnVmID0geG1hbGxvYyhidWZzaXplKTsKCWlmICgobiA9IGtsb2djdGwoY21kLCBidWYsIGJ1ZnNpemUpKSA8IDApCgkJZ290byBkaWVfdGhlX2RlYXRoOwoKCWxhc3RjID0gJ1xuJzsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlpZiAobGFzdGMgPT0gJ1xuJyAmJiBidWZbaV0gPT0gJzwnKSB7CgkJCWkrKzsKCQkJd2hpbGUgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykKCQkJCWkrKzsKCQkJaWYgKGJ1ZltpXSA9PSAnPicpCgkJCQlpKys7CgkJfQoJCWxhc3RjID0gYnVmW2ldOwoJCXB1dGNoYXIobGFzdGMpOwoJfQoJaWYgKGxhc3RjICE9ICdcbicpCgkJcHV0Y2hhcignXG4nKTsKYWxsX2RvbmU6CiNpZmRlZiBDT05GSUdfRkVBVFVSRV9DTEVBTl9VUAoJaWYgKGJ1ZikgewoJCWZyZWUoYnVmKTsKCX0KI2VuZGlmCglyZXR1cm4gRVhJVF9TVUNDRVNTOwpkaWVfdGhlX2RlYXRoOgoJYmJfcGVycm9yX25vbXNnX2FuZF9kaWUoKTsKfQo=