VXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCgpVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCkluZGV4OiBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL2ltQ29udi5jCisrKyBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYwpAQCAtODMsNiArODMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFN1YnN0UmVjIFN1YnN0VGFibGVbCiAgKiBmcm9tIFVDUyBjaGFyIHRvIHNwZWNpZmllZCBjaGFyc2V0IGNoYXIuCiAgKiBUaGlzIGNvbnZlcnRlciBpcyBuZWVkZWQgZm9yIF9YaW1HZXRDaGFyQ29kZSBzdWJyb3V0aW5lLgogICovCisjaWZkZWYgWExPQ0FMRQogWFBvaW50ZXIKIF9YaW1HZXRMb2NhbGVDb2RlICgKICAgICBfWGNvbnN0IGNoYXIqCWVuY29kaW5nX25hbWUpCkBAIC05Niw2ICs5Nyw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKICAgICB9CiAgICAgcmV0dXJuIGN2dDsKIH0KKyNlbmRpZgogCiAvKgogICogUmV0dXJucyB0aGUgbG9jYWxlIGRlcGVuZGVudCByZXByZXNlbnRhdGlvbiBvZiBhIGtleXN5bS4KQEAgLTEwNiw2ICsxMDgsNyBAQCBfWGltR2V0TG9jYWxlQ29kZSAoCiAgKiB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4gUmV0dXJuIDAgaWYgdGhlIGtleXN5bSBpcyBub3QgcmVwcmVzZW50YWJsZSBpbiB0aGUKICAqIGxvY2FsZQogICovCisjaWZkZWYgWExPQ0FMRQogLypBUkdTVVNFRCovCiBpbnQKIF9YaW1HZXRDaGFyQ29kZSAoCkBAIC0xMzUsNiArMTM4LDcgQEAgX1hpbUdldENoYXJDb2RlICgKICAgICAgICAgYnVmW2NvdW50XT0gJ1wwJzsKICAgICByZXR1cm4gY291bnQ7CiB9CisjZW5kaWYKIAogI2lmZGVmIFhLQgogc3RhdGljIGludCBsb29rdXBfc3RyaW5nKApJbmRleDogbGliWDExLTEuMy9zcmMvWDE4TkNNU3N0dWJzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBsaWJYMTEtMS4zL3NyYy9YMThOQ01Tc3R1YnMuYwpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIFgxOE5DTVNzdHVicy5jCisgKiAtIFByb3ZpZGVzIHN0dWJzIGFuZCBkdW1teSBmdW5jcyBuZWVkZWQgd2hlbiBYY21zIGFuZCBYTG9jYWxlIHN0dWZmIHJlbW92ZWQKKyAqCisgKiBDb3B5cmlnaHQgqSAyMDAzIE1hdHRoZXcgQWxsdW0KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE1hdHRoZXcgQWxsdW0gbm90IGJlIHVzZWQgaW4KKyAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIEtlaXRoIFBhY2thcmQgYW5kIENvbXBhcSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0CisgKiBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIE1BVFRIRVcgQUxMVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgCisgKiBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCAKKyAqIElOIE5PIEVWRU5UIFNIQUxMIEtFSVRIIFBBQ0tBUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiWGxpYmludC5oIgorI2luY2x1ZGUgIlhsY2ludC5oIgorI2luY2x1ZGUgPFgxMS9YbG9jYWxlLmg+CisjaW5jbHVkZSA8WDExL1hvcy5oPgorI2lmZGVmIFdJTjMyCisjdW5kZWYgY2xvc2UKKyNlbmRpZgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgIlhsY1B1YkkuaCIKKworI2luY2x1ZGUgIlhjbXNpbnQuaCIgCQkvKiBmb3IgWGNtc0NDQyB0eXBlICAqLworI2luY2x1ZGUgIlhsY1B1YkkuaCIgICAgICAgICAgICAvKiBmb3IgWExDZCB0eXBlICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiAhIFhMT0NBTEUKKworQm9vbAorWFN1cHBvcnRzTG9jYWxlKCkKK3sKKyAgcmV0dXJuIEZhbHNlOyAJCQorfQorCitjaGFyICoKK1hTZXRMb2NhbGVNb2RpZmllcnMoCisgICAgY29uc3QgY2hhciAqbW9kaWZpZXJzKQoreworICByZXR1cm4gTlVMTDsKK30KKworWExDZAorX1hPcGVuTEMoCisgICAgY2hhciAqbmFtZSkKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1hMQ2QKK19YbGNDdXJyZW50TEMoKQoreworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorX1hsY1ZhVG9BcmdMaXN0KAorICAgIHZhX2xpc3QgdmFyLAorICAgIGludCBjb3VudCwKKyAgICBYbGNBcmdMaXN0ICphcmdzX3JldCkKK3sKKyAgcmV0dXJuOworfQorCit2b2lkCitfWGxjQ291bnRWYUxpc3QoCisgICAgdmFfbGlzdCB2YXIsCisgICAgaW50ICpjb3VudF9yZXQpCit7CisgIHJldHVybjsKK30KKwordm9pZAorX1hDbG9zZUxDKAorICAgIFhMQ2QgbGNkKQoreworICByZXR1cm47Cit9CisKK2ludAorX1hsY0NvbnZlcnQoCisgICAgWGxjQ29udiBjb252LAorICAgIFhQb2ludGVyICpmcm9tLAorICAgIGludCAqZnJvbV9sZWZ0LAorICAgIFhQb2ludGVyICp0bywKKyAgICBpbnQgKnRvX2xlZnQsCisgICAgWFBvaW50ZXIgKmFyZ3MsCisgICAgaW50IG51bV9hcmdzKQoreworICByZXR1cm4gMDsKK30KKworLyogWElNIFN0dWJzICovCisKK1hQb2ludGVyCitfWGltR2V0TG9jYWxlQ29kZSAoIF9YY29uc3QgY2hhciogZW5jb2RpbmdfbmFtZSApCit7CisgIHJldHVybiBOVUxMOworfQorCitpbnQKK19YaW1HZXRDaGFyQ29kZSAoCisgICAgWFBvaW50ZXIgICAgICAgICAgICB1Y3NfY29udiwKKyAgICBLZXlTeW0gICAgICAgICAgICAgIGtleXN5bSwKKyAgICB1bnNpZ25lZCBjaGFyKiAgICAgIGJ1ZiwKKyAgICBpbnQgICAgICAgICAgICAgICAgIG5ieXRlcykKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFhybSBTdHVicyAqLworCitYcm1NZXRob2RzCitfWHJtSW5pdFBhcnNlSW5mbygKKyAgICBYUG9pbnRlciAqc3RhdGUpCit7CisgICAgcmV0dXJuIChYcm1NZXRob2RzKSBOVUxMOworfQorCisvKiBYd2MgU3R1YnMgKi8KKworaW50CitYd2NUZXh0RXh0ZW50cygKKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuLAorICAgIFhSZWN0YW5nbGUgICAgICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQoreworICByZXR1cm4gMDsKK30KKwordm9pZCAKK1h3Y0RyYXdTdHJpbmcoRGlzcGxheSAqZGlzcGxheSwKKwkgICAgICBEcmF3YWJsZSBkLAorCSAgICAgIFhGb250U2V0IGZvbnRfc2V0LAorCSAgICAgIEdDIGdjLAorCSAgICAgIGludCB4LCBpbnQgeSwKKwkgICAgICBfWGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKwkgICAgICBpbnQgbnVtX3djaGFycykKK3sKKyAgOworfQorCit2b2lkCitYd2NEcmF3VGV4dCgKKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisgICAgaW50ICAgICAgICAgICAgICAgICB5LAorICAgIFh3Y1RleHRJdGVtICAgICAgICAqdGV4dF9pdGVtcywKKyAgICBpbnQgICAgICAgICAgICAgICAgIG5pdGVtcykKK3sKKyAgOworfQorCit2b2lkCitYd2NEcmF3SW1hZ2VTdHJpbmcoCisgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisgICAgaW50ICAgICAgICAgICAgICAgICB5LAorICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQoreworICA7Cit9CisKK2ludAorWHdjVGV4dEVzY2FwZW1lbnQoCisgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKK3sKKyAgcmV0dXJuIDA7Cit9CisKK1N0YXR1cworWHdjVGV4dFBlckNoYXJFeHRlbnRzKAorICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4sCisgICAgWFJlY3RhbmdsZSAgICAgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisgICAgWFJlY3RhbmdsZSAgICAgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorICAgIGludCAgICAgICAgICAgICAgICAgYnVmZmVyX3NpemUsCisgICAgaW50ICAgICAgICAgICAgICAgICpudW1fY2hhcnMsCisgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfaW5rX2V4dGVudHMsCisgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfbG9naWNhbF9leHRlbnRzKQoreworICByZXR1cm4oWGNtc0ZhaWx1cmUpOworfQorCitpbnQKK1h3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCisgICAgRGlzcGxheSAqZHB5LAorICAgIGNvbnN0IFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCwKKyAgICB3Y2hhcl90ICoqKmxpc3RfcmV0LAorICAgIGludCAqY291bnRfcmV0KQoreworICByZXR1cm4gMDsKK30KKworaW50CitYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5KAorICAgIERpc3BsYXkgKmRweSwKKyAgICB3Y2hhcl90ICoqbGlzdCwKKyAgICBpbnQgY291bnQsCisgICAgWElDQ0VuY29kaW5nU3R5bGUgc3R5bGUsCisgICAgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wKQoreworICByZXR1cm4gMDsKK30KKwordm9pZAorWHdjRnJlZVN0cmluZ0xpc3Qod2NoYXJfdCAqKmxpc3QpCit7CisgIHJldHVybjsKK30KKworCit2b2lkIFhtYlNldFdNUHJvcGVydGllcyAoICAgICAgICAvKiBBY3R1YWxseSBmcm9tIG1iV01Qcm9wcy5jICovCisgICAgRGlzcGxheSAqZHB5LAorICAgIFdpbmRvdyB3LAorICAgIF9YY29uc3QgY2hhciAqd2luZG93TmFtZSwKKyAgICBfWGNvbnN0IGNoYXIgKmljb25OYW1lLAorICAgIGNoYXIgKiphcmd2LAorICAgIGludCBhcmdjLAorICAgIFhTaXplSGludHMgKnNpemVIaW50cywKKyAgICBYV01IaW50cyAqd21IaW50cywKKyAgICBYQ2xhc3NIaW50ICpjbGFzc0hpbnRzKQoreworICByZXR1cm47Cit9CisKK2ludAorWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKKyAgICBEaXNwbGF5ICpkcHksCisgICAgY29uc3QgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wLAorICAgIGNoYXIgKioqbGlzdF9yZXQsCisgICAgaW50ICpjb3VudF9yZXQpCit7CisgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworfQorCitpbnQKK1htYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCisgICAgRGlzcGxheSAqZHB5LAorICAgIGNoYXIgKipsaXN0LAorICAgIGludCBjb3VudCwKKyAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKKyAgICBYVGV4dFByb3BlcnR5ICp0ZXh0X3Byb3ApCit7CisgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworfQorCitpbnQKK1htYlRleHRFeHRlbnRzKAorICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4sCisgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfaW5rX2V4dGVudHMsCisgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQoreworICByZXR1cm4gMDsKK30KKwordm9pZAorWG1iRHJhd1RleHQoCisgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisgICAgaW50ICAgICAgICAgICAgICAgICB4LAorICAgIGludCAgICAgICAgICAgICAgICAgeSwKKyAgICBYbWJUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisgICAgaW50ICAgICAgICAgICAgICAgICBuaXRlbXMpCit7CisgIDsKK30KKwordm9pZAorWG1iRHJhd1N0cmluZygKKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorICAgIGludCAgICAgICAgICAgICAgICAgeCwKKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisgICAgX1hjb25zdCBjaGFyICAgICAgICp0ZXh0LAorICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCit7CisgIDsKK30KKwordm9pZAorWG1iRHJhd0ltYWdlU3RyaW5nKAorICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisgICAgaW50ICAgICAgICAgICAgICAgICB4LAorICAgIGludCAgICAgICAgICAgICAgICAgeSwKKyAgICBfWGNvbnN0IGNoYXIgICAgICAgKnRleHQsCisgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKK3sKKyAgOworfQorCitpbnQKK1htYlRleHRFc2NhcGVtZW50KAorICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4pCit7CisgIHJldHVybiAwOworfQorCitTdGF0dXMKK1htYlRleHRQZXJDaGFyRXh0ZW50cygKKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuLAorICAgIFhSZWN0YW5nbGUgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisgICAgWFJlY3RhbmdsZSAgICAgKmxvZ2ljYWxfZXh0ZW50c19idWZmZXIsCisgICAgaW50ICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorICAgIGludCAgICAgICAgICAgICpudW1fY2hhcnMsCisgICAgWFJlY3RhbmdsZSAgICAgKm1heF9pbmtfZXh0ZW50cywKKyAgICBYUmVjdGFuZ2xlICAgICAqbWF4X2xvZ2ljYWxfZXh0ZW50cykKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludAorS2V5U3ltVG9VY3M0KEtleVN5bSBrZXlzeW0pCit7CisgIHJldHVybiAwOworfQorCisjZW5kaWYgCisKKyNpZiAhIFhDTVMKKworWGNtc0NDQyAKK1hjbXNDQ0NPZkNvbG9ybWFwKGRweSwgY21hcCkKKyAgICBEaXNwbGF5ICpkcHk7CisgICAgQ29sb3JtYXAgY21hcDsKK3sKKyAgcmV0dXJuIE5VTEw7Cit9CisKK1N0YXR1cworX1hjbXNSZXNvbHZlQ29sb3JTdHJpbmcgKAorICAgIFhjbXNDQ0MgY2NjLAorICAgIGNvbnN0IGNoYXIgKipjb2xvcl9zdHJpbmcsCisgICAgWGNtc0NvbG9yICpwQ29sb3JfZXhhY3RfcmV0dXJuLAorICAgIFhjbXNDb2xvckZvcm1hdCByZXN1bHRfZm9ybWF0KQoreworICByZXR1cm4oWGNtc0ZhaWx1cmUpOworfQorCit2b2lkCitfWGNtc1VucmVzb2x2ZUNvbG9yKAorICAgIFhjbXNDQ0MgY2NjLAorICAgIFhjbXNDb2xvciAqcENvbG9yKQoreworICByZXR1cm47Cit9CisKK3ZvaWQKK19YVW5yZXNvbHZlQ29sb3IoCisgICAgWGNtc0NDQyBjY2MsCisgICAgWENvbG9yICpwWENvbG9yKQoreworICByZXR1cm47Cit9CisKK1hjbXNDbWFwUmVjICoKK19YY21zQWRkQ21hcFJlYyhkcHksIGNtYXAsIHdpbmRvd0lELCB2aXN1YWwpCisgICAgRGlzcGxheSAqZHB5OworICAgIENvbG9ybWFwIGNtYXA7CisgICAgV2luZG93IHdpbmRvd0lEOworICAgIFZpc3VhbCAqdmlzdWFsOworeworICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorX1hjbXNSR0JfdG9fWENvbG9yKAorICAgIFhjbXNDb2xvciAqcENvbG9ycywKKyAgICBYQ29sb3IgKnBYQ29sb3JzLAorICAgIHVuc2lnbmVkIGludCBuQ29sb3JzKQoreworICByZXR1cm47Cit9CisKK1hjbXNDbWFwUmVjICoKK19YY21zQ29weUNtYXBSZWNBbmRGcmVlKAorICAgIERpc3BsYXkgKmRweSwKKyAgICBDb2xvcm1hcCBzcmNfY21hcCwKKyAgICBDb2xvcm1hcCBjb3B5X2NtYXApCit7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkCitfWGNtc0RlbGV0ZUNtYXBSZWMoCisgICAgRGlzcGxheSAqZHB5LAorICAgIENvbG9ybWFwIGNtYXApCit7CisgIHJldHVybjsKK30KKworI2VuZGlmCkluZGV4OiBsaWJYMTEtMS4zL3NyYy9NYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKyBsaWJYMTEtMS4zL3NyYy9NYWtlZmlsZS5hbQpAQCAtMzM1LDYgKzMzNSw4IEBAIGlmIFRIUlNUVUJTCiBsaWJYMTFfbGFfU09VUkNFUys9VUlUaHJTdHVicy5jCiBlbmRpZgogCitsaWJYMTFfbGFfU09VUkNFUys9WDE4TkNNU3N0dWJzLmMKKwogeDExZGF0YWRpciA9IEBYMTFfREFUQURJUkAKIHgxMWRhdGFfREFUQSA9IFhLZXlzeW1EQiBYRXJyb3JEQgogCkBAIC0zNDIsNiArMzQ0LDcgQEAgRVhUUkFfRElTVCA9IFwKIAkkKHgxMWRhdGFfREFUQSkgXAogCW9zMlN0dWJzLmMgXAotCVVJVGhyU3R1YnMuYyAKKwlVSVRoclN0dWJzLmMgXAorCVgxOE5DTVNzdHVicy5jCiAKIGlmIFhDQgogbGliWDExX2xhX1NPVVJDRVMgKz0gXApJbmRleDogbGliWDExLTEuMy9zcmMvbG9ja2luZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvbG9ja2luZy5jCisrKyBsaWJYMTEtMS4zL3NyYy9sb2NraW5nLmMKQEAgLTY2LDcgKzY2LDkgQEAgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYQogI2RlZmluZSBOVU1fRlJFRV9DVkxTIDQKIAogLyogaW4gbGNXcmFwLmMgKi8KKyNpZmRlZiBYTE9DQUxFCiBleHRlcm4gTG9ja0luZm9QdHIgX1hpMThuX2xvY2s7CisjZW5kaWYKIAogI2lmZGVmIFdJTjMyCiBzdGF0aWMgRFdPUkQgX1hfVGxzSW5kZXggPSAoRFdPUkQpLTE7CkBAIC01OTQsOSArNTk2LDExIEBAIFN0YXR1cyBYSW5pdFRocmVhZHModm9pZCkKICAgICBfWGdsb2JhbF9sb2NrID0gJmdsb2JhbF9sb2NrOwogICAgIHhtdXRleF9pbml0KF9YZ2xvYmFsX2xvY2stPmxvY2spOwogICAgIHhtdXRleF9zZXRfbmFtZShfWGdsb2JhbF9sb2NrLT5sb2NrLCAiWGxpYiBnbG9iYWwiKTsKKyNpZmRlZiBYTE9DQUxFCiAgICAgX1hpMThuX2xvY2sgPSAmaTE4bl9sb2NrOwogICAgIHhtdXRleF9pbml0KF9YaTE4bl9sb2NrLT5sb2NrKTsKICAgICB4bXV0ZXhfc2V0X25hbWUoX1hpMThuX2xvY2stPmxvY2ssICJYbGliIGkxOG4iKTsKKyNlbmRpZgogICAgIF9YTG9ja011dGV4X2ZuID0gX1hMb2NrTXV0ZXg7CiAgICAgX1hVbmxvY2tNdXRleF9mbiA9IF9YVW5sb2NrTXV0ZXg7CiAgICAgX1hDcmVhdGVNdXRleF9mbiA9IF9YQ3JlYXRlTXV0ZXg7Cg==