LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTcyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAoJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCglsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CglsZHIJcGMsIF9kYXRhX2Fib3J0CglsZHIJcGMsIF9ub3RfdXNlZAoJbGRyCXBjLCBfaXJxCglsZHIJcGMsIF9maXEKCl91bmRlZmluZWRfaW5zdHJ1Y3Rpb246IC53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgpfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydApfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKX2lycToJCQkud29yZCBpcnEKX2ZpcToJCQkud29yZCBmaXEKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBSQU0hCiAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCiAqIHNldHVwIHN0YWNrCiAqIGp1bXAgdG8gc2Vjb25kIHN0YWdlCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKX1RFWFRfQkFTRToKCS53b3JkCVRFWFRfQkFTRQoKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CgovKgogKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgbGlua2VyIHNjcmlwdC4KICovCi5nbG9ibCBfYnNzX3N0YXJ0Cl9ic3Nfc3RhcnQ6Cgkud29yZCBfX2Jzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgX2VuZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweDEzCgltc3IJY3BzcixyMAoKCS8qCgkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCgkgKiBub3Qgd2hlbiBib290aW5nIGZyb20gcmFtIQoJICovCiNpZmRlZiBDT05GSUdfSU5JVF9DUklUSUNBTAoJYmwJY3B1X2luaXRfY3JpdAojZW5kaWYKCnJlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCglsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCgljbXAJcjAsIHIxCQkJLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnCSAgICAqLwoJYmVxCXN0YWNrX3NldHVwCgojaWYgVEVYVF9CQVNFCglsZHIJcjIsID0weDAJCS8qIFJlbG9jYXRlIHRoZSBleGNlcHRpb24gdmVjdG9ycyAgICovCgljbXAJcjEsIHIyCQkJLyogYW5kIGFzc29jaWF0ZWQgZGF0YSB0byBhZGRyZXNzICAgKi8KCWxkbW5laWEgcjAhLCB7cjMtcjEwfQkJLyogMHgwLiBEbyBub3RoaW5nIGlmIFRFWFRfQkFTRSBpcyAgKi8KCXN0bW5laWEgcjIhLCB7cjMtcjEwfQkJLyogMHgwLiBDb3B5IHRoZSBmaXJzdCAxNSB3b3Jkcy4gICAgKi8KCWxkbW5laWEgcjAsIHtyMy1yOX0KCXN0bW5laWEgcjIsIHtyMy1yOX0KCWFkcm5lCXIwLCBfc3RhcnQJCS8qIHJlc3RvcmUgcjAJCQkgICAgKi8KI2VuZGlmCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJbGRyCXIzLCBfYnNzX3N0YXJ0CglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290CSAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVlZSBbcjJdICAgICovCglibGUJY29weV9sb29wCgoJLyogU2V0IHVwIHRoZSBzdGFjawkJCQkJCSAgICAqLwpzdGFja19zZXR1cDoKCWxkcglyMCwgX1RFWFRfQkFTRQkJLyogdXBwZXIgMTI4IEtpQjogcmVsb2NhdGVkIHVib290ICAgKi8KCXN1YglyMCwgcjAsICNDRkdfTUFMTE9DX0xFTiAvKiBtYWxsb2MgYXJlYQkJCSAgICAqLwoJc3ViCXIwLCByMCwgI0NGR19HQkxfREFUQV9TSVpFIC8qIGJkaW5mbwkJCSAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwoKY2xlYXJfYnNzOgoJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50CSAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlCQkJICAgICovCgltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhcgkJCSAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4JCSAgICAqLwoJYWRkCXIwLCByMCwgIzQKCWNtcAlyMCwgcjEKCWJuZQljbGJzc19sCgoJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAoKX3N0YXJ0X2FybWJvb3Q6IC53b3JkIHN0YXJ0X2FybWJvb3QKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgojaWYgZGVmaW5lZChDT05GSUdfSU1QQTcpIHx8IGRlZmluZWQoQ09ORklHX0VQNzMxMikKCi8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KSU5UTVIxOgkJLndvcmQJMHg4MDAwMDI4MCBAIDMyIGJpdCBzaXplCklOVE1SMjoJCS53b3JkCTB4ODAwMDEyODAgQCAxNiBiaXQgc2l6ZQpJTlRNUjM6CQkud29yZAkweDgwMDAyMjgwIEAgIDggYml0IHNpemUKCi8qIFNZU0NPTnMgKi8KU1lTQ09OMToJLndvcmQJMHg4MDAwMDEwMApTWVNDT04yOgkud29yZAkweDgwMDAxMTAwClNZU0NPTjM6CS53b3JkCTB4ODAwMDIyMDAKCiNkZWZpbmUgQ0xLQ1RMCSAgICAgICAweDYgIC8qIG1hc2sgKi8KI2RlZmluZSBDTEtDVExfMTggICAgICAweDAgIC8qIDE4LjQzMiBNSHogKi8KI2RlZmluZSBDTEtDVExfMzYgICAgICAweDIgIC8qIDM2Ljg2NCBNSHogKi8KI2RlZmluZSBDTEtDVExfNDkgICAgICAweDQgIC8qIDQ5LjE1MiBNSHogKi8KI2RlZmluZSBDTEtDVExfNzMgICAgICAweDYgIC8qIDczLjcyOCBNSHogKi8KCiNlbmRpZgoKY3B1X2luaXRfY3JpdDoKI2lmIGRlZmluZWQoQ09ORklHX0lNUEE3KSB8fCBkZWZpbmVkKENPTkZJR19FUDczMTIpCgoJLyoKCSAqIG1hc2sgYWxsIElSUXMgYnkgY2xlYXJpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1ScwoJICovCgltb3YJcjEsICMweDAwCglsZHIJcjAsIElOVE1SMQoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIElOVE1SMgoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIElOVE1SMwoJc3RyCXIxLCBbcjBdCgoJLyoKCSAqIGZsdXNoIHY0IEkvRCBjYWNoZXMKCSAqLwoJbW92CXIwLCAjMAoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLwoJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB2NCBUTEIgKi8KCgkvKgoJICogZGlzYWJsZSBNTVUgc3R1ZmYgYW5kIGNhY2hlcwoJICovCgltcmMJcDE1LDAscjAsYzEsYzAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4ZglAIGNsZWFyIGJpdHMgNywgMzowIChCLS0tIFdDQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW1jcglwMTUsMCxyMCxjMSxjMAojZWxpZiBkZWZpbmVkKENPTkZJR19ORVRBUk0pCgkvKgoJICogcHJpb3IgdG8gc29mdHdhcmUgcmVzZXQgOiBuZWVkIHRvIHNldCBwaW4gUE9SVEM0IHRvIGJlICpIUkVTRVQKCSAqLwoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJbGRyCXIxLCA9KE5FVEFSTV9HRU5fUE9SVF9NT0RFKDB4MTApIHwgXAoJCQlORVRBUk1fR0VOX1BPUlRfRElSKDB4MTApKQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9QT1JUQ10KCS8qCgkgKiBzb2Z0d2FyZSByZXNldCA6IHNlZSBIVyBSZWYuIEd1aWRlIDguMi40IDogU29mdHdhcmUgU2VydmljZSByZWdpc3RlcgoJICoJCSAgICBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9jZXNzCgkgKi8KCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJLyoKCSAqIHNldHVwIFBMTCBhbmQgU3lzdGVtIENvbmZpZwoJICovCglsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCgoJbGRyCXIxLCA9KAlORVRBUk1fR0VOX1NZU19DRkdfTEVORElBTiB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU0ZVTEwgfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19VU0VSX0VOIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQUxJR05fQUJPUlQgfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNBUkJfSU5UIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQlVTTU9OX0VOICkKCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NZU1RFTV9DT05UUk9MXQoKCWxkcglyMSwgPSgJTkVUQVJNX0dFTl9QTExfQ1RMX1BMTENOVChORVRBUk1fUExMX0NPVU5UX1ZBTCkgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9QT0xUU1RfREVGIHwgXAoJCQlORVRBUk1fR0VOX1BMTF9DVExfSU5ESVYoMSkgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9JQ1BfREVGIHwgXAoJCQlORVRBUk1fR0VOX1BMTF9DVExfT1VURElWKDIpICkKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fUExMX0NPTlRST0xdCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBjbGVhcmluZyBhbGwgYml0cyBpbiB0aGUgSU5UTVJzCgkgKi8KCW1vdglyMSwgIzAKCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fSU5UUl9FTkFCTEVdCgojZWxpZiBkZWZpbmVkKENPTkZJR19TM0M0NTEwQikKCgkvKgoJICogTWFzayBvZmYgYWxsIElSUSBzb3VyY2VzCgkgKi8KCWxkcglyMSwgPVJFR19JTlRNQVNLCglsZHIJcjAsID0weDNGRkZGRgoJc3RyCXIwLCBbcjFdCgoJLyoKCSAqIERpc2FibGUgQ2FjaGUKCSAqLwoJbGRyIHIwLCA9UkVHX1NZU0NGRwoJbGRyIHIxLCA9MHg4M2ZmZmZhMAkvKiBjYWNoZS1kaXNhYmxlZCAgKi8KCXN0ciByMSwgW3IwXQoKI2Vsc2UKI2Vycm9yIE5vIGNwdV9pbml0X2NyaXQoKSBkZWZpbmVkIGZvciBjdXJyZW50IENQVSB0eXBlCiNlbmRpZgoKI2lmZGVmIENPTkZJR19BUk03X1JFVkQKCS8qIHNldCBjbG9jayBzcGVlZCAqLwoJLyogISEhIHdlIHJ1biBAIDM2IE1IeiBkdWUgdG8gYSBoYXJkd2FyZSBmbGF3IGluIFJldi4gRCBwcm9jZXNzb3JzICovCgkvKiAhISEgbm90IGRvaW5nIERSQU0gcmVmcmVzaCBwcm9wZXJseSEgKi8KCWxkcglyMCwgU1lTQ09OMwoJbGRyCXIxLCBbcjBdCgliaWMJcjEsIHIxLCAjQ0xLQ1RMCglvcnIJcjEsIHIxLCAjQ0xLQ1RMXzM2CglzdHIJcjEsIFtyMF0KI2VuZGlmCgoJLyoKCSAqIGJlZm9yZSByZWxvY2F0aW5nLCB3ZSBoYXZlIHRvIHNldHVwIFJBTSB0aW1pbmcKCSAqIGJlY2F1c2UgbWVtb3J5IHRpbWluZyBpcyBib2FyZC1kZXBlbmRlbnQsIHlvdSB3aWxsCgkgKiBmaW5kIGEgbWVtc2V0dXAuUyBpbiB5b3VyIGJvYXJkIGRpcmVjdG9yeS4KCSAqLwoJbW92CWlwLCBscgoJYmwJbWVtc2V0dXAKCW1vdglsciwgaXAKCgltb3YJcGMsIGxyCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSW50ZXJydXB0IGhhbmRsaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKQApAIElSUSBzdGFjayBmcmFtZS4KQAojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwojZGVmaW5lIElfQklUCSAweDgwCgovKgogKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCiAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCglhZGQJcjgsIHNwLCAjU19QQwoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCXN1YglyMiwgcjIsICMoQ09ORklHX1NUQUNLU0laRStDRkdfTUFMTE9DX0xFTikKCXN1YglyMiwgcjIsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKCWxkbWlhCXIyLCB7cjIgLSByNH0JCQlAIGdldCBwYywgY3Bzciwgb2xkX3IwCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIHJlc3RvcmUgc3BfU1ZDCgoJYWRkCXI1LCBzcCwgI1NfU1AKCW1vdglyMSwgbHIKCXN0bWlhCXI1LCB7cjAgLSByNH0JCQlAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyLCBvbGRfcgoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWFkZAlyOCwgc3AsICNTX1BDCglzdG1kYglyOCwge3NwLCBscn1eCQkJQCBDYWxsaW5nIFNQLCBMUgoJc3RyCWxyLCBbcjgsICMwXQkJCUAgU2F2ZSBjYWxsaW5nIFBDCgltcnMJcjYsIHNwc3IKCXN0cglyNiwgW3I4LCAjNF0JCQlAIFNhdmUgQ1BTUgoJc3RyCXIwLCBbcjgsICM4XQkJCUAgU2F2ZSBPTERfUjAKCW1vdglyMCwgc3AKCS5lbmRtCgoJLm1hY3JvCWlycV9yZXN0b3JlX3VzZXJfcmVncwoJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgoJbW92CXIwLCByMAoJbGRyCWxyLCBbc3AsICNTX1BDXQkJCUAgR2V0IFBDCglhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdWJzCXBjLCBsciwgIzQJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCgkuZW5kbQoKCS5tYWNybyBnZXRfYmFkX3N0YWNrCglsZHIJcjEzLCBfYXJtYm9vdF9zdGFydAkJQCBzZXR1cCBvdXIgbW9kZSBzdGFjawoJc3ViCXIxMywgcjEzLCAjKENPTkZJR19TVEFDS1NJWkUrQ0ZHX01BTExPQ19MRU4pCglzdWIJcjEzLCByMTMsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkgQCByZXNlcnZlZCBhIGNvdXBsZSBzcG90cyBpbiBhYm9ydCBzdGFjawoKCXN0cglsciwgW3IxM10JCQlAIHNhdmUgY2FsbGVyIGxyIC8gc3BzcgoJbXJzCWxyLCBzcHNyCglzdHIJbHIsIFtyMTMsICM0XQoKCW1vdglyMTMsICNNT0RFX1NWQwkJCUAgcHJlcGFyZSBTVkMtTW9kZQoJbXNyCXNwc3JfYywgcjEzCgltb3YJbHIsIHBjCgltb3ZzCXBjLCBscgoJLmVuZG0KCgkubWFjcm8gZ2V0X2lycV9zdGFjawkJCUAgc2V0dXAgSVJRIHN0YWNrCglsZHIJc3AsIElSUV9TVEFDS19TVEFSVAoJLmVuZG0KCgkubWFjcm8gZ2V0X2ZpcV9zdGFjawkJCUAgc2V0dXAgRklRIHN0YWNrCglsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAoJLmVuZG0KCi8qCiAqIGV4Y2VwdGlvbiBoYW5kbGVycwogKi8KCS5hbGlnbgk1CnVuZGVmaW5lZF9pbnN0cnVjdGlvbjoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uCgoJLmFsaWduCTUKc29mdHdhcmVfaW50ZXJydXB0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19kYXRhX2Fib3J0CgoJLmFsaWduCTUKbm90X3VzZWQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLwoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKI2Vsc2UKCgkuYWxpZ24JNQppcnE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCgojZW5kaWYKCiNpZiBkZWZpbmVkKENPTkZJR19JTVBBNykgfHwgZGVmaW5lZChDT05GSUdfRVA3MzEyKQoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6Cgltb3YJaXAsICMwCgltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCQlAIGludmFsaWRhdGUgY2FjaGUKCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgZmx1c2ggVExCICh2NCkKCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgZ2V0IGN0cmwgcmVnaXN0ZXIKCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KCWJpYwlpcCwgaXAsICMweDIxMDAJCQlAIC4udi4uLi5zLi4uLi4uLi4KCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgoJbW92CXBjLCByMAojZWxpZiBkZWZpbmVkKENPTkZJR19ORVRBUk0pCgkuYWxpZ24JNQouZ2xvYmwgcmVzZXRfY3B1CnJlc2V0X2NwdToKCWxkcglyMSwgPU5FVEFSTV9NRU1fTU9EVUxFX0JBU0UKCWxkcglyMCwgW3IxLCAjK05FVEFSTV9NRU1fQ1MwX0JBU0VfQUREUl0KCWxkcglyMSwgPTB4RkZGRkYwMDAKCWFuZAlyMCwgcjEsIHIwCglsZHIJcjEsID0ocmVsb2NhdGUtVEVYVF9CQVNFKQoJYWRkCXIwLCByMSwgcjAKCWxkcglyNCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbW92CXBjLCByMAojZWxpZiBkZWZpbmVkKENPTkZJR19TM0M0NTEwQikKLyogTm90aGluZyBkb25lIGhlcmUgYXMgcmVzZXRpbmcgdGhlIENQVSBpcyBib2FyZCBzcGVjaWZpYywgZGVwZW5kaW5nCiAqIG9uIGV4dGVybmFsIHBlcmlwaGVyYWxzIHN1Y2ggYXMgd2F0Y2hkb2cgdGltZXJzLCBldGMuICovCiNlbHNlCiNlcnJvciBObyByZXNldF9jcHUoKSBkZWZpbmVkIGZvciBjdXJyZW50IENQVSB0eXBlCiNlbmRpZgo=