Li4gSXRlcmF0b3JzL0l0ZXJhdG9yIE1ldGFmdW5jdGlvbnMvL2RlcmVmIHw1MAoKZGVyZWYKPT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKICAgICAgICA+CiAgICBzdHJ1Y3QgZGVyZWYKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpEZXJlZmVyZW5jZXMgYW4gaXRlcmF0b3IuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2RlcmVmLmhwcD4KCgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgSXRlcmF0b3JgYCAgfCB8Rm9yd2FyZCBJdGVyYXRvcnwgICAgICAgIHwgVGhlIGl0ZXJhdG9yIHRvIGRlcmVmZXJlbmNlLiAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBhbnkgfEZvcndhcmQgSXRlcmF0b3J8XCBzIGBgaXRlcmBgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGRlcmVmPGl0ZXI+Ojp0eXBlIHQ7IAoKOlJldHVybiB0eXBlOgogICAgQSB0eXBlLgoKOlByZWNvbmRpdGlvbjoKICAgIGBgaXRlcmBgIGlzIGRlcmVmZXJlbmNlYWJsZS4KCjpTZW1hbnRpY3M6CiAgICBgYHRgYCBpcyBpZGVudGljYWwgdG8gdGhlIGVsZW1lbnQgcmVmZXJlbmNlZCBieSBgYGl0ZXJgYC4gSWYgYGBpdGVyYGAgaXMKICAgIGEgdXNlci1kZWZpbmVkIGl0ZXJhdG9yLCB0aGUgbGlicmFyeS1wcm92aWRlZCBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIAogICAgZXF1aXZhbGVudCB0bwoKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIHR5cGVkZWYgaXRlcjo6dHlwZSB0OwoKICAgIAoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yPGNoYXIsc2hvcnQsaW50LGxvbmc+IHR5cGVzOwogICAgdHlwZWRlZiBiZWdpbjx0eXBlcz46OnR5cGUgaXRlcjsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IGRlcmVmPGl0ZXI+Ojp0eXBlLCBjaGFyID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxJdGVyYXRvcnN8LCB8YmVnaW58IC8gfGVuZHwsIHxuZXh0fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK