Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9tYXhfZWxlbWVudCB8OTAKCm1heF9lbGVtZW50Cj09PT09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBQcmVkID0gbGVzczxfMSxfMj4KICAgICAgICA+CiAgICBzdHJ1Y3QgbWF4X2VsZW1lbnQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBsYXJnZXN0IGVsZW1lbnQgaW4gYGBTZXF1ZW5jZWBgLiAKCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvbWF4X2VsZW1lbnQuaHBwPgoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfGBgU2VxdWVuY2VgYCAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgICAgICAgICAgfCBBIHNlcXVlbmNlIHRvIGJlIHNlYXJjaGVkLiAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBQcmVkYGAgICAgICB8IEJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258ICAgIHwgQSBjb21wYXJpc29uIGNyaXRlcmlhLiAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKRm9yIGFueSB8Rm9yd2FyZCBTZXF1ZW5jZXwgYGBzYGAgYW5kIGJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258IGBgcHJlZGBgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIG1heF9lbGVtZW50PHMscHJlZD46OnR5cGUgaTsgCgo6UmV0dXJuIHR5cGU6CiAgICB8Rm9yd2FyZCBJdGVyYXRvcnwuCgo6U2VtYW50aWNzOgogICAgYGBpYGAgaXMgdGhlIGZpcnN0IGl0ZXJhdG9yIGluIHxiZWdpbi9lbmQ8cz58IHN1Y2ggdGhhdCBmb3IgZXZlcnkgaXRlcmF0b3IgYGBqYGAgCiAgICBpbiB8YmVnaW4vZW5kPHM+fCwKICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgICAgICAKICAgICAgICBhcHBseTwgcHJlZCwgZGVyZWY8aT46OnR5cGUsIGRlcmVmPGo+Ojp0eXBlID46OnR5cGU6OnZhbHVlID09IGZhbHNlCgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpMaW5lYXIuIFplcm8gY29tcGFyaXNvbnMgaWYgYGBzYGAgaXMgZW1wdHksIG90aGVyd2lzZSBleGFjdGx5IGBgc2l6ZTxzPjo6dmFsdWUgLSAxYGAgCmNvbXBhcmlzb25zLiAKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiB2ZWN0b3I8Ym9vbCxjaGFyWzUwXSxsb25nLGRvdWJsZT4gdHlwZXM7CiAgICB0eXBlZGVmIG1heF9lbGVtZW50PAogICAgICAgICAgdHJhbnNmb3JtX3ZpZXc8IHR5cGVzLHNpemVvZl88XzE+ID4KICAgICAgICA+Ojp0eXBlIGl0ZXI7CiAgICAKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBkZXJlZjxpdGVyOjpiYXNlPjo6dHlwZSwgY2hhcls1MF0+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8UXVlcnlpbmcgQWxnb3JpdGhtc3wsIHxtaW5fZWxlbWVudHwsIHxmaW5kX2lmfCwgfHVwcGVyX2JvdW5kfCwgfGZpbmR8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=