IyMKIyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNvcmVib290IHByb2plY3QuCiMjCiMjIENvcHlyaWdodCAoQykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiMjIENvcHlyaWdodCAoQykgMjAxMCBTaWVtZW5zIEFHLCBJbmMuCiMjIChXcml0dGVuIGJ5IEpvc2VmIEtlbGxlcm1hbm4gPGpvc2VwaC5rZWxsZXJtYW5uQGhlaXRlYy5kZT4gZm9yIFNpZW1lbnMgQUcsIEluYy4pCiMjCiMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KIyMKIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyMKIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCiMjCiMjCiMjCgplbnRyaWVzCgojc3RhcnQtYml0IGxlbmd0aCAgY29uZmlnIGNvbmZpZy1JRCAgICBuYW1lCiMwICAgICAgICAgICAgOCAgICAgICByICAgICAgIDAgICAgICAgIHNlY29uZHMKIzggICAgICAgICAgICA4ICAgICAgIHIgICAgICAgMCAgICAgICAgYWxhcm1fc2Vjb25kcwojMTYgICAgICAgICAgIDggICAgICAgciAgICAgICAwICAgICAgICBtaW51dGVzCiMyNCAgICAgICAgICAgOCAgICAgICByICAgICAgIDAgICAgICAgIGFsYXJtX21pbnV0ZXMKIzMyICAgICAgICAgICA4ICAgICAgIHIgICAgICAgMCAgICAgICAgaG91cnMKIzQwICAgICAgICAgICA4ICAgICAgIHIgICAgICAgMCAgICAgICAgYWxhcm1faG91cnMKIzQ4ICAgICAgICAgICA4ICAgICAgIHIgICAgICAgMCAgICAgICAgZGF5X29mX3dlZWsKIzU2ICAgICAgICAgICA4ICAgICAgIHIgICAgICAgMCAgICAgICAgZGF5X29mX21vbnRoCiM2NCAgICAgICAgICAgOCAgICAgICByICAgICAgIDAgICAgICAgIG1vbnRoCiM3MiAgICAgICAgICAgOCAgICAgICByICAgICAgIDAgICAgICAgIHllYXIKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiM4MCAgICAgICAgICAgNCAgICAgICByICAgICAgIDAgICAgICAgIHJhdGVfc2VsZWN0CiM4NCAgICAgICAgICAgMyAgICAgICByICAgICAgIDAgICAgICAgIFJFRl9DbG9jawojODcgICAgICAgICAgIDEgICAgICAgciAgICAgICAwICAgICAgICBVSVAKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiM4OCAgICAgICAgICAgMSAgICAgICByICAgICAgIDAgICAgICAgIGF1dG9fc3dpdGNoX0RTVAojODkgICAgICAgICAgIDEgICAgICAgciAgICAgICAwICAgICAgICAyNF9ob3VyX21vZGUKIzkwICAgICAgICAgICAxICAgICAgIHIgICAgICAgMCAgICAgICAgYmluYXJ5X3ZhbHVlc19lbmFibGUKIzkxICAgICAgICAgICAxICAgICAgIHIgICAgICAgMCAgICAgICAgc3F1YXJlLXdhdmVfb3V0X2VuYWJsZQojOTIgICAgICAgICAgIDEgICAgICAgciAgICAgICAwICAgICAgICB1cGRhdGVfZmluaXNoZWRfZW5hYmxlCiM5MyAgICAgICAgICAgMSAgICAgICByICAgICAgIDAgICAgICAgIGFsYXJtX2ludGVycnVwdF9lbmFibGUKIzk0ICAgICAgICAgICAxICAgICAgIHIgICAgICAgMCAgICAgICAgcGVyaW9kaWNfaW50ZXJydXB0X2VuYWJsZQojOTUgICAgICAgICAgIDEgICAgICAgciAgICAgICAwICAgICAgICBkaXNhYmxlX2Nsb2NrX3VwZGF0ZXMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojOTYgICAgICAgICAyODggICAgICAgciAgICAgICAwICAgICAgICB0ZW1wb3JhcnlfZmlsbGVyCjAgICAgICAgICAgMzg0ICAgICAgIHIgICAgICAgMCAgICAgICAgcmVzZXJ2ZWRfbWVtb3J5CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIzM4NCAgICAgICAgICAxICAgICAgIGUgICAgICAgNCAgICAgICAgdW51c2VkCjM4NSAgICAgICAgICAxICAgICAgIHIgICAgICAgNCAgICAgICAgbGFzdF9ib290CiMzODYgICAgICAgICAgMSAgICAgICByICAgICAgIDEgICAgICAgIHVudXNlZAozODcgICAgICAgICAgMSAgICAgICBlICAgICAgIDE2ICAgICAgIGNtb3NfZGVmYXVsdHNfbG9hZGVkCjM4OCAgICAgICAgICA0ICAgICAgIHIgICAgICAgMCAgICAgICAgcmVib290X2JpdHMKMzkyICAgICAgICAgIDMgICAgICAgZSAgICAgICA1ICAgICAgICBiYXVkX3JhdGUKIzM5NSAgICAgICAgICAxICAgICAgIHIgICAgICAgMSAgICAgICAgdW51c2VkCiMzOTYgICAgICAgICAgMSAgICAgICByICAgICAgIDEgICAgICAgIHVudXNlZAojMzk3ICAgICAgICAgIDIgICAgICAgciAgICAgICA4ICAgICAgICB1bnVzZWQKMzk5ICAgICAgICAgIDEgICAgICAgZSAgICAgICAyICAgICAgICBtdWx0aV9jb3JlCiM0MDAgICAgICAgICAgOCAgICAgICByICAgICAgIDE4ICAgICAgIHJlc2VydmVkCjQwOCAgICAgICAgICA0ICAgICAgIGUgICAgICAgNiAgICAgICAgZGVidWdfbGV2ZWwKNDEyICAgICAgICAgIDEgICAgICAgZSAgICAgICAxICAgICAgICBwb3dlcl9vbl9hZnRlcl9mYWlsCiM0MTMgICAgICAgICAgMSAgICAgICByICAgICAgIDEgICAgICAgIHVudXNlZAo0MTQgICAgICAgICAgMSAgICAgICBlICAgICAgIDE3ICAgICAgIHNhdGFfbW9kZQo0MTUgICAgICAgICAgMSAgICAgICBlICAgICAgIDEgICAgICAgIG5taQo0MTYgICAgICAgICAgMSAgICAgICBlICAgICAgIDEgICAgICAgIGNwdV9mYW5fY29udHJvbAo0MTcgICAgICAgICAgMSAgICAgICBlICAgICAgIDEgICAgICAgIGNoYXNzaXNfZmFuX2NvbnRyb2wKNDE4ICAgICAgICAgIDEgICAgICAgZSAgICAgICAxMyAgICAgICBjcHVfZmFuX3BvbGFyaXR5CjQxOSAgICAgICAgICAxICAgICAgIGUgICAgICAgMTMgICAgICAgY2hhc3Npc19mYW5fcG9sYXJpdHkKNDIwICAgICAgICAgIDQgICAgICAgZSAgICAgICAxNCAgICAgICBjcHVfdF9taW4KNDI0ICAgICAgICAgIDQgICAgICAgZSAgICAgICAxNCAgICAgICBjcHVfdF9tYXgKNDI4ICAgICAgICAgIDQgICAgICAgZSAgICAgICAxNSAgICAgICBjcHVfZHV0eWN5Y2xlX21pbgo0MzIgICAgICAgICAgNCAgICAgICBlICAgICAgIDE1ICAgICAgIGNwdV9kdXR5Y3ljbGVfbWF4CjQzNiAgICAgICAgICA0ICAgICAgIGUgICAgICAgMTQgICAgICAgY2hhc3Npc190X21pbgo0NDAgICAgICAgICAgNCAgICAgICBlICAgICAgIDE0ICAgICAgIGNoYXNzaXNfdF9tYXgKNDQ0ICAgICAgICAgIDQgICAgICAgZSAgICAgICAxNSAgICAgICBjaGFzc2lzX2R1dHljeWNsZV9taW4KNDQ4ICAgICAgICAgIDQgICAgICAgZSAgICAgICAxNSAgICAgICBjaGFzc2lzX2R1dHljeWNsZV9tYXgKIzQ1MiAgICAgICAgICA0ICAgICAgIHIgICAgICAgOSAgICAgICAgdW51c2VkCjQ1NiAgICAgICAgICA0ICAgICAgIGUgICAgICAgMTAgICAgICAgYm9vdF9kZWxheQo0NjAJCSAgICAgNCAgICAgICBlICAgICAgIDExICAgICAgIGxjZF9wYW5lbF9pZAojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNDY0ICAgICAgICAgIDUxMiAgICAgcyAgICAgICAwICAgICAgICBib290X2RldmljZXMKOTc2ICAgICAgICAgIDggICAgICAgaCAgICAgICAwICAgICAgICBib290X2RlZmF1bHQKOTg0ICAgICAgICAgMTYgICAgICAgaCAgICAgICAwICAgICAgICBjaGVja19zdW0KIyBSZXNlcnZlIHRoZSBleHRlbmRlZCBBTUQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKMTAwMCAgICAgICAgMjQgICAgICAgciAgICAgICAwICAgICAgICBhbWRfcmVzZXJ2ZWQKCgoKZW51bWVyYXRpb25zCgojSUQgdmFsdWUgICB0ZXh0CjEgICAgIDAgICAgIERpc2FibGUKMSAgICAgMSAgICAgRW5hYmxlCjIgICAgIDAgICAgIEVuYWJsZQoyICAgICAxICAgICBEaXNhYmxlCjQgICAgIDAgICAgIEZhbGxiYWNrCjQgICAgIDEgICAgIE5vcm1hbAo1ICAgICAwICAgICAxMTUyMDAKNSAgICAgMSAgICAgNTc2MDAKNSAgICAgMiAgICAgMzg0MDAKNSAgICAgMyAgICAgMTkyMDAKNSAgICAgNCAgICAgOTYwMAo1ICAgICA1ICAgICA0ODAwCjUgICAgIDYgICAgIDI0MDAKNSAgICAgNyAgICAgMTIwMAo2ICAgICA0ICAgICBXYXJuaW5nCjYgICAgIDUgICAgIE5vdGljZQo2ICAgICA2ICAgICBJbmZvCjYgICAgIDcgICAgIERlYnVnCjYgICAgIDggICAgIFNwZXcKIzcgICAgIDAgICAgIE5ldHdvcmsKIzcgICAgIDEgICAgIEhERAojNyAgICAgMiAgICAgRmxvcHB5CiM3ICAgICA4ICAgICBGYWxsYmFja19OZXR3b3JrCiM3ICAgICA5ICAgICBGYWxsYmFja19IREQKIzcgICAgIDEwICAgIEZhbGxiYWNrX0Zsb3BweQojNyAgICAgMyAgICAgUk9NCjggICAgIDAgICAgIEREUjQwMAo4ICAgICAxICAgICBERFIzMzMKOCAgICAgMiAgICAgRERSMjY2CjggICAgIDMgICAgIEREUjIwMAojIGJvb3QgZGVsYXkKMTAgICAgMCAgICAgb2ZmCjEwICAgIDEgICAgIDFzCjEwICAgIDIgICAgIDJzCjEwICAgIDMgICAgIDNzCjEwICAgIDQgICAgIDRzCjEwICAgIDUgICAgIDVzCjEwICAgIDYgICAgIDZzCjEwICAgIDcgICAgIDdzCjEwICAgIDggICAgIDhzCjEwICAgIDkgICAgIDlzCjEwICAgIDEwICAgIDEwcwojIExDRCBQYW5lbCBJRAoxMQkwCW5vX3BhbmVsCjExCTEJMTAyNHg3NjhfNjVNSHpfRHVhbAoxMQkyCTE5MjB4MTIwMF8xNjJNSHoKMTEJMwkxNjAweDEyMDBfMTYyTUh6CjExCTQJMTAyNHg3NjhfNjVNSHoKMTEJNQkxNDAweDEwNTBfMTA4TUh6CjExCTYJMTY4MHgxMDUwXzExOU1IegoxMQk3CTIwNDh4MTUzNl8xNjRNSHoKMTEJOAkxMjgweDEwMjRfMTA4TUh6CjExCTkJMTM2Nng3NjhfODZNSHpfY2hpbWVpX1YzMkIxTDAxCiMgVFYgU3RhbmRhcmQKIzEyCTAJTlRTQwojMTIJMQlQQUwKIzEyCTIJUEFMTQojMTIJMwlQQUw2MAojMTIJNAlOVFNDSgojMTIJNQlQQUxDTgojMTIJNglQQUxOCiMxMgk5CVNDQVJULVJHQgojMTIJMTUJbm9fdHYKIyBDUFUvQ2hhc3NpcyBGQU4gQ29udHJvbDogcG9sYXJpdHkKMTMgIDAgICBBY3RpdmVfaGlnaAoxMyAgMSAgIEFjdGl2ZV9sb3cKIyBUZW1wZXJhdHVyZSCwQwoxNCAgMCAgIDMwCjE0ICAxICAgMzUKMTQgIDIgICA0MAoxNCAgMyAgIDQ1CjE0ICA0ICAgNTAKMTQgIDUgICA1NQoxNCAgNiAgIDYwCjE0ICA3ICAgNjUKMTQgIDggICA3MAoxNCAgOSAgIDc1CjE0ICAxMCAgODAKMTQgIDExICA4NQoxNCAgMTIgIDkwCjE0ICAxMyAgOTUKMTQgIDE0ICAxMDAKIyBEdXR5Y3ljbGUgJQoxNSAgMCAgIDI1JQoxNSAgMSAgIDMwJQoxNSAgMiAgIDM1JQoxNSAgMyAgIDQwJQoxNSAgNCAgIDQ1JQoxNSAgNSAgIDUwJQoxNSAgNiAgIDU1JQoxNSAgNyAgIDYwJQoxNSAgOCAgIDY1JQoxNSAgOSAgIDcwJQoxNSAgMTAgIDc1JQoxNSAgMTEgIDgwJQoxNSAgMTIgIDg1JQoxNSAgMTMgIDkwJQoxNSAgMTQgIDk1JQoxNSAgMTUgIDEwMCUKIyBjbW9zX2RlZmF1bHRzX2xvYWRlZAoxNiAgMCAgIE5vCjE2ICAxICAgWWVzCiMgc2F0YV9tb2RlCjE3ICAwICAgQUhDSQoxNyAgMSAgIElERQojIHJlc2VydmVkCjE4ICAzMiAgMjAwMAojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpjaGVja3N1bXMKCmNoZWNrc3VtIDM5MiA5ODMgOTg0CgoK