I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8c3RkYm9vbC5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPHRpbnlhbHNhL2Fzb3VuZGxpYi5oPgojaW5jbHVkZSA8c291bmQvYXNvdW5kLmg+CiNpbmNsdWRlIDx0aW55YWxzYS9hdWRpb19taXhlcl9jdHJsLmg+CgojZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNpemVvZiAoYSkgLyBzaXplb2YgKChhKVswXSkpCgpzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHsKCWNvbnN0IGNoYXIgKmNvbnRyb2w7CgljaGFyICp2YWx1ZXNbMl07Cn07CgoKI2lmIGRlZmluZWQgX1VTRV9DT0RFQ19USTMxMDAKCgplbnVtIHRfb3V0cHV0X3ZvbCB7CiAgICBUX09VVFBVVF9WT0xfTUlOVVNfNjNfNURCID0gMCwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU182M0RCID0gMSwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yN0RCID0gNzMsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjREQiA9IDc5LAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzIxREIgPSA4NSwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18xOERCID0gOTEsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQiA9IDk3LAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzEyREIgPSAxMDMsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfOURCID0gMTA5LAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzZEQiA9IDExNSwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18zREIgPSAxMjEsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfMkRCID0gMTIzLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzFEQiA9IDEyNSwKICAgIFRfT1VUUFVUX1ZPTF8wREIgPSAxMjcsCiAgICBUX09VVFBVVF9WT0xfMURCID0gMTI5LAogICAgVF9PVVRQVVRfVk9MXzJEQiA9IDEzMSwKICAgIFRfT1VUUFVUX1ZPTF8zREIgPSAxMzMsCiAgICBUX09VVFBVVF9WT0xfNkRCID0gMTM5LAogICAgVF9PVVRQVVRfVk9MXzlEQiA9IDE0NSwKICAgIFRfT1VUUFVUX1ZPTF8xMkRCID0gMTUxLAogICAgVF9PVVRQVVRfVk9MXzI0REIgPSAxNzUsCn07CgplbnVtIHRfaW5wdXRfdm9sIHsKICAgIFRfSU5QVVRfVk9MX01JTlVTXzEyREIgPSAwLAoJVF9JTlBVVF9WT0xfTUlOVVNfN0RCID0gMTAsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU182REIgPSAxMiwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzVEQiA9IDE0LAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNERCID0gMTYsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU18zREIgPSAxOCwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzJEQiA9IDIwLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfMURCID0gMjIsCiAgICBUX0lOUFVUX1ZPTF8wREIgPSAyNCwKICAgIFRfSU5QVVRfVk9MXzFEQiA9IDI2LAogICAgVF9JTlBVVF9WT0xfMkRCID0gMjgsCiAgICBUX0lOUFVUX1ZPTF8zREIgPSAzMCwKICAgIFRfSU5QVVRfVk9MXzIwREIgPSA2NCwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGluaXRfZGVmYXVsdF9wYXJhW10gPSB7ICAvL7+qu/qz9cq8u6+199PDCgl7Ik1pYyBQR0EgQ2FwdHVyZSBWb2x1bWUiLCB7IjQwIn19LAoJeyJBREMgTXV0ZSIsIHsiMCJ9fSwKCXsiQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCgl7IlNwZWFrZXIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3In19LAoJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCgl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAoJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCgl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgp9OwoKI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfRldQCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25fb3V0X3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCgl7IlNwZWFrZXIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3In19LAoJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCgl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAoJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCgl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31goJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyIxMiJ9fSwKCXsiQURDIE11dGUiLCB7IjAifX0sCgl7IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAoKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBocF9vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wAoJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjEifX0sCgl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMSJ9fSwKCXsiSFAgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMCIsICIwIn19LAp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy+21NOm09pTcGvK5LP2zai1wAoJeyJTcGVha2VyIFN3aXRjaCIsIHsiMSJ9fSwKCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIyIn19LCAvLzE4ZEIKCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCgl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKfTsKCnN0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaTWljMWxwX01pYzFsbcrkyOvNqLXACgl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAoJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKCn07CgpzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly+21NOm09pNaWMxcnDK5Mjrzai1wAoJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJNSUMxUlAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7Ik9mZiJ9fSwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiMTIifX0sCgkvL3siQURDIE11dGUiLCB7IjAifX0sCgkvL3siQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCgl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAoJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCgl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgkKCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCgl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyOSIsICIxMjkifX0sCgl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAoJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCgl7IkhQIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjUiLCAiNSJ9fSwKCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCgl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAoJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wCBNaWMxcnDK5Mjrzai1wAoJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwKCS8veyJBREMgTXV0ZSIsIHsiMCJ9fSwKCS8veyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCgl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKCXsiT3V0cHV0IFJpZ2h0IEZyb20gUmlnaHQgREFDIiwgeyIxIn19LAoJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAoJeyJIUCBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjciLCAiMTI3In19LAoJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIiwgIjEifX0sIC8vN2RCCQoJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKCXsiREFDIFBsYXliYWNrIFZvbHVtZSAiLCB7IjEyOSIsICIxMjkifX0sCgl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAoJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCgl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjciLCAiNyJ9fSwgLy83ZEIKCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCgl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX0sCgl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCn07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiMTIifX0sCgkvL3siQURDIE11dGUiLCB7IjAifX0sCgkvL3siQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCgl7IlNwZWFrZXIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3In19LAoJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCgl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAoJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCgl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI0IiwgIjEyNCJ9fSwgLy8tMS41ZEIKCXsiU3BlYWtlciBTd2l0Y2giLCB7IjEifX0sCgl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMCJ9fSwgLy8xOGRCCgl7IkhQIExlZnQgU3dpdGNoIiwgeyIwIn19LAoJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjAifX0sCgl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAoJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIyNCJ9fSwKCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsic3BlYWsifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKfTsKCiNlbHNlIApzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31goJeyJTcGVha2VyIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyJ9fSwKCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAoJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKCXsiREFDIFJpZ2h0IElucHV0IiwgeyJNb25vIn19LAoJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCgl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCgl7IkhQIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyIsICIxMjcifX0sCgl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiNDAifX0sCgl7IkFEQyBNdXRlIiwgeyIwIn19LAoJeyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKCn07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCgl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAoJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCgl7IkhQIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjAiLCAiMCJ9fSwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKCXsiU3BlYWtlciBTd2l0Y2giLCB7IjEifX0sCgl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMiJ9fSwgLy8xOGRCCgl7IkhQIExlZnQgU3dpdGNoIiwgeyIwIn19LAoJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjAifX0sCn07CgpzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2k1pYzFscF9NaWMxbG3K5Mjrzai1wAoJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJNSUMxUlAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCgp9OwoKc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8vttTTptPaTWljMXJwyuTI682otcAKCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCgl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCn07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACgl7Ik1pYyBQR0EgQ2FwdHVyZSBWb2x1bWUiLCB7IjQwIn19LAoJLy97IkFEQyBNdXRlIiwgeyIwIn19LAoJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAoJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKCXsiREFDIFJpZ2h0IElucHV0IiwgeyJNb25vIn19LAoJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCgl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCgl7IkhQIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyIsICIxMjcifX0sCgl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIJCgl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAoJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjkiLCAiMTI5In19LAoJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMSJ9fSwKCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAoJeyJIUCBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyI3IiwgIjcifX0sCgl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAoJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIyNCJ9fSwKCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsiaGFuZHNldCJ9fSwgIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAgTWljMXJwyuTI682otcAKCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiNDAifX0sCgkvL3siQURDIE11dGUiLCB7IjAifX0sCgkvL3siQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCgl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAoJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCgl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgkKCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCgl7IkRBQyBQbGF5YmFjayBWb2x1bWUgIiwgeyIxMjkiLCAiMTI5In19LAoJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMSJ9fSwKCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAoJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyI3IiwgIjcifX0sIC8vN2RCCgl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCgl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAoJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAoJeyJ2b2ljZSBwcm9jZXNzaW5nIHNlbGVjdCIsIHsiaGVhZHNldCJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACgl7Ik1pYyBQR0EgQ2FwdHVyZSBWb2x1bWUiLCB7IjIwIn19LAoJLy97IkFEQyBNdXRlIiwgeyIwIn19LAoJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAoJeyJTcGVha2VyIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyJ9fSwKCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAoJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKCXsiREFDIFJpZ2h0IElucHV0IiwgeyJNb25vIn19LAoJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCgl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCgl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNCIsICIxMjQifX0sIC8vLTEuNWRCCgl7IlNwZWFrZXIgU3dpdGNoIiwgeyIxIn19LAoJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjIifX0sIC8vMThkQgoJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMCJ9fSwKCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIwIn19LAoJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJNSUMxUlAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAoJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCgl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX0sCgl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCn07CgojZW5kaWYKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgb3V0cHV0X2RhY192b2wgPSAJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjkiLCIxMjkifX07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbnB1dF9hZGNfdm9sID0geyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgZGFjX211dGUgPSB7IkRBQyBNdXRlIiwgeyIxIiwgIjEifX07CnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGFkY19tdXRlID0geyJBREMgTXV0ZSIsIHsiMSJ9fTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHNwa19wYXRoX29ub2ZmW10gPSB7Cgl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAp9OwpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiByY3ZfcGF0aF9vbm9mZltdID0gewoJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMCJ9fSwKCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIwIn19LAp9OwpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBlYXJwX3BhdGhfb25vZmZbXSA9IHsKCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCgl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKfTsKc3RhdGljIGludCBvdXRwdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKewoJc3dpdGNoKHZvbCl7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8wOgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfNjNfNURCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMToKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzI3REI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8yOgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMjREQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzM6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18yMURCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNDoKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzE4REI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF81OgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzY6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18xMkRCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNzoKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzlEQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzg6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU182REI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF85OgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfM0RCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMTA6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF8wREI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xMToKCQlyZXR1cm4gVF9PVVRQVVRfVk9MXzNEQjsKCWRlZmF1bHQ6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF8wREI7Cgl9Cn0KCnN0YXRpYyBpbnQgaW5wdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKewoJc3dpdGNoKHZvbCkgewoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8wOgoJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18xMkRCOwoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8xOgoJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU183REI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzI6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzZEQjsKCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMzoKCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfNURCOwoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF80OgoJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU180REI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzU6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzNEQjsKCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfNjoKCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfMkRCOwoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF83OgoJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18xREI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzg6CgkJcmV0dXJuIFRfSU5QVVRfVk9MXzBEQjsKCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfOToKCQlyZXR1cm4gVF9JTlBVVF9WT0xfMURCOwoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8xMDoKCQlyZXR1cm4gVF9JTlBVVF9WT0xfMkRCOwoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8xMToKCQlyZXR1cm4gVF9JTlBVVF9WT0xfM0RCOwoJZGVmYXVsdDoKCQlyZXR1cm4gVF9JTlBVVF9WT0xfMERCOwoJfQp9CgogCiNlbGlmIGRlZmluZWQgX1VTRV9DT0RFQ19FUzgzNzQKCgplbnVtIHRfb3V0cHV0X3ZvbCB7CiAgICBUX09VVFBVVF9WT0xfTUlOVVNfOTZEQiA9IDAsCglUX09VVFBVVF9WT0xfTUlOVVNfOTVEQiA9IDIsCglUX09VVFBVVF9WT0xfTUlOVVNfOTBEQiA9IDEyLAoJVF9PVVRQVVRfVk9MX01JTlVTXzg1REIgPSAyMiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU184MERCID0gMzIsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfNzVEQiA9IDQyLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzcwREIgPSA1MiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU182NURCID0gNjIsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfNjBEQiA9IDcyLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzU1REIgPSA4MiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU181MERCID0gOTIsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfNDVEQiA9IDEwMiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU180MERCID0gMTEyLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzM1REIgPSAxMjIsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfMzBEQiA9IDEzMiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yNURCID0gMTQyLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzIwREIgPSAxNTIsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQiA9IDE2MiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18xMERCID0gMTcyLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzdEQiAgPSAxNzgsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfNkRCICA9IDE4MCwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU181REIgID0gMTgyLAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzREQiAgPSAxODQsCiAgICBUX09VVFBVVF9WT0xfTUlOVVNfM0RCICA9IDE4NiwKICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yREIgID0gMTg4LAogICAgVF9PVVRQVVRfVk9MX01JTlVTXzFEQiAgPSAxOTAsCiAgICBUX09VVFBVVF9WT0xfMERCICAgICAgICA9IDE5Mgp9OwoKZW51bSB0X2lucHV0X3ZvbCB7CiAgICBUX0lOUFVUX1ZPTF9NSU5VU185NkRCID0gMCwKCVRfSU5QVVRfVk9MX01JTlVTXzk1REIgPSAyLAoJVF9JTlBVVF9WT0xfTUlOVVNfOTBEQiA9IDEyLAoJVF9JTlBVVF9WT0xfTUlOVVNfODVEQiA9IDIyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfODBEQiA9IDMyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNzVEQiA9IDQyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNzBEQiA9IDUyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNjVEQiA9IDYyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNjBEQiA9IDcyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNTVEQiA9IDgyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNTBEQiA9IDkyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNDVEQiA9IDEwMiwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzQwREIgPSAxMTIsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU18zNURCID0gMTIyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfMzBEQiA9IDEzMiwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzI1REIgPSAxNDIsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU18yMERCID0gMTUyLAogICAgVF9JTlBVVF9WT0xfTUlOVVNfMTVEQiA9IDE2MiwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzEwREIgPSAxNzIsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU183REIgID0gMTc4LAogICAgVF9JTlBVVF9WT0xfTUlOVVNfNkRCICA9IDE4MCwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzVEQiAgPSAxODIsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU180REIgID0gMTg0LAogICAgVF9JTlBVVF9WT0xfTUlOVVNfM0RCICA9IDE4NiwKICAgIFRfSU5QVVRfVk9MX01JTlVTXzJEQiAgPSAxODgsCiAgICBUX0lOUFVUX1ZPTF9NSU5VU18xREIgID0gMTkwLAogICAgVF9JTlBVVF9WT0xfMERCICAgICAgICA9IDE5Mgp9OwoKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGluaXRfZGVmYXVsdF9wYXJhW10gPSB7ICAvL7+qu/qz9cq8u6+199PDCgl7IkRNSUMgTVVYIiwgeyIwIn19LAkKCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCgl7IkFMQyBNVVgiLCB7IjAifX0sCQoJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAoJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCgl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjE1In19LAoJeyJEQUMgTVVURSIsIHsiMCJ9fSwgIAkgIAoJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjAifX0sCQoJeyJEQUMgU0RQIFNSQyBNVVgiLCAgeyIwIn19LCAgCgl7IkRBQyBTUkMgTVVYIiwgIHsiMCJ9fSAKfTsKCi8vI2lmZGVmICBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX0MzMUYKI2lmICggZGVmaW5lZCBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX0MzMUYgfHwgZGVmaW5lZCBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX1dUV0QgKQoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKCXsiREFDIE1VVEUiLCB7IjAifX0sICAJICAKCS8veyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjAifX0sCQoJeyJEQUMgU0RQIFNSQyBNVVgiLCAgeyIwIn19LCAgCgl7IkRBQyBTUkMgTVVYIiwgIHsiMCJ9fSAKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKCXsiRE1JQyBNVVgiLCB7IjAifX0sCQoJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwJCgl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCiNpZiAwCQoJeyJBTEMgTVVYIiwgeyIxIn19LAkKCXsiQUxDIENhcHR1cmUgVGFyZ2V0IFZvbHVtZSIsIHsiNSJ9fSwKCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTEifX0sCgl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjIifX0sCgl7IkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIHsiMCJ9fSwKCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMCJ9fSwKCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjAifX0sCgl7IkFMQyBXSU4gU0laRSIsIHsiNiJ9fSwKCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKCXsiQUxDIENhcHR1cmUgTkcgU3dpdGNoIiwgeyIwIn19LAojZW5kaWYKCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKCXsiTElOIFBHQSBHQUlOIiwgeyI2In19LAkKCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQp9OwoKI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRApzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIwIn19LAoJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0sIAkKCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyI0MSJ9fSwJCS8vMWQJCgl7IlNQRUFLRVIgT1VUUFVUIFZvbHVtZSIsIHsiMCJ9fSwJLy8xZQoJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTIifX0sIC8vMzgKfTsKI2Vsc2UKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACgl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwgICAgICAKCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAoJeyJhdWRpbyBwYXRoIHNlbGVjdCIseyJoYW5kc2V0In19LAp9OwoKI2VuZGlmCi8qCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIwIn19LAkKCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyI0In19LAkJCQoJeyJTUEVBS0VSIE9VVFBVVCBWb2x1bWUiLCB7IjQifX0sCQkKCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIxIn19IAkKfTsKKi8KCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2lNwa8rks/bNqLXACgl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKCXsiTU9OTyBPVVQgR0FJTiIsIHsiMTEifX0sICAgICAgCgl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsic3BlYWsifX0sCn07CgpzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2kxpbjEtUmluMcrkyOvNqLXACgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCn07CgpzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly+21NOm09pMaW4yLVJpbjLK5Mjrzai1wAoJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIyIn19LAkKfTsKCiNpZmRlZiBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX1dUV0QKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKCS8veyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoZWFkc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAoJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LAkvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQoJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCgl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAoJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAoJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAoKCXsiQUxDIE1VWCIsIHsiMCJ9fSwgCgl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCgl7IkxJTiBQR0EgR0FJTiIsIHsiNiJ9fSwJCgl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKCQkJCgl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIxIn19LCAJCgl7IlNQRUFLRVIgTUlYRVIgR0FJTiIsIHsiMzIifX0sCS8vb2xkIDQxCQkKCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyIwIn19LAkvLzEKCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkyIn19LCAvLzM4Cn07CgojZWxzZQpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACgl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQoJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCgl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAoJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAoJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAoKCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCiNpZiAwCgl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCgl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAoJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAoJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCgl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAoJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKI2VuZGlmCQoJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAoJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCgl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKCXsiTU9OTyBPVVQgR0FJTiIsIHsiMTEifX0sIAogICAgeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTIifX0sIAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCn07CiNlbmRpZgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXAIE1pYzFycMrkyOvNqLXACgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQoJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCgl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAoJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAoJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAoKCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCiNpZiAwCgl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCgl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAoJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAoJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCgl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAoJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKI2VuZGlmCQoJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAoJeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCgl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwKCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCgl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCn07CiNpZmRlZiBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX1dUV0QgLy9jbGFzcy1kIC0tPnJlY2VpdmVyCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgLy+21NOm09pTcGvK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAoJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKCXsiRE1JQyBNVVgiLCB7IjAifX0sCQoJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKCgl7IkFMQyBNVVgiLCB7IjAifX0sCQojaWYgMAkKCXsiQUxDIENhcHR1cmUgVGFyZ2V0IFZvbHVtZSIsIHsiNyJ9fSwKCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCgl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCgl7IkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIHsiMCJ9fSwKCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCgl7IkFMQyBXSU4gU0laRSIsIHsiNiJ9fSwKCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKCXsiQUxDIENhcHR1cmUgTkcgU3dpdGNoIiwgeyIwIn19LAojZW5kaWYJCgl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCgl7IkxJTiBQR0EgR0FJTiIsIHsiNiJ9fSwJCgl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LAkJCgl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sIAoJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxODYifX0sCgl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsic3BlYWsifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKfTsKI2Vsc2UvL21vbW8gb3V0IC0+IHNwZWFrZXIKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQoJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCgl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAoJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAoJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAoKCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCiNpZiAwCQoJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAoJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAoJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAoJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAoJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAoJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAoJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCiNlbmRpZgkKCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKCXsiTElOIFBHQSBHQUlOIiwgeyI2In19LAkKCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQoJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sCQkKCXsiTU9OTyBPVVQgR0FJTiIsIHsiMCJ9fSwgCgl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE4NiJ9fSwKCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAoJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAp9OwoKI2VuZGlmCgoKCiNlbHNlCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25fb3V0X3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCgl7IkRBQyBNVVRFIiwgeyIwIn19LCAgCSAgCgkvL3siREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTIwIn19LAkKCXsiREFDIFNEUCBTUkMgTVVYIiwgIHsiMCJ9fSwgIAoJeyJEQUMgU1JDIE1VWCIsICB7IjAifX0gCn07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCgl7IkRNSUMgTVVYIiwgeyIwIn19LAkKCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCgl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCQoJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAojaWYgMQkKCXsiQUxDIE1VWCIsIHsiMSJ9fSwJCgl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjUifX0sCgl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjExIn19LAoJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyIyIn19LAoJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIwIn19LAoJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKI2VuZGlmCgl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCgl7IkxJTiBQR0EgR0FJTiIsIHsiMyJ9fSwJCgl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTgwIn19LAkKfTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBocF9vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wAoJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCgl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sICAgICAgCgl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fQp9OwoKLyoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy+21NOm09pTcGvK5LP2zai1wAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCQoJeyJTUEVBS0VSIE1JWEVSIEdBSU4iLCB7IjQifX0sCQkJCgl7IlNQRUFLRVIgT1VUUFVUIFZvbHVtZSIsIHsiNCJ9fSwJCQoJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0gCQp9OwoqLwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTptPaU3BryuSz9s2otcAKCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQoJeyJNT05PIE9VVCBHQUlOIiwgeyIzIn19LCAgICAgIAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0KfTsKCnN0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaTGluMS1SaW4xyuTI682otcAKCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwKfTsKCnN0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsvL7bU06bT2kxpbjItUmluMsrkyOvNqLXACgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjIifX0sCQp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAoJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKCXsiRE1JQyBNVVgiLCB7IjAifX0sCQoJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKCgl7IkFMQyBNVVgiLCB7IjAifX0sCQojaWYgMAoJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAoJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAoJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAoJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAoJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAoJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAoJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCiNlbmRpZgkKCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKCXsiTElOIFBHQSBHQUlOIiwgeyI3In19LAkKCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQoJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCgl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sIAogICAgeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTAifX0sIAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCgl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCn07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXAIE1pYzFycMrkyOvNqLXACgl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQoJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCgl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAoJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAoJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAoKCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCiNpZiAwCgl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCgl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAoJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAoJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCgl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAoJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKI2VuZGlmCQoJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAoJeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCgl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwKCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCgl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCn07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwJCgl7IkRNSUMgTVVYIiwgeyIwIn19LAkKCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCgl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCgl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCgoJeyJBTEMgTVVYIiwgeyIwIn19LAkKI2lmIDAJCgl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCgl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAoJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAoJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCgl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAoJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCgl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKI2VuZGlmCQoJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAoJeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQoJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCgl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCQoJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAKCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LAoJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCgl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCn07CgojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIG91dHB1dF9kYWNfdm9sID0geyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjAifX07CgpzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbnB1dF9hZGNfdm9sID0geyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fTsKCnN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGRhY19tdXRlID0geyJEQUMgTVVURSIsIHsiMSJ9fTsKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgYWRjX211dGUgPSB7IkFEQyBNVVRFIiwgeyIxIn19OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgc3BrX3BhdGhfb25vZmZbXSA9IHsKCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIwIn19LAp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgcmN2X3BhdGhfb25vZmZbXSA9IHsKCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIwIn19LAp9OwoKc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgZWFycF9wYXRoX29ub2ZmW10gPSB7Cgl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKfTsKCgpzdGF0aWMgaW50IG91dHB1dF92b2xfY29udmVyc2lvbihpbnQgdm9sKQp7Cglzd2l0Y2godm9sKXsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzA6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU185NkRCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMToKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzQ1REI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8yOgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfNDBEQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzM6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zNURCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNDoKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzMwREI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF81OgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMjVEQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzY6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18yMERCOwoJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNzoKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzE1REI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF84OgoJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMTBEQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzk6CgkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU182REI7CgljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xMDoKCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzNEQjsKCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzExOgoJCXJldHVybiBUX09VVFBVVF9WT0xfMERCOwoJZGVmYXVsdDoKCQlyZXR1cm4gVF9PVVRQVVRfVk9MXzBEQjsKCX0KfQoKc3RhdGljIGludCBpbnB1dF92b2xfY29udmVyc2lvbihpbnQgdm9sKQp7Cglzd2l0Y2godm9sKSB7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzA6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzk2REI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzE6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzMwREI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzI6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzI1REI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzM6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzIwREI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzQ6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzE1REI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzU6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzEwREI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzY6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzdEQjsKCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfNzoKCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfNERCOwoJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF84OgoJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18zREI7CgljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzk6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzJEQjsKCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMTA6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzFEQjsKCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMTE6CgkJcmV0dXJuIFRfSU5QVVRfVk9MXzBEQjsKCWRlZmF1bHQ6CgkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzMwREI7Cgl9Cn0KCiNlbmRpZgoKLy9zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBueHBfdm9pY2Vfdm9sID0gCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIFZvbHVtZSIseyIzIn19OyAvLyhyYW5nZSAwLT41KQoKc3RhdGljIHZvaWQgbWl4X3NldF92YWx1ZV93cmFwKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNoYXIgKip2YWx1ZXMpCnsKCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKCWVudW0gbWl4ZXJfY3RsX3R5cGUgdHlwZTsKCXVuc2lnbmVkIGludCBudW1fY3RsX3ZhbHVlczsKCXVuc2lnbmVkIGludCBpOwoKCWlmIChpc2RpZ2l0KGNvbnRyb2xbMF0pKQoJCWN0bCA9IG1peGVyX2dldF9jdGwobWl4ZXIsIGF0b2koY29udHJvbCkpOwoJZWxzZQoJCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgY29udHJvbCk7CgoJaWYgKCFjdGwpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CgkJcmV0dXJuOwoJfQoKCXR5cGUgPSBtaXhlcl9jdGxfZ2V0X3R5cGUoY3RsKTsKCW51bV9jdGxfdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CgoJaWYgKGlzZGlnaXQodmFsdWVzWzBdWzBdKSkgewoKCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2N0bF92YWx1ZXM7IGkrKykgewoJCQlpZiAobWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIGF0b2kodmFsdWVzW2ldKSkpIHsKCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGludmFsaWQgdmFsdWUgZm9yIGluZGV4ICVkXG4iLCBpKTsKCQkJCXJldHVybjsKCQkJfQoJCX0KCgl9IGVsc2UgewoJCWlmICh0eXBlID09IE1JWEVSX0NUTF9UWVBFX0VOVU0pIHsKCQkJLyppZiAobnVtX3ZhbHVlcyAhPSAxKSB7CgkJCSAgICBmcHJpbnRmKHN0ZGVyciwgIkVuY2xvc2Ugc3RyaW5ncyBpbiBxdW90ZXMgYW5kIHRyeSBhZ2FpblxuIik7CgkJCSAgICByZXR1cm47CgkJCX0qLwoJCQlpZiAobWl4ZXJfY3RsX3NldF9lbnVtX2J5X3N0cmluZyhjdGwsIHZhbHVlc1swXSkpCgkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBpbnZhbGlkIGVudW0gdmFsdWVcbiIpOwoJCX0gZWxzZSB7CgkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IG9ubHkgZW51bSB0eXBlcyBjYW4gYmUgc2V0IHdpdGggc3RyaW5nc1xuIik7CgkJfQoJfQp9CgojaWZkZWYgX0NQRV9BVURJT19QUkoKaW50IG1peF9zZXRfb3V0cHV0X3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGgpCnsKCQoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X2lucHV0X3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGgpCnsKCgoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X2lucHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQp7CgoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9vdXRwdXRfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpCnsKCgoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X291dHB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQp7CgoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9pbnB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQp7CgoJCQoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X291dHB1dHBhdGhfb25vZmYoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGggLGJvb2wgb25vZmYpCnsKCglyZXR1cm4gMDsKfQoKCmludCBtaXhfc2V0X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQp7CgoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF92b2ljZV9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQp7CgoJCglyZXR1cm4gMDsKfQoKaW50IG1peF9zZXRfdm9pY2VfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKewoJaW50IGk7CgoKCXJldHVybiAwOwp9CgoKaW50IG1peF9zZXRfaW5fY2FsbF90b25lKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB0b250eXBlKQp7CgoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9kZWZhdWx0X3BhcmFtKHN0cnVjdCBtaXhlciAqbWl4ZXIpIAp7CgoJcmV0dXJuIDA7Cn0KI2Vsc2UKaW50IG1peF9zZXRfb3V0cHV0X3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGgpCnsKCWludCBpOwoJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbW9uX291dF9wYXJhX2F1ZGlvKTsgaSsrKSB7CgkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBjb21tb25fb3V0X3BhcmFfYXVkaW9baV0uY29udHJvbCwgY29tbW9uX291dF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7Cgl9Cglzd2l0Y2ggKHBhdGgpIHsKCWNhc2UgVF9PVVRQVVRfUkVDRUlWRVI6CgkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHBfb3V0cGF0aF9wYXJhX2F1ZGlvKTsgaSsrKSB7CgkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW2ldLmNvbnRyb2wsIGhwX291dHBhdGhfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOwoJCX0KCQlicmVhazsKCWNhc2UgVF9PVVRQVVRfU1BFQUtFUjoKCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvKTsgaSsrKSB7CgkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tpXS5jb250cm9sLCBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7CgkJfQoJCWJyZWFrOwoJZGVmYXVsdDoKCQlicmVhazsKCX0KCglyZXR1cm4gMDsKfQoKaW50IG1peF9zZXRfaW5wdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKewoJaW50IGk7Cglmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25faW5fcGFyYV9hdWRpbyk7IGkrKykgewoJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0uY29udHJvbCwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKCX0KCXN3aXRjaCAocGF0aCkgewoJY2FzZSBUX0lOUFVUX01JQ0xQOgoJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvKTsgaSsrKSB7CgkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9baV0uY29udHJvbCwgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKCQl9CgkJYnJlYWs7CgljYXNlIFRfSU5QVVRfTUlDUlA6CgkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpbyk7IGkrKykgewoJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9baV0uY29udHJvbCwgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOwoJCX0KCQlicmVhazsKCWRlZmF1bHQ6CgkJYnJlYWs7Cgl9CgoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X2lucHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQp7CglzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CgljaGFyICpuYW1lID0gaW5wdXRfYWRjX3ZvbC5jb250cm9sOwoJaW50IG51bV92YWx1ZXMsIGk7CglpbnQgdm9sID0gaW5wdXRfdm9sX2NvbnZlcnNpb24odm9sdW1lKTsKCgljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOwoJaWYgKCFjdGwpIHsKCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CgkJcmV0dXJuIC0xOwoJfQoKICAgIG51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZhbHVlczsgaSsrKSB7CgkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIHZvbCk7CiAgICB9CgoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X291dHB1dF92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50IHZvbHVtZSkKewoJc3RydWN0IG1peGVyX2N0bCAqY3RsOwoJY2hhciAqbmFtZSA9IG91dHB1dF9kYWNfdm9sLmNvbnRyb2w7CglpbnQgbnVtX3ZhbHVlcywgaTsKCglpbnQgdm9sID0gb3V0cHV0X3ZvbF9jb252ZXJzaW9uKHZvbHVtZSk7CgoJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKCWlmICghY3RsKSB7CgkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOwoJCXJldHVybiAtMTsKCX0KCgludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CgogICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgewoJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBpLCB2b2wpOwogICAgfQoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9vdXRwdXRfbXV0ZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBib29sIGVuYWJsZSkKewoJc3RydWN0IG1peGVyX2N0bCAqY3RsOwoJY2hhciAqbmFtZSA9IGRhY19tdXRlLmNvbnRyb2w7IAoJaW50IG51bV92YWx1ZXMsIGk7CgoJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKCWlmICghY3RsKSB7CgkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOwoJCXJldHVybiAtMTsKCX0KCgludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CgogICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgewoJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBpLCBlbmFibGUpOwogICAgfQoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9pbnB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQp7CglzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CgljaGFyICpuYW1lID0gYWRjX211dGUuY29udHJvbDsKCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CglpbnQgbnVtX3ZhbHVlcywgaTsKCglpZiAoIWN0bCkgewoJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKCQlyZXR1cm4gLTE7Cgl9CgoJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgMCwgZW5hYmxlKTsKICAgIH0KCQkKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9vdXRwdXRwYXRoX29ub2ZmKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoICxib29sIG9ub2ZmKQp7CglzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CglzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICpwYXRoX3BhcmE7CglpbnQgaSwgaiwgbnVtX3ZhbHVlcywgc2l6ZTsKCXN3aXRjaChwYXRoKSB7CgljYXNlIFRfT1VUUFVUX1JFQ0VJVkVSOgoJCXNpemUgPSBBUlJBWV9TSVpFKHJjdl9wYXRoX29ub2ZmKTsKCQlwYXRoX3BhcmEgPSByY3ZfcGF0aF9vbm9mZjsKCQlicmVhazsKCWNhc2UgVF9PVVRQVVRfU1BFQUtFUjoKCQlzaXplID0gQVJSQVlfU0laRShzcGtfcGF0aF9vbm9mZik7CgkJcGF0aF9wYXJhID0gc3BrX3BhdGhfb25vZmY7CgkJYnJlYWs7CgljYXNlIFRfT1VUUFVUX0hFQURTRVQ6CgkJc2l6ZSA9IEFSUkFZX1NJWkUoZWFycF9wYXRoX29ub2ZmKTsKCQlwYXRoX3BhcmEgPSBlYXJwX3BhdGhfb25vZmY7CgkJYnJlYWs7CglkZWZhdWx0OgoJCXJldHVybiAtMTsKCX0KCglmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CgkJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBwYXRoX3BhcmFbaV0uY29udHJvbCk7CgkJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwoKCSAgICBmb3IgKGogPSAwOyBqIDwgbnVtX3ZhbHVlczsgaisrKSB7CgkJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBqLCBvbm9mZik7CgkgICAgfQoKLy8JCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgc3BrX3BhdGhfb25vZmZbaV0uY29udHJvbCwgc3BrX3BhdGhfb25vZmZbaV0udmFsdWVzKTsKICAgIH0KCglyZXR1cm4gMDsKfQoKCmludCBtaXhfc2V0X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQp7CglzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CgljaGFyIG5hbWVbXSA9ICJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggVm9sdW1lIjsKCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CglpZiAoIWN0bCkgewoJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKCQlyZXR1cm4gLTE7Cgl9CgoJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIHZvbHVtZSk7CgoJcmV0dXJuIDA7Cn0KCmludCBtaXhfc2V0X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCnsKCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKCWNoYXIgbmFtZVtdID0gInZvaWNlIHVwbGluayBtdXRlIjsKCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CglpZiAoIWN0bCkgewoJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKCQlyZXR1cm4gLTE7Cgl9CgoJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIGVuYWJsZSk7CgkKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF92b2ljZV9wYXRoKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoKQp7CglpbnQgaTsKLyoKCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9pbl9wYXJhX2F1ZGlvKTsgaSsrKSB7CgkJdGlueW1peF9zZXRfdmFsdWVfdGVzdChtaXhlciwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0uY29udHJvbCwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKCX0KCQoJZm9yKGkgPSAwO2k8QVJSQVlfU0laRShjb21tb25fb3V0X3BhcmFfYXVkaW8pO2krKykKCXsKIAkgIAl0aW55bWl4X3NldF92YWx1ZV90ZXN0KG1peGVyLGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tpXS5jb250cm9sLGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOwoJfQoqLwkKCXN3aXRjaCAocGF0aCkgewoJY2FzZSBUX09VVFBVVF9SRUNFSVZFUjoKCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlKTsgaSsrKQl7CgkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtpXS5jb250cm9sLCBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLnZhbHVlcyk7CgkJfQoJCWJyZWFrOwoJY2FzZSBUX09VVFBVVF9TUEVBS0VSOgoJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwa19pbm91dHBhdGhfcGFyYV92b2ljZSk7IGkrKykgewoJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtpXS5jb250cm9sLCBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0udmFsdWVzKTsKCQl9CgkJYnJlYWs7CgljYXNlIFRfT1VUUFVUX0hFQURTRVQ6CgkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZSk7IGkrKykgewoJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0uY29udHJvbCwgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtpXS52YWx1ZXMpOwoJCX0KCWRlZmF1bHQ6CgkJYnJlYWs7Cgl9CgoJcmV0dXJuIDA7Cn0KCgppbnQgbWl4X3NldF9pbl9jYWxsX3RvbmUoc3RydWN0IG1peGVyICptaXhlciwgaW50IHRvbnR5cGUpCnsKCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKCWNoYXIgbmFtZVtdID0gInZvaWNlIHRvbmUgc2VsIjsKCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CglpZiAoIWN0bCkgewoJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKCQlyZXR1cm4gLTE7Cgl9CgoJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIHRvbnR5cGUpOwoKCXJldHVybiAwOwp9CgppbnQgbWl4X3NldF9kZWZhdWx0X3BhcmFtKHN0cnVjdCBtaXhlciAqbWl4ZXIpIAp7CglpbnQgaTsKCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfZGVmYXVsdF9wYXJhKTsgaSsrKSB7CgkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBpbml0X2RlZmF1bHRfcGFyYVtpXS5jb250cm9sLCBpbml0X2RlZmF1bHRfcGFyYVtpXS52YWx1ZXMpOwoJfQoJCglyZXR1cm4gMDsKfQojZW5kaWYK