IyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwojIHRoYXQgbWF5IGFwcGx5OgojCiMgUG9ydGlvbnMgQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQojIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiMKCiMKIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgojCkFDX0lOSVQoW05ldC1TTk1QXSwgWzUuNy4zLnJjMl0sIFtuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XSkKQUNfUFJFUkVRKFsyLjYzXSkKQUNfQ09ORklHX1NSQ0RJUihbYWdlbnQvc25tcGQuY10pCkFDX1JFVklTSU9OKFskUmV2aXNpb24kXSkKCkFDX0NPTkZJR19NQUNST19ESVIoW200XSkKQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oKQoKQUNfTVNHX0NBQ0hFX0lOSVQoKQoKIwojIHNhdmUgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMKIwpBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUywiJGFjX2NvbmZpZ3VyZV9hcmdzIiwKICBbY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWVkXSkKQ09ORklHVVJFX09QVElPTlM9IlwiJGFjX2NvbmZpZ3VyZV9hcmdzXCIiCkFDX1NVQlNUKENPTkZJR1VSRV9PUFRJT05TKQoKIyMKIyMgUmVjb21tZW5kZWQgc3RydWN0dXJlOgojIwojICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgcGFja2FnZQojICAgICBjaGVja3MgZm9yIHByb2dyYW1zCiMgICAgIGNoZWNrcyBmb3IgbGlicmFyaWVzCiMgICAgIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCiMgICAgIGNoZWNrcyBmb3IgdHlwZXMKIyAgICAgY2hlY2tzIGZvciBzdHJ1Y3R1cmVzCiMgICAgIGNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCiMgICAgIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIyAgICAgY2hlY2tzIGZvciBzeXN0ZW0gc2VydmljZXMKCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyc10pCkFDX0NBQ0hFX1NBVkUKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYl0pCkFDX0NBQ0hFX1NBVkUKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnRdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzFdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbGliczJdKQpBQ19DQUNIRV9TQVZFCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzNdKQpBQ19DQUNIRV9TQVZFCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzRdKQpBQ19DQUNIRV9TQVZFCgojCiMgZGVmaW5lIHRoZSBhZ2VudCBsaWJyYXJpZXMgdmFyaWFibGVzCiMKQUNfU1VCU1QoTE1JQkxJQlMpCkFDX1NVQlNUKEFHRU5UTElCUykKQUNfU1VCU1QoT1RIRVJBR0VOVExJQk9CSlMpCkFDX1NVQlNUKE9USEVSQUdFTlRMSUJMT0JKUykKQUNfU1VCU1QoT1RIRVJBR0VOVExJQkxGVFMpCgpBQ19TVUJTVChETExJQlMpCgpBQ19TVUJTVChQQVJUSUFMVEFSR0VURkxBR1MpCkFDX1NVQlNUKGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSkKCkFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFtzbm1wbGliL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpzbm1wbGliL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOnNubXBsaWIvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kXSkKQUNfQ09ORklHX0ZJTEVTKFtsb2NhbC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bG9jYWwvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQpBQ19DT05GSUdfRklMRVMoW3Rlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW5dKQpBQ19DT05GSUdfRklMRVMoW21hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFttaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluXSwKCQlbY2htb2QgK3ggbmV0LXNubXAtY29uZmlnXSkKQUNfQ09ORklHX0ZJTEVTKFtuZXQtc25tcC1jcmVhdGUtdjMtdXNlcjpuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbl0sCgkJW2NobW9kICt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyXSkKQUNfQ09ORklHX0ZJTEVTKFtkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzOmRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW5dKQpBQ19DT05GSUdfRklMRVMoW2xvY2FsL3NubXBjb25mXSkKCkFDX0NPTkZJR19DT01NQU5EUyhbZGVmYXVsdF0sIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCkKCiMKIyBwcm90ZWN0IFBBQ0tBR0VfKiB2YXJpYWJsZXMKIwpBSF9WRVJCQVRJTShbUEFDS0FHRV9CVUdSRVBPUlRdLFsvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KI2lmbmRlZiBQQUNLQUdFX0JVR1JFUE9SVAojdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKI2VuZGlmXSkKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfTkFNRV0sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX05BTUUKI3VuZGVmIFBBQ0tBR0VfTkFNRQojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9TVFJJTkddLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiNpZm5kZWYgUEFDS0FHRV9TVFJJTkcKI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX1RBUk5BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCiNpZm5kZWYgUEFDS0FHRV9UQVJOQU1FCiN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKI2VuZGlmXSkKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVkVSU0lPTl0sWy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiNpZm5kZWYgUEFDS0FHRV9WRVJTSU9OCiN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KI2VuZGlmXSkKCkFDX09VVFBVVAoKQUNfTVNHX0NBQ0hFX0RJU1BMQVkoKQojIExvY2FsIFZhcmlhYmxlczoKIyBtb2RlOiBBdXRvY29uZgojIGNvbW1lbnQtc3RhcnQ6ICIjIgojIEVuZDoK