Ly89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KLy8KLy8gysrKysrKysrKysrKysrKysrKyspUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQovLwovLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgovLwovLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwoKLy8gPHR1cGxlPgoKLy8gdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPiBjbGFzcyB0dXBsZTsKCi8vIHR1cGxlJiBvcGVyYXRvcj0odHVwbGUmJiB1KTsKCiNpbmNsdWRlIDx0dXBsZT4KI2luY2x1ZGUgPGNhc3NlcnQ+CgojaW5jbHVkZSAiLi4vTW92ZU9ubHkuaCIKCmludCBtYWluKCkKewogICAgewogICAgICAgIHR5cGVkZWYgc3RkOjp0dXBsZTw+IFQ7CiAgICAgICAgVCB0MDsKICAgICAgICBUIHQ7CiAgICAgICAgdCA9IHN0ZDo6bW92ZSh0MCk7CiAgICB9CiAgICB7CiAgICAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPE1vdmVPbmx5PiBUOwogICAgICAgIFQgdDAoTW92ZU9ubHkoMCkpOwogICAgICAgIFQgdDsKICAgICAgICB0ID0gc3RkOjptb3ZlKHQwKTsKICAgICAgICBhc3NlcnQoc3RkOjpnZXQ8MD4odCkgPT0gMCk7CiAgICB9CiAgICB7CiAgICAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPE1vdmVPbmx5LCBNb3ZlT25seT4gVDsKICAgICAgICBUIHQwKE1vdmVPbmx5KDApLCBNb3ZlT25seSgxKSk7CiAgICAgICAgVCB0OwogICAgICAgIHQgPSBzdGQ6Om1vdmUodDApOwogICAgICAgIGFzc2VydChzdGQ6OmdldDwwPih0KSA9PSAwKTsKICAgICAgICBhc3NlcnQoc3RkOjpnZXQ8MT4odCkgPT0gMSk7CiAgICB9CiAgICB7CiAgICAgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPE1vdmVPbmx5LCBNb3ZlT25seSwgTW92ZU9ubHk+IFQ7CiAgICAgICAgVCB0MChNb3ZlT25seSgwKSwgTW92ZU9ubHkoMSksIE1vdmVPbmx5KDIpKTsKICAgICAgICBUIHQ7CiAgICAgICAgdCA9IHN0ZDo6bW92ZSh0MCk7CiAgICAgICAgYXNzZXJ0KHN0ZDo6Z2V0PDA+KHQpID09IDApOwogICAgICAgIGFzc2VydChzdGQ6OmdldDwxPih0KSA9PSAxKTsKICAgICAgICBhc3NlcnQoc3RkOjpnZXQ8Mj4odCkgPT0gMik7CiAgICB9Cn0K