I2lmbmRlZiBfU09GVEFQX0xPR19IXwojZGVmaW5lIF9TT0ZUQVBfTE9HX0hfCiNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDE5OTMwOQojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdGRhcmcuaD4KI2luY2x1ZGUgImNmZ19hcGkuaCIKCiNkZWZpbmUgU0lHX0xPR0xFViAgKFNJR1JUTUlOICsgMSkKCiNkZWZpbmUgTE9HX09GRiAwCiNkZWZpbmUgTE9HX09OIDB4ZmYKCi8qCiAqILTy06G1yLy2CiAqLwojZGVmaW5lIFNMT0dfREVCVUcJMQkvL9HQt6K49szl0NDOqmxvZ8rks/ajrMG/uty08wojZGVmaW5lIFNMT0dfTk9STUFMIDIJLy+8r7PJsuLK1L3Xts5sb2fK5LP2o6zBv8rK1tAKI2RlZmluZSBTTE9HX0VSUgkzCS8v1sLD/Lvyv+zV1cDgbG9nyuSz9qOswb/QoQojZGVmaW5lIFNMT0dfT0ZGCTQJLy/Iq7K/udix1bTy06EKCiNkZWZpbmUgU0xPR19TT0NUSU1FX09GRiAwCiNkZWZpbmUgU0xPR19TT0NUSU1FX09OIDEKCiNkZWZpbmUgTkVUX1BSSU5UICAgICAgICJbbmV0XSIKI2RlZmluZSBBVF9QUklOVCAgICAgICAgIlthdF0iCiNkZWZpbmUgTU1JX1BSSU5UICAgICAgICJbbW1pXSIKI2RlZmluZSBNSVNDX1BSSU5UICAgICAgIlttaXNjXSIKI2RlZmluZSBTRENBUkRfUFJJTlQgICAgIltzZGNhcmRdIgojZGVmaW5lIFVTQkNGR01OR19QUklOVCAiW3VzYmNmZ21uZ10iCiNkZWZpbmUgRkxVWFNUQVRfUFJJTlQgICJbZmx1eHN0YXRdIgojZGVmaW5lIFdJRklfUFJJTlQgICAgICAiW3dpZmldIgojZGVmaW5lIFJUQ19QUklOVCAgICAgICAiW3J0Y10iCiNkZWZpbmUgVFIwNjlfUFJJTlQgICAgICJbdHIwNjldIgojZGVmaW5lIFBCX1BSSU5UICAgICAgICAiW3BiXSIKI2RlZmluZSBTTVNfUFJJTlQgICAgICAgIltzbXNdIgojZGVmaW5lIE1JU0NfTUJJTSAgICAgICJbbWJpbV0iCiNkZWZpbmUgRFJWQ09NTU5HX1BSSU5UICAgICAgICJbZHJ2Y29tbW5nXSIKI2RlZmluZSBBQlNWUl9QUklOVAkJIlthYnN2cl0iCgpleHRlcm4gaW50IGFzcHJpbnRmKGNoYXIgKipzdHJwLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CgovKioKICogQGJyaWVmIM2z0ru2z9HUy8C7+r3Tv9qjrL2ry8C7+tSt0vJlY2hvtb3E2rrLc29mdGFwX2Fzc2VydL3atePW0KOsttTTpsTausu1xGFzc2VydMirvtax5MG/1tAKICovCiAjaWYgMC8va2xvY3dvcmsKI2RlZmluZSBzb2Z0YXBfYXNzZXJ0KC4uLikgZG8geyBcCiAgICAgICAgICAgICAgICBjaGFyICpwLCp0OyAgICBcCiAgICAgICAgICAgICAgICBpZiAoLTEgPT0gYXNwcmludGYoJnAsIF9fVkFfQVJHU19fKSkgeyBcCiAgICAgICAgICAgICAgICAgICAgY2hhciB0bXBbMTI4XSA9IHswfTsgXAogICAgICAgICAgICAgICAgICAgIHNwcmludGYodG1wLCJlY2hvIFwiJXM6JWQgXCI+L3Byb2Mvc29mdGFwX2Fzc2VydCIsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKICAgICAgICAgICAgICAgICAgICBzeXN0ZW0odG1wKTsgICAgXAogICAgICAgICAgICAgICAgICAgIGJ6ZXJvKHRtcCwgMTI4KTsgXAogICAgICAgICAgICAgICAgICAgIHNwcmludGYodG1wLCJlY2hvIFwiJXM6JWQgXCI+L2NhY2hlL25ldF9sYXN0X2FzcnQudHh0IiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgXAogICAgICAgICAgICAgICAgICAgIHN5c3RlbSh0bXApOyAgICBcCiAgICAgICAgICAgICAgICB9ZWxzZSB7IFwKICAgICAgICAgICAgICAgICAgICBhc3ByaW50ZigmdCwgImVjaG8gXCIlczolZCAlcyBcIj4vcHJvYy9zb2Z0YXBfYXNzZXJ0IiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBwKTsgXAogICAgICAgICAgICAgICAgICAgIHN5c3RlbSh0KTtcCiAgICAgICAgICAgICAgICAgICAgZnJlZSh0KTtcCiAgICAgICAgICAgICAgICAgICAgYXNwcmludGYoJnAsICJlY2hvIFwiJXM6JWQgJXMgXCI+L2NhY2hlL25ldF9sYXN0X2FzcnQudHh0IiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBwKTsgXAogICAgICAgICAgICAgICAgICAgIHN5c3RlbShwKTsgXAogICAgICAgICAgICAgICAgICAgIGZyZWUocCk7IFwKICAgICAgICAgICAgICAgIH0gXAogICAgICAgICAgICAgICAgYXNzZXJ0KDApOyAgXAogICAgICAgICAgICB9d2hpbGUoMCkKI2VuZGlmCiNkZWZpbmUgc29mdGFwX2Fzc2VydChmbXQsLi4uKSBkbyB7IFwKICAgICAgICAgICAgICAgIHByaW50ZigiJXM6JWQgImZtdCwgIF9fRlVOQ1RJT05fXywgX19MSU5FX18sICMjX19WQV9BUkdTX18pOyBcCiAgICAgICAgICAgICAgICBhc3NlcnQoMCk7ICBcCiAgICAgICAgICAgIH13aGlsZSgwKQoKZXh0ZXJuIGludCBzbG9nX3N5c2xvZ2xldmVsOwpleHRlcm4gaW50IHNsb2dfcHJpbnRsZXZlbDsKCi8qCiAqILTy06G907/ao6zS1Lrz19TR0MSjv+m08tOh1rvQ6LX308O4w73Tv9oKICoJCW1vZDogserHqaOs08PT2rzTyc/Eo7/pw/u78tfUvLrPsrCutcTX1rf7tK7X986qserHqQogKgkJcHJpbzogtPLTobXIvLajrLy0uuo6CiAqCQkJCQkJCVNMT0dfREVCVUcKICoJCQkJCQkJU0xPR19FUlIKICoJCQkJCQkJU0xPR19OT1JNQUwKICAqCQlmbXS8sC4uLiA6ILjxyr27r9fWt/u0riwg1eK49rK/t9bN6sirus1wcmludGa1xLLOP9K71sIKICovCmV4dGVybiBpbnQgc2xvZyhjaGFyICptb2QsIGludCBwcmlvLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cgp2b2lkIGxvZ2xldmVsX2luaXQodm9pZCk7Cgp2b2lkIHNlY3VyaXR5X2xvZyhpbnQgbW9kLGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKCiNlbmRpZgo=