IyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwojIHRoYXQgbWF5IGFwcGx5OgojCiMgUG9ydGlvbnMgQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQojIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiMKCiMKIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgojCkFDX0lOSVQoW05ldC1TTk1QXSwgWzUuNy4zXSwgW25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQpBQ19QUkVSRVEoWzIuNjNdKQpBQ19DT05GSUdfU1JDRElSKFthZ2VudC9zbm1wZC5jXSkKQUNfUkVWSVNJT04oWyRSZXZpc2lvbiRdKQoKQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQpBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgpCgpBQ19NU0dfQ0FDSEVfSU5JVCgpCgojCiMgc2F2ZSB0aGUgY29uZmlndXJlIGFyZ3VtZW50cwojCkFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0NPTkZJR1VSRV9PUFRJT05TLCIkYWNfY29uZmlndXJlX2FyZ3MiLAogIFtjb25maWd1cmUgb3B0aW9ucyBzcGVjaWZpZWRdKQpDT05GSUdVUkVfT1BUSU9OUz0iXCIkYWNfY29uZmlndXJlX2FyZ3NcIiIKQUNfU1VCU1QoQ09ORklHVVJFX09QVElPTlMpCgojIwojIyBSZWNvbW1lbmRlZCBzdHJ1Y3R1cmU6CiMjCiMgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBwYWNrYWdlCiMgICAgIGNoZWNrcyBmb3IgcHJvZ3JhbXMKIyAgICAgY2hlY2tzIGZvciBsaWJyYXJpZXMKIyAgICAgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKIyAgICAgY2hlY2tzIGZvciB0eXBlcwojICAgICBjaGVja3MgZm9yIHN0cnVjdHVyZXMKIyAgICAgY2hlY2tzIGZvciBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MKIyAgICAgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucwojICAgICBjaGVja3MgZm9yIHN5c3RlbSBzZXJ2aWNlcwoKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGVdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWxdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3NdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRoc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzXSkKQUNfQ0FDSEVfU0FWRQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliXSkKQUNfQ0FDSEVfU0FWRQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbGliczFdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudF0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMV0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMl0pCkFDX0NBQ0hFX1NBVkUKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob25dKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzJdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjM10pCkFDX0NBQ0hFX1NBVkUKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNF0pCkFDX0NBQ0hFX1NBVkUKCiMKIyBkZWZpbmUgdGhlIGFnZW50IGxpYnJhcmllcyB2YXJpYWJsZXMKIwpBQ19TVUJTVChMTUlCTElCUykKQUNfU1VCU1QoQUdFTlRMSUJTKQpBQ19TVUJTVChPVEhFUkFHRU5UTElCT0JKUykKQUNfU1VCU1QoT1RIRVJBR0VOVExJQkxPQkpTKQpBQ19TVUJTVChPVEhFUkFHRU5UTElCTEZUUykKCkFDX1NVQlNUKERMTElCUykKCkFDX1NVQlNUKFBBUlRJQUxUQVJHRVRGTEFHUykKQUNfU1VCU1QoYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFKQoKQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQpBQ19DT05GSUdfRklMRVMoW3NubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmRdKQpBQ19DT05GSUdfRklMRVMoW2FwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmRdKQpBQ19DT05GSUdfRklMRVMoW2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmRdKQpBQ19DT05GSUdfRklMRVMoW2FnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmRdKQpBQ19DT05GSUdfRklMRVMoW2FnZW50L2hlbHBlcnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmRdKQpBQ19DT05GSUdfRklMRVMoW2FnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmRdKQpBQ19DT05GSUdfRklMRVMoW2xvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbl0pCkFDX0NPTkZJR19GSUxFUyhbbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQpBQ19DT05GSUdfRklMRVMoW21pYnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1pYnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQpBQ19DT05GSUdfRklMRVMoW25ldC1zbm1wLWNvbmZpZzpuZXQtc25tcC1jb25maWcuaW5dLAoJCVtjaG1vZCAreCBuZXQtc25tcC1jb25maWddKQpBQ19DT05GSUdfRklMRVMoW25ldC1zbm1wLWNyZWF0ZS12My11c2VyOm5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluXSwKCQlbY2htb2QgK3ggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXJdKQpBQ19DT05GSUdfRklMRVMoW2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXM6ZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbl0pCkFDX0NPTkZJR19GSUxFUyhbbG9jYWwvc25tcGNvbmZdKQoKQUNfQ09ORklHX0NPTU1BTkRTKFtkZWZhdWx0XSwgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1oKQoKIwojIHByb3RlY3QgUEFDS0FHRV8qIHZhcmlhYmxlcwojCkFIX1ZFUkJBVElNKFtQQUNLQUdFX0JVR1JFUE9SVF0sWy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwojaWZuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCiN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9OQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfTkFNRQojdW5kZWYgUEFDS0FHRV9OQU1FCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX1NUUklOR10sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX1NUUklORwojdW5kZWYgUEFDS0FHRV9TVFJJTkcKI2VuZGlmXSkKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVEFSTkFNRV0sWy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX1RBUk5BTUUKI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9WRVJTSU9OXSxbLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgojZW5kaWZdKQoKQUNfT1VUUFVUCgpBQ19NU0dfQ0FDSEVfRElTUExBWSgpCiMgTG9jYWwgVmFyaWFibGVzOgojIG1vZGU6IEF1dG9jb25mCiMgY29tbWVudC1zdGFydDogIiMiCiMgRW5kOgo=