LyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTYsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogKiBtZXQ6CiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogKiAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogKiAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKICogICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBMaW51eCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAogKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UCiAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMKICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgogKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCiAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCiAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqCiAqLwoKI2lmbmRlZiBfX1FDQU1FUkFfSU5URl9IX18KI2RlZmluZSBfX1FDQU1FUkFfSU5URl9IX18KCi8vIFN5c3RlbSBkZXBlbmRlbmNpZXMKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWVkaWEvbXNtYl9pc3AuaD4KCi8vIENhbWVyYSBkZXBlbmRlbmNpZXMKI2luY2x1ZGUgImNhbV90eXBlcy5oIgoKI2RlZmluZSBDQU1fUFJJVl9JT0NUTF9CQVNFIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyBNU01fQ0FNRVJBX1BSSVZfQ01EX01BWCkKdHlwZWRlZiBlbnVtIHsKICAgIC8qIHNlc3Npb24gYmFzZWQgcGFyYW1ldGVycyAqLwogICAgQ0FNX1BSSVZfUEFSTSA9IENBTV9QUklWX0lPQ1RMX0JBU0UsCiAgICAvKiBzZXNzaW9uIGJhc2VkIGFjdGlvbjogZG8gYXV0byBmb2N1cy4qLwogICAgQ0FNX1BSSVZfRE9fQVVUT19GT0NVUywKICAgIC8qIHNlc3Npb24gYmFzZWQgYWN0aW9uOiBjYW5jZWwgYXV0byBmb2N1cy4qLwogICAgQ0FNX1BSSVZfQ0FOQ0VMX0FVVE9fRk9DVVMsCiAgICAvKiBzZXNzaW9uIGJhc2VkIGFjdGlvbjogcHJlcGFyZSBmb3Igc25hcHNob3QuKi8KICAgIENBTV9QUklWX1BSRVBBUkVfU05BUFNIT1QsCiAgICAvKiBzeW5jIHN0cmVhbSBpbmZvLiovCiAgICBDQU1fUFJJVl9TVFJFQU1fSU5GT19TWU5DLAogICAgLyogc3RyZWFtIGJhc2VkIHBhcmFtZXRlcnMqLwogICAgQ0FNX1BSSVZfU1RSRUFNX1BBUk0sCiAgICAvKiBzdGFydCBaU0wgc25hcHNob3QuKi8KICAgIENBTV9QUklWX1NUQVJUX1pTTF9TTkFQU0hPVCwKICAgIC8qIHN0b3AgWlNMIHNuYXBzaG90LiovCiAgICBDQU1fUFJJVl9TVE9QX1pTTF9TTkFQU0hPVCwKICAgIC8qIGV2ZW50IGZvciByZWxhdGVkIHNlbnNvcnMgc3luY2hyb25pemF0aW9uLiAqLwogICAgQ0FNX1BSSVZfU1lOQ19SRUxBVEVEX1NFTlNPUlMsCiAgICAvKiBmbHVzaCAqLwogICAgQ0FNX1BSSVZfRkxVU0gKfSBjYW1fcHJpdmF0ZV9pb2N0bF9lbnVtX3Q7Cgp0eXBlZGVmIGVudW0gewogICAgLyogc3RhcnQgc3luY2luZyBmb3IgcmVsYXRlZCBjYW1lcmFzICovCiAgICBDQU1fU1lOQ19SRUxBVEVEX1NFTlNPUlNfT04gPSAxLAogICAgLyogc3RvcCBzeW5jaW5nIGZvciByZWxhdGVkIGNhbWVyYXMgKi8KICAgIENBTV9TWU5DX1JFTEFURURfU0VOU09SU19PRkYKfSBjYW1fc3luY19yZWxhdGVkX3NlbnNvcnNfY29udHJvbF90OwoKdHlwZWRlZiBlbnVtIHsKICAgIC8qIERyaXZpbmcgY2FtZXJhIG9mIHRoZSByZWxhdGVkIGNhbWVyYSBzdWItc3lzdGVtICovCiAgICAvKiBDZXJ0YWluIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9ubHkgZm9yIHByaW1hcnkgY2FtZXJhCiAgICAgICBzdWNoIGFzIGRpc3BsYXkgbW9kZSBmb3IgcHJldmlldywgYXV0b2ZvY3VzIGV0YwogICAgICAgSW4gY2VydGFpbiBjb25maWd1cmF0aW9ucyBmb3IgZWcuIHdoZW4gb3B0aWNhbCB6b29tCiAgICAgICBsaW1pdCBpcyByZWFjaGVkLCBBdXggQ2FtZXJhIHdvdWxkIGJlY29tZQogICAgICAgdGhlIGRyaXZpbmcgY2FtZXJhIGFuZCB0aGVyZSB3aWxsIGJlIHJvbGUgc3dpdGNoLiovCiAgICBDQU1fTU9ERV9QUklNQVJZID0gMCwKICAgIC8qIE5vbi1kcml2aW5nIGNhbWVyYSBvZiB0aGUgcmVsYXRlZCBjYW1lcmEgc3ViLXN5c3RlbQogICAgICAgbm8gZGlzcGxheSBtb2RlIHNldCBmb3Igc2Vjb25kYXJ5IGNhbWVyYSAqLwogICAgQ0FNX01PREVfU0VDT05EQVJZCn0gY2FtX3N5bmNfbW9kZV90OwoKLyogUGF5bG9hZCBmb3Igc2VuZGluZyBidW5kbGluZyBpbmZvIHRvIGJhY2tlbmQgKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgY2FtX3N5bmNfcmVsYXRlZF9zZW5zb3JzX2NvbnRyb2xfdCBzeW5jX2NvbnRyb2w7CiAgICBjYW1fc3luY190eXBlX3QgdHlwZTsKICAgIGNhbV9zeW5jX21vZGVfdCBtb2RlOwogICAgLyogc2Vzc2lvbiBJZCBvZiB0aGUgb3RoZXIgY2FtZXJhIHNlc3Npb24KICAgICAgIExpbmtpbmcgd2lsbCBiZSBkb25lIHdpdGggdGhpcyBzZXNzaW9uIGluIHRoZQogICAgICAgYmFja2VuZCAqLwogICAgdWludDMyX3QgcmVsYXRlZF9zZW5zb3Jfc2Vzc2lvbl9pZDsKICAgIHVpbnQ4X3QgaXNfZnJhbWVfc3luY19lbmFibGVkOwp9Y2FtX3N5bmNfcmVsYXRlZF9zZW5zb3JzX2V2ZW50X2luZm9fdDsKCi8qIFJlbGF0ZWQgY2FtZXJhIHNlbnNvciBzcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhICovCi8vIEFsaWduIGJ5dGVzIGFjY29yZGluZyB0byBBUEkgZG9jdW1lbnQuCiNwcmFnbWEgcGFjaygyKQp0eXBlZGVmIHN0cnVjdCB7CiAgICAvKiBGb2NhbCBsZW5ndGggaW4gcGl4ZWxzIEAgY2FsaWJyYXRpb24gcmVzb2x1dGlvbi4qLwogICAgZmxvYXQgICAgICAgbm9ybWFsaXplZF9mb2NhbF9sZW5ndGg7CiAgICAvKiBOYXRpdmUgc2Vuc29yIHJlc29sdXRpb24gVyB0aGF0IHdhcyB1c2VkIHRvIGNhcHR1cmUgY2FsaWJyYXRpb24gaW1hZ2UgKi8KICAgIHVpbnQxNl90ICAgIG5hdGl2ZV9zZW5zb3JfcmVzb2x1dGlvbl93aWR0aDsKICAgIC8qIE5hdGl2ZSBzZW5zb3IgcmVzb2x1dGlvbiBIIHRoYXQgd2FzIHVzZWQgdG8gY2FwdHVyZSBjYWxpYnJhdGlvbiBpbWFnZSAqLwogICAgdWludDE2X3QgICAgbmF0aXZlX3NlbnNvcl9yZXNvbHV0aW9uX2hlaWdodDsKICAgIC8qIEltYWdlIHNpemUgVyB1c2VkIGludGVybmFsbHkgYnkgY2FsaWJyYXRpb24gdG9vbCAqLwogICAgdWludDE2X3QgICAgY2FsaWJyYXRpb25fc2Vuc29yX3Jlc29sdXRpb25fd2lkdGg7CiAgICAvKiBJbWFnZSBzaXplIEggdXNlZCBpbnRlcm5hbGx5IGJ5IGNhbGlicmF0aW9uIHRvb2wgKi8KICAgIHVpbnQxNl90ICAgIGNhbGlicmF0aW9uX3NlbnNvcl9yZXNvbHV0aW9uX2hlaWdodDsKICAgIC8qIEZvY2FsIGxlbmd0aCByYXRpbyBAIENhbGlicmF0aW9uICovCiAgICBmbG9hdCAgICAgICBmb2NhbF9sZW5ndGhfcmF0aW87Cn1jYW1fcmVsYXRlZF9zZW5zb3JfY2FsaWJyYXRpb25fZGF0YV90OwojcHJhZ21hIHBhY2soKQoKLyogUmVsYXRlZCBDYW1lcmEgU3lzdGVtIENhbGlicmF0aW9uIGRhdGEKICAgQ2FsaWJyYXRpb24gZGF0YSBmb3IgdGhlIGVudGlyZSByZWxhdGVkIGNhbSBzdWItc3lzdGVtIGlzCiAgIGluIGEgc2hhcmVkIEVFUFJPTS4gV2UgaGF2ZSAyIGZpZWxkcyB3aGljaCBhcmUgc3BlY2lmaWMgdG8KICAgZWFjaCBzZW5zb3IgZm9sbG93ZWQgYnkgYSBzZXQgb2YgY29tbW9uIGNhbGlicmF0aW9uIG9mIHRoZQogICBlbnRpcmUgcmVsYXRlZCBjYW0gc3lzdGVtKi8KLy8gQWxpZ24gYnl0ZXMgYWNjb3JkaW5nIHRvIEFQSSBkb2N1bWVudC4KI3ByYWdtYSBwYWNrKDIpCnR5cGVkZWYgc3RydWN0IHsKICAgIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIHVpbnQzMl90ICAgIGNhbGlicmF0aW9uX2Zvcm1hdF92ZXJzaW9uOwogICAgLyogTWFpbiBDYW1lcmEgU2Vuc29yIHNwZWNpZmljIGNhbGlicmF0aW9uICovCiAgICBjYW1fcmVsYXRlZF9zZW5zb3JfY2FsaWJyYXRpb25fZGF0YV90ICBtYWluX2NhbV9zcGVjaWZpY19jYWxpYnJhdGlvbjsKICAgIC8qIEF1eCBDYW1lcmEgU2Vuc29yIHNwZWNpZmljIGNhbGlicmF0aW9uICovCiAgICBjYW1fcmVsYXRlZF9zZW5zb3JfY2FsaWJyYXRpb25fZGF0YV90ICBhdXhfY2FtX3NwZWNpZmljX2NhbGlicmF0aW9uOwogICAgLyogUmVsYXRpdmUgdmlld3BvaW50IG1hdGNoaW5nIG1hdHJpeCB3LnIudCBNYWluICovCiAgICBmbG9hdCAgICAgIHJlbGF0aXZlX3JvdGF0aW9uX21hdHJpeFtSRUxDQU1fQ0FMSUJfUk9UX01BVFJJWF9NQVhdOwogICAgLyogUmVsYXRpdmUgZ2VvbWV0cmljIHN1cmZhY2UgZGVzY3JpcHRpb24gcGFyYW1ldGVycyAqLwogICAgZmxvYXQgICAgICByZWxhdGl2ZV9nZW9tZXRyaWNfc3VyZmFjZV9wYXJhbWV0ZXJzWwogICAgICAgICAgICBSRUxDQU1fQ0FMSUJfU1VSRkFDRV9QQVJNU19NQVhdOwogICAgLyogUmVsYXRpdmUgb2Zmc2V0IG9mIHNlbnNvciBjZW50ZXIgZnJvbSBvcHRpY2FsIGF4aXMgYWxvbmcgaG9yaXpvbnRhbCBkaW1lbnNpb24gKi8KICAgIGZsb2F0ICAgICAgcmVsYXRpdmVfcHJpbmNpcGxlX3BvaW50X3hfb2Zmc2V0OwogICAgLyogUmVsYXRpdmUgb2Zmc2V0IG9mIHNlbnNvciBjZW50ZXIgZnJvbSBvcHRpY2FsIGF4aXMgYWxvbmcgdmVydGljYWwgZGltZW5zaW9uICovCiAgICBmbG9hdCAgICAgIHJlbGF0aXZlX3ByaW5jaXBsZV9wb2ludF95X29mZnNldDsKICAgIC8qIDA9TWFpbiBDYW1lcmEgaXMgb24gdGhlIGxlZnQgb2YgQXV4OyAxPU1haW4gQ2FtZXJhIGlzIG9uIHRoZSByaWdodCBvZiBBdXggKi8KICAgIHVpbnQxNl90ICAgcmVsYXRpdmVfcG9zaXRpb25fZmxhZzsKICAgIC8qIENhbWVyYSBzZXBhcmF0aW9uIGluIG1tICovCiAgICBmbG9hdCAgICAgIHJlbGF0aXZlX2Jhc2VsaW5lX2Rpc3RhbmNlOwogICAgLyogbWFpbiBzZW5zb3Igc2V0dGluZyBkdXJpbmcgY2FsOiAwLW5vbmUsIDEtaG9yLW1pcnJvciwgMi12ZXItZmxpcCwgMy1ib3RoICovCiAgICB1aW50MTZfdCAgIG1haW5fc2Vuc29yX21pcnJvcl9mbGlwX3NldHRpbmc7CiAgICAvKiBhdXggc2Vuc29yIHNldHRpbmcgZHVyaW5nIGNhbDogMC1ub25lLCAxLWhvci1taXJyb3IsIDItdmVyLWZsaXAsIDMtYm90aCAqLwogICAgdWludDE2X3QgICBhdXhfc2Vuc29yX21pcnJvcl9mbGlwX3NldHRpbmc7CiAgICAvKiBtb2R1bGUgb3JpZW50YXRpb24gZHVyaW5nIGNhbDogMC1zZW5zb3JzIGluIGxhbmRzY2FwZSwgMS1zZW5zb3JzIGluIHBvcnRyYWl0ICovCiAgICB1aW50MTZfdCAgIG1vZHVsZV9vcmllbnRhdGlvbl9kdXJpbmdfY2FsaWJyYXRpb247CiAgICAvKiBjYWwgaW1hZ2VzIHJlcXVpcmVkIHJvdGF0aW9uOiAwLW5vLCAxLTkwIGRlZ3JlZXMgcmlnaHQsIDItOTAgZGVncmVlcyBsZWZ0ICovCiAgICB1aW50MTZfdCAgIHJvdGF0aW9uX2ZsYWc7CiAgICAvKiBBRUMgc3luYyBPVFAgZGF0YSAqLwogICAgLyogQUVDIHN5bmMgYnJpZ2h0bmVzcyByYXRpb24uIEZpeGVkIFBvaW50IFExMCovCiAgICBpbnQxNl90ICAgIGJyaWdodG5lc3NfcmF0aW87CiAgICAvKiBSZWZlcmVuY2UgbW9ubyBnYWluIHZhbHVlIG9idGFpbmVkIGZyb20gc2V0dXAgc3RhZ2UgYW5kIHVzZWQgZHVyaW5nIGNhbGlicmF0aW9uIHN0YWdlICovCiAgICAvKiBGaXhlZCBQb2ludCBRMTAgKi8KICAgIGludDE2X3QgICAgcmVmX21vbm9fZ2FpbjsKICAgIC8qIFJlZmVyZW5jZSBtb25vIGxpbmUgY291bnQgb2J0YWluZWQgZnJvbSBzZXR1cCBzdGFnZSBhbmQgdXNlZCBkdXJpbmcgY2FsaWJyYXRpb24gc3RhZ2UgKi8KICAgIHVpbnQxNl90ICAgcmVmX21vbm9fbGluZWNvdW50OwogICAgLyogUmVmZXJlbmNlIGJheWVyIGdhaW4gdmFsdWUgb2J0YWluZWQgZnJvbSBzZXR1cCBzdGFnZSBhbmQgdXNlZCBkdXJpbmcgY2FsaWJyYXRpb24gc3RhZ2UgKi8KICAgIC8qIEZpeGVkIFBvaW50IFExMCAqLwogICAgaW50MTZfdCAgICByZWZfYmF5ZXJfZ2FpbjsKICAgIC8qIFJlZmVyZW5jZSBiYXllciBsaW5lIGNvdW50IG9idGFpbmVkIGZyb20gc2V0dXAgc3RhZ2UgYW5kIHVzZWQgZHVyaW5nIGNhbGlicmF0aW9uIHN0YWdlICovCiAgICB1aW50MTZfdCAgIHJlZl9iYXllcl9saW5lY291bnQ7CiAgICAvKiBSZWZlcmVuY2UgYmF5ZXIgY29sb3IgdGVtcGVyYXR1cmUgKi8KICAgIHVpbnQxNl90ICAgcmVmX2JheWVyX2NvbG9yX3RlbXBlcmF0dXJlOwogICAgLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KICAgIGZsb2F0ICAgICAgcmVzZXJ2ZWRbUkVMQ0FNX0NBTElCX1JFU0VSVkVEX01BWF07Cn0gY2FtX3JlbGF0ZWRfc3lzdGVtX2NhbGlicmF0aW9uX2RhdGFfdDsKI3ByYWdtYSBwYWNrKCkKCnR5cGVkZWYgc3RydWN0IHsKICB1aW50MzJfdCBkZWZhdWx0X3NlbnNvcl9mbGlwOwogIHVpbnQzMl90IHNlbnNvcl9tb3VudF9hbmdsZTsKICBjYW1fcmVsYXRlZF9zeXN0ZW1fY2FsaWJyYXRpb25fZGF0YV90IG90cF9jYWxpYnJhdGlvbl9kYXRhOwp9IGNhbV9qcGVnX21ldGFkYXRhX3Q7CgovKiBjYXBhYmlsaXR5IHN0cnVjdCBkZWZpbml0aW9uIGZvciBIQUwgMSovCnR5cGVkZWYgc3RydWN0ewogICAgY2FtX2hhbF92ZXJzaW9uX3QgdmVyc2lvbjsKCiAgICBjYW1fcG9zaXRpb25fdCBwb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnNvciBwb3NpdGlvbjogZnJvbnQsIGJhY2sgKi8KCiAgICB1aW50OF90IGF1dG9faGRyX3N1cHBvcnRlZDsKCiAgICB1aW50MTZfdCBpc1duclN1cHBvcnRlZDsKICAgIC8qIHN1cHBvcnRlZCBpc28gbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfaXNvX21vZGVzX2NudDsKICAgIGNhbV9pc29fbW9kZV90eXBlIHN1cHBvcnRlZF9pc29fbW9kZXNbQ0FNX0lTT19NT0RFX01BWF07CgogICAgLyogc3VwcG9ydGVkIGZsYXNoIG1vZGVzICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX2ZsYXNoX21vZGVzX2NudDsKICAgIGNhbV9mbGFzaF9tb2RlX3Qgc3VwcG9ydGVkX2ZsYXNoX21vZGVzW0NBTV9GTEFTSF9NT0RFX01BWF07CgogICAgc2l6ZV90IHpvb21fcmF0aW9fdGJsX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBzaXplIGZvciB6b29tIHJhdGlvcyAqLwogICAgdWludDMyX3Qgem9vbV9yYXRpb190YmxbTUFYX1pPT01TX0NOVF07ICAgICAgICAgICAgICAgICAvKiB6b29tIHJhdGlvcyB0YWJsZSAqLwoKICAgIC8qIHN1cHBvcnRlZCBlZmZlY3QgbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfZWZmZWN0c19jbnQ7CiAgICBjYW1fZWZmZWN0X21vZGVfdHlwZSBzdXBwb3J0ZWRfZWZmZWN0c1tDQU1fRUZGRUNUX01PREVfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgc2NlbmUgbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfc2NlbmVfbW9kZXNfY250OwogICAgY2FtX3NjZW5lX21vZGVfdHlwZSBzdXBwb3J0ZWRfc2NlbmVfbW9kZXNbQ0FNX1NDRU5FX01PREVfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgYXV0byBleHBvc3VyZSBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9hZWNfbW9kZXNfY250OwogICAgY2FtX2F1dG9fZXhwb3N1cmVfbW9kZV90eXBlIHN1cHBvcnRlZF9hZWNfbW9kZXNbQ0FNX0FFQ19NT0RFX01BWF07CgogICAgc2l6ZV90IGZwc19yYW5nZXNfdGJsX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcHMgcmFuZ2VzIHRhYmxlIHNpemUgKi8KICAgIGNhbV9mcHNfcmFuZ2VfdCBmcHNfcmFuZ2VzX3RibFtNQVhfU0laRVNfQ05UXTsgICAgICAgICAgLyogZnBzIHJhbmdlcyB0YWJsZSAqLwoKICAgIC8qIHN1cHBvcnRlZCBhbnRpYmFuZGluZyBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9hbnRpYmFuZGluZ3NfY250OwogICAgY2FtX2FudGliYW5kaW5nX21vZGVfdHlwZSBzdXBwb3J0ZWRfYW50aWJhbmRpbmdzW0NBTV9BTlRJQkFORElOR19NT0RFX01BWF07CgogICAgLyogc3VwcG9ydGVkIHdoaXRlIGJhbGFuY2UgbW9kZXMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfd2hpdGVfYmFsYW5jZXNfY250OwogICAgY2FtX3diX21vZGVfdHlwZSBzdXBwb3J0ZWRfd2hpdGVfYmFsYW5jZXNbQ0FNX1dCX01PREVfTUFYXTsKCiAgICAvKiBDYXBhYmlsaXR5IGxpc3Qgb2Ygc3VwcG9ydGVkIGluc2Vuc29yIEhEUiB0eXBlcwogICAgICogQmFja2VuZCBpcyBleHBlY3RlZCB0byBmaWxsIGluIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGFuZCBzZXQgYXBwcm9wcmlhdGUKICAgICAqIGNvdW50LCBzZWUgY2FtX3NlbnNvcl9oZHJfdHlwZV90IGZvciB2YWxpZCB0eXBlcwogICAgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfc2Vuc29yX2hkcl90eXBlc19jbnQ7CiAgICBjYW1fc2Vuc29yX2hkcl90eXBlX3Qgc3VwcG9ydGVkX3NlbnNvcl9oZHJfdHlwZXNbQ0FNX1NFTlNPUl9IRFJfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgbWFudWFsIHdiIGNjdCAqLwogICAgaW50MzJfdCBtaW5fd2JfY2N0OwogICAgaW50MzJfdCBtYXhfd2JfY2N0OwoKICAgIC8qIHN1cHBvcnRlZCBtYW51YWwgd2IgcmdiIGdhaW5zICovCiAgICBmbG9hdCBtaW5fd2JfZ2FpbjsKICAgIGZsb2F0IG1heF93Yl9nYWluOwoKICAgIC8qIHN1cHBvcnRlZCBmb2N1cyBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9mb2N1c19tb2Rlc19jbnQ7CiAgICBjYW1fZm9jdXNfbW9kZV90eXBlIHN1cHBvcnRlZF9mb2N1c19tb2Rlc1tDQU1fRk9DVVNfTU9ERV9NQVhdOwoKICAgIC8qIHN1cHBvcnRlZCBtYW51YWwgZm9jdXMgcG9zaXRpb24gKi8KICAgIGZsb2F0IG1pbl9mb2N1c19wb3NbQ0FNX01BTlVBTF9GT0NVU19NT0RFX01BWF07CiAgICBmbG9hdCBtYXhfZm9jdXNfcG9zW0NBTV9NQU5VQUxfRk9DVVNfTU9ERV9NQVhdOwoKICAgIGludDMyX3QgZXhwb3N1cmVfY29tcGVuc2F0aW9uX21pbjsgICAgICAgLyogbWluIHZhbHVlIG9mIGV4cG9zdXJlIGNvbXBlbnNhdGlvbiBpbmRleCAqLwogICAgaW50MzJfdCBleHBvc3VyZV9jb21wZW5zYXRpb25fbWF4OyAgICAgICAvKiBtYXggdmFsdWUgb2YgZXhwb3N1cmUgY29tcGVuc2F0aW9uIGluZGV4ICovCiAgICBpbnQzMl90IGV4cG9zdXJlX2NvbXBlbnNhdGlvbl9kZWZhdWx0OyAgIC8qIGRlZmF1bHQgdmFsdWUgb2YgZXhwb3N1cmUgY29tcGVuc2F0aW9uIGluZGV4ICovCiAgICBmbG9hdCBleHBvc3VyZV9jb21wZW5zYXRpb25fc3RlcDsKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgZXhwX2NvbXBlbnNhdGlvbl9zdGVwOyAgICAvKiBleHBvc3VyZSBjb21wZW5zYXRpb24gc3RlcCB2YWx1ZSAqLwoKICAgIHVpbnQ4X3QgdmlkZW9fc3RhYmxpemF0aW9uX3N1cHBvcnRlZDsgLyogZmxhZyBpZCB2aWRlbyBzdGFibGl6YXRpb24gaXMgc3VwcG9ydGVkICovCgogICAgc2l6ZV90IHBpY3R1cmVfc2l6ZXNfdGJsX2NudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwaWN0dXJlIHNpemVzIHRhYmxlIHNpemUgKi8KICAgIGNhbV9kaW1lbnNpb25fdCBwaWN0dXJlX3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgICAgICAgLyogcGljdHVyZSBzaXplcyB0YWJsZSAqLwogICAgLyogVGhlIG1pbmltdW0gZnJhbWUgZHVyYXRpb24gdGhhdCBpcyBzdXBwb3J0ZWQgZm9yIGVhY2gKICAgICAqIHJlc29sdXRpb24gaW4gYXZhaWxhYmxlUHJvY2Vzc2VkU2l6ZXMuIFNob3VsZCBjb3JyZXNwb25kCiAgICAgKiB0byB0aGUgZnJhbWUgZHVyYXRpb24gd2hlbiBvbmx5IHRoYXQgcHJvY2Vzc2VkIHN0cmVhbQogICAgICogaXMgYWN0aXZlLCB3aXRoIGFsbCBwcm9jZXNzaW5nIHNldCB0byBGQVNUICovCiAgICBpbnQ2NF90IHBpY3R1cmVfbWluX2R1cmF0aW9uW01BWF9TSVpFU19DTlRdOwoKICAgIC8qIGNhcGFiaWxpdGllcyBzcGVjaWZpYyB0byBIQUwgMSAqLwoKICAgIGludDMyX3QgbW9kZXNfc3VwcG9ydGVkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWFzayBvZiBtb2RlcyBzdXBwb3J0ZWQ6IDJELCAzRCAqLwogICAgdWludDMyX3Qgc2Vuc29yX21vdW50X2FuZ2xlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5zb3IgbW91bnQgYW5nbGUgKi8KCiAgICBmbG9hdCBmb2NhbF9sZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvY2FsIGxlbmd0aCAqLwogICAgZmxvYXQgaG9yX3ZpZXdfYW5nbGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBob3Jpem9udGFsIHZpZXcgYW5nbGUgKi8KICAgIGZsb2F0IHZlcl92aWV3X2FuZ2xlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVydGljYWwgdmlldyBhbmdsZSAqLwoKICAgIHNpemVfdCBwcmV2aWV3X3NpemVzX3RibF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJldmlldyBzaXplcyB0YWJsZSBzaXplICovCiAgICBjYW1fZGltZW5zaW9uX3QgcHJldmlld19zaXplc190YmxbTUFYX1NJWkVTX0NOVF07ICAgICAgIC8qIHByZWlldyBzaXplcyB0YWJsZSAqLwoKICAgIHNpemVfdCB2aWRlb19zaXplc190YmxfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmlkZW8gc2l6ZXMgdGFibGUgc2l6ZSAqLwogICAgY2FtX2RpbWVuc2lvbl90IHZpZGVvX3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgICAgICAgICAvKiB2aWRlbyBzaXplcyB0YWJsZSAqLwoKCiAgICBzaXplX3QgbGl2ZXNuYXBzaG90X3NpemVzX3RibF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxpdmVzbmFwc2hvdCBzaXplcyB0YWJsZSBzaXplICovCiAgICBjYW1fZGltZW5zaW9uX3QgbGl2ZXNuYXBzaG90X3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgIC8qIGxpdmVzbmFwc2hvdCBzaXplcyB0YWJsZSAqLwoKICAgIHNpemVfdCB2aGRyX2xpdmVzbmFwc2hvdF9zaXplc190YmxfY250OyAgICAgICAgICAgICAgICAgLyogdmhkcl9saXZlc25hcHNob3Qgc2l6ZXMgdGFibGUgc2l6ZSAqLwogICAgY2FtX2RpbWVuc2lvbl90IHZoZHJfbGl2ZXNuYXBzaG90X3NpemVzX3RibFtNQVhfU0laRVNfQ05UXTsgIC8qIHZoZHJfbGl2ZXNuYXBzaG90IHNpemVzIHRhYmxlICovCgogICAgc2l6ZV90IGhmcl90YmxfY250OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBzaXplIGZvciBIRlIgKi8KICAgIGNhbV9oZnJfaW5mb190IGhmcl90YmxbQ0FNX0hGUl9NT0RFX01BWF07ICAgICAgICAgICAgICAgLyogSEZSIHRhYmxlICovCgogICAgc2l6ZV90IHp6aGRyX3NpemVzX3RibF9jbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgcmVzb2x1dGlvbnMgaW4genpIRFIgbW9kZSovCiAgICBjYW1fZGltZW5zaW9uX3QgenpoZHJfc2l6ZXNfdGJsW01BWF9TSVpFU19DTlRdOyAgICAgICAgIC8qIFRhYmxlIGZvciBaWkhEUiBzdXBwb3J0ZWQgc2l6ZXMgKi8KCiAgICAvKiBzdXBwb3J0ZWQgcHJldmlldyBmb3JtYXRzICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX3ByZXZpZXdfZm10X2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfcHJldmlld19mbXRzW0NBTV9GT1JNQVRfTUFYXTsKCiAgICAvKiBzdXBwb3J0ZWQgcGljdHVyZSBmb3JtYXRzICovCiAgICBzaXplX3Qgc3VwcG9ydGVkX3BpY3R1cmVfZm10X2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfcGljdHVyZV9mbXRzW0NBTV9GT1JNQVRfTUFYXTsKCiAgICB1aW50OF90IG1heF9kb3duc2NhbGVfZmFjdG9yOwoKICAgIC8qIGRpbWVuc2lvbiBhbmQgc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQgb2YgcmF3IGR1bXAgZnJvbSBjYW1pZiAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9yYXdfZGltX2NudDsKICAgIGNhbV9kaW1lbnNpb25fdCByYXdfZGltW01BWF9TSVpFU19DTlRdOwogICAgc2l6ZV90IHN1cHBvcnRlZF9yYXdfZm10X2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfcmF3X2ZtdHNbQ0FNX0ZPUk1BVF9NQVhdOwogICAgLyogVGhlIG1pbmltdW0gZnJhbWUgZHVyYXRpb24gdGhhdCBpcyBzdXBwb3J0ZWQgZm9yIGFib3ZlCiAgICAgICByYXcgcmVzb2x1dGlvbiAqLwogICAgaW50NjRfdCByYXdfbWluX2R1cmF0aW9uW01BWF9TSVpFU19DTlRdOwoKICAgIC8qIDNBIHZlcnNpb24qLwogICAgY2FtX3EzYV92ZXJzaW9uX3QgcTNhX3ZlcnNpb247CiAgICAvKiBzdXBwb3J0ZWQgZm9jdXMgYWxnb3JpdGhtcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9mb2N1c19hbGdvc19jbnQ7CiAgICBjYW1fZm9jdXNfYWxnb3JpdGhtX3R5cGUgc3VwcG9ydGVkX2ZvY3VzX2FsZ29zW0NBTV9GT0NVU19BTEdPX01BWF07CgoKICAgIHVpbnQ4X3QgYXV0b193Yl9sb2NrX3N1cHBvcnRlZDsgICAgICAgLyogZmxhZyBpZiBhdXRvIHdoaXRlIGJhbGFuY2UgbG9jayBpcyBzdXBwb3J0ZWQgKi8KICAgIHVpbnQ4X3Qgem9vbV9zdXBwb3J0ZWQ7ICAgICAgICAgICAgICAgLyogZmxhZyBpZiB6b29tIGlzIHN1cHBvcnRlZCAqLwogICAgdWludDhfdCBzbW9vdGhfem9vbV9zdXBwb3J0ZWQ7ICAgICAgICAvKiBmbGFnIGlmIHNtb290aCB6b29tIGlzIHN1cHBvcnRlZCAqLwogICAgdWludDhfdCBhdXRvX2V4cG9zdXJlX2xvY2tfc3VwcG9ydGVkOyAvKiBmbGFnIGlmIGF1dG8gZXhwb3N1cmUgbG9jayBpcyBzdXBwb3J0ZWQgKi8KICAgIHVpbnQ4X3QgdmlkZW9fc25hcHNob3Rfc3VwcG9ydGVkOyAgICAgLyogZmxhZyBpZiB2aWRlbyBzbmFwc2hvdCBpcyBzdXBwb3J0ZWQgKi8KCiAgICB1aW50OF90IG1heF9udW1fcm9pOyAgICAgICAgICAgICAgICAgIC8qIG1heCBudW1iZXIgb2Ygcm9pIGNhbiBiZSBkZXRlY3RlZCAqLwogICAgdWludDhfdCBtYXhfbnVtX2ZvY3VzX2FyZWFzOyAgICAgICAgICAvKiBtYXggbnVtIG9mIGZvY3VzIGFyZWFzICovCiAgICB1aW50OF90IG1heF9udW1fbWV0ZXJpbmdfYXJlYXM7ICAgICAgIC8qIG1heCBudW0gb3BmIG1ldGVyaW5nIGFyZWFzICovCiAgICB1aW50OF90IG1heF96b29tX3N0ZXA7ICAgICAgICAgICAgICAgIC8qIG1heCB6b29tIHN0ZXAgdmFsdWUgKi8KCiAgICAvKiBRQ09NIHNwZWNpZmljIGNvbnRyb2wgKi8KICAgIGNhbV9jb250cm9sX3JhbmdlX3QgYnJpZ2h0bmVzc19jdHJsOyAgLyogYnJpZ2h0bmVzcyAqLwogICAgY2FtX2NvbnRyb2xfcmFuZ2VfdCBzaGFycG5lc3NfY3RybDsgICAvKiBzaGFycG5lc3MgKi8KICAgIGNhbV9jb250cm9sX3JhbmdlX3QgY29udHJhc3RfY3RybDsgICAgLyogY29udHJhc3QgKi8KICAgIGNhbV9jb250cm9sX3JhbmdlX3Qgc2F0dXJhdGlvbl9jdHJsOyAgLyogc2F0dXJhdGlvbiAqLwogICAgY2FtX2NvbnRyb2xfcmFuZ2VfdCBzY2VfY3RybDsgICAgICAgICAvKiBza2ludG9uZSBlbmhhbmNlbWVudCBmYWN0b3IgKi8KCiAgICAvKiBRQ09NIEhEUiBzcGVjaWZpYyBjb250cm9sLiBJbmRpY2F0ZXMgbnVtYmVyIG9mIGZyYW1lcyBhbmQgZXhwb3N1cmUgbmVlZHMgZm9yIHRoZSBmcmFtZXMgKi8KICAgIGNhbV9oZHJfYnJhY2tldGluZ19pbmZvX3QgaGRyX2JyYWNrZXRpbmdfc2V0dGluZzsKCiAgICBjYW1fZmVhdHVyZV9tYXNrX3QgcWNvbV9zdXBwb3J0ZWRfZmVhdHVyZV9tYXNrOyAvKiBtYXNrIG9mIHFjb20gc3BlY2lmaWMgZmVhdHVyZXMgc3VwcG9ydGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3VjaCBhcyBDQU1fUUNPTV9GRUFUVVJFX1NVUFBPUlRFRF9GQUNFX0RFVEVDVElPTiovCiAgICBjYW1fcGFkZGluZ19pbmZvX3QgcGFkZGluZ19pbmZvOyAgICAgIC8qIHBhZGRpbmcgaW5mb3JtYXRpb24gZnJvbSBQUCAqLwogICAgdWludDMyX3QgbWluX251bV9wcF9idWZzOyAgICAgICAgICAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBidWZmZXJzIG5lZWRlZCBieSBwb3N0cHJvYyBtb2R1bGUgKi8KICAgIGNhbV9mb3JtYXRfdCByZGlfbW9kZV9zdHJlYW1fZm10OyAgLyogc3RyZWFtIGZvcm1hdCBzdXBwb3J0ZWQgaW4gcmRpIG1vZGUgKi8KCiAgICAvKiBjYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gSEFMIDMgKi8KCiAgICBmbG9hdCBtaW5fZm9jdXNfZGlzdGFuY2U7CiAgICBmbG9hdCBoeXBlcl9mb2NhbF9kaXN0YW5jZTsKCiAgICBmbG9hdCBmb2NhbF9sZW5ndGhzW0NBTV9GT0NBTF9MRU5HVEhTX01BWF07CiAgICB1aW50OF90IGZvY2FsX2xlbmd0aHNfY291bnQ7CgogICAgLyogTmVlZHMgdG8gYmUgcmVndWxhciBmIG51bWJlciBpbnN0ZWFkIG9mIEFQRVggKi8KICAgIGZsb2F0IGFwZXJ0dXJlc1tDQU1fQVBFUlRVUkVTX01BWF07CiAgICB1aW50OF90IGFwZXJ0dXJlc19jb3VudDsKCiAgICBmbG9hdCBmaWx0ZXJfZGVuc2l0aWVzW0NBTV9GSUxURVJfREVOU0lUSUVTX01BWF07CiAgICB1aW50OF90IGZpbHRlcl9kZW5zaXRpZXNfY291bnQ7CgogICAgdWludDhfdCBvcHRpY2FsX3N0YWJfbW9kZXNbQ0FNX09QVF9TVEFCX01BWF07CiAgICB1aW50OF90IG9wdGljYWxfc3RhYl9tb2Rlc19jb3VudDsKCiAgICBjYW1fZGltZW5zaW9uX3QgbGVuc19zaGFkaW5nX21hcF9zaXplOwoKICAgIGNhbV9kaW1lbnNpb25fdCBnZW9fY29ycmVjdGlvbl9tYXBfc2l6ZTsKICAgIGZsb2F0IGdlb19jb3JyZWN0aW9uX21hcFsyICogMyAqIENBTV9NQVhfTUFQX1dJRFRIICoKICAgICAgICAgICAgICBDQU1fTUFYX01BUF9IRUlHSFRdOwoKICAgIGZsb2F0IGxlbnNfcG9zaXRpb25bM107CgogICAgLyogbmFubyBzZWNvbmRzICovCiAgICBpbnQ2NF90IGV4cG9zdXJlX3RpbWVfcmFuZ2VbRVhQT1NVUkVfVElNRV9SQU5HRV9DTlRdOwoKICAgIC8qIG5hbm8gc2Vjb25kcyAqLwogICAgaW50NjRfdCBtYXhfZnJhbWVfZHVyYXRpb247CgogICAgY2FtX2NvbG9yX2ZpbHRlcl9hcnJhbmdlbWVudF90IGNvbG9yX2FycmFuZ2VtZW50OwogICAgdWludDhfdCBudW1fY29sb3JfY2hhbm5lbHM7CgogICAgLyogcGFyYW1ldGVycyByZXF1aXJlZCB0byBjYWxjdWxhdGUgUyBhbmQgTyBjby1lZmZpY2llbnRzICovCiAgICBkb3VibGUgZ3JhZGllbnRfUzsKICAgIGRvdWJsZSBvZmZzZXRfUzsKICAgIGRvdWJsZSBncmFkaWVudF9POwogICAgZG91YmxlIG9mZnNldF9POwoKICAgIGZsb2F0IHNlbnNvcl9waHlzaWNhbF9zaXplW1NFTlNPUl9QSFlTSUNBTF9TSVpFX0NOVF07CgogICAgLyogRGltZW5zaW9ucyBvZiBmdWxsIHBpeGVsIGFycmF5LCBwb3NzaWJseSBpbmNsdWRpbmcKICAgICAgIGJsYWNrIGNhbGlicmF0aW9uIHBpeGVscyAqLwogICAgY2FtX2RpbWVuc2lvbl90IHBpeGVsX2FycmF5X3NpemU7CiAgICAvKiBBcmVhIG9mIHJhdyBkYXRhIHdoaWNoIGNvcnJlc3BvbmRzIHRvIG9ubHkgYWN0aXZlCiAgICAgICBwaXhlbHM7IHNtYWxsZXIgb3IgZXF1YWwgdG8gcGl4ZWxBcnJheVNpemUuICovCiAgICBjYW1fcmVjdF90IGFjdGl2ZV9hcnJheV9zaXplOwoKICAgIC8qIE1heGltdW0gcmF3IHZhbHVlIG91dHB1dCBieSBzZW5zb3IgKi8KICAgIGludDMyX3Qgd2hpdGVfbGV2ZWw7CgogICAgLyogQSBmaXhlZCBibGFjayBsZXZlbCBvZmZzZXQgZm9yIGVhY2ggb2YgdGhlIEJheWVyCiAgICAgICBtb3NhaWMgY2hhbm5lbHMgKi8KICAgIGludDMyX3QgYmxhY2tfbGV2ZWxfcGF0dGVybltCTEFDS19MRVZFTF9QQVRURVJOX0NOVF07CgogICAgLyogVGltZSB0YWtlbiBiZWZvcmUgZmxhc2ggY2FuIGZpcmUgYWdhaW4gaW4gbmFubyBzZWNzICovCiAgICBpbnQ2NF90IGZsYXNoX2NoYXJnZV9kdXJhdGlvbjsKCiAgICAvKiBmbGFzaCBmaXJpbmcgcG93ZXIgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfZmxhc2hfZmlyaW5nX2xldmVsX2NudDsKICAgIGNhbV9mb3JtYXRfdCBzdXBwb3J0ZWRfZmlyaW5nX2xldmVsc1tDQU1fRkxBU0hfRklSSU5HX0xFVkVMX01BWF07CgogICAgLyogRmxhc2ggRmlyaW5nIFRpbWUgKi8KICAgIGludDY0X3QgZmxhc2hfZmlyaW5nX3RpbWU7CgogICAgLyogRmxhc2ggQ2lvbG9yIFRlbXBlcmF0dXJlICovCiAgICB1aW50OF90IGZsYXNoX2NvbG9yX3RlbXA7CgogICAgLyogRmxhc2ggbWF4IEVuZXJneSAqLwogICAgdWludDhfdCBmbGFzaF9tYXhfZW5lcmd5OwoKICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwb2ludHMgaW4gdGhlIHRvbmVtYXAKICAgICAgIGN1cnZlICovCiAgICBpbnQzMl90IG1heF90b25lX21hcF9jdXJ2ZV9wb2ludHM7CgogICAgLyogc3VwcG9ydGVkIGZvcm1hdHMgKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfc2NhbGFyX2Zvcm1hdF9jbnQ7CiAgICBjYW1fZm9ybWF0X3Qgc3VwcG9ydGVkX3NjYWxhcl9mbXRzW0NBTV9GT1JNQVRfTUFYXTsKCiAgICB1aW50MzJfdCBtYXhfZmFjZV9kZXRlY3Rpb25fY291bnQ7CgogICAgdWludDhfdCBoaXN0b2dyYW1fc3VwcG9ydGVkOwogICAgLyogTnVtYmVyIG9mIGhpc3RvZ3JhbSBidWNrZXRzIHN1cHBvcnRlZCAqLwogICAgaW50MzJfdCBoaXN0b2dyYW1fc2l6ZTsKICAgIC8qIE1heGltdW0gdmFsdWUgcG9zc2libGUgZm9yIGEgaGlzdG9ncmFtIGJ1Y2tldCAqLwogICAgaW50MzJfdCBtYXhfaGlzdG9ncmFtX2NvdW50OwoKICAgIGNhbV9kaW1lbnNpb25fdCBzaGFycG5lc3NfbWFwX3NpemU7CgogICAgLyogTWF4aW11bSB2YWx1ZSBwb3NzaWJsZSBmb3IgYSBzaGFycG5lc3MgbWFwIHJlZ2lvbiAqLwogICAgaW50MzJfdCBtYXhfc2hhcnBuZXNzX21hcF92YWx1ZTsKCiAgICAvKkF1dG9leHBvc3VyZSBtb2RlcyBmb3IgY2FtZXJhIDMgYXBpKi8KICAgIHNpemVfdCBzdXBwb3J0ZWRfYWVfbW9kZXNfY250OwogICAgY2FtX2FlX21vZGVfdHlwZSBzdXBwb3J0ZWRfYWVfbW9kZXNbQ0FNX0FFX01PREVfTUFYXTsKCgogICAgY2FtX3NlbnNpdGl2aXR5X3JhbmdlX3Qgc2Vuc2l0aXZpdHlfcmFuZ2U7CiAgICBpbnQzMl90IG1heF9hbmFsb2dfc2Vuc2l0aXZpdHk7CgogICAgLyogSVNQIGRpZ2l0YWwgZ2FpbiAqLwogICAgY2FtX3NlbnNpdGl2aXR5X3JhbmdlX3QgaXNwX3NlbnNpdGl2aXR5X3JhbmdlOwoKICAgIC8qIHBpY3R1cmUgc2l6ZXMgbmVlZCBzY2FsZSovCiAgICBjYW1fc2NlbmVfbW9kZV9vdmVycmlkZXNfdCBzY2VuZV9tb2RlX292ZXJyaWRlc1tDQU1fU0NFTkVfTU9ERV9NQVhdOwogICAgc2l6ZV90IHNjYWxlX3BpY3R1cmVfc2l6ZXNfY250OwogICAgY2FtX2RpbWVuc2lvbl90IHNjYWxlX3BpY3R1cmVfc2l6ZXNbTUFYX1NDQUxFX1NJWkVTX0NOVF07CgogICAgdWludDhfdCBmbGFzaF9hdmFpbGFibGU7CgogICAgY2FtX3JhdGlvbmFsX3R5cGVfdCBiYXNlX2dhaW5fZmFjdG9yOyAgICAvKiBzZW5zb3IgYmFzZSBnYWluIGZhY3RvciAqLwogICAgLyogQUYgQnJhY2tldGluZyBpbmZvICovCiAgICBjYW1fYWZfYnJhY2tldGluZ190ICB1Ymlmb2N1c19hZl9icmFja2V0aW5nX25lZWQ7CiAgICBjYW1fYWZfYnJhY2tldGluZ190ICByZWZvY3VzX2FmX2JyYWNrZXRpbmdfbmVlZDsKICAgIC8qIG9wdGkgWm9vbSBpbmZvICovCiAgICBjYW1fb3B0aV96b29tX3QgICAgICBvcHRpX3pvb21fc2V0dGluZ3NfbmVlZDsKICAgIC8qIHN0aWxsIG1vcmUgaW5mbyAqLwogICAgY2FtX3N0aWxsX21vcmVfdCAgc3RpbGxtb3JlX3NldHRpbmdzX25lZWQ7CiAgICAvKiBjaHJvbWEgZmxhc2ggaW5mbyAqLwogICAgY2FtX2Nocm9tYV9mbGFzaF90IGNocm9tYV9mbGFzaF9zZXR0aW5nc19uZWVkOwoKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgZm9yd2FyZF9tYXRyaXhbM11bM107CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGNvbG9yX3RyYW5zZm9ybVszXVszXTsKCiAgICB1aW50OF90IGZvY3VzX2Rpc3RfY2FsaWJyYXRlZDsKICAgIHVpbnQ4X3Qgc3VwcG9ydGVkX3Rlc3RfcGF0dGVybl9tb2Rlc19jbnQ7CiAgICBjYW1fdGVzdF9wYXR0ZXJuX21vZGVfdCBzdXBwb3J0ZWRfdGVzdF9wYXR0ZXJuX21vZGVzW01BWF9URVNUX1BBVFRFUk5fQ05UXTsKCiAgICBpbnQ2NF90IHN0YWxsX2R1cmF0aW9uc1tNQVhfU0laRVNfQ05UXTsKCiAgICBjYW1faWxsdW1pbmF0X3QgcmVmZXJlbmNlX2lsbHVtaW5hbnQxOwogICAgY2FtX2lsbHVtaW5hdF90IHJlZmVyZW5jZV9pbGx1bWluYW50MjsKCiAgICBpbnQ2NF90IGpwZWdfc3RhbGxfZHVyYXRpb25zW01BWF9TSVpFU19DTlRdOwogICAgaW50NjRfdCByYXcxNl9zdGFsbF9kdXJhdGlvbnNbTUFYX1NJWkVTX0NOVF07CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGZvcndhcmRfbWF0cml4MVtGT1JXQVJEX01BVFJJWF9ST1dTXVtGT1JXQVJEX01BVFJJWF9DT0xTXTsKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgZm9yd2FyZF9tYXRyaXgyW0ZPUldBUkRfTUFUUklYX1JPV1NdW0ZPUldBUkRfTUFUUklYX0NPTFNdOwogICAgY2FtX3JhdGlvbmFsX3R5cGVfdCBjb2xvcl90cmFuc2Zvcm0xW0NPTE9SX1RSQU5TRk9STV9ST1dTXVtDT0xPUl9UUkFOU0ZPUk1fQ09MU107CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGNvbG9yX3RyYW5zZm9ybTJbQ09MT1JfVFJBTlNGT1JNX1JPV1NdW0NPTE9SX1RSQU5TRk9STV9DT0xTXTsKICAgIGNhbV9yYXRpb25hbF90eXBlX3QgY2FsaWJyYXRpb25fdHJhbnNmb3JtMVtDQUxfVFJBTlNGT1JNX1JPV1NdW0NBTF9UUkFOU0ZPUk1fQ09MU107CiAgICBjYW1fcmF0aW9uYWxfdHlwZV90IGNhbGlicmF0aW9uX3RyYW5zZm9ybTJbQ0FMX1RSQU5TRk9STV9ST1dTXVtDQUxfVFJBTlNGT1JNX0NPTFNdOwogICAgdWludDE2X3QgaXNDYWNTdXBwb3J0ZWQ7CgogICAgY2FtX29wYXF1ZV9yYXdfZm9ybWF0X3Qgb3BhcXVlX3Jhd19mbXQ7CgogICAgLyogdHJ1ZSBQb3J0cmFpdCBpbmZvICovCiAgICBjYW1fdHJ1ZV9wb3J0cmFpdF90ICB0cnVlX3BvcnRyYWl0X3NldHRpbmdzX25lZWQ7CgogICAgLyogU2Vuc29yIHR5cGUgaW5mb3JtYXRpb24gKi8KICAgIGNhbV9zZW5zb3JfdHlwZV90IHNlbnNvcl90eXBlOwoKICAgIGNhbV9hYmVycmF0aW9uX21vZGVfdCBhYmVycmF0aW9uX21vZGVzW0NBTV9DT0xPUl9DT1JSRUNUSU9OX0FCRVJSQVRJT05fTUFYXTsKICAgIHVpbnQzMl90IGFiZXJyYXRpb25fbW9kZXNfY291bnQ7CgogICAgLyogQ2FuIHRoZSBzZW5zb3IgdGltZXN0YW1wIGJlIGNvbXBhcmVkIHRvCiAgICAgKiB0aW1lc3RhbXBzIGZyb20gb3RoZXIgc3ViLXN5c3RlbXMgKGd5cm8sIGFjY2VsZXJvbWV0ZXIgZXRjLikgKi8KICAgIHVpbnQ4X3QgaXNUaW1lc3RhbXBDYWxpYnJhdGVkOwoKICAgIC8qIE1heCBzaXplIHN1cHBvcnRlZCBieSBJU1Agdmlld2ZpbmRlciBwYXRoICovCiAgICBjYW1fZGltZW5zaW9uX3QgbWF4X3ZpZXdmaW5kZXJfc2l6ZTsKCiAgICAvKiBBbmFseXNpcyBidWZmZXIgcmVxdWlyZW1lbnRzICovCiAgICBjYW1fYW5hbHlzaXNfaW5mb190IGFuYWx5c2lzX2luZm9bQ0FNX0FOQUxZU0lTX0lORk9fTUFYXTsKCiAgICAvKiBUaGlzIGlzIHNldCB0byAndHJ1ZScgaWYgc2Vuc29yIGNhbm5vdCBndWFyYW50ZWUgcGVyIGZyYW1lIGNvbnRyb2wgKi8KICAgIC8qIERlZmF1bHQgdmFsdWUgb2YgdGhpcyBjYXBhYmlsaXR5IGlzICdmYWxzZScgaW5kaWNhdGluZyBwZXItZnJhbWUgKi8KICAgIC8qIGNvbnRyb2wgaXMgc3VwcG9ydGVkICovCiAgICB1aW50OF90IG5vX3Blcl9mcmFtZV9jb250cm9sX3N1cHBvcnQ7CgogICAgLyogRUlTIGluZm9ybWF0aW9uICovCiAgICB1aW50OF90IHN1cHBvcnRlZF9pc190eXBlc19jbnQ7CiAgICB1aW50MzJfdCBzdXBwb3J0ZWRfaXNfdHlwZXNbSVNfVFlQRV9NQVhdOwogICAgLypmb3IgZWFjaCB0eXBlLCBzcGVjaWZ5IHRoZSBtYXJnaW4gbmVlZGVkLiBNYXJnaW4gd2lsbCBiZQogICAgICB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhIHBlcmNlbnRhZ2UKICAgICAgZXg6IDEwJSBtYXJnaW4gPSAwLjEgKi8KICAgIGZsb2F0IHN1cHBvcnRlZF9pc190eXBlX21hcmdpbnNbSVNfVFlQRV9NQVhdOwoKICAgIC8qIE1heCBjcHAgYmF0Y2ggc2l6ZSAqLwogICAgdWludDhfdCBtYXhfYmF0Y2hfYnVmc19zdXBwb3J0ZWQ7CiAgICB1aW50MzJfdCBidWZfYWxpZ25tZW50OwogICAgdWludDMyX3QgbWluX3N0cmlkZTsKICAgIHVpbnQzMl90IG1pbl9zY2FubGluZTsKICAgIHVpbnQ4X3QgZmxhc2hfZGV2X25hbWVbUUNBTUVSQV9NQVhfRklMRVBBVEhfTEVOR1RIXTsKICAgIHVpbnQ4X3QgZWVwcm9tX3ZlcnNpb25faW5mb1tNQVhfRUVQUk9NX1ZFUlNJT05fSU5GT19MRU5dOwoKICAgIC8qIG1heGltdW0gcGl4ZWwgYmFuZHdpZHRoIHNoYXJlZCBiZXR3ZWVuIGNhbWVyYXMgKi8KICAgIHVpbnQ2NF90IG1heF9waXhlbF9iYW5kd2lkdGg7CgogICAgLyogQXJyYXkgb2YgSyBpbnRlZ2Vycywgd2hlcmUgSyU0PT0wLAogICAgICBhcyBhIGxpc3Qgb2YgcmVjdGFuZ2xlcyBpbiB0aGUgcGl4ZWxBcnJheSBjby1vcmQgc3lzdGVtCiAgICAgIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSAqLwogICAgaW50MzJfdCBvcHRpY2FsX2JsYWNrX3JlZ2lvbnNbTUFYX09QVElDQUxfQkxBQ0tfUkVHSU9OUyAqIDRdOwogICAgLyogQ291bnQgaXMgSy80ICovCiAgICB1aW50OF90IG9wdGljYWxfYmxhY2tfcmVnaW9uX2NvdW50OwoKICAgIC8qIGhvdCBwaXhlbCAqLwogICAgdWludDhfdCBob3RQaXhlbF9tb2RlOwogICAgdWludDMyX3QgaG90UGl4ZWxfY291bnQ7CiAgICBjYW1fY29vcmRpbmF0ZV90eXBlX3QgaG90UGl4ZWxNYXBbNTEyXTsKCiAgICAvKiBzdXBwb3J0ZWQgaW5zdGFudCBjYXB0dXJlL0FFQyBjb252ZXJnZW5jZSBtb2RlcyAqLwogICAgc2l6ZV90IHN1cHBvcnRlZF9pbnN0YW50X2FlY19tb2Rlc19jbnQ7CiAgICBjYW1fYWVjX2NvbnZlcmdlbmNlX3R5cGUgc3VwcG9ydGVkX2luc3RhbnRfYWVjX21vZGVzW0NBTV9BRUNfQ09OVkVSR0VOQ0VfTUFYXTsKCiAgICAvKiBEdWFsIGNhbSBjYWxpYnJhdGlvbiBkYXRhICovCiAgICBjYW1fcmVsYXRlZF9zeXN0ZW1fY2FsaWJyYXRpb25fZGF0YV90IHJlbGF0ZWRfY2FtX2NhbGlicmF0aW9uOwp9IGNhbV9jYXBhYmlsaXR5X3Q7Cgp0eXBlZGVmIGVudW0gewogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX0RPX1JFUFJPQ0VTUyA9IENBTV9JTlRGX1BBUk1fRE9fUkVQUk9DRVNTLAogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX1NFVF9CVU5ETEVfSU5GTyA9IENBTV9JTlRGX1BBUk1fU0VUX0JVTkRMRSwKICAgIENBTV9TVFJFQU1fUEFSQU1fVFlQRV9TRVRfRkxJUCA9IENBTV9JTlRGX1BBUk1fU1RSRUFNX0ZMSVAsCiAgICBDQU1fU1RSRUFNX1BBUkFNX1RZUEVfR0VUX09VVFBVVF9DUk9QID0gQ0FNX0lOVEZfUEFSTV9HRVRfT1VUUFVUX0NST1AsCiAgICBDQU1fU1RSRUFNX1BBUkFNX1RZUEVfR0VUX0lNR19QUk9QID0gQ0FNX0lOVEZfUEFSTV9HRVRfSU1HX1BST1AsCiAgICBDQU1fU1RSRUFNX1BBUkFNX1RZUEVfUkVRVUVTVF9GUkFNRVMgPSBDQU1fSU5URl9QQVJNX1JFUVVFU1RfRlJBTUVTLAogICAgQ0FNX1NUUkVBTV9QQVJBTV9UWVBFX1JFUVVFU1RfT1BTX01PREUgPSBDQU1fSU5URl9QQVJNX1JFUVVFU1RfT1BTX01PREUsCiAgICBDQU1fU1RSRUFNX1BBUkFNX1RZUEVfTUFYCn0gY2FtX3N0cmVhbV9wYXJhbV90eXBlX2U7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1aW50MzJfdCBidWZfaW5kZXg7ICAgICAgICAgICAvKiBidWYgaW5kZXggdG8gdGhlIHNvdXJjZSBmcmFtZSBidWZmZXIgdGhhdCBuZWVkcyByZXByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhc3N1bWUgYnVmZmVyIGlzIGFscmVhZHkgbWFwcGVkKSovCiAgICB1aW50MzJfdCBmcmFtZV9pZHg7ICAgICAgICAgICAvKiBmcmFtZSBpZCBvZiBzb3VyY2UgZnJhbWUgdG8gYmUgcmVwcm9jZXNzZWQgKi8KICAgIGludDMyX3QgcmV0X3ZhbDsgICAgICAgICAgICAgIC8qIHJldHVybiB2YWx1ZSBmcm9tIHJlcHJvY2Vzcy4gQ291bGQgaGF2ZSBkaWZmZXJlbnQgbWVhbmluZ3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLmUuLCBmYWNlSUQgaW4gdGhlIGNhc2Ugb2YgZmFjZSByZWdpc3RyYXRpb24uICovCiAgICB1aW50OF90IG1ldGFfcHJlc2VudDsgICAgICAgICAvKiBpZiB0aGVyZSBpcyBtZXRhIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVwcm9jZXNzIGZyYW1lICovCiAgICB1aW50MzJfdCBtZXRhX3N0cmVhbV9oYW5kbGU7ICAvKiBtZXRhIGRhdGEgc3RyZWFtIElELiBvbmx5IHZhbGlkIGlmIG1ldGFfcHJlc2VudCAhPSAwICovCiAgICB1aW50MzJfdCBtZXRhX2J1Zl9pbmRleDsgICAgICAvKiBidWYgaW5kZXggdG8gbWV0YSBkYXRhIGJ1ZmZlci4gb25seSB2YWxpZCBpZiBtZXRhX3ByZXNlbnQgIT0gMCAqLwoKICAgIC8qIG9wYXF1ZSBtZXRhZGF0YSByZXF1aXJlZCBmb3IgcmVwcm9jZXNzaW5nICovCiAgICBpbnQzMl90IHByaXZhdGVfZGF0YVtNQVhfTUVUQURBVEFfUFJJVkFURV9QQVlMT0FEX1NJWkVfSU5fQllURVNdOwogICAgY2FtX3JlY3RfdCBjcm9wX3JlY3Q7Cn0gY2FtX3JlcHJvY2Vzc19wYXJhbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVpbnQzMl90IGZsaXBfbWFzazsKfSBjYW1fZmxpcF9tb2RlX3Q7CgojZGVmaW5lIElNR19OQU1FX1NJWkUgMzIKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2FtX3JlY3RfdCBjcm9wOyAgLyogY3JvcCBpbmZvIGZvciB0aGUgaW1hZ2UgKi8KICAgIGNhbV9kaW1lbnNpb25fdCBpbnB1dDsgLyogaW5wdXQgZGltZW5zaW9uIG9mIHRoZSBpbWFnZSAqLwogICAgY2FtX2RpbWVuc2lvbl90IG91dHB1dDsgLyogb3V0cHV0IGRpbWVuc2lvbiBvZiB0aGUgaW1hZ2UgKi8KICAgIGNoYXIgbmFtZVtJTUdfTkFNRV9TSVpFXTsgLyogb3B0aW9uYWwgbmFtZSBvZiB0aGUgZXh0Ki8KICAgIGNhbV9mb3JtYXRfdCBmb3JtYXQ7IC8qIGltYWdlIGZvcm1hdCAqLwp9IGNhbV9zdHJlYW1faW1nX3Byb3BfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVpbnQ4X3QgZW5hYmxlU3RyZWFtOyAvKjAgliBzdG9wIGFuZCAxLXN0YXJ0ICovCn0gY2FtX3JlcXVlc3RfZnJhbWVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2FtX3N0cmVhbV9wYXJhbV90eXBlX2UgdHlwZTsKICAgIHVuaW9uIHsKICAgICAgICBjYW1fcmVwcm9jZXNzX3BhcmFtIHJlcHJvY2VzczsgIC8qIGRvIHJlcHJvY2VzcyAqLwogICAgICAgIGNhbV9idW5kbGVfY29uZmlnX3QgYnVuZGxlSW5mbzsgLyogc2V0IGJ1bmRsZSBpbmZvKi8KICAgICAgICBjYW1fZmxpcF9tb2RlX3QgZmxpcEluZm87ICAgICAgIC8qIGZsaXAgbW9kZSAqLwogICAgICAgIGNhbV9jcm9wX2RhdGFfdCBvdXRwdXRDcm9wOyAgICAgLyogb3V0cHV0IGNyb3AgZm9yIGN1cnJlbnQgZnJhbWUgKi8KICAgICAgICBjYW1fc3RyZWFtX2ltZ19wcm9wX3QgaW1nUHJvcDsgIC8qIGltYWdlIHByb3BlcnRpZXMgb2YgY3VycmVudCBmcmFtZSAqLwogICAgICAgIGNhbV9yZXF1ZXN0X2ZyYW1lcyBmcmFtZVJlcXVlc3Q7IC8qZG8gVE5SIHByb2Nlc3MqLwogICAgICAgIGNhbV9wZXJmX21vZGVfdCBwZXJmX21vZGU7ICAgICAgIC8qcmVxdWVzdCBvcGVyYXRpb25hbCBtb2RlKi8KICAgIH07Cn0gY2FtX3N0cmVhbV9wYXJtX2J1ZmZlcl90OwoKLyogc3RyZWFtIGluZm8gKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgLyogc3RyZWFtIElEIGZyb20gc2VydmVyICovCiAgICB1aW50MzJfdCBzdHJlYW1fc3ZyX2lkOwoKICAgIC8qIHN0cmVhbSB0eXBlICovCiAgICBjYW1fc3RyZWFtX3R5cGVfdCBzdHJlYW1fdHlwZTsKCiAgICAvKiBpbWFnZSBmb3JtYXQgKi8KICAgIGNhbV9mb3JtYXRfdCBmbXQ7CgogICAgLyogaW1hZ2UgZGltZW5zaW9uICovCiAgICBjYW1fZGltZW5zaW9uX3QgZGltOwoKICAgIC8qIGJ1ZmZlciBwbGFuZSBpbmZvcm1hdGlvbiwgd2lsbCBiZSBjYWxjIGJhc2VkIG9uIHN0cmVhbV90eXBlLCBmbXQsCiAgICAgICBkaW0sIGFuZCBwYWRkaW5nX2luZm8oZnJvbSBzdHJlYW0gY29uZmlnKS4gSW5mbyBpbmNsdWRpbmc6CiAgICAgICBvZmZzZXRfeCwgb2Zmc2V0X3ksIHN0cmlkZSwgc2NhbmxpbmUsIHBsYW5lIG9mZnNldCAqLwogICAgY2FtX3N0cmVhbV9idWZfcGxhbmVfaW5mb190IGJ1Zl9wbGFuZXM7CgogICAgLyogbnVtYmVyIG9mIHN0cmVhbSBidWZzIHdpbGwgYmUgYWxsb2NhdGVkICovCiAgICB1aW50MzJfdCBudW1fYnVmczsKCiAgICAvKiBzdHJlYW1pbmcgdHlwZSAqLwogICAgY2FtX3N0cmVhbWluZ19tb2RlX3Qgc3RyZWFtaW5nX21vZGU7CgogICAgLyogbnVtIG9mIGZyYW1lcyBuZWVkcyB0byBiZSBnZW5lcmF0ZWQuCiAgICAgKiBvbmx5IHZhbGlkIHdoZW4gc3RyZWFtaW5nX21vZGUgPSBDQU1fU1RSRUFNSU5HX01PREVfQlVSU1QgKi8KICAgIHVpbnQ4X3QgbnVtX29mX2J1cnN0OwoKICAgIC8qIG51bSBvZiBmcmFtZXMgaW4gb25lIGJhdGNoLgogICAgICogb25seSB2YWxpZCB3aGVuIHN0cmVhbWluZ19tb2RlID0gQ0FNX1NUUkVBTUlOR19NT0RFX0JBVENIICovCiAgICBjYW1fc3RyZWFtX3VzZXJfYnVmX2luZm9fdCB1c2VyX2J1Zl9pbmZvOwoKICAgIC8qIHN0cmVhbSBzcGVjaWZpYyBwcCBjb25maWcgKi8KICAgIGNhbV9wcF9mZWF0dXJlX2NvbmZpZ190IHBwX2NvbmZpZzsKCiAgICAvKiB0aGlzIHNlY3Rpb24gaXMgdmFsaWQgaWYgb2ZmbGluZSByZXByb2Nlc3MgdHlwZSBzdHJlYW0gKi8KICAgIGNhbV9zdHJlYW1fcmVwcm9jX2NvbmZpZ190IHJlcHJvY2Vzc19jb25maWc7CgogICAgY2FtX3N0cmVhbV9wYXJtX2J1ZmZlcl90IHBhcm1fYnVmOyAgICAvKiBzdHJlYW0gYmFzZWQgcGFyYW1ldGVycyAqLwoKICAgIHVpbnQ4X3QgZGlzX2VuYWJsZTsKCiAgICAvKiBJbWFnZSBTdGFiaWxpemF0aW9uIHR5cGUgKi8KICAgIGNhbV9pc190eXBlX3QgaXNfdHlwZTsKCiAgICAvKiBTaWduaWZpZXMgU2VjdXJlIHN0cmVhbSBtb2RlICovCiAgICBjYW1fc3RyZWFtX3NlY3VyZV90IGlzX3NlY3VyZTsKCiAgICAvKiBQcmVmZXJyZWQgUGVyZm9ybWFuY2UgbW9kZSAqLwogICAgY2FtX3BlcmZfbW9kZV90IHBlcmZfbW9kZTsKCiAgICAvKiBpZiBmcmFtZXMgd2lsbCBub3QgYmUgcmVjZWl2ZWQgKi8KICAgIHVpbnQ4X3Qgbm9GcmFtZUV4cGVjdGVkOwp9IGNhbV9zdHJlYW1faW5mb190OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICBDb2RlIGZvciBEb21haW4gU29ja2V0IEJhc2VkIFBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBJTkNMVURFKFBBUkFNX0lELERBVEFUWVBFLENPVU5UKSAgXAogICAgICAgIERBVEFUWVBFIG1lbWJlcl92YXJpYWJsZV8jI1BBUkFNX0lEWyBDT1VOVCBdCgojZGVmaW5lIFBPSU5URVJfT0ZfTUVUQShNRVRBX0lELCBUQUJMRV9QVFIpIFwKICAgICAgICAoKE5VTEwgIT0gVEFCTEVfUFRSKSA/IFwKICAgICAgICAgICAgKCZUQUJMRV9QVFItPmRhdGEubWVtYmVyX3ZhcmlhYmxlXyMjTUVUQV9JRFsgMCBdKSA6IChOVUxMKSkKCiNkZWZpbmUgU0laRV9PRl9QQVJBTShNRVRBX0lELCBUQUJMRV9QVFIpIFwKICAgICAgICBzaXplb2YoVEFCTEVfUFRSLT5kYXRhLm1lbWJlcl92YXJpYWJsZV8jI01FVEFfSUQpCgojZGVmaW5lIElGX01FVEFfQVZBSUxBQkxFKE1FVEFfVFlQRSwgTUVUQV9QVFJfTkFNRSwgTUVUQV9JRCwgVEFCTEVfUFRSKSBcCiAgICAgICAgTUVUQV9UWVBFICpNRVRBX1BUUl9OQU1FID0gXAogICAgICAgICgoKE5VTEwgIT0gVEFCTEVfUFRSKSAmJiAoVEFCTEVfUFRSLT5pc192YWxpZFtNRVRBX0lEXSkpID8gXAogICAgICAgICAgICAoJlRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEWyAwIF0pIDogXAogICAgICAgICAgICAoTlVMTCkpOyBcCiAgICAgICAgaWYgKE5VTEwgIT0gTUVUQV9QVFJfTkFNRSkgXAoKI2RlZmluZSBBRERfU0VUX1BBUkFNX0VOVFJZX1RPX0JBVENIKFRBQkxFX1BUUiwgTUVUQV9JRCwgREFUQSkgXAogICAgKChOVUxMICE9IFRBQkxFX1BUUikgPyBcCiAgICAoKFRBQkxFX1BUUi0+ZGF0YS5tZW1iZXJfdmFyaWFibGVfIyNNRVRBX0lEWyAwIF0gPSBEQVRBKSwgXAogICAgKFRBQkxFX1BUUi0+aXNfdmFsaWRbTUVUQV9JRF0gPSAxKSwgKDApKSA6IFwKICAgICgoTE9HRSgiVW5hYmxlIHRvIHNldCBtZXRhZGF0YSBUQUJMRV9QVFI6JXAgTUVUQV9JRDolZCIsIFwKICAgICAgICAgICAgVEFCTEVfUFRSLCBNRVRBX0lEKSksICgtMSkpKSBcCgojZGVmaW5lIEFERF9TRVRfUEFSQU1fQVJSQVlfVE9fQkFUQ0goVEFCTEVfUFRSLCBNRVRBX0lELCBQREFUQSwgQ09VTlQsIFJDT1VOVCkgXAp7IFwKICAgIGlmICgoTlVMTCAhPSBUQUJMRV9QVFIpICYmIFwKICAgICAgICAgICAgKDAgPCBDT1VOVCkgJiYgXAogICAgICAgICAgICAoKHNpemVvZihUQUJMRV9QVFItPmRhdGEubWVtYmVyX3ZhcmlhYmxlXyMjTUVUQV9JRCkgLyBcCiAgICAgICAgICAgIHNpemVvZihUQUJMRV9QVFItPmRhdGEubWVtYmVyX3ZhcmlhYmxlXyMjTUVUQV9JRFsgMCBdKSkgXAogICAgICAgICAgICA+PSBDT1VOVCkpICB7IFwKICAgICAgICBmb3IgKHNpemVfdCBfaSA9IDA7IF9pIDwgQ09VTlQgOyBfaSsrKSB7IFwKICAgICAgICAgICAgVEFCTEVfUFRSLT5kYXRhLm1lbWJlcl92YXJpYWJsZV8jI01FVEFfSURbIF9pIF0gPSBQREFUQSBbIF9pIF07IFwKICAgICAgICB9IFwKICAgICAgICBUQUJMRV9QVFItPmlzX3ZhbGlkW01FVEFfSURdID0gMTsgXAogICAgICAgIFJDT1VOVCA9IENPVU5UOyBcCiAgICB9IGVsc2UgeyBcCiAgICAgICAgTE9HRSgiVW5hYmxlIHRvIHNldCBtZXRhZGF0YSBUQUJMRV9QVFI6JXAgTUVUQV9JRDolZCBDT1VOVDolenUiLCBcCiAgICAgICAgICAgICAgVEFCTEVfUFRSLCBNRVRBX0lELCBDT1VOVCk7IFwKICAgICAgICBSQ09VTlQgPSAwOyBcCiAgICB9IFwKfQoKI2RlZmluZSBBRERfR0VUX1BBUkFNX0VOVFJZX1RPX0JBVENIKFRBQkxFX1BUUiwgTUVUQV9JRCkgXAp7IFwKICAgIGlmIChOVUxMICE9IFRBQkxFX1BUUikgeyBcCiAgICAgICAgVEFCTEVfUFRSLT5pc19yZXFkW01FVEFfSURdID0gMTsgXAogICAgfSBlbHNlIHsgXAogICAgICAgIExPR0UoIlVuYWJsZSB0byBnZXQgbWV0YWRhdGEgVEFCTEVfUFRSOiVwIE1FVEFfSUQ6JWQiLCBcCiAgICAgICAgICAgICAgICAgIFRBQkxFX1BUUiwgTUVUQV9JRCk7IFwKICAgIH0gXAp9CgojZGVmaW5lIFJFQURfUEFSQU1fRU5UUlkoVEFCTEVfUFRSLCBNRVRBX0lELCBEQVRBKSBcCnsgXAogICAgaWYgKE5VTEwgIT0gVEFCTEVfUFRSKSB7IFwKICAgICAgICBEQVRBID0gVEFCTEVfUFRSLT5kYXRhLm1lbWJlcl92YXJpYWJsZV8jI01FVEFfSURbIDAgXTsgXAogICAgfSBlbHNlIHsgXAogICAgICAgIExPR0UoIlVuYWJsZSB0byByZWFkIG1ldGFkYXRhIFRBQkxFX1BUUjolcCBNRVRBX0lEOiVkIiwgXAogICAgICAgICAgICAgICAgICBUQUJMRV9QVFIsIE1FVEFfSUQpOyBcCiAgICB9IFwKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEN1c3RvbSBwYXJhbWV0ZXIgZGF0YSBkZWZpbml0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnR5cGVkZWYgc3RydWN0IHsKICAgIC8qQ0FNX0NVU1RPTV9QQVJNX0VYQU1QTEUgaXMgYWRkZWQgdG8gZXhwbGFpbiBjdXN0b20gcGFyYW0gcHJvY2VkdXJlKi8KICAgIElOQ0xVREUoQ0FNX0NVU1RPTV9QQVJNX0VYQU1QTEUsICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgIDEpOwp9IGN1c3RvbV9wYXJtX2RhdGFfdDsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBDdXN0b20gUGFyYW1ldGVyIGJ1ZmZlciBkZWZpbml0aW9uCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuaW9uIHsKICAgICAgICAvKiBIYXNoIHRhYmxlIG9mICdpcyB2YWxpZCcgZmxhZ3MgKi8KICAgICAgICB1aW50OF90ICAgICAgICAgaXNfdmFsaWRbQ0FNX0NVU1RPTV9QQVJNX01BWF07CgogICAgICAgIC8qIEhhc2ggdGFibGUgb2YgJ2lzIHJlcXVpcmVkJyBmbGFncyBmb3IgdGhlIEdFVCBQQVJBTSAqLwogICAgICAgIHVpbnQ4X3QgICAgICAgICBpc19yZXFkW0NBTV9DVVNUT01fUEFSTV9NQVhdOwogICAgfTsKICAgIGN1c3RvbV9wYXJtX2RhdGFfdCBkYXRhOwp9IGN1c3RvbV9wYXJtX2J1ZmZlcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBJRCBmcm9tIChjYW1faW50Zl9tZXRhZGF0YV90eXBlX3QpICAgICAgICAgICAgICAgIERBVEFUWVBFICAgICAgICAgICAgICAgICAgICAgQ09VTlQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgLyogY29tbW9uIGJldHdlZW4gSEFMMSBhbmQgSEFMMyAqLwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0hJU1RPR1JBTSwgICAgICAgICAgICAgICAgICAgIGNhbV9oaXN0X3N0YXRzX3QsICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkFDRV9ERVRFQ1RJT04sICAgICAgICAgICAgICAgY2FtX2ZhY2VfZGV0ZWN0aW9uX2RhdGFfdCwgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GQUNFX1JFQ09HLCAgICAgICAgICAgICAgICAgICBjYW1fZmFjZV9yZWNvZ19kYXRhX3QsICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZBQ0VfQkxJTkssICAgICAgICAgICAgICAgICAgIGNhbV9mYWNlX2JsaW5rX2RhdGFfdCwgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkFDRV9HQVpFLCAgICAgICAgICAgICAgICAgICAgY2FtX2ZhY2VfZ2F6ZV9kYXRhX3QsICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GQUNFX1NNSUxFLCAgICAgICAgICAgICAgICAgICBjYW1fZmFjZV9zbWlsZV9kYXRhX3QsICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZBQ0VfTEFORE1BUkssICAgICAgICAgICAgICAgIGNhbV9mYWNlX2xhbmRtYXJrc19kYXRhX3QsICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkFDRV9DT05UT1VSLCAgICAgICAgICAgICAgICAgY2FtX2ZhY2VfY29udG91cl9kYXRhX3QsICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BVVRPRk9DVVNfREFUQSwgICAgICAgICAgICAgICBjYW1fYXV0b19mb2N1c19kYXRhX3QsICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NEU19EQVRBLCAgICAgICAgICAgICAgICAgICAgIGNhbV9jZHNfZGF0YV90LCAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fVVBEQVRFX0RFQlVHX0xFVkVMLCAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAgICAxKTsKCiAgICAvKiBTcGVjaWZpYyB0byBIQWwxICovCiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ1JPUF9EQVRBLCAgICAgICAgICAgICAgICAgICAgY2FtX2Nyb3BfZGF0YV90LCAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9QUkVQX1NOQVBTSE9UX0RPTkUsICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0dPT0RfRlJBTUVfSURYX1JBTkdFLCAgICAgICAgIGNhbV9mcmFtZV9pZHhfcmFuZ2VfdCwgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQVNEX0hEUl9TQ0VORV9EQVRBLCAgICAgICAgICAgY2FtX2FzZF9oZHJfc2NlbmVfZGF0YV90LCAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BU0RfU0NFTkVfSU5GTywgICAgICAgICAgICAgICBjYW1fYXNkX2RlY2lzaW9uX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NVUlJFTlRfU0NFTkUsICAgICAgICAgICAgICAgIGNhbV9zY2VuZV9tb2RlX3R5cGUsICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQVdCX0lORk8sICAgICAgICAgICAgICAgICAgICAgY2FtX2F3Yl9wYXJhbXNfdCwgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GT0NVU19QT1NJVElPTiwgICAgICAgICAgICAgICBjYW1fZm9jdXNfcG9zX2luZm9fdCwgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NIUk9NQVRJWF9MSVRFX0lTUCwgICAgICAgICAgIGNhbV9jaHJvbWF0aXhfbGl0ZV9pc3BfdCwgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0hST01BVElYX0xJVEVfUFAsICAgICAgICAgICAgY2FtX2Nocm9tYXRpeF9saXRlX3BwX3QsICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DSFJPTUFUSVhfTElURV9BRSwgICAgICAgICAgICBjYW1fY2hyb21hdGl4X2xpdGVfYWVfc3RhdHNfdCwgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NIUk9NQVRJWF9MSVRFX0FXQiwgICAgICAgICAgIGNhbV9jaHJvbWF0aXhfbGl0ZV9hd2Jfc3RhdHNfdCwgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ0hST01BVElYX0xJVEVfQUYsICAgICAgICAgICAgY2FtX2Nocm9tYXRpeF9saXRlX2FmX3N0YXRzX3QsICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DSFJPTUFUSVhfTElURV9BU0QsICAgICAgICAgICBjYW1fY2hyb21hdGl4X2xpdGVfYXNkX3N0YXRzX3QsIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9CVUZfRElWRVJUX0lORk8sICAgICAgICAgICAgICAgICAgIGNhbV9idWZfZGl2ZXJ0X2luZm9fdCwgICAgICAgICAgMSk7CgogICAgLyogU3BlY2lmaWMgdG8gSEFMMyAqLwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZSQU1FX05VTUJFUl9WQUxJRCwgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVVJHRU5UX0ZSQU1FX05VTUJFUl9WQUxJRCwgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GUkFNRV9EUk9QUEVELCAgICAgICAgICAgICAgICBjYW1fc3RyZWFtX0lEX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZSQU1FX05VTUJFUiwgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVVJHRU5UX0ZSQU1FX05VTUJFUiwgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DT0xPUl9DT1JSRUNUX01PREUsICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NPTE9SX0NPUlJFQ1RfVFJBTlNGT1JNLCAgICAgIGNhbV9jb2xvcl9jb3JyZWN0X21hdHJpeF90LCAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQ09MT1JfQ09SUkVDVF9HQUlOUywgICAgICAgICAgY2FtX2NvbG9yX2NvcnJlY3RfZ2FpbnNfdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9QUkVEX0NPTE9SX0NPUlJFQ1RfVFJBTlNGT1JNLCBjYW1fY29sb3JfY29ycmVjdF9tYXRyaXhfdCwgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1BSRURfQ09MT1JfQ09SUkVDVF9HQUlOUywgICAgIGNhbV9jb2xvcl9jb3JyZWN0X2dhaW5zX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQUVDX1JPSSwgICAgICAgICAgICAgICAgICAgICAgY2FtX2FyZWFfdCwgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRUNfU1RBVEUsICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0ZPQ1VTX01PREUsICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fTUFOVUFMX0ZPQ1VTX1BPUywgICAgICAgICAgICAgY2FtX21hbnVhbF9mb2N1c19wYXJtX3QsICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRl9ST0ksICAgICAgICAgICAgICAgICAgICAgICBjYW1fYXJlYV90LCAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FGX1NUQVRFLCAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fV0hJVEVfQkFMQU5DRSwgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BV0JfUkVHSU9OUywgICAgICAgICAgICAgICAgICBjYW1fYXJlYV90LCAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FXQl9TVEFURSwgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQkxBQ0tfTEVWRUxfTE9DSywgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9NT0RFLCAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VER0VfTU9ERSwgICAgICAgICAgICAgICAgICAgIGNhbV9lZGdlX2FwcGxpY2F0aW9uX3QsICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkxBU0hfUE9XRVIsICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9GTEFTSF9GSVJJTkdfVElNRSwgICAgICAgICAgICBpbnQ2NF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0ZMQVNIX01PREUsICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRkxBU0hfU1RBVEUsICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9IT1RQSVhFTF9NT0RFLCAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfQVBFUlRVUkUsICAgICAgICAgICAgICAgIGZsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTEVOU19GSUxURVJERU5TSVRZLCAgICAgICAgICAgZmxvYXQsICAgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX0ZPQ0FMX0xFTkdUSCwgICAgICAgICAgICBmbG9hdCwgICAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfRk9DVVNfRElTVEFOQ0UsICAgICAgICAgIGZsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTEVOU19GT0NVU19SQU5HRSwgICAgICAgICAgICAgZmxvYXQsICAgICAgICAgICAgICAgICAgICAgICAyKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX1NUQVRFLCAgICAgICAgICAgICAgICAgICBjYW1fYWZfbGVuc19zdGF0ZV90LCAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0xFTlNfT1BUX1NUQUJfTU9ERSwgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVklERU9fU1RBQl9NT0RFLCAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX0ZPQ1VTX1NUQVRFLCAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX05PSVNFX1JFRFVDVElPTl9NT0RFLCAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTk9JU0VfUkVEVUNUSU9OX1NUUkVOR1RILCAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TQ0FMRVJfQ1JPUF9SRUdJT04sICAgICAgICAgICBjYW1fY3JvcF9yZWdpb25fdCwgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NDRU5FX0ZMSUNLRVIsICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0VOU09SX0VYUE9TVVJFX1RJTUUsICAgICAgICAgaW50NjRfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TRU5TT1JfRlJBTUVfRFVSQVRJT04sICAgICAgICBpbnQ2NF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NFTlNPUl9TRU5TSVRJVklUWSwgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSVNQX1NFTlNJVElWSVRZICwgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TRU5TT1JfVElNRVNUQU1QLCAgICAgICAgICAgICBpbnQ2NF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NFTlNPUl9ST0xMSU5HX1NIVVRURVJfU0tFVywgIGludDY0X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU0hBRElOR19NT0RFLCAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TVEFUU19GQUNFREVURUNUX01PREUsICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NUQVRTX0hJU1RPR1JBTV9NT0RFLCAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU1RBVFNfU0hBUlBORVNTX01BUF9NT0RFLCAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TVEFUU19TSEFSUE5FU1NfTUFQLCAgICAgICAgICBjYW1fc2hhcnBuZXNzX21hcF90LCAgICAgICAgIDMpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1RPTkVNQVBfQ1VSVkVTLCAgICAgICAgICAgICAgIGNhbV9yZ2JfdG9uZW1hcF9jdXJ2ZXMsICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTEVOU19TSEFESU5HX01BUCwgICAgICAgICAgICAgY2FtX2xlbnNfc2hhZGluZ19tYXBfdCwgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRUNfSU5GTywgICAgICAgICAgICAgICAgICAgICBjYW1fM2FfcGFyYW1zX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NFTlNPUl9JTkZPLCAgICAgICAgICAgICAgICAgIGNhbV9zZW5zb3JfcGFyYW1zX3QsICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRVhJRl9ERUJVR19BRSwgICAgICAgICAgICAgICAgY2FtX2FlX2V4aWZfZGVidWdfdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHX0FXQiwgICAgICAgICAgICAgICBjYW1fYXdiX2V4aWZfZGVidWdfdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VYSUZfREVCVUdfQUYsICAgICAgICAgICAgICAgIGNhbV9hZl9leGlmX2RlYnVnX3QsICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRVhJRl9ERUJVR19BU0QsICAgICAgICAgICAgICAgY2FtX2FzZF9leGlmX2RlYnVnX3QsICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHX1NUQVRTLCAgICAgICAgICAgICBjYW1fc3RhdHNfYnVmZmVyX2V4aWZfZGVidWdfdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHX0JFU1RBVFMsICAgICAgICAgICBjYW1fYmVzdGF0c19idWZmZXJfZXhpZl9kZWJ1Z190LCAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHX0JISVNULCAgICAgICAgICAgICBjYW1fYmhpc3RfYnVmZmVyX2V4aWZfZGVidWdfdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9FWElGX0RFQlVHXzNBX1RVTklORywgICAgICAgICBjYW1fcTNhX3R1bmluZ19pbmZvX3QsICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FTRF9TQ0VORV9DQVBUVVJFX1RZUEUsICAgICAgIGNhbV9hdXRvX3NjZW5lX3QsICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRUZGRUNULCAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIC8qIERlZmluaW5nIGFzIGludDMyX3Qgc28gdGhhdCB0aGlzIGFycmF5IGlzIDQgYnl0ZSBhbGlnbmVkICovCiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfUFJJVkFURV9EQVRBLCAgICAgICAgICAgICAgICAgaW50MzJfdCwKICAgICAgICAgICAgTUFYX01FVEFEQVRBX1BSSVZBVEVfUEFZTE9BRF9TSVpFX0lOX0JZVEVTIC8gNCk7CgogICAgLyogRm9sbG93aW5nIGFyZSBQYXJhbXMgb25seSBhbmQgbm90IG1ldGFkYXRhIGN1cnJlbnRseSAqLwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0hBTF9WRVJTSU9OLCAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICAvKiBTaGFyZWQgYmV0d2VlbiBIQUwxIGFuZCBIQUwzICovCiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQU5USUJBTkRJTkcsICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9FWFBPU1VSRV9DT01QRU5TQVRJT04sICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0VWX1NURVAsICAgICAgICAgICAgICAgICAgICAgIGNhbV9yYXRpb25hbF90eXBlX3QsICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQUVDX0xPQ0ssICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9GUFNfUkFOR0UsICAgICAgICAgICAgICAgICAgICBjYW1fZnBzX3JhbmdlX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0FXQl9MT0NLLCAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQkVTVFNIT1RfTU9ERSwgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9ESVNfRU5BQkxFLCAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0xFRF9NT0RFLCAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTEVEX01PREVfT1ZFUlJJREUsICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKCiAgICAvKiBkdWFsIGNhbWVyYSBzcGVjaWZpYyBwYXJhbXMgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9SRUxBVEVEX1NFTlNPUlNfQ0FMSUJSQVRJT04sICBjYW1fcmVsYXRlZF9zeXN0ZW1fY2FsaWJyYXRpb25fZGF0YV90LCAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRl9GT0NBTF9MRU5HVEhfUkFUSU8sICAgICAgICBjYW1fZm9jYWxfbGVuZ3RoX3JhdGlvX3QsIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NOQVBfQ1JPUF9JTkZPX1NFTlNPUiwgICAgICAgIGNhbV9zdHJlYW1fY3JvcF9pbmZvX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfU05BUF9DUk9QX0lORk9fQ0FNSUYsICAgICAgICAgY2FtX3N0cmVhbV9jcm9wX2luZm9fdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TTkFQX0NST1BfSU5GT19JU1AsICAgICAgICAgICBjYW1fc3RyZWFtX2Nyb3BfaW5mb190LCAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NOQVBfQ1JPUF9JTkZPX0NQUCwgICAgICAgICAgIGNhbV9zdHJlYW1fY3JvcF9pbmZvX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfRENSRiwgICAgICAgICAgICAgICAgICAgICAgICAgY2FtX2RjcmZfcmVzdWx0X3QsICAgICAgICAxKTsKCiAgICAvKiBIQUwxIHNwZWNpZmljICovCiAgICAvKiByZWFkIG9ubHkgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9RVUVSWV9GTEFTSDRTTkFQLCAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0VYUE9TVVJFLCAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU0hBUlBORVNTLCAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9DT05UUkFTVCwgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NBVFVSQVRJT04sICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQlJJR0hUTkVTUywgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9JU08sICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1faW50Zl9wYXJtX21hbnVhbF8zYV90LCAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0VYUE9TVVJFX1RJTUUsICAgICAgICAgICAgICAgIGNhbV9pbnRmX3Bhcm1fbWFudWFsXzNhX3QsICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fWk9PTSwgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9ST0xMT0ZGLCAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX01PREUsICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQUVDX0FMR09fVFlQRSwgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9GT0NVU19BTEdPX1RZUEUsICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0FFQ19ST0ksICAgICAgICAgICAgICAgICAgICAgIGNhbV9zZXRfYWVjX3JvaV90LCAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQUZfUk9JLCAgICAgICAgICAgICAgICAgICAgICAgY2FtX3JvaV9pbmZvX3QsICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9TQ0VfRkFDVE9SLCAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0ZELCAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbV9mZF9zZXRfcGFybV90LCAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fTUNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9IRlIsICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JFREVZRV9SRURVQ1RJT04sICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fV0FWRUxFVF9ERU5PSVNFLCAgICAgICAgICAgICAgY2FtX2Rlbm9pc2VfcGFyYW1fdCwgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9URU1QT1JBTF9ERU5PSVNFLCAgICAgICAgICAgICBjYW1fZGVub2lzZV9wYXJhbV90LCAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0hJU1RPR1JBTSwgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQVNEX0VOQUJMRSwgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9SRUNPUkRJTkdfSElOVCwgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0hEUiwgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbV9leHBfYnJhY2tldGluZ190LCAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRlJBTUVTS0lQLCAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9aU0xfTU9ERSwgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0hEUl9ORUVEXzFYLCAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fTE9DS19DQUYsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9WSURFT19IRFIsICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NFTlNPUl9IRFIsICAgICAgICAgICAgICAgICAgIGNhbV9zZW5zb3JfaGRyX3R5cGVfdCwgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fVlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9TRVRfQVVUT0ZPQ1VTVFVOSU5HLCAgICAgICAgICB0dW5lX2FjdHVhdG9yX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NFVF9WRkVfQ09NTUFORCwgICAgICAgICAgICAgIHR1bmVfY21kX3QsICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU0VUX1BQX0NPTU1BTkQsICAgICAgICAgICAgICAgdHVuZV9jbWRfdCwgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9NQVhfRElNRU5TSU9OLCAgICAgICAgICAgICAgICBjYW1fZGltZW5zaW9uX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JBV19ESU1FTlNJT04sICAgICAgICAgICAgICAgIGNhbV9kaW1lbnNpb25fdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fVElOVExFU1MsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9XQl9NQU5VQUwsICAgICAgICAgICAgICAgICAgICBjYW1fbWFudWFsX3diX3Bhcm1fdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0NEU19NT0RFLCAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRVpUVU5FX0NNRCwgICAgICAgICAgICAgICAgICAgY2FtX2V6dHVuZV9jbWRfZGF0YV90LCAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9JTlRfRVZULCAgICAgICAgICAgICAgICAgICAgICBjYW1faW50X2V2dF9wYXJhbXNfdCwgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1JESV9NT0RFLCAgICAgICAgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fQlVSU1RfTlVNLCAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9SRVRST19CVVJTVF9OVU0sICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0JVUlNUX0xFRF9PTl9QRVJJT0QsICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fTE9OR1NIT1RfRU5BQkxFLCAgICAgICAgICAgICAgaW50OF90LCAgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9UT05FX01BUF9NT0RFLCAgICAgICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1RPVUNIX0FFX1JFU1VMVCwgICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRFVBTF9MRURfQ0FMSUJSQVRJT04sICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9BRFZfQ0FQVFVSRV9NT0RFLCAgICAgICAgICAgICB1aW50OF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwoKICAgIC8qIEhBTDMgc3BlY2lmaWMgKi8KICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TVFJFQU1fSU5GTywgICAgICAgICAgICAgICAgICBjYW1fc3RyZWFtX3NpemVfaW5mb190LCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0FFQ19NT0RFLCAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfQUVDX1BSRUNBUFRVUkVfVFJJR0dFUiwgICAgICAgY2FtX3RyaWdnZXJfdCwgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9BRl9UUklHR0VSLCAgICAgICAgICAgICAgICAgICBjYW1fdHJpZ2dlcl90LCAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0NBUFRVUkVfSU5URU5ULCAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfREVNT1NBSUMsICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TSEFSUE5FU1NfU1RSRU5HVEgsICAgICAgICAgICBpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0dFT01FVFJJQ19NT0RFLCAgICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfR0VPTUVUUklDX1NUUkVOR1RILCAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9MRU5TX1NIQURJTkdfTUFQX01PREUsICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX1NIQURJTkdfU1RSRU5HVEgsICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVE9ORU1BUF9NT0RFLCAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9TVFJFQU1fSUQsICAgICAgICAgICAgICAgICAgICBjYW1fc3RyZWFtX0lEX3QsICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX1NUQVRTX0RFQlVHX01BU0ssICAgICAgICAgICAgIHVpbnQzMl90LCAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fU1RBVFNfQUZfUEFBRiwgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9GT0NVU19CUkFDS0VUSU5HLCAgICAgICAgICAgICBjYW1fYWZfYnJhY2tldGluZ190LCAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0ZMQVNIX0JSQUNLRVRJTkcsICAgICAgICAgICAgIGNhbV9mbGFzaF9icmFja2V0aW5nX3QsICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSlBFR19HUFNfQ09PUkRJTkFURVMsICAgICAgICAgZG91YmxlLCAgICAgICAgICAgICAgICAgICAgICAzKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9KUEVHX0dQU19QUk9DX01FVEhPRFMsICAgICAgICB1aW50OF90LCAgICAgICAgICAgICAgICAgICAgIEdQU19QUk9DRVNTSU5HX01FVEhPRF9TSVpFKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9KUEVHX0dQU19USU1FU1RBTVAsICAgICAgICAgICBpbnQ2NF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0pQRUdfT1JJRU5UQVRJT04sICAgICAgICAgICAgIGludDMyX3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSlBFR19RVUFMSVRZLCAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9KUEVHX1RIVU1CX1FVQUxJVFksICAgICAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0pQRUdfVEhVTUJfU0laRSwgICAgICAgICAgICAgIGNhbV9kaW1lbnNpb25fdCwgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfVEVTVF9QQVRURVJOX0RBVEEsICAgICAgICAgICAgY2FtX3Rlc3RfcGF0dGVybl9kYXRhX3QsICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9QUk9GSUxFX1RPTkVfQ1VSVkUsICAgICAgICAgICBjYW1fcHJvZmlsZV90b25lX2N1cnZlLCAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX09UUF9XQl9HUkdCLCAgICAgICAgICAgICAgICAgIGZsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSU1HX0hZU1RfSU5GTywgICAgICAgICAgICAgICAgY2FtX2ltZ19oeXN0ZXJpc2lzX2luZm9fdCwgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9DQUNfSU5GTywgICAgICAgICAgICAgICAgICAgICBjYW1fY2FjX2luZm9fdCwgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0NBQywgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbV9hYmVycmF0aW9uX21vZGVfdCwgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTkVVVFJBTF9DT0xfUE9JTlQsICAgICAgICAgICAgY2FtX25ldXRyYWxfY29sX3BvaW50X3QsICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9ST1RBVElPTiwgICAgICAgICAgICAgICAgICAgICBjYW1fcm90YXRpb25faW5mb190LCAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0hXX0RBVEFfT1ZFUldSSVRFLCAgICAgICAgICAgIGNhbV9od19kYXRhX292ZXJ3cml0ZV90LCAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfSU1HTElCLCAgICAgICAgICAgICAgICAgICAgICAgY2FtX2ludGZfbWV0YV9pbWdsaWJfdCwgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9DQVBUVVJFX0ZSQU1FX0NPTkZJRywgICAgICAgICBjYW1fY2FwdHVyZV9mcmFtZV9jb25maWdfdCwgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0NVU1RPTSwgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbV9wYXJtX2J1ZmZlcl90LCAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX1BBUk1fRkxJUCwgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9VU0VfQVZfVElNRVIsICAgICAgICAgICAgICAgICB1aW50OF90LCAgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0VGRkVDVElWRV9FWFBPU1VSRV9GQUNUT1IsICAgIGZsb2F0LCAgICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTERBRl9FWElGLCAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsICAgICAgICAgICAgICAgICAgICAyKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9CTEFDS19MRVZFTF9TT1VSQ0VfUEFUVEVSTiwgICBjYW1fYmxhY2tfbGV2ZWxfbWV0YWRhdGFfdCwgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9NRVRBX0JMQUNLX0xFVkVMX0FQUExJRURfUEFUVEVSTiwgIGNhbV9ibGFja19sZXZlbF9tZXRhZGF0YV90LCAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfTE9XX0xJR0hULCAgICAgICAgICAgICAgICAgICAgY2FtX2xvd19saWdodF9tb2RlX3QsICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfTUVUQV9JTUdfRFlOX0ZFQVQsICAgICAgICAgICAgICAgICBjYW1fZHluX2ltZ19kYXRhX3QsICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX01BTlVBTF9DQVBUVVJFX1RZUEUsICAgICAgICAgIGNhbV9tYW51YWxfY2FwdHVyZV90eXBlLCAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX0FGX1NUQVRFX1RSQU5TSVRJT04sICAgICAgICAgICAgICAgdWludDhfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9JTklUSUFMX0VYUE9TVVJFX0lOREVYLCAgICAgICB1aW50MzJfdCwgICAgICAgICAgICAgICAgICAgIDEpOwogICAgSU5DTFVERShDQU1fSU5URl9QQVJNX0lOU1RBTlRfQUVDLCAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICBJTkNMVURFKENBTV9JTlRGX01FVEFfUkVQUk9DRVNTX0ZMQUdTLCAgICAgICAgICAgICAgdWludDhfdCwgICAgICAgICAgICAgICAgICAgICAxKTsKICAgIElOQ0xVREUoQ0FNX0lOVEZfUEFSTV9KUEVHX0VOQ09ERV9DUk9QLCAgICAgICAgICAgICBjYW1fc3RyZWFtX2Nyb3BfaW5mb190LCAgICAgIDEpOwp9IG1ldGFkYXRhX2RhdGFfdDsKCi8qIFVwZGF0ZSBjbGVhcl9tZXRhZGF0YV9idWZmZXIoKSBmdW5jdGlvbiB3aGVuIGEgbmV3IGlzX3h4eF92YWxpZCBpcyBhZGRlZCB0bwogKiBvciByZW1vdmVkIGZyb20gdGhpcyBzdHJ1Y3R1cmUgKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5pb257CiAgICAgICAgLyogSGFzaCB0YWJsZSBvZiAnaXMgdmFsaWQnIGZsYWdzICovCiAgICAgICAgdWludDhfdCAgICAgICAgIGlzX3ZhbGlkW0NBTV9JTlRGX1BBUk1fTUFYXTsKCiAgICAgICAgLyogSGFzaCB0YWJsZSBvZiAnaXMgcmVxdWlyZWQnIGZsYWdzIGZvciB0aGUgR0VUIFBBUkFNICovCiAgICAgICAgdWludDhfdCAgICAgICAgIGlzX3JlcWRbQ0FNX0lOVEZfUEFSTV9NQVhdOwogICAgfTsKICAgIG1ldGFkYXRhX2RhdGFfdCBkYXRhOwogICAgLypUdW5pbmcgRGF0YSAqLwogICAgdWludDhfdCBpc190dW5pbmdfcGFyYW1zX3ZhbGlkOwogICAgdHVuaW5nX3BhcmFtc190IHR1bmluZ19wYXJhbXM7CgogICAgLyogTW9iaWNhdCBQYXJhbXMgKi8KICAgIHVpbnQ4X3QgaXNfbW9iaWNhdF9hZWNfcGFyYW1zX3ZhbGlkOwogICAgY2FtXzNhX3BhcmFtc190IG1vYmljYXRfYWVjX3BhcmFtczsKCiAgICAvKiBTdGF0cyAzQSBEZWJ1ZyBQYXJhbXMgKi8KICAgIHVpbnQ4X3QgaXNfc3RhdHNkZWJ1Z19hZV9wYXJhbXNfdmFsaWQ7CiAgICBjYW1fYWVfZXhpZl9kZWJ1Z190IHN0YXRzZGVidWdfYWVfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfYXdiX3BhcmFtc192YWxpZDsKICAgIGNhbV9hd2JfZXhpZl9kZWJ1Z190IHN0YXRzZGVidWdfYXdiX2RhdGE7CgogICAgdWludDhfdCBpc19zdGF0c2RlYnVnX2FmX3BhcmFtc192YWxpZDsKICAgIGNhbV9hZl9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19hZl9kYXRhOwoKICAgIHVpbnQ4X3QgaXNfc3RhdHNkZWJ1Z19hc2RfcGFyYW1zX3ZhbGlkOwogICAgY2FtX2FzZF9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19hc2RfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfc3RhdHNfcGFyYW1zX3ZhbGlkOwogICAgY2FtX3N0YXRzX2J1ZmZlcl9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19zdGF0c19idWZmZXJfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfYmVzdGF0c19wYXJhbXNfdmFsaWQ7CiAgICBjYW1fYmVzdGF0c19idWZmZXJfZXhpZl9kZWJ1Z190IHN0YXRzZGVidWdfYmVzdGF0c19idWZmZXJfZGF0YTsKCiAgICB1aW50OF90IGlzX3N0YXRzZGVidWdfYmhpc3RfcGFyYW1zX3ZhbGlkOwogICAgY2FtX2JoaXN0X2J1ZmZlcl9leGlmX2RlYnVnX3Qgc3RhdHNkZWJ1Z19iaGlzdF9kYXRhOwoKICAgIHVpbnQ4X3QgaXNfc3RhdHNkZWJ1Z18zYV90dW5pbmdfcGFyYW1zX3ZhbGlkOwogICAgY2FtX3EzYV90dW5pbmdfaW5mb190IHN0YXRzZGVidWdfM2FfdHVuaW5nX2RhdGE7Cgp9IG1ldGFkYXRhX2J1ZmZlcl90OwoKdHlwZWRlZiBtZXRhZGF0YV9idWZmZXJfdCBwYXJtX2J1ZmZlcl90OwoKI2lmZGVmICBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCgovKiBVcGRhdGUgdGhpcyBpbmxpbmUgZnVuY3Rpb24gd2hlbiBhIG5ldyBpc194eHhfdmFsaWQgaXMgYWRkZWQgdG8KICogb3IgcmVtb3ZlZCBmcm9tIG1ldGFkYXRhX2J1ZmZlcl90ICovCnN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9tZXRhZGF0YV9idWZmZXIobWV0YWRhdGFfYnVmZmVyX3QgKm1ldGEpCnsKICAgIGlmIChtZXRhKSB7CiAgICAgIG1lbXNldChtZXRhLT5pc192YWxpZCwgMCwgQ0FNX0lOVEZfUEFSTV9NQVgpOwogICAgICBtZXRhLT5pc190dW5pbmdfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfbW9iaWNhdF9hZWNfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfc3RhdHNkZWJ1Z19hZV9wYXJhbXNfdmFsaWQgPSAwOwogICAgICBtZXRhLT5pc19zdGF0c2RlYnVnX2F3Yl9wYXJhbXNfdmFsaWQgPSAwOwogICAgICBtZXRhLT5pc19zdGF0c2RlYnVnX2FmX3BhcmFtc192YWxpZCA9IDA7CiAgICAgIG1ldGEtPmlzX3N0YXRzZGVidWdfYXNkX3BhcmFtc192YWxpZCA9IDA7CiAgICAgIG1ldGEtPmlzX3N0YXRzZGVidWdfc3RhdHNfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfc3RhdHNkZWJ1Z19iZXN0YXRzX3BhcmFtc192YWxpZCA9IDA7CiAgICAgIG1ldGEtPmlzX3N0YXRzZGVidWdfYmhpc3RfcGFyYW1zX3ZhbGlkID0gMDsKICAgICAgbWV0YS0+aXNfc3RhdHNkZWJ1Z18zYV90dW5pbmdfcGFyYW1zX3ZhbGlkID0gMDsKICAgIH0KfQoKI2lmZGVmICBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qIF9fUUNBTUVSQV9JTlRGX0hfXyAqLwo=