Li4gQWxnb3JpdGhtcy9UcmFuc2Zvcm1hdGlvbiBBbGdvcml0aG1zLy9yZXZlcnNlX3BhcnRpdGlvbiB8MTg1CgpyZXZlcnNlX3BhcnRpdGlvbgo9PT09PT09PT09PT09PT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBTZXEKICAgICAgICAsIHR5cGVuYW1lIFByZWQKICAgICAgICAsIHR5cGVuYW1lIEluMSA9IHx1bnNwZWNpZmllZHwKICAgICAgICAsIHR5cGVuYW1lIEluMiA9IHx1bnNwZWNpZmllZHwKICAgICAgICA+CiAgICBzdHJ1Y3QgcmV2ZXJzZV9wYXJ0aXRpb24KICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgYSBwYWlyIG9mIHNlcXVlbmNlcyB0b2dldGhlciBjb250YWluaW5nIGFsbCBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgCnxiZWdpbi9lbmQ8U2VxPnwgc3BsaXQgaW50byB0d28gZ3JvdXBzIGJhc2VkIG9uIHRoZSBwcmVkaWNhdGUgYGBQcmVkYGAuCmBgcmV2ZXJzZV9wYXJ0aXRpb25gYCBpcyBhIHN5bm9ueW0gZm9yIHxyZXZlcnNlX3N0YWJsZV9wYXJ0aXRpb258LgoKfHRyYW5zZm9ybWF0aW9uIGFsZ29yaXRobSBkaXNjbGFpbWVyfAoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9wYXJ0aXRpb24uaHBwPgoKCk1vZGVsIG9mCi0tLS0tLS0tCgp8UmV2ZXJzaWJsZSBBbGdvcml0aG18CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxYGAgICAgICAgICAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgICAgICAgICAgICAgIHwgQW4gb3JpZ2luYWwgc2VxdWVuY2UuICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgUHJlZGBgICAgICAgICAgIHwgVW5hcnkgfExhbWJkYSBFeHByZXNzaW9ufCAgICAgICAgIHwgQSBwYXJ0aXRpb25pbmcgcHJlZGljYXRlLiAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgSW4xYGAsIGBgSW4yYGAgIHwgfEluc2VydGVyfCAgICAgICAgICAgICAgICAgICAgICAgIHwgT3V0cHV0IGluc2VydGVycy4gICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8U2VtYW50aWNzIGRpc2NsYWltZXIuLi58IHxSZXZlcnNpYmxlIEFsZ29yaXRobXwuCgpGb3IgYW55IHxGb3J3YXJkIFNlcXVlbmNlfCBgYHNgYCwgYW4gdW5hcnkgfExhbWJkYSBFeHByZXNzaW9ufCBgYHByZWRgYCwgYW5kIHxJbnNlcnRlcnxcIHMgCmBgaW4xYGAgYW5kIGBgaW4yYGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgcmV2ZXJzZV9wYXJ0aXRpb248cyxwcmVkLGluMSxpbjI+Ojp0eXBlIHI7Cgo6UmV0dXJuIHR5cGU6CiAgICBBIHxwYWlyfC4KICAgIAo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byAKCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgICAgIHR5cGVkZWYgcmV2ZXJzZV9zdGFibGVfcGFydGl0aW9uPHMscHJlZCxpbjEsaW4yPjo6dHlwZSByOwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKTGluZWFyLiBFeGFjdGx5IGBgc2l6ZTxzPjo6dmFsdWVgYCBhcHBsaWNhdGlvbnMgb2YgYGBwcmVkYGAsIGFuZCBgYHNpemU8cz46OnZhbHVlYGAgCm9mIHN1bW1hcml6ZWQgYGBpbjE6Om9wZXJhdGlvbmBgIC8gYGBpbjI6Om9wZXJhdGlvbmBgIGFwcGxpY2F0aW9ucy4gCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBOID4gc3RydWN0IGlzX29kZCA6IGJvb2xfPChOOjp2YWx1ZSAlIDIpPiB7fTsKCiAgICB0eXBlZGVmIHBhcnRpdGlvbjwKICAgICAgICAgIHJhbmdlX2M8aW50LDAsMTA+IAogICAgICAgICwgaXNfb2RkPF8xPgogICAgICAgICwgYmFja19pbnNlcnRlcjwgdmVjdG9yPD4gPgogICAgICAgICwgYmFja19pbnNlcnRlcjwgdmVjdG9yPD4gPgogICAgICAgID46OnR5cGUgcjsKCiAgICBCT09TVF9NUExfQVNTRVJUKCggZXF1YWw8IHI6OmZpcnN0LCB2ZWN0b3JfYzxpbnQsOSw3LDUsMywxPiA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGVxdWFsPCByOjpzZWNvbmQsIHZlY3Rvcl9jPGludCw4LDYsNCwyLDA+ID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxUcmFuc2Zvcm1hdGlvbiBBbGdvcml0aG1zfCwgfFJldmVyc2libGUgQWxnb3JpdGhtfCwgfHBhcnRpdGlvbnwsIHxyZXZlcnNlX3N0YWJsZV9wYXJ0aXRpb258LCB8c29ydHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==