LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2UuICBXaGVuIHlvdSB1c2Ugb3IKICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLCB5b3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlcgogKiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMdjIgTGljZW5zZSIpCiAqIG9yIEJTRCBMaWNlbnNlLgogKgogKiBHUEx2MiBMaWNlbnNlCiAqCiAqIENvcHlyaWdodChDKSAyMDE2IE1lZGlhVGVrIEluYy4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAqIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIEJTRCBMSUNFTlNFCiAqCiAqIENvcHlyaWdodChDKSAyMDE2IE1lZGlhVGVrIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICogICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwogKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qCioqIElkOiAvL0RlcGFydG1lbnQvRGFWaW5jaS9CUkFOQ0hFUy9NVDY2MjBfV0lGSV9EUklWRVJfVjJfMy9pbmNsdWRlL3dsYW5fb2lkLmgjNAoqLwoKLyohIFxmaWxlICAgIndsYW5fb2lkLmgiCiogICAgXGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVjbGFpcmF0aW9uIGZpbGUgb2YgdGhlIFdMQU4gT0lEIHByb2Nlc3Npbmcgcm91dGluZXMKKgkgICBvZiBXaW5kb3dzIGRyaXZlciBmb3IgTWVkaWFUZWsgSW5jLiA4MDIuMTEgV2lyZWxlc3MgTEFOIEFkYXB0ZXJzLgoqLwoKCiNpZm5kZWYgX1dMQU5fT0lEX0gKI2RlZmluZSBfV0xBTl9PSURfSAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICBDIE8gTSBQIEkgTCBFIFIgICBGIEwgQSBHIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgIEUgWCBUIEUgUiBOIEEgTCAgIFIgRSBGIEUgUiBFIE4gQyBFIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIE8gTiBTIFQgQSBOIFQgUwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKI2RlZmluZSBQQVJBTV9NQVhfTEVOX1NTSUQgICAgICAgICAgICAgICAgICAgICAgMzIKCiNkZWZpbmUgUEFSQU1fTUFDX0FERFJfTEVOICAgICAgICAgICAgICAgICAgICAgIDYKCiNkZWZpbmUgRVRIRVJORVRfSEVBREVSX1NaICAgICAgICAgICAgICAgICAgICAgIDE0CiNkZWZpbmUgRVRIRVJORVRfTUlOX1BLVF9TWiAgICAgICAgICAgICAgICAgICAgIDYwCiNkZWZpbmUgRVRIRVJORVRfTUFYX1BLVF9TWiAgICAgICAgICAgICAgICAgICAgIDE1MTQKCiNkZWZpbmUgUEFSQU1fTUFYX0xFTl9SQVRFUyAgICAgICAgICAgICAgICAgICAgIDgKI2RlZmluZSBQQVJBTV9NQVhfTEVOX1JBVEVTX0VYICAgICAgICAgICAgICAgICAgMTYKCiNkZWZpbmUgUEFSQU1fQVVUSF9SRVFVRVNUX1JFQVVUSCAgICAgICAgICAgICAgIDB4MDEKI2RlZmluZSBQQVJBTV9BVVRIX1JFUVVFU1RfS0VZVVBEQVRFICAgICAgICAgICAgMHgwMgojZGVmaW5lIFBBUkFNX0FVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUiAgICAgICAweDA2CiNkZWZpbmUgUEFSQU1fQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SICAgICAgICAgIDB4MEUKCiNkZWZpbmUgUEFSQU1fRUVQUk9NX1JFQURfTUVUSE9EX1JFQUQgICAgICAgICAgIDEKI2RlZmluZSBQQVJBTV9FRVBST01fUkVBRF9NRVRIT0RfR0VUU0laRSAgICAgICAgMAoKI2RlZmluZSBQQVJBTV9XSFFMX1JTU0lfTUFYX0RCTSAgICAgICAgICAgICAgICAgKC0xMCkKI2RlZmluZSBQQVJBTV9XSFFMX1JTU0lfTUlOX0RCTSAgICAgICAgICAgICAgICAgKC0yMDApCgojZGVmaW5lIFBBUkFNX0RFVklDRV9XQUtFX1VQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKI2RlZmluZSBQQVJBTV9ERVZJQ0VfV0FLRV9PTl9QQVRURVJOX01BVENIX0VOQUJMRSAgICAgICAweDAwMDAwMDAyCiNkZWZpbmUgUEFSQU1fREVWSUNFX1dBS0VfT05fTUFHSUNfUEFDS0VUX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwNAoKI2RlZmluZSBQQVJBTV9XQUtFX1VQX01BR0lDX1BBQ0tFVCAgICAgICAgICAgICAgMHgwMDAwMDAwMQojZGVmaW5lIFBBUkFNX1dBS0VfVVBfUEFUVEVSTl9NQVRDSCAgICAgICAgICAgICAweDAwMDAwMDAyCiNkZWZpbmUgUEFSQU1fV0FLRV9VUF9MSU5LX0NIQU5HRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKCi8qIFBhY2tldCBmaWx0ZXIgYml0IGRlZmluaXRpb2luIChVSU5UXzMyIGJpdC13aXNlIGRlZmluaXRpb24pICovCiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9ESVJFQ1RFRCAgICAgICAgICAgIDB4MDAwMDAwMDEKI2RlZmluZSBQQVJBTV9QQUNLRVRfRklMVEVSX01VTFRJQ0FTVCAgICAgICAgICAgMHgwMDAwMDAwMgojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVCAgICAgICAweDAwMDAwMDA0CiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9CUk9BRENBU1QgICAgICAgICAgIDB4MDAwMDAwMDgKI2RlZmluZSBQQVJBTV9QQUNLRVRfRklMVEVSX1BST01JU0NVT1VTICAgICAgICAgMHgwMDAwMDAyMAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfQUxMX0xPQ0FMICAgICAgICAgICAweDAwMDAwMDgwCiNpZiBDRkdfRU5BQkxFX1dJRklfRElSRUNUX0NGR184MDIxMQojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfUDJQX01BU0sgICAgICAgICAgICAgMHhDMDAwMDAwMAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfUFJPQkVfUkVRICAgICAgICAgICAweDgwMDAwMDAwCiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BQ1RJT05fRlJBTUUgICAgICAweDQwMDAwMDAwCiNlbmRpZgoKI2lmIENGR19TTFRfU1VQUE9SVAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfU1VQUE9SVEVEICAgKFBBUkFNX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfCBcCgkJCQkJIFBBUkFNX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUIHwgXAoJCQkJCSBQQVJBTV9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8IFwKCQkJCQkgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUKQojZWxzZQojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfU1VQUE9SVEVEICAgKFBBUkFNX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfCBcCgkJCQkJIFBBUkFNX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUIHwgXAoJCQkJCSBQQVJBTV9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8IFwKCQkJCQkgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUKQojZW5kaWYKCiNkZWZpbmUgUEFSQU1fTUVNX0RVTVBfTUFYX1NJWkUgICAgICAgICAxNTM2CgojaWYgQ0ZHX1NVUFBPUlRfQ0FMX1JFU1VMVF9CQUNLVVBfVE9fSE9TVAojZGVmaW5lIFBBUkFNX0NBTF9EQVRBX0RVTVBfTUFYX1NJWkUJMTIwMAojZGVmaW5lIFBBUkFNX0NBTF9EQVRBX0RVTVBfTUFYX05VTQkJMzAwCiNlbmRpZgoKI2RlZmluZSBCVF9QUk9GSUxFX1BBUkFNX0xFTiAgICAgICAgOAoKI2RlZmluZSBFRlVTRV9BRERSX01BWCAgMHgzQkYJLyogQmFzZWQgb24gRUVQUk9NIGxheW91dCAyMDE2MDEyMCAqLwojaWYgQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUKCi8qIEZvciBNVDc2NjggKi8KI2RlZmluZSBFRlVTRV9DT05URU5UX0JVRkZFUl9TVEFSVCAgICAgICAgMHgwM0EKI2RlZmluZSBFRlVTRV9DT05URU5UX0JVRkZFUl9FTkQgICAgICAgICAgMHgxRDkKI2RlZmluZSBFRlVTRV9DT05URU5UX0JVRkZFUl9TSVpFCQkgIChFRlVTRV9DT05URU5UX0JVRkZFUl9FTkQgLSBFRlVTRV9DT05URU5UX0JVRkZFUl9TVEFSVCArIDEpCgovKiBGb3IgTVQ2NjMyICovCiNkZWZpbmUgRUZVU0VfQ09OVEVOVF9TSVpFCQkJMTYKCiNkZWZpbmUgRUZVU0VfQkxPQ0tfU0laRSAxNgojZGVmaW5lIEVFUFJPTV9TSVpFIDExODQKI2RlZmluZSBNQVhfRUVQUk9NX0JVRkZFUl9TSVpFCTEyMDAKI2VuZGlmIC8qIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFICovCgojaWYgQ0ZHX1NVUFBPUlRfVFhfQkYKI2RlZmluZSBUWEJGX0NNRF9ORUVEX1RPX1JFU1BPTlNFKHU0VHhCZkNtZElkKSAodTRUeEJmQ21kSWQgPT0gQkZfUEZNVV9UQUdfUkVBRCB8fCBcCgkJCQkJCXU0VHhCZkNtZElkID09IEJGX1BST0ZJTEVfUkVBRCkKI2VuZGlmIC8qIENGR19TVVBQT1JUX1RYX0JGICovCiNkZWZpbmUgTVVfQ01EX05FRURfVE9fUkVTUE9OU0UodTRNdUNtZElkKSAodTRNdUNtZElkID09IE1VX0dFVF9DQUxDX0lOSVRfTUNTIHx8IFwKCQkJCQkgICAgdTRNdUNtZElkID09IE1VX0hRQV9HRVRfUUQgfHwgXAoJCQkJCSAgICB1NE11Q21kSWQgPT0gTVVfSFFBX0dFVF9DQUxDX0xRKQojaWYgQ0ZHX1NVUFBPUlRfTVVfTUlNTwovKiBATklURVNIOiBNQUNST1MgRm9yIEluaXQgTUNTIGNhbGN1bGF0aW9uIChNVSBNZXRyaWMgVGFibGUpICovCiNkZWZpbmUgTlVNX01VVF9GRUMgICAgICAgICAgICAgMgojZGVmaW5lIE5VTV9NVVRfTUNTICAgICAgICAgICAgIDEwCiNkZWZpbmUgTlVNX01VVF9OUl9OVU0gICAgICAgICAgMwojZGVmaW5lIE5VTV9NVVRfSU5ERVggICAgICAgICAgIDgKCiNkZWZpbmUgTlVNX09GX1VTRVIgICAgICAgICAgICAgMgojZGVmaW5lIE5VTV9PRl9NT0RVTCAgICAgICAgICAgIDUKI2VuZGlmIC8qIENGR19TVVBQT1JUX01VX01JTU8gKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgQSBUIEEgICBUIFkgUCBFIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyogUGFyYW1ldGVycyBvZiBVc2VyIENvbmZpZ3VyYXRpb24gd2hpY2ggbWF0Y2ggdG8gTkRJUzUuMSAgICAgICAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyogTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAqLwp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fQVVUSF9NT0RFX1QgewoJQVVUSF9NT0RFX09QRU4sCQkvKiE8IE9wZW4gc3lzdGVtICovCglBVVRIX01PREVfU0hBUkVELAkvKiE8IFNoYXJlZCBrZXkgKi8KCUFVVEhfTU9ERV9BVVRPX1NXSVRDSCwJLyohPCBFaXRoZXIgb3BlbiBzeXN0ZW0gb3Igc2hhcmVkIGtleSAqLwoJQVVUSF9NT0RFX1dQQSwKCUFVVEhfTU9ERV9XUEFfUFNLLAoJQVVUSF9NT0RFX1dQQV9OT05FLAkvKiE8IEZvciBBZCBob2MgKi8KCUFVVEhfTU9ERV9XUEEyLAoJQVVUSF9NT0RFX1dQQTJfUFNLLAoJQVVUSF9NT0RFX05VTQkJLyohPCBVcHBlciBib3VuZCwgbm90IHJlYWwgY2FzZSAqLwp9IEVOVU1fUEFSQU1fQVVUSF9NT0RFX1QsICpQX0VOVU1fUEFSQU1fQVVUSF9NT0RFX1Q7CgovKiBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAqLy8qIEVuY3J5cHRpb24gdHlwZXMgKi8KdHlwZWRlZiBlbnVtIF9FTlVNX1dFUF9TVEFUVVNfVCB7CglFTlVNX1dFUF9FTkFCTEVELAoJRU5VTV9FTkNSWVBUSU9OMV9FTkFCTEVEID0gRU5VTV9XRVBfRU5BQkxFRCwKCUVOVU1fV0VQX0RJU0FCTEVELAoJRU5VTV9FTkNSWVBUSU9OX0RJU0FCTEVEID0gRU5VTV9XRVBfRElTQUJMRUQsCglFTlVNX1dFUF9LRVlfQUJTRU5ULAoJRU5VTV9FTkNSWVBUSU9OMV9LRVlfQUJTRU5UID0gRU5VTV9XRVBfS0VZX0FCU0VOVCwKCUVOVU1fV0VQX05PVF9TVVBQT1JURUQsCglFTlVNX0VOQ1JZUFRJT05fTk9UX1NVUFBPUlRFRCA9IEVOVU1fV0VQX05PVF9TVVBQT1JURUQsCglFTlVNX0VOQ1JZUFRJT04yX0VOQUJMRUQsCglFTlVNX0VOQ1JZUFRJT04yX0tFWV9BQlNFTlQsCglFTlVNX0VOQ1JZUFRJT04zX0VOQUJMRUQsCglFTlVNX0VOQ1JZUFRJT04zX0tFWV9BQlNFTlQKfSBFTlVNX1BBUkFNX0VOQ1JZUFRJT05fU1RBVFVTX1QsICpQX0VOVU1fUEFSQU1fRU5DUllQVElPTl9TVEFUVVNfVDsKCnR5cGVkZWYgVUlOVF84IFBBUkFNX01BQ19BRERSRVNTW1BBUkFNX01BQ19BRERSX0xFTl07Cgp0eXBlZGVmIFVJTlRfMzIgUEFSQU1fS0VZX0lOREVYOwp0eXBlZGVmIFVJTlRfNjQgUEFSQU1fS0VZX1JTQzsKdHlwZWRlZiBJTlRfMzIgUEFSQU1fUlNTSTsKCnR5cGVkZWYgVUlOVF8zMiBQQVJBTV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRDsKdHlwZWRlZiBVSU5UXzMyIFBBUkFNX1JUU19USFJFU0hPTEQ7Cgp0eXBlZGVmIFVJTlRfOCBQQVJBTV9SQVRFU1tQQVJBTV9NQVhfTEVOX1JBVEVTXTsKdHlwZWRlZiBVSU5UXzggUEFSQU1fUkFURVNfRVhbUEFSQU1fTUFYX0xFTl9SQVRFU19FWF07Cgp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fUEhZX1RZUEVfVCB7CglQSFlfVFlQRV84MDJfMTFBQkcgPSAwLAkvKiE8IENhbiBhc3NvY2lhdGVkIHdpdGggODAyLjExYWJnIEFQLAoJCQkJKiBTY2FuIGR1YWwgYmFuZC4KCQkJCSovCglQSFlfVFlQRV84MDJfMTFCRywJLyohPCBDYW4gYXNzb2NpYXRlZCB3aXRoIDgwMl8xMWJnIEFQLAoJCQkJKiAgU2NhbiBzaW5nbGUgYmFuZCBhbmQgbm90IHJlcG9ydCA4MDJfMTFhIEJTU3MuCgkJCQkqLwoJUEhZX1RZUEVfODAyXzExRywJLyohPCBDYW4gYXNzb2NpYXRlZCB3aXRoIDgwMl8xMWcgb25seSBBUCwKCQkJCSogU2NhbiBzaW5nbGUgYmFuZCBhbmQgbm90IHJlcG9ydCA4MDJfMTFhYiBCU1NzLgoJCQkJKi8KCVBIWV9UWVBFXzgwMl8xMUEsCS8qITwgQ2FuIGFzc29jaWF0ZWQgd2l0aCA4MDJfMTFhIG9ubHkgQVAsCgkJCQkqIFNjYW4gc2luZ2xlIGJhbmQgYW5kIG5vdCByZXBvcnQgODAyXzExYmcgQlNTcy4KCQkJCSovCglQSFlfVFlQRV84MDJfMTFCLAkvKiE8IENhbiBhc3NvY2lhdGVkIHdpdGggODAyXzExYiBvbmx5IEFQCgkJCQkqIFNjYW4gc2luZ2xlIGJhbmQgYW5kIG5vdCByZXBvcnQgODAyXzExYWcgQlNTcy4KCQkJCSovCglQSFlfVFlQRV9OVU0JCS8qIDUgKi8KfSBFTlVNX1BBUkFNX1BIWV9UWVBFX1QsICpQX0VOVU1fUEFSQU1fUEhZX1RZUEVfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9PUF9NT0RFX1QgewoJTkVUX1RZUEVfSUJTUyA9IDAsCS8qITwgVHJ5IHRvIG1lcmdlL2VzdGFibGlzaCBhbiBBZEhvYywgZG8gcGVyaW9kaWMgU0NBTiBmb3IgbWVyZ2luZy4gKi8KCU5FVF9UWVBFX0lORlJBLAkJLyohPCBUcnkgdG8gam9pbiBhbiBJbmZyYXN0cnVjdHVyZSwgZG8gcGVyaW9kaWMgU0NBTiBmb3Igam9pbmluZy4gKi8KCU5FVF9UWVBFX0FVVE9fU1dJVENILAkvKiE8IFRyeSB0byBqb2luIGFuIEluZnJhc3RydWN0dXJlLCBpZiBmYWlsIHRoZW4gdHJ5IHRvIG1lcmdlIG9yICovCgkJCQkvKiAgZXN0YWJsaXNoIGFuIEFkSG9jLCBkbyBwZXJpb2RpYyBTQ0FOIGZvciBqb2luaW5nIG9yIG1lcmdpbmcuICovCglORVRfVFlQRV9ERURJQ0FURURfSUJTUywJLyohPCBUcnkgdG8gbWVyZ2UgYW4gQWRIb2MgZmlyc3QsICovCgkJCQkJLyogaWYgZmFpbCB0aGVuIGVzdGFibGlzaCBBZEhvYyBwZXJtYW5lbnRseSwgbm8gbW9yZSBTQ0FOLiAqLwoJTkVUX1RZUEVfTlVNCQkvKiA0ICovCn0gRU5VTV9QQVJBTV9PUF9NT0RFX1QsICpQX0VOVU1fUEFSQU1fT1BfTU9ERV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1NTSURfVCB7CglVSU5UXzMyIHU0U3NpZExlbjsJLyohPCBTU0lEIGxlbmd0aCBpbiBieXRlcy4gWmVybyBsZW5ndGggaXMgYnJvYWRjYXN0KGFueSkgU1NJRCAqLwoJVUlOVF84IGF1Y1NzaWRbUEFSQU1fTUFYX0xFTl9TU0lEXTsKfSBQQVJBTV9TU0lEX1QsICpQX1BBUkFNX1NTSURfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DT05ORUNUX1QgewoJVUlOVF8zMiB1NFNzaWRMZW47CS8qITwgU1NJRCBsZW5ndGggaW4gYnl0ZXMuIFplcm8gbGVuZ3RoIGlzIGJyb2FkY2FzdChhbnkpIFNTSUQgKi8KCVVJTlRfOCAqcHVjU3NpZDsKCVVJTlRfOCAqcHVjQnNzaWQ7CglVSU5UXzMyIHU0Q2VudGVyRnJlcTsKfSBQQVJBTV9DT05ORUNUX1QsICpQX1BBUkFNX0NPTk5FQ1RfVDsKCi8qIFRoaXMgaXMgZW51bSBkZWZpbmVkIGZvciB1c2VyIHRvIHNlbGVjdCBhbiBBZEhvYyBNb2RlICovCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9BRF9IT0NfTU9ERV9UIHsKCUFEX0hPQ19NT0RFXzExQiA9IDAsCS8qITwgQ3JlYXRlIDExYiBJQlNTIGlmIHdlIHN1cHBvcnQgODAyLjExYWJnLzgwMi4xMWJnLiAqLwoJQURfSE9DX01PREVfTUlYRURfMTFCRywJLyohPCBDcmVhdGUgMTFiZyBtaXhlZCBJQlNTIGlmIHdlIHN1cHBvcnQgODAyLjExYWJnLzgwMi4xMWJnLzgwMi4xMWcuICovCglBRF9IT0NfTU9ERV8xMUcsCS8qITwgQ3JlYXRlIDExZyBvbmx5IElCU1MgaWYgd2Ugc3VwcG9ydCA4MDIuMTFhYmcvODAyLjExYmcvODAyLjExZy4gKi8KCUFEX0hPQ19NT0RFXzExQSwJLyohPCBDcmVhdGUgMTFhIG9ubHkgSUJTUyBpZiB3ZSBzdXBwb3J0IDgwMi4xMWFiZy4gKi8KCUFEX0hPQ19NT0RFX05VTQkJLyogNCAqLwp9IEVOVU1fUEFSQU1fQURfSE9DX01PREVfVCwgKlBfRU5VTV9QQVJBTV9BRF9IT0NfTU9ERV9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX01FRElBX1NUQVRFX1QgewoJUEFSQU1fTUVESUFfU1RBVEVfQ09OTkVDVEVELAoJUEFSQU1fTUVESUFfU1RBVEVfRElTQ09OTkVDVEVELAoJUEFSQU1fTUVESUFfU1RBVEVfVE9fQkVfSU5ESUNBVEVECS8qIGZvciBmb2xsb3dpbmcgTVNETiByZS1hc3NvY2lhdGlvbiBiZWhhdmlvciAqLwp9IEVOVU1fUEFSQU1fTUVESUFfU1RBVEVfVCwgKlBfRU5VTV9QQVJBTV9NRURJQV9TVEFURV9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIHsKCVBBUkFNX05FVFdPUktfVFlQRV9GSCwKCVBBUkFNX05FVFdPUktfVFlQRV9EUywKCVBBUkFNX05FVFdPUktfVFlQRV9PRkRNNSwKCVBBUkFNX05FVFdPUktfVFlQRV9PRkRNMjQsCglQQVJBTV9ORVRXT1JLX1RZUEVfQVVUT01PREUsCglQQVJBTV9ORVRXT1JLX1RZUEVfTlVNCS8qITwgVXBwZXIgYm91bmQsIG5vdCByZWFsIGNhc2UgKi8KfSBFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9ULCAqUF9FTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX05FVFdPUktfVFlQRV9MSVNUIHsKCVVJTlRfMzIgTnVtYmVyT2ZJdGVtczsJLyohPCBBdCBsZWFzdCAxICovCglFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIGVOZXR3b3JrVHlwZVsxXTsKfSBQQVJBTV9ORVRXT1JLX1RZUEVfTElTVCwgKlBQQVJBTV9ORVRXT1JLX1RZUEVfTElTVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9QUklWQUNZX0ZJTFRFUl9UIHsKCVBSSVZBQ1lfRklMVEVSX0FDQ0VQVF9BTEwsCglQUklWQUNZX0ZJTFRFUl84MDIxeFdFUCwKCVBSSVZBQ1lfRklMVEVSX05VTQp9IEVOVU1fUEFSQU1fUFJJVkFDWV9GSUxURVJfVCwgKlBfRU5VTV9QQVJBTV9QUklWQUNZX0ZJTFRFUl9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1JFTE9BRF9ERUZBVUxUUyB7CglFTlVNX1JFTE9BRF9XRVBfS0VZUwp9IFBBUkFNX1JFTE9BRF9ERUZBVUxUUywgKlBfUEFSQU1fUkVMT0FEX0RFRkFVTFRTOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BNX1BBQ0tFVF9QQVRURVJOIHsKCVVJTlRfMzIgUHJpb3JpdHk7CS8qIEltcG9ydGFuY2Ugb2YgdGhlIGdpdmVuIHBhdHRlcm4uICovCglVSU5UXzMyIFJlc2VydmVkOwkvKiBDb250ZXh0IGluZm9ybWF0aW9uIGZvciB0cmFuc3BvcnRzLiAqLwoJVUlOVF8zMiBNYXNrU2l6ZTsJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgcGF0dGVybiBtYXNrLiAqLwoJVUlOVF8zMiBQYXR0ZXJuT2Zmc2V0OwkvKiBPZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgdGhpcyAqLwoJLyogc3RydWN0dXJlIHRvIHRoZSBwYXR0ZXJuIGJ5dGVzLiAqLwoJVUlOVF8zMiBQYXR0ZXJuU2l6ZTsJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgcGF0dGVybi4gKi8KCVVJTlRfMzIgUGF0dGVybkZsYWdzOwkvKiBGbGFncyAoVEJEKS4gKi8KfSBQQVJBTV9QTV9QQUNLRVRfUEFUVEVSTiwgKlBfUEFSQU1fUE1fUEFDS0VUX1BBVFRFUk47CgoKLyogQ29tYmluZSB1Y1RwVGVzdE1vZGUgYW5kIHVjU2lnbWFUZXN0TW9kZSBpbiBvbmUgZmxhZyAqLwovKiB1Y1RwVGVzdE1vZGUgPT0gMCwgZm9yIG5vcm1hbCBkcml2ZXIgKi8KLyogdWNUcFRlc3RNb2RlID09IDEsIGZvciBwdXJlIHRocm91Z2hwdXQgdGVzdCBtb2RlIChleDogUnZSKSAqLwovKiB1Y1RwVGVzdE1vZGUgPT0gMiwgZm9yIHNpZ21hIFRHbi9UR2FjL1BNRiAqLwovKiB1Y1RwVGVzdE1vZGUgPT0gMywgZm9yIHNpZ21hIFdNTSBQUyAqLwp0eXBlZGVmIGVudW0gX0VOVU1fVFBfVEVTVF9NT0RFX1QgewoJRU5VTV9UUF9URVNUX01PREVfTk9STUFMID0gMCwKCUVOVU1fVFBfVEVTVF9NT0RFX1RIUk9VR0hQVVQsCglFTlVNX1RQX1RFU1RfTU9ERV9TSUdNQV9BQ19OX1BNRiwKCUVOVU1fVFBfVEVTVF9NT0RFX1NJR01BX1dNTV9QUywKCUVOVU1fVFBfVEVTVF9NT0RFX05VTQp9IEVOVU1fVFBfVEVTVF9NT0RFX1QsICpQX0VOVU1fVFBfVEVTVF9NT0RFX1Q7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBTdHJ1Y3QgZGVmaW5pdGlvbiB0byBpbmRpY2F0ZSBzcGVjaWZpYyBldmVudC4gICAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgZW51bSBfRU5VTV9TVEFUVVNfVFlQRV9UIHsKCUVOVU1fU1RBVFVTX1RZUEVfQVVUSEVOVElDQVRJT04sCglFTlVNX1NUQVRVU19UWVBFX01FRElBX1NUUkVBTV9NT0RFLAoJRU5VTV9TVEFUVVNfVFlQRV9DQU5ESURBVEVfTElTVCwKCUVOVU1fU1RBVFVTX1RZUEVfTlVNCS8qITwgVXBwZXIgYm91bmQsIG5vdCByZWFsIGNhc2UgKi8KfSBFTlVNX1NUQVRVU19UWVBFX1QsICpQX0VOVU1fU1RBVFVTX1RZUEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV84MDJfMTFfQ09ORklHX0ZIX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyohPCBMZW5ndGggb2Ygc3RydWN0dXJlICovCglVSU5UXzMyIHU0SG9wUGF0dGVybjsJLyohPCBEZWZpbmVkIGFzIDgwMi4xMSAqLwoJVUlOVF8zMiB1NEhvcFNldDsJLyohPCB0byBvbmUgaWYgbm9uLTgwMi4xMSAqLwoJVUlOVF8zMiB1NER3ZWxsVGltZTsJLyohPCBJbiB1bml0IG9mIEt1c2VjICovCn0gUEFSQU1fODAyXzExX0NPTkZJR19GSF9ULCAqUF9QQVJBTV84MDJfMTFfQ09ORklHX0ZIX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX0NPTkZJR19UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEJlYWNvblBlcmlvZDsJLyohPCBJbiB1bml0IG9mIEt1c2VjICovCglVSU5UXzMyIHU0QVRJTVdpbmRvdzsJLyohPCBJbiB1bml0IG9mIEt1c2VjICovCglVSU5UXzMyIHU0RFNDb25maWc7CS8qITwgQ2hhbm5lbCBmcmVxdWVuY3kgaW4gdW5pdCBvZiBrSHogKi8KCVBBUkFNXzgwMl8xMV9DT05GSUdfRkhfVCByRkhDb25maWc7Cn0gUEFSQU1fODAyXzExX0NPTkZJR19ULCAqUF9QQVJBTV84MDJfMTFfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVCB7CglFTlVNX1NUQVRVU19UWVBFX1QgZVN0YXR1c1R5cGU7Cn0gUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVCwgKlBfUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9BVVRIX1JFUVVFU1RfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwkvKiE8IExlbmd0aCBvZiB0aGlzIHN0cnVjdCAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJCc3NpZDsKCVVJTlRfMzIgdTRGbGFnczsJLyohPCBEZWZpbml0aW9ucyBhcmUgYXMgZm9sbG93cyAqLwp9IFBBUkFNX0FVVEhfUkVRVUVTVF9ULCAqUF9QQVJBTV9BVVRIX1JFUVVFU1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9BVVRIX0VWRU5UX1QgewoJUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVCByU3RhdHVzOwoJUEFSQU1fQVVUSF9SRVFVRVNUX1QgYXJSZXF1ZXN0WzFdOwp9IFBBUkFNX0FVVEhfRVZFTlRfVCwgKlBfUEFSQU1fQVVUSF9FVkVOVF9UOwoKLyohIFxicmllZiBDYXBhYmlsaXRpZXMsIHByaXZhY3ksIHJzc2kgYW5kIElFcyBvZiBlYWNoIEJTU0lEICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9CU1NJRF9FWF9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJNYWNBZGRyZXNzOwkvKiE8IEJTU0lEICovCglVSU5UXzggUmVzZXJ2ZWRbMl07CglQQVJBTV9TU0lEX1QgclNzaWQ7CS8qITwgU1NJRCAqLwoJVUlOVF8zMiB1NFByaXZhY3k7CS8qITwgTmVlZCBXRVAgZW5jcnlwdGlvbiAqLwoJUEFSQU1fUlNTSSByUnNzaTsJLyohPCBpbiBkQm0gKi8KCUVOVU1fUEFSQU1fTkVUV09SS19UWVBFX1QgZU5ldHdvcmtUeXBlSW5Vc2U7CglQQVJBTV84MDJfMTFfQ09ORklHX1QgckNvbmZpZ3VyYXRpb247CglFTlVNX1BBUkFNX09QX01PREVfVCBlT3BNb2RlOwoJUEFSQU1fUkFURVNfRVggclN1cHBvcnRlZFJhdGVzOwoJVUlOVF8zMiB1NElFTGVuZ3RoOwoJVUlOVF84IGF1Y0lFc1sxXTsKfSBQQVJBTV9CU1NJRF9FWF9ULCAqUF9QQVJBTV9CU1NJRF9FWF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0JTU0lEX0xJU1RfRVggewoJVUlOVF8zMiB1NE51bWJlck9mSXRlbXM7CS8qITwgYXQgbGVhc3QgMSAqLwoJUEFSQU1fQlNTSURfRVhfVCBhckJzc2lkWzFdOwp9IFBBUkFNX0JTU0lEX0xJU1RfRVhfVCwgKlBfUEFSQU1fQlNTSURfTElTVF9FWF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1dFUF9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEtleUluZGV4OwkvKiE8IDA6IHBhaXJ3aXNlIGtleSwgb3RoZXJzIGdyb3VwIGtleXMgKi8KCVVJTlRfMzIgdTRLZXlMZW5ndGg7CS8qITwgS2V5IGxlbmd0aCBpbiBieXRlcyAqLwoJVUlOVF84IGF1Y0tleU1hdGVyaWFsWzMyXTsJLyohPCBLZXkgY29udGVudCBieSBhYm92ZSBzZXR0aW5nICovCn0gUEFSQU1fV0VQX1QsICpQX1BBUkFNX1dFUF9UOwoKLyohIFxicmllZiBLZXkgbWFwcGluZyBvZiBCU1NJRCAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fS0VZX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyohPCBMZW5ndGggb2Ygc3RydWN0dXJlICovCglVSU5UXzMyIHU0S2V5SW5kZXg7CS8qITwgS2V5SUQgKi8KCVVJTlRfMzIgdTRLZXlMZW5ndGg7CS8qITwgS2V5IGxlbmd0aCBpbiBieXRlcyAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJCU1NJRDsJLyohPCBNQUMgYWRkcmVzcyAqLwoJUEFSQU1fS0VZX1JTQyByS2V5UlNDOwoJVUlOVF84IHVjQnNzSWR4OwoJVUlOVF84IHVjQ2lwaGVyOwoJVUlOVF84IGF1Y0tleU1hdGVyaWFsWzMyXTsJLyohPCBLZXkgY29udGVudCBieSBhYm92ZSBzZXR0aW5nICovCgkvKiBGb2xsb3dpbmcgYWRkIHRvIGNoYW5nZSB0aGUgb3JpZ2luYWwgd2luZG93cyBzdHJ1Y3R1cmUgKi8KfSBQQVJBTV9LRVlfVCwgKlBfUEFSQU1fS0VZX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUkVNT1ZFX0tFWV9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEtleUluZGV4OwkvKiE8IEtleUlEICovCglQQVJBTV9NQUNfQUREUkVTUyBhckJTU0lEOwkvKiE8IE1BQyBhZGRyZXNzICovCglVSU5UXzggdWNCc3NJZHg7Cn0gUEFSQU1fUkVNT1ZFX0tFWV9ULCAqUF9QQVJBTV9SRU1PVkVfS0VZX1Q7CgovKiEgXGJyaWVmIERlZmF1bHQga2V5ICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9ERUZBVUxUX0tFWV9UIHsKCVVJTlRfOCB1Y0tleUlEOwoJVUlOVF84IHVjVW5pY2FzdDsKCVVJTlRfOCB1Y011bHRpY2FzdDsKCVVJTlRfOCB1Y0Jzc0lkeDsKfSBQQVJBTV9ERUZBVUxUX0tFWV9ULCAqUF9QQVJBTV9ERUZBVUxUX0tFWV9UOwoKI2lmIENGR19TVVBQT1JUX1dBUEkKdHlwZWRlZiBlbnVtIF9FTlVNX0tFWV9UWVBFIHsKCUVOVU1fV1BJX1BBSVJXSVNFX0tFWSA9IDAsCglFTlVNX1dQSV9HUk9VUF9LRVkKfSBFTlVNX0tFWV9UWVBFOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1dQSV9QUk9URUNUX1RZUEUgewoJRU5VTV9XUElfTk9ORSwKCUVOVU1fV1BJX1JYLAoJRU5VTV9XUElfVFgsCglFTlVNX1dQSV9SWF9UWAp9IEVOVU1fV1BJX1BST1RFQ1RfVFlQRTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9XUElfS0VZX1QgewoJRU5VTV9LRVlfVFlQRSBlS2V5VHlwZTsKCUVOVU1fV1BJX1BST1RFQ1RfVFlQRSBlRGlyZWN0aW9uOwoJVUlOVF84IHVjS2V5SUQ7CglVSU5UXzggYXVjUnN2WzNdOwoJVUlOVF84IGF1Y0FkZHJJbmRleFsxMl07CglVSU5UXzMyIHU0TGVuV1BJRUs7CglVSU5UXzggYXVjV1BJRUtbMjU2XTsKCVVJTlRfMzIgdTRMZW5XUElDSzsKCVVJTlRfOCBhdWNXUElDS1syNTZdOwoJVUlOVF84IGF1Y1BOWzE2XTsKfSBQQVJBTV9XUElfS0VZX1QsICpQX1BBUkFNX1dQSV9LRVlfVDsKI2VuZGlmCgp0eXBlZGVmIGVudW0gX1BBUkFNX1BPV0VSX01PREUgewoJUGFyYW1fUG93ZXJNb2RlQ0FNLAoJUGFyYW1fUG93ZXJNb2RlTUFYX1BTUCwKCVBhcmFtX1Bvd2VyTW9kZUZhc3RfUFNQLAoJUGFyYW1fUG93ZXJNb2RlTWF4CS8qIFVwcGVyIGJvdW5kLCBub3QgcmVhbCBjYXNlICovCn0gUEFSQU1fUE9XRVJfTU9ERSwgKlBQQVJBTV9QT1dFUl9NT0RFOwoKdHlwZWRlZiBlbnVtIF9QQVJBTV9ERVZJQ0VfUE9XRVJfU1RBVEUgewoJUGFyYW1EZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKCVBhcmFtRGV2aWNlU3RhdGVEMCwKCVBhcmFtRGV2aWNlU3RhdGVEMSwKCVBhcmFtRGV2aWNlU3RhdGVEMiwKCVBhcmFtRGV2aWNlU3RhdGVEMywKCVBhcmFtRGV2aWNlU3RhdGVNYXhpbXVtCn0gUEFSQU1fREVWSUNFX1BPV0VSX1NUQVRFLCAqUFBBUkFNX0RFVklDRV9QT1dFUl9TVEFURTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QT1dFUl9NT0RFX1QgewoJVUlOVF84IHVjQnNzSWR4OwoJUEFSQU1fUE9XRVJfTU9ERSBlUG93ZXJNb2RlOwp9IFBBUkFNX1BPV0VSX01PREVfVCwgKlBfUEFSQU1fUE9XRVJfTU9ERV9UOwoKI2lmIENGR19TVVBQT1JUXzgwMl8xMUQKCi8qISBcYnJpZWYgVGhlIGVudW1lcmF0aW9uIGRlZmluaXRpb25zIGZvciBPSURfSVBOX01VTFRJX0RPTUFJTl9DQVBBQklMSVRZICovCnR5cGVkZWYgZW51bSBfUEFSQU1fTVVMVElfRE9NQUlOX0NBUEFCSUxJVFkgewoJUGFyYW1NdWx0aURvbWFpbkNhcERpc2FibGVkLAoJUGFyYW1NdWx0aURvbWFpbkNhcEVuYWJsZWQKfSBQQVJBTV9NVUxUSV9ET01BSU5fQ0FQQUJJTElUWSwgKlBfUEFSQU1fTVVMVElfRE9NQUlOX0NBUEFCSUxJVFk7CiNlbmRpZgoKdHlwZWRlZiBzdHJ1Y3QgX0NPVU5UUllfU1RSSU5HX0VOVFJZIHsKCVVJTlRfOCBhdWNDb3VudHJ5Q29kZVsyXTsKCVVJTlRfOCBhdWNFbnZpcm9ubWVudENvZGVbMl07Cn0gQ09VTlRSWV9TVFJJTkdfRU5UUlksICpQX0NPVU5UUllfU1RSSU5HX0VOVFJZOwoKLyogUG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGRlZmluaXRpb24gYW5kIGVudW1lcmF0aW9ucyAqLwojZGVmaW5lIFVBUFNEX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCiNkZWZpbmUgVUFQU0RfQUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMCkgfCBCSVQoNCkpCiNkZWZpbmUgVUFQU0RfQUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMSkgfCBCSVQoNSkpCiNkZWZpbmUgVUFQU0RfQUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMikgfCBCSVQoNikpCiNkZWZpbmUgVUFQU0RfQUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMykgfCBCSVQoNykpCiNkZWZpbmUgVUFQU0RfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVQVBTRF9BQzAgfCBVQVBTRF9BQzEgfCBVQVBTRF9BQzIgfCBVQVBTRF9BQzMpCgp0eXBlZGVmIGVudW0gX0VOVU1fUE9XRVJfU0FWRV9QUk9GSUxFX1QgewoJRU5VTV9QU1BfQ09OVElOVU9VU19BQ1RJVkUgPSAwLAoJRU5VTV9QU1BfQ09OVElOVU9VU19QT1dFUl9TQVZFLAoJRU5VTV9QU1BfRkFTVF9TV0lUQ0gsCglFTlVNX1BTUF9OVU0KfSBFTlVNX1BPV0VSX1NBVkVfUFJPRklMRV9ULCAqUEVOVU1fUE9XRVJfU0FWRV9QUk9GSUxFX1Q7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBTZXQvUXVlcnkgdGVzdGluZyB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX1RFU1RfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwoJVUlOVF8zMiB1NFR5cGU7Cgl1bmlvbiB7CgkJUEFSQU1fQVVUSF9FVkVOVF9UIEF1dGhlbnRpY2F0aW9uRXZlbnQ7CgkJUEFSQU1fUlNTSSBSc3NpVHJpZ2dlcjsKCX0gdTsKfSBQQVJBTV84MDJfMTFfVEVTVF9ULCAqUF9QQVJBTV84MDJfMTFfVEVTVF9UOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgU2V0L1F1ZXJ5IGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkuICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0FVVEhfRU5DUllQVElPTl9UIHsKCUVOVU1fUEFSQU1fQVVUSF9NT0RFX1QgZUF1dGhNb2RlU3VwcG9ydGVkOwoJRU5VTV9QQVJBTV9FTkNSWVBUSU9OX1NUQVRVU19UIGVFbmNyeXB0U3RhdHVzU3VwcG9ydGVkOwp9IFBBUkFNX0FVVEhfRU5DUllQVElPTl9ULCAqUF9QQVJBTV9BVVRIX0VOQ1JZUFRJT05fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DQVBBQklMSVRZX1QgewoJVUlOVF8zMiB1NExlbmd0aDsKCVVJTlRfMzIgdTRWZXJzaW9uOwoJVUlOVF8zMiB1NE5vT2ZQTUtJRHM7CglVSU5UXzMyIHU0Tm9PZkF1dGhFbmNyeXB0UGFpcnNTdXBwb3J0ZWQ7CglQQVJBTV9BVVRIX0VOQ1JZUFRJT05fVCBhckF1dGhlbnRpY2F0aW9uRW5jcnlwdGlvblN1cHBvcnRlZFsxXTsKfSBQQVJBTV9DQVBBQklMSVRZX1QsICpQX1BBUkFNX0NBUEFCSUxJVFlfVDsKCnR5cGVkZWYgVUlOVF84IFBBUkFNX1BNS0lEX1ZBTFVFWzE2XTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9CU1NJRF9JTkZPX1QgewoJUEFSQU1fTUFDX0FERFJFU1MgYXJCU1NJRDsKCVBBUkFNX1BNS0lEX1ZBTFVFIGFyUE1LSUQ7Cn0gUEFSQU1fQlNTSURfSU5GT19ULCAqUF9QQVJBTV9CU1NJRF9JTkZPX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUE1LSURfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwoJVUlOVF8zMiB1NEJTU0lESW5mb0NvdW50OwoJUEFSQU1fQlNTSURfSU5GT19UIGFyQlNTSURJbmZvWzFdOwp9IFBBUkFNX1BNS0lEX1QsICpQX1BBUkFNX1BNS0lEX1Q7CgovKiEgXGJyaWVmIFBNS0lEIGNhbmRpZGF0ZSBsaXN0cy4gKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BNS0lEX0NBTkRJREFURV9UIHsKCVBBUkFNX01BQ19BRERSRVNTIGFyQlNTSUQ7CglVSU5UXzMyIHU0RmxhZ3M7Cn0gUEFSQU1fUE1LSURfQ0FORElEQVRFX1QsICpQX1BBUkFNX1BNS0lEX0NBTkRJREFURV9UOwoKLyogI2lmZGVmIExJTlVYICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QTUtJRF9DQU5ESURBVEVfTElTVF9UIHsKCVVJTlRfMzIgdTRWZXJzaW9uOwkvKiE8IFZlcnNpb24gKi8KCVVJTlRfMzIgdTROdW1DYW5kaWRhdGVzOwkvKiE8IEhvdyBtYW55IGNhbmRpZGF0ZXMgZm9sbG93ICovCglQQVJBTV9QTUtJRF9DQU5ESURBVEVfVCBhckNhbmRpZGF0ZUxpc3RbMV07Cn0gUEFSQU1fUE1LSURfQ0FORElEQVRFX0xJU1RfVCwgKlBfUEFSQU1fUE1LSURfQ0FORElEQVRFX0xJU1RfVDsKLyogI2VuZGlmICovCgojZGVmaW5lIE5MODAyMTFfS0NLX0xFTiAgICAgICAgICAgICAgICAgMTYKI2RlZmluZSBOTDgwMjExX0tFS19MRU4gICAgICAgICAgICAgICAgIDE2CiNkZWZpbmUgTkw4MDIxMV9SRVBMQVlfQ1RSX0xFTiAgICAgICAgICA4Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fR1RLX1JFS0VZX0RBVEEgewoJVUlOVF84IGF1Y0tla1tOTDgwMjExX0tFS19MRU5dOwoJVUlOVF84IGF1Y0tja1tOTDgwMjExX0tDS19MRU5dOwoJVUlOVF84IGF1Y1JlcGxheUN0cltOTDgwMjExX1JFUExBWV9DVFJfTEVOXTsKCVVJTlRfOCB1Y0Jzc0luZGV4OwoJVUlOVF84IHVjUnN2WzNdOwoJVUlOVF8zMiB1NFByb3RvOwoJVUlOVF8zMiB1NFBhaXJ3aXNlQ2lwaGVyOwoJVUlOVF8zMiB1NEdyb3VwQ2lwaGVyOwoJVUlOVF8zMiB1NEtleU1nbXQ7CglVSU5UXzMyIHU0TWdtdEdyb3VwQ2lwaGVyOwp9IFBBUkFNX0dUS19SRUtFWV9EQVRBLCAqUF9QQVJBTV9HVEtfUkVLRVlfREFUQTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fTUNSX1JXX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRNY3JPZmZzZXQ7CglVSU5UXzMyIHU0TWNyRGF0YTsKfSBQQVJBTV9DVVNUT01fTUNSX1JXX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTUNSX1JXX1NUUlVDVF9UOwoKI2lmIENGR19TVVBQT1JUX0NBTF9SRVNVTFRfQkFDS1VQX1RPX0hPU1QKLyoKICogRGVzY3JpcHRpb24gb2YgRWFjaCBQYXJhbWV0ZXJzIDoKICogdWNSZWFzb24gOgogKiAwIDogUXVlcnkgSW5mb3JtYXRpb24gb2YgVGhlcm1hbCBvciBDYWwgRGF0YSBMZW5ndGgKICogMSA6IFRyaWdnZXIgRlcgZG8gb3IgZG9uJ3QgQWxsIENhbAogKiAyIDogRHVtcCBEYXRhIHRvIEhvc3QKICogMyA6IFNlbmQgQmFja3VwcGVkIENhbCBEYXRhIHRvIEZXCiAqIDQgOiBGb3IgRGVidWcgVXNlLCBUZWxsIEZXIFByaW50IENhbCBEYXRhIChSb20gb3IgUmFtKQogKiB1Y0FjdGlvbiA6CiAqIDAgOiBSZWFkIFRoZXJtYWwgVmFsdWUKICogMSA6IEFzayB0aGUgQ2FsIERhdGEgVG90YWwgTGVuZ3RoIChSb20gYW5kIFJhbSkKICogMiA6IFRlbGwgRlcgZG8gQWxsIENhbAogKiAzIDogVGVsbCBGVyBkb24ndCBkbyBDYWwKICogNCA6IER1bXAgRGF0YSB0byBIb3N0IChSb20gb3IgUmFtKQogKiA1IDogU2VuZCBCYWNrdXBwZWQgQ2FsIERhdGEgdG8gRlcgKFJvbSBvciBSYW0pCiAqIDYgOiBGb3IgRGVidWcgVXNlLCBUZWxsIEZXIFByaW50IENhbCBEYXRhIChSb20gb3IgUmFtKQogKiB1Y05lZWRSZXNwIDoKICogMCA6IEZXIE5vIE5lZWQgdG8gUmVzcG9uc2UgYW4gRVZFTlQKICogMSA6IEZXIE5lZWQgdG8gUmVzcG9uc2UgYW4gRVZFTlQKICogdWNGcmFnTnVtIDoKICogU2VxdWVuY2UgTnVtYmVyCiAqIHVjUm9tUmFtIDoKICogMCA6IE9wZXJhdGlvbiBmb3IgUm9tIENhbCBEYXRhCiAqIDEgOiBPcGVyYXRpb24gZm9yIFJhbSBDYWwgRGF0YQogKiB1NFRoZXJtYWxWYWx1ZSA6CiAqIEZpZWxkIGZvciBmaWxsaW5nIHRoZSBUaGVybWFsIFZhbHVlIGluIEZXCiAqIHU0QWRkcmVzcyA6CiAqIER1bXBwZWQgU3RhcnRpbmcgQWRkcmVzcwogKiBVc2VkIGZvciBEdW1wIGFuZCBTZW5kIENhbCBEYXRhIEJldHdlZW4gRHJpdmVyIGFuZCBGVwogKiB1NExlbmd0aCA6CiAqIE1lbW9yeSBTaXplIG5lZWQgdG8gYWxsb2NhdGVkIGluIERyaXZlciBvciBEYXRhIFNpemUgaW4gYW4gRVZFTlQKICogVXNlZCBmb3IgRHVtcCBhbmQgU2VuZCBDYWwgRGF0YSBCZXR3ZWVuIERyaXZlciBhbmQgRlcKICogdTRSZW1haW5MZW5ndGggOgogKiBSZW1haW4gTGVuZ3RoIG5lZWQgdG8gRHVtcAogKiBVc2VkIGZvciBEdW1wIGFuZCBTZW5kIENhbCBEYXRhIEJldHdlZW4gRHJpdmVyIGFuZCBGVwogKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NBTF9CQUNLVVBfU1RSVUNUX1YyX1QgewoJVUlOVF84CXVjUmVhc29uOwoJVUlOVF84CXVjQWN0aW9uOwoJVUlOVF84CXVjTmVlZFJlc3A7CglVSU5UXzgJdWNGcmFnTnVtOwoJVUlOVF84CXVjUm9tUmFtOwoJVUlOVF8zMgl1NFRoZXJtYWxWYWx1ZTsKCVVJTlRfMzIgdTRBZGRyZXNzOwoJVUlOVF8zMgl1NExlbmd0aDsKCVVJTlRfMzIJdTRSZW1haW5MZW5ndGg7Cn0gUEFSQU1fQ0FMX0JBQ0tVUF9TVFJVQ1RfVjJfVCwgKlBfUEFSQU1fQ0FMX0JBQ0tVUF9TVFJVQ1RfVjJfVDsKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfUUFfVE9PTAojaWYgQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUKdHlwZWRlZiBzdHJ1Y3QgX0JJTl9DT05URU5UX1QgewoJVUlOVF8xNiB1MkFkZHI7CglVSU5UXzggdWNWYWx1ZTsKCVVJTlRfOCB1Y1Jlc2VydmVkOwp9IEJJTl9DT05URU5UX1QsICpQX0JJTl9DT05URU5UX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0VGVVNFX0JVRkZFUl9NT0RFX1QgewoJVUlOVF84IHVjU291cmNlTW9kZTsKCVVJTlRfOCB1Y0NvdW50OwoJVUlOVF84IHVjQ21kVHlwZTsKCVVJTlRfOCB1Y1Jlc2VydmVkOwoJVUlOVF84IGFCaW5Db250ZW50W01BWF9FRVBST01fQlVGRkVSX1NJWkVdOwp9IFBBUkFNX0NVU1RPTV9FRlVTRV9CVUZGRVJfTU9ERV9ULCAqUF9QQVJBTV9DVVNUT01fRUZVU0VfQlVGRkVSX01PREVfVDsKCi8qI2lmIChDRkdfRUVQUk9NX1BBR0VfQUNDRVNTID09IDEpKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9BQ0NFU1NfRUZVU0VfVCB7CglVSU5UXzMyIHU0QWRkcmVzczsKCVVJTlRfMzIgdTRWYWxpZDsKCVVJTlRfOCBhdWNEYXRhWzE2XTsKfSBQQVJBTV9DVVNUT01fQUNDRVNTX0VGVVNFX1QsICpQX1BBUkFNX0NVU1RPTV9BQ0NFU1NfRUZVU0VfVDsKCgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0VGVVNFX0ZSRUVfQkxPQ0tfVCB7CglVSU5UXzggIHVjR2V0RnJlZUJsb2NrOwoJVUlOVF84ICBhdWNSZXNlcnZlZFszXTsKfSBQQVJBTV9DVVNUT01fRUZVU0VfRlJFRV9CTE9DS19ULCAqUF9QQVJBTV9DVVNUT01fRUZVU0VfRlJFRV9CTE9DS19UOwoKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fR0VUX1RYX1BPV0VSX1QgewoJVUlOVF84IHVjVHhQd3JUeXBlOwoJVUlOVF84IHVjQ2VudGVyQ2hhbm5lbDsKCVVJTlRfOCB1Y0RiZGNJZHg7IC8qIDA6QmFuZCAwLCAxOiBCYW5kMSAqLwoJVUlOVF84IHVjQmFuZDsgLyogMDpHLWJhbmQgMTogQS1iYW5kKi8KCVVJTlRfOCB1Y1Jlc2VydmVkWzRdOwp9IFBBUkFNX0NVU1RPTV9HRVRfVFhfUE9XRVJfVCwgKlBfUEFSQU1fQ1VTVE9NX0dFVF9UWF9QT1dFUl9UOwoKCi8qI2VuZGlmKi8KCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9CVUZGRVJfTU9ERSAqLwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9TRVRfVFhfVEFSR0VUX1BPV0VSX1QgewoJSU5UXzggY1R4UHdyMkc0Q2NrOyAgICAgICAvKiBzaWduZWQsIGluIHVuaXQgb2YgMC41ZEJtICovCglJTlRfOCBjVHhQd3IyRzREc3NzOyAgICAgIC8qIHNpZ25lZCwgaW4gdW5pdCBvZiAwLjVkQm0gKi8KCVVJTlRfOCB1Y1R4VGFyZ2V0UHdyOwkJLyogVHggdGFyZ2V0IHBvd2VyIGJhc2UgZm9yIGFsbCovCglVSU5UXzggdWNSZXNlcnZlZDsKCglJTlRfOCBjVHhQd3IyRzRPRkRNX0JQU0s7CglJTlRfOCBjVHhQd3IyRzRPRkRNX1FQU0s7CglJTlRfOCBjVHhQd3IyRzRPRkRNXzE2UUFNOwoJSU5UXzggY1R4UHdyMkc0T0ZETV9SZXNlcnZlZDsKCUlOVF84IGNUeFB3cjJHNE9GRE1fNDhNYnBzOwoJSU5UXzggY1R4UHdyMkc0T0ZETV81NE1icHM7CgoJSU5UXzggY1R4UHdyMkc0SFQyMF9CUFNLOwoJSU5UXzggY1R4UHdyMkc0SFQyMF9RUFNLOwoJSU5UXzggY1R4UHdyMkc0SFQyMF8xNlFBTTsKCUlOVF84IGNUeFB3cjJHNEhUMjBfTUNTNTsKCUlOVF84IGNUeFB3cjJHNEhUMjBfTUNTNjsKCUlOVF84IGNUeFB3cjJHNEhUMjBfTUNTNzsKCglJTlRfOCBjVHhQd3IyRzRIVDQwX0JQU0s7CglJTlRfOCBjVHhQd3IyRzRIVDQwX1FQU0s7CglJTlRfOCBjVHhQd3IyRzRIVDQwXzE2UUFNOwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9NQ1M1OwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9NQ1M2OwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9NQ1M3OwoKCUlOVF84IGNUeFB3cjVHT0ZETV9CUFNLOwoJSU5UXzggY1R4UHdyNUdPRkRNX1FQU0s7CglJTlRfOCBjVHhQd3I1R09GRE1fMTZRQU07CglJTlRfOCBjVHhQd3I1R09GRE1fUmVzZXJ2ZWQ7CglJTlRfOCBjVHhQd3I1R09GRE1fNDhNYnBzOwoJSU5UXzggY1R4UHdyNUdPRkRNXzU0TWJwczsKCglJTlRfOCBjVHhQd3I1R0hUMjBfQlBTSzsKCUlOVF84IGNUeFB3cjVHSFQyMF9RUFNLOwoJSU5UXzggY1R4UHdyNUdIVDIwXzE2UUFNOwoJSU5UXzggY1R4UHdyNUdIVDIwX01DUzU7CglJTlRfOCBjVHhQd3I1R0hUMjBfTUNTNjsKCUlOVF84IGNUeFB3cjVHSFQyMF9NQ1M3OwoKCUlOVF84IGNUeFB3cjVHSFQ0MF9CUFNLOwoJSU5UXzggY1R4UHdyNUdIVDQwX1FQU0s7CglJTlRfOCBjVHhQd3I1R0hUNDBfMTZRQU07CglJTlRfOCBjVHhQd3I1R0hUNDBfTUNTNTsKCUlOVF84IGNUeFB3cjVHSFQ0MF9NQ1M2OwoJSU5UXzggY1R4UHdyNUdIVDQwX01DUzc7Cn0gUEFSQU1fQ1VTVE9NX1NFVF9UWF9UQVJHRVRfUE9XRVJfVCwgKlBfUEFSQU1fQ1VTVE9NX1NFVF9UWF9UQVJHRVRfUE9XRVJfVDsKCiNpZiAoQ0ZHX1NVUFBPUlRfREZTX01BU1RFUiA9PSAxKQp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1NFVF9SRERfUkVQT1JUX1QgewoJVUlOVF84IHVjRGJkY0lkeDsgLyogMDpCYW5kIDAsIDE6IEJhbmQxICovCn0gUEFSQU1fQ1VTVE9NX1NFVF9SRERfUkVQT1JUX1QsICpQX1BBUkFNX0NVU1RPTV9TRVRfUkREX1JFUE9SVF9UOwoKc3RydWN0IFBBUkFNX0NVU1RPTV9TRVRfUkFEQVJfREVURUNUX01PREUgewoJVUlOVF84IHVjUmFkYXJEZXRlY3RNb2RlOyAvKiAwOlN3aXRjaCBjaGFubmVsLCAxOiBEb24ndCBzd2l0Y2ggY2hhbm5lbCAqLwp9OwojZW5kaWYKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fQUNDRVNTX1JYX1NUQVQgewoJVUlOVF8zMiB1NFNlcU51bTsKCVVJTlRfMzIgdTRUb3RhbE51bTsKfSBQQVJBTV9DVVNUT01fQUNDRVNTX1JYX1NUQVQsICpQX1BBUkFNX0NVU1RPTV9BQ0NFU1NfUlhfU1RBVDsKCi8qIEV4dCBEZXZJbmZvIFRhZyAqLwp0eXBlZGVmIGVudW0gX0VYVF9FTlVNX0RFVklORk9fVEFHX0hBTkRMRV9UIHsKCURFVl9JTkZPX0FDVElWRSA9IDAsCglERVZfSU5GT19CU1NJRCwKCURFVl9JTkZPX01BWF9OVU0KfSBFWFRfRU5VTV9UQUdfREVWSU5GT19IQU5ETEVfVDsKCi8qICBTVEEgcmVjb3JkIFRMViB0YWcgKi8KdHlwZWRlZiBlbnVtIF9FWFRfRU5VTV9TVEFSRUNfVEFHX0hBTkRMRV9UIHsKCVNUQV9SRUNfQkFTSUMgPSAwLAoJU1RBX1JFQ19SQSwKCVNUQV9SRUNfUkFfQ09NTU9OX0lORk8sCglTVEFfUkVDX1JBX1VQREFURSwKCVNUQV9SRUNfQkYsCglTVEFfUkVDX01BVU5BTF9BU1NPQywKCVNUQV9SRUNfQkEgPSA2LAoJU1RBX1JFQ19NQVhfTlVNCn0gRVhUX0VOVU1fVEFHX1NUQVJFQ19IQU5ETEVfVDsKCiNpZiBDRkdfU1VQUE9SVF9UWF9CRgp0eXBlZGVmIGVudW0gX0JGX0FDVElPTl9DQVRFR09SWSB7CglCRl9TT1VORElOR19PRkYgPSAwLAoJQkZfU09VTkRJTkdfT04sCglCRl9IV19DVFJMLAoJQkZfREFUQV9QQUNLRVRfQVBQTFksCglCRl9QRk1VX01FTV9BTExPQ0FURSwKCUJGX1BGTVVfTUVNX1JFTEVBU0UsCglCRl9QRk1VX1RBR19SRUFELAoJQkZfUEZNVV9UQUdfV1JJVEUsCglCRl9QUk9GSUxFX1JFQUQsCglCRl9QUk9GSUxFX1dSSVRFLAoJQkZfUE5fUkVBRCwKCUJGX1BOX1dSSVRFLAoJQkZfUEZNVV9NRU1fQUxMT0NfTUFQX1JFQUQKfSBCRl9BQ1RJT05fQ0FURUdPUlk7CgplbnVtIHsKCURFVklORk9fQUNUSVZFID0gMCwKCURFVklORk9fTUFYX05VTSA9IDEsCn07CgplbnVtIHsKCURFVklORk9fQUNUSVZFX0ZFQVRVUkUgPSAoMSA8PCBERVZJTkZPX0FDVElWRSksCglERVZJTkZPX01BWF9OVU1fRkVBVFVSRSA9ICgxIDw8IERFVklORk9fTUFYX05VTSkKfTsKCmVudW0gewoJQlNTX0lORk9fT1dOX01BQyA9IDAsCglCU1NfSU5GT19CQVNJQyA9IDEsCglCU1NfSU5GT19SRl9DSCA9IDIsCglCU1NfSU5GT19QTSA9IDMsCglCU1NfSU5GT19VQVBTRCA9IDQsCglCU1NfSU5GT19ST0FNX0RFVEVDVElPTiA9IDUsCglCU1NfSU5GT19MUV9STSA9IDYsCglCU1NfSU5GT19FWFRfQlNTID0gNywKCUJTU19JTkZPX0JST0FEQ0FTVF9JTkZPID0gOCwKCUJTU19JTkZPX1NZTkNfTU9ERSA9IDksCglCU1NfSU5GT19NQVhfTlVNCn07Cgp0eXBlZGVmIHVuaW9uIF9QRk1VX1BST0ZJTEVfVEFHMSB7CglzdHJ1Y3QgewoJCVVJTlRfMzIgdWNQcm9maWxlSUQ6NzsJLyogWzY6MF0gOiAwIH4gNjMgKi8KCQlVSU5UXzMyIHVjVHhCZjoxOwkvKiBbN10gOiAwOiBpQkYsIDE6IGVCRiAqLwoJCVVJTlRfMzIgdWNEQlc6MjsJLyogWzk6OF0gOiAwLzEvMi8zOiBEVzIwLzQwLzgwLzE2ME5DICovCgkJVUlOVF8zMiB1Y1NVX01VOjE7CS8qIFsxMF0gOiAwOlNVLCAxOiBNVSAqLwoJCVVJTlRfMzIgdWNJbnZhbGlkUHJvZjoxOwkvKiBbMTFdIDogMDpkZWZhdWx0LCAxOiBUaGlzIHByb2ZpbGUgbnVtYmVyIGlzIGludmFsaWQgYnkgU1cgKi8KCQlVSU5UXzMyIHVjUk1TRDozOwkvKiBbMTQ6MTJdIDogUk1TRCB2YWx1ZSBmcm9tIENFICovCgkJVUlOVF8zMiB1Y01lbUFkZHIxQ29sSWR4OjM7CS8qIFsxNyA6IDE1XSA6IGNvbHVtbiBpbmRleCA6IDAgfiA1ICovCgkJVUlOVF8zMiB1Y01lbUFkZHIxUm93SWR4OjY7CS8qIFsyMyA6IDE4XSA6IHJvdyBpbmRleCA6IDAgfiA2MyAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyMkNvbElkeDozOwkvKiBbMjYgOiAyNF0gOiBjb2x1bW4gaW5kZXggOiAwIH4gNSAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyMlJvd0lkeDo1OwkvKiBbMzEgOiAyN10gOiByb3cgaW5kZXggOiAwIH4gNjMgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjJSb3dJZHhNc2I6MTsJLyogWzMyXSA6IE1TQiBvZiByb3cgaW5kZXggKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjNDb2xJZHg6MzsJLyogWzM1IDogMzNdIDogY29sdW1uIGluZGV4IDogMCB+IDUgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjNSb3dJZHg6NjsJLyogWzQxIDogMzZdIDogcm93IGluZGV4IDogMCB+IDYzICovCgkJVUlOVF8zMiB1Y01lbUFkZHI0Q29sSWR4OjM7CS8qIFs0NCA6IDQyXSA6IGNvbHVtbiBpbmRleCA6IDAgfiA1ICovCgkJVUlOVF8zMiB1Y01lbUFkZHI0Um93SWR4OjY7CS8qIFs1MCA6IDQ1XSA6IHJvdyBpbmRleCA6IDAgfiA2MyAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDoxOwkvKiBbNTFdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjTnJvdzoyOwkvKiBbNTMgOiA1Ml0gOiBOcm93ICovCgkJVUlOVF8zMiB1Y05jb2w6MjsJLyogWzU1IDogNTRdIDogTmNvbCAqLwoJCVVJTlRfMzIgdWNOZ3JvdXA6MjsJLyogWzU3IDogNTZdIDogTmdyb3VwICovCgkJVUlOVF8zMiB1Y0xNOjI7CS8qIFs1OSA6IDU4XSA6IDAvMS8yICovCgkJVUlOVF8zMiB1Y0NvZGVCb29rOjI7CS8qIFs2MTo2MF0gOiBDb2RlIGJvb2sgKi8KCQlVSU5UXzMyIHVjSHRjRXhpc3Q6MTsJLyogWzYyXSA6IEh0Y0V4aXN0ICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkMToxOwkvKiBbNjNdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjU05SX1NUUzA6ODsJLyogWzcxOjY0XSA6IFNOUl9TVFMwICovCgkJVUlOVF8zMiB1Y1NOUl9TVFMxOjg7CS8qIFs3OTo3Ml0gOiBTTlJfU1RTMSAqLwoJCVVJTlRfMzIgdWNTTlJfU1RTMjo4OwkvKiBbODc6ODBdIDogU05SX1NUUzIgKi8KCQlVSU5UXzMyIHVjU05SX1NUUzM6ODsJLyogWzk1Ojg4XSA6IFNOUl9TVFMzICovCgkJVUlOVF8zMiB1Y0lCZkxuYUlkeDo4OwkvKiBbMTAzOjk2XSA6IGlCRiBMTkEgaW5kZXggKi8KCX0gckZpZWxkOwoJVUlOVF8zMiBhdTRSYXdEYXRhWzRdOwp9IFBGTVVfUFJPRklMRV9UQUcxLCAqUF9QRk1VX1BST0ZJTEVfVEFHMTsKCnR5cGVkZWYgdW5pb24gX1BGTVVfUFJPRklMRV9UQUcyIHsKCXN0cnVjdCB7CgkJVUlOVF8zMiB1MlNtYXJ0QW50OjEyOwkvKiBbMTE6MF0gOiBTbWFydCBBbnQgY29uZmlnICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkMDozOwkvKiBbMTQ6MTJdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjU0VJZHg6NTsJLyogWzE5OjE1XSA6IFNFIGluZGV4ICovCgkJVUlOVF8zMiB1Y1JNU0RUaGQ6MzsJLyogWzIyOjIwXSA6IFJNU0QgVGhyZXNob2xkICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkMToxOwkvKiBbMjNdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjTUNTVGhMMVNTOjQ7CS8qIFsyNzoyNF0gOiBNQ1MgVEggbG9uZyAxU1MgKi8KCQlVSU5UXzMyIHVjTUNTVGhTMVNTOjQ7CS8qIFszMToyOF0gOiBNQ1MgVEggc2hvcnQgMVNTICovCgkJVUlOVF8zMiB1Y01DU1RoTDJTUzo0OwkvKiBbMzU6MzJdIDogTUNTIFRIIGxvbmcgMlNTICovCgkJVUlOVF8zMiB1Y01DU1RoUzJTUzo0OwkvKiBbMzk6MzZdIDogTUNTIFRIIHNob3J0IDJTUyAqLwoJCVVJTlRfMzIgdWNNQ1NUaEwzU1M6NDsJLyogWzQzOjQwXSA6IE1DUyBUSCBsb25nIDNTUyAqLwoJCVVJTlRfMzIgdWNNQ1NUaFMzU1M6NDsJLyogWzQ3OjQ0XSA6IE1DUyBUSCBzaG9ydCAzU1MgKi8KCQlVSU5UXzMyIHVjaUJmVGltZU91dDo4OwkvKiBbNTU6NDhdIDogaUJGIHRpbWVvdXQgbGltaXQgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQyOjg7CS8qIFs2Mzo1Nl0gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDM6ODsJLyogWzcxOjY0XSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkNDo4OwkvKiBbNzk6NzJdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjaUJmREJXOjI7CS8qIFs4MTo4MF0gOiBpQkYgZGVzaXJlZCBEQlcgMC8xLzIvMyA6IEJXMjAvNDAvODAvMTYwTkMgKi8KCQlVSU5UXzMyIHVjaUJmTmNvbDoyOwkvKiBbODM6ODJdIDogaUJGIGRlc2lyZWQgTmNvbCA9IDEgfiAzICovCgkJVUlOVF8zMiB1Y2lCZk5yb3c6MjsJLyogWzg1Ojg0XSA6IGlCRiBkZXNpcmVkIE5yb3cgPSAxIH4gNCAqLwoJCVVJTlRfMzIgdTJSZXNlcnZlZDU6MTA7CS8qIFs5NTo4Nl0gOiBSZXNlcnZlZCAqLwoJfSByRmllbGQ7CglVSU5UXzMyIGF1NFJhd0RhdGFbM107Cn0gUEZNVV9QUk9GSUxFX1RBRzIsICpQX1BGTVVfUFJPRklMRV9UQUcyOwoKdHlwZWRlZiB1bmlvbiBfUEZNVV9EQVRBIHsKCXN0cnVjdCB7CgkJVUlOVF8zMiB1MlBoaTExOjk7CgkJVUlOVF8zMiB1Y1BzaTIxOjc7CgkJVUlOVF8zMiB1MlBoaTIxOjk7CgkJVUlOVF8zMiB1Y1BzaTMxOjc7CgkJVUlOVF8zMiB1MlBoaTMxOjk7CgkJVUlOVF8zMiB1Y1BzaTQxOjc7CgkJVUlOVF8zMiB1MlBoaTIyOjk7CgkJVUlOVF8zMiB1Y1BzaTMyOjc7CgkJVUlOVF8zMiB1MlBoaTMyOjk7CgkJVUlOVF8zMiB1Y1BzaTQyOjc7CgkJVUlOVF8zMiB1MlBoaTMzOjk7CgkJVUlOVF8zMiB1Y1BzaTQzOjc7CgkJVUlOVF8zMiB1MmRTTlIwMDo0OwoJCVVJTlRfMzIgdTJkU05SMDE6NDsKCQlVSU5UXzMyIHUyZFNOUjAyOjQ7CgkJVUlOVF8zMiB1MmRTTlIwMzo0OwoJCVVJTlRfMzIgdTJSZXNlcnZlZDoxNjsKCX0gckZpZWxkOwoJVUlOVF8zMiBhdTRSYXdEYXRhWzVdOwp9IFBGTVVfREFUQSwgKlBfUEZNVV9EQVRBOwoKdHlwZWRlZiBzdHJ1Y3QgX1BST0ZJTEVfVEFHX1JFQURfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNQcm9maWxlSWR4OwoJQk9PTEVBTiBmZ0JmZXI7CglVSU5UXzggdWNSc3Y7Cn0gUFJPRklMRV9UQUdfUkVBRF9ULCAqUF9QUk9GSUxFX1RBR19SRUFEX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFJPRklMRV9UQUdfV1JJVEVfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNQZm11SWQ7CglVSU5UXzggdWNCdWZmZXJbMjhdOwp9IFBST0ZJTEVfVEFHX1dSSVRFX1QsICpQX1BST0ZJTEVfVEFHX1dSSVRFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFJPRklMRV9EQVRBX1JFQURfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNQZm11SWR4OwoJQk9PTEVBTiBmZ0JGZXI7CglVSU5UXzggdWNSZXNlcnZlZFszXTsKCVVJTlRfOCB1Y1N1YkNhcnJJZHhMc2I7CglVSU5UXzggdWNTdWJDYXJySWR4TXNiOwp9IFBST0ZJTEVfREFUQV9SRUFEX1QsICpQX1BST0ZJTEVfREFUQV9SRUFEX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFJPRklMRV9EQVRBX1dSSVRFX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjUGZtdUlkeDsKCVVJTlRfOCB1MlN1YkNhcnJJZHhMc2I7CglVSU5UXzggdTJTdWJDYXJySWR4TXNiOwoJUEZNVV9EQVRBIHJUeEJmUGZtdURhdGE7Cn0gUFJPRklMRV9EQVRBX1dSSVRFX1QsICpQX1BST0ZJTEVfREFUQV9XUklURV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BST0ZJTEVfUE5fUkVBRF9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1BmbXVJZHg7CglVSU5UXzggdWNSZXNlcnZlZFsyXTsKfSBQUk9GSUxFX1BOX1JFQURfVCwgKlBfUFJPRklMRV9QTl9SRUFEX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFJPRklMRV9QTl9XUklURV9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1BmbXVJZHg7CglVSU5UXzE2IHUyYnc7CglVSU5UXzggdWNCdWZbMzJdOwp9IFBST0ZJTEVfUE5fV1JJVEVfVCwgKlBfUFJPRklMRV9QTl9XUklURV9UOwoKdHlwZWRlZiBlbnVtIF9CRl9TT1VORElOR19NT0RFIHsKCVNVX1NPVU5ESU5HID0gMCwKCU1VX1NPVU5ESU5HLAoJU1VfUEVSSU9ESUNfU09VTkRJTkcsCglNVV9QRVJJT0RJQ19TT1VORElORwp9IEJGX1NPVU5ESU5HX01PREU7Cgp0eXBlZGVmIHN0cnVjdCBfRVhUX0NNRF9FVFhCZl9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1QgewoJVUlOVF84IHVjQ21kQ2F0ZWdvcnlJRDsKCVVJTlRfOCB1Y1N1TXVTbmRNb2RlOwoJVUlOVF84IHVjV2xhbklkeDsKCVVJTlRfMzIgdTRTb3VuZGluZ0ludGVydmFsOwkvKiBCeSBtcyAqLwp9IEVYVF9DTURfRVRYQmZfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9ULCAqUF9FWFRfQ01EX0VUWEJmX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVDsKCnR5cGVkZWYgc3RydWN0IF9FWFRfQ01EX0VUWEJmX01VX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVCB7CglVSU5UXzggdWNDbWRDYXRlZ29yeUlEOwoJVUlOVF84IHVjU3VNdVNuZE1vZGU7CglVSU5UXzggdWNXbGFuSWRbNF07CglVSU5UXzggdWNTdGFOdW07CglVSU5UXzMyIHU0U291bmRpbmdJbnRlcnZhbDsJLyogQnkgbXMgKi8KfSBFWFRfQ01EX0VUWEJmX01VX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVCwgKlBfRVhUX0NNRF9FVFhCZl9NVV9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1Q7CgovKiBEZXZpY2UgaW5mb3JtYXRpb24gKFRhZzApICovCnR5cGVkZWYgc3RydWN0IF9DTURfREVWSU5GT19BQ1RJVkVfVCB7CglVSU5UXzE2IHUyVGFnOwkJLyogVGFnID0gMHgwMCAqLwoJVUlOVF8xNiB1Mkxlbmd0aDsKCVVJTlRfOCB1Y0FjdGl2ZTsKCVVJTlRfOCB1Y0JhbmROdW07CglVSU5UXzggYXVjT3duTWFjQWRkcls2XTsKCVVJTlRfOCBhdWNSZXNlcnZlWzRdOwp9IENNRF9ERVZJTkZPX0FDVElWRV9ULCAqUF9DTURfREVWSU5GT19BQ1RJVkVfVDsKCnR5cGVkZWYgc3RydWN0IF9CU1NJTkZPX0JBU0lDX1QgewoJLyogQmFzaWMgQlNTIGluZm9ybWF0aW9uIChUYWcxKSAqLwoJVUlOVF8xNiB1MlRhZzsJCS8qIFRhZyA9IDB4MDEgKi8KCVVJTlRfMTYgdTJMZW5ndGg7CglVSU5UXzMyIHU0TmV0d29ya1R5cGU7CglVSU5UXzggdWNBY3RpdmU7CglVSU5UXzggdWNSZXNlcnZlMDsKCVVJTlRfMTYgdTJCY25JbnRlcnZhbDsKCVVJTlRfOCBhdWNCU1NJRFs2XTsKCVVJTlRfOCB1Y1dtbUlkeDsKCVVJTlRfOCB1Y0R0aW1QZXJpb2Q7CglVSU5UXzggdWNCY01jV2xhbmlkeDsJLyogaW5kaWNhdGUgd2hpY2ggd2xhbi1pZHggdXNlZCBmb3IgTUMvQkMgdHJhbnNtaXNzaW9uLiAqLwoJVUlOVF84IHVjQ2lwaGVyU3VpdDsKCVVJTlRfOCBhY3VSZXNlcnZlWzZdOwp9IENNRF9CU1NJTkZPX0JBU0lDX1QsICpQX0NNRF9CU1NJTkZPX0JBU0lDX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfVFhCRl9QRk1VX1NUQV9JTkZPIHsKCVVJTlRfMTYgdTJQZm11SWQ7CS8qIDB4RkZGRiBtZWFucyBubyBhY2Nlc3MgcmlnaHQgZm9yIFBGTVUgKi8KCVVJTlRfOCBmZ1NVX01VOwkJLyogMCA6IFNVLCAxIDogTVUgKi8KCVVJTlRfOCBmZ0VUeEJmQ2FwOwkvKiAwIDogSVR4QmYsIDEgOiBFVHhCZiAqLwoJVUlOVF84IHVjU291bmRpbmdQaHk7CS8qIDA6IGxlZ2FjeSwgMTogT0ZETSwgMjogSFQsIDQ6IFZIVCAqLwoJVUlOVF84IHVjTmRwYVJhdGU7CglVSU5UXzggdWNOZHBSYXRlOwoJVUlOVF84IHVjUmVwdFBvbGxSYXRlOwoJVUlOVF84IHVjVHhNb2RlOwkvKiAwOiBsZWdhY3ksIDE6IE9GRE0sIDI6IEhULCA0OiBWSFQgKi8KCVVJTlRfOCB1Y05jOwoJVUlOVF84IHVjTnI7CglVSU5UXzggdWNDQlc7CQkvKiAwIDogMjBNLCAxIDogNDBNLCAyIDogODBNLCAzIDogODAgKyA4ME0gKi8KCVVJTlRfOCB1Y1RvdE1lbVJlcXVpcmU7CglVSU5UXzggdWNNZW1SZXF1aXJlMjBNOwoJVUlOVF84IHVjTWVtUm93MDsKCVVJTlRfOCB1Y01lbUNvbDA7CglVSU5UXzggdWNNZW1Sb3cxOwoJVUlOVF84IHVjTWVtQ29sMTsKCVVJTlRfOCB1Y01lbVJvdzI7CglVSU5UXzggdWNNZW1Db2wyOwoJVUlOVF84IHVjTWVtUm93MzsKCVVJTlRfOCB1Y01lbUNvbDM7CglVSU5UXzE2IHUyU21hcnRBbnQ7CglVSU5UXzggdWNTRUlkeDsKCVVJTlRfOCB1Y2lCZlRpbWVPdXQ7CglVSU5UXzggdWNpQmZEQlc7CglVSU5UXzggdWNpQmZOY29sOwoJVUlOVF84IHVjaUJmTnJvdzsKCVVJTlRfOCBhdWNSZXNlcnZlZFszXTsKfSBUWEJGX1BGTVVfU1RBX0lORk8sICpQX1RYQkZfUEZNVV9TVEFfSU5GTzsKCnR5cGVkZWYgc3RydWN0IF9TVEFfUkVDX1VQRF9FTlRSWV9UIHsKCVRYQkZfUEZNVV9TVEFfSU5GTyByVHhCZlBmbXVTdGFJbmZvOwoJVUlOVF84IGF1Y0FkZHJbUEFSQU1fTUFDX0FERFJfTEVOXTsKCVVJTlRfOCB1Y0FpZDsKCVVJTlRfOCB1Y1JzdjsKfSBTVEFfUkVDX1VQRF9FTlRSWV9ULCAqUF9TVEFfUkVDX1VQRF9FTlRSWV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1NUQVJFQ19DT01NT05fVCB7CgkvKiBCYXNpYyBTVEEgcmVjb3JkIChHcm91cDApICovCglVSU5UXzE2IHUyVGFnOwkJLyogVGFnID0gMHgwMCAqLwoJVUlOVF8xNiB1Mkxlbmd0aDsKCVVJTlRfMzIgdTRDb25uZWN0aW9uVHlwZTsKCVVJTlRfOCB1Y0Nvbm5lY3Rpb25TdGF0ZTsKCVVJTlRfOCB1Y0lzUUJTUzsKCVVJTlRfMTYgdTJBSUQ7CglVSU5UXzggYXVjUGVlck1hY0FkZHJbNl07CglVSU5UXzE2IHUyUmVzZXJ2ZTE7Cn0gQ01EX1NUQVJFQ19DT01NT05fVCwgKlBfQ01EX1NUQVJFQ19DT01NT05fVDsKCnR5cGVkZWYgc3RydWN0IF9DTURfU1RBUkVDX0JGIHsKCVVJTlRfMTYgdTJUYWc7CQkvKiBUYWcgPSAweDAyICovCglVSU5UXzE2IHUyTGVuZ3RoOwoJVFhCRl9QRk1VX1NUQV9JTkZPIHJUeEJmUGZtdUluZm87CglVSU5UXzggdWNSZXNlcnZlZFszXTsKfSBDTURfU1RBUkVDX0JGLCAqUF9DTURfU1RBUkVDX0JGOwoKLyogUUEgdG9vbDogbWF1bmFsIGFzc29jICovCnR5cGVkZWYgc3RydWN0IF9DTURfTUFOVUFMX0FTU09DX1NUUlVDVF9UIHsKLyoKKglVSU5UXzggICAgICAgICAgICAgIHVjQnNzSW5kZXg7CioJVUlOVF84ICAgICAgICAgICAgICB1Y1dsYW5JZHg7CioJVUlOVF8xNiAgICAgICAgICAgICB1MlRvdGFsRWxlbWVudE51bTsKKglVSU5UXzMyICAgICAgICAgICAgIHU0UmVzZXJ2ZTsKKi8KCS8qIGV4dGVuc2lvbiAqLwoJVUlOVF8xNiB1MlRhZzsJCS8qIFRhZyA9IDB4MDUgKi8KCVVJTlRfMTYgdTJMZW5ndGg7CglVSU5UXzggYXVjTWFjW01BQ19BRERSX0xFTl07CglVSU5UXzggdWNUeXBlOwoJVUlOVF84IHVjV3RibDsKCVVJTlRfOCB1Y093bm1hYzsKCVVJTlRfOCB1Y01vZGU7CglVSU5UXzggdWNCdzsKCVVJTlRfOCB1Y05zczsKCVVJTlRfOCB1Y1BmbXVJZDsKCVVJTlRfOCB1Y01hcmF0ZTsKCVVJTlRfOCB1Y1NwZUlkeDsKCVVJTlRfOCB1Y2FpZDsKfSBDTURfTUFOVUFMX0FTU09DX1NUUlVDVF9ULCAqUF9DTURfTUFOVUFMX0FTU09DX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1RYX0JGX1NPVU5ESU5HX1NUQVJUX1QgewoJdW5pb24gewoJCUVYVF9DTURfRVRYQmZfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9UIHJFeHRDbWRFeHRCZlNuZFBlcmlvZGljVHJpZ2dlckN0cmw7CgkJRVhUX0NNRF9FVFhCZl9NVV9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1QgckV4dENtZEV4dEJmTXVTbmRQZXJpb2RpY1RyaWdnZXJDdHJsOwoJfSByVHhCZlNvdW5kaW5nOwp9IFRYX0JGX1NPVU5ESU5HX1NUQVJUX1QsICpQX1RYX0JGX1NPVU5ESU5HX1NUQVJUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfVFhfQkZfU09VTkRJTkdfU1RPUF9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1NuZGdTdG9wOwoJVUlOVF84IHVjUmVzZXJ2ZWRbMl07Cn0gVFhfQkZfU09VTkRJTkdfU1RPUF9ULCAqUF9UWF9CRl9TT1VORElOR19TVE9QX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfVFhfQkZfVFhfQVBQTFlfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNXbGFuSWQ7CglVSU5UXzggZmdFVHhCZjsKCVVJTlRfOCBmZ0lUeEJmOwoJVUlOVF84IGZnTXVUeEJmOwoJVUlOVF84IHVjUmVzZXJ2ZWRbM107Cn0gVFhfQkZfVFhfQVBQTFlfVCwgKlBfVFhfQkZfVFhfQVBQTFlfVDsKCnR5cGVkZWYgc3RydWN0IF9UWF9CRl9QRk1VX01FTV9BTExPQ19UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1N1TXVNb2RlOwoJVUlOVF84IHVjV2xhbklkeDsKCVVJTlRfOCB1Y1Jlc2VydmVkOwp9IFRYX0JGX1BGTVVfTUVNX0FMTE9DX1QsICpQX1RYX0JGX1BGTVVfTUVNX0FMTE9DX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfVFhfQkZfUEZNVV9NRU1fUkxTX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjV2xhbklkOwoJVUlOVF84IHVjUmVzZXJ2ZWRbMl07Cn0gVFhfQkZfUEZNVV9NRU1fUkxTX1QsICpQX1RYX0JGX1BGTVVfTUVNX1JMU19UOwoKdHlwZWRlZiB1bmlvbiBfUEFSQU1fQ1VTVE9NX1RYQkZfQUNUSU9OX1NUUlVDVF9UIHsKCVBST0ZJTEVfVEFHX1JFQURfVCByUHJvZmlsZVRhZ1JlYWQ7CglQUk9GSUxFX1RBR19XUklURV9UIHJQcm9maWxlVGFnV3JpdGU7CglQUk9GSUxFX0RBVEFfUkVBRF9UIHJQcm9maWxlRGF0YVJlYWQ7CglQUk9GSUxFX0RBVEFfV1JJVEVfVCByUHJvZmlsZURhdGFXcml0ZTsKCVBST0ZJTEVfUE5fUkVBRF9UIHJQcm9maWxlUG5SZWFkOwoJUFJPRklMRV9QTl9XUklURV9UIHJQcm9maWxlUG5Xcml0ZTsKCVRYX0JGX1NPVU5ESU5HX1NUQVJUX1QgclR4QmZTb3VuZGluZ1N0YXJ0OwoJVFhfQkZfU09VTkRJTkdfU1RPUF9UIHJUeEJmU291bmRpbmdTdG9wOwoJVFhfQkZfVFhfQVBQTFlfVCByVHhCZlR4QXBwbHk7CglUWF9CRl9QRk1VX01FTV9BTExPQ19UIHJUeEJmUGZtdU1lbUFsbG9jOwoJVFhfQkZfUEZNVV9NRU1fUkxTX1QgclR4QmZQZm11TWVtUmxzOwp9IFBBUkFNX0NVU1RPTV9UWEJGX0FDVElPTl9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1RYQkZfQUNUSU9OX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9TVEFfUkVDX1VQRF9TVFJVQ1RfVCB7CglVSU5UXzggdWNCc3NJbmRleDsKCVVJTlRfOCB1Y1dsYW5JZHg7CglVSU5UXzE2IHUyVG90YWxFbGVtZW50TnVtOwoJVUlOVF84IHVjQXBwZW5kQ21kVExWOwoJVUlOVF84IHVjTXVhcklkeDsKCVVJTlRfOCBhdWNSZXNlcnZlWzJdOwoJVUlOVF8zMiAqcHJTdGFSZWM7CglDTURfU1RBUkVDX0JGIHJDbWRTdGFSZWNCZjsKfSBQQVJBTV9DVVNUT01fU1RBX1JFQ19VUERfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9TVEFfUkVDX1VQRF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9CU1NJTkZPX0FSR1VNRU5UX1QgewoJVUNIQVIgT3duTWFjSWR4OwoJVUlOVF84IHVjQnNzSW5kZXg7CglVSU5UXzggQnNzaWRbUEFSQU1fTUFDX0FERFJfTEVOXTsKCVVJTlRfOCB1Y0JjTWNXbGFuSWR4OwoJVUlOVF84IHVjUGVlcldsYW5JZHg7CglVSU5UXzMyIE5ldHdvcmtUeXBlOwoJVUlOVF8zMiB1NENvbm5lY3Rpb25UeXBlOwoJVUlOVF84IENpcGhlclN1aXQ7CglVSU5UXzggQWN0aXZlOwoJVUlOVF84IFdtbUlkeDsKCVVJTlRfMzIgdTRCc3NJbmZvRmVhdHVyZTsKCVVJTlRfOCBhdWNCdWZmZXJbMF07Cn0gQlNTSU5GT19BUkdVTUVOVF9ULCAqUF9CU1NJTkZPX0FSR1VNRU5UX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1BGTVVfVEFHX1JFQURfU1RSVUNUX1QgewoJUEZNVV9QUk9GSUxFX1RBRzEgcnU0VHhCZlBGTVVUYWcxOwoJUEZNVV9QUk9GSUxFX1RBRzIgcnU0VHhCZlBGTVVUYWcyOwp9IFBBUkFNX0NVU1RPTV9QRk1VX1RBR19SRUFEX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fUEZNVV9UQUdfUkVBRF9TVFJVQ1RfVDsKCiNpZiBDRkdfU1VQUE9SVF9NVV9NSU1PCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fU0hPV19HUk9VUF9UQkxfRU5UUllfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEV2ZW50SWQ7CglVSU5UXzggaW5kZXg7CglVSU5UXzggbnVtVXNlcjoyOwoJVUlOVF84IEJXOjI7CglVSU5UXzggTlMwOjI7CglVSU5UXzggTlMxOjI7CgkvKiBVSU5UXzggICAgICAgTlMyOjE7ICovCgkvKiBVSU5UXzggICAgICAgTlMzOjE7ICovCglVSU5UXzggUEZJRFVzZXIwOwoJVUlOVF84IFBGSURVc2VyMTsKCS8qIFVJTlRfOCAgICAgICBQRklEVXNlcjI7ICovCgkvKiBVSU5UXzggICAgICAgUEZJRFVzZXIzOyAqLwoJQk9PTEVBTiBmZ0lzU2hvcnRHSTsKCUJPT0xFQU4gZmdJc1VzZWQ7CglCT09MRUFOIGZnSXNEaXNhYmxlOwoJVUlOVF84IGluaXRNY3NVc2VyMDo0OwoJVUlOVF84IGluaXRNY3NVc2VyMTo0OwoJLyogVUlOVF84ICAgICAgIGluaXRNY3NVc2VyMjo0OyAqLwoJLyogVUlOVF84ICAgICAgIGluaXRNY3NVc2VyMzo0OyAqLwoJVUlOVF84IGRNY3NVc2VyMDo0OwoJVUlOVF84IGRNY3NVc2VyMTo0OwoJLyogVUlOVF84ICAgICAgIGRNY3NVc2VyMjo0OyAqLwoJLyogVUlOVF84ICAgICAgIGRNY3NVc2VyMzo0OyAqLwp9IFBBUkFNX0NVU1RPTV9TSE9XX0dST1VQX1RCTF9FTlRSWV9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1NIT1dfR1JPVVBfVEJMX0VOVFJZX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9HRVRfUURfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEV2ZW50SWQ7CglVSU5UXzMyIGF1NFJhd0RhdGFbMTRdOwp9IFBBUkFNX0NVU1RPTV9HRVRfUURfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9HRVRfUURfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU1RSVUNUX0xRX1JFUE9SVCB7CglpbnQgbHFfcmVwb3J0W05VTV9PRl9VU0VSXVtOVU1fT0ZfTU9EVUxdOwp9IE1VX1NUUlVDVF9MUV9SRVBPUlQsICpQX01VX1NUUlVDVF9MUV9SRVBPUlQ7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0dFVF9NVV9DQUxDX0xRX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRFdmVudElkOwoJTVVfU1RSVUNUX0xRX1JFUE9SVCByRW50cnk7Cn0gUEFSQU1fQ1VTVE9NX0dFVF9NVV9DQUxDX0xRX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fR0VUX01VX0NBTENfTFFfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfR0VUX0NBTENfSU5JVF9NQ1NfVCB7CglVSU5UXzggdWNncm91cElkeDsKCVVJTlRfOCB1Y1JzdlszXTsKfSBNVV9HRVRfQ0FMQ19JTklUX01DU19ULCAqUF9NVV9HRVRfQ0FMQ19JTklUX01DU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9JTklUX01DU19UIHsKCVVJTlRfOCB1Y051bU9mVXNlcjsJLyogemVyby1iYXNlIDogMH4zOiBtZWFucyAxfjIgdXNlcnMgKi8KCVVJTlRfOCB1Y0JhbmR3aWR0aDsJLyogemVyby1iYXNlIDogMDoyMCBoeiAxOjQwIGh6IDI6IDgwIGh6IDM6IDE2MCAqLwoJVUlOVF84IHVjTnNzT2ZVc2VyMDsJLyogemVyby1iYXNlIDogMH4xIG1lYW5zIHVlc3IwIHVzZSAxfjIgc3MgLCBpZiBubyB1c2Uga2VlcCAwICovCglVSU5UXzggdWNOc3NPZlVzZXIxOwkvKiB6ZXJvLWJhc2UgOiAwfjEgbWVhbnMgdWVzcjAgdXNlIDF+MiBzcyAsIGlmIG5vIHVzZSBrZWVwIDAgKi8KCVVJTlRfOCB1Y1BmTXVJZE9mVXNlcjA7CS8qIHplcm8tYmFzZSA6IGZvciBub3csIHVlc3IwIHVzZSBwZiBtdSBpZCAwICovCglVSU5UXzggdWNQZk11SWRPZlVzZXIxOwkvKiB6ZXJvLWJhc2UgOiBmb3Igbm93LCB1ZXNyMSB1c2UgcGYgbXUgaWQgMSAqLwoJVUlOVF84IHVjTnVtT2ZUeGVyOwkvKiAwfjM6IG1lYW4gdXNlIDF+NCBhbm50YWluLCBmb3Igbm93LCBzaG91bGQgZml4IDMgKi8KCVVJTlRfOCB1Y1NwZUluZGV4OwkvKmFkZCBuZXcgZmllbGQgdG8gZmlsbKGnc3BlY2lhbCBleHRlbnNpb24gaW5kZXihqHdoaWNoIHJlcGxhY2UgcmVzZXJ2ZSAqLwoJVUlOVF8zMiB1NEdyb3VwSW5kZXg7CS8qIDB+IDp0aGUgaW5kZXggb2YgZ3JvdXAgdGFibGUgZW50cnkgZm9yIGNhbGN1bGF0aW9uICovCn0gTVVfU0VUX0lOSVRfTUNTX1QsICpQX01VX1NFVF9JTklUX01DU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9DQUxDX0xRX1QgewoJVUlOVF84IHVjTnVtT2ZVc2VyOwkvKiB6ZXJvLWJhc2UgOiAwfjM6IG1lYW5zIDF+MiB1c2VycyAqLwoJVUlOVF84IHVjQmFuZHdpZHRoOwkvKiB6ZXJvLWJhc2UgOiAwOjIwIGh6IDE6NDAgaHogMjogODAgaHogMzogMTYwICovCglVSU5UXzggdWNOc3NPZlVzZXIwOwkvKiB6ZXJvLWJhc2UgOiAwfjEgbWVhbnMgdWVzcjAgdXNlIDF+MiBzcyAsIGlmIG5vIHVzZSBrZWVwIDAgKi8KCVVJTlRfOCB1Y05zc09mVXNlcjE7CS8qIHplcm8tYmFzZSA6IDB+MSBtZWFucyB1ZXNyMCB1c2UgMX4yIHNzICwgaWYgbm8gdXNlIGtlZXAgMCAqLwoJVUlOVF84IHVjUGZNdUlkT2ZVc2VyMDsJLyogemVyby1iYXNlIDogZm9yIG5vdywgdWVzcjAgdXNlIHBmIG11IGlkIDAgKi8KCVVJTlRfOCB1Y1BmTXVJZE9mVXNlcjE7CS8qIHplcm8tYmFzZSA6IGZvciBub3csIHVlc3IxIHVzZSBwZiBtdSBpZCAxICovCglVSU5UXzggdWNOdW1PZlR4ZXI7CS8qIDB+MzogbWVhbiB1c2UgMX40IGFubnRhaW4sIGZvciBub3csIHNob3VsZCBmaXggMyAqLwoJVUlOVF84IHVjU3BlSW5kZXg7CS8qYWRkIG5ldyBmaWVsZCB0byBmaWxsoadzcGVjaWFsIGV4dGVuc2lvbiBpbmRleKGod2hpY2ggcmVwbGFjZSByZXNlcnZlICovCglVSU5UXzMyIHU0R3JvdXBJbmRleDsJLyogMH4gOnRoZSBpbmRleCBvZiBncm91cCB0YWJsZSBlbnRyeSBmb3IgY2FsY3VsYXRpb24gKi8KfSBNVV9TRVRfQ0FMQ19MUV9ULCAqUF9NVV9TRVRfQ0FMQ19MUV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX0dFVF9MUV9UIHsKCVVJTlRfOCB1Y1R5cGU7CglVSU5UXzggdWNSc3ZbM107Cn0gTVVfR0VUX0xRX1QsICpQX01VX0dFVF9MUV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9TTlJfT0ZGU0VUX1QgewoJVUlOVF84IHVjVmFsOwoJVUlOVF84IHVjUnN2WzNdOwp9IE1VX1NFVF9TTlJfT0ZGU0VUX1QsICpQX01VX1NFVF9TTlJfT0ZGU0VUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX1pFUk9fTlNTX1QgewoJVUlOVF84IHVjVmFsOwoJVUlOVF84IHVjUnN2WzNdOwp9IE1VX1NFVF9aRVJPX05TU19ULCAqUF9NVV9TRVRfWkVST19OU1NfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TUEVFRF9VUF9MUV9UIHsKCVVJTlRfMzIgdTRWYWw7Cn0gTVVfU1BFRURfVVBfTFFfVCwgKlBfTVVfU1BFRURfVVBfTFFfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfTVVfVEFCTEVfVCB7CgkvKiBVSU5UXzE2ICB1MlR5cGU7ICovCgkvKiBVSU5UXzMyICB1NExlbmd0aDsgKi8KCVVJTlRfOCBhdWNNZXRyaWNUYWJsZVtOVU1fTVVUX05SX05VTSAqIE5VTV9NVVRfRkVDICogTlVNX01VVF9NQ1MgKiBOVU1fTVVUX0lOREVYXTsKfSBNVV9TRVRfTVVfVEFCTEVfVCwgKlBfTVVfU0VUX01VX1RBQkxFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX0dST1VQX1QgewoJVUlOVF8zMiB1NEdyb3VwSW5kZXg7CS8qIEdyb3VwIFRhYmxlIElkeCAqLwoJVUlOVF8zMiB1NE51bU9mVXNlcjsKCVVJTlRfMzIgdTRVc2VyMExkcGM7CglVSU5UXzMyIHU0VXNlcjFMZHBjOwoJVUlOVF8zMiB1NFNob3J0R0k7CglVSU5UXzMyIHU0Qnc7CglVSU5UXzMyIHU0VXNlcjBOc3M7CglVSU5UXzMyIHU0VXNlcjFOc3M7CglVSU5UXzMyIHU0R3JvdXBJZDsKCVVJTlRfMzIgdTRVc2VyMFVQOwoJVUlOVF8zMiB1NFVzZXIxVVA7CglVSU5UXzMyIHU0VXNlcjBNdVBmSWQ7CglVSU5UXzMyIHU0VXNlcjFNdVBmSWQ7CglVSU5UXzMyIHU0VXNlcjBJbml0TUNTOwoJVUlOVF8zMiB1NFVzZXIxSW5pdE1DUzsKCVVJTlRfOCBhdWNVc2VyME1hY0FkZHJbUEFSQU1fTUFDX0FERFJfTEVOXTsKCVVJTlRfOCBhdWNVc2VyMU1hY0FkZHJbUEFSQU1fTUFDX0FERFJfTEVOXTsKfSBNVV9TRVRfR1JPVVBfVCwgKlBfTVVfU0VUX0dST1VQX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfR0VUX1FEX1QgewoJVUlOVF84IHVjU3ViY2FycmllckluZGV4OwoJLyogVUlOVF8zMiB1NExlbmd0aDsgKi8KCS8qIFVJTlRfOCAqcHJRZDsgKi8KfSBNVV9HRVRfUURfVCwgKlBfTVVfR0VUX1FEX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX0VOQUJMRV9UIHsKCVVJTlRfOCB1Y1ZhbDsKCVVJTlRfOCB1Y1JzdlszXTsKfSBNVV9TRVRfRU5BQkxFX1QsICpQX01VX1NFVF9FTkFCTEVfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfR0lEX1VQX1QgewoJVUlOVF8zMiBhdTRHaWRbMl07CglVSU5UXzMyIGF1NFVwWzRdOwp9IE1VX1NFVF9HSURfVVBfVCwgKlBfTVVfU0VUX0dJRF9VUF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1RSSUdHRVJfTVVfVFhfVCB7CglVSU5UXzggIGZnSXNSYW5kb21QYXR0ZXJuOyAvKiBpcyByYW5kb20gcGF0dGVybiBvciBub3QgKi8KCVVJTlRfMzIgdTRNc2R1UGF5bG9hZExlbmd0aDA7IC8qIHBheWxvYWQgbGVuZ3RoIG9mIHRoZSBNU0RVIGZvciB1c2VyIDAgKi8KCVVJTlRfMzIgdTRNc2R1UGF5bG9hZExlbmd0aDE7IC8qIHBheWxvYWQgbGVuZ3RoIG9mIHRoZSBNU0RVIGZvciB1c2VyIDEgKi8KCVVJTlRfMzIgdTRNdVBhY2tldENvdW50OyAvKiBNVSBUWCBjb3VudCAqLwoJVUlOVF8zMiB1NE51bU9mU1RBczsgLyogbnVtYmVyIG9mIHVzZXIgaW4gdGhlIE1VIFRYICovCglVSU5UXzggICBhdWNNYWNBZGRyc1syXVs2XTsgLyogTUFDIGFkZHJlc3Mgb2YgdXNlcnMqLwp9IE1VX1RSSUdHRVJfTVVfVFhfVCwgKlBfTVVfVFJJR0dFUl9NVV9UWF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9NVU1JTU9fQUNUSU9OX1NUUlVDVF9UIHsKCVVJTlRfOCB1Y011TWltb0NhdGVnb3J5OwoJVUlOVF84IGF1Y1JzdlszXTsKCXVuaW9uIHsKCQlNVV9HRVRfQ0FMQ19JTklUX01DU19UIHJNdUdldENhbGNJbml0TWNzOwoJCU1VX1NFVF9JTklUX01DU19UIHJNdVNldEluaXRNY3M7CgkJTVVfU0VUX0NBTENfTFFfVCByTXVTZXRDYWxjTHE7CgkJTVVfR0VUX0xRX1Qgck11R2V0THE7CgkJTVVfU0VUX1NOUl9PRkZTRVRfVCByTXVTZXRTbnJPZmZzZXQ7CgkJTVVfU0VUX1pFUk9fTlNTX1Qgck11U2V0WmVyb05zczsKCQlNVV9TUEVFRF9VUF9MUV9UIHJNdVNwZWVkVXBMcTsKCQlNVV9TRVRfTVVfVEFCTEVfVCByTXVTZXRNdVRhYmxlOwoJCU1VX1NFVF9HUk9VUF9UIHJNdVNldEdyb3VwOwoJCU1VX0dFVF9RRF9UIHJNdUdldFFkOwoJCU1VX1NFVF9FTkFCTEVfVCByTXVTZXRFbmFibGU7CgkJTVVfU0VUX0dJRF9VUF9UIHJNdVNldEdpZFVwOwoJCU1VX1RSSUdHRVJfTVVfVFhfVCByTXVUcmlnZ2VyTXVUeDsKCX0gdW5NdU1pbW9QYXJhbTsKfSBQQVJBTV9DVVNUT01fTVVNSU1PX0FDVElPTl9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX01VTUlNT19BQ1RJT05fU1RSVUNUX1Q7CiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9NVV9NSU1PICovCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9UWF9CRiAqLwojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfUUFfVE9PTCAqLwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9NRU1fRFVNUF9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0QWRkcmVzczsKCVVJTlRfMzIgdTRMZW5ndGg7CglVSU5UXzMyIHU0UmVtYWluTGVuZ3RoOwojaWYgQ0ZHX1NVUFBPUlRfUUFfVE9PTAoJVUlOVF8zMiB1NEljYXBDb250ZW50OwojZW5kaWYJCQkJLyogQ0ZHX1NVUFBPUlRfUUFfVE9PTCAqLwoJVUlOVF84IHVjRnJhZ051bTsKfSBQQVJBTV9DVVNUT01fTUVNX0RVTVBfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9NRU1fRFVNUF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fU1dfQ1RSTF9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0SWQ7CglVSU5UXzMyIHU0RGF0YTsKfSBQQVJBTV9DVVNUT01fU1dfQ1RSTF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1NXX0NUUkxfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0NISVBfQ09ORklHX1NUUlVDVF9UIHsKCVVJTlRfMTYgdTJJZDsKCVVJTlRfOCB1Y1R5cGU7CglVSU5UXzggdWNSZXNwVHlwZTsKCVVJTlRfMTYgdTJNc2dTaXplOwoJVUlOVF84IGF1Y1Jlc2VydmVkMFsyXTsKCVVJTlRfOCBhdWNDbWRbQ0hJUF9DT05GSUdfUkVTUF9TSVpFXTsKfSBQQVJBTV9DVVNUT01fQ0hJUF9DT05GSUdfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9DSElQX0NPTkZJR19TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fS0VZX0NGR19TVFJVQ1RfVCB7CglVSU5UXzggYXVjS2V5W1dMQU5fQ0ZHX0tFWV9MRU5fTUFYXTsKCVVJTlRfOCBhdWNWYWx1ZVtXTEFOX0NGR19WQUxVRV9MRU5fTUFYXTsKfSBQQVJBTV9DVVNUT01fS0VZX0NGR19TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX0tFWV9DRkdfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0VFUFJPTV9SV19TVFJVQ1RfVCB7CglVSU5UXzggdWNFZXByb21NZXRob2Q7CS8qIEZvciByZWFkIG9ubHkgcmVhZDogMSwgcXVlcnkgc2l6ZTogMCAqLwoJVUlOVF84IHVjRWVwcm9tSW5kZXg7CglVSU5UXzggcmVzZXJ2ZWQ7CglVSU5UXzE2IHUyRWVwcm9tRGF0YTsKfSBQQVJBTV9DVVNUT01fRUVQUk9NX1JXX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fRUVQUk9NX1JXX1NUUlVDVF9ULApQQVJBTV9DVVNUT01fTlZSQU1fUldfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9OVlJBTV9SV19TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fV01NX1BTX1RFU1RfU1RSVUNUX1QgewoJVUlOVF84IGJtZmdBcHNkRW5BYzsJLyogYjB+MzogdHJpZ2dlci1lbiBBQzB+My4gYjR+NzogZGVsaXZlcnktZW4gQUMwfjMgKi8KCVVJTlRfOCB1Y0lzRW50ZXJQc0F0T25jZTsJLyogZW50ZXIgUFMgaW1tZWRpYXRlbHkgd2l0aG91dCA1IHNlY29uZCBndWFyZCBhZnRlciBjb25uZWN0ZWQgKi8KCVVJTlRfOCB1Y0lzRGlzYWJsZVVjVHJpZ2dlcjsJLyogbm90IHRvIHRyaWdnZXIgVUMgb24gYmVhY29uIFRJTSBpcyBtYXRjaGVkICh1bmRlciBVLUFQU0QpICovCglVSU5UXzggcmVzZXJ2ZWQ7Cn0gUEFSQU1fQ1VTVE9NX1dNTV9QU19URVNUX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fV01NX1BTX1RFU1RfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX05PQV9QQVJBTV9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0Tm9hRHVyYXRpb25NczsKCVVJTlRfMzIgdTROb2FJbnRlcnZhbE1zOwoJVUlOVF8zMiB1NE5vYUNvdW50OwoJVUlOVF84IHVjQnNzSWR4Owp9IFBBUkFNX0NVU1RPTV9OT0FfUEFSQU1fU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9OT0FfUEFSQU1fU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX09QUFBTX1BBUkFNX1NUUlVDVF9UIHsKCVVJTlRfOCB1Y0Jzc0lkeDsKCVVJTlRfOCB1Y0xlZ2N5UFM7CglVSU5UXzggdWNPcHBQczsKCVVJTlRfOCBhdWNSZXN2WzFdOwoJVUlOVF8zMiB1NENUd2luZG93TXM7Cn0gUEFSQU1fQ1VTVE9NX09QUFBTX1BBUkFNX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fT1BQUFNfUEFSQU1fU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1VBUFNEX1BBUkFNX1NUUlVDVF9UIHsKCVVJTlRfOCB1Y0Jzc0lkeDsKCVVJTlRfOCBmZ0VuQVBTRDsKCVVJTlRfOCBmZ0VuQVBTRF9BY0JlOwoJVUlOVF84IGZnRW5BUFNEX0FjQms7CglVSU5UXzggZmdFbkFQU0RfQWNWbzsKCVVJTlRfOCBmZ0VuQVBTRF9BY1ZpOwoJVUlOVF84IHVjTWF4U3BMZW47CglVSU5UXzggYXVjUmVzdlsyXTsKfSBQQVJBTV9DVVNUT01fVUFQU0RfUEFSQU1fU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9VQVBTRF9QQVJBTV9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fUDJQX1NFVF9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0RW5hYmxlOwoJVUlOVF8zMiB1NE1vZGU7Cn0gUEFSQU1fQ1VTVE9NX1AyUF9TRVRfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9QMlBfU0VUX1NUUlVDVF9UOwoKI2RlZmluZSBNQVhfTlVNQkVSX09GX0FDTCAyMAoKdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX1QgewoJUEFSQU1fQ1VTVE9NX0FDTF9QT0xJQ1lfRElTQUJMRSwKCVBBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX0FDQ0VQVCwKCVBBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX0RFTlksCglQQVJBTV9DVVNUT01fQUNMX1BPTElDWV9OVU0KfSBFTlVNX1BBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX1QsICpQX0VOVU1fUEFSQU1fQ1VTVE9NX0FDTF9QT0xJQ1lfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fQUNMX0VOVFJZIHsKCVVJTlRfOCBhdWNBZGRyW01BQ19BRERSX0xFTl07CglVSU5UXzE2IHUyUnN2Owp9IFBBUkFNX0NVU1RPTV9BQ0xfRU5UUlksICpQUEFSQU1fQ1VTVE9NX0FDTF9FTlRSWTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fQUNMIHsKCUVOVU1fUEFSQU1fQ1VTVE9NX0FDTF9QT0xJQ1lfVCBlUG9saWN5OwoJVUlOVF8zMiB1NE51bTsKCVBBUkFNX0NVU1RPTV9BQ0xfRU5UUlkgckVudHJ5W01BWF9OVU1CRVJfT0ZfQUNMXTsKfSBQQVJBTV9DVVNUT01fQUNMLCAqUFBBUkFNX0NVU1RPTV9BQ0w7Cgp0eXBlZGVmIGVudW0gX0VOVU1fQ0ZHX1NSQ19UWVBFX1QgewoJQ0ZHX1NSQ19UWVBFX0VFUFJPTSwKCUNGR19TUkNfVFlQRV9OVlJBTSwKCUNGR19TUkNfVFlQRV9VTktOT1dOLAoJQ0ZHX1NSQ19UWVBFX05VTQp9IEVOVU1fQ0ZHX1NSQ19UWVBFX1QsICpQX0VOVU1fQ0ZHX1NSQ19UWVBFX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fRUVQUk9NX1RZUEVfVCB7CglFRVBST01fVFlQRV9OTywKCUVFUFJPTV9UWVBFX1BSRVNFTlQsCglFRVBST01fVFlQRV9OVU0KfSBFTlVNX0VFUFJPTV9UWVBFX1QsICpQX0VOVU1fRUVQUk9NX1RZUEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9RT1NfVFNJTkZPIHsKCVVJTlRfOCB1Y1RyYWZmaWNUeXBlOwkvKiBUcmFmZmljIFR5cGU6IDEgZm9yIGlzb2Nocm9ub3VzIDAgZm9yIGFzeW5jaHJvbm91cyAqLwoJVUlOVF84IHVjVGlkOwkJLyogVFNJRDogbXVzdCBiZSBiZXR3ZWVuIDggfiAxNSAqLwoJVUlOVF84IHVjRGlyZWN0aW9uOwkvKiBkaXJlY3Rpb24gKi8KCVVJTlRfOCB1Y0FjY2Vzc1BvbGljeTsJLyogYWNjZXNzIHBvbGljeSAqLwoJVUlOVF84IHVjQWdncmVnYXRpb247CS8qIGFnZ3JlZ2F0aW9uICovCglVSU5UXzggdWNBcHNkOwkJLyogQVBTRCAqLwoJVUlOVF84IHVjdXNlclByaW9yaXR5OwkvKiB1c2VyIHByaW9yaXR5ICovCglVSU5UXzggdWNUc0luZm9BY2tQb2xpY3k7CS8qIFRTSU5GTyBBQ0sgcG9saWN5ICovCglVSU5UXzggdWNTY2hlZHVsZTsJLyogU2NoZWR1bGUgKi8KfSBQQVJBTV9RT1NfVFNJTkZPLCAqUF9QQVJBTV9RT1NfVFNJTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1FPU19UU1BFQyB7CglQQVJBTV9RT1NfVFNJTkZPIHJUc0luZm87CS8qIFRTIGluZm8gZmllbGQgKi8KCVVJTlRfMTYgdTJOb21pbmFsTVNEVVNpemU7CS8qIG5vbWluYWwgTVNEVSBzaXplICovCglVSU5UXzE2IHUyTWF4TVNEVXNpemU7CS8qIG1heGltdW0gTVNEVSBzaXplICovCglVSU5UXzMyIHU0TWluU3ZjSW50djsJLyogbWluaW11bSBzZXJ2aWNlIGludGVydmFsICovCglVSU5UXzMyIHU0TWF4U3ZjSW50djsJLyogbWF4aW11bSBzZXJ2aWNlIGludGVydmFsICovCglVSU5UXzMyIHU0SW5hY3RJbnR2OwkvKiBpbmFjdGl2aXR5IGludGVydmFsICovCglVSU5UXzMyIHU0U3BzSW50djsJLyogc3VzcGVuc2lvbiBpbnRlcnZhbCAqLwoJVUlOVF8zMiB1NFN2Y1N0YXJ0VGltZTsJLyogc2VydmljZSBzdGFydCB0aW1lICovCglVSU5UXzMyIHU0TWluRGF0YVJhdGU7CS8qIG1pbmltdW0gRGF0YSByYXRlICovCglVSU5UXzMyIHU0TWVhbkRhdGFSYXRlOwkvKiBtZWFuIGRhdGEgcmF0ZSAqLwoJVUlOVF8zMiB1NFBlYWtEYXRhUmF0ZTsJLyogcGVhayBkYXRhIHJhdGUgKi8KCVVJTlRfMzIgdTRNYXhCdXJzdFNpemU7CS8qIG1heGltdW0gYnVyc3Qgc2l6ZSAqLwoJVUlOVF8zMiB1NERlbGF5Qm91bmQ7CS8qIGRlbGF5IGJvdW5kICovCglVSU5UXzMyIHU0TWluUEhZUmF0ZTsJLyogbWluaW11bSBQSFkgcmF0ZSAqLwoJVUlOVF8xNiB1MlNiYTsJCS8qIHN1cnBsdXMgYmFuZHdpZHRoIGFsbG93YW5jZSAqLwoJVUlOVF8xNiB1Mk1lZGl1bVRpbWU7CS8qIG1lZGl1bSB0aW1lICovCn0gUEFSQU1fUU9TX1RTUEVDLCAqUF9QQVJBTV9RT1NfVFNQRUM7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUU9TX0FERFRTX1JFUV9JTkZPIHsKCVBBUkFNX1FPU19UU1BFQyByVHNwZWM7Cn0gUEFSQU1fUU9TX0FERFRTX1JFUV9JTkZPLCAqUF9QQVJBTV9RT1NfQUREVFNfUkVRX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fVk9JUF9DT05GSUcgewoJVUlOVF8zMiB1NFZvaXBUcmFmZmljSW50ZXJ2YWw7CS8qIDA6IGRpc2FibGUgVk9JUCBjb25maWd1cmF0aW9uICovCn0gUEFSQU1fVk9JUF9DT05GSUcsICpQX1BBUkFNX1ZPSVBfQ09ORklHOwoKLyo4MDIuMTEgU3RhdGlzdGljcyBTdHJ1Y3QqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX1NUQVRJU1RJQ1NfU1RSVUNUX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJTEFSR0VfSU5URUdFUiByVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OwoJTEFSR0VfSU5URUdFUiByTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OwoJTEFSR0VfSU5URUdFUiByRmFpbGVkQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJSZXRyeUNvdW50OwoJTEFSR0VfSU5URUdFUiByTXVsdGlwbGVSZXRyeUNvdW50OwoJTEFSR0VfSU5URUdFUiByUlRTU3VjY2Vzc0NvdW50OwoJTEFSR0VfSU5URUdFUiByUlRTRmFpbHVyZUNvdW50OwoJTEFSR0VfSU5URUdFUiByQUNLRmFpbHVyZUNvdW50OwoJTEFSR0VfSU5URUdFUiByRnJhbWVEdXBsaWNhdGVDb3VudDsKCUxBUkdFX0lOVEVHRVIgclJlY2VpdmVkRnJhZ21lbnRDb3VudDsKCUxBUkdFX0lOVEVHRVIgck11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKCUxBUkdFX0lOVEVHRVIgckZDU0Vycm9yQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJUS0lQTG9jYWxNSUNGYWlsdXJlczsKCUxBUkdFX0lOVEVHRVIgclRLSVBJQ1ZFcnJvcnM7CglMQVJHRV9JTlRFR0VSIHJUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKCUxBUkdFX0lOVEVHRVIgclRLSVBSZXBsYXlzOwoJTEFSR0VfSU5URUdFUiByQ0NNUEZvcm1hdEVycm9yczsKCUxBUkdFX0lOVEVHRVIgckNDTVBSZXBsYXlzOwoJTEFSR0VfSU5URUdFUiByQ0NNUERlY3J5cHRFcnJvcnM7CglMQVJHRV9JTlRFR0VSIHJGb3VyV2F5SGFuZHNoYWtlRmFpbHVyZXM7CglMQVJHRV9JTlRFR0VSIHJXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJXRVBJQ1ZFcnJvckNvdW50OwoJTEFSR0VfSU5URUdFUiByRGVjcnlwdFN1Y2Nlc3NDb3VudDsKCUxBUkdFX0lOVEVHRVIgckRlY3J5cHRGYWlsdXJlQ291bnQ7Cn0gUEFSQU1fODAyXzExX1NUQVRJU1RJQ1NfU1RSVUNUX1QsICpQX1BBUkFNXzgwMl8xMV9TVEFUSVNUSUNTX1NUUlVDVF9UOwoKLyogTGludXggTmV0d29yayBEZXZpY2UgU3RhdGlzdGljcyBTdHJ1Y3QgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0xJTlVYX05FVERFVl9TVEFUSVNUSUNTX1QgewoJVUlOVF8zMiB1NFJ4UGFja2V0czsKCVVJTlRfMzIgdTRUeFBhY2tldHM7CglVSU5UXzMyIHU0UnhCeXRlczsKCVVJTlRfMzIgdTRUeEJ5dGVzOwoJVUlOVF8zMiB1NFJ4RXJyb3JzOwoJVUlOVF8zMiB1NFR4RXJyb3JzOwoJVUlOVF8zMiB1NE11bHRpY2FzdDsKfSBQQVJBTV9MSU5VWF9ORVRERVZfU1RBVElTVElDU19ULCAqUF9QQVJBTV9MSU5VWF9ORVRERVZfU1RBVElTVElDU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01US19XSUZJX1RFU1RfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEZ1bmNJbmRleDsKCVVJTlRfMzIgdTRGdW5jRGF0YTsKfSBQQVJBTV9NVEtfV0lGSV9URVNUX1NUUlVDVF9ULCAqUF9QQVJBTV9NVEtfV0lGSV9URVNUX1NUUlVDVF9UOwoKLyogODAyLjExIE1lZGlhIHN0cmVhbSBjb25zdHJhaW50cyAqLwp0eXBlZGVmIGVudW0gX0VOVU1fTUVESUFfU1RSRUFNX01PREUgewoJRU5VTV9NRURJQV9TVFJFQU1fT0ZGLAoJRU5VTV9NRURJQV9TVFJFQU1fT04KfSBFTlVNX01FRElBX1NUUkVBTV9NT0RFLCAqUF9FTlVNX01FRElBX1NUUkVBTV9NT0RFOwoKLyogZm9yIE5ESVMgNS4xIE1lZGlhIFN0cmVhbWluZyBDaGFuZ2UgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01FRElBX1NUUkVBTUlOR19JTkRJQ0FUSU9OIHsKCVBBUkFNX1NUQVRVU19JTkRJQ0FUSU9OX1QgclN0YXR1czsKCUVOVU1fTUVESUFfU1RSRUFNX01PREUgZU1lZGlhU3RyZWFtTW9kZTsKfSBQQVJBTV9NRURJQV9TVFJFQU1JTkdfSU5ESUNBVElPTiwgKlBfUEFSQU1fTUVESUFfU1RSRUFNSU5HX0lORElDQVRJT047CgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX0RFRkFVTFQgICAgICAgMHgwMAojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX1RDUF9JUCAgICAgICAgMHgwMgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX0lQWCAgICAgICAgICAgMHgwNgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX05CRiAgICAgICAgICAgMHgwNwojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX01BWCAgICAgICAgICAgMHgwRgojZGVmaW5lIFBBUkFNX1BST1RPQ09MX0lEX01BU0sgICAgICAgICAgMHgwRgoKLyogZm9yIE5ESVMgT0lEX0dFTl9ORVRXT1JLX0xBWUVSX0FERFJFU1NFUyAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTkVUV09SS19BRERSRVNTX0lQIHsKCVVJTlRfMTYgc2luX3BvcnQ7CglVSU5UXzMyIGluX2FkZHI7CglVSU5UXzggc2luX3plcm9bOF07Cn0gUEFSQU1fTkVUV09SS19BRERSRVNTX0lQLCAqUF9QQVJBTV9ORVRXT1JLX0FERFJFU1NfSVA7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTkVUV09SS19BRERSRVNTIHsKCVVJTlRfMTYgdTJBZGRyZXNzTGVuZ3RoOwkvKiBsZW5ndGggaW4gYnl0ZXMgb2YgQWRkcmVzc1tdIGluIHRoaXMgKi8KCVVJTlRfMTYgdTJBZGRyZXNzVHlwZTsJLyogdHlwZSBvZiB0aGlzIGFkZHJlc3MgKFBBUkFNX1BST1RPQ09MX0lEX1hYWCBhYm92ZSkgKi8KCVVJTlRfOCBhdWNBZGRyZXNzWzFdOwkvKiBhY3R1YWxseSBBZGRyZXNzTGVuZ3RoIGJ5dGVzIGxvbmcgKi8KfSBQQVJBTV9ORVRXT1JLX0FERFJFU1MsICpQX1BBUkFNX05FVFdPUktfQUREUkVTUzsKCi8qIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCB3aXRoIE9JRF9HRU5fTkVUV09SS19MQVlFUl9BRERSRVNTRVMgdG8gc2V0IG5ldHdvcmsgbGF5ZXIgYWRkcmVzc2VzIG9uIGFuIGludGVyZmFjZSAqLwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX05FVFdPUktfQUREUkVTU19MSVNUIHsKCVVJTlRfOCB1Y0Jzc0lkeDsKCVVJTlRfMzIgdTRBZGRyZXNzQ291bnQ7CS8qIG51bWJlciBvZiBhZGRyZXNzZXMgZm9sbG93aW5nICovCglVSU5UXzE2IHUyQWRkcmVzc1R5cGU7CS8qIHR5cGUgb2YgdGhpcyBhZGRyZXNzIChORElTX1BST1RPQ09MX0lEX1hYWCBhYm92ZSkgKi8KCVBBUkFNX05FVFdPUktfQUREUkVTUyBhckFkZHJlc3NbMV07CS8qIGFjdHVhbGx5IEFkZHJlc3NDb3VudCBlbGVtZW50cyBsb25nICovCn0gUEFSQU1fTkVUV09SS19BRERSRVNTX0xJU1QsICpQX1BBUkFNX05FVFdPUktfQUREUkVTU19MSVNUOwoKI2lmIENGR19TTFRfU1VQUE9SVAoKI2RlZmluZSBGSVhFRF9CV19MRzIwICAgICAgIDB4MDAwMAojZGVmaW5lIEZJWEVEX0JXX1VMMjAgICAgICAgMHgyMDAwCiNkZWZpbmUgRklYRURfQldfREw0MCAgICAgICAweDMwMDAKCiNkZWZpbmUgRklYRURfRVhUX0NITkxfVTIwICAweDQwMDAJLyogRm9yIEFHRyByZWdpc3Rlci4gKi8KI2RlZmluZSBGSVhFRF9FWFRfQ0hOTF9MMjAgIDB4QzAwMAkvKiBGb3IgQUdHIHJlZ3NpdGVyLiAqLwoKdHlwZWRlZiBlbnVtIF9FTlVNX01US19MUF9URVNUX01PREVfVCB7CglFTlVNX01US19MUF9URVNUX05PUk1BTCwKCUVOVU1fTVRLX0xQX1RFU1RfR09MREVOX1NBTVBMRSwKCUVOVU1fTVRLX0xQX1RFU1RfRFVULAoJRU5VTV9NVEtfTFBfVEVTVF9NT0RFX05VTQp9IEVOVU1fTVRLX0xQX1RFU1RfTU9ERV9ULCAqUF9FTlVNX01US19MUF9URVNUX01PREVfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9NVEtfU0xUX0ZVTkNfSURYX1QgewoJRU5VTV9NVEtfU0xUX0ZVTkNfRE9fTk9USElORywKCUVOVU1fTVRLX1NMVF9GVU5DX0lOSVRJQUwsCglFTlVNX01US19TTFRfRlVOQ19SQVRFX1NFVCwKCUVOVU1fTVRLX1NMVF9GVU5DX0xQX1NFVCwKCUVOVU1fTVRLX1NMVF9GVU5DX05VTQp9IEVOVU1fTVRLX1NMVF9GVU5DX0lEWF9ULCAqUF9FTlVNX01US19TTFRfRlVOQ19JRFhfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NVEtfU0xUX0xQX1RFU1RfU1RSVUNUX1QgewoJRU5VTV9NVEtfTFBfVEVTVF9NT0RFX1QgckxwVGVzdE1vZGU7CglVSU5UXzMyIHU0QmNuUmN2TnVtOwp9IFBBUkFNX01US19TTFRfTFBfVEVTVF9TVFJVQ1RfVCwgKlBfUEFSQU1fTVRLX1NMVF9MUF9URVNUX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01US19TTFRfVFJfVEVTVF9TVFJVQ1RfVCB7CglFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIHJOZXR3b3JrVHlwZTsJLyogTmV0d29yayBUeXBlIE9GRE01RyBvciBPRkRNMi40RyAqLwoJVUlOVF8zMiB1NEZpeGVkUmF0ZTsJLyogRml4ZWQgUmF0ZSBpbmNsdWRpbmcgQlcgKi8KfSBQQVJBTV9NVEtfU0xUX1RSX1RFU1RfU1RSVUNUX1QsICpQX1BBUkFNX01US19TTFRfVFJfVEVTVF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NVEtfU0xUX0lOSVRJQUxfU1RSVUNUX1QgewoJVUlOVF84IGF1Y1RhcmdldE1hY0FkZHJbUEFSQU1fTUFDX0FERFJfTEVOXTsKCVVJTlRfMTYgdTJTaXRlSUQ7Cn0gUEFSQU1fTVRLX1NMVF9JTklUSUFMX1NUUlVDVF9ULCAqUF9QQVJBTV9NVEtfU0xUX0lOSVRJQUxfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTVRLX1NMVF9URVNUX1NUUlVDVF9UIHsKCUVOVU1fTVRLX1NMVF9GVU5DX0lEWF9UIHJTbHRGdW5jSWR4OwoJVUlOVF8zMiB1NExlbmd0aDsJLyogTGVuZ3RoIG9mIHN0cnVjdHVyZSwgKi8KCQkJCS8qIGluY2x1ZGluZyBteXNlbGYgKi8KCVVJTlRfMzIgdTRGdW5jSW5mb0xlbjsJLyogSW5jbHVkZSBmb2xsb3dpbmcgY29udGVudCAqLwoJCQkJLyogZmllbGQgYW5kIG15c2VsZiAqLwoJdW5pb24gewoJCVBBUkFNX01US19TTFRfSU5JVElBTF9TVFJVQ1RfVCByTXRrSW5pdFRlc3Q7CgkJUEFSQU1fTVRLX1NMVF9MUF9URVNUX1NUUlVDVF9UIHJNdGtMcFRlc3Q7CgkJUEFSQU1fTVRLX1NMVF9UUl9URVNUX1NUUlVDVF9UIHJNdGtUUlRlc3Q7Cgl9IHVuRnVuY0luZm9Db250ZW50OwoKfSBQQVJBTV9NVEtfU0xUX1RFU1RfU1RSVUNUX1QsICpQX1BBUkFNX01US19TTFRfVEVTVF9TVFJVQ1RfVDsKCiNlbmRpZgoKI2lmIENGR19TVVBQT1JUX01TUAovKiBTaG91bGQgYnkgY2hpcCAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU0VDX0NPTkZJR19UIHsKCUJPT0wgZmdXUElGbGFnOwoJQk9PTCBmZ1JWOwoJQk9PTCBmZ0lLVjsKCUJPT0wgZmdSS1Y7CgoJQk9PTCBmZ1JDSUQ7CglCT09MIGZnUkNBMTsKCUJPT0wgZmdSQ0EyOwoJQk9PTCBmZ0V2ZW5QTjsKCglVSU5UXzggdWNLZXlJRDsKCVVJTlRfOCB1Y01VQVJJZHg7CglVSU5UXzggdWNDaXBoZXJTdWl0OwoJVUlOVF84IGF1Y1Jlc2VydmVkWzFdOwp9IFBBUkFNX1NFQ19DT05GSUdfVCwgKlBfUEFSQU1fU0VDX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1RYX0NPTkZJR19UIHsKCVVJTlRfOCBhdWNQQVs2XTsKCUJPT0wgZmdTVzsKCUJPT0wgZmdEaXNSeEhkclRyYW47CgoJQk9PTCBmZ0FBRE9NOwoJVUlOVF84IHVjUEZNVUlkeDsKCVVJTlRfMTYgdTJQYXJ0aWFsQUlEOwoKCUJPT0wgZmdUSUJGOwoJQk9PTCBmZ1RFQkY7CglCT09MIGZnSXNIVDsKCUJPT0wgZmdJc1ZIVDsKCglCT09MIGZnTWVzaDsKCUJPT0wgZmdCQUZFbjsKCUJPT0wgZmdDRkFjazsKCUJPT0wgZmdSZGdCQTsKCglCT09MIGZnUkRHOwoJQk9PTCBmZ0lzUHdyTWd0OwoJQk9PTCBmZ1JUUzsKCUJPT0wgZmdTTVBTOwoKCUJPT0wgZmdUeG9wUFM7CglCT09MIGZnRG9ub3RVcGRhdGVJUFNNOwoJQk9PTCBmZ1NraXBUeDsKCUJPT0wgZmdMRFBDOwoKCUJPT0wgZmdJc1FvUzsKCUJPT0wgZmdJc0Zyb21EUzsKCUJPT0wgZmdJc1RvRFM7CglCT09MIGZnRHluQnc7CgoJQk9PTCBmZ0lzQU1TRFVDcm9zc0xHOwoJQk9PTCBmZ0NoZWNrUEVSOwoJQk9PTCBmZ0lzR0lENjM7CglVSU5UXzggYXVjUmVzZXJ2ZWRbMV07CgojaWYgKDEgLyogQ0ZHX1NVUFBPUlRfVkhUID09IDEgKi8pCglCT09MIGZnVmh0VElCRjsKCUJPT0wgZmdWaHRURUJGOwoJQk9PTCBmZ1ZodExEUEM7CglVSU5UXzggYXVjUmVzZXJ2ZWQyWzFdOwojZW5kaWYKfSBQQVJBTV9UWF9DT05GSUdfVCwgKlBfUEFSQU1fVFhfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fS0VZX0NPTkZJR19UIHsKCVVJTlRfOCAgICAgICAgICAgICAgICAgYXVjS2V5WzMyXTsKfSBQQVJBTV9LRVlfQ09ORklHX1QsICpQX1BBUkFNX0tFWV9DT05GSUdfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX1JBVEVfSU5GT19UIHsKCVVJTlRfOCAgICAgICAgICAgICAgICAgdWNDb3VudGVyTVBEVUZhaWw7CglVSU5UXzggICAgICAgICAgICAgICAgIHVjQ291bnRlck1QRFVUeDsKCVVJTlRfOCAgICAgICAgICAgICAgICAgdWNSYXRlSWR4OwoJVUlOVF84ICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkWzFdOwoKCVVJTlRfMTYgICAgICAgICAgICAgICAgYXUyUmF0ZUNvZGVbQVVUT19SQVRFX05VTV07Cn0gUEFSQU1fUEVFUl9SQVRFX0lORk9fVCwgKlBfUEFSQU1fUEVFUl9SQVRFX0lORk9fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX0JBX0NPTkZJR19UIHsKCVVJTlRfOAkJCXVjQmFFbjsKCVVJTlRfOAkJCXVjUnN2WzNdOwoJVUlOVF8zMgkJCXU0QmFXaW5TaXplOwp9IFBBUkFNX1BFRVJfQkFfQ09ORklHX1QsICpQX1BBUkFNX1BFRVJfQkFfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQU5UX0lEX0NPTkZJR19UIHsKCVVJTlRfOAkJCXVjQU5USURTdHMwOwoJVUlOVF84CQkJdWNBTlRJRFN0czE7CglVSU5UXzgJCQl1Y0FOVElEU3RzMjsKCVVJTlRfOAkJCXVjQU5USURTdHMzOwp9IFBBUkFNX0FOVF9JRF9DT05GSUdfVCwgKlBfUEFSQU1fQU5UX0lEX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BFRVJfQ0FQX1QgewoJUEFSQU1fQU5UX0lEX0NPTkZJR19UCXJBbnRJRENvbmZpZzsKCglVSU5UXzgJCQl1Y1R4UG93ZXJPZmZzZXQ7CglVSU5UXzgJCQl1Y0NvdW50ZXJCV1NlbGVjdG9yOwoJVUlOVF84CQkJdWNDaGFuZ2VCV0FmdGVyUmF0ZU47CglVSU5UXzgJCQl1Y0ZyZXF1ZW5jeUNhcGFiaWxpdHk7CglVSU5UXzgJCQl1Y1NwYXRpYWxFeHRlbnNpb25JbmRleDsKCglCT09MCQkJZmdHMjsKCUJPT0wJCQlmZ0c0OwoJQk9PTAkJCWZnRzg7CglCT09MCQkJZmdHMTY7CgoJVUlOVF84CQkJdWNNTVNTOwoJVUlOVF84CQkJdWNBbXBkdUZhY3RvcjsKCVVJTlRfOAkJCXVjUmVzZXJ2ZWRbMV07Cn0gUEFSQU1fUEVFUl9DQVBfVCwgKlBfUEFSQU1fUEVFUl9DQVBfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX1JYX0NPVU5URVJfQUxMX1QgewoJVUlOVF84CQkJdWNSeFJjcGkwOwoJVUlOVF84CQkJdWNSeFJjcGkxOwoJVUlOVF84CQkJdWNSeFJjcGkyOwoJVUlOVF84CQkJdWNSeFJjcGkzOwoKCVVJTlRfOAkJCXVjUnhDQzA7CglVSU5UXzgJCQl1Y1J4Q0MxOwoJVUlOVF84CQkJdWNSeENDMjsKCVVJTlRfOAkJCXVjUnhDQzM7CgoJQk9PTAkJCWZnUnhDQ1NlbDsKCVVJTlRfOAkJCXVjQ2VSbXNkOwoJVUlOVF84CQkJYXVjUmVzZXJ2ZWRbMl07Cn0gUEFSQU1fUEVFUl9SWF9DT1VOVEVSX0FMTF9ULCAqUF9QQVJBTV9QRUVSX1JYX0NPVU5URVJfQUxMX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUEVFUl9UWF9DT1VOVEVSX0FMTF9UIHsKCVVJTlRfMTYgdTJSYXRlMVR4Q250OwoJVUlOVF8xNiB1MlJhdGUxRmFpbENudDsKCVVJTlRfMTYgdTJSYXRlMk9rQ250OwoJVUlOVF8xNiB1MlJhdGUzT2tDbnQ7CglVSU5UXzE2IHUyQ3VyQndUeENudDsKCVVJTlRfMTYgdTJDdXJCd0ZhaWxDbnQ7CglVSU5UXzE2IHUyT3RoZXJCd1R4Q250OwoJVUlOVF8xNiB1Mk90aGVyQndGYWlsQ250Owp9IFBBUkFNX1BFRVJfVFhfQ09VTlRFUl9BTExfVCwgKlBfUEFSQU1fUEVFUl9UWF9DT1VOVEVSX0FMTF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0hXX1dMQU5fSU5GT19UIHsKCVVJTlRfMzIJCQl1NEluZGV4OwoJUEFSQU1fVFhfQ09ORklHX1QJcld0YmxUeENvbmZpZzsKCVBBUkFNX1NFQ19DT05GSUdfVAlyV3RibFNlY0NvbmZpZzsKCVBBUkFNX0tFWV9DT05GSUdfVAlyV3RibEtleUNvbmZpZzsKCVBBUkFNX1BFRVJfUkFURV9JTkZPX1QJcld0YmxSYXRlSW5mbzsKCVBBUkFNX1BFRVJfQkFfQ09ORklHX1QgIHJXdGJsQmFDb25maWc7CglQQVJBTV9QRUVSX0NBUF9UCXJXdGJsUGVlckNhcDsKCVBBUkFNX1BFRVJfUlhfQ09VTlRFUl9BTExfVCByV3RibFJ4Q291bnRlcjsKCVBBUkFNX1BFRVJfVFhfQ09VTlRFUl9BTExfVCByV3RibFR4Q291bnRlcjsKfSBQQVJBTV9IV19XTEFOX0lORk9fVCwgKlBfUEFSQU1fSFdfV0xBTl9JTkZPX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfSFdfVFhfQU1QRFVfTUVUUklDU19UIHsKCVVJTlRfMzIgdTRUeFNmQ250OwoJVUlOVF8zMiB1NFR4QWNrU2ZDbnQ7CglVSU5UXzMyIHUyVHhBbXBkdUNudDsKCVVJTlRfMzIgdTJUeFJzcEJhQ250OwoJVUlOVF8xNiB1MlR4RWFybHlTdG9wQ250OwoJVUlOVF8xNiB1MlR4UmFuZ2UxQW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTJBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlM0FtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2U0QW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTVBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlNkFtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2U3QW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZThBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlOUFtcGR1Q250Owp9IEhXX1RYX0FNUERVX01FVFJJQ1NfVCwgKlBfSFdfVFhfQU1QRFVfTUVUUklDU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX0hXX01JQl9DT1VOVEVSX1QgewoJVUlOVF8zMiB1NFJ4RmNzRXJyQ250OwoJVUlOVF8zMiB1NFJ4Rmlmb0Z1bGxDbnQ7CglVSU5UXzMyIHU0UnhNcGR1Q250OwoJVUlOVF8zMiB1NFJ4QU1QRFVDbnQ7CglVSU5UXzMyIHU0UnhUb3RhbEJ5dGU7CglVSU5UXzMyIHU0UnhWYWxpZEFNUERVU0Y7CglVSU5UXzMyIHU0UnhWYWxpZEJ5dGU7CglVSU5UXzMyIHU0Q2hhbm5lbElkbGVDbnQ7CglVSU5UXzMyIHU0UnhWZWN0b3JEcm9wQ250OwoJVUlOVF8zMiB1NERlbGltaXRlckZhaWxlZENudDsKCVVJTlRfMzIgdTRSeFZlY3Rvck1pc21hdGNoQ250OwoJVUlOVF8zMiB1NE1kcmR5Q250OwoJVUlOVF8zMiB1NENDS01kcmR5Q250OwoJVUlOVF8zMiB1NE9GRE1MR01peE1kcmR5OwoJVUlOVF8zMiB1NE9GRE1HcmVlbk1kcmR5OwoJVUlOVF8zMiB1NFBGRHJvcENudDsKCVVJTlRfMzIgdTRSeExlbk1pc21hdGNoQ250OwoJVUlOVF8zMiB1NFBDY2FUaW1lOwoJVUlOVF8zMiB1NFNDY2FUaW1lOwoJVUlOVF8zMiB1NENjYU5hdlR4OwoJVUlOVF8zMiB1NFBFRFRpbWU7CglVSU5UXzMyIHU0QmVhY29uVHhDbnQ7CglVSU5UXzMyIGF1NEJhTWlzc2VkQ250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NFJ0c1R4Q250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NEZyYW1lUmV0cnlDbnRbQlNTSURfTlVNXTsKCVVJTlRfMzIgYXU0RnJhbWVSZXRyeTJDbnRbQlNTSURfTlVNXTsKCVVJTlRfMzIgYXU0UnRzUmV0cnlDbnRbQlNTSURfTlVNXTsKCVVJTlRfMzIgYXU0QWNrRmFpbGVkQ250W0JTU0lEX05VTV07Cn0gSFdfTUlCX0NPVU5URVJfVCwgKlBfSFdfTUlCX0NPVU5URVJfVDsKCnR5cGVkZWYgc3RydWN0IF9IV19NSUIyX0NPVU5URVJfVCB7CglVSU5UXzMyIHU0VHg0ME1IekNudDsKCVVJTlRfMzIgdTRUeDgwTUh6Q250OwoJVUlOVF8zMiB1NFR4MTYwTUh6Q250Owp9IEhXX01JQjJfQ09VTlRFUl9ULCAqUF9IV19NSUIyX0NPVU5URVJfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9IV19NSUJfSU5GT19UIHsKCVVJTlRfMzIJCQl1NEluZGV4OwoJSFdfTUlCX0NPVU5URVJfVAlySHdNaWJDbnQ7CglIV19NSUIyX0NPVU5URVJfVAlySHdNaWIyQ250OwoJSFdfVFhfQU1QRFVfTUVUUklDU19UCXJId1R4QW1wZHVNdHM7Cn0gUEFSQU1fSFdfTUlCX0lORk9fVCwgKlBfUEFSQU1fSFdfTUlCX0lORk9fVDsKI2VuZGlmCgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgRm9yIEZpeGVkIFJhdGUgQ29uZmlndXJhdGlvbiAoUmVnaXN0cnkpICAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBlbnVtIF9FTlVNX1JFR0lTVFJZX0ZJWEVEX1JBVEVfVCB7CglGSVhFRF9SQVRFX05PTkUsCglGSVhFRF9SQVRFXzFNLAoJRklYRURfUkFURV8yTSwKCUZJWEVEX1JBVEVfNV81TSwKCUZJWEVEX1JBVEVfMTFNLAoJRklYRURfUkFURV82TSwKCUZJWEVEX1JBVEVfOU0sCglGSVhFRF9SQVRFXzEyTSwKCUZJWEVEX1JBVEVfMThNLAoJRklYRURfUkFURV8yNE0sCglGSVhFRF9SQVRFXzM2TSwKCUZJWEVEX1JBVEVfNDhNLAoJRklYRURfUkFURV81NE0sCglGSVhFRF9SQVRFX01DUzBfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MxXzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMl8yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzNfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M0XzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTNV8yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzZfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M3XzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMF8yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzFfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MyXzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTM18yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzRfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M1XzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTNl8yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzdfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MwXzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMV80ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzJfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MzXzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTNF80ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzVfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M2XzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTN180ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzMyXzgwME5TLAoJRklYRURfUkFURV9NQ1MwXzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTMV80ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzJfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MzXzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTNF80ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzVfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M2XzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTN180ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzMyXzQwME5TLAoJRklYRURfUkFURV9OVU0KfSBFTlVNX1JFR0lTVFJZX0ZJWEVEX1JBVEVfVCwgKlBfRU5VTV9SRUdJU1RSWV9GSVhFRF9SQVRFX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fQlRfQ01EX1QgewoJQlRfQ01EX1BST0ZJTEUgPSAwLAoJQlRfQ01EX1VQREFURSwKCUJUX0NNRF9OVU0KfSBFTlVNX0JUX0NNRF9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX0JUX1BST0ZJTEVfVCB7CglCVF9QUk9GSUxFX0NVU1RPTSA9IDAsCglCVF9QUk9GSUxFX1NDTywKCUJUX1BST0ZJTEVfQUNMLAoJQlRfUFJPRklMRV9NSVhFRCwKCUJUX1BST0ZJTEVfTk9fQ09OTkVDVElPTiwKCUJUX1BST0ZJTEVfTlVNCn0gRU5VTV9CVF9QUk9GSUxFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFRBX1BST0ZJTEVfVCB7CglFTlVNX0JUX1BST0ZJTEVfVCBlQnRQcm9maWxlOwoJdW5pb24gewoJCVVJTlRfOCBhdWNCVFBQYXJhbXNbQlRfUFJPRklMRV9QQVJBTV9MRU5dOwoJCS8qICAwOiBzY28gcmVzZXJ2ZWQgc2xvdCB0aW1lLAoJCSogIDE6IHNjbyBpZGxlIHNsb3QgdGltZSwKCQkqICAyOiBhY2wgdGhyb3VnaHB1dCwKCQkqICAgMzogYnQgdHggcG93ZXIsCgkJKiAgIDQ6IGJ0IHJzc2kKCQkqICAgNTogVm9JUCBpbnRlcnZhbAoJCSogICA2OiBCSVQoMCkgVXNlIHRoaXMgZmllbGQsIEJJVCgxKSAwIGFwcGx5IHNpbmdsZS8gMSBkdWFsIFBUQSBzZXR0aW5nLgoJCSovCgkJVUlOVF8zMiBhdTRCdGNyWzRdOwoJfSB1Owp9IFBUQV9QUk9GSUxFX1QsICpQX1BUQV9QUk9GSUxFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUFRBX0lQQ19UIHsKCVVJTlRfOCB1Y0NtZDsKCVVJTlRfOCB1Y0xlbjsKCXVuaW9uIHsKCQlQVEFfUFJPRklMRV9UIHJQcm9maWxlOwoJCVVJTlRfOCBhdWNCVFBQYXJhbXNbQlRfUFJPRklMRV9QQVJBTV9MRU5dOwoJfSB1Owp9IFBBUkFNX1BUQV9JUENfVCwgKlBfUEFSQU1fUFRBX0lQQ19ULCBQVEFfSVBDX1QsICpQX1BUQV9JUENfVDsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiEgXGJyaWVmIENGRzgwMjExIFNjYW4gUmVxdWVzdCBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9TQ0FOX1JFUVVFU1RfRVhUX1QgewoJUEFSQU1fU1NJRF9UIHJTc2lkOwoJVUlOVF8zMiB1NElFTGVuZ3RoOwoJUFVJTlRfOCBwdWNJRTsKfSBQQVJBTV9TQ0FOX1JFUVVFU1RfRVhUX1QsICpQX1BBUkFNX1NDQU5fUkVRVUVTVF9FWFRfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9TQ0FOX1JFUVVFU1RfQURWX1QgewoJVUlOVF8zMiB1NFNzaWROdW07CglQQVJBTV9TU0lEX1QgclNzaWRbQ0ZHX1NDQU5fU1NJRF9NQVhfTlVNXTsKCVVJTlRfMzIgdTRJRUxlbmd0aDsKCVBVSU5UXzggcHVjSUU7CiNpZiBDRkdfU0NBTl9DSEFOTkVMX1NQRUNJRklFRAoJVUlOVF84IHVjQ2hhbm5lbExpc3ROdW07CglSRl9DSEFOTkVMX0lORk9fVCBhckNobmxJbmZvTGlzdFtNQVhJTVVNX09QRVJBVElPTl9DSEFOTkVMX0xJU1RdOwojZW5kaWYKfSBQQVJBTV9TQ0FOX1JFUVVFU1RfQURWX1QsICpQX1BBUkFNX1NDQU5fUkVRVUVTVF9BRFZfVDsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiEgXGJyaWVmIENGRzgwMjExIFNjaGVkdWxlZCBTY2FuIFJlcXVlc3QgQ29udGFpbmVyICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9TQ0hFRF9TQ0FOX1JFUVVFU1RfVCB7CglVSU5UXzMyIHU0U3NpZE51bTsKCVBBUkFNX1NTSURfVCBhclNzaWRbQ0ZHX1NDQU5fU1NJRF9NQVRDSF9NQVhfTlVNXTsKCVVJTlRfMzIgdTRJRUxlbmd0aDsKCVBVSU5UXzggcHVjSUU7CglVSU5UXzE2IHUyU2NhbkludGVydmFsOwkvKiBpbiBtaWxsaXNlY29uZHMgKi8KfSBQQVJBTV9TQ0hFRF9TQ0FOX1JFUVVFU1QsICpQX1BBUkFNX1NDSEVEX1NDQU5fUkVRVUVTVDsKCiNpZiBDRkdfU1VQUE9SVF9QQVNTUE9JTlQKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0hTMjBfU0VUX0JTU0lEX1BPT0wgewoJQk9PTEVBTiBmZ0lzRW5hYmxlOwoJVUlOVF84IHVjTnVtQnNzaWRQb29sOwoJUEFSQU1fTUFDX0FERFJFU1MgYXJCU1NJRFs4XTsKfSBQQVJBTV9IUzIwX1NFVF9CU1NJRF9QT09MLCAqUF9QQVJBTV9IUzIwX1NFVF9CU1NJRF9QT09MOwoKI2VuZGlmIC8qIENGR19TVVBQT1JUX1BBU1NQT0lOVCAqLwoKI2lmIENGR19TVVBQT1JUX1NOSUZGRVIKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9NT05JVE9SX1NFVF9TVFJVQ1RfVCB7CglVSU5UXzggdWNFbmFibGU7CglVSU5UXzggdWNCYW5kOwoJVUlOVF84IHVjUHJpQ2hhbm5lbDsKCVVJTlRfOCB1Y1NjbzsKCVVJTlRfOCB1Y0NoYW5uZWxXaWR0aDsKCVVJTlRfOCB1Y0NoYW5uZWxTMTsKCVVJTlRfOCB1Y0NoYW5uZWxTMjsKCVVJTlRfOCBhdWNSZXN2WzldOwp9IFBBUkFNX0NVU1RPTV9NT05JVE9SX1NFVF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX01PTklUT1JfU0VUX1NUUlVDVF9UOwojZW5kaWYKCiNpZiBDRkdfQVVUT19DSEFOTkVMX1NFTF9TVVBQT1JUCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiEgXGJyaWVmIE1USyBBdXRvIENoYW5uZWwgU2VsZWN0aW9uIHJlbGF0ZWQgQ29udGFpbmVyICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgc3RydWN0IF9MVEVfU0FGRV9DSE5fSU5GT19UIHsKCVVJTlRfMzIgYXU0U2FmZUNoYW5uZWxCaXRtYXNrWzVdOyAvKiBOTDgwMjExX1RFU1RNT0RFX0FWQUlMQUJMRV9DSEFOX0FUVFJfTUFYICovCn0gTFRFX1NBRkVfQ0hOX0lORk9fVCwgKlBfQ01EX0xURV9TQUZFX0NITl9JTkZPX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ0hOX0xPQURfSU5GTyB7CgkvKiBQZXItQ0hOIExvYWQgKi8KCVVJTlRfOCB1Y0NoYW5uZWw7CglVSU5UXzE2IHUyQVBOdW07CglVSU5UXzMyIHU0RGlydGluZXNzOwoJVUlOVF84IHVjUmVzZXJ2ZWQ7Cn0gUEFSQU1fQ0hOX0xPQURfSU5GTywgKlBfUEFSQU1fQ0hOX0xPQURfSU5GTzsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DSE5fUkFOS19JTkZPIHsKCVVJTlRfOCB1Y0NoYW5uZWw7CglVSU5UXzMyIHU0RGlydGluZXNzOwoJVUlOVF84IHVjUmVzZXJ2ZWQ7Cn0gUEFSQU1fQ0hOX1JBTktfSU5GTywgKlBfUEFSQU1fQ0hOX1JBTktfSU5GTzsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9HRVRfQ0hOX0lORk8gewoJTFRFX1NBRkVfQ0hOX0lORk9fVCByTHRlU2FmZUNobkxpc3Q7CglQQVJBTV9DSE5fTE9BRF9JTkZPIHJFYWNoQ2huTG9hZFtNQVhfQ0hOX05VTV07CglCT09MRUFOIGZnRGF0YVJlYWR5Qml0OwoJUEFSQU1fQ0hOX1JBTktfSU5GTyByQ2huUmFua0xpc3RbTUFYX0NITl9OVU1dOwoJVUlOVF84IGF1Y1Jlc2VydmVkWzNdOwp9IFBBUkFNX0dFVF9DSE5fSU5GTywgKlBfUEFSQU1fR0VUX0NITl9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BSRUZFUl9DSE5fSU5GTyB7CglVSU5UXzggdWNDaGFubmVsOwoJVUlOVF8xNiB1MkFQTnVtU2NvcmU7CglVSU5UXzggdWNSZXNlcnZlZDsKfSBQQVJBTV9QUkVGRVJfQ0hOX0lORk8sICpQX1BBUkFNX1BSRUZFUl9DSE5fSU5GTzsKI2VuZGlmCgoKdHlwZWRlZiBzdHJ1Y3QgX1VNQUNfU1RBVDJfR0VUX1QgewoJVUlOVF8xNgl1MlBsZVJldlBnSGlmMEdyb3VwMDsKCVVJTlRfMTYJdTJQbGVSZXZQZ0NwdUdyb3VwMjsKCglVSU5UXzE2CXUyUHNlUmV2UGdIaWYwR3JvdXAwOwoJVUlOVF8xNgl1MlBzZVJldlBnSGlmMUdyb3VwMTsKCVVJTlRfMTYJdTJQc2VSZXZQZ0NwdUdyb3VwMjsKCVVJTlRfMTYJdTJQc2VSZXZQZ0xtYWMwR3JvdXAzOwoJVUlOVF8xNgl1MlBzZVJldlBnTG1hYzFHcm91cDQ7CglVSU5UXzE2CXUyUHNlUmV2UGdMbWFjMkdyb3VwNTsKCVVJTlRfMTYJdTJQc2VSZXZQZ1BsZUdyb3VwNjsKCglVSU5UXzE2CXUyUGxlU3J2UGdIaWYwR3JvdXAwOwoJVUlOVF8xNgl1MlBsZVNydlBnQ3B1R3JvdXAyOwoKCVVJTlRfMTYJdTJQc2VTcnZQZ0hpZjBHcm91cDA7CglVSU5UXzE2CXUyUHNlU3J2UGdIaWYxR3JvdXAxOwoJVUlOVF8xNgl1MlBzZVNydlBnQ3B1R3JvdXAyOwoJVUlOVF8xNgl1MlBzZVNydlBnTG1hYzBHcm91cDM7CglVSU5UXzE2CXUyUHNlU3J2UGdMbWFjMUdyb3VwNDsKCVVJTlRfMTYJdTJQc2VTcnZQZ0xtYWMyR3JvdXA1OwoJVUlOVF8xNgl1MlBzZVNydlBnUGxlR3JvdXA2OwoKCVVJTlRfMTYJdTJQbGVUb3RhbFBhZ2VOdW07CglVSU5UXzE2CXUyUGxlRnJlZVBhZ2VOdW07CglVSU5UXzE2CXUyUGxlRmZhTnVtOwoKCVVJTlRfMTYJdTJQc2VUb3RhbFBhZ2VOdW07CglVSU5UXzE2CXUyUHNlRnJlZVBhZ2VOdW07CglVSU5UXzE2CXUyUHNlRmZhTnVtOwp9IFVNQUNfU1RBVDJfR0VUX1QsICpQX1VNQUNfU1RBVDJfR0VUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfQ05NX1NUQVRVU19UIHsKCVVJTlRfOCAgICAgICAgICAgICAgZmdEYkRjTW9kZUVuOwoJVUlOVF84ICAgICAgICAgICAgICB1Y0NoTnVtQjA7CglVSU5UXzggICAgICAgICAgICAgIHVjQ2hOdW1CMTsKCVVJTlRfOCAgICAgICAgICAgICAgdXNSZXNlcnZlZDsKfSBDTk1fU1RBVFVTX1QsICpQX0NOTV9TVEFUVVNfVDsKCnR5cGVkZWYgc3RydWN0IF9DTk1fQ0hfTElTVF9UIHsKCVVJTlRfOCAgICAgICAgICAgICAgdWNDaE51bVs0XTsKfSBDTk1fQ0hfTElTVF9ULCAqUF9DTk1fQ0hfTElTVF9UOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQIFUgQiBMIEkgQyAgIEQgQSBUIEEKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRCBBIFQgQQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gQSBDIFIgTyBTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgIEYgVSBOIEMgVCBJIE8gTiAgIEQgRSBDIEwgQSBSIEEgVCBJIE8gTiBTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiBSb3V0aW5lcyB0byBzZXQgcGFyYW1ldGVycyBvciBxdWVyeSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qKioqKiBSb3V0aW5lcyBpbiB3bGFuX29pZC5jICoqKioqLwpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlOZXR3b3JrVHlwZXNTdXBwb3J0ZWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU5ldHdvcmtUeXBlSW5Vc2UoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE5ldHdvcmtUeXBlSW5Vc2UoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QnNzaWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWRMaXN0U2NhbihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWRMaXN0U2NhbkV4dChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWRMaXN0U2NhbkFkdihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCc3NpZExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJzc2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDb25uZWN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0U3NpZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTc2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlJbmZyYXN0cnVjdHVyZU1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0SW5mcmFzdHJ1Y3R1cmVNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QXV0aE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QXV0aE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgMApXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQcml2YWN5RmlsdGVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRQcml2YWN5RmlsdGVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RW5jcnlwdGlvblN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlFbmNyeXB0aW9uU3RhdHVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFkZFdlcChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UmVtb3ZlV2VwKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZGRLZXkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJlbW92ZUtleShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UmVsb2FkRGVmYXVsdHMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRUZXN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUNhcGFiaWxpdHkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUZyZXF1ZW5jeShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RnJlcXVlbmN5KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUF0aW1XaW5kb3coSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBdGltV2luZG93KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q2hhbm5lbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UnNzaShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UnNzaVRyaWdnZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSc3NpVHJpZ2dlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJ0c1RocmVzaG9sZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSdHNUaHJlc2hvbGQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5ODAyZG90MTFQb3dlclNhdmVQcm9maWxlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCSAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXQ4MDJkb3QxMVBvd2VyU2F2ZVByb2ZpbGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJICAgSU4gUFZPSUQgcHJTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVBta2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFBta2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVN1cHBvcnRlZFJhdGVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlEZXNpcmVkUmF0ZXMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGVzaXJlZFJhdGVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVBlcm1hbmVudEFkZHIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIElOIFBWT0lEIHB2UXVlcnlCdWYsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZkxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlDdXJyZW50QWRkcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2UXVlcnlCdWYsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZkxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQZXJtYW5lbnRBZGRyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICBJTiBQVk9JRCBwdlF1ZXJ5QnVmLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TGlua1NwZWVkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKI2lmIENGR19TVVBQT1JUX1FBX1RPT0wKI2lmIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFCldMQU5fU1RBVFVTIHdsYW5vaWRTZXRFZnVzQnVmZmVyTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgovKiNpZiAoQ0ZHX0VFUFJPTV9QQUdFX0FDQ0VTUyA9PSAxKSovCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVByb2Nlc3NBY2Nlc3NFZnVzZVJlYWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlQcm9jZXNzQWNjZXNzRWZ1c2VXcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUVmdXNlRnJlZUJsb2NrKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5R2V0VHhQb3dlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKLyojZW5kaWYqLwoKI2VuZGlmIC8qIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFICovCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJ4U3RhdGlzdGljcyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZEJzc0luZm9CYXNpYyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkRGV2SW5mb0FjdGl2ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZE1hbnVhbEFzc29jKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19TVVBQT1JUX1RYX0JGCldMQU5fU1RBVFVTCndsYW5vaWRUeEJmQWN0aW9uKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sCgkJICBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CldMQU5fU1RBVFVTIHdsYW5vaWRNdU1pbW9BY3Rpb24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQkJCU9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKV0xBTl9TVEFUVVMgd2xhbm9pZFN0YVJlY1VwZGF0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJCQkJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwpXTEFOX1NUQVRVUyB3bGFub2lkU3RhUmVjQkZVcGRhdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQkJCSAgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfVFhfQkYgKi8KI2VuZGlmIC8qIENGR19TVVBQT1JUX1FBX1RPT0wgKi8KCiNpZiBDRkdfU1VQUE9SVF9DQUxfUkVTVUxUX0JBQ0tVUF9UT19IT1NUCldMQU5fU1RBVFVTCndsYW5vaWRTZW5kQ2FsQmFja3VwVjJDbWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENhbEJhY2t1cChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUNhbEJhY2t1cFYyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNY3JSZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU1lbUR1bXAoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE1jcldyaXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RHJ2TWNyUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RHJ2TWNyV3JpdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTd0N0cmxSZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRTd0N0cmxXcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDaGlwQ29uZmlnKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlDaGlwQ29uZmlnKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRLZXlDZmcoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RWVwcm9tUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RWVwcm9tV3JpdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSZlRlc3RSeFN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSZlRlc3RUeFN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlPaWRJbnRlcmZhY2VWZXJzaW9uKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCUlOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlWZW5kb3JJZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU11bHRpY2FzdExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE11bHRpY2FzdExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UmN2RXJyb3IoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJjdk5vQnVmZmVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJjdkNyY0Vycm9yKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVN0YXRpc3RpY3MoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKI2lmZGVmIExJTlVYCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTdGF0aXN0aWNzRm9yTGludXgoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCiNlbmRpZgoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TWVkaWFTdHJlYW1Nb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TWVkaWFTdHJlYW1Nb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UmN2T2soSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRPayhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRFcnJvcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRPbmVDb2xsaXNpb24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlYbWl0TW9yZUNvbGxpc2lvbnMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRNYXhDb2xsaXNpb25zKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDdXJyZW50UGFja2V0RmlsdGVyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUN1cnJlbnRQYWNrZXRGaWx0ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBY3BpRGV2aWNlUG93ZXJTdGF0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QWNwaURldmljZVBvd2VyU3RhdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGlzYXNzb2NpYXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUZyYWdUaHJlc2hvbGQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEZyYWdUaHJlc2hvbGQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QWRIb2NNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZEhvY01vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QmVhY29uSW50ZXJ2YWwoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCZWFjb25JbnRlcnZhbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEN1cnJlbnRBZGRyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19UQ1BfSVBfQ0hLU1VNX09GRkxPQUQKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENTVU1PZmZsb2FkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYgLyogQ0ZHX1RDUF9JUF9DSEtTVU1fT0ZGTE9BRCAqLwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE5ldHdvcmtBZGRyZXNzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNYXhGcmFtZVNpemUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNYXhUb3RhbFNpemUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q3VycmVudExvb2thaGVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgovKiBSRiBUZXN0IHJlbGF0ZWQgQVBJcyAqLwpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0U2V0VGVzdE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRSZnRlc3RTZXRUZXN0SWNhcE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0U2V0QWJvcnRUZXN0TW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0UXVlcnlBdXRvVGVzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFJmdGVzdFNldEF1dG9UZXN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIE9VVCBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19TVVBQT1JUX1dBUEkKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdhcGlNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdhcGlBc3NvY0luZm8oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdhcGlLZXkoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfV1BTMgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0V1NDQXNzb2NJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgojaWYgQ0ZHX0VOQUJMRV9XQUtFVVBfT05fTEFOCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZGRXYWtldXBQYXR0ZXJuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSZW1vdmVXYWtldXBQYXR0ZXJuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUVuYWJsZVdha2V1cChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEVuYWJsZVdha2V1cChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZgoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFdpRmlXbW1Qc1Rlc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFR4QW1wZHUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBZGRiYVJlamVjdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU52cmFtUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TnZyYW1Xcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5Q2ZnU3JjVHlwZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RWVwcm9tVHlwZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENvdW50cnlDb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMgd2xhblNlbmRNZW1EdW1wQ21kKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuKTsKCiNpZiBDRkdfU0xUX1NVUFBPUlQKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVNMVFN0YXR1cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkVXBkYXRlU0xUTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfQURWQU5DRV9DT05UUk9MCldMQU5fU1RBVFVTCndsYW5vaWRBZHZDdHJsKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCU9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVdsYW5JbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCU9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TWliSW5mbyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRGd0xvZzJIb3N0KAoJSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJSU4gUFZPSUQgcHZTZXRCdWZmZXIsCglJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIDAKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE5vYVBhcmFtKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE9wcFBzUGFyYW0oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRVQXBzZFBhcmFtKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJUKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUJUKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRUeFBvd2VyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgMApXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCdFNpbmdsZUFudGVubmEoCglJTiAgUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJT1VUIFBWT0lEICAgICAgIHB2UXVlcnlCdWZmZXIsCglJTiAgVUlOVF8zMiAgICAgdTRRdWVyeUJ1ZmZlckxlbiwKCU9VVCBQVUlOVF8zMiAgICBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJ0U2luZ2xlQW50ZW5uYSgKCUlOICBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglJTiAgUFZPSUQgICAgICAgcHZTZXRCdWZmZXIsCglJTiAgVUlOVF8zMiAgICAgdTRTZXRCdWZmZXJMZW4sCglPVVQgUFVJTlRfMzIgICAgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UHRhKAoJSU4gIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCUlOICBQVk9JRCAgICAgICBwdlNldEJ1ZmZlciwKCUlOICBVSU5UXzMyICAgICB1NFNldEJ1ZmZlckxlbiwKCU9VVCBQVUlOVF8zMiAgICBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVB0YSgKCUlOICBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglPVVQgUFZPSUQgICAgICAgcHZRdWVyeUJ1ZmZlciwKCUlOICBVSU5UXzMyICAgICB1NFF1ZXJ5QnVmZmVyTGVuLAoJT1VUIFBVSU5UXzMyICAgIHB1NFF1ZXJ5SW5mb0xlbik7CiNlbmRpZgoKI2lmIENGR19FTkFCTEVfV0lGSV9ESVJFQ1QKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFAycE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGVmYXVsdEtleShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEd0a1Jla2V5RGF0YShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0U3RhcnRTY2hlZFNjYW4oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRTdG9wU2NoZWRTY2FuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCiNpZiBDRkdfTTBWRV9CQV9UT19EUklWRVIKV0xBTl9TVEFUVVMgd2xhbm9pZFJlc2V0QkFTY29yZWJvYXJkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4pOwojZW5kaWYKCiNpZiBDRkdfU1VQUE9SVF9CQVRDSF9TQ0FOCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCYXRjaFNjYW5SZXEoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QmF0Y2hTY2FuUmVzdWx0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwojZW5kaWYKCiNpZiBDRkdfU1VQUE9SVF9QQVNTUE9JTlQKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEhTMjBJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEludGVyd29ya2luZ0luZm8oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJvYW1pbmdDb25zb3J0aXVtSUVJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRIUzIwQnNzaWRQb29sKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmIC8qIENGR19TVVBQT1JUX1BBU1NQT0lOVCAqLwoKI2lmIENGR19TVVBQT1JUX1NOSUZGRVIKV0xBTl9TVEFUVVMgd2xhbm9pZFNldE1vbml0b3IoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWROb3RpZnlGd1N1c3BlbmQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsCgkJCQlJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJCQkJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojaWYgQ0ZHX1NVUFBPUlRfREJEQwpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGJkY0VuYWJsZSgKCQlJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsCgkJSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQlPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZiAvKiNpZiBDRkdfU1VQUE9SVF9EQkRDKi8KCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVNldFR4VGFyZ2V0UG93ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIChDRkdfU1VQUE9SVF9ERlNfTUFTVEVSID09IDEpCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVNldFJkZFJlcG9ydChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlTZXRSYWRhckRldGVjdE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCiNpZiBDRkdfQVVUT19DSEFOTkVMX1NFTF9TVVBQT1JUCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUx0ZVNhZmVDaGFubmVsKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKV0xBTl9TVEFUVVMKd2xhbkNhbGN1bGF0ZUFsbENoYW5uZWxEaXJ0aW5lc3MoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyKTsKVk9JRAp3bGFuSW5pdENobkxvYWRJbmZvQ2hhbm5lbExpc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyKTsKVUlOVF84CndsYW5HZXRDaGFubmVsSW5kZXgoSU4gVUlOVF84IGNoYW5uZWwpOwpVSU5UXzgKd2xhbkdldENoYW5uZWxOdW1Gcm9tSW5kZXgoSU4gVUlOVF84IHVjSWR4KTsKVk9JRAp3bGFuU29ydENoYW5uZWwoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkTGlua0Rvd24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRiBVIE4gQyBUIEkgTyBOIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCiNlbmRpZiAvKiBfV0xBTl9PSURfSCAqLwo=