LyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAqIHRoYXQgbWF5IGFwcGx5OgogKi8KLyoKICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCiNpZm5kZWYgU05NUF9BUElfSAojZGVmaW5lIFNOTVBfQVBJX0gKCi8qCiAqIEBmaWxlIHNubXBfYXBpLmggLSBBUEkgZm9yIGFjY2VzcyB0byBzbm1wLgogKiAKICogQGFkZHRvZ3JvdXAgbGlicmFyeQogKgogKiBDYXV0aW9uOiB3aGVuIHVzaW5nIHRoaXMgbGlicmFyeSBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLAogKiB0aGUgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMgInNubXBfZXJybm8iIGFuZCAic25tcF9kZXRhaWwiCiAqIGNhbm5vdCBiZSByZWxpYWJseSBkZXRlcm1pbmVkLiAgU3VnZ2VzdCB1c2luZyBzbm1wX2Vycm9yKCkKICogdG8gb2J0YWluIHRoZSBsaWJyYXJ5IGVycm9yIGNvZGVzLgogKgogKiBAewogKi8KCiNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgojaW5jbHVkZSA8bmV0LXNubXAvdmFyYmluZF9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CgojaWZuZGVmIERPTlRfU0hBUkVfRVJST1JfV0lUSF9PVEhFUl9USFJFQURTCiNkZWZpbmUgU0VUX1NOTVBfRVJST1IoeCkgc25tcF9lcnJubz0oeCkKI2Vsc2UKI2RlZmluZSBTRVRfU05NUF9FUlJPUih4KQojZW5kaWYKCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICAgICAgICAgICJDIiB7CiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCglDb3B5cmlnaHQgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQoKICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKClBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwpkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCnByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCnN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ01VIG5vdCBiZQp1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgoKQ01VIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcKQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMCkNNVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IKQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLApXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCkFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKU09GVFdBUkUuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnN0cnVjdCB0aW1ldmFsOwovKgogKiBBIGxpc3Qgb2YgYWxsIHRoZSBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3IgYSBwYXJ0aWN1bGFyIHNlc3Npb24uCiAqLwojaWZkZWYgU05NUF9ORUVEX1JFUVVFU1RfTElTVAp0eXBlZGVmIHN0cnVjdCByZXF1ZXN0X2xpc3QgewogICAgc3RydWN0IHJlcXVlc3RfbGlzdCAqbmV4dF9yZXF1ZXN0OwogICAgbG9uZyAgICAgICAgICAgIHJlcXVlc3RfaWQ7ICAgICAvKiByZXF1ZXN0IGlkICovCiAgICBsb25nICAgICAgICAgICAgbWVzc2FnZV9pZDsgICAgIC8qIG1lc3NhZ2UgaWQgKi8KICAgIG5ldHNubXBfY2FsbGJhY2sgY2FsbGJhY2s7ICAgICAgLyogdXNlciBjYWxsYmFjayBwZXIgcmVxdWVzdCAoTlVMTCBpZiB1bnVzZWQpICovCiAgICB2b2lkICAgICAgICAgICAqY2JfZGF0YTsgICAgICAgIC8qIHVzZXIgY2FsbGJhY2sgZGF0YSBwZXIgcmVxdWVzdCAoTlVMTCBpZiB1bnVzZWQpICovCiAgICBpbnQgICAgICAgICAgICAgcmV0cmllczsgICAgICAgIC8qIE51bWJlciBvZiByZXRyaWVzICovCiAgICB1X2xvbmcgICAgICAgICAgdGltZW91dDsgICAgICAgIC8qIGxlbmd0aCB0byB3YWl0IGZvciB0aW1lb3V0ICovCiAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZTsgICAvKiBUaW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZSAqLwogICAgc3RydWN0IHRpbWV2YWwgIGV4cGlyZTsgLyogdGltZSB0aGlzIHJlcXVlc3QgaXMgZHVlIHRvIGV4cGlyZSAqLwogICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKICAgIG5ldHNubXBfcGR1ICAgICpwZHU7ICAgIC8qIFRoZSBwZHUgZm9yIHRoaXMgcmVxdWVzdAoJCQkgICAgICogKHNhdmVkIHNvIGl0IGNhbiBiZSByZXRyYW5zbWl0dGVkICovCn0gbmV0c25tcF9yZXF1ZXN0X2xpc3Q7CiNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUF9ORUVEX1JFUVVFU1RfTElTVCAqLwoKICAgIC8qCiAgICAgKiBTZXQgZmllbGRzIGluIHNlc3Npb24gYW5kIHBkdSB0byB0aGUgZm9sbG93aW5nIHRvIGdldCBhIGRlZmF1bHQgb3IgdW5jb25maWd1cmVkIHZhbHVlLgogICAgICovCiNkZWZpbmUgU05NUF9ERUZBVUxUX0NPTU1VTklUWV9MRU4gIDAgICAvKiB0byBnZXQgYSBkZWZhdWx0IGNvbW11bml0eSBuYW1lICovCiNkZWZpbmUgU05NUF9ERUZBVUxUX1JFVFJJRVMJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX1RJTUVPVVQJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX1JFTVBPUlQJICAgIDAKI2RlZmluZSBTTk1QX0RFRkFVTFRfUkVRSUQJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX01TR0lECSAgICAtMQojZGVmaW5lIFNOTVBfREVGQVVMVF9FUlJTVEFUCSAgICAtMQojZGVmaW5lIFNOTVBfREVGQVVMVF9FUlJJTkRFWAkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfQUREUkVTUwkgICAgMAojZGVmaW5lIFNOTVBfREVGQVVMVF9QRUVSTkFNRQkgICAgTlVMTAojZGVmaW5lIFNOTVBfREVGQVVMVF9FTlRFUlBSSVNFX0xFTkdUSAkwCiNkZWZpbmUgU05NUF9ERUZBVUxUX1RJTUUJICAgIDAKI2RlZmluZSBTTk1QX0RFRkFVTFRfVkVSU0lPTgkgICAgLTEKI2RlZmluZSBTTk1QX0RFRkFVTFRfU0VDTU9ERUwJICAgIC0xCiNkZWZpbmUgU05NUF9ERUZBVUxUX0NPTlRFWFQgICAgICAgICIiCiNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQojZGVmaW5lIFNOTVBfREVGQVVMVF9BVVRIX1BST1RPICAgICB1c21ITUFDTUQ1QXV0aFByb3RvY29sCiNlbHNlCiNkZWZpbmUgU05NUF9ERUZBVUxUX0FVVEhfUFJPVE8gICAgIHVzbUhNQUNTSEExQXV0aFByb3RvY29sCiNlbmRpZgojZGVmaW5lIFNOTVBfREVGQVVMVF9BVVRIX1BST1RPTEVOICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0KI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCiNkZWZpbmUgU05NUF9ERUZBVUxUX1BSSVZfUFJPVE8gICAgIHVzbURFU1ByaXZQcm90b2NvbAojZWxzZQojZGVmaW5lIFNOTVBfREVGQVVMVF9QUklWX1BST1RPICAgICB1c21BRVNQcml2UHJvdG9jb2wKI2VuZGlmCiNkZWZpbmUgU05NUF9ERUZBVUxUX1BSSVZfUFJPVE9MRU4gIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STQoKICAgIE5FVFNOTVBfSU1QT1JUIGNvbnN0IGNoYXIgKnNubXBfYXBpX2VycnN0cmluZyhpbnQpOwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAgICAgc25tcF9wZXJyb3IoY29uc3QgY2hhciAqKTsKICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgICAgIHNubXBfc2V0X2RldGFpbChjb25zdCBjaGFyICopOwoKI2RlZmluZSBTTk1QX01BWF9NU0dfU0laRSAgICAgICAgICAxNDcyIC8qIGV0aGVybmV0IE1UVSBtaW51cyBJUC9VRFAgaGVhZGVyICovCiNkZWZpbmUgU05NUF9NQVhfTVNHX1YzX0hEUlMgICAgICAgKDQrMys0KzcrNyszKzcrMTYpICAgLyogZnVkZ2UgZmFjdG9yPTE2ICovCiNkZWZpbmUgU05NUF9NQVhfRU5HX1NJWkUgICAgICAgICAgMzIKI2RlZmluZSBTTk1QX01BWF9TRUNfTkFNRV9TSVpFICAgICAyNTYKI2RlZmluZSBTTk1QX01BWF9DT05URVhUX1NJWkUgICAgICAyNTYKI2RlZmluZSBTTk1QX1NFQ19QQVJBTV9CVUZfU0laRSAgICAyNTYKCiAgICAvKgogICAgICogc2V0IHRvIG9uZSB0byBpZ25vcmUgdW5hdXRoZW50aWNhdGVkIFJlcG9ydHMgCiAgICAgKi8KI2RlZmluZSBTTk1QVjNfSUdOT1JFX1VOQVVUSF9SRVBPUlRTIDAKCiAgICAvKgogICAgICogYXV0aG9yaXRhdGl2ZSBlbmdpbmUgZGVmaW5pdGlvbnMgCiAgICAgKi8KI2RlZmluZSBTTk1QX1NFU1NfTk9OQVVUSE9SSVRBVElWRSAwICAgIC8qIHNob3VsZCBiZSAwIHRvIGRlZmF1bHQgdG8gdGhpcyAqLwojZGVmaW5lIFNOTVBfU0VTU19BVVRIT1JJVEFUSVZFICAgIDEgICAgLyogZG9uJ3QgbGVhcm4gZW5naW5lSURzICovCiNkZWZpbmUgU05NUF9TRVNTX1VOS05PV05BVVRIICAgICAgMiAgICAvKiBzb21ldGltZXMgKGxpa2UgTlJzKSAqLwoKICAgIC8qCiAgICAgKiB0byBkZXRlcm1pbmUgdHlwZSBvZiBSZXBvcnQgZnJvbSB2YXJiaW5kX2xpc3QgCiAgICAgKi8KI2RlZmluZSBSRVBPUlRfU1RBVFNfTEVOICA5CS8qIExlbmd0aCBvZiBwcmVmaXggZm9yIE1QRC9VU00gcmVwb3J0IHN0YXRpc3RpYyBvYmplY3RzICovCiNkZWZpbmUgUkVQT1JUX1NUQVRTX0xFTjIgOAkvKiBMZW5ndGggb2YgcHJlZml4IGZvciBUYXJnZXQgcmVwb3J0IHN0YXRpc3RpYyBvYmplY3RzICovCi8qIEZyb20gU05NUC1NUEQtTUlCICovCiNkZWZpbmUgUkVQT1JUX3NubXBVbmtub3duU2VjdXJpdHlNb2RlbHNfTlVNIDEKI2RlZmluZSBSRVBPUlRfc25tcEludmFsaWRNc2dzX05VTSAgICAgICAgICAgMgojZGVmaW5lIFJFUE9SVF9zbm1wVW5rbm93blBEVUhhbmRsZXJzX05VTSAgICAzCi8qIEZyb20gU05NUC1VU0VSLUJBU0VELVNNLU1JQiAqLwojZGVmaW5lIFJFUE9SVF91c21TdGF0c1Vuc3VwcG9ydGVkU2VjTGV2ZWxzX05VTSAxCiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzTm90SW5UaW1lV2luZG93c19OVU0gMgojZGVmaW5lIFJFUE9SVF91c21TdGF0c1Vua25vd25Vc2VyTmFtZXNfTlVNIDMKI2RlZmluZSBSRVBPUlRfdXNtU3RhdHNVbmtub3duRW5naW5lSURzX05VTSA0CiNkZWZpbmUgUkVQT1JUX3VzbVN0YXRzV3JvbmdEaWdlc3RzX05VTSAgICAgNQojZGVmaW5lIFJFUE9SVF91c21TdGF0c0RlY3J5cHRpb25FcnJvcnNfTlVNIDYKLyogRnJvbSBTTk1QLVRBUkdFVC1NSUIgKi8KI2RlZmluZSBSRVBPUlRfc25tcFVuYXZhaWxhYmxlQ29udGV4dHNfTlVNICA0CiNkZWZpbmUgUkVQT1JUX3NubXBVbmtub3duQ29udGV4dHNfTlVNICAgICAgNQoKI2RlZmluZSBTTk1QX0RFVEFJTF9TSVpFICAgICAgICA1MTIKCiNkZWZpbmUgU05NUF9GTEFHU19VRFBfQlJPQURDQVNUICAgMHg4MDAKI2RlZmluZSBTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0sgICAweDQwMCAgICAgIC8qIEFkZGl0aW9uYWwgY2FsbGJhY2sgb24gcmVzcG9uc2UgKi8KI2RlZmluZSBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCAgICAweDIwMCAgICAgIC8qIFVTTSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQgKi8KI2RlZmluZSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkUgICAgICAweDEwMCAgICAgIC8qIGRvbid0IHByb2JlIGZvciBhbiBlbmdpbmVJRCAqLwojZGVmaW5lIFNOTVBfRkxBR1NfU1RSRUFNX1NPQ0tFVCAgIDB4ODAKI2RlZmluZSBTTk1QX0ZMQUdTX0xJU1RFTklORyAgICAgICAweDQwIC8qIFNlcnZlciBzdHJlYW0gc29ja2V0cyBvbmx5ICovCiNkZWZpbmUgU05NUF9GTEFHU19TVUJTRVNTSU9OICAgICAgMHgyMAojZGVmaW5lIFNOTVBfRkxBR1NfU1RSSUtFMiAgICAgICAgIDB4MDIKI2RlZmluZSBTTk1QX0ZMQUdTX1NUUklLRTEgICAgICAgICAweDAxCgojZGVmaW5lIENMRUFSX1NOTVBfU1RSSUtFX0ZMQUdTKHgpIFwKCXggJj0gfihTTk1QX0ZMQUdTX1NUUklLRTJ8U05NUF9GTEFHU19TVFJJS0UxKQoKICAgIC8qCiAgICAgKiByZXR1cm5zICcxJyBpZiB0aGUgc2Vzc2lvbiBpcyB0byBiZSByZWdhcmRlZCBhcyBkZWFkLAogICAgICogb3RoZXJ3aXNlIHNldCB0aGUgc3RyaWtlIGZsYWdzIGFwcHJvcHJpYXRlbHksIGFuZCByZXR1cm4gMAogICAgICovCiNkZWZpbmUgU0VUX1NOTVBfU1RSSUtFX0ZMQUdTKHgpIFwKCSgoICAgeCAmIFNOTVBfRkxBR1NfU1RSSUtFMiApID8gMSA6CQkJCVwKCSAoKCggeCAmIFNOTVBfRkxBR1NfU1RSSUtFMSApID8gKCB4IHw9IFNOTVBfRkxBR1NfU1RSSUtFMiApIDoJXAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHggfD0gU05NUF9GTEFHU19TVFJJS0UxICkpLAlcCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKQoKICAgIC8qCiAgICAgKiBFcnJvciByZXR1cm4gdmFsdWVzLgogICAgICoKICAgICAqIFNOTVBFUlJfU1VDQ0VTUyBpcyB0aGUgbm9uLVBEVSAic3VjY2VzcyIgY29kZS4KICAgICAqCiAgICAgKiBYWFggIFRoZXNlIHNob3VsZCBiZSBtZXJnZWQgd2l0aCBTTk1QX0VSUl8qIGRlZmluZXMgYW5kIGNvbmZpbmVkCiAgICAgKiAgICAgIHRvIHZhbHVlcyA8IDAuICA/Pz8KICAgICAqLwojZGVmaW5lIFNOTVBFUlJfU1VDQ0VTUwkJCSgwKSAgICAgLyogWFhYICBOb24tUERVICJzdWNjZXNzIiBjb2RlLiAqLwojZGVmaW5lIFNOTVBFUlJfR0VORVJSCQkJKC0xKQojZGVmaW5lIFNOTVBFUlJfQkFEX0xPQ1BPUlQJCSgtMikKI2RlZmluZSBTTk1QRVJSX0JBRF9BRERSRVNTCQkoLTMpCiNkZWZpbmUgU05NUEVSUl9CQURfU0VTU0lPTgkJKC00KQojZGVmaW5lIFNOTVBFUlJfVE9PX0xPTkcJCSgtNSkKI2RlZmluZSBTTk1QRVJSX05PX1NPQ0tFVAkJKC02KQojZGVmaW5lIFNOTVBFUlJfVjJfSU5fVjEJCSgtNykKI2RlZmluZSBTTk1QRVJSX1YxX0lOX1YyCQkoLTgpCiNkZWZpbmUgU05NUEVSUl9CQURfUkVQRUFURVJTCQkoLTkpCiNkZWZpbmUgU05NUEVSUl9CQURfUkVQRVRJVElPTlMJCSgtMTApCiNkZWZpbmUgU05NUEVSUl9CQURfQVNOMV9CVUlMRAkJKC0xMSkKI2RlZmluZSBTTk1QRVJSX0JBRF9TRU5EVE8JCSgtMTIpCiNkZWZpbmUgU05NUEVSUl9CQURfUEFSU0UJCSgtMTMpCiNkZWZpbmUgU05NUEVSUl9CQURfVkVSU0lPTgkJKC0xNCkKI2RlZmluZSBTTk1QRVJSX0JBRF9TUkNfUEFSVFkJCSgtMTUpCiNkZWZpbmUgU05NUEVSUl9CQURfRFNUX1BBUlRZCQkoLTE2KQojZGVmaW5lIFNOTVBFUlJfQkFEX0NPTlRFWFQJCSgtMTcpCiNkZWZpbmUgU05NUEVSUl9CQURfQ09NTVVOSVRZCQkoLTE4KQojZGVmaW5lIFNOTVBFUlJfTk9BVVRIX0RFU1BSSVYJCSgtMTkpCiNkZWZpbmUgU05NUEVSUl9CQURfQUNMCQkJKC0yMCkKI2RlZmluZSBTTk1QRVJSX0JBRF9QQVJUWQkJKC0yMSkKI2RlZmluZSBTTk1QRVJSX0FCT1JUCQkJKC0yMikKI2RlZmluZSBTTk1QRVJSX1VOS05PV05fUERVCQkoLTIzKQojZGVmaW5lIFNOTVBFUlJfVElNRU9VVCAJCSgtMjQpCiNkZWZpbmUgU05NUEVSUl9CQURfUkVDVkZST00gCQkoLTI1KQojZGVmaW5lIFNOTVBFUlJfQkFEX0VOR19JRCAJCSgtMjYpCiNkZWZpbmUgU05NUEVSUl9CQURfU0VDX05BTUUgCQkoLTI3KQojZGVmaW5lIFNOTVBFUlJfQkFEX1NFQ19MRVZFTCAJCSgtMjgpCiNkZWZpbmUgU05NUEVSUl9BU05fUEFSU0VfRVJSICAgICAgICAgICAoLTI5KQojZGVmaW5lIFNOTVBFUlJfVU5LTk9XTl9TRUNfTU9ERUwgCSgtMzApCiNkZWZpbmUgU05NUEVSUl9JTlZBTElEX01TRyAgICAgICAgICAgICAoLTMxKQojZGVmaW5lIFNOTVBFUlJfVU5LTk9XTl9FTkdfSUQgICAgICAgICAgKC0zMikKI2RlZmluZSBTTk1QRVJSX1VOS05PV05fVVNFUl9OQU1FIAkoLTMzKQojZGVmaW5lIFNOTVBFUlJfVU5TVVBQT1JURURfU0VDX0xFVkVMIAkoLTM0KQojZGVmaW5lIFNOTVBFUlJfQVVUSEVOVElDQVRJT05fRkFJTFVSRSAJKC0zNSkKI2RlZmluZSBTTk1QRVJSX05PVF9JTl9USU1FX1dJTkRPVyAJKC0zNikKI2RlZmluZSBTTk1QRVJSX0RFQ1JZUFRJT05fRVJSICAgICAgICAgICgtMzcpCiNkZWZpbmUgU05NUEVSUl9TQ19HRU5FUkFMX0ZBSUxVUkUJKC0zOCkKI2RlZmluZSBTTk1QRVJSX1NDX05PVF9DT05GSUdVUkVECSgtMzkpCiNkZWZpbmUgU05NUEVSUl9LVF9OT1RfQVZBSUxBQkxFCSgtNDApCiNkZWZpbmUgU05NUEVSUl9VTktOT1dOX1JFUE9SVCAgICAgICAgICAoLTQxKQojZGVmaW5lIFNOTVBFUlJfVVNNX0dFTkVSSUNFUlJPUgkJKC00MikKI2RlZmluZSBTTk1QRVJSX1VTTV9VTktOT1dOU0VDVVJJVFlOQU1FCQkoLTQzKQojZGVmaW5lIFNOTVBFUlJfVVNNX1VOU1VQUE9SVEVEU0VDVVJJVFlMRVZFTAkoLTQ0KQojZGVmaW5lIFNOTVBFUlJfVVNNX0VOQ1JZUFRJT05FUlJPUgkJKC00NSkKI2RlZmluZSBTTk1QRVJSX1VTTV9BVVRIRU5USUNBVElPTkZBSUxVUkUJKC00NikKI2RlZmluZSBTTk1QRVJSX1VTTV9QQVJTRUVSUk9SCQkJKC00NykKI2RlZmluZSBTTk1QRVJSX1VTTV9VTktOT1dORU5HSU5FSUQJCSgtNDgpCiNkZWZpbmUgU05NUEVSUl9VU01fTk9USU5USU1FV0lORE9XCQkoLTQ5KQojZGVmaW5lIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUgkJKC01MCkKI2RlZmluZSBTTk1QRVJSX05PTUlCCQkJKC01MSkKI2RlZmluZSBTTk1QRVJSX1JBTkdFCQkJKC01MikKI2RlZmluZSBTTk1QRVJSX01BWF9TVUJJRAkJKC01MykKI2RlZmluZSBTTk1QRVJSX0JBRF9TVUJJRAkJKC01NCkKI2RlZmluZSBTTk1QRVJSX0xPTkdfT0lECQkoLTU1KQojZGVmaW5lIFNOTVBFUlJfQkFEX05BTUUJCSgtNTYpCiNkZWZpbmUgU05NUEVSUl9WQUxVRQkJCSgtNTcpCiNkZWZpbmUgU05NUEVSUl9VTktOT1dOX09CSklECQkoLTU4KQojZGVmaW5lIFNOTVBFUlJfTlVMTF9QRFUJCSgtNTkpCiNkZWZpbmUgU05NUEVSUl9OT19WQVJTCQkJKC02MCkKI2RlZmluZSBTTk1QRVJSX1ZBUl9UWVBFCQkoLTYxKQojZGVmaW5lIFNOTVBFUlJfTUFMTE9DCQkJKC02MikKI2RlZmluZSBTTk1QRVJSX0tSQjUJCQkoLTYzKQojZGVmaW5lIFNOTVBFUlJfUFJPVE9DT0wJCSgtNjQpCiNkZWZpbmUgU05NUEVSUl9PSURfTk9OSU5DUkVBU0lORyAgICAgICAoLTY1KQojZGVmaW5lIFNOTVBFUlJfSlVTVF9BX0NPTlRFWFRfUFJPQkUgICAgKC02NikKCiNkZWZpbmUgU05NUEVSUl9NQVgJCQkoLTY2KQoKCiAgICAvKgogICAgICogR2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4gVXNlIHRoZXNlIGZ1bmN0aW9ucyB0bwogICAgICogYWxsb2NhdGUgbWVtb3J5IHRoYXQgbWF5IGJlIHJlYWxsb2NhdGVkIG9yIGZyZWVkIGJ5IHRoZSBOZXQtU05NUAogICAgICogbGlicmFyeSBvciB0byByZWFsbG9jYXRlIG9yIGZyZWUgbWVtb3J5IHRoYXQgaGFzIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZQogICAgICogTmV0LVNOTVAgbGlicmFyeSwgYW5kIHdoZW4gd29ya2luZyBpbiBhIGNvbnRleHQgd2hlcmUgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgKiBvbmUgaGVhcC4gRXhhbXBsZXMgYXJlOgogICAgICogLSBQZXJsIFhTVUIncy4KICAgICAqIC0gTVNWQyBvciBNaW5HVyB3aXRoIHRoZSBOZXQtU05NUCBsaWJyYXJ5IGNvbXBpbGVkIGFzIGEgRExMIGluc3RlYWQgb2YKICAgICAqICAgYSBzdGF0aWMgbGlicmFyeS4KICAgICAqLwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9tYWxsb2Moc2l6ZV90IHNpemUpOwogICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9jYWxsb2Moc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKTsKICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgKm5ldHNubXBfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgbmV0c25tcF9mcmVlKHZvaWQgKnB0cik7CiAgICBORVRTTk1QX0lNUE9SVCBjaGFyICpuZXRzbm1wX3N0cmR1cChjb25zdCBjaGFyICpzMSk7CgogICAgLyoKICAgICAqIHZvaWQKICAgICAqIHNubXBfZnJlZV9wZHUocGR1KQogICAgICogICAgIG5ldHNubXBfcGR1ICpwZHU7CiAgICAgKgogICAgICogRnJlZXMgdGhlIHBkdSBhbmQgYW55IG1hbGxvYydkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICovCgogICAgTkVUU05NUF9JTVBPUlQgdm9pZCBzbm1wX2ZyZWVfdmFyX2ludGVybmFscyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKik7ICAgICAvKiBmcmVlcyBjb250ZW50cyBvbmx5ICovCgoKICAgIC8qCiAgICAgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb246CiAgICAgKgogICAgICogdV9jaGFyICphdXRoZW50aWNhdG9yKHBkdSwgbGVuZ3RoLCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pCiAgICAgKiB1X2NoYXIgKnBkdTsgICAgICAgICBUaGUgcmVzdCBvZiB0aGUgUERVIHRvIGJlIGF1dGhlbnRpY2F0ZWQKICAgICAqIGludCAqbGVuZ3RoOyAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIFBEVSAodXBkYXRlZCBieSB0aGUgYXV0aGVudGljYXRvcikKICAgICAqIHVfY2hhciAqY29tbXVuaXR5OyAgIFRoZSBjb21tdW5pdHkgbmFtZSB0byBhdXRoZW50aWNhdGUgdW5kZXIuCiAgICAgKiBpbnQgIGNvbW11bml0eV9sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBjb21tdW5pdHkgbmFtZS4KICAgICAqCiAgICAgKiBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGVkIHBkdSwgb3IgTlVMTCBpZiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuCiAgICAgKiBJZiBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQsIHRoZSBhdXRoZW50aWNhdG9yIGluIHNubXBfc2Vzc2lvbiBjYW4gYmUKICAgICAqIHNldCB0byBOVUxMKDApLgogICAgICovCgoKCiAgICAvKgogICAgICogVGhpcyByb3V0aW5lIG11c3QgYmUgc3VwcGxpZWQgYnkgdGhlIGFwcGxpY2F0aW9uOgogICAgICoKICAgICAqIGludCBjYWxsYmFjayhvcGVyYXRpb24sIHNlc3Npb24sIHJlcWlkLCBwZHUsIG1hZ2ljKQogICAgICogaW50IG9wZXJhdGlvbjsKICAgICAqIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsgICAgVGhlIHNlc3Npb24gYXV0aGVudGljYXRlZCB1bmRlci4KICAgICAqIGludCByZXFpZDsgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXF1ZXN0IGlkIG9mIHRoaXMgcGR1ICgwIGZvciBUUkFQKQogICAgICogbmV0c25tcF9wZHUgKnBkdTsgICAgICAgIFRoZSBwZHUgaW5mb3JtYXRpb24uCiAgICAgKiB2b2lkICptYWdpYyAgICAgICAgICAgICAgICAgICAgICBBIGxpbmsgdG8gdGhlIGRhdGEgZm9yIHRoaXMgcm91dGluZS4KICAgICAqCiAgICAgKiBSZXR1cm5zIDEgaWYgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCwgMCBpZiBpdCBzaG91bGQgYmUga2VwdCBwZW5kaW5nLgogICAgICogQW55IGRhdGEgaW4gdGhlIHBkdSBtdXN0IGJlIGNvcGllZCBiZWNhdXNlIGl0IHdpbGwgYmUgZnJlZWQgZWxzZXdoZXJlLgogICAgICogT3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBiZWxvdzoKICAgICAqLwoKI2RlZmluZSBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0UJMQojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfVElNRURfT1VUCQkyCiNkZWZpbmUgTkVUU05NUF9DQUxMQkFDS19PUF9TRU5EX0ZBSUxFRAkJMwojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfQ09OTkVDVAkJNAojZGVmaW5lIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfRElTQ09OTkVDVAkJNQoKICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X21zZ2lkKHZvaWQpOwogICAgbG9uZyAgICAgICAgICAgIHNubXBfZ2V0X25leHRfcmVxaWQodm9pZCk7CiAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF9zZXNzaWQodm9pZCk7CiAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF90cmFuc2lkKHZvaWQpOwoKICAgIGludCAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIGludCAgICAgICAgICAgICBzbm1wX29pZF9uY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIHNpemVfdCk7CiAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWR0cmVlX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKICAgIGludCAgICAgICAgICAgICBzbm1wX29pZHN1YnRyZWVfY29tcGFyZShjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwoY29uc3Qgb2lkICogaW5fbmFtZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuMiwgc2l6ZV90ICpvZmZwdCk7CiAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfZXF1YWxzKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX3RyZWVfZXF1YWxzKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2lzX3N1YnRyZWUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2ZpbmRfcHJlZml4KGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBpbl9uYW1lMiwgc2l6ZV90IGxlbjIpOwogICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcChjb25zdCBjaGFyICopOwogICAgdV9jaGFyICAgICAgICAgKnNubXBfcGR1X2J1aWxkKG5ldHNubXBfcGR1ICosIHVfY2hhciAqLCBzaXplX3QgKik7CiNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCiAgICB1X2NoYXIgICAgICAgICAqc25tcF9wZHVfcmJ1aWxkKG5ldHNubXBfcGR1ICosIHVfY2hhciAqLCBzaXplX3QgKik7CiNlbmRpZgogICAgaW50ICAgICAgICAgICAgIHNubXB2M19wYXJzZShuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiwgbmV0c25tcF9zZXNzaW9uICopOwogICAgaW50ICAgICAgICAgICAgIHNubXB2M19wYWNrZXRfYnVpbGQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBwYWNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogcGR1X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGR1X2RhdGFfbGVuKTsKICAgIGludCAgICAgICAgICAgICBzbm1wdjNfcGFja2V0X3JidWlsZChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBwYWNrZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwZHVfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGR1X2RhdGFfbGVuKTsKICAgIGludCAgICAgICAgICAgICBzbm1wdjNfbWFrZV9yZXBvcnQobmV0c25tcF9wZHUgKnBkdSwgaW50IGVycm9yKTsKICAgIGludCAgICAgICAgICAgICBzbm1wdjNfZ2V0X3JlcG9ydF90eXBlKG5ldHNubXBfcGR1ICpwZHUpOwogICAgaW50ICAgICAgICAgICAgIHNubXBfcGR1X3BhcnNlKG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKICAgIHVfY2hhciAgICAgICAgICpzbm1wdjNfc2NvcGVkUERVX3BhcnNlKG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3N0b3JlKGNvbnN0IGNoYXIgKnR5cGUpOwogICAgdm9pZCAgICAgICAgICAgIHNubXBfc2h1dGRvd24oY29uc3QgY2hhciAqdHlwZSk7CiAgICBpbnQgICAgICAgICAgICAgc25tcF9hZGRfdmFyKG5ldHNubXBfcGR1ICosIGNvbnN0IG9pZCAqLCBzaXplX3QsIGNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CiAgICBvaWQgICAgICAgICAgICAqc25tcF9kdXBsaWNhdGVfb2JqaWQoY29uc3Qgb2lkICogb2JqVG9Db3B5LCBzaXplX3QpOwogICAgdV9pbnQgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhpbnQgd2hpY2gpOwogICAgdV9pbnQgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieShpbnQgd2hpY2gsIGludCBjb3VudCk7CiAgICB1X2ludCAgICAgICAgICAgc25tcF9nZXRfc3RhdGlzdGljKGludCB3aGljaCk7CiAgICB2b2lkICAgICAgICAgICAgc25tcF9pbml0X3N0YXRpc3RpY3Modm9pZCk7CiAgICBpbnQgICAgICAgICAgICAgY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pOwogICAgaW50IHNubXBfZ2V0X2ZkX2Zvcl9zZXNzaW9uKHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3NwKTsKICAgIGludCBzbm1wdjNfcHJvYmVfY29udGV4dEVuZ2luZUlEX3JmYzUzNDModm9pZCAqc2xwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOwoKICAgIC8qCiAgICAgKiBOZXcgcmUtYWxsb2NhdGluZyByZXZlcnNlIGVuY29kaW5nIGZ1bmN0aW9ucy4gIAogICAgICovCiNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCgogICAgaW50ICAgICAgICBzbm1wdjNfcGFja2V0X3JlYWxsb2NfcmJ1aWxkKHVfY2hhciAqKiBwa3QsIHNpemVfdCAqIHBrdF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogcGR1X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGR1X2RhdGFfbGVuKTsKCiAgICBpbnQgICAgICAgIHNubXBfcGR1X3JlYWxsb2NfcmJ1aWxkKHVfY2hhciAqKiBwa3QsIHNpemVfdCAqIHBrdF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb2Zmc2V0LCBuZXRzbm1wX3BkdSAqcGR1KTsKI2VuZGlmCgoKCnN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zOwoKICAgIC8qCiAgICAgKiBFeHRlbmRlZCBvcGVuOyBmcHJlX3BhcnNlIGhhcyBjaGFuZ2VkLiAgCiAgICAgKi8KCiAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3Blbl9leChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwcmVfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmJ1aWxkKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZyYnVpbGQpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZjaGVjaykgKHVfY2hhciAqLCBzaXplX3QpKTsKCiAgICAvKgogICAgICogcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LiAgRG9uJ3QgdXNlIHRoZXNlIGZ1bmN0aW9ucy4KICAgICAqIFNlZSBzbm1wX2RlYnVnLmggYW5kIHNubXBfZGVidWcuYyBpbnN0ZWFkLgogICAgICovCgogICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZyhpbnQpOwogICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2RvX2RlYnVnZ2luZyh2b2lkKTsKCgoKICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfZXJyb3Iodm9pZCAqLCBpbnQgKiwgaW50ICosIGNoYXIgKiopOwogICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2Vzc19sb2dfZXJyb3IoaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzcyk7CiAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3BlcnJvcihjb25zdCBjaGFyICpwcm9nX3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNzKTsKICAgIGNvbnN0IGNoYXIgKiAgICBzbm1wX3BkdV90eXBlKGludCB0eXBlKTsKCiAgICAvKgogICAgICogUmV0dXJuIHRoZSBuZXRzbm1wX3RyYW5zcG9ydCBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvcGFxdWUKICAgICAqIHBvaW50ZXIuICAKICAgICAqLwoKICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICpzbm1wX3Nlc3NfdHJhbnNwb3J0KHZvaWQgKik7CiAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3RyYW5zcG9ydF9zZXQodm9pZCAqLAoJCQkJCSAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqKTsKCiAgICAvKgogICAgICogRVhURU5ERUQgU0VTU0lPTiBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICogCiAgICAgKiBzbm1wX3Nlc3NfYWRkX2V4LCBzbm1wX3Nlc3NfYWRkLCBzbm1wX2FkZCAKICAgICAqIAogICAgICogQW5hbG9nb3VzIHRvIHNubXBfb3BlbiBmYW1pbHkgb2YgZnVuY3Rpb25zLCBidXQgdGFraW5nIGFuCiAgICAgKiBuZXRzbm1wX3RyYW5zcG9ydCBwb2ludGVyIGFzIGFuIGV4dHJhIGFyZ3VtZW50LiAgVW5saWtlIHNubXBfb3BlbiBldAogICAgICogYWwuIGl0IGRvZXNuJ3QgYXR0ZW1wdCB0byBpbnRlcnByZXQgdGhlIGluX3Nlc3Npb24tPnBlZXJuYW1lIGFzIGEKICAgICAqIHRyYW5zcG9ydCBlbmRwb2ludCBzcGVjaWZpZXIsIGJ1dCBpbnN0ZWFkIHVzZXMgdGhlIHN1cHBsaWVkIHRyYW5zcG9ydC4KICAgICAqIEpCUE4KICAgICAqIAogICAgICovCgogICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19hZGRfZXgobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICosIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiwgc2l6ZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnJidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmNoZWNrKSAodV9jaGFyICosIHNpemVfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKCpmY3JlYXRlX3BkdSkgKHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KSk7CgogICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19hZGQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpKTsKCiAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfYWRkKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIGludCkpOwogICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX2FkZF9mdWxsKG5ldHNubXBfc2Vzc2lvbiAqIGluX3Nlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKiwgaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZidWlsZCkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcmJ1aWxkKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmY2hlY2spICh1X2NoYXIgKiwgc2l6ZV90KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKCpmY3JlYXRlX3BkdSkgKHN0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KQogICAgICAgICk7CiAgICAvKgogICAgICogZW5kIHNpbmdsZSBzZXNzaW9uIEFQSSAKICAgICAqLwoKICAgIC8qCiAgICAgKiBnZW5lcmljIHN0YXRpc3RpYyBjb3VudGVycyAKICAgICAqLwoKICAgIC8qCiAgICAgKiBzbm1wdjMgc3RhdGlzdGljcyAKICAgICAqLwoKICAgIC8qCiAgICAgKiBtcGQgc3RhdHMgCiAgICAgKi8KI2RlZmluZSAgIFNUQVRfU05NUFVOS05PV05TRUNVUklUWU1PREVMUyAgICAgMAojZGVmaW5lICAgU1RBVF9TTk1QSU5WQUxJRE1TR1MgICAgICAgICAgICAgICAxCiNkZWZpbmUgICBTVEFUX1NOTVBVTktOT1dOUERVSEFORExFUlMgICAgICAgIDIKI2RlZmluZSAgIFNUQVRfTVBEX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgU1RBVF9TTk1QVU5LTk9XTlNFQ1VSSVRZTU9ERUxTCiNkZWZpbmUgICBTVEFUX01QRF9TVEFUU19FTkQgICAgICAgICAgICAgICAgIFNUQVRfU05NUFVOS05PV05QRFVIQU5ETEVSUwoKICAgIC8qCiAgICAgKiB1c20gc3RhdHMgCiAgICAgKi8KI2RlZmluZSAgIFNUQVRfVVNNU1RBVFNVTlNVUFBPUlRFRFNFQ0xFVkVMUyAgMwojZGVmaW5lICAgU1RBVF9VU01TVEFUU05PVElOVElNRVdJTkRPV1MgICAgICA0CiNkZWZpbmUgICBTVEFUX1VTTVNUQVRTVU5LTk9XTlVTRVJOQU1FUyAgICAgIDUKI2RlZmluZSAgIFNUQVRfVVNNU1RBVFNVTktOT1dORU5HSU5FSURTICAgICAgNgojZGVmaW5lICAgU1RBVF9VU01TVEFUU1dST05HRElHRVNUUyAgICAgICAgICA3CiNkZWZpbmUgICBTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyAgICAgIDgKI2RlZmluZSAgIFNUQVRfVVNNX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgU1RBVF9VU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTCiNkZWZpbmUgICBTVEFUX1VTTV9TVEFUU19FTkQgICAgICAgICAgICAgICAgIFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTCgogICAgLyoKICAgICAqIHNubXAgY291bnRlcnMgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QSU5QS1RTICAgICAgICAgICAgICAgICAgICAgOQojZGVmaW5lICBTVEFUX1NOTVBPVVRQS1RTICAgICAgICAgICAgICAgICAgICAxMAojZGVmaW5lICBTVEFUX1NOTVBJTkJBRFZFUlNJT05TICAgICAgICAgICAgICAxMQojZGVmaW5lICBTVEFUX1NOTVBJTkJBRENPTU1VTklUWU5BTUVTICAgICAgICAxMgojZGVmaW5lICBTVEFUX1NOTVBJTkJBRENPTU1VTklUWVVTRVMgICAgICAgICAxMwojZGVmaW5lICBTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUyAgICAgICAgICAgICAxNAogICAgLyoKICAgICAqICNkZWZpbmUgIFNUQVRfU05NUElOQkFEVFlQRVMgICAgICAgICAgICAgIDE1IAogICAgICovCiNkZWZpbmUgIFNUQVRfU05NUElOVE9PQklHUyAgICAgICAgICAgICAgICAgIDE2CiNkZWZpbmUgIFNUQVRfU05NUElOTk9TVUNITkFNRVMgICAgICAgICAgICAgIDE3CiNkZWZpbmUgIFNUQVRfU05NUElOQkFEVkFMVUVTICAgICAgICAgICAgICAgIDE4CiNkZWZpbmUgIFNUQVRfU05NUElOUkVBRE9OTFlTICAgICAgICAgICAgICAgIDE5CiNkZWZpbmUgIFNUQVRfU05NUElOR0VORVJSUyAgICAgICAgICAgICAgICAgIDIwCiNkZWZpbmUgIFNUQVRfU05NUElOVE9UQUxSRVFWQVJTICAgICAgICAgICAgIDIxCiNkZWZpbmUgIFNUQVRfU05NUElOVE9UQUxTRVRWQVJTICAgICAgICAgICAgIDIyCiNkZWZpbmUgIFNUQVRfU05NUElOR0VUUkVRVUVTVFMgICAgICAgICAgICAgIDIzCiNkZWZpbmUgIFNUQVRfU05NUElOR0VUTkVYVFMgICAgICAgICAgICAgICAgIDI0CiNkZWZpbmUgIFNUQVRfU05NUElOU0VUUkVRVUVTVFMgICAgICAgICAgICAgIDI1CiNkZWZpbmUgIFNUQVRfU05NUElOR0VUUkVTUE9OU0VTICAgICAgICAgICAgIDI2CiNkZWZpbmUgIFNUQVRfU05NUElOVFJBUFMgICAgICAgICAgICAgICAgICAgIDI3CiNkZWZpbmUgIFNUQVRfU05NUE9VVFRPT0JJR1MgICAgICAgICAgICAgICAgIDI4CiNkZWZpbmUgIFNUQVRfU05NUE9VVE5PU1VDSE5BTUVTICAgICAgICAgICAgIDI5CiNkZWZpbmUgIFNUQVRfU05NUE9VVEJBRFZBTFVFUyAgICAgICAgICAgICAgIDMwCiAgICAvKgogICAgICogI2RlZmluZSAgU1RBVF9TTk1QT1VUUkVBRE9OTFlTICAgICAgICAgICAgMzEgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VORVJSUyAgICAgICAgICAgICAgICAgMzIKI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VUUkVRVUVTVFMgICAgICAgICAgICAgMzMKI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VUTkVYVFMgICAgICAgICAgICAgICAgMzQKI2RlZmluZSAgU1RBVF9TTk1QT1VUU0VUUkVRVUVTVFMgICAgICAgICAgICAgMzUKI2RlZmluZSAgU1RBVF9TTk1QT1VUR0VUUkVTUE9OU0VTICAgICAgICAgICAgMzYKI2RlZmluZSAgU1RBVF9TTk1QT1VUVFJBUFMgICAgICAgICAgICAgICAgICAgMzcKICAgIC8qCiAgICAgKiBBVVRIVFJBUEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOCAKICAgICAqLwojZGVmaW5lICBTVEFUX1NOTVBTSUxFTlREUk9QUwkJICAgICAzOQojZGVmaW5lICBTVEFUX1NOTVBQUk9YWURST1BTCQkgICAgIDQwCiNkZWZpbmUgIFNUQVRfU05NUF9TVEFUU19TVEFSVCAgICAgICAgICAgICAgIFNUQVRfU05NUElOUEtUUwojZGVmaW5lICBTVEFUX1NOTVBfU1RBVFNfRU5EICAgICAgICAgICAgICAgICBTVEFUX1NOTVBQUk9YWURST1BTCgogICAgLyoKICAgICAqIHRhcmdldCBtaWIgY291bnRlcnMgCiAgICAgKi8KI2RlZmluZSAgU1RBVF9TTk1QVU5BVkFJTEFCTEVDT05URVhUUwkgICAgIDQxCiNkZWZpbmUgIFNUQVRfU05NUFVOS05PV05DT05URVhUUwkgICAgIDQyCiNkZWZpbmUgIFNUQVRfVEFSR0VUX1NUQVRTX1NUQVJUICAgICAgICAgICAgIFNUQVRfU05NUFVOQVZBSUxBQkxFQ09OVEVYVFMKI2RlZmluZSAgU1RBVF9UQVJHRVRfU1RBVFNfRU5EICAgICAgICAgICAgICAgU1RBVF9TTk1QVU5LTk9XTkNPTlRFWFRTCgojZGVmaW5lICBNQVhfU1RBVFMgICAgICAgICAgICAgICAgICAgICAgICAgICA0MwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCiNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUF9BUElfSCAqLwo=