LyoKICoJdzgzNjI3aGYgV0RUIGRyaXZlcgogKgogKgkoYykgQ29weXJpZ2h0IDIwMDMgUOFkcmFpZyBCcmFkeSA8UEBkcmFpZ0JyYWR5LmNvbT4KICoKICoJQmFzZWQgb24gYWR2YW50ZWNod2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCiAqCU9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKICoKICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KICoKICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+LCBBbGwgUmlnaHRzIFJlc2VydmVkLgogKgkJCQlodHRwOi8vd3d3LnJlZGhhdC5jb20KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICoJTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKICoJd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkCiAqCSJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICoKICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CiAqLwoKI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgojaW5jbHVkZSA8bGludXgvZnMuaD4KI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgojaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KCiNpbmNsdWRlIDxhc20vaW8uaD4KI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CgojZGVmaW5lIFdBVENIRE9HX05BTUUgInc4MzYyN2hmIFdEVCIKI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCiNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCA2MAkJLyogNjAgc2VjIGRlZmF1bHQgdGltZW91dCAqLwoKc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X2lzX29wZW47CnN0YXRpYyBjaGFyIGV4cGVjdF9jbG9zZTsKc3RhdGljIHNwaW5sb2NrX3QgaW9fbG9jazsKCi8qIFlvdSBtdXN0IHNldCB0aGlzIC0gdGhlcmUgaXMgbm8gc2FuZSB3YXkgdG8gcHJvYmUgZm9yIHRoaXMgYm9hcmQuICovCnN0YXRpYyBpbnQgd2R0X2lvID0gMHgyRTsKbW9kdWxlX3BhcmFtKHdkdF9pbywgaW50LCAwKTsKTU9EVUxFX1BBUk1fREVTQyh3ZHRfaW8sICJ3ODM2MjdoZiBXRFQgaW8gcG9ydCAoZGVmYXVsdCAweDJFKSIpOwoKc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsJLyogaW4gc2Vjb25kcyAqLwptb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCBpbiBzZWNvbmRzLiAxPD0gdGltZW91dCA8PTYzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIuIik7CgpzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Cm1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKCi8qCiAqCUtlcm5lbCBtZXRob2RzLgogKi8KCiNkZWZpbmUgV0RUX0VGRVIgKHdkdF9pbyswKSAgIC8qIEV4dGVuZGVkIEZ1bmN0aW9uIEVuYWJsZSBSZWdpc3RlcnMgKi8KI2RlZmluZSBXRFRfRUZJUiAod2R0X2lvKzApICAgLyogRXh0ZW5kZWQgRnVuY3Rpb24gSW5kZXggUmVnaXN0ZXIgKHNhbWUgYXMgRUZFUikgKi8KI2RlZmluZSBXRFRfRUZEUiAoV0RUX0VGSVIrMSkgLyogRXh0ZW5kZWQgRnVuY3Rpb24gRGF0YSBSZWdpc3RlciAqLwoKc3RhdGljIHZvaWQKdzgzNjI3aGZfc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCnsKCW91dGJfcCgweDg3LCBXRFRfRUZFUik7IC8qIEVudGVyIGV4dGVuZGVkIGZ1bmN0aW9uIG1vZGUgKi8KCW91dGJfcCgweDg3LCBXRFRfRUZFUik7IC8qIEFnYWluIGFjY29yZGluZyB0byBtYW51YWwgKi8KCglvdXRiX3AoMHgwNywgV0RUX0VGRVIpOyAvKiBwb2ludCB0byBsb2dpY2FsIGRldmljZSBudW1iZXIgcmVnICovCglvdXRiX3AoMHgwOCwgV0RUX0VGRFIpOyAvKiBzZWxlY3QgbG9naWNhbCBkZXZpY2UgOCAoR1BJTzIpICovCglvdXRiX3AoMHgzMCwgV0RUX0VGRVIpOyAvKiBzZWxlY3QgQ1IzMCAqLwoJb3V0Yl9wKDB4MDEsIFdEVF9FRkRSKTsgLyogc2V0IGJpdCAwIHRvIGFjdGl2YXRlIEdQSU8yICovCn0KCnN0YXRpYyB2b2lkCnc4MzYyN2hmX3Vuc2VsZWN0X3dkX3JlZ2lzdGVyKHZvaWQpCnsKCW91dGJfcCgweEFBLCBXRFRfRUZFUik7IC8qIExlYXZlIGV4dGVuZGVkIGZ1bmN0aW9uIG1vZGUgKi8KfQoKLyogdHlhbiBtb3RoZXJib2FyZHMgc2VlbSB0byBzZXQgRjUgdG8gMHg0QyA/CiAqIFNvIGV4cGxpY2l0bHkgaW5pdCB0byBhcHByb3ByaWF0ZSB2YWx1ZS4gKi8Kc3RhdGljIHZvaWQKdzgzNjI3aGZfaW5pdCh2b2lkKQp7Cgl1bnNpZ25lZCBjaGFyIHQ7CgoJdzgzNjI3aGZfc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CgoJb3V0Yl9wKDB4RjYsIFdEVF9FRkVSKTsgLyogU2VsZWN0IENSRjYgKi8KCXQ9aW5iX3AoV0RUX0VGRFIpOyAgICAgIC8qIHJlYWQgQ1JGNiAqLwoJaWYgKHQgIT0gMCkgewoJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiV2F0Y2hkb2cgYWxyZWFkeSBydW5uaW5nLiBSZXNldHRpbmcgdGltZW91dCB0byAlZCBzZWNcbiIsIHRpbWVvdXQpOwoJCW91dGJfcCh0aW1lb3V0LCBXRFRfRUZEUik7ICAgIC8qIFdyaXRlIGJhY2sgdG8gQ1JGNiAqLwoJfQoJb3V0Yl9wKDB4RjUsIFdEVF9FRkVSKTsgLyogU2VsZWN0IENSRjUgKi8KCXQ9aW5iX3AoV0RUX0VGRFIpOyAgICAgIC8qIHJlYWQgQ1JGNSAqLwoJdCY9fjB4MEM7ICAgICAgICAgICAgICAgLyogc2V0IHNlY29uZCBtb2RlICYgZGlzYWJsZSBrZXlib2FyZCB0dXJuaW5nIG9mZiB3YXRjaGRvZyAqLwoJb3V0Yl9wKHQsIFdEVF9FRkRSKTsgICAgLyogV3JpdGUgYmFjayB0byBDUkY1ICovCgoJdzgzNjI3aGZfdW5zZWxlY3Rfd2RfcmVnaXN0ZXIoKTsKfQoKc3RhdGljIHZvaWQKd2R0X2N0cmwoaW50IHRpbWVvdXQpCnsKCXNwaW5fbG9jaygmaW9fbG9jayk7CgkKCXc4MzYyN2hmX3NlbGVjdF93ZF9yZWdpc3RlcigpOwoKCW91dGJfcCgweEY2LCBXRFRfRUZFUik7ICAgIC8qIFNlbGVjdCBDUkY2ICovCglvdXRiX3AodGltZW91dCwgV0RUX0VGRFIpOyAvKiBXcml0ZSBUaW1lb3V0IGNvdW50ZXIgdG8gQ1JGNiAqLwoKCXc4MzYyN2hmX3Vuc2VsZWN0X3dkX3JlZ2lzdGVyKCk7CgoJc3Bpbl91bmxvY2soJmlvX2xvY2spOwp9CgpzdGF0aWMgaW50CndkdF9waW5nKHZvaWQpCnsKCXdkdF9jdHJsKHRpbWVvdXQpOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQKd2R0X2Rpc2FibGUodm9pZCkKewoJd2R0X2N0cmwoMCk7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludAp3ZHRfc2V0X2hlYXJ0YmVhdChpbnQgdCkKewoJaWYgKCh0IDwgMSkgfHwgKHQgPiA2MykpCgkJcmV0dXJuIC1FSU5WQUw7CgoJdGltZW91dCA9IHQ7CglyZXR1cm4gMDsKfQoKc3RhdGljIHNzaXplX3QKd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKewoJaWYgKGNvdW50KSB7CgkJaWYgKCFub3dheW91dCkgewoJCQlzaXplX3QgaTsKCgkJCWV4cGVjdF9jbG9zZSA9IDA7CgoJCQlmb3IgKGkgPSAwOyBpICE9IGNvdW50OyBpKyspIHsKCQkJCWNoYXIgYzsKCQkJCWlmIChnZXRfdXNlcihjLCBidWYraSkpCgkJCQkJcmV0dXJuIC1FRkFVTFQ7CgkJCQlpZiAoYyA9PSAnVicpCgkJCQkJZXhwZWN0X2Nsb3NlID0gNDI7CgkJCX0KCQl9CgkJd2R0X3BpbmcoKTsKCX0KCXJldHVybiBjb3VudDsKfQoKc3RhdGljIGludAp3ZHRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCgkgIHVuc2lnbmVkIGxvbmcgYXJnKQp7Cgl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKCWludCBfX3VzZXIgKnAgPSBhcmdwOwoJaW50IG5ld190aW1lb3V0OwoJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewoJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9NQUdJQ0NMT1NFLAoJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKCQkuaWRlbnRpdHkgPSAiVzgzNjI3SEYgV0RUIiwKCX07CgoJc3dpdGNoIChjbWQpIHsKCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKCSAgaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQoJICAgIHJldHVybiAtRUZBVUxUOwoJICBicmVhazsKCgljYXNlIFdESU9DX0dFVFNUQVRVUzoKCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKCSAgcmV0dXJuIHB1dF91c2VyKDAsIHApOwoKCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgoJICB3ZHRfcGluZygpOwoJICBicmVhazsKCgljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CgkgIGlmIChnZXRfdXNlcihuZXdfdGltZW91dCwgcCkpCgkJICByZXR1cm4gLUVGQVVMVDsKCSAgaWYgKHdkdF9zZXRfaGVhcnRiZWF0KG5ld190aW1lb3V0KSkKCQkgIHJldHVybiAtRUlOVkFMOwoJICB3ZHRfcGluZygpOwoJICAvKiBGYWxsICovCgoJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgoJICByZXR1cm4gcHV0X3VzZXIodGltZW91dCwgcCk7CgoJY2FzZSBXRElPQ19TRVRPUFRJT05TOgoJewoJICBpbnQgb3B0aW9ucywgcmV0dmFsID0gLUVJTlZBTDsKCgkgIGlmIChnZXRfdXNlcihvcHRpb25zLCBwKSkKCSAgICByZXR1cm4gLUVGQVVMVDsKCgkgIGlmIChvcHRpb25zICYgV0RJT1NfRElTQUJMRUNBUkQpIHsKCSAgICB3ZHRfZGlzYWJsZSgpOwoJICAgIHJldHZhbCA9IDA7CgkgIH0KCgkgIGlmIChvcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgewoJICAgIHdkdF9waW5nKCk7CgkgICAgcmV0dmFsID0gMDsKCSAgfQoKCSAgcmV0dXJuIHJldHZhbDsKCX0KCglkZWZhdWx0OgoJICByZXR1cm4gLUVOT1RUWTsKCX0KCXJldHVybiAwOwp9CgpzdGF0aWMgaW50CndkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQp7CglpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmd2R0X2lzX29wZW4pKQoJCXJldHVybiAtRUJVU1k7CgkvKgoJICoJQWN0aXZhdGUKCSAqLwoKCXdkdF9waW5nKCk7CglyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cn0KCnN0YXRpYyBpbnQKd2R0X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQp7CglpZiAoZXhwZWN0X2Nsb3NlID09IDQyKSB7CgkJd2R0X2Rpc2FibGUoKTsKCX0gZWxzZSB7CgkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwoJCXdkdF9waW5nKCk7Cgl9CglleHBlY3RfY2xvc2UgPSAwOwoJY2xlYXJfYml0KDAsICZ3ZHRfaXNfb3Blbik7CglyZXR1cm4gMDsKfQoKLyoKICoJTm90aWZpZXIgZm9yIHN5c3RlbSBkb3duCiAqLwoKc3RhdGljIGludAp3ZHRfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKCXZvaWQgKnVudXNlZCkKewoJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkgewoJCS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KCQl3ZHRfZGlzYWJsZSgpOwoJfQoJcmV0dXJuIE5PVElGWV9ET05FOwp9CgovKgogKglLZXJuZWwgSW50ZXJmYWNlcwogKi8KCnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF9mb3BzID0gewoJLm93bmVyCQk9IFRISVNfTU9EVUxFLAoJLmxsc2VlawkJPSBub19sbHNlZWssCgkud3JpdGUJCT0gd2R0X3dyaXRlLAoJLmlvY3RsCQk9IHdkdF9pb2N0bCwKCS5vcGVuCQk9IHdkdF9vcGVuLAoJLnJlbGVhc2UJPSB3ZHRfY2xvc2UsCn07CgpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugd2R0X21pc2NkZXYgPSB7CgkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKCS5uYW1lID0gIndhdGNoZG9nIiwKCS5mb3BzID0gJndkdF9mb3BzLAp9OwoKLyoKICoJVGhlIFdEVCBuZWVkcyB0byBsZWFybiBhYm91dCBzb2Z0IHNodXRkb3ducyBpbiBvcmRlciB0bwogKgl0dXJuIHRoZSB0aW1lYm9tYiByZWdpc3RlcnMgb2ZmLgogKi8KCnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgd2R0X25vdGlmaWVyID0gewoJLm5vdGlmaWVyX2NhbGwgPSB3ZHRfbm90aWZ5X3N5cywKfTsKCnN0YXRpYyBpbnQgX19pbml0CndkdF9pbml0KHZvaWQpCnsKCWludCByZXQ7CgoJc3Bpbl9sb2NrX2luaXQoJmlvX2xvY2spOwoKCXByaW50ayhLRVJOX0lORk8gIldEVCBkcml2ZXIgZm9yIHRoZSBXaW5ib25kKFRNKSBXODM2MjdIRiBTdXBlciBJL08gY2hpcCBpbml0aWFsaXNpbmcuXG4iKTsKCglpZiAod2R0X3NldF9oZWFydGJlYXQodGltZW91dCkpIHsKCQl3ZHRfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19USU1FT1VUKTsKCQlwcmludGsgKEtFUk5fSU5GTyBQRlggInRpbWVvdXQgdmFsdWUgbXVzdCBiZSAxPD10aW1lb3V0PD02MywgdXNpbmcgJWRcbiIsCgkJCVdBVENIRE9HX1RJTUVPVVQpOwoJfQoKCWlmICghcmVxdWVzdF9yZWdpb24od2R0X2lvLCAxLCBXQVRDSERPR19OQU1FKSkgewoJCXByaW50ayAoS0VSTl9FUlIgUEZYICJJL08gYWRkcmVzcyAweCUwNHggYWxyZWFkeSBpbiB1c2VcbiIsCgkJCXdkdF9pbyk7CgkJcmV0ID0gLUVJTzsKCQlnb3RvIG91dDsKCX0KCgl3ODM2MjdoZl9pbml0KCk7CgoJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwoJaWYgKHJldCAhPSAwKSB7CgkJcHJpbnRrIChLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCgkJCXJldCk7CgkJZ290byB1bnJlZ19yZWdpb25zOwoJfQoKCXJldCA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKCWlmIChyZXQgIT0gMCkgewoJCXByaW50ayAoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7CgkJZ290byB1bnJlZ19yZWJvb3Q7Cgl9CgoJcHJpbnRrIChLRVJOX0lORk8gUEZYICJpbml0aWFsaXplZC4gdGltZW91dD0lZCBzZWMgKG5vd2F5b3V0PSVkKVxuIiwKCQl0aW1lb3V0LCBub3dheW91dCk7CgpvdXQ6CglyZXR1cm4gcmV0Owp1bnJlZ19yZWJvb3Q6Cgl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKdW5yZWdfcmVnaW9uczoKCXJlbGVhc2VfcmVnaW9uKHdkdF9pbywgMSk7Cglnb3RvIG91dDsKfQoKc3RhdGljIHZvaWQgX19leGl0CndkdF9leGl0KHZvaWQpCnsKCW1pc2NfZGVyZWdpc3Rlcigmd2R0X21pc2NkZXYpOwoJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndkdF9ub3RpZmllcik7CglyZWxlYXNlX3JlZ2lvbih3ZHRfaW8sMSk7Cn0KCm1vZHVsZV9pbml0KHdkdF9pbml0KTsKbW9kdWxlX2V4aXQod2R0X2V4aXQpOwoKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpNT0RVTEVfQVVUSE9SKCJQ4WRyYWlnIEJyYWR5IDxQQGRyYWlnQnJhZHkuY29tPiIpOwpNT0RVTEVfREVTQ1JJUFRJT04oInc4MzYyN2hmIFdEVCBkcml2ZXIiKTsKTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwo=