Li4gRGF0YSBUeXBlcy9OdW1lcmljLy9sb25nXyB8MzAKCmxvbmdcXwo9PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgbG9uZyBOCiAgICAgICAgPgogICAgc3RydWN0IGxvbmdcXwogICAgewogICAgICAgIC8vIHx1bnNwZWNpZmllZHwKICAgICAgICAvLyAuLi4KICAgIH07CgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCkFuIHxJbnRlZ3JhbCBDb25zdGFudHwgd3JhcHBlciBmb3IgYGBsb25nYGAuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2xvbmcuaHBwPgoKCk1vZGVsIG9mCi0tLS0tLS0tCgp8SW50ZWdyYWwgQ29uc3RhbnR8CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgTmBgICAgICAgICAgfCBBbiBpbnRlZ3JhbCBjb25zdGFudCAgICAgICAgICB8IEEgdmFsdWUgdG8gd3JhcC4gICAgICAgICAgfCAKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8U2VtYW50aWNzIGRpc2NsYWltZXIuLi58IHxJbnRlZ3JhbCBDb25zdGFudHwuCgpGb3IgYXJiaXRyYXJ5IGludGVncmFsIGNvbnN0YW50IGBgbmBgOgoKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgRXhwcmVzc2lvbiAgICAgICAgfCBTZW1hbnRpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYGxvbmdfPGM+YGAgICAgICB8IEFuIHxJbnRlZ3JhbCBDb25zdGFudHwgYGB4YGAgc3VjaCB0aGF0IGBgeDo6dmFsdWUgPT0gY2BgICB8CnwgICAgICAgICAgICAgICAgICAgfCBhbmQgYGB4Ojp2YWx1ZV90eXBlYGAgaXMgaWRlbnRpY2FsIHRvIGBgbG9uZ2BgLiAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGxvbmdfPDg+IGVpZ2h0OwogICAgCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTwgZWlnaHQ6OnZhbHVlX3R5cGUsIGxvbmcgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBlaWdodDo6dHlwZSwgZWlnaHQgPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBuZXh0PCBlaWdodCA+Ojp0eXBlLCBsb25nXzw5PiA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IHByaW9yPCBlaWdodCA+Ojp0eXBlLCBsb25nXzw3PiA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggKGVpZ2h0Ojp2YWx1ZSksID09LCA4ICk7CiAgICBhc3NlcnQoIGVpZ2h0KCkgPT0gOCApOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8RGF0YSBUeXBlc3wsIHxJbnRlZ3JhbCBDb25zdGFudHwsIHxpbnRffCwgfHNpemVfdHwsIHxpbnRlZ3JhbF9jfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK