Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9wb3BfYmFjawoKcG9wX2JhY2sKPT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICA+CiAgICBzdHJ1Y3QgcG9wX2JhY2sKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCmBgcG9wX2JhY2tgYCBwZXJmb3JtcyBhIHJlbW92YWwgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBndWFyYW50ZWVkIHxPKDEpfApjb21wbGV4aXR5LgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9wb3BfYmFjay5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxUYWcgRGlzcGF0Y2hlZCBNZXRhZnVuY3Rpb258CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxdWVuY2VgYCAgfCB8QmFjayBFeHRlbnNpYmxlIFNlcXVlbmNlfCAgICB8IEEgc2VxdWVuY2UgdG8gZXJhc2UgdGhlIGxhc3QgZWxlbWVudCBmcm9tLiAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8QmFjayBFeHRlbnNpYmxlIFNlcXVlbmNlfCBgYHNgYDoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIHBvcF9iYWNrPHM+Ojp0eXBlIHI7IAoKOlJldHVybiB0eXBlOgogICAgfEJhY2sgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwuCgo6UHJlY29uZGl0aW9uOgogICAgYGBlbXB0eTxzPjo6dmFsdWUgPT0gZmFsc2VgYC4KIAo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byBgYGVyYXNlPHMsZW5kPHM+Ojp0eXBlPjo6dHlwZTtgYC4KCjpQb3N0Y29uZGl0aW9uOgogICAgYGBzaXplPHI+Ojp2YWx1ZSA9PSBzaXplPHM+Ojp2YWx1ZSAtIDFgYC4KCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkFtb3J0aXplZCBjb25zdGFudCB0aW1lLgoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIHZlY3Rvcjxsb25nPjo6dHlwZSB0eXBlczE7CiAgICB0eXBlZGVmIHZlY3Rvcjxsb25nLGludD46OnR5cGUgdHlwZXMyOwogICAgdHlwZWRlZiB2ZWN0b3I8bG9uZyxpbnQsY2hhcj46OnR5cGUgdHlwZXMzOwogICAgCiAgICB0eXBlZGVmIHBvcF9iYWNrPHR5cGVzMT46OnR5cGUgcmVzdWx0MTsKICAgIHR5cGVkZWYgcG9wX2JhY2s8dHlwZXMyPjo6dHlwZSByZXN1bHQyOwogICAgdHlwZWRlZiBwb3BfYmFjazx0eXBlczM+Ojp0eXBlIHJlc3VsdDM7CiAgICAgICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBzaXplPHJlc3VsdDE+Ojp2YWx1ZSwgPT0sIDAgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemU8cmVzdWx0Mj46OnZhbHVlLCA9PSwgMSApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggc2l6ZTxyZXN1bHQzPjo6dmFsdWUsID09LCAyICk7CiAgICAgICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgYmFjazxyZXN1bHQyPjo6dHlwZSwgbG9uZz4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgYmFjazxyZXN1bHQzPjo6dHlwZSwgaW50ID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxCYWNrIEV4dGVuc2libGUgU2VxdWVuY2V8LCB8ZXJhc2V8LCB8cHVzaF9iYWNrfCwgfGJhY2t8LCB8cG9wX2Zyb250fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK