Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMTAgSm9lbCBkZSBHdXptYW4KICAgIGh0dHA6Ly9zcGlyaXQuc291cmNlZm9yZ2UubmV0LwoKICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgovLyB0aGlzIGZpbGUgaW50ZW50aW9uYWxseSBjb250YWlucyBub24tYXNjaWkgY2hhcmFjdGVycwovLyBib29zdGluc3BlY3Q6bm9hc2NpaQoKI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KI2luY2x1ZGUgPGJvb3N0L3NwaXJpdC9pbmNsdWRlL3FpX2NoYXIuaHBwPgojaW5jbHVkZSA8Ym9vc3Qvc3Bpcml0L2luY2x1ZGUvcWlfc3RyaW5nLmhwcD4KI2luY2x1ZGUgPGJvb3N0L3NwaXJpdC9pbmNsdWRlL3FpX2RpcmVjdGl2ZS5ocHA+CiNpbmNsdWRlIDxib29zdC9zcGlyaXQvaW5jbHVkZS9xaV9hY3Rpb24uaHBwPgojaW5jbHVkZSA8Ym9vc3Qvc3Bpcml0L2luY2x1ZGUvcGhvZW5peF9jb3JlLmhwcD4KI2luY2x1ZGUgPGJvb3N0L3NwaXJpdC9pbmNsdWRlL3Bob2VuaXhfb3BlcmF0b3IuaHBwPgoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSAidGVzdC5ocHAiCgppbnQKbWFpbigpCnsKICAgIHVzaW5nIHNwaXJpdF90ZXN0Ojp0ZXN0OwogICAgdXNpbmcgc3Bpcml0X3Rlc3Q6OnRlc3RfYXR0cjsKICAgIHVzaW5nIGJvb3N0OjpzcGlyaXQ6OnFpOjpsaXQ7CiAgICB1c2luZyBib29zdDo6c3Bpcml0OjpxaTo6bm9fY2FzZTsKICAgIHVzaW5nIGJvb3N0OjpzcGlyaXQ6OnFpOjpjaGFyXzsKICAgIHVzaW5nIGJvb3N0OjpzcGlyaXQ6OnFpOjplbmNvZGluZzsKICAgIG5hbWVzcGFjZSBjaGFyX2VuY29kaW5nID0gYm9vc3Q6OnNwaXJpdDo6Y2hhcl9lbmNvZGluZzsKCiAgICBlbmNvZGluZzxjaGFyX2VuY29kaW5nOjppc284ODU5XzE+IGlzbzg4NTlfMTsKCi8vIG5lZWRlZCBmb3IgVkM3LjEgb25seQojaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTMxMCkpCiNwcmFnbWEgc2V0bG9jYWxlKCJmcmVuY2giKQojZW5kaWYKCiAgICB7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLBIiwgaXNvODg1OV8xW25vX2Nhc2VbJ+EnXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIsEiLCBpc284ODU5XzFbbm9fY2FzZVtjaGFyXygn4ScpXV0pKTsKICAgIH0KCiAgICB7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLJIiwgaXNvODg1OV8xW25vX2Nhc2VbY2hhcl8oIuUt7yIpXV0pKTsKICAgICAgICBCT09TVF9URVNUKCF0ZXN0KCL/IiwgaXNvODg1OV8xW25vX2Nhc2VbY2hhcl8oIuUt7yIpXV0pKTsKICAgIH0KCiAgICB7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLB4SIsIGlzbzg4NTlfMVtub19jYXNlWyLhwSJdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiweEiLCBpc284ODU5XzFbbm9fY2FzZVtsaXQoIuHBIildXSkpOwogICAgfQoKCiNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIEJPT1NUX1RFU1RFRF9BVCgxMzEwKSkKI3ByYWdtYSBzZXRsb2NhbGUoIiIpCiNlbmRpZgoKICAgIHJldHVybiBib29zdDo6cmVwb3J0X2Vycm9ycygpOwp9Cg==