Li4gTWFjcm9zL0Fzc2VydHMvL0JPT1NUX01QTF9BU1NFUlQKCkJPT1NUX01QTF9BU1NFUlQKPT09PT09PT09PT09PT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2RlZmluZSBCT09TVF9NUExfQVNTRVJUKCBwcmVkICkgXFwKICAgICAgICB8dW5zcGVjaWZpZWQtdG9rZW4tc2VxfCBcXAogICAgL1wqXCovCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCkdlbmVyYXRlcyBhIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gdGhlIHByZWRpY2F0ZSBgYHByZWRgYCBob2xkcyBmYWxzZS4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvYXNzZXJ0LmhwcD4KCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBwcmVkYGAgICAgICB8IEJvb2xlYW4gbnVsbGFyeSB8TWV0YWZ1bmN0aW9ufCAgICB8IEEgcHJlZGljYXRlIHRvIGJlIGFzc2VydGVkLiAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IGJvb2xlYW4gbnVsbGFyeSB8TWV0YWZ1bmN0aW9ufCBgYHByZWRgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgQk9PU1RfTVBMX0FTU0VSVCgoIHByZWQgKSk7Cgo6UmV0dXJuIHR5cGU6CiAgICBOb25lLgoKOlNlbWFudGljczoKICAgIEdlbmVyYXRlcyBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGBgcHJlZDo6dHlwZTo6dmFsdWUgIT0gdHJ1ZWBgLCBvdGhlcndpc2UKICAgIGhhcyBubyBlZmZlY3QuIE5vdGUgdGhhdCBkb3VibGUgcGFyZW50aGVzZXMgYXJlIHJlcXVpcmVkIGV2ZW4gaWYgbm8gY29tbWFzIAogICAgYXBwZWFyIGluIHRoZSBjb25kaXRpb24uIAogICAgCiAgICBXaGVuIHBvc3NpYmxlIHdpdGhpbiB0aGUgY29tcGlsZXIncyBkaWFnbm9zdGljIGNhcGFiaWxpdGllcywKICAgIHRoZSBlcnJvciBtZXNzYWdlIHdpbGwgaW5jbHVkZSB0aGUgcHJlZGljYXRlJ3MgZnVsbCB0eXBlIG5hbWUsIGFuZCBoYXZlIGEgCiAgICBnZW5lcmFsIGZvcm0gb2Y6CgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICB8Li4ufCBcKlwqXCpcKlwqXCpcKlwqXCpcKlwqXCogcHJlZDo6XCpcKlwqXCpcKlwqXCpcKlwqXCpcKlwqIHwuLi58CgoKRXhhbXBsZQotLS0tLS0tCgo6OgogICAgCiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA+IHN0cnVjdCBteQogICAgewogICAgICAgIC8vIC4uLgogICAgICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBULFUgPiApKTsKICAgIH07CiAgICAKICAgIG15PHZvaWQqLGNoYXIqPiB0ZXN0OwoKICAgIC8vIEluIGluc3RhbnRpYXRpb24gb2YgYG15PHZvaWQsIGNoYXIqPic6CiAgICAvLyAgIGluc3RhbnRpYXRlZCBmcm9tIGhlcmUKICAgIC8vIGNvbnZlcnNpb24gZnJvbSBgCiAgICAvLyAgIG1wbF86OmZhaWxlZCoqKioqKioqKioqKmJvb3N0Ojppc19zYW1lPHZvaWQsIGNoYXIqPjo6KioqKioqKioqKioqJyB0byAKICAgIC8vICAgbm9uLXNjYWxhciB0eXBlIGBtcGxfOjphc3NlcnQ8ZmFsc2U+JyByZXF1ZXN0ZWQKCgpTZWUgYWxzbwotLS0tLS0tLQoKfEFzc2VydHN8LCB8Qk9PU1RfTVBMX0FTU0VSVF9OT1R8LCB8Qk9PU1RfTVBMX0FTU0VSVF9NU0d8LCB8Qk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTnwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==