LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBKdW1wIHZlY3RvciB0YWJsZSBhcyBpbiB0YWJsZSAzLjEgaW4gWzFdCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKCi5nbG9ibCBfc3RhcnQKX3N0YXJ0OgliICAgICAgIHJlc2V0CglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjoJLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKICoKICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIG1lbW9yeSEKICogcmVsb2NhdGUgYXJtYm9vdCB0byByYW0KICogc2V0dXAgc3RhY2sKICoganVtcCB0byBzZWNvbmQgc3RhZ2UKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKCi8qCiAqIFRoZXNlIGFyZSBkZWZpbmVkIGluIHRoZSBib2FyZC1zcGVjaWZpYyBsaW5rZXIgc2NyaXB0LgogKi8KLmdsb2JsIF9ic3Nfc3RhcnQKX2Jzc19zdGFydDoKCS53b3JkIF9fYnNzX3N0YXJ0CgouZ2xvYmwgX2Jzc19lbmQKX2Jzc19lbmQ6Cgkud29yZCBfZW5kCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIElSUV9TVEFDS19TVEFSVApJUlFfU1RBQ0tfU1RBUlQ6Cgkud29yZAkweDBiYWRjMGRlCgovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgRklRX1NUQUNLX1NUQVJUCkZJUV9TVEFDS19TVEFSVDoKCS53b3JkIDB4MGJhZGMwZGUKI2VuZGlmCgoKLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgovKiB0dXJuIG9mZiB0aGUgd2F0Y2hkb2cgKi8KI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCiMgZGVmaW5lIHBXVENPTgkJMHgxNTMwMDAwMAojIGRlZmluZSBJTlRNU0sJCTB4MTQ0MDAwMDgJLyogSW50ZXJ1cHQtQ29udHJvbGxlciBiYXNlIGFkZHJlc3NlcyAqLwojIGRlZmluZSBDTEtESVZOCTB4MTQ4MDAwMTQJLyogY2xvY2sgZGl2aXNvciByZWdpc3RlciAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQojIGRlZmluZSBwV1RDT04JCTB4NTMwMDAwMDAKIyBkZWZpbmUgSU5UTVNLCQkweDRBMDAwMDA4CS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KIyBkZWZpbmUgSU5UU1VCTVNLCTB4NEEwMDAwMUMKIyBkZWZpbmUgQ0xLRElWTgkweDRDMDAwMDE0CS8qIGNsb2NrIGRpdmlzb3IgcmVnaXN0ZXIgKi8KI2VuZGlmCgojaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKCWxkciAgICAgcjAsID1wV1RDT04KCW1vdiAgICAgcjEsICMweDAKCXN0ciAgICAgcjEsIFtyMF0KCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBzZXR0aW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUiAtIGRlZmF1bHQKCSAqLwoJbW92CXIxLCAjMHhmZmZmZmZmZgoJbGRyCXIwLCA9SU5UTVNLCglzdHIJcjEsIFtyMF0KIyBpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQoJbGRyCXIxLCA9MHgzZmYKCWxkcglyMCwgPUlOVFNVQk1TSwoJc3RyCXIxLCBbcjBdCiMgZW5kaWYKCgkvKiBGQ0xLOkhDTEs6UENMSyA9IDE6Mjo0ICovCgkvKiBkZWZhdWx0IEZDTEsgaXMgMTIwIE1IeiAhICovCglsZHIJcjAsID1DTEtESVZOCgltb3YJcjEsICMzCglzdHIJcjEsIFtyMF0KI2VuZGlmCS8qIENPTkZJR19TM0MyNDAwIHx8IENPTkZJR19TM0MyNDEwICovCgoJLyoKCSAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCgkgKi8KI2lmZGVmIENPTkZJR19JTklUX0NSSVRJQ0FMCglibAljcHVfaW5pdF9jcml0CiNlbmRpZgoKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcCAgICAgcjAsIHIxICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnICAgICAgICAgKi8KCWJlcSAgICAgc3RhY2tfc2V0dXAKCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglsZHIJcjMsIF9ic3Nfc3RhcnQKCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgICAgICAgICAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcyAgICAgICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXSAgICAqLwoJYmxlCWNvcHlfbG9vcAoKCS8qIFNldCB1cCB0aGUgc3RhY2sJCQkJCQkgICAgKi8Kc3RhY2tfc2V0dXA6CglsZHIJcjAsIF9URVhUX0JBU0UJCS8qIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdCAgICovCglzdWIJcjAsIHIwLCAjQ0ZHX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KCXN1YglyMCwgcjAsICNDRkdfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8gICAgICAgICAgICAgICAgICAgICAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwoKY2xlYXJfYnNzOgoJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KCW1vdiAJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYmxlCWNsYnNzX2wKCiNpZiAwCgkvKiB0cnkgZG9pbmcgdGhpcyBzdHVmZiBhZnRlciB0aGUgcmVsb2NhdGlvbiAqLwoJbGRyICAgICByMCwgPXBXVENPTgoJbW92ICAgICByMSwgIzB4MAoJc3RyICAgICByMSwgW3IwXQoKCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1SIC0gZGVmYXVsdAoJICovCgltb3YJcjEsICMweGZmZmZmZmZmCglsZHIJcjAsID1JTlRNUgoJc3RyCXIxLCBbcjBdCgoJLyogRkNMSzpIQ0xLOlBDTEsgPSAxOjI6NCAqLwoJLyogZGVmYXVsdCBGQ0xLIGlzIDEyMCBNSHogISAqLwoJbGRyCXIwLCA9Q0xLRElWTgoJbW92CXIxLCAjMwoJc3RyCXIxLCBbcjBdCgkvKiBFTkQgc3R1ZmYgYWZ0ZXIgcmVsb2NhdGlvbiAqLwojZW5kaWYKCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDoJLndvcmQgc3RhcnRfYXJtYm9vdAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKY3B1X2luaXRfY3JpdDoKCS8qCgkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCgkgKi8KCW1vdglyMCwgIzAKCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCgoJLyoKCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKCSAqLwoJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKCWJpYwlyMCwgcjAsICMweDAwMDAwMDg3CUAgY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkKCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgoJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJQCBzZXQgYml0IDEyIChJKSBJLUNhY2hlCgltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCgoKCS8qCgkgKiBiZWZvcmUgcmVsb2NhdGluZywgd2UgaGF2ZSB0byBzZXR1cCBSQU0gdGltaW5nCgkgKiBiZWNhdXNlIG1lbW9yeSB0aW1pbmcgaXMgYm9hcmQtZGVwZW5kZW5kLCB5b3Ugd2lsbAoJICogZmluZCBhIGxvd2xldmVsX2luaXQuUyBpbiB5b3VyIGJvYXJkIGRpcmVjdG9yeS4KCSAqLwoJbW92CWlwLCBscgoJYmwJbG93bGV2ZWxfaW5pdAoJbW92CWxyLCBpcAoKCW1vdglwYywgbHIKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBJbnRlcnJ1cHQgaGFuZGxpbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpACkAgSVJRIHN0YWNrIGZyYW1lLgpACiNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCgojZGVmaW5lIFNfT0xEX1IwCTY4CiNkZWZpbmUgU19QU1IJCTY0CiNkZWZpbmUgU19QQwkJNjAKI2RlZmluZSBTX0xSCQk1NgojZGVmaW5lIFNfU1AJCTUyCgojZGVmaW5lIFNfSVAJCTQ4CiNkZWZpbmUgU19GUAkJNDQKI2RlZmluZSBTX1IxMAkJNDAKI2RlZmluZSBTX1I5CQkzNgojZGVmaW5lIFNfUjgJCTMyCiNkZWZpbmUgU19SNwkJMjgKI2RlZmluZSBTX1I2CQkyNAojZGVmaW5lIFNfUjUJCTIwCiNkZWZpbmUgU19SNAkJMTYKI2RlZmluZSBTX1IzCQkxMgojZGVmaW5lIFNfUjIJCTgKI2RlZmluZSBTX1IxCQk0CiNkZWZpbmUgU19SMAkJMAoKI2RlZmluZSBNT0RFX1NWQyAweDEzCiNkZWZpbmUgSV9CSVQJIDB4ODAKCi8qCiAqIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4KICogdXNlIGlycV9zYXZlX3VzZXJfcmVncyAvIGlycV9yZXN0b3JlX3VzZXJfcmVncyBmb3IgSVJRL0ZJUSBoYW5kbGluZwogKi8KCgkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCXN1YglyMiwgcjIsICMoQ09ORklHX1NUQUNLU0laRStDRkdfTUFMTE9DX0xFTikKCXN1YglyMiwgcjIsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkgIEAgc2V0IGJhc2UgMiB3b3JkcyBpbnRvIGFib3J0IHN0YWNrCglsZG1pYQlyMiwge3IyIC0gcjN9CQkJQCBnZXQgcGMsIGNwc3IKCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgcmVzdG9yZSBzcF9TVkMKCglhZGQJcjUsIHNwLCAjU19TUAoJbW92CXIxLCBscgoJc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKCW1vdglyMCwgc3AKCS5lbmRtCgoJLm1hY3JvCWlycV9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCglhZGQgICAgIHI4LCBzcCwgI1NfUEMKCXN0bWRiICAgcjgsIHtzcCwgbHJ9XiAgICAgICAgICAgICAgICAgICBAIENhbGxpbmcgU1AsIExSCglzdHIgICAgIGxyLCBbcjgsICMwXSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIGNhbGxpbmcgUEMKCW1ycyAgICAgcjYsIHNwc3IKCXN0ciAgICAgcjYsIFtyOCwgIzRdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgQ1BTUgoJc3RyICAgICByMCwgW3I4LCAjOF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBPTERfUjAKCW1vdglyMCwgc3AKCS5lbmRtCgoJLm1hY3JvCWlycV9yZXN0b3JlX3VzZXJfcmVncwoJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgoJbW92CXIwLCByMAoJbGRyCWxyLCBbc3AsICNTX1BDXQkJCUAgR2V0IFBDCglhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdWJzCXBjLCBsciwgIzQJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCgkuZW5kbQoKCS5tYWNybyBnZXRfYmFkX3N0YWNrCglsZHIJcjEzLCBfYXJtYm9vdF9zdGFydAkJQCBzZXR1cCBvdXIgbW9kZSBzdGFjawoJc3ViCXIxMywgcjEzLCAjKENPTkZJR19TVEFDS1NJWkUrQ0ZHX01BTExPQ19MRU4pCglzdWIJcjEzLCByMTMsICMoQ0ZHX0dCTF9EQVRBX1NJWkUrOCkgQCByZXNlcnZlZCBhIGNvdXBsZSBzcG90cyBpbiBhYm9ydCBzdGFjawoKCXN0cglsciwgW3IxM10JCQlAIHNhdmUgY2FsbGVyIGxyIC8gc3BzcgoJbXJzCWxyLCBzcHNyCglzdHIgICAgIGxyLCBbcjEzLCAjNF0KCgltb3YJcjEzLCAjTU9ERV9TVkMJCQlAIHByZXBhcmUgU1ZDLU1vZGUKCUAgbXNyCXNwc3JfYywgcjEzCgltc3IJc3BzciwgcjEzCgltb3YJbHIsIHBjCgltb3ZzCXBjLCBscgoJLmVuZG0KCgkubWFjcm8gZ2V0X2lycV9zdGFjawkJCUAgc2V0dXAgSVJRIHN0YWNrCglsZHIJc3AsIElSUV9TVEFDS19TVEFSVAoJLmVuZG0KCgkubWFjcm8gZ2V0X2ZpcV9zdGFjawkJCUAgc2V0dXAgRklRIHN0YWNrCglsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAoJLmVuZG0KCi8qCiAqIGV4Y2VwdGlvbiBoYW5kbGVycwogKi8KCS5hbGlnbiAgNQp1bmRlZmluZWRfaW5zdHJ1Y3Rpb246CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX3ByZWZldGNoX2Fib3J0CgoJLmFsaWduCTUKZGF0YV9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2RhdGFfYWJvcnQKCgkuYWxpZ24JNQpub3RfdXNlZDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19pcnEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKCS5hbGlnbgk1CmZpcToKCWdldF9maXFfc3RhY2sKCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmljdGlvbiBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KCWlycV9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2ZpcQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgojZWxzZQoKCS5hbGlnbgk1CmlycToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2ZpcQoKI2VuZGlmCgoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6CiNpZmRlZiBDT05GSUdfUzNDMjQwMAoJYmwJZGlzYWJsZV9pbnRlcnJ1cHRzCiMgaWZkZWYgQ09ORklHX1RSQUIKCWJsCWRpc2FibGVfdmZkCiMgZW5kaWYKCWxkcglyMSwgX3JXVENPTgoJbGRyCXIyLCBfcldUQ05UCgkvKiBEaXNhYmxlIHdhdGNoZG9nICovCgltb3YJcjMsICMweDAwMDAKCXN0cglyMywgW3IxXQoJLyogSW5pdGlhbGl6ZSB3YXRjaGRvZyB0aW1lciBjb3VudCByZWdpc3RlciAqLwoJbW92CXIzLCAjMHgwMDAxCglzdHIJcjMsIFtyMl0KCS8qIEVuYWJsZSB3YXRjaGRvZyB0aW1lcjsgYXNzZXJ0IHJlc2V0IGF0IHRpbWVyIHRpbWVvdXQgKi8KCW1vdglyMywgIzB4MDAyMQoJc3RyCXIzLCBbcjFdCl9sb29wX2ZvcmV2ZXI6CgliCV9sb29wX2ZvcmV2ZXIKX3JXVENPTjoKCS53b3JkCTB4MTUzMDAwMDAKX3JXVENOVDoKCS53b3JkCTB4MTUzMDAwMDgKI2Vsc2UgLyogISBDT05GSUdfUzNDMjQwMCAqLwoJbW92ICAgICBpcCwgIzAKCW1jciAgICAgcDE1LCAwLCBpcCwgYzcsIGM3LCAwICAgICAgICAgICBAIGludmFsaWRhdGUgY2FjaGUKCW1jciAgICAgcDE1LCAwLCBpcCwgYzgsIGM3LCAwICAgICAgICAgICBAIGZsdXNoIFRMQiAodjQpCgltcmMgICAgIHAxNSwgMCwgaXAsIGMxLCBjMCwgMCAgICAgICAgICAgQCBnZXQgY3RybCByZWdpc3RlcgoJYmljICAgICBpcCwgaXAsICMweDAwMGYgICAgICAgICAgICAgICAgIEAgLi4uLi4uLi4uLi4ud2NhbQoJYmljICAgICBpcCwgaXAsICMweDIxMDAgICAgICAgICAgICAgICAgIEAgLi52Li4uLnMuLi4uLi4uLgoJbWNyICAgICBwMTUsIDAsIGlwLCBjMSwgYzAsIDAgICAgICAgICAgIEAgY3RybCByZWdpc3RlcgoJbW92ICAgICBwYywgcjAKI2VuZGlmIC8qIENPTkZJR19TM0MyNDAwICovCg==