ZGlmZiAtLWdpdCBhL2c0MDEzMDIvcHJvamVjdC9nNDAxMzAyLnV2b3B0IGIvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZvcHQKaW5kZXggMTU2NTc5YS4uZGQ3Njc0OCAxMDA2NDQKLS0tIGEvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZvcHQKKysrIGIvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZvcHQKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgIDxUeXBlPjA8L1R5cGU+CiAgICAgICAgICAgPExpbmVOdW1iZXI+Mjk2PC9MaW5lTnVtYmVyPgogICAgICAgICAgIDxFbmFibGVkRmxhZz4wPC9FbmFibGVkRmxhZz4KLSAgICAgICAgICA8QWRkcmVzcz4xMzQyOTYxNzI8L0FkZHJlc3M+CisgICAgICAgICAgPEFkZHJlc3M+MTM0Mjk2MzgwPC9BZGRyZXNzPgogICAgICAgICAgIDxCeXRlT2JqZWN0PjA8L0J5dGVPYmplY3Q+CiAgICAgICAgICAgPE1hbnlPYmplY3RzPjA8L01hbnlPYmplY3RzPgogICAgICAgICAgIDxTaXplT2ZPYmplY3Q+MDwvU2l6ZU9mT2JqZWN0PgpAQCAtMTg2LDI0ICsxODYsOSBAQAogICAgICAgICA8QnA+CiAgICAgICAgICAgPE51bWJlcj4xPC9OdW1iZXI+CiAgICAgICAgICAgPFR5cGU+MDwvVHlwZT4KLSAgICAgICAgICA8TGluZU51bWJlcj42MjM8L0xpbmVOdW1iZXI+Ci0gICAgICAgICAgPEVuYWJsZWRGbGFnPjA8L0VuYWJsZWRGbGFnPgotICAgICAgICAgIDxBZGRyZXNzPjEzNDI5NTEzMjwvQWRkcmVzcz4KLSAgICAgICAgICA8Qnl0ZU9iamVjdD4wPC9CeXRlT2JqZWN0PgotICAgICAgICAgIDxNYW55T2JqZWN0cz4wPC9NYW55T2JqZWN0cz4KLSAgICAgICAgICA8U2l6ZU9mT2JqZWN0PjA8L1NpemVPZk9iamVjdD4KLSAgICAgICAgICA8QnJlYWtCeUFjY2Vzcz4wPC9CcmVha0J5QWNjZXNzPgotICAgICAgICAgIDxCcmVha0lmUkNvdW50PjE8L0JyZWFrSWZSQ291bnQ+Ci0gICAgICAgICAgPEZpbGVuYW1lPjwvRmlsZW5hbWU+Ci0gICAgICAgICAgPEV4ZWNDb21tYW5kPjwvRXhlY0NvbW1hbmQ+Ci0gICAgICAgICAgPEV4cHJlc3Npb24+XFxHNDAxMzAyX2Zsb3dcLi4vLi4vc3Vwd2lzZG9tL3NwX2NvbnN1bWUuY1w2MjM8L0V4cHJlc3Npb24+Ci0gICAgICAgIDwvQnA+Ci0gICAgICAgIDxCcD4KLSAgICAgICAgICA8TnVtYmVyPjI8L051bWJlcj4KLSAgICAgICAgICA8VHlwZT4wPC9UeXBlPgogICAgICAgICAgIDxMaW5lTnVtYmVyPjIwNjwvTGluZU51bWJlcj4KICAgICAgICAgICA8RW5hYmxlZEZsYWc+MTwvRW5hYmxlZEZsYWc+Ci0gICAgICAgICAgPEFkZHJlc3M+MTM0MjkxNTk4PC9BZGRyZXNzPgorICAgICAgICAgIDxBZGRyZXNzPjEzNDI5MTY2MjwvQWRkcmVzcz4KICAgICAgICAgICA8Qnl0ZU9iamVjdD4wPC9CeXRlT2JqZWN0PgogICAgICAgICAgIDxNYW55T2JqZWN0cz4wPC9NYW55T2JqZWN0cz4KICAgICAgICAgICA8U2l6ZU9mT2JqZWN0PjA8L1NpemVPZk9iamVjdD4KQEAgLTczMSwxMCArNzE2LDEwIEBACiAgICAgICA8RmlsZVR5cGU+MTwvRmlsZVR5cGU+CiAgICAgICA8dHZFeHA+MDwvdHZFeHA+CiAgICAgICA8Rm9jdXM+MDwvRm9jdXM+Ci0gICAgICA8Q29sdW1uTnVtYmVyPjA8L0NvbHVtbk51bWJlcj4KKyAgICAgIDxDb2x1bW5OdW1iZXI+MTwvQ29sdW1uTnVtYmVyPgogICAgICAgPHR2RXhwT3B0RGxnPjA8L3R2RXhwT3B0RGxnPgotICAgICAgPFRvcExpbmU+MjU8L1RvcExpbmU+Ci0gICAgICA8Q3VycmVudExpbmU+MjU8L0N1cnJlbnRMaW5lPgorICAgICAgPFRvcExpbmU+MTE2PC9Ub3BMaW5lPgorICAgICAgPEN1cnJlbnRMaW5lPjEzMjwvQ3VycmVudExpbmU+CiAgICAgICA8YkRhdmUyPjA8L2JEYXZlMj4KICAgICAgIDxQYXRoV2l0aEZpbGVOYW1lPi4uXC4uXHN1cHdpc2RvbVxzcF9jYXJkLmM8L1BhdGhXaXRoRmlsZU5hbWU+CiAgICAgICA8RmlsZW5hbWVXaXRob3V0UGF0aD5zcF9jYXJkLmM8L0ZpbGVuYW1lV2l0aG91dFBhdGg+CkBAIC03NDcsNyArNzMyLDcgQEAKICAgICAgIDxGb2N1cz4wPC9Gb2N1cz4KICAgICAgIDxDb2x1bW5OdW1iZXI+MDwvQ29sdW1uTnVtYmVyPgogICAgICAgPHR2RXhwT3B0RGxnPjA8L3R2RXhwT3B0RGxnPgotICAgICAgPFRvcExpbmU+MTk2PC9Ub3BMaW5lPgorICAgICAgPFRvcExpbmU+MTg2PC9Ub3BMaW5lPgogICAgICAgPEN1cnJlbnRMaW5lPjIwODwvQ3VycmVudExpbmU+CiAgICAgICA8YkRhdmUyPjA8L2JEYXZlMj4KICAgICAgIDxQYXRoV2l0aEZpbGVOYW1lPi4uXC4uXHN1cHdpc2RvbVxzcF9jb21tdW5pY2F0ZS5jPC9QYXRoV2l0aEZpbGVOYW1lPgpkaWZmIC0tZ2l0IGEvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZwcm9qIGIvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZwcm9qCmluZGV4IGViMDgzYTYuLjE4MWM4MWMgMTAwNjQ0Ci0tLSBhL2c0MDEzMDIvcHJvamVjdC9nNDAxMzAyLnV2cHJvagorKysgYi9nNDAxMzAyL3Byb2plY3QvZzQwMTMwMi51dnByb2oKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIDxVc2VyUHJvZzJEb3MxNk1vZGU+MDwvVXNlclByb2cyRG9zMTZNb2RlPgogICAgICAgICAgIDwvQmVmb3JlQ29tcGlsZT4KICAgICAgICAgICA8QmVmb3JlTWFrZT4KLSAgICAgICAgICAgIDxSdW5Vc2VyUHJvZzE+MTwvUnVuVXNlclByb2cxPgorICAgICAgICAgICAgPFJ1blVzZXJQcm9nMT4wPC9SdW5Vc2VyUHJvZzE+CiAgICAgICAgICAgICA8UnVuVXNlclByb2cyPjA8L1J1blVzZXJQcm9nMj4KICAgICAgICAgICAgIDxVc2VyUHJvZzFOYW1lPmNtZCAvYyBnaXR2ZXIuYmF0PC9Vc2VyUHJvZzFOYW1lPgogICAgICAgICAgICAgPFVzZXJQcm9nMk5hbWU+PC9Vc2VyUHJvZzJOYW1lPgpkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2NhcmQuYyBiL3N1cHdpc2RvbS9zcF9jYXJkLmMKaW5kZXggNWM2Nzk2YS4uYzg4YmZhOSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NhcmQuYworKysgYi9zdXB3aXNkb20vc3BfY2FyZC5jCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICBpZighY2FyZF9jcHVfbW9kZSgpKQogICAgICAgewogICAgICAgICBEZWxheV9tcygyMDApOwotCQlpZihzcF9zZWxlY3Rfc2ZpKCJceDNmXHgwMCIpID09IDApCisgICAgICAgIGlmKHNwX3NlbGVjdF9zZmkoIlx4M2ZceDAwIikgPT0gMCkKICAgICAgICAgewogICAgICAgICAgIHNwX3NlbGVjdF9hZGYoKTsKICAgICAgICAgICBjYXJkcGNkLT5jYXJkcGh5aWRbMF0gPSBzbnJbM107CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgZWxzZQogICAgIHsKICAgICAgIGNhcmRwY2QtPmNhcmR0eXBlID0gVEFHX1RZUEVfVU5LT05XTjsKLQkgIHJldHVybiAxOworICAgICAgcmV0dXJuIDE7CiAgICAgfQogICB9CiAgIHJldHVybiAxOwpAQCAtNzgsMTEgKzc4LDU3IEBACiAgIHJldHVybiBjYXJkX2NwdV9leGlzdCgpOwogfQogCitzdGF0aWMgdWludDE2IHNwX3NlbGVjdF9hZGYxNSgpCit7CisgIHVpbnQxNiByZXQgPSAwOworICB1aW50OCogdGVtcF9idWZmID0gTlVMTDsKKyAgdWludDggYnVmZl9sZW4gPSAwOworICB1aW50OCBjbWRfYnVmZltdID0geyJceDAwXHhBNFx4MDBceDAwXHgwMlx4M0ZceDAwIn07CisgIHJldCA9IGNhcmRfY3B1X2V4Y2hhbmdlKGNtZF9idWZmLCBzaXplb2YoY21kX2J1ZmYpLTEsIDAsICZ0ZW1wX2J1ZmYsICZidWZmX2xlbik7CisgIGlmKHJldCAhPSBSRVRDT0RFX09LKQorICB7CisgICAgcmV0dXJuIHJldDsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIHVpbnQxNiBzcF9yZWFkX2JpbmFyeV9maWxlKHVpbnQ4IG91dFtdKQoreworICB1aW50MTYgcmV0ID0gMDsKKyAgdWludDgqIHRlbXBfYnVmZiA9IE5VTEw7CisgIHVpbnQ4IGJ1ZmZfbGVuID0gMDsKKyAgdWludDggY21kX2J1ZmZbNV0gPSB7Ilx4MDBceEIwXHg5NVx4MDBceDQ3In07CisgIHJldCA9IGNhcmRfY3B1X2V4Y2hhbmdlKGNtZF9idWZmLCBzaXplb2YoY21kX2J1ZmYpLCAwLCAmdGVtcF9idWZmLCAmYnVmZl9sZW4pOworICBpZihyZXQgIT0gUkVUQ09ERV9PSykKKyAgeworICAgIHJldHVybiByZXQ7CisgIH0KKyAgTUVNQ1BZKG91dCwgdGVtcF9idWZmLCBidWZmX2xlbik7CisgIHJldHVybiAwOworfQogc3RhdGljIHVpbnQxNiBzcF9jcHVfcmVhZChzcF9jYXJkX3QqIGNhcmQpCiB7CiAgIHVpbnQxNiByZXQgPSAwOworICB1aW50OCBidWZmWzcyXTsKKyAgdWludDggb2Zmc2V0ID0gMDsKKyAgTUVNQ0xFQVIoYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgcmV0ID0gc3Bfc2VsZWN0X2FkZjE1KCk7CisgIGlmKHJldCkKKyAgeworICAgIHJldHVybiByZXQ7CisKKyAgfQorICByZXQgPSBzcF9yZWFkX2JpbmFyeV9maWxlKGJ1ZmYpOworICBpZihyZXQpCisgIHsKKyAgICByZXR1cm4gcmV0OworICB9CiAgIE1FTUNMRUFSKGNhcmQtPmNpdGl6ZW5fY2FyZG5vLCBzaXplb2YoY2FyZC0+Y2l0aXplbl9jYXJkbm8pKTsKLSAgTUVNQ1BZKGNhcmQtPmV4cGlyZWRhdGUsICJceDIwXHgyMlx4MDhceDAyIiwgNCk7CisgIG9mZnNldCArPSAzMTsKKyAgTUVNQ1BZKGNhcmQtPmNpdGl6ZW5fY2FyZG5vLCBidWZmK29mZnNldCwgc2l6ZW9mKGNhcmQtPmNpdGl6ZW5fY2FyZG5vKSk7CisgIG9mZnNldCArPSAxMjsKKyAgb2Zmc2V0ICs9IDE4OworICBNRU1DUFkoY2FyZC0+ZXhwaXJlZGF0ZSwgYnVmZitvZmZzZXQsIDQpOwogICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuYyBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jCmluZGV4IGJhZjM3OGMuLmE4NmY1MDMgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jCisrKyBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgY3dfcGFja19tYXBfc2l6ZSgmcGFjayw0KTsKIAogICBzcF9wYWNrX3B1dF9iaW4oJnBhY2ssIFBLX0JJTl9DQVJEUEhZSUQsIGNhcmQtPmNhcmRwaHlpZCwgNCk7Ci0gIHNwX3BhY2tfcHV0X2JpbigmcGFjaywgUEtfQklOX0NJVElaRU5fQ0FSRE5PLCBjYXJkLT5jaXRpemVuX2NhcmRubywgMTIpOworICBzcF9wYWNrX3B1dF9iaW4oJnBhY2ssIFBLX0JJTl9DSVRJWkVOX0NBUkROTywgY2FyZC0+Y2l0aXplbl9jYXJkbm8rOCwgNCk7CiAgIHNwX3BhY2tfcHV0X2JpbigmcGFjaywgUEtfQklOX0RFVlBIWUlELCBwb3MtPmRldnBoeWlkLCA0KTsKICAgc3BfcGFja19wdXRfYmluKCZwYWNrLCBQS19CSU5fREVWVElNRSwgY3RpbWUsIDYpOwogCmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uc3VtZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYwppbmRleCA1ODdlMmE0Li43MDNjMDBjIDEwMDY0NAotLS0gYS9zdXB3aXNkb20vc3BfY29uc3VtZS5jCisrKyBiL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKQEAgLTI0MCwxMiArMjQwLDYgQEAKICAgICByZXQgPSBSQ19DQVJEX0lOVkFMSUQ7CiAgICAgcmV0dXJuIHJldDsKICAgfQotICByZXQgPSBzcF9jYXJkX2F1dGhlbnRpY2F0aW9uKHBvcywgY2FyZCk7Ci0gIGlmKHJldCkKLSAgewotICAgIHJldCA9IFJDX0NBUkRfQVVUSEVOVElDQVRJT047Ci0gICAgcmV0dXJuIHJldDsKLSAgfQogICBpZihwb3MtPmxvYWRfcGFyYV9zdGF0dXMpCiAgIHsKICAgICByZXR1cm4gcG9zLT5sb2FkX3BhcmFfc3RhdHVzOwpAQCAtMjY2LDYgKzI2MCwxMiBAQAogICB7CiAgICAgcmV0dXJuIHJldDsKICAgfQorICByZXQgPSBzcF9jYXJkX2F1dGhlbnRpY2F0aW9uKHBvcywgY2FyZCk7CisgIGlmKHJldCkKKyAgeworICAgIHJldCA9IFJDX0NBUkRfQVVUSEVOVElDQVRJT047CisgICAgcmV0dXJuIHJldDsKKyAgfQogICByZXQgPSBzcF9wcmVwYXJlX2JlaGFsZl90cmFuc2R0bChwb3MsIGNhcmQsICZyZWNvcmQpOwogICBpZihyZXQpCiAgIHsKQEAgLTU5MCwzMCArNTkwLDMxIEBACiAgIHVpbnQ4IGtleWNvZGUgPSBTUF9LRVlfTk9ORTsKICAga2V5Y29kZSA9IHNwX2dldF9rZXkoKTsKICAgLy/U2r+oz/u30dTdzaPH6b/2z8KwtMjO0uK8/M6qveHK+LWxx7DP+7fR17TMrAotICBpZihrZXljb2RlID49IFNQX0tFWV8wICYmIGtleWNvZGUgPD0gU1BfS0VZX0VOVEVSICYmIHBvcy0+Y2FyZFN0YXRlLmN1cl9zdGF0ZSA9PSBTVEFURV9OT05FCisgIGlmKGtleWNvZGUgPj0gU1BfS0VZXzAgJiYga2V5Y29kZSA8PSBTUF9LRVlfRU5URVIKKyAgICAgICYmIHBvcy0+Y2FyZFN0YXRlLmN1cl9zdGF0ZSA9PSBTVEFURV9OT05FCiAgICAgICAmJiBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID09IENBUkRXT1JLU1RBVFVTX1BBVVNFICYmIHBvcy0+cGF5bW9kZSA9PSBQQVlNT0RFX0NBUkQpCiAgIHsKLSAgCWNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19TVE9QUElORzsKLQlyZXR1cm47CisgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX1NUT1BQSU5HOworICAgIHJldHVybjsKICAgfQogICAvL8/7t9HEo8q9s/XKvLuv17TMrM/CsLTIt8jPvPzRodTxtv7OrMLrz/u30QogICBpZigoa2V5Y29kZSA9PSBTUF9LRVlfRU5URVIpICYmIChwb3MtPnBheW1vZGUgPT0gUEFZTU9ERV9JTklUKSkKICAgewogICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19OT05FOwogICAgIHBvcy0+cGF5bW9kZSA9IFBBWU1PREVfUVJDT0RFOwotCXJldHVybjsKKyAgICByZXR1cm47CiAgIH0KICAgLy+2/s6swuvEo8q9z8KwtMihz/u8/M6qzaPWubmk1/cKICAgaWYoKHBvcy0+cGF5bW9kZSA9PSBQQVlNT0RFX1FSQ09ERSkgJiYgKGtleWNvZGUgPT0gU1BfS0VZX0NMRUFSKSkKICAgewogICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19TVE9QUElORzsKLQlyZXR1cm47CisgICAgcmV0dXJuOwogICB9CiAgIC8vsLQwvPy9+MjryeixuLLZ1/e958PmCiAgIGlmKGtleWNvZGUgPT0gU1BfS0VZXzAgJiYgKHBvcy0+cGF5bW9kZSA9PSBQQVlNT0RFX0lOSVQpKQogICB7CiAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX1NFVF9ERVY7Ci0JcmV0dXJuOworICAgIHJldHVybjsKICAgfQogfQogCg==