LyoKICogJFhGcmVlODY6IHhjL2xpYi9mb250Y29uZmlnL3NyYy9mY2RiZy5jLHYgMS4xMCAyMDAyLzA4LzIyIDE4OjUzOjIyIGtlaXRocCBFeHAgJAogKgogKiBDb3B5cmlnaHQgqSAyMDAwIEtlaXRoIFBhY2thcmQsIG1lbWJlciBvZiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCiAqCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwogKiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAogKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwogKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBLZWl0aCBQYWNrYXJkIG5vdCBiZSB1c2VkIGluCiAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAogKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBtYWtlcyBubwogKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQKICogaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KICoKICogS0VJVEggUEFDS0FSRCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwogKiBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAogKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCiAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICovCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSAiZmNpbnQuaCIKCnZvaWQKRmNWYWx1ZVByaW50IChjb25zdCBGY1ZhbHVlIHYpCnsKICAgIHN3aXRjaCAodi50eXBlKSB7CiAgICBjYXNlIEZjVHlwZVZvaWQ6CglwcmludGYgKCIgPHZvaWQ+Iik7CglicmVhazsKICAgIGNhc2UgRmNUeXBlSW50ZWdlcjoKCXByaW50ZiAoIiAlZCIsIHYudS5pKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVEb3VibGU6CglwcmludGYgKCIgJWciLCB2LnUuZCk7CglicmVhazsKICAgIGNhc2UgRmNUeXBlU3RyaW5nOgoJcHJpbnRmICgiIFwiJXNcIiIsIHYudS5zKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVCb29sOgoJcHJpbnRmICgiICVzIiwgdi51LmIgPyAiRmNUcnVlIiA6ICJGY0ZhbHNlIik7CglicmVhazsKICAgIGNhc2UgRmNUeXBlTWF0cml4OgoJcHJpbnRmICgiICglZiAlZjsgJWYgJWYpIiwgdi51Lm0tPnh4LCB2LnUubS0+eHksIHYudS5tLT55eCwgdi51Lm0tPnl5KTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVDaGFyU2V0OgkvKiBYWFggKi8KCXByaW50ZiAoIiBzZXQiKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVMYW5nU2V0OgoJcHJpbnRmICgiIGxhbmdzZXQiKTsKCWJyZWFrOwogICAgY2FzZSBGY1R5cGVGVEZhY2U6CglwcmludGYgKCIgZmFjZSIpOwoJYnJlYWs7CiAgICB9Cn0KCnZvaWQKRmNWYWx1ZUxpc3RQcmludCAoY29uc3QgRmNWYWx1ZUxpc3QgKmwpCnsKICAgIGZvciAoOyBsOyBsID0gbC0+bmV4dCkKICAgIHsKCUZjVmFsdWVQcmludCAobC0+dmFsdWUpOwoJaWYgKGwtPmJpbmRpbmcgPT0gRmNWYWx1ZUJpbmRpbmdXZWFrKQoJICAgIHByaW50ZiAoIih3KSIpOwogICAgfQp9Cgp2b2lkCkZjUGF0dGVyblByaW50IChjb25zdCBGY1BhdHRlcm4gKnApCnsKICAgIGludAkJICAgIGk7CiAgICBGY1BhdHRlcm5FbHQgICAqZTsKICAgIAogICAgaWYgKCFwKQogICAgewoJcHJpbnRmICgiTnVsbCBwYXR0ZXJuXG4iKTsKCXJldHVybjsKICAgIH0KICAgIHByaW50ZiAoIlBhdHRlcm4gJWQgb2YgJWRcbiIsIHAtPm51bSwgcC0+c2l6ZSk7CiAgICBmb3IgKGkgPSAwOyBpIDwgcC0+bnVtOyBpKyspCiAgICB7CgllID0gJnAtPmVsdHNbaV07CglwcmludGYgKCJcdCVzOiIsIGUtPm9iamVjdCk7CglGY1ZhbHVlTGlzdFByaW50IChlLT52YWx1ZXMpOwoJcHJpbnRmICgiXG4iKTsKICAgIH0KICAgIHByaW50ZiAoIlxuIik7Cn0KCnZvaWQKRmNPcFByaW50IChGY09wIG9wKQp7CiAgICBzd2l0Y2ggKG9wKSB7CiAgICBjYXNlIEZjT3BJbnRlZ2VyOiBwcmludGYgKCJJbnRlZ2VyIik7IGJyZWFrOwogICAgY2FzZSBGY09wRG91YmxlOiBwcmludGYgKCJEb3VibGUiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BTdHJpbmc6IHByaW50ZiAoIlN0cmluZyIpOyBicmVhazsKICAgIGNhc2UgRmNPcE1hdHJpeDogcHJpbnRmICgiTWF0cml4Iik7IGJyZWFrOwogICAgY2FzZSBGY09wQm9vbDogcHJpbnRmICgiQm9vbCIpOyBicmVhazsKICAgIGNhc2UgRmNPcENoYXJTZXQ6IHByaW50ZiAoIkNoYXJTZXQiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BGaWVsZDogcHJpbnRmICgiRmllbGQiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BDb25zdDogcHJpbnRmICgiQ29uc3QiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BBc3NpZ246IHByaW50ZiAoIkFzc2lnbiIpOyBicmVhazsKICAgIGNhc2UgRmNPcEFzc2lnblJlcGxhY2U6IHByaW50ZiAoIkFzc2lnblJlcGxhY2UiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BQcmVwZW5kOiBwcmludGYgKCJQcmVwZW5kIik7IGJyZWFrOwogICAgY2FzZSBGY09wUHJlcGVuZEZpcnN0OiBwcmludGYgKCJQcmVwZW5kRmlyc3QiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BBcHBlbmQ6IHByaW50ZiAoIkFwcGVuZCIpOyBicmVhazsKICAgIGNhc2UgRmNPcEFwcGVuZExhc3Q6IHByaW50ZiAoIkFwcGVuZExhc3QiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BRdWVzdDogcHJpbnRmICgiUXVlc3QiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BPcjogcHJpbnRmICgiT3IiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BBbmQ6IHByaW50ZiAoIkFuZCIpOyBicmVhazsKICAgIGNhc2UgRmNPcEVxdWFsOiBwcmludGYgKCJFcXVhbCIpOyBicmVhazsKICAgIGNhc2UgRmNPcE5vdEVxdWFsOiBwcmludGYgKCJOb3RFcXVhbCIpOyBicmVhazsKICAgIGNhc2UgRmNPcExlc3M6IHByaW50ZiAoIkxlc3MiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BMZXNzRXF1YWw6IHByaW50ZiAoIkxlc3NFcXVhbCIpOyBicmVhazsKICAgIGNhc2UgRmNPcE1vcmU6IHByaW50ZiAoIk1vcmUiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BNb3JlRXF1YWw6IHByaW50ZiAoIk1vcmVFcXVhbCIpOyBicmVhazsKICAgIGNhc2UgRmNPcENvbnRhaW5zOiBwcmludGYgKCJDb250YWlucyIpOyBicmVhazsKICAgIGNhc2UgRmNPcE5vdENvbnRhaW5zOiBwcmludGYgKCJOb3RDb250YWlucyIpOyBicmVhazsKICAgIGNhc2UgRmNPcFBsdXM6IHByaW50ZiAoIlBsdXMiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BNaW51czogcHJpbnRmICgiTWludXMiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BUaW1lczogcHJpbnRmICgiVGltZXMiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BEaXZpZGU6IHByaW50ZiAoIkRpdmlkZSIpOyBicmVhazsKICAgIGNhc2UgRmNPcE5vdDogcHJpbnRmICgiTm90Iik7IGJyZWFrOwogICAgY2FzZSBGY09wTmlsOiBwcmludGYgKCJOaWwiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BDb21tYTogcHJpbnRmICgiQ29tbWEiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BJbnZhbGlkOiBwcmludGYgKCJJbnZhbGlkIik7IGJyZWFrOwogICAgfQp9Cgp2b2lkCkZjRXhwclByaW50IChjb25zdCBGY0V4cHIgKmV4cHIpCnsKICAgIHN3aXRjaCAoZXhwci0+b3ApIHsKICAgIGNhc2UgRmNPcEludGVnZXI6IHByaW50ZiAoIiVkIiwgZXhwci0+dS5pdmFsKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BEb3VibGU6IHByaW50ZiAoIiVnIiwgZXhwci0+dS5kdmFsKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BTdHJpbmc6IHByaW50ZiAoIlwiJXNcIiIsIGV4cHItPnUuc3ZhbCk7IGJyZWFrOwogICAgY2FzZSBGY09wTWF0cml4OiBwcmludGYgKCJbJWcgJWcgJWcgJWddIiwKCQkJICAgICAgZXhwci0+dS5tdmFsLT54eCwKCQkJICAgICAgZXhwci0+dS5tdmFsLT54eSwKCQkJICAgICAgZXhwci0+dS5tdmFsLT55eCwKCQkJICAgICAgZXhwci0+dS5tdmFsLT55eSk7IGJyZWFrOwogICAgY2FzZSBGY09wQm9vbDogcHJpbnRmICgiJXMiLCBleHByLT51LmJ2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BDaGFyU2V0OiBwcmludGYgKCJjaGFyc2V0XG4iKTsgYnJlYWs7CiAgICBjYXNlIEZjT3BOaWw6IHByaW50ZiAoIm5pbFxuIik7IGJyZWFrOwogICAgY2FzZSBGY09wRmllbGQ6IHByaW50ZiAoIiVzIiwgZXhwci0+dS5maWVsZCk7IGJyZWFrOwogICAgY2FzZSBGY09wQ29uc3Q6IHByaW50ZiAoIiVzIiwgZXhwci0+dS5jb25zdGFudCk7IGJyZWFrOwogICAgY2FzZSBGY09wUXVlc3Q6CglGY0V4cHJQcmludCAoZXhwci0+dS50cmVlLmxlZnQpOwoJcHJpbnRmICgiIHF1ZXN0ICIpOwoJRmNFeHByUHJpbnQgKGV4cHItPnUudHJlZS5yaWdodC0+dS50cmVlLmxlZnQpOwoJcHJpbnRmICgiIGNvbG9uICIpOwoJRmNFeHByUHJpbnQgKGV4cHItPnUudHJlZS5yaWdodC0+dS50cmVlLnJpZ2h0KTsKCWJyZWFrOwogICAgY2FzZSBGY09wQXNzaWduOgogICAgY2FzZSBGY09wQXNzaWduUmVwbGFjZToKICAgIGNhc2UgRmNPcFByZXBlbmRGaXJzdDoKICAgIGNhc2UgRmNPcFByZXBlbmQ6CiAgICBjYXNlIEZjT3BBcHBlbmQ6CiAgICBjYXNlIEZjT3BBcHBlbmRMYXN0OgogICAgY2FzZSBGY09wT3I6CiAgICBjYXNlIEZjT3BBbmQ6CiAgICBjYXNlIEZjT3BFcXVhbDoKICAgIGNhc2UgRmNPcE5vdEVxdWFsOgogICAgY2FzZSBGY09wTGVzczoKICAgIGNhc2UgRmNPcExlc3NFcXVhbDoKICAgIGNhc2UgRmNPcE1vcmU6CiAgICBjYXNlIEZjT3BNb3JlRXF1YWw6CiAgICBjYXNlIEZjT3BDb250YWluczoKICAgIGNhc2UgRmNPcE5vdENvbnRhaW5zOgogICAgY2FzZSBGY09wUGx1czoKICAgIGNhc2UgRmNPcE1pbnVzOgogICAgY2FzZSBGY09wVGltZXM6CiAgICBjYXNlIEZjT3BEaXZpZGU6CiAgICBjYXNlIEZjT3BDb21tYToKCUZjRXhwclByaW50IChleHByLT51LnRyZWUubGVmdCk7CglwcmludGYgKCIgIik7Cglzd2l0Y2ggKGV4cHItPm9wKSB7CgljYXNlIEZjT3BBc3NpZ246IHByaW50ZiAoIkFzc2lnbiIpOyBicmVhazsKCWNhc2UgRmNPcEFzc2lnblJlcGxhY2U6IHByaW50ZiAoIkFzc2lnblJlcGxhY2UiKTsgYnJlYWs7CgljYXNlIEZjT3BQcmVwZW5kRmlyc3Q6IHByaW50ZiAoIlByZXBlbmRGaXJzdCIpOyBicmVhazsKCWNhc2UgRmNPcFByZXBlbmQ6IHByaW50ZiAoIlByZXBlbmQiKTsgYnJlYWs7CgljYXNlIEZjT3BBcHBlbmQ6IHByaW50ZiAoIkFwcGVuZCIpOyBicmVhazsKCWNhc2UgRmNPcEFwcGVuZExhc3Q6IHByaW50ZiAoIkFwcGVuZExhc3QiKTsgYnJlYWs7CgljYXNlIEZjT3BPcjogcHJpbnRmICgiT3IiKTsgYnJlYWs7CgljYXNlIEZjT3BBbmQ6IHByaW50ZiAoIkFuZCIpOyBicmVhazsKCWNhc2UgRmNPcEVxdWFsOiBwcmludGYgKCJFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcE5vdEVxdWFsOiBwcmludGYgKCJOb3RFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcExlc3M6IHByaW50ZiAoIkxlc3MiKTsgYnJlYWs7CgljYXNlIEZjT3BMZXNzRXF1YWw6IHByaW50ZiAoIkxlc3NFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcE1vcmU6IHByaW50ZiAoIk1vcmUiKTsgYnJlYWs7CgljYXNlIEZjT3BNb3JlRXF1YWw6IHByaW50ZiAoIk1vcmVFcXVhbCIpOyBicmVhazsKCWNhc2UgRmNPcENvbnRhaW5zOiBwcmludGYgKCJDb250YWlucyIpOyBicmVhazsKCWNhc2UgRmNPcE5vdENvbnRhaW5zOiBwcmludGYgKCJOb3RDb250YWlucyIpOyBicmVhazsKCWNhc2UgRmNPcFBsdXM6IHByaW50ZiAoIlBsdXMiKTsgYnJlYWs7CgljYXNlIEZjT3BNaW51czogcHJpbnRmICgiTWludXMiKTsgYnJlYWs7CgljYXNlIEZjT3BUaW1lczogcHJpbnRmICgiVGltZXMiKTsgYnJlYWs7CgljYXNlIEZjT3BEaXZpZGU6IHByaW50ZiAoIkRpdmlkZSIpOyBicmVhazsKCWNhc2UgRmNPcENvbW1hOiBwcmludGYgKCJDb21tYSIpOyBicmVhazsKCWRlZmF1bHQ6IGJyZWFrOwoJfQoJcHJpbnRmICgiICIpOwoJRmNFeHByUHJpbnQgKGV4cHItPnUudHJlZS5yaWdodCk7CglicmVhazsKICAgIGNhc2UgRmNPcE5vdDoKCXByaW50ZiAoIk5vdCAiKTsKCUZjRXhwclByaW50IChleHByLT51LnRyZWUubGVmdCk7CglicmVhazsKICAgIGNhc2UgRmNPcEludmFsaWQ6IHByaW50ZiAoIkludmFsaWQiKTsgYnJlYWs7CiAgICB9Cn0KCnZvaWQKRmNUZXN0UHJpbnQgKGNvbnN0IEZjVGVzdCAqdGVzdCkKewogICAgc3dpdGNoICh0ZXN0LT5raW5kKSB7CiAgICBjYXNlIEZjTWF0Y2hQYXR0ZXJuOgoJcHJpbnRmICgicGF0dGVybiAiKTsKCWJyZWFrOwogICAgY2FzZSBGY01hdGNoRm9udDoKCXByaW50ZiAoImZvbnQgIik7CglicmVhazsKICAgIH0KICAgIHN3aXRjaCAodGVzdC0+cXVhbCkgewogICAgY2FzZSBGY1F1YWxBbnk6CglwcmludGYgKCJhbnkgIik7CglicmVhazsKICAgIGNhc2UgRmNRdWFsQWxsOgoJcHJpbnRmICgiYWxsICIpOwoJYnJlYWs7CiAgICBjYXNlIEZjUXVhbEZpcnN0OgoJcHJpbnRmICgiZmlyc3QgIik7CglicmVhazsKICAgIGNhc2UgRmNRdWFsTm90Rmlyc3Q6CglwcmludGYgKCJub3RfZmlyc3QgIik7CglicmVhazsKICAgIH0KICAgIHByaW50ZiAoIiVzICIsIHRlc3QtPmZpZWxkKTsKICAgIEZjT3BQcmludCAodGVzdC0+b3ApOwogICAgcHJpbnRmICgiICIpOwogICAgRmNFeHByUHJpbnQgKHRlc3QtPmV4cHIpOwogICAgcHJpbnRmICgiXG4iKTsKfQoKdm9pZApGY0VkaXRQcmludCAoY29uc3QgRmNFZGl0ICplZGl0KQp7CiAgICBwcmludGYgKCJFZGl0ICVzICIsIGVkaXQtPmZpZWxkKTsKICAgIEZjT3BQcmludCAoZWRpdC0+b3ApOwogICAgcHJpbnRmICgiICIpOwogICAgRmNFeHByUHJpbnQgKGVkaXQtPmV4cHIpOwp9Cgp2b2lkCkZjU3Vic3RQcmludCAoY29uc3QgRmNTdWJzdCAqc3Vic3QpCnsKICAgIEZjRWRpdAkqZTsKICAgIEZjVGVzdAkqdDsKICAgIAogICAgcHJpbnRmICgibWF0Y2hcbiIpOwogICAgZm9yICh0ID0gc3Vic3QtPnRlc3Q7IHQ7IHQgPSB0LT5uZXh0KQogICAgewoJcHJpbnRmICgiXHQiKTsKCUZjVGVzdFByaW50ICh0KTsKICAgIH0KICAgIHByaW50ZiAoImVkaXRcbiIpOwogICAgZm9yIChlID0gc3Vic3QtPmVkaXQ7IGU7IGUgPSBlLT5uZXh0KQogICAgewoJcHJpbnRmICgiXHQiKTsKCUZjRWRpdFByaW50IChlKTsKCXByaW50ZiAoIjtcbiIpOwogICAgfQogICAgcHJpbnRmICgiXG4iKTsKfQoKdm9pZApGY0ZvbnRTZXRQcmludCAoY29uc3QgRmNGb250U2V0ICpzKQp7CiAgICBpbnQJICAgIGk7CgogICAgcHJpbnRmICgiRm9udFNldCAlZCBvZiAlZFxuIiwgcy0+bmZvbnQsIHMtPnNmb250KTsKICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uZm9udDsgaSsrKQogICAgewoJcHJpbnRmICgiRm9udCAlZCAiLCBpKTsKCUZjUGF0dGVyblByaW50IChzLT5mb250c1tpXSk7CiAgICB9Cn0KCmludApGY0RlYnVnICh2b2lkKQp7CiAgICBzdGF0aWMgaW50ICBpbml0aWFsaXplZDsKICAgIHN0YXRpYyBpbnQgIGRlYnVnOwoKICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICB7CgljaGFyICAgICplOwoKCWluaXRpYWxpemVkID0gMTsKCWUgPSBnZXRlbnYgKCJGQ19ERUJVRyIpOwoJaWYgKGUpCgl7CgkgICAgcHJpbnRmICgiRkNfREVCVUc9JXNcbiIsIGUpOwoJICAgIGRlYnVnID0gYXRvaSAoZSk7CgkgICAgaWYgKGRlYnVnIDwgMCkKCQlkZWJ1ZyA9IDA7Cgl9CiAgICB9CiAgICByZXR1cm4gZGVidWc7Cn0K