LyoKICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL2ZvbnRjb25maWcvZm9udGNvbmZpZy5oLHYgMS4yNiAyMDAyLzA4LzE5IDE5OjMyOjA0IGtlaXRocCBFeHAgJAogKgogKiBDb3B5cmlnaHQgqSAyMDAxIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAqCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAogKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwogKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBLZWl0aCBQYWNrYXJkIG5vdCBiZSB1c2VkIGluCiAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAogKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBtYWtlcyBubwogKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQKICogaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KICoKICogS0VJVEggUEFDS0FSRCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwogKiBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAogKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCiAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICovCgojaWZuZGVmIF9GT05UQ09ORklHX0hfCiNkZWZpbmUgX0ZPTlRDT05GSUdfSF8KCiNpbmNsdWRlIDxzdGRhcmcuaD4KCnR5cGVkZWYgdW5zaWduZWQgY2hhcglGY0NoYXI4Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CUZjQ2hhcjE2Owp0eXBlZGVmIHVuc2lnbmVkIGludAlGY0NoYXIzMjsKdHlwZWRlZiBpbnQJCUZjQm9vbDsKCi8qCiAqIEN1cnJlbnQgRm9udGNvbmZpZyB2ZXJzaW9uIG51bWJlcgogKi8KI2RlZmluZSBGQ19NQUpPUgkxCiNkZWZpbmUgRkNfTUlOT1IJMAojZGVmaW5lIEZDX1JFVklTSU9OCTEKCiNkZWZpbmUgRkNfVkVSU0lPTgkoKEZDX01BSk9SICogMTAwMDApICsgKEZDX01JTk9SICogMTAwKSArIChGQ19SRVZJU0lPTikpCgojZGVmaW5lIEZjVHJ1ZQkJMQojZGVmaW5lIEZjRmFsc2UJCTAKCiNkZWZpbmUgRkNfRkFNSUxZCSAgICAiZmFtaWx5IgkJLyogU3RyaW5nICovCiNkZWZpbmUgRkNfU1RZTEUJICAgICJzdHlsZSIJCS8qIFN0cmluZyAqLwojZGVmaW5lIEZDX1NMQU5UCSAgICAic2xhbnQiCQkvKiBJbnQgKi8KI2RlZmluZSBGQ19XRUlHSFQJICAgICJ3ZWlnaHQiCQkvKiBJbnQgKi8KI2RlZmluZSBGQ19TSVpFCQkgICAgInNpemUiCQkvKiBEb3VibGUgKi8KI2RlZmluZSBGQ19BU1BFQ1QJICAgICJhc3BlY3QiCQkvKiBEb3VibGUgKi8KI2RlZmluZSBGQ19QSVhFTF9TSVpFCSAgICAicGl4ZWxzaXplIgkJLyogRG91YmxlICovCiNkZWZpbmUgRkNfU1BBQ0lORwkgICAgInNwYWNpbmciCQkvKiBJbnQgKi8KI2RlZmluZSBGQ19GT1VORFJZCSAgICAiZm91bmRyeSIJCS8qIFN0cmluZyAqLwojZGVmaW5lIEZDX0FOVElBTElBUwkgICAgImFudGlhbGlhcyIJCS8qIEJvb2wgKGRlcGVuZHMpICovCiNkZWZpbmUgRkNfSElOVElORwkgICAgImhpbnRpbmciCQkvKiBCb29sICh0cnVlKSAqLwojZGVmaW5lIEZDX1ZFUlRJQ0FMX0xBWU9VVCAgInZlcnRpY2FsbGF5b3V0IgkvKiBCb29sIChmYWxzZSkgKi8KI2RlZmluZSBGQ19BVVRPSElOVAkgICAgImF1dG9oaW50IgkJLyogQm9vbCAoZmFsc2UpICovCiNkZWZpbmUgRkNfR0xPQkFMX0FEVkFOQ0UgICAiZ2xvYmFsYWR2YW5jZSIJLyogQm9vbCAodHJ1ZSkgKi8KI2RlZmluZSBGQ19GSUxFCQkgICAgImZpbGUiCQkvKiBTdHJpbmcgKi8KI2RlZmluZSBGQ19JTkRFWAkgICAgImluZGV4IgkJLyogSW50ICovCiNkZWZpbmUgRkNfRlRfRkFDRQkgICAgImZ0ZmFjZSIJCS8qIEZUX0ZhY2UgKi8KI2RlZmluZSBGQ19SQVNURVJJWkVSCSAgICAicmFzdGVyaXplciIJLyogU3RyaW5nICovCiNkZWZpbmUgRkNfT1VUTElORQkgICAgIm91dGxpbmUiCQkvKiBCb29sICovCiNkZWZpbmUgRkNfU0NBTEFCTEUJICAgICJzY2FsYWJsZSIJCS8qIEJvb2wgKi8KI2RlZmluZSBGQ19TQ0FMRQkgICAgInNjYWxlIgkJLyogZG91YmxlICovCiNkZWZpbmUgRkNfRFBJCQkgICAgImRwaSIJCS8qIGRvdWJsZSAqLwojZGVmaW5lIEZDX1JHQkEJCSAgICAicmdiYSIJCS8qIEludCAqLwojZGVmaW5lIEZDX01JTlNQQUNFCSAgICAibWluc3BhY2UiCQkvKiBCb29sIHVzZSBtaW5pbXVtIGxpbmUgc3BhY2luZyAqLwojZGVmaW5lIEZDX1NPVVJDRQkgICAgInNvdXJjZSIJCS8qIFN0cmluZyAoWDExLCBmcmVldHlwZSkgKi8KI2RlZmluZSBGQ19DSEFSU0VUCSAgICAiY2hhcnNldCIJCS8qIENoYXJTZXQgKi8KI2RlZmluZSBGQ19MQU5HCQkgICAgImxhbmciCQkvKiBTdHJpbmcgT1MvMiBDb2RlUGFnZVJhbmdlICovCgojZGVmaW5lIEZDX0RJUl9DQUNIRV9GSUxFCSAgICAiZm9udHMuY2FjaGUiCiNkZWZpbmUgRkNfVVNFUl9DQUNIRV9GSUxFCSAgICAiLmZvbnRzLmNhY2hlIgoKLyogQWRqdXN0IG91dGxpbmUgcmFzdGVyaXplciAqLwojZGVmaW5lIEZDX0NIQVJfV0lEVEgJICAgICJjaGFyd2lkdGgiCS8qIEludCAqLwojZGVmaW5lIEZDX0NIQVJfSEVJR0hUCSAgICAiY2hhcmhlaWdodCIvKiBJbnQgKi8KI2RlZmluZSBGQ19NQVRSSVgJICAgICJtYXRyaXgiICAgIC8qIEZjTWF0cml4ICovCgojZGVmaW5lIEZDX1dFSUdIVF9MSUdIVAkgICAgMAojZGVmaW5lIEZDX1dFSUdIVF9NRURJVU0gICAgMTAwCiNkZWZpbmUgRkNfV0VJR0hUX0RFTUlCT0xEICAxODAKI2RlZmluZSBGQ19XRUlHSFRfQk9MRAkgICAgMjAwCiNkZWZpbmUgRkNfV0VJR0hUX0JMQUNLCSAgICAyMTAKCiNkZWZpbmUgRkNfU0xBTlRfUk9NQU4JICAgIDAKI2RlZmluZSBGQ19TTEFOVF9JVEFMSUMJICAgIDEwMAojZGVmaW5lIEZDX1NMQU5UX09CTElRVUUgICAgMTEwCgojZGVmaW5lIEZDX1BST1BPUlRJT05BTAkgICAgMAojZGVmaW5lIEZDX01PTk8JCSAgICAxMDAKI2RlZmluZSBGQ19DSEFSQ0VMTAkgICAgMTEwCgovKiBzdWItcGl4ZWwgb3JkZXIgKi8KI2RlZmluZSBGQ19SR0JBX05PTkUJICAgIDAKI2RlZmluZSBGQ19SR0JBX1JHQgkgICAgMQojZGVmaW5lIEZDX1JHQkFfQkdSCSAgICAyCiNkZWZpbmUgRkNfUkdCQV9WUkdCCSAgICAzCiNkZWZpbmUgRkNfUkdCQV9WQkdSCSAgICA0Cgp0eXBlZGVmIGVudW0gX0ZjVHlwZSB7CiAgICBGY1R5cGVWb2lkLCAKICAgIEZjVHlwZUludGVnZXIsIAogICAgRmNUeXBlRG91YmxlLCAKICAgIEZjVHlwZVN0cmluZywgCiAgICBGY1R5cGVCb29sLAogICAgRmNUeXBlTWF0cml4LAogICAgRmNUeXBlQ2hhclNldCwKICAgIEZjVHlwZUZURmFjZSwKICAgIEZjVHlwZUxhbmdTZXQKfSBGY1R5cGU7Cgp0eXBlZGVmIHN0cnVjdCBfRmNNYXRyaXggewogICAgZG91YmxlIHh4LCB4eSwgeXgsIHl5Owp9IEZjTWF0cml4OwoKI2RlZmluZSBGY01hdHJpeEluaXQobSkJKChtKS0+eHggPSAobSktPnl5ID0gMSwgXAoJCQkgKG0pLT54eSA9IChtKS0+eXggPSAwKQoKLyoKICogQSBkYXRhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhlIGF2YWlsYWJsZSBnbHlwaHMgaW4gYSBmb250LgogKiBUaGlzIGlzIHJlcHJlc2VudGVkIGFzIGEgc3BhcnNlIGJvb2xlYW4gYnRyZWUuCiAqLwoKdHlwZWRlZiBzdHJ1Y3QgX0ZjQ2hhclNldCBGY0NoYXJTZXQ7Cgp0eXBlZGVmIHN0cnVjdCBfRmNPYmplY3RUeXBlIHsKICAgIGNvbnN0IGNoYXIJKm9iamVjdDsKICAgIEZjVHlwZQl0eXBlOwp9IEZjT2JqZWN0VHlwZTsKCnR5cGVkZWYgc3RydWN0IF9GY0NvbnN0YW50IHsKICAgIGNvbnN0IEZjQ2hhcjggICpuYW1lOwogICAgY29uc3QgY2hhcgkqb2JqZWN0OwogICAgaW50CQl2YWx1ZTsKfSBGY0NvbnN0YW50OwoKdHlwZWRlZiBlbnVtIF9GY1Jlc3VsdCB7CiAgICBGY1Jlc3VsdE1hdGNoLCBGY1Jlc3VsdE5vTWF0Y2gsIEZjUmVzdWx0VHlwZU1pc21hdGNoLCBGY1Jlc3VsdE5vSWQKfSBGY1Jlc3VsdDsKCnR5cGVkZWYgc3RydWN0IF9GY1BhdHRlcm4gICBGY1BhdHRlcm47Cgp0eXBlZGVmIHN0cnVjdCBfRmNMYW5nU2V0ICAgRmNMYW5nU2V0OwoKdHlwZWRlZiBzdHJ1Y3QgX0ZjVmFsdWUgewogICAgRmNUeXBlCXR5cGU7CiAgICB1bmlvbiB7Cgljb25zdCBGY0NoYXI4CSpzOwoJaW50CQlpOwoJRmNCb29sCQliOwoJZG91YmxlCQlkOwoJY29uc3QgRmNNYXRyaXgJKm07Cgljb25zdCBGY0NoYXJTZXQJKmM7Cgl2b2lkCQkqZjsKCWNvbnN0IEZjUGF0dGVybgkqcDsKCWNvbnN0IEZjTGFuZ1NldAkqbDsKICAgIH0gdTsKfSBGY1ZhbHVlOwoKdHlwZWRlZiBzdHJ1Y3QgX0ZjRm9udFNldCB7CiAgICBpbnQJCW5mb250OwogICAgaW50CQlzZm9udDsKICAgIEZjUGF0dGVybgkqKmZvbnRzOwp9IEZjRm9udFNldDsKCnR5cGVkZWYgc3RydWN0IF9GY09iamVjdFNldCB7CiAgICBpbnQJCW5vYmplY3Q7CiAgICBpbnQJCXNvYmplY3Q7CiAgICBjb25zdCBjaGFyCSoqb2JqZWN0czsKfSBGY09iamVjdFNldDsKICAgIAp0eXBlZGVmIGVudW0gX0ZjTWF0Y2hLaW5kIHsKICAgIEZjTWF0Y2hQYXR0ZXJuLCBGY01hdGNoRm9udAp9IEZjTWF0Y2hLaW5kOwoKdHlwZWRlZiBlbnVtIF9GY0xhbmdSZXN1bHQgewogICAgRmNMYW5nRXF1YWwsIEZjTGFuZ0RpZmZlcmVudENvdW50cnksIEZjTGFuZ0RpZmZlcmVudExhbmcKfSBGY0xhbmdSZXN1bHQ7Cgp0eXBlZGVmIGVudW0gX0ZjU2V0TmFtZSB7CiAgICBGY1NldFN5c3RlbSA9IDAsCiAgICBGY1NldEFwcGxpY2F0aW9uID0gMQp9IEZjU2V0TmFtZTsKCnR5cGVkZWYgc3RydWN0IF9GY0F0b21pYyBGY0F0b21pYzsKCiNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKGNfcGx1c3BsdXMpIC8qIGZvciBDKysgVjIuMCAqLwojZGVmaW5lIF9GQ0ZVTkNQUk9UT0JFR0lOIGV4dGVybiAiQyIgewkvKiBkbyBub3QgbGVhdmUgb3BlbiBhY3Jvc3MgaW5jbHVkZXMgKi8KI2RlZmluZSBfRkNGVU5DUFJPVE9FTkQgfQojZWxzZQojZGVmaW5lIF9GQ0ZVTkNQUk9UT0JFR0lOCiNkZWZpbmUgX0ZDRlVOQ1BST1RPRU5ECiNlbmRpZgoKdHlwZWRlZiBlbnVtIHsgRmNFbmRpYW5CaWcsIEZjRW5kaWFuTGl0dGxlIH0gRmNFbmRpYW47Cgp0eXBlZGVmIHN0cnVjdCBfRmNDb25maWcgICAgRmNDb25maWc7Cgp0eXBlZGVmIHN0cnVjdCBfRmNHbG9iYWxDYWNoZQlGY0ZpbGVDYWNoZTsKCnR5cGVkZWYgc3RydWN0IF9GY0JsYW5rcyAgICBGY0JsYW5rczsKCnR5cGVkZWYgc3RydWN0IF9GY1N0ckxpc3QgICBGY1N0ckxpc3Q7Cgp0eXBlZGVmIHN0cnVjdCBfRmNTdHJTZXQgICAgRmNTdHJTZXQ7CgpfRkNGVU5DUFJPVE9CRUdJTgoKRmNCb29sCkZjRGlyQ2FjaGVWYWxpZCAoY29uc3QgRmNDaGFyOCAqY2FjaGVfZmlsZSk7CgovKiBmY2JsYW5rcy5jICovCkZjQmxhbmtzICoKRmNCbGFua3NDcmVhdGUgKHZvaWQpOwoKdm9pZApGY0JsYW5rc0Rlc3Ryb3kgKEZjQmxhbmtzICpiKTsKCkZjQm9vbApGY0JsYW5rc0FkZCAoRmNCbGFua3MgKmIsIEZjQ2hhcjMyIHVjczQpOwoKRmNCb29sCkZjQmxhbmtzSXNNZW1iZXIgKEZjQmxhbmtzICpiLCBGY0NoYXIzMiB1Y3M0KTsKCi8qIGZjY2ZnLmMgKi8KRmNDaGFyOCAqCkZjQ29uZmlnRmlsZW5hbWUgKGNvbnN0IEZjQ2hhcjggKnVybCk7CiAgICAKRmNDb25maWcgKgpGY0NvbmZpZ0NyZWF0ZSAodm9pZCk7Cgp2b2lkCkZjQ29uZmlnRGVzdHJveSAoRmNDb25maWcgKmNvbmZpZyk7CgpGY0Jvb2wKRmNDb25maWdTZXRDdXJyZW50IChGY0NvbmZpZyAqY29uZmlnKTsKCkZjQ29uZmlnICoKRmNDb25maWdHZXRDdXJyZW50ICh2b2lkKTsKCkZjQm9vbApGY0NvbmZpZ1VwdG9EYXRlIChGY0NvbmZpZyAqY29uZmlnKTsKICAgIApGY0Jvb2wKRmNDb25maWdCdWlsZEZvbnRzIChGY0NvbmZpZyAqY29uZmlnKTsKCkZjU3RyTGlzdCAqCkZjQ29uZmlnR2V0Rm9udERpcnMgKEZjQ29uZmlnICAgKmNvbmZpZyk7CgpGY1N0ckxpc3QgKgpGY0NvbmZpZ0dldENvbmZpZ0RpcnMgKEZjQ29uZmlnICAgKmNvbmZpZyk7CgpGY1N0ckxpc3QgKgpGY0NvbmZpZ0dldENvbmZpZ0ZpbGVzIChGY0NvbmZpZyAgICAqY29uZmlnKTsKCkZjQ2hhcjggKgpGY0NvbmZpZ0dldENhY2hlIChGY0NvbmZpZyAgKmNvbmZpZyk7CgpGY0JsYW5rcyAqCkZjQ29uZmlnR2V0QmxhbmtzIChGY0NvbmZpZyAqY29uZmlnKTsKCmludApGY0NvbmZpZ0dldFJlc2NhbkludmVydmFsIChGY0NvbmZpZyAqY29uZmlnKTsKCkZjQm9vbApGY0NvbmZpZ1NldFJlc2NhbkludmVydmFsIChGY0NvbmZpZyAqY29uZmlnLCBpbnQgcmVzY2FuSW50ZXJ2YWwpOwoKRmNGb250U2V0ICoKRmNDb25maWdHZXRGb250cyAoRmNDb25maWcJKmNvbmZpZywKCQkgIEZjU2V0TmFtZQlzZXQpOwoKRmNCb29sCkZjQ29uZmlnQXBwRm9udEFkZEZpbGUgKEZjQ29uZmlnICAgICpjb25maWcsCgkJCWNvbnN0IEZjQ2hhcjggICpmaWxlKTsKCkZjQm9vbApGY0NvbmZpZ0FwcEZvbnRBZGREaXIgKEZjQ29uZmlnCSAgICAqY29uZmlnLAoJCSAgICAgICBjb25zdCBGY0NoYXI4ICAgKmRpcik7Cgp2b2lkCkZjQ29uZmlnQXBwRm9udENsZWFyIChGY0NvbmZpZwkgICAgKmNvbmZpZyk7CgpGY0Jvb2wKRmNDb25maWdTdWJzdGl0dXRlV2l0aFBhdCAoRmNDb25maWcJKmNvbmZpZywKCQkJICAgRmNQYXR0ZXJuCSpwLAoJCQkgICBGY1BhdHRlcm4JKnBfcGF0LAoJCQkgICBGY01hdGNoS2luZAlraW5kKTsKCkZjQm9vbApGY0NvbmZpZ1N1YnN0aXR1dGUgKEZjQ29uZmlnCSpjb25maWcsCgkJICAgIEZjUGF0dGVybgkqcCwKCQkgICAgRmNNYXRjaEtpbmQJa2luZCk7CgovKiBmY2NoYXJzZXQuYyAqLwpGY0NoYXJTZXQgKgpGY0NoYXJTZXRDcmVhdGUgKHZvaWQpOwoKdm9pZApGY0NoYXJTZXREZXN0cm95IChGY0NoYXJTZXQgKmZjcyk7CgpGY0Jvb2wKRmNDaGFyU2V0QWRkQ2hhciAoRmNDaGFyU2V0ICpmY3MsIEZjQ2hhcjMyIHVjczQpOwoKRmNDaGFyU2V0ICoKRmNDaGFyU2V0Q29weSAoRmNDaGFyU2V0ICpzcmMpOwoKRmNCb29sCkZjQ2hhclNldEVxdWFsIChjb25zdCBGY0NoYXJTZXQgKmEsIGNvbnN0IEZjQ2hhclNldCAqYik7CgpGY0NoYXJTZXQgKgpGY0NoYXJTZXRJbnRlcnNlY3QgKGNvbnN0IEZjQ2hhclNldCAqYSwgY29uc3QgRmNDaGFyU2V0ICpiKTsKCkZjQ2hhclNldCAqCkZjQ2hhclNldFVuaW9uIChjb25zdCBGY0NoYXJTZXQgKmEsIGNvbnN0IEZjQ2hhclNldCAqYik7CgpGY0NoYXJTZXQgKgpGY0NoYXJTZXRTdWJ0cmFjdCAoY29uc3QgRmNDaGFyU2V0ICphLCBjb25zdCBGY0NoYXJTZXQgKmIpOwoKRmNCb29sCkZjQ2hhclNldEhhc0NoYXIgKGNvbnN0IEZjQ2hhclNldCAqZmNzLCBGY0NoYXIzMiB1Y3M0KTsKCkZjQ2hhcjMyCkZjQ2hhclNldENvdW50IChjb25zdCBGY0NoYXJTZXQgKmEpOwoKRmNDaGFyMzIKRmNDaGFyU2V0SW50ZXJzZWN0Q291bnQgKGNvbnN0IEZjQ2hhclNldCAqYSwgY29uc3QgRmNDaGFyU2V0ICpiKTsKCkZjQ2hhcjMyCkZjQ2hhclNldFN1YnRyYWN0Q291bnQgKGNvbnN0IEZjQ2hhclNldCAqYSwgY29uc3QgRmNDaGFyU2V0ICpiKTsKCkZjQm9vbApGY0NoYXJTZXRJc1N1YnNldCAoY29uc3QgRmNDaGFyU2V0ICphLCBjb25zdCBGY0NoYXJTZXQgKmIpOwoKI2RlZmluZSBGQ19DSEFSU0VUX01BUF9TSVpFICgyNTYvMzIpCiNkZWZpbmUgRkNfQ0hBUlNFVF9ET05FCSgoRmNDaGFyMzIpIC0xKQoKRmNDaGFyMzIKRmNDaGFyU2V0Rmlyc3RQYWdlIChjb25zdCBGY0NoYXJTZXQgKmEsIAoJCSAgICBGY0NoYXIzMgkgICAgbWFwW0ZDX0NIQVJTRVRfTUFQX1NJWkVdLAoJCSAgICBGY0NoYXIzMgkgICAgKm5leHQpOwoKRmNDaGFyMzIKRmNDaGFyU2V0TmV4dFBhZ2UgKGNvbnN0IEZjQ2hhclNldCAgKmEsIAoJCSAgIEZjQ2hhcjMyCSAgICBtYXBbRkNfQ0hBUlNFVF9NQVBfU0laRV0sCgkJICAgRmNDaGFyMzIJICAgICpuZXh0KTsKCgovKiBmY2RiZy5jICovCnZvaWQKRmNWYWx1ZVByaW50IChjb25zdCBGY1ZhbHVlIHYpOwoKdm9pZApGY1BhdHRlcm5QcmludCAoY29uc3QgRmNQYXR0ZXJuICpwKTsKCnZvaWQKRmNGb250U2V0UHJpbnQgKGNvbnN0IEZjRm9udFNldCAqcyk7CgovKiBmY2RlZmF1bHQuYyAqLwp2b2lkCkZjRGVmYXVsdFN1YnN0aXR1dGUgKEZjUGF0dGVybiAqcGF0dGVybik7CgovKiBmY2Rpci5jICovCkZjQm9vbApGY0ZpbGVTY2FuIChGY0ZvbnRTZXQJICAgICpzZXQsCgkgICAgRmNTdHJTZXQJICAgICpkaXJzLAoJICAgIEZjRmlsZUNhY2hlCSAgICAqY2FjaGUsCgkgICAgRmNCbGFua3MJICAgICpibGFua3MsCgkgICAgY29uc3QgRmNDaGFyOCAgICpmaWxlLAoJICAgIEZjQm9vbAkgICAgZm9yY2UpOwoKRmNCb29sCkZjRGlyU2NhbiAoRmNGb250U2V0CSAgICAqc2V0LAoJICAgRmNTdHJTZXQJICAgICpkaXJzLAoJICAgRmNGaWxlQ2FjaGUJICAgICpjYWNoZSwKCSAgIEZjQmxhbmtzCSAgICAqYmxhbmtzLAoJICAgY29uc3QgRmNDaGFyOCAgICAqZGlyLAoJICAgRmNCb29sCSAgICBmb3JjZSk7CgpGY0Jvb2wKRmNEaXJTYXZlIChGY0ZvbnRTZXQgKnNldCwgRmNTdHJTZXQgKmRpcnMsIGNvbnN0IEZjQ2hhcjggKmRpcik7CgovKiBmY2ZyZWV0eXBlLmMgKi8KRmNQYXR0ZXJuICoKRmNGcmVlVHlwZVF1ZXJ5IChjb25zdCBGY0NoYXI4ICpmaWxlLCBpbnQgaWQsIEZjQmxhbmtzICpibGFua3MsIGludCAqY291bnQpOwoKLyogZmNmcy5jICovCgpGY0ZvbnRTZXQgKgpGY0ZvbnRTZXRDcmVhdGUgKHZvaWQpOwoKdm9pZApGY0ZvbnRTZXREZXN0cm95IChGY0ZvbnRTZXQgKnMpOwoKRmNCb29sCkZjRm9udFNldEFkZCAoRmNGb250U2V0ICpzLCBGY1BhdHRlcm4gKmZvbnQpOwoKLyogZmNpbml0LmMgKi8KRmNDb25maWcgKgpGY0luaXRMb2FkQ29uZmlnICh2b2lkKTsKCkZjQ29uZmlnICoKRmNJbml0TG9hZENvbmZpZ0FuZEZvbnRzICh2b2lkKTsKCkZjQm9vbApGY0luaXQgKHZvaWQpOwoKaW50CkZjR2V0VmVyc2lvbiAodm9pZCk7CgpGY0Jvb2wKRmNJbml0UmVpbml0aWFsaXplICh2b2lkKTsKCkZjQm9vbApGY0luaXRCcmluZ1VwdG9EYXRlICh2b2lkKTsKCi8qIGZjbGFuZy5jICovCkZjTGFuZ1NldCAqCkZjTGFuZ1NldENyZWF0ZSAodm9pZCk7Cgp2b2lkCkZjTGFuZ1NldERlc3Ryb3kgKEZjTGFuZ1NldCAqbHMpOwoKRmNMYW5nU2V0ICoKRmNMYW5nU2V0Q29weSAoY29uc3QgRmNMYW5nU2V0ICpscyk7CgpGY0Jvb2wKRmNMYW5nU2V0QWRkIChGY0xhbmdTZXQgKmxzLCBjb25zdCBGY0NoYXI4ICpsYW5nKTsKCkZjTGFuZ1Jlc3VsdApGY0xhbmdTZXRIYXNMYW5nIChjb25zdCBGY0xhbmdTZXQgKmxzLCBjb25zdCBGY0NoYXI4ICpsYW5nKTsKCkZjTGFuZ1Jlc3VsdApGY0xhbmdTZXRDb21wYXJlIChjb25zdCBGY0xhbmdTZXQgKmxzYSwgY29uc3QgRmNMYW5nU2V0ICpsc2IpOwoKRmNCb29sCkZjTGFuZ1NldEVxdWFsIChjb25zdCBGY0xhbmdTZXQgKmxzYSwgY29uc3QgRmNMYW5nU2V0ICpsc2IpOwoKRmNDaGFyMzIKRmNMYW5nU2V0SGFzaCAoY29uc3QgRmNMYW5nU2V0ICpscyk7CgovKiBmY2xpc3QuYyAqLwpGY09iamVjdFNldCAqCkZjT2JqZWN0U2V0Q3JlYXRlICh2b2lkKTsKCkZjQm9vbApGY09iamVjdFNldEFkZCAoRmNPYmplY3RTZXQgKm9zLCBjb25zdCBjaGFyICpvYmplY3QpOwoKdm9pZApGY09iamVjdFNldERlc3Ryb3kgKEZjT2JqZWN0U2V0ICpvcyk7CgpGY09iamVjdFNldCAqCkZjT2JqZWN0U2V0VmFCdWlsZCAoY29uc3QgY2hhciAqZmlyc3QsIHZhX2xpc3QgdmEpOwoKRmNPYmplY3RTZXQgKgpGY09iamVjdFNldEJ1aWxkIChjb25zdCBjaGFyICpmaXJzdCwgLi4uKTsKCkZjRm9udFNldCAqCkZjRm9udFNldExpc3QgKEZjQ29uZmlnCSAgICAqY29uZmlnLAoJICAgICAgIEZjRm9udFNldCAgICAqKnNldHMsCgkgICAgICAgaW50CSAgICBuc2V0cywKCSAgICAgICBGY1BhdHRlcm4gICAgKnAsCgkgICAgICAgRmNPYmplY3RTZXQgICpvcyk7CgpGY0ZvbnRTZXQgKgpGY0ZvbnRMaXN0IChGY0NvbmZpZwkqY29uZmlnLAoJICAgIEZjUGF0dGVybgkqcCwKCSAgICBGY09iamVjdFNldCAqb3MpOwoKLyogZmNhdG9taWMuYyAqLwoKRmNBdG9taWMgKgpGY0F0b21pY0NyZWF0ZSAoY29uc3QgRmNDaGFyOCAgICpmaWxlKTsKCkZjQm9vbApGY0F0b21pY0xvY2sgKEZjQXRvbWljICphdG9taWMpOwoKRmNDaGFyOCAqCkZjQXRvbWljTmV3RmlsZSAoRmNBdG9taWMgKmF0b21pYyk7CgpGY0NoYXI4ICoKRmNBdG9taWNPcmlnRmlsZSAoRmNBdG9taWMgKmF0b21pYyk7CgpGY0Jvb2wKRmNBdG9taWNSZXBsYWNlT3JpZyAoRmNBdG9taWMgKmF0b21pYyk7Cgp2b2lkCkZjQXRvbWljRGVsZXRlTmV3IChGY0F0b21pYyAqYXRvbWljKTsKCnZvaWQKRmNBdG9taWNVbmxvY2sgKEZjQXRvbWljICphdG9taWMpOwoKdm9pZApGY0F0b21pY0Rlc3Ryb3kgKEZjQXRvbWljICphdG9taWMpOwoKLyogZmNtYXRjaC5jICovCkZjUGF0dGVybiAqCkZjRm9udFNldE1hdGNoIChGY0NvbmZpZyAgICAqY29uZmlnLAoJCUZjRm9udFNldCAgICoqc2V0cywKCQlpbnQJICAgIG5zZXRzLAoJCUZjUGF0dGVybiAgICpwLAoJCUZjUmVzdWx0ICAgICpyZXN1bHQpOwoKRmNQYXR0ZXJuICoKRmNGb250TWF0Y2ggKEZjQ29uZmlnCSpjb25maWcsCgkgICAgIEZjUGF0dGVybgkqcCwgCgkgICAgIEZjUmVzdWx0CSpyZXN1bHQpOwoKRmNQYXR0ZXJuICoKRmNGb250UmVuZGVyUHJlcGFyZSAoRmNDb25maWcJICAgICpjb25maWcsCgkJICAgICBGY1BhdHRlcm4JICAgICpwYXQsCgkJICAgICBGY1BhdHRlcm4JICAgICpmb250KTsKCkZjRm9udFNldCAqCkZjRm9udFNldFNvcnQgKEZjQ29uZmlnCSAgICAqY29uZmlnLAoJICAgICAgIEZjRm9udFNldCAgICAqKnNldHMsCgkgICAgICAgaW50CSAgICBuc2V0cywKCSAgICAgICBGY1BhdHRlcm4gICAgKnAsCgkgICAgICAgRmNCb29sCSAgICB0cmltLAoJICAgICAgIEZjQ2hhclNldCAgICAqKmNzcCwKCSAgICAgICBGY1Jlc3VsdAkgICAgKnJlc3VsdCk7CgpGY0ZvbnRTZXQgKgpGY0ZvbnRTb3J0IChGY0NvbmZpZwkgKmNvbmZpZywKCSAgICBGY1BhdHRlcm4gICAgKnAsCgkgICAgRmNCb29sCSB0cmltLAoJICAgIEZjQ2hhclNldCAgICAqKmNzcCwKCSAgICBGY1Jlc3VsdAkgKnJlc3VsdCk7Cgp2b2lkCkZjRm9udFNldFNvcnREZXN0cm95IChGY0ZvbnRTZXQgKmZzKTsKCi8qIGZjbWF0cml4LmMgKi8KRmNNYXRyaXggKgpGY01hdHJpeENvcHkgKGNvbnN0IEZjTWF0cml4ICptYXQpOwoKRmNCb29sCkZjTWF0cml4RXF1YWwgKGNvbnN0IEZjTWF0cml4ICptYXQxLCBjb25zdCBGY01hdHJpeCAqbWF0Mik7Cgp2b2lkCkZjTWF0cml4TXVsdGlwbHkgKEZjTWF0cml4ICpyZXN1bHQsIGNvbnN0IEZjTWF0cml4ICphLCBjb25zdCBGY01hdHJpeCAqYik7Cgp2b2lkCkZjTWF0cml4Um90YXRlIChGY01hdHJpeCAqbSwgZG91YmxlIGMsIGRvdWJsZSBzKTsKCnZvaWQKRmNNYXRyaXhTY2FsZSAoRmNNYXRyaXggKm0sIGRvdWJsZSBzeCwgZG91YmxlIHN5KTsKCnZvaWQKRmNNYXRyaXhTaGVhciAoRmNNYXRyaXggKm0sIGRvdWJsZSBzaCwgZG91YmxlIHN2KTsKCi8qIGZjbmFtZS5jICovCgpGY0Jvb2wKRmNOYW1lUmVnaXN0ZXJPYmplY3RUeXBlcyAoY29uc3QgRmNPYmplY3RUeXBlICp0eXBlcywgaW50IG50eXBlKTsKCkZjQm9vbApGY05hbWVVbnJlZ2lzdGVyT2JqZWN0VHlwZXMgKGNvbnN0IEZjT2JqZWN0VHlwZSAqdHlwZXMsIGludCBudHlwZSk7CiAgICAKY29uc3QgRmNPYmplY3RUeXBlICoKRmNOYW1lR2V0T2JqZWN0VHlwZSAoY29uc3QgY2hhciAqb2JqZWN0KTsKCkZjQm9vbApGY05hbWVSZWdpc3RlckNvbnN0YW50cyAoY29uc3QgRmNDb25zdGFudCAqY29uc3RzLCBpbnQgbmNvbnN0cyk7CgpGY0Jvb2wKRmNOYW1lVW5yZWdpc3RlckNvbnN0YW50cyAoY29uc3QgRmNDb25zdGFudCAqY29uc3RzLCBpbnQgbmNvbnN0cyk7CiAgICAKY29uc3QgRmNDb25zdGFudCAqCkZjTmFtZUdldENvbnN0YW50IChGY0NoYXI4ICpzdHJpbmcpOwoKRmNCb29sCkZjTmFtZUNvbnN0YW50IChGY0NoYXI4ICpzdHJpbmcsIGludCAqcmVzdWx0KTsKCkZjUGF0dGVybiAqCkZjTmFtZVBhcnNlIChjb25zdCBGY0NoYXI4ICpuYW1lKTsKCkZjQ2hhcjggKgpGY05hbWVVbnBhcnNlIChGY1BhdHRlcm4gKnBhdCk7CgovKiBmY3BhdC5jICovCkZjUGF0dGVybiAqCkZjUGF0dGVybkNyZWF0ZSAodm9pZCk7CgpGY1BhdHRlcm4gKgpGY1BhdHRlcm5EdXBsaWNhdGUgKEZjUGF0dGVybiAqcCk7Cgp2b2lkCkZjUGF0dGVyblJlZmVyZW5jZSAoRmNQYXR0ZXJuICpwKTsKCnZvaWQKRmNWYWx1ZURlc3Ryb3kgKEZjVmFsdWUgdik7CgpGY0Jvb2wKRmNWYWx1ZUVxdWFsIChGY1ZhbHVlIHZhLCBGY1ZhbHVlIHZiKTsKCkZjVmFsdWUKRmNWYWx1ZVNhdmUgKEZjVmFsdWUgdik7Cgp2b2lkCkZjUGF0dGVybkRlc3Ryb3kgKEZjUGF0dGVybiAqcCk7CgpGY0Jvb2wKRmNQYXR0ZXJuRXF1YWwgKGNvbnN0IEZjUGF0dGVybiAqcGEsIGNvbnN0IEZjUGF0dGVybiAqcGIpOwoKRmNCb29sCkZjUGF0dGVybkVxdWFsU3Vic2V0IChjb25zdCBGY1BhdHRlcm4gKnBhLCBjb25zdCBGY1BhdHRlcm4gKnBiLCBjb25zdCBGY09iamVjdFNldCAqb3MpOwoKRmNDaGFyMzIKRmNQYXR0ZXJuSGFzaCAoY29uc3QgRmNQYXR0ZXJuICpwKTsKCkZjQm9vbApGY1BhdHRlcm5BZGQgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBGY1ZhbHVlIHZhbHVlLCBGY0Jvb2wgYXBwZW5kKTsKICAgIApGY0Jvb2wKRmNQYXR0ZXJuQWRkV2VhayAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIEZjVmFsdWUgdmFsdWUsIEZjQm9vbCBhcHBlbmQpOwogICAgCkZjUmVzdWx0CkZjUGF0dGVybkdldCAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGludCBpZCwgRmNWYWx1ZSAqdik7CiAgICAKRmNCb29sCkZjUGF0dGVybkRlbCAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QpOwoKRmNCb29sCkZjUGF0dGVybkFkZEludGVnZXIgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBpbnQgaSk7CgpGY0Jvb2wKRmNQYXR0ZXJuQWRkRG91YmxlIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgZG91YmxlIGQpOwoKRmNCb29sCkZjUGF0dGVybkFkZFN0cmluZyAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGNvbnN0IEZjQ2hhcjggKnMpOwoKRmNCb29sCkZjUGF0dGVybkFkZE1hdHJpeCAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGNvbnN0IEZjTWF0cml4ICpzKTsKCkZjQm9vbApGY1BhdHRlcm5BZGRDaGFyU2V0IChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgY29uc3QgRmNDaGFyU2V0ICpjKTsKCkZjQm9vbApGY1BhdHRlcm5BZGRCb29sIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgRmNCb29sIGIpOwoKRmNCb29sCkZjUGF0dGVybkFkZExhbmdTZXQgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBjb25zdCBGY0xhbmdTZXQgKmxzKTsKCkZjUmVzdWx0CkZjUGF0dGVybkdldEludGVnZXIgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBpbnQgbiwgaW50ICppKTsKCkZjUmVzdWx0CkZjUGF0dGVybkdldERvdWJsZSAoRmNQYXR0ZXJuICpwLCBjb25zdCBjaGFyICpvYmplY3QsIGludCBuLCBkb3VibGUgKmQpOwoKRmNSZXN1bHQKRmNQYXR0ZXJuR2V0U3RyaW5nIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgaW50IG4sIEZjQ2hhcjggKiogcyk7CgpGY1Jlc3VsdApGY1BhdHRlcm5HZXRNYXRyaXggKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBpbnQgbiwgRmNNYXRyaXggKipzKTsKCkZjUmVzdWx0CkZjUGF0dGVybkdldENoYXJTZXQgKEZjUGF0dGVybiAqcCwgY29uc3QgY2hhciAqb2JqZWN0LCBpbnQgbiwgRmNDaGFyU2V0ICoqYyk7CgpGY1Jlc3VsdApGY1BhdHRlcm5HZXRCb29sIChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgaW50IG4sIEZjQm9vbCAqYik7CgpGY1Jlc3VsdApGY1BhdHRlcm5HZXRMYW5nU2V0IChGY1BhdHRlcm4gKnAsIGNvbnN0IGNoYXIgKm9iamVjdCwgaW50IG4sIEZjTGFuZ1NldCAqKmxzKTsKCkZjUGF0dGVybiAqCkZjUGF0dGVyblZhQnVpbGQgKEZjUGF0dGVybiAqb3JpZywgdmFfbGlzdCB2YSk7CiAgICAKRmNQYXR0ZXJuICoKRmNQYXR0ZXJuQnVpbGQgKEZjUGF0dGVybiAqb3JpZywgLi4uKTsKCi8qIGZjc3RyLmMgKi8KCkZjQ2hhcjggKgpGY1N0ckNvcHkgKGNvbnN0IEZjQ2hhcjggKnMpOwoKRmNDaGFyOCAqCkZjU3RyQ29weUZpbGVuYW1lIChjb25zdCBGY0NoYXI4ICpzKTsKICAgIAojZGVmaW5lIEZjVG9Mb3dlcihjKQkoKCdBJyA8PSAoYykgJiYgKGMpIDw9ICdaJykgPyAoYykgLSAnQScgKyAnYScgOiAoYykpCgppbnQKRmNTdHJDbXBJZ25vcmVDYXNlIChjb25zdCBGY0NoYXI4ICpzMSwgY29uc3QgRmNDaGFyOCAqczIpOwoKaW50CkZjU3RyQ21wIChjb25zdCBGY0NoYXI4ICpzMSwgY29uc3QgRmNDaGFyOCAqczIpOwoKaW50CkZjVXRmOFRvVWNzNCAoRmNDaGFyOCAgICpzcmNfb3JpZywKCSAgICAgIEZjQ2hhcjMyICAqZHN0LAoJICAgICAgaW50CWxlbik7CgpGY0Jvb2wKRmNVdGY4TGVuIChGY0NoYXI4CSpzdHJpbmcsCgkgICBpbnQJCWxlbiwKCSAgIGludAkJKm5jaGFyLAoJICAgaW50CQkqd2NoYXIpOwoKI2RlZmluZSBGQ19VVEY4X01BWF9MRU4JNgoKaW50CkZjVWNzNFRvVXRmOCAoRmNDaGFyMzIJdWNzNCwKCSAgICAgIEZjQ2hhcjgJZGVzdFtGQ19VVEY4X01BWF9MRU5dKTsKCmludApGY1V0ZjE2VG9VY3M0IChGY0NoYXI4CSpzcmNfb3JpZywKCSAgICAgICBGY0VuZGlhbgllbmRpYW4sCgkgICAgICAgRmNDaGFyMzIgKmRzdCwKCSAgICAgICBpbnQJbGVuKTsJICAgIC8qIGluIGJ5dGVzICovCgpGY0Jvb2wKRmNVdGYxNkxlbiAoRmNDaGFyOAkqc3RyaW5nLAoJICAgIEZjRW5kaWFuCWVuZGlhbiwKCSAgICBpbnQJCWxlbiwJICAgIC8qIGluIGJ5dGVzICovCgkgICAgaW50CQkqbmNoYXIsCgkgICAgaW50CQkqd2NoYXIpOwoKRmNDaGFyOCAqCkZjU3RyRGlybmFtZSAoY29uc3QgRmNDaGFyOCAqZmlsZSk7CgpGY0NoYXI4ICoKRmNTdHJCYXNlbmFtZSAoY29uc3QgRmNDaGFyOCAqZmlsZSk7CgpGY1N0clNldCAqCkZjU3RyU2V0Q3JlYXRlICh2b2lkKTsKCkZjQm9vbApGY1N0clNldE1lbWJlciAoRmNTdHJTZXQgKnNldCwgY29uc3QgRmNDaGFyOCAqcyk7CgpGY0Jvb2wKRmNTdHJTZXRFcXVhbCAoRmNTdHJTZXQgKnNhLCBGY1N0clNldCAqc2IpOwoKRmNCb29sCkZjU3RyU2V0QWRkIChGY1N0clNldCAqc2V0LCBjb25zdCBGY0NoYXI4ICpzKTsKCkZjQm9vbApGY1N0clNldEFkZEZpbGVuYW1lIChGY1N0clNldCAqc2V0LCBjb25zdCBGY0NoYXI4ICpzKTsKCkZjQm9vbApGY1N0clNldERlbCAoRmNTdHJTZXQgKnNldCwgY29uc3QgRmNDaGFyOCAqcyk7Cgp2b2lkCkZjU3RyU2V0RGVzdHJveSAoRmNTdHJTZXQgKnNldCk7CgpGY1N0ckxpc3QgKgpGY1N0ckxpc3RDcmVhdGUgKEZjU3RyU2V0ICpzZXQpOwoKRmNDaGFyOCAqCkZjU3RyTGlzdE5leHQgKEZjU3RyTGlzdCAqbGlzdCk7Cgp2b2lkCkZjU3RyTGlzdERvbmUgKEZjU3RyTGlzdCAqbGlzdCk7CgovKiBmY3htbC5jICovCkZjQm9vbApGY0NvbmZpZ1BhcnNlQW5kTG9hZCAoRmNDb25maWcgKmNvbmZpZywgY29uc3QgRmNDaGFyOCAqZmlsZSwgRmNCb29sIGNvbXBsYWluKTsKCl9GQ0ZVTkNQUk9UT0VORAoKI2VuZGlmIC8qIF9GT05UQ09ORklHX0hfICovCg==