PATCH: various mod_proxy issues
Nick Kew <[email protected]> Sat, 26 Jun 2004 07:48:26 +0100 (BST)
| Newsgroups | gmane.comp.apache.mod-proxy,gmane.text.xml.cocoon.devel |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to [email protected] for more info. ---1463810294-1627417438-1088232129=:26894 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: <[email protected]> I've rolled a fairly extensive mod_proxy patch, which seems rather big to commit without review. Comments please: (1) Bug #10722 - cookie paths and domains in reverse proxy Following my patch to 2.0.49, I've adapted it for 2.1, taking into account Jim's patch. In doing so, I made some organisational changes: * moved rewriting of headers that need it (ap_proxy_date_canon and ap_proxy_location_reverse_map) to a new function process_proxy_header called from ap_proxy_read_headers. * Removed the same from ap_proxy_http_process_response * moved ap_proxy_read_headers from proxy_utils to proxy_http * Retained Jim's patch, but removed the line merging err_headers_out (2) Bug #29554 - URL munging I've ported Francois-Rene Rideau's patch to 2.1, subject to the question over proxy_fixup discussed in my last post. Any problems with committing this? -- Nick Kew ---1463810294-1627417438-1088232129=:26894 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=proxy-patch Content-Transfer-Encoding: BASE64 Content-ID: <[email protected]> Content-Description: proposed patch Content-Disposition: ATTACHMENT; FILENAME=proxy-patch ZGlmZiAtdSBwcm94eS1vbGQvbW9kX3Byb3h5LmMgcHJveHkvbW9kX3Byb3h5 LmMNCi0tLSBwcm94eS1vbGQvbW9kX3Byb3h5LmMJMjAwNC0wNi0yNiAwNzox ODoxMC4wMDAwMDAwMDAgKzAxMDANCisrKyBwcm94eS9tb2RfcHJveHkuYwky MDA0LTA2LTI2IDA3OjEzOjQ2LjAwMDAwMDAwMCArMDEwMA0KQEAgLTk0LDkg Kzk0LDEwIEBADQogc3RhdGljIGludCBwcm94eV9kZXRlY3QocmVxdWVzdF9y ZWMgKnIpDQogew0KICAgICB2b2lkICpzY29uZiA9IHItPnNlcnZlci0+bW9k dWxlX2NvbmZpZzsNCi0gICAgcHJveHlfc2VydmVyX2NvbmYgKmNvbmY7DQot DQotICAgIGNvbmYgPSAocHJveHlfc2VydmVyX2NvbmYgKikgYXBfZ2V0X21v ZHVsZV9jb25maWcoc2NvbmYsICZwcm94eV9tb2R1bGUpOw0KKyAgICBwcm94 eV9zZXJ2ZXJfY29uZiAqY29uZiA9DQorCShwcm94eV9zZXJ2ZXJfY29uZiAq KSBhcF9nZXRfbW9kdWxlX2NvbmZpZyhzY29uZiwgJnByb3h5X21vZHVsZSk7 DQorICAgIGludCBpLCBsZW47DQorICAgIHN0cnVjdCBwcm94eV9hbGlhcyAq ZW50ID0gKHN0cnVjdCBwcm94eV9hbGlhcyAqKWNvbmYtPmFsaWFzZXMtPmVs dHM7DQogDQogICAgIC8qIEljay4uLiBtc3ZjIChwZXJoYXBzIG90aGVycykg cHJvbW90ZXMgdGVybmFyeSBzaG9ydCByZXN1bHRzIHRvIGludCAqLw0KIA0K QEAgLTEyMSw2ICsxMjIsMTkgQEANCiAgICAgICAgIHItPnVyaSA9IHItPnVu cGFyc2VkX3VyaTsNCiAgICAgICAgIHItPmZpbGVuYW1lID0gYXByX3BzdHJj YXQoci0+cG9vbCwgInByb3h5OiIsIHItPnVyaSwgTlVMTCk7DQogICAgICAg ICByLT5oYW5kbGVyID0gInByb3h5LXNlcnZlciI7DQorICAgIH0gZWxzZSB7 DQorICAgICAgICAvKiB0ZXN0IGZvciBhIFByb3h5UGFzcyAqLw0KKyAgICAg ICAgZm9yIChpID0gMDsgaSA8IGNvbmYtPmFsaWFzZXMtPm5lbHRzOyBpKysp IHsNCisgICAgICAgICAgICBsZW4gPSBhbGlhc19tYXRjaChyLT51bnBhcnNl ZF91cmksIGVudFtpXS5mYWtlKTsNCisgICAgICAgICAgICBpZiAobGVuID4g MCkgew0KKyAgICAgICAgICAgICAgICByLT5maWxlbmFtZSA9IGFwcl9wc3Ry Y2F0KHItPnBvb2wsICJwcm94eToiLCBlbnRbaV0ucmVhbCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVucGFyc2Vk X3VyaSArIGxlbiwgTlVMTCk7DQorICAgICAgICAgICAgICAgIHItPmhhbmRs ZXIgPSAicHJveHktc2VydmVyIjsNCisgICAgICAgICAgICAgICAgci0+cHJv eHlyZXEgPSBQUk9YWVJFUV9SRVZFUlNFOw0KKyAgICAgICAgICAgICAgICBy LT51cmkgPSByLT51bnBhcnNlZF91cmk7DQorICAgICAgICAgICAgICAgIGJy ZWFrOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCiAgICAgfQ0KICAg ICByZXR1cm4gREVDTElORUQ7DQogfQ0KQEAgLTE0MCwyNiArMTU0LDYgQEAN CiAgICAgICAgIHJldHVybiBPSzsNCiAgICAgfQ0KIA0KLSAgICAvKiBYWFg6 IHNpbmNlIHItPnVyaSBoYXMgYmVlbiBtYW5pcHVsYXRlZCBhbHJlYWR5IHdl J3JlIG5vdCByZWFsbHkNCi0gICAgICogY29tcGxpYW50IHdpdGggUkZDMTk0 NSBhdCB0aGlzIHBvaW50LiAgQnV0IHRoaXMgcHJvYmFibHkgaXNuJ3QNCi0g ICAgICogYW4gaXNzdWUgYmVjYXVzZSB0aGlzIGlzIGEgaHlicmlkIHByb3h5 L29yaWdpbiBzZXJ2ZXIuDQotICAgICAqLw0KLQ0KLSAgICBmb3IgKGkgPSAw OyBpIDwgY29uZi0+YWxpYXNlcy0+bmVsdHM7IGkrKykgew0KLSAgICAgICAg bGVuID0gYWxpYXNfbWF0Y2goci0+dXJpLCBlbnRbaV0uZmFrZSk7DQotDQot ICAgICAgIGlmIChsZW4gPiAwKSB7DQotICAgICAgICAgICBpZiAoKGVudFtp XS5yZWFsWzBdID09ICchJyApICYmICggZW50W2ldLnJlYWxbMV0gPT0gMCAp KSB7DQotICAgICAgICAgICAgICAgcmV0dXJuIERFQ0xJTkVEOw0KLSAgICAg ICAgICAgfQ0KLQ0KLSAgICAgICAgICAgci0+ZmlsZW5hbWUgPSBhcHJfcHN0 cmNhdChyLT5wb29sLCAicHJveHk6IiwgZW50W2ldLnJlYWwsDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHItPnVyaSArIGxlbiApLCBO VUxMKTsNCi0gICAgICAgICAgIHItPmhhbmRsZXIgPSAicHJveHktc2VydmVy IjsNCi0gICAgICAgICAgIHItPnByb3h5cmVxID0gUFJPWFlSRVFfUkVWRVJT RTsNCi0gICAgICAgICAgIHJldHVybiBPSzsNCi0gICAgICAgfQ0KLSAgICB9 DQogICAgIHJldHVybiBERUNMSU5FRDsNCiB9DQogDQpAQCAtMjIxLDcgKzIx NSw3IEBADQogDQogICAgIHJldHVybiBPSzsNCiB9DQotDQorI2lmIDANCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KIC8qIEZpeHVwIHRoZSBmaWxlbmFt ZSAqLw0KIA0KQEAgLTIzNiw2ICsyMzAsMTMgQEANCiAgICAgaWYgKCFyLT5w cm94eXJlcSB8fCAhci0+ZmlsZW5hbWUgfHwgc3RybmNtcChyLT5maWxlbmFt ZSwgInByb3h5OiIsIDYpICE9IDApDQogICAgICAgICByZXR1cm4gREVDTElO RUQ7DQogDQorLyogV2UgZGVmaW5pdGVseSBzaG91bGRuJ3QgY2Fub25pY2Fs aXplIGEgcHJveHlfcGFzcy4NCisgKiBCdXQgc2hvdWxkIHdlIHJlYWxseSBj YW5vbmljYWxpemUgYSBTVERfUFJPWFk/Pz8gLS0gRmFocmVlDQorICovDQor ICAgIGlmIChyLT5wcm94eXJlcSA9PSBQUk9YWVJFUV9SRVZFUlNFKSB7DQor ICAgICAgICByZXR1cm4gT0s7DQorICAgIH0NCisNCiAgICAgLyogWFhYOiBT aG91bGRuJ3Qgd2UgdHJ5IHRoaXMgYmVmb3JlIHdlIHJ1biB0aGUgcHJveHlf d2Fsaz8gKi8NCiAgICAgdXJsID0gJnItPmZpbGVuYW1lWzZdOw0KIA0KQEAg LTI1MCw3ICsyNTEsNyBAQA0KIA0KICAgICByZXR1cm4gT0s7CQkvKiBvdGhl cndpc2U7IHdlJ3ZlIGRvbmUgdGhlIGJlc3Qgd2UgY2FuICovDQogfQ0KLQ0K KyNlbmRpZg0KIC8qIFNlbmQgYSByZWRpcmVjdGlvbiBpZiB0aGUgcmVxdWVz dCBjb250YWlucyBhIGhvc3RuYW1lIHdoaWNoIGlzIG5vdCAqLw0KIC8qIGZ1 bGx5IHF1YWxpZmllZCwgaS5lLiBkb2Vzbid0IGhhdmUgYSBkb21haW4gbmFt ZSBhcHBlbmRlZC4gU29tZSBwcm94eSAqLw0KIC8qIHNlcnZlcnMgbGlrZSBO ZXRzY2FwZSdzIGFsbG93IHRoaXMgYW5kIGFjY2VzcyBob3N0cyBmcm9tIHRo ZSBsb2NhbCAqLw0KQEAgLTQzOSw2ICs0NDAsMTAgQEANCiAgICAgcHMtPnBy b3hpZXMgPSBhcHJfYXJyYXlfbWFrZShwLCAxMCwgc2l6ZW9mKHN0cnVjdCBw cm94eV9yZW1vdGUpKTsNCiAgICAgcHMtPmFsaWFzZXMgPSBhcHJfYXJyYXlf bWFrZShwLCAxMCwgc2l6ZW9mKHN0cnVjdCBwcm94eV9hbGlhcykpOw0KICAg ICBwcy0+cmFsaWFzZXMgPSBhcHJfYXJyYXlfbWFrZShwLCAxMCwgc2l6ZW9m KHN0cnVjdCBwcm94eV9hbGlhcykpOw0KKyAgICBwcy0+Y29va2llX3BhdGhz ID0gYXByX2FycmF5X21ha2UocCwgMTAsIHNpemVvZihzdHJ1Y3QgcHJveHlf YWxpYXMpKTsNCisgICAgcHMtPmNvb2tpZV9kb21haW5zID0gYXByX2FycmF5 X21ha2UocCwgMTAsIHNpemVvZihzdHJ1Y3QgcHJveHlfYWxpYXMpKTsNCisg ICAgcHMtPmNvb2tpZV9wYXRoX3N0ciA9IGFwcl9zdHJtYXRjaF9wcmVjb21w aWxlKHAsICJwYXRoPSIsIDApIDsNCisgICAgcHMtPmNvb2tpZV9kb21haW5f c3RyID0gYXByX3N0cm1hdGNoX3ByZWNvbXBpbGUocCwgImRvbWFpbj0iLCAw KSA7DQogICAgIHBzLT5ub3Byb3hpZXMgPSBhcHJfYXJyYXlfbWFrZShwLCAx MCwgc2l6ZW9mKHN0cnVjdCBub3Byb3h5X2VudHJ5KSk7DQogICAgIHBzLT5k aXJjb25uID0gYXByX2FycmF5X21ha2UocCwgMTAsIHNpemVvZihzdHJ1Y3Qg ZGlyY29ubl9lbnRyeSkpOw0KICAgICBwcy0+YWxsb3dlZF9jb25uZWN0X3Bv cnRzID0gYXByX2FycmF5X21ha2UocCwgMTAsIHNpemVvZihpbnQpKTsNCkBA IC00NzQsNiArNDc5LDEyIEBADQogICAgIHBzLT5zZWNfcHJveHkgPSBhcHJf YXJyYXlfYXBwZW5kKHAsIGJhc2UtPnNlY19wcm94eSwgb3ZlcnJpZGVzLT5z ZWNfcHJveHkpOw0KICAgICBwcy0+YWxpYXNlcyA9IGFwcl9hcnJheV9hcHBl bmQocCwgYmFzZS0+YWxpYXNlcywgb3ZlcnJpZGVzLT5hbGlhc2VzKTsNCiAg ICAgcHMtPnJhbGlhc2VzID0gYXByX2FycmF5X2FwcGVuZChwLCBiYXNlLT5y YWxpYXNlcywgb3ZlcnJpZGVzLT5yYWxpYXNlcyk7DQorICAgIHBzLT5jb29r aWVfcGF0aHMNCisgICAgICAgID0gYXByX2FycmF5X2FwcGVuZChwLCBiYXNl LT5jb29raWVfcGF0aHMsIG92ZXJyaWRlcy0+Y29va2llX3BhdGhzKTsNCisg ICAgcHMtPmNvb2tpZV9kb21haW5zDQorICAgICAgICA9IGFwcl9hcnJheV9h cHBlbmQocCwgYmFzZS0+Y29va2llX2RvbWFpbnMsIG92ZXJyaWRlcy0+Y29v a2llX2RvbWFpbnMpIDsNCisgICAgcHMtPmNvb2tpZV9wYXRoX3N0ciA9IGJh c2UtPmNvb2tpZV9wYXRoX3N0cjsNCisgICAgcHMtPmNvb2tpZV9kb21haW5f c3RyID0gYmFzZS0+Y29va2llX2RvbWFpbl9zdHI7DQogICAgIHBzLT5ub3By b3hpZXMgPSBhcHJfYXJyYXlfYXBwZW5kKHAsIGJhc2UtPm5vcHJveGllcywg b3ZlcnJpZGVzLT5ub3Byb3hpZXMpOw0KICAgICBwcy0+ZGlyY29ubiA9IGFw cl9hcnJheV9hcHBlbmQocCwgYmFzZS0+ZGlyY29ubiwgb3ZlcnJpZGVzLT5k aXJjb25uKTsNCiAgICAgcHMtPmFsbG93ZWRfY29ubmVjdF9wb3J0cyA9IGFw cl9hcnJheV9hcHBlbmQocCwgYmFzZS0+YWxsb3dlZF9jb25uZWN0X3BvcnRz LCBvdmVycmlkZXMtPmFsbG93ZWRfY29ubmVjdF9wb3J0cyk7DQpAQCAtNjM5 LDYgKzY1MCwzNCBAQA0KIA0KICAgICByZXR1cm4gTlVMTDsNCiB9DQorc3Rh dGljIGNvbnN0IGNoYXIqDQorICAgIGNvb2tpZV9wYXRoKGNtZF9wYXJtcyAq Y21kLCB2b2lkICpkdW1teSwgY29uc3QgY2hhciAqZiwgY29uc3QgY2hhciAq cikNCit7DQorICAgIHNlcnZlcl9yZWMgKnMgPSBjbWQtPnNlcnZlcjsNCisg ICAgcHJveHlfc2VydmVyX2NvbmYgKmNvbmY7DQorICAgIHN0cnVjdCBwcm94 eV9hbGlhcyAqbmV3Ow0KKw0KKyAgICBjb25mID0gKHByb3h5X3NlcnZlcl9j b25mICopYXBfZ2V0X21vZHVsZV9jb25maWcocy0+bW9kdWxlX2NvbmZpZywN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZwcm94eV9tb2R1bGUpOw0KKyAgICBuZXcgPSBhcHJfYXJy YXlfcHVzaChjb25mLT5jb29raWVfcGF0aHMpIDsNCisgICAgbmV3LT5mYWtl ID0gZjsNCisgICAgbmV3LT5yZWFsID0gcjsNCisgICAgcmV0dXJuIE5VTEwg Ow0KK30NCitzdGF0aWMgY29uc3QgY2hhcioNCisgICAgY29va2llX2RvbWFp bihjbWRfcGFybXMgKmNtZCwgdm9pZCAqZHVtbXksIGNvbnN0IGNoYXIgKmYs IGNvbnN0IGNoYXIgKnIpDQorew0KKyAgICBzZXJ2ZXJfcmVjICpzID0gY21k LT5zZXJ2ZXI7DQorICAgIHByb3h5X3NlcnZlcl9jb25mICpjb25mOw0KKyAg ICBzdHJ1Y3QgcHJveHlfYWxpYXMgKm5ldzsNCisNCisgICAgY29uZiA9IChw cm94eV9zZXJ2ZXJfY29uZiAqKWFwX2dldF9tb2R1bGVfY29uZmlnKHMtPm1v ZHVsZV9jb25maWcsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcHJveHlfbW9kdWxlKTsNCisgICAg bmV3ID0gYXByX2FycmF5X3B1c2goY29uZi0+Y29va2llX2RvbWFpbnMpIDsN CisgICAgbmV3LT5mYWtlID0gZjsNCisgICAgbmV3LT5yZWFsID0gcjsNCisg ICAgcmV0dXJuIE5VTEwgOw0KK30NCiANCiBzdGF0aWMgY29uc3QgY2hhciAq DQogICAgIHNldF9wcm94eV9leGNsdWRlKGNtZF9wYXJtcyAqcGFybXMsIHZv aWQgKmR1bW15LCBjb25zdCBjaGFyICphcmcpDQpAQCAtMTAwNSw2ICsxMDQ0 LDEwIEBADQogICAgICAiYSB2aXJ0dWFsIHBhdGggYW5kIGEgVVJMIiksDQog ICAgIEFQX0lOSVRfVEFLRTEyKCJQcm94eVBhc3NSZXZlcnNlIiwgYWRkX3Bh c3NfcmV2ZXJzZSwgTlVMTCwgUlNSQ19DT05GfEFDQ0VTU19DT05GLA0KICAg ICAgImEgdmlydHVhbCBwYXRoIGFuZCBhIFVSTCBmb3IgcmV2ZXJzZSBwcm94 eSBiZWhhdmlvdXIiKSwNCisgICAgQVBfSU5JVF9UQUtFMigiUHJveHlQYXNz UmV2ZXJzZUNvb2tpZVBhdGgiLCBjb29raWVfcGF0aCwgTlVMTCwNCisgICAg ICAgUlNSQ19DT05GfEFDQ0VTU19DT05GLCAiUGF0aCByZXdyaXRlIHJ1bGUg Zm9yIHByb3h5aW5nIGNvb2tpZXMiKSAsDQorICAgIEFQX0lOSVRfVEFLRTIo IlByb3h5UGFzc1JldmVyc2VDb29raWVEb21haW4iLCBjb29raWVfZG9tYWlu LCBOVUxMLA0KKyAgICAgICBSU1JDX0NPTkZ8QUNDRVNTX0NPTkYsICJEb21h aW4gcmV3cml0ZSBydWxlIGZvciBwcm94eWluZyBjb29raWVzIikgLA0KICAg ICBBUF9JTklUX0lURVJBVEUoIlByb3h5QmxvY2siLCBzZXRfcHJveHlfZXhj bHVkZSwgTlVMTCwgUlNSQ19DT05GLA0KICAgICAgIkEgbGlzdCBvZiBuYW1l cywgaG9zdHMgb3IgZG9tYWlucyB0byB3aGljaCB0aGUgcHJveHkgd2lsbCBu b3QgY29ubmVjdCIpLA0KICAgICBBUF9JTklUX1RBS0UxKCJQcm94eVJlY2Vp dmVCdWZmZXJTaXplIiwgc2V0X3JlY3ZfYnVmZmVyX3NpemUsIE5VTEwsIFJT UkNfQ09ORiwNCkBAIC0xMDgyLDcgKzExMjUsNyBAQA0KICAgICAvKiB3YWxr IDxQcm94eSA+IGVudHJpZXMgYW5kIHN1cHByZXNzIGRlZmF1bHQgVFJBQ0Ug YmVoYXZpb3IgKi8NCiAgICAgYXBfaG9va19tYXBfdG9fc3RvcmFnZShwcm94 eV9tYXBfbG9jYXRpb24sIE5VTEwsTlVMTCwgQVBSX0hPT0tfRklSU1QpOw0K ICAgICAvKiBmaXh1cHMgKi8NCi0gICAgYXBfaG9va19maXh1cHMocHJveHlf Zml4dXAsIE5VTEwsIGFzelN1Y2MsIEFQUl9IT09LX0ZJUlNUKTsNCisgICAg LyphcF9ob29rX2ZpeHVwcyhwcm94eV9maXh1cCwgTlVMTCwgYXN6U3VjYywg QVBSX0hPT0tfRklSU1QpOyovDQogICAgIC8qIHBvc3QgcmVhZF9yZXF1ZXN0 IGhhbmRsaW5nICovDQogICAgIGFwX2hvb2tfcG9zdF9yZWFkX3JlcXVlc3Qo cHJveHlfZGV0ZWN0LCBOVUxMLCBOVUxMLCBBUFJfSE9PS19GSVJTVCk7DQog ICAgIC8qIHBvc3QgY29uZmlnIGhhbmRsaW5nICovDQpkaWZmIC11IHByb3h5 LW9sZC9tb2RfcHJveHkuaCBwcm94eS9tb2RfcHJveHkuaA0KLS0tIHByb3h5 LW9sZC9tb2RfcHJveHkuaAkyMDA0LTA2LTI2IDA3OjE4OjEwLjAwMDAwMDAw MCArMDEwMA0KKysrIHByb3h5L21vZF9wcm94eS5oCTIwMDQtMDYtMjYgMDc6 MDg6MjUuMDAwMDAwMDAwICswMTAwDQpAQCAtNDksNiArNDksNyBAQA0KICNp bmNsdWRlICJhcHJfc3RyaW5ncy5oIg0KICNpbmNsdWRlICJhcHJfdXJpLmgi DQogI2luY2x1ZGUgImFwcl9kYXRlLmgiDQorI2luY2x1ZGUgImFwcl9zdHJt YXRjaC5oIg0KICNpbmNsdWRlICJhcHJfZm5tYXRjaC5oIg0KICNkZWZpbmUg QVBSX1dBTlRfU1RSRlVOQw0KICNpbmNsdWRlICJhcHJfd2FudC5oIg0KQEAg LTE1OCw2ICsxNTksMTQgQEANCiAgICAgICBiYWRfYm9keQ0KICAgICB9IGJh ZG9wdDsgICAgICAgICAgICAgICAgICAgLyogaG93IHRvIGRlYWwgd2l0aCBi YWQgaGVhZGVycyAqLw0KICAgICBjaGFyIGJhZG9wdF9zZXQ7DQorLyogcHV0 dGluZyBuZXcgc3R1ZmYgb24gdGhlIGVuZCBtYXhpbWlzZXMgYmluYXJ5IGJh Y2stY29tcGF0aWJpbGl0eS4NCisgKiB0aGUgc3RybWF0Y2hfcGF0dGVybnMg YXJlIHJlYWxseSBhIGNvbnN0IGp1c3QgdG8gaGF2ZSBhDQorICogY2FzZS1p bmRlcGVuZGVudCBzdHJzdHIuDQorICovDQorICAgIGFwcl9hcnJheV9oZWFk ZXJfdCogY29va2llX3BhdGhzIDsNCisgICAgYXByX2FycmF5X2hlYWRlcl90 KiBjb29raWVfZG9tYWlucyA7DQorICAgIGNvbnN0IGFwcl9zdHJtYXRjaF9w YXR0ZXJuKiBjb29raWVfcGF0aF9zdHIgOw0KKyAgICBjb25zdCBhcHJfc3Ry bWF0Y2hfcGF0dGVybiogY29va2llX2RvbWFpbl9zdHIgOw0KIA0KIH0gcHJv eHlfc2VydmVyX2NvbmY7DQogDQpAQCAtMjI5LDcgKzIzOCw2IEBADQogUFJP WFlfREVDTEFSRShjaGFyICopYXBfcHJveHlfY2Fub25fbmV0bG9jKGFwcl9w b29sX3QgKnAsIGNoYXIgKipjb25zdCB1cmxwLCBjaGFyICoqdXNlcnAsDQog CQkJIGNoYXIgKipwYXNzd29yZHAsIGNoYXIgKipob3N0cCwgYXByX3BvcnRf dCAqcG9ydCk7DQogUFJPWFlfREVDTEFSRShjb25zdCBjaGFyICopYXBfcHJv eHlfZGF0ZV9jYW5vbihhcHJfcG9vbF90ICpwLCBjb25zdCBjaGFyICp4KTsN Ci1QUk9YWV9ERUNMQVJFKGFwcl90YWJsZV90ICopYXBfcHJveHlfcmVhZF9o ZWFkZXJzKHJlcXVlc3RfcmVjICpyLCByZXF1ZXN0X3JlYyAqcnAsIGNoYXIg KmJ1ZmZlciwgaW50IHNpemUsIGNvbm5fcmVjICpjKTsNCiBQUk9YWV9ERUNM QVJFKGludCkgYXBfcHJveHlfbGlzdHN0cihjb25zdCBjaGFyICpsaXN0LCBj b25zdCBjaGFyICp2YWwpOw0KIFBST1hZX0RFQ0xBUkUoY2hhciAqKWFwX3By b3h5X3JlbW92ZXN0cihhcHJfcG9vbF90ICpwb29sLCBjb25zdCBjaGFyICps aXN0LCBjb25zdCBjaGFyICp2YWwpOw0KIFBST1hZX0RFQ0xBUkUoaW50KSBh cF9wcm94eV9oZXgyc2VjKGNvbnN0IGNoYXIgKngpOw0KZGlmZiAtdSBwcm94 eS1vbGQvcHJveHlfaHR0cC5jIHByb3h5L3Byb3h5X2h0dHAuYw0KLS0tIHBy b3h5LW9sZC9wcm94eV9odHRwLmMJMjAwNC0wNi0yNiAwNzoxODoxMS4wMDAw MDAwMDAgKzAxMDANCisrKyBwcm94eS9wcm94eV9odHRwLmMJMjAwNC0wNi0y NiAwNzowNzozMy4wMDAwMDAwMDAgKzAxMDANCkBAIC0xMjksNiArMTI5LDk5 IEBADQogICAgIH0NCiAgICAgcmV0dXJuIHVybDsNCiB9DQorLyogY29va2ll cyBhcmUgYSBiaXQgdHJpY2tpZXIgdG8gbWF0Y2g6IHdlJ3ZlIGdvdCB0d28g c3Vic3RyaW5ncyB0byB3b3JyeQ0KKyAqIGFib3V0LCBhbmQgd2UgY2FuJ3Qg anVzdCBmaW5kIHRoZW0gd2l0aCBzdHJzdHIgJ2NvcyBvZiBjYXNlLiAgUmVn ZXhwDQorICogbWF0Y2hpbmcgd291bGQgYmUgYW4gZWFzeSBmaXgsIGJ1dCBm b3IgYmV0dGVyIGNvbnNpc3RlbmN5IHdpdGggYWxsIHRoZQ0KKyAqIG90aGVy IG1hdGNoZXMgd2UnbGwgcmVmcmFpbiBhbmQgdXNlIGFwcl9zdHJtYXRjaCB0 byBmaW5kIHBhdGg9L2RvbWFpbj0NCisgKiBhbmQgc3RpY2sgdG8gcGxhaW4g c3RyaW5ncyBmb3IgdGhlIGNvbmZpZyB2YWx1ZXMuDQorICovDQorc3RhdGlj IGNvbnN0IGNoYXIgKnByb3h5X2Nvb2tpZV9yZXZlcnNlX21hcChyZXF1ZXN0 X3JlYyAqciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5X3Nl cnZlcl9jb25mICpjb25mLCBjb25zdCBjaGFyICpzdHIpDQorew0KKyAgICBz dHJ1Y3QgcHJveHlfYWxpYXMgKmVudDsNCisgICAgc2l6ZV90IGxlbiA9IHN0 cmxlbihzdHIpOw0KKyAgICBjb25zdCBjaGFyKiBuZXdwYXRoID0gTlVMTCA7 DQorICAgIGNvbnN0IGNoYXIqIG5ld2RvbWFpbiA9IE5VTEwgOw0KKyAgICBj b25zdCBjaGFyKiBwYXRocCA7DQorICAgIGNvbnN0IGNoYXIqIGRvbWFpbnAg Ow0KKyAgICBjb25zdCBjaGFyKiBwYXRoZSA7DQorICAgIGNvbnN0IGNoYXIq IGRvbWFpbmUgOw0KKyAgICBzaXplX3QgbDEsIGwyLCBpLCBwb2ZmcywgZG9m ZnMgOw0KKyAgICBpbnQgZGRpZmYgPSAwIDsNCisgICAgaW50IHBkaWZmID0g MCA7DQorICAgIGNoYXIqIHJldCA7DQorDQorLyogZmluZCB0aGUgbWF0Y2gg YW5kIHJlcGxhY2VtZW50LCBidXQgc2F2ZSByZXBsYWNpbmcgdW50aWwgd2Un dmUgZG9uZQ0KKyAgIGJvdGggcGF0aCBhbmQgZG9tYWluIHNvIHdlIGtub3cg dGhlIG5ldyBzdHJsZW4NCisqLw0KKyAgICBpZiAoIHBhdGhwID0gYXByX3N0 cm1hdGNoKGNvbmYtPmNvb2tpZV9wYXRoX3N0ciwgc3RyLCBsZW4pICwgcGF0 aHAgKSB7DQorICAgICAgICBwYXRocCArPSA1IDsNCisgICAgICAgIHBvZmZz ID0gcGF0aHAgLSBzdHIgOw0KKyAgICAgICAgcGF0aGUgPSBzdHJjaHIocGF0 aHAsICc7JykgOw0KKyAgICAgICAgbDEgPSBwYXRoZSA/IChwYXRoZS1wYXRo cCkgOiBzdHJsZW4ocGF0aHApIDsNCisgICAgICAgIHBhdGhlID0gcGF0aHAg KyBsMSA7DQorICAgICAgICBlbnQgPSAoc3RydWN0IHByb3h5X2FsaWFzICop Y29uZi0+Y29va2llX3BhdGhzLT5lbHRzOw0KKyAgICAgICAgZm9yIChpID0g MDsgaSA8IGNvbmYtPmNvb2tpZV9wYXRocy0+bmVsdHM7IGkrKykgew0KKyAg ICAgICAgICAgIGwyID0gc3RybGVuKGVudFtpXS5mYWtlKTsNCisgICAgICAg ICAgICBpZiAobDEgPj0gbDIgJiYgc3RybmNtcChlbnRbaV0uZmFrZSwgcGF0 aHAsIGwyKSA9PSAwKSB7DQorICAgICAgICAgICAgICAgIG5ld3BhdGggPSBl bnRbaV0ucmVhbCA7DQorICAgICAgICAgICAgICAgIHBkaWZmID0gc3RybGVu KG5ld3BhdGgpIC0gbDEgOw0KKyAgICAgICAgICAgICAgICBicmVhayA7DQor ICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGlmICgg ZG9tYWlucCA9IGFwcl9zdHJtYXRjaChjb25mLT5jb29raWVfZG9tYWluX3N0 ciwgc3RyLCBsZW4pICwgZG9tYWlucCApIHsNCisgICAgICAgIGRvbWFpbnAg Kz0gNyA7DQorICAgICAgICBkb2ZmcyA9IGRvbWFpbnAgLSBzdHIgOw0KKyAg ICAgICAgZG9tYWluZSA9IHN0cmNocihkb21haW5wLCAnOycpIDsNCisgICAg ICAgIGwxID0gZG9tYWluZSA/IChkb21haW5lLWRvbWFpbnApIDogc3RybGVu KGRvbWFpbnApIDsNCisgICAgICAgIGRvbWFpbmUgPSBkb21haW5wICsgbDEg Ow0KKyAgICAgICAgZW50ID0gKHN0cnVjdCBwcm94eV9hbGlhcyAqKWNvbmYt PmNvb2tpZV9kb21haW5zLT5lbHRzOw0KKyAgICAgICAgZm9yIChpID0gMDsg aSA8IGNvbmYtPmNvb2tpZV9kb21haW5zLT5uZWx0czsgaSsrKSB7DQorICAg ICAgICAgICAgbDIgPSBzdHJsZW4oZW50W2ldLmZha2UpOw0KKyAgICAgICAg ICAgIGlmIChsMSA+PSBsMiAmJiBzdHJuY21wKGVudFtpXS5mYWtlLCBkb21h aW5wLCBsMikgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBuZXdkb21haW4g PSBlbnRbaV0ucmVhbCA7DQorICAgICAgICAgICAgICAgIGRkaWZmID0gc3Ry bGVuKG5ld2RvbWFpbikgLSBsMSA7DQorICAgICAgICAgICAgICAgIGJyZWFr IDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAg aWYgKCBuZXdwYXRoICkgew0KKyAgICAgICAgcmV0ID0gYXByX3BhbGxvYyhy LT5wb29sLCBsZW4rcGRpZmYrZGRpZmYrMSkgOw0KKyAgICAgICAgbDEgPSBz dHJsZW4obmV3cGF0aCkgOw0KKyAgICAgICAgaWYgKCBuZXdkb21haW4gKSB7 DQorICAgICAgICAgICAgbDIgPSBzdHJsZW4obmV3ZG9tYWluKSA7DQorICAg ICAgICAgICAgaWYgKCBkb2ZmcyA+IHBvZmZzICkgew0KKyAgICAgICAgICAg ICAgICBtZW1jcHkocmV0LCBzdHIsIHBvZmZzKSA7DQorICAgICAgICAgICAg ICAgIG1lbWNweShyZXQrcG9mZnMsIG5ld3BhdGgsIGwxKSA7DQorICAgICAg ICAgICAgICAgIG1lbWNweShyZXQrcG9mZnMrbDEsIHBhdGhlLCBkb21haW5w LXBhdGhlKSA7DQorICAgICAgICAgICAgICAgIG1lbWNweShyZXQrZG9mZnMr cGRpZmYsIG5ld2RvbWFpbiwgbDIpIDsNCisgICAgICAgICAgICAgICAgc3Ry Y3B5KHJldCtkb2ZmcytwZGlmZitsMiwgZG9tYWluZSkgOw0KKyAgICAgICAg ICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIG1lbWNweShyZXQsIHN0 ciwgZG9mZnMpIDsNCisgICAgICAgICAgICAgICAgbWVtY3B5KHJldCtkb2Zm cywgbmV3ZG9tYWluLCBsMikgOw0KKyAgICAgICAgICAgICAgICBtZW1jcHko cmV0K2RvZmZzK2wyLCBkb21haW5lLCBwYXRocC1kb21haW5lKSA7DQorICAg ICAgICAgICAgICAgIG1lbWNweShyZXQrcG9mZnMrZGRpZmYsIG5ld3BhdGgs IGwxKSA7DQorICAgICAgICAgICAgICAgIHN0cmNweShyZXQrcG9mZnMrZGRp ZmYrbDEsIHBhdGhlKSA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBl bHNlIHsNCisgICAgICAgICAgICBtZW1jcHkocmV0LCBzdHIsIHBvZmZzKSA7 DQorICAgICAgICAgICAgbWVtY3B5KHJldCtwb2ZmcywgbmV3cGF0aCwgbDEp IDsNCisgICAgICAgICAgICBzdHJjcHkocmV0K3BvZmZzK2wxLCBwYXRoZSkg Ow0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYgKCBu ZXdkb21haW4gKSB7DQorICAgICAgICAgICAgcmV0ID0gYXByX3BhbGxvYyhy LT5wb29sLCBsZW4rcGRpZmYrZGRpZmYrMSkgOw0KKyAgICAgICAgICAgIGwy ID0gc3RybGVuKG5ld2RvbWFpbikgOw0KKyAgICAgICAgICAgIG1lbWNweShy ZXQsIHN0ciwgZG9mZnMpIDsNCisgICAgICAgICAgICBtZW1jcHkocmV0K2Rv ZmZzLCBuZXdkb21haW4sIGwyKSA7DQorICAgICAgICAgICAgc3RyY3B5KHJl dCtkb2ZmcytsMiwgZG9tYWluZSkgOw0KKyAgICAgICAgfSBlbHNlIHsNCisg ICAgICAgICAgICByZXQgPSAoY2hhciopIHN0ciA7ICAgICAgICAvKiBubyBj aGFuZ2UgKi8NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICByZXR1cm4gcmV0 IDsNCit9DQogDQogLyogQ2xlYXIgYWxsIGNvbm5lY3Rpb24tYmFzZWQgaGVh ZGVycyBmcm9tIHRoZSBpbmNvbWluZyBoZWFkZXJzIHRhYmxlICovDQogc3Rh dGljIHZvaWQgYXBfcHJveHlfY2xlYXJfY29ubmVjdGlvbihhcHJfcG9vbF90 ICpwLCBhcHJfdGFibGVfdCAqaGVhZGVycykNCkBAIC0zNzUsNiArNDY4LDcg QEANCiAgICAgcmV0dXJuIE9LOw0KIH0NCiANCisNCiBzdGF0aWMNCiBhcHJf c3RhdHVzX3QgYXBfcHJveHlfaHR0cF9yZXF1ZXN0KGFwcl9wb29sX3QgKnAs IHJlcXVlc3RfcmVjICpyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJveHlfaHR0cF9jb25uX3QgKnBfY29ubiwgY29ubl9yZWMg Km9yaWdpbiwgDQpAQCAtNzUxLDYgKzg0NSwxMzkgQEANCiANCiAgICAgcmV0 dXJuIEFQUl9TVUNDRVNTOw0KIH0NCitzdGF0aWMgdm9pZCBwcm9jZXNzX3By b3h5X2hlYWRlcihyZXF1ZXN0X3JlYyogciwgcHJveHlfc2VydmVyX2NvbmYq IGMsDQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGtleSwg Y29uc3QgY2hhciogdmFsdWUpDQorew0KKyAgICBzdGF0aWMgY29uc3QgY2hh ciogZGF0ZV9oZHJzW10NCisgICAgICAgID0geyAiRGF0ZSIsICJFeHBpcmVz IiwgIkxhc3QtTW9kaWZpZWQiLCBOVUxMIH0gOw0KKyAgICBzdGF0aWMgY29u c3Qgc3RydWN0IHsNCisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgOw0KKyAg ICAgICAgY29uc3QgY2hhciogKCpmdW5jKShyZXF1ZXN0X3JlYyosIHByb3h5 X3NlcnZlcl9jb25mKiwgY29uc3QgY2hhciopIDsNCisgICAgfSB0cmFuc2Zv cm1faGRyc1tdID0gew0KKyAgICAgICAgeyAiTG9jYXRpb24iLCBhcF9wcm94 eV9sb2NhdGlvbl9yZXZlcnNlX21hcCB9ICwNCisgICAgICAgIHsgIkNvbnRl bnQtTG9jYXRpb24iLCBhcF9wcm94eV9sb2NhdGlvbl9yZXZlcnNlX21hcCB9 ICwNCisgICAgICAgIHsgIlVSSSIsIGFwX3Byb3h5X2xvY2F0aW9uX3JldmVy c2VfbWFwIH0gLA0KKyAgICAgICAgeyAiU2V0LUNvb2tpZSIsIHByb3h5X2Nv b2tpZV9yZXZlcnNlX21hcCB9ICwNCisgICAgICAgIHsgTlVMTCwgTlVMTCB9 DQorICAgIH0gOw0KKyAgICBpbnQgaSA7DQorICAgIGZvciAoIGkgPSAwIDsg ZGF0ZV9oZHJzW2ldIDsgKytpICkgew0KKyAgICAgICAgaWYgKCAhc3RyY2Fz ZWNtcChkYXRlX2hkcnNbaV0sIGtleSkgKSB7DQorICAgICAgICAgICAgYXBy X3RhYmxlX2FkZChyLT5oZWFkZXJzX291dCwga2V5LA0KKyAgICAgICAgICAg ICAgICBhcF9wcm94eV9kYXRlX2Nhbm9uKHItPnBvb2wsIHZhbHVlKSkgOw0K KyAgICAgICAgICAgIHJldHVybiA7DQorICAgICAgICB9DQorICAgIH0NCisg ICAgZm9yICggaSA9IDAgOyB0cmFuc2Zvcm1faGRyc1tpXS5uYW1lIDsgKytp ICkgew0KKyAgICAgICAgaWYgKCAhc3RyY2FzZWNtcCh0cmFuc2Zvcm1faGRy c1tpXS5uYW1lLCBrZXkpICkgew0KKyAgICAgICAgICAgIGFwcl90YWJsZV9h ZGQoci0+aGVhZGVyc19vdXQsIGtleSwNCisgICAgICAgICAgICAgICAgKCp0 cmFuc2Zvcm1faGRyc1tpXS5mdW5jKShyLCBjLCB2YWx1ZSkpIDsNCisgICAg ICAgICAgICByZXR1cm4gOw0KKyAgICAgICB9DQorICAgIH0NCisgICAgYXBy X3RhYmxlX2FkZChyLT5oZWFkZXJzX291dCwga2V5LCB2YWx1ZSkgOw0KKyAg ICByZXR1cm4gOw0KK30NCisNCitzdGF0aWMgdm9pZCBhcF9wcm94eV9yZWFk X2hlYWRlcnMocmVxdWVzdF9yZWMgKnIsIHJlcXVlc3RfcmVjICpyciwgY2hh ciAqYnVmZmVyLCBpbnQgc2l6ZSwgY29ubl9yZWMgKmMpDQorew0KKyAgICBp bnQgbGVuOw0KKyAgICBjaGFyICp2YWx1ZSwgKmVuZDsNCisgICAgY2hhciBm aWVsZFtNQVhfU1RSSU5HX0xFTl07DQorICAgIGludCBzYXdfaGVhZGVycyA9 IDA7DQorICAgIHZvaWQgKnNjb25mID0gci0+c2VydmVyLT5tb2R1bGVfY29u ZmlnOw0KKyAgICBwcm94eV9zZXJ2ZXJfY29uZiAqcHNjOw0KKw0KKyAgICBw c2MgPSAocHJveHlfc2VydmVyX2NvbmYgKikgYXBfZ2V0X21vZHVsZV9jb25m aWcoc2NvbmYsICZwcm94eV9tb2R1bGUpOw0KKw0KKyAgICByLT5oZWFkZXJz X291dCA9IGFwcl90YWJsZV9tYWtlKHItPnBvb2wsIDIwKTsNCisNCisgICAg LyoNCisgICAgICogUmVhZCBoZWFkZXIgbGluZXMgdW50aWwgd2UgZ2V0IHRo ZSBlbXB0eSBzZXBhcmF0b3IgbGluZSwgYSByZWFkIGVycm9yLA0KKyAgICAg KiB0aGUgY29ubmVjdGlvbiBjbG9zZXMgKEVPRiksIG9yIHdlIHRpbWVvdXQu DQorICAgICAqLw0KKyAgICB3aGlsZSAoKGxlbiA9IGFwX2dldGxpbmUoYnVm ZmVyLCBzaXplLCByciwgMSkpID4gMCkgew0KKw0KKyAgICAgICAgaWYgKCEo dmFsdWUgPSBzdHJjaHIoYnVmZmVyLCAnOicpKSkgeyAgICAgLyogRmluZCB0 aGUgY29sb24gc2VwYXJhdG9yICovDQorDQorICAgICAgICAgICAgLyogV2Ug bWF5IGVuY291bnRlciBpbnZhbGlkIGhlYWRlcnMsIHVzdWFsbHkgZnJvbSBi dWdneQ0KKyAgICAgICAgICAgICAqIE1TIElJUyBzZXJ2ZXJzLCBzbyB3ZSBu ZWVkIHRvIGRldGVybWluZSBqdXN0IGhvdyB0byBoYW5kbGUNCisgICAgICAg ICAgICAgKiB0aGVtLiBXZSBjYW4gZWl0aGVyIGlnbm9yZSB0aGVtLCBhc3N1 bWUgdGhhdCB0aGV5IG1hcmsgdGhlDQorICAgICAgICAgICAgICogc3RhcnQt b2YtYm9keSAoZWc6IGEgbWlzc2luZyBDUkxGKSBvciAodGhlIGRlZmF1bHQp IG1hcmsNCisgICAgICAgICAgICAgKiB0aGUgaGVhZGVycyBhcyB0b3RhbGx5 IGJvZ3VzIGFuZCByZXR1cm4gYSA1MDAuIFRoZSBzb2xlDQorICAgICAgICAg ICAgICogZXhjZXB0aW9uIGlzIGFuIGV4dHJhICJIVFRQLzEuMCAyMDAsIE9L IiBsaW5lIHNwcmlua2xlZA0KKyAgICAgICAgICAgICAqIGluIGJldHdlZW4g dGhlIHVzdWFsIE1JTUUgaGVhZGVycywgd2hpY2ggaXMgYSBmYXZvcml0ZQ0K KyAgICAgICAgICAgICAqIElJUyBidWcuDQorICAgICAgICAgICAgICovDQor ICAgICAgICAgICAgIC8qIFhYWDogVGhlIG1hc2sgY2hlY2sgaXMgYnVnZ3kg aWYgd2UgZXZlciBzZWUgYW4gSFRUUC8xLjEwICovDQorDQorICAgICAgICAg ICAgaWYgKCFhcHJfZGF0ZV9jaGVja21hc2soYnVmZmVyLCAiSFRUUC8jLiMg IyMjKiIpKSB7DQorICAgICAgICAgICAgICAgIGlmIChwc2MtPmJhZG9wdCA9 PSBiYWRfZXJyb3IpIHsNCisgICAgICAgICAgICAgICAgICAgIC8qIE5vcGUs IGl0IHdhc24ndCBldmVuIGFuIGV4dHJhIEhUVFAgaGVhZGVyLiBHaXZlIHVw LiAqLw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDsNCisgICAgICAg ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwc2MtPmJh ZG9wdCA9PSBiYWRfYm9keSkgew0KKyAgICAgICAgICAgICAgICAgICAgLyog aWYgd2UndmUgYWxyZWFkeSBzdGFydGVkIGxvYWRpbmcgaGVhZGVyc19vdXQs IHRoZW4NCisgICAgICAgICAgICAgICAgICAgICAqIHJldHVybiB3aGF0IHdl J3ZlIGFjY3VtdWxhdGVkIHNvIGZhciwgaW4gdGhlIGhvcGVzDQorICAgICAg ICAgICAgICAgICAgICAgKiB0aGF0IHRoZXkgYXJlIHVzZWZ1bC4gT3RoZXJ3 aXNlLCB3ZSBjb21wbGV0ZWx5IGJhaWwuDQorICAgICAgICAgICAgICAgICAg ICAgKi8NCisgICAgICAgICAgICAgICAgICAgIC8qIEZJWE1FOiBXZSd2ZSBh bHJlYWR5IHNjYXJmZWQgdGhlIHN1cHBvc2VkIDFzdCBsaW5lIG9mDQorICAg ICAgICAgICAgICAgICAgICAgKiB0aGUgYm9keSwgc28gdGhlIGFjdHVhbCBj b250ZW50IG1heSBlbmQgdXAgYmVpbmcgYm9ndXMNCisgICAgICAgICAgICAg ICAgICAgICAqIGFzIHdlbGwuIElmIHRoZSBjb250ZW50IGlzIEhUTUwsIHdl IG1heSBiZSBsdWNreS4NCisgICAgICAgICAgICAgICAgICAgICAqLw0KKyAg ICAgICAgICAgICAgICAgICAgaWYgKHNhd19oZWFkZXJzKSB7DQorICAgICAg ICAgICAgICAgICAgICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQ TE9HX1dBUk5JTkcsIDAsIHItPnNlcnZlciwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgInByb3h5OiBTdGFydGluZyBib2R5IGR1ZSB0byBib2d1cyBu b24taGVhZGVyIGluIGhlYWRlcnMgIg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAicmV0dXJuZWQgYnkgJXMgKCVzKSIsIHItPnVyaSwgci0+bWV0aG9k KTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOw0KKyAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAg ICAgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX1dBUk5JTkcs IDAsIHItPnNlcnZlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgInBy b3h5OiBObyBIVFRQIGhlYWRlcnMgIg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAicmV0dXJuZWQgYnkgJXMgKCVzKSIsIHItPnVyaSwgci0+bWV0aG9k KTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOw0KKyAgICAg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIHBzYy0+YmFk b3B0ID09IGJhZF9pZ25vcmUgY2FzZSAqLw0KKyAgICAgICAgICAgIGFwX2xv Z19lcnJvcihBUExPR19NQVJLLCBBUExPR19XQVJOSU5HLCAwLCByLT5zZXJ2 ZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICJwcm94eTogSWdub3Jp bmcgYm9ndXMgSFRUUCBoZWFkZXIgIg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAicmV0dXJuZWQgYnkgJXMgKCVzKSIsIHItPnVyaSwgci0+bWV0aG9k KTsNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIH0NCisNCisg ICAgICAgICp2YWx1ZSA9ICdcMCc7DQorICAgICAgICArK3ZhbHVlOw0KKyAg ICAgICAgLyogWFhYOiBSRkMyMDY4IGRlZmluZXMgb25seSBTUCBhbmQgSFQg YXMgd2hpdGVzcGFjZSwgdGhpcyB0ZXN0IGlzDQorICAgICAgICAgKiB3cm9u Zy4uLiBhbmQgc28gYXJlIG1hbnkgb3RoZXJzIHByb2JhYmx5Lg0KKyAgICAg ICAgICovDQorICAgICAgICB3aGlsZSAoYXByX2lzc3BhY2UoKnZhbHVlKSkN CisgICAgICAgICAgICArK3ZhbHVlOyAgICAgICAgICAgIC8qIFNraXAgdG8g c3RhcnQgb2YgdmFsdWUgICAqLw0KKw0KKyAgICAgICAgLyogc2hvdWxkIHN0 cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXMgd2VsbCAqLw0KKyAgICAgICAg Zm9yIChlbmQgPSAmdmFsdWVbc3RybGVuKHZhbHVlKS0xXTsgZW5kID4gdmFs dWUgJiYgYXByX2lzc3BhY2UoKmVuZCk7IC0tDQorZW5kKQ0KKyAgICAgICAg ICAgICplbmQgPSAnXDAnOw0KKw0KKyAgICAgICAgLyogbWFrZSBzdXJlIHdl IGFkZCBzbyBhcyBub3QgdG8gZGVzdHJveSBkdXBsaWNhdGVkIGhlYWRlcnMN CisgICAgICAgICAqIE1vZGlmeSBoZWFkZXJzIHJlcXVpcmluZyBjYW5vbmlj YWxpc2F0aW9uIGFuZC9vciBhZmZlY3RlZA0KKyAgICAgICAgICogYnkgUHJv eHlQYXNzUmV2ZXJzZSBhbmQgZmFtaWx5IHdpdGggcHJvY2Vzc19wcm94eV9o ZWFkZXINCisgICAgICAgICAqLw0KKyAgICAgICAgcHJvY2Vzc19wcm94eV9o ZWFkZXIociwgcHNjLCBidWZmZXIsIHZhbHVlKSA7DQorICAgICAgICBzYXdf aGVhZGVycyA9IDE7DQorDQorICAgICAgICAvKiB0aGUgaGVhZGVyIHdhcyB0 b28gbG9uZzsgYXQgdGhlIGxlYXN0IHdlIHNob3VsZCBza2lwIGV4dHJhIGRh dGEgKi8NCisgICAgICAgIGlmIChsZW4gPj0gc2l6ZSAtIDEpIHsNCisgICAg ICAgICAgICB3aGlsZSAoKGxlbiA9IGFwX2dldGxpbmUoZmllbGQsIE1BWF9T VFJJTkdfTEVOLCByciwgMSkpDQorICAgICAgICAgICAgICAgICAgICA+PSBN QVhfU1RSSU5HX0xFTiAtIDEpIHsNCisgICAgICAgICAgICAgICAgLyogc29h ayB1cCB0aGUgZXh0cmEgZGF0YSAqLw0KKyAgICAgICAgICAgIH0NCisgICAg ICAgICAgICBpZiAobGVuID09IDApIC8qIHRpbWUgdG8gZXhpdCB0aGUgbGFy Z2VyIGxvb3AgYXMgd2VsbCAqLw0KKyAgICAgICAgICAgICAgICBicmVhazsN CisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCisNCiANCiBzdGF0aWMgaW50 IGFkZGl0X2RhbW1pdCh2b2lkICp2LCBjb25zdCBjaGFyICprZXksIGNvbnN0 IGNoYXIgKnZhbCkNCiB7DQpAQCAtODUwLDEzICsxMDc3LDExIEBADQogDQog ICAgICAgICAgICAgLyogRmlyc3QsIHR1Y2sgYXdheSBhbGwgYWxyZWFkeSBl eGlzdGluZyBjb29raWVzICovDQogICAgICAgICAgICAgc2F2ZV90YWJsZSA9 IGFwcl90YWJsZV9tYWtlKHItPnBvb2wsIDIpOw0KLSAgICAgICAgICAgIGFw cl90YWJsZV9kbyhhZGRpdF9kYW1taXQsIHNhdmVfdGFibGUsIHItPmVycl9o ZWFkZXJzX291dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlNldC1D b29raWUiLCBOVUxMKTsNCiAgICAgICAgICAgICBhcHJfdGFibGVfZG8oYWRk aXRfZGFtbWl0LCBzYXZlX3RhYmxlLCByLT5oZWFkZXJzX291dCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIlNldC1Db29raWUiLCBOVUxMKTsNCiAN Ci0gICAgICAgICAgICByLT5oZWFkZXJzX291dCA9IGFwX3Byb3h5X3JlYWRf aGVhZGVycyhyLCBycCwgYnVmZmVyLA0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihidWZmZXIp LCBvcmlnaW4pOw0KKwkgICAgLyogc2hvdmUgdGhlIGhlYWRlcnMgZGlyZWN0 IGludG8gci0+aGVhZGVyc19vdXQgKi8NCisgICAgICAgICAgICBhcF9wcm94 eV9yZWFkX2hlYWRlcnMociwgcnAsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciks IG9yaWdpbik7DQogDQogICAgICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0 ID09IE5VTEwpIHsNCiAgICAgICAgICAgICAgICAgYXBfbG9nX2Vycm9yKEFQ TE9HX01BUkssIEFQTE9HX1dBUk5JTkcsIDAsDQpAQCAtOTQ2LDQyICsxMTcx LDkgQEANCiAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3h5OiBIVFRQ OiByZWNlaXZlZCBpbnRlcmltICVkIHJlc3BvbnNlIiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgci0+c3RhdHVzKTsNCiAgICAgICAgIH0NCi0NCi0g ICAgICAgIC8qIHdlIG11c3QgYWNjZXB0IDMga2luZHMgb2YgZGF0ZSwgYnV0 IGdlbmVyYXRlIG9ubHkgMSBraW5kIG9mIGRhdGUgKi8NCi0gICAgICAgIHsN Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpidWY7DQotICAgICAgICAgICAg aWYgKChidWYgPSBhcHJfdGFibGVfZ2V0KHItPmhlYWRlcnNfb3V0LCAiRGF0 ZSIpKSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGFwcl90YWJsZV9z ZXQoci0+aGVhZGVyc19vdXQsICJEYXRlIiwNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcF9wcm94eV9kYXRlX2Nhbm9uKHAsIGJ1ZikpOw0K LSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoKGJ1ZiA9IGFwcl90 YWJsZV9nZXQoci0+aGVhZGVyc19vdXQsICJFeHBpcmVzIikpICE9IE5VTEwp IHsNCi0gICAgICAgICAgICAgICAgYXByX3RhYmxlX3NldChyLT5oZWFkZXJz X291dCwgIkV4cGlyZXMiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwX3Byb3h5X2RhdGVfY2Fub24ocCwgYnVmKSk7DQotICAgICAgICAg ICAgfQ0KLSAgICAgICAgICAgIGlmICgoYnVmID0gYXByX3RhYmxlX2dldChy LT5oZWFkZXJzX291dCwgIkxhc3QtTW9kaWZpZWQiKSkgIT0gTlVMTCkgew0K LSAgICAgICAgICAgICAgICBhcHJfdGFibGVfc2V0KHItPmhlYWRlcnNfb3V0 LCAiTGFzdC1Nb2RpZmllZCIsDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXBfcHJveHlfZGF0ZV9jYW5vbihwLCBidWYpKTsNCi0gICAgICAg ICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICAvKiBtdW5nZSB0aGUg TG9jYXRpb24gYW5kIFVSSSByZXNwb25zZSBoZWFkZXJzIGFjY29yZGluZyB0 bw0KLSAgICAgICAgICogUHJveHlQYXNzUmV2ZXJzZQ0KKyAgICAgICAgLyog TW92ZWQgdGhlIGZpeHVwcyBvZiBEYXRlIGhlYWRlcnMgYW5kIHRob3NlIGFm ZmVjdGVkIGJ5DQorICAgICAgICAgKiBQcm94eVBhc3NSZXZlcnNlL2V0YyBm cm9tIGhlcmUgdG8gYXBfcHJveHlfcmVhZF9oZWFkZXJzDQogICAgICAgICAg Ki8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjb25zdCBjaGFyICpidWY7 DQotICAgICAgICAgICAgaWYgKChidWYgPSBhcHJfdGFibGVfZ2V0KHItPmhl YWRlcnNfb3V0LCAiTG9jYXRpb24iKSkgIT0gTlVMTCkgew0KLSAgICAgICAg ICAgICAgICBhcHJfdGFibGVfc2V0KHItPmhlYWRlcnNfb3V0LCAiTG9jYXRp b24iLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwX3Byb3h5 X2xvY2F0aW9uX3JldmVyc2VfbWFwKHIsIGNvbmYsIGJ1ZikpOw0KLSAgICAg ICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoKGJ1ZiA9IGFwcl90YWJsZV9n ZXQoci0+aGVhZGVyc19vdXQsICJDb250ZW50LUxvY2F0aW9uIikpICE9IE5V TEwpIHsNCi0gICAgICAgICAgICAgICAgYXByX3RhYmxlX3NldChyLT5oZWFk ZXJzX291dCwgIkNvbnRlbnQtTG9jYXRpb24iLA0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwX3Byb3h5X2xvY2F0aW9uX3JldmVyc2VfbWFw KHIsIGNvbmYsIGJ1ZikpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAg ICBpZiAoKGJ1ZiA9IGFwcl90YWJsZV9nZXQoci0+aGVhZGVyc19vdXQsICJV UkkiKSkgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBhcHJfdGFibGVf c2V0KHItPmhlYWRlcnNfb3V0LCAiVVJJIiwNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcF9wcm94eV9sb2NhdGlvbl9yZXZlcnNlX21hcChy LCBjb25mLCBidWYpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQog DQogICAgICAgICBpZiAoKHItPnN0YXR1cyA9PSA0MDEpICYmIChjb25mLT5l cnJvcl9vdmVycmlkZSAhPSAwKSkgew0KICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmJ1ZjsNCmRpZmYgLXUgcHJveHktb2xkL3Byb3h5X3V0aWwuYyBwcm94 eS9wcm94eV91dGlsLmMNCi0tLSBwcm94eS1vbGQvcHJveHlfdXRpbC5jCTIw MDQtMDUtMTkgMTQ6MzA6MTQuMDAwMDAwMDAwICswMTAwDQorKysgcHJveHkv cHJveHlfdXRpbC5jCTIwMDQtMDYtMjYgMDc6MDg6MDkuMDAwMDAwMDAwICsw MTAwDQpAQCAtMzUyLDExMiArMzUyLDYgQEANCiAgICAgcmV0dXJuIHJwOw0K IH0NCiANCi0vKg0KLSAqIFJlYWRzIGhlYWRlcnMgZnJvbSBhIGJ1ZmZlciBh bmQgcmV0dXJucyBhbiBhcnJheSBvZiBoZWFkZXJzLg0KLSAqIFJldHVybnMg TlVMTCBvbiBmaWxlIGVycm9yDQotICogVGhpcyByb3V0aW5lIHRyaWVzIHRv IGRlYWwgd2l0aCB0b28gbG9uZyBsaW5lcyBhbmQgY29udGludWF0aW9uIGxp bmVzLg0KLSAqDQotICogTm90ZTogQ3VycmVudGx5IHRoZSBoZWFkZXJzIGFy ZSBwYXNzZWQgdGhyb3VnaCB1bm1lcmdlZC4gVGhpcyBoYXMgdG8gYmUNCi0g KiBkb25lIHNvIHRoYXQgaGVhZGVycyB3aGljaCByZWFjdCBiYWRseSB0byBt ZXJnaW5nIChzdWNoIGFzIFNldC1Db29raWUNCi0gKiBoZWFkZXJzLCB3aGlj aCBjb250YWluIGNvbW1hcyB3aXRoaW4gdGhlIGRhdGUgZmllbGQpIGRvIG5v dCBnZXQgc3R1ZmZlZA0KLSAqIHVwLg0KLSAqLw0KLVBST1hZX0RFQ0xBUkUo YXByX3RhYmxlX3QgKilhcF9wcm94eV9yZWFkX2hlYWRlcnMocmVxdWVzdF9y ZWMgKnIsIHJlcXVlc3RfcmVjICpyciwgY2hhciAqYnVmZmVyLCBpbnQgc2l6 ZSwgY29ubl9yZWMgKmMpDQotew0KLSAgICBhcHJfdGFibGVfdCAqaGVhZGVy c19vdXQ7DQotICAgIGludCBsZW47DQotICAgIGNoYXIgKnZhbHVlLCAqZW5k Ow0KLSAgICBjaGFyIGZpZWxkW01BWF9TVFJJTkdfTEVOXTsNCi0gICAgaW50 IHNhd19oZWFkZXJzID0gMDsNCi0gICAgdm9pZCAqc2NvbmYgPSByLT5zZXJ2 ZXItPm1vZHVsZV9jb25maWc7DQotICAgIHByb3h5X3NlcnZlcl9jb25mICpw c2M7DQotDQotICAgIHBzYyA9IChwcm94eV9zZXJ2ZXJfY29uZiAqKSBhcF9n ZXRfbW9kdWxlX2NvbmZpZyhzY29uZiwgJnByb3h5X21vZHVsZSk7DQotDQot ICAgIGhlYWRlcnNfb3V0ID0gYXByX3RhYmxlX21ha2Uoci0+cG9vbCwgMjAp Ow0KLQ0KLSAgICAvKg0KLSAgICAgKiBSZWFkIGhlYWRlciBsaW5lcyB1bnRp bCB3ZSBnZXQgdGhlIGVtcHR5IHNlcGFyYXRvciBsaW5lLCBhIHJlYWQgZXJy b3IsDQotICAgICAqIHRoZSBjb25uZWN0aW9uIGNsb3NlcyAoRU9GKSwgb3Ig d2UgdGltZW91dC4NCi0gICAgICovDQotICAgIHdoaWxlICgobGVuID0gYXBf Z2V0bGluZShidWZmZXIsIHNpemUsIHJyLCAxKSkgPiAwKSB7DQotDQotCWlm ICghKHZhbHVlID0gc3RyY2hyKGJ1ZmZlciwgJzonKSkpIHsgICAgIC8qIEZp bmQgdGhlIGNvbG9uIHNlcGFyYXRvciAqLw0KLQ0KLQkgICAgLyogV2UgbWF5 IGVuY291bnRlciBpbnZhbGlkIGhlYWRlcnMsIHVzdWFsbHkgZnJvbSBidWdn eQ0KLQkgICAgICogTVMgSUlTIHNlcnZlcnMsIHNvIHdlIG5lZWQgdG8gZGV0 ZXJtaW5lIGp1c3QgaG93IHRvIGhhbmRsZQ0KLQkgICAgICogdGhlbS4gV2Ug Y2FuIGVpdGhlciBpZ25vcmUgdGhlbSwgYXNzdW1lIHRoYXQgdGhleSBtYXJr IHRoZQ0KLQkgICAgICogc3RhcnQtb2YtYm9keSAoZWc6IGEgbWlzc2luZyBD UkxGKSBvciAodGhlIGRlZmF1bHQpIG1hcmsNCi0JICAgICAqIHRoZSBoZWFk ZXJzIGFzIHRvdGFsbHkgYm9ndXMgYW5kIHJldHVybiBhIDUwMC4gVGhlIHNv bGUNCi0JICAgICAqIGV4Y2VwdGlvbiBpcyBhbiBleHRyYSAiSFRUUC8xLjAg MjAwLCBPSyIgbGluZSBzcHJpbmtsZWQNCi0JICAgICAqIGluIGJldHdlZW4g dGhlIHVzdWFsIE1JTUUgaGVhZGVycywgd2hpY2ggaXMgYSBmYXZvcml0ZQ0K LQkgICAgICogSUlTIGJ1Zy4NCi0JICAgICAqLw0KLQkgICAgIC8qIFhYWDog VGhlIG1hc2sgY2hlY2sgaXMgYnVnZ3kgaWYgd2UgZXZlciBzZWUgYW4gSFRU UC8xLjEwICovDQotDQotCSAgICBpZiAoIWFwcl9kYXRlX2NoZWNrbWFzayhi dWZmZXIsICJIVFRQLyMuIyAjIyMqIikpIHsNCi0JCWlmIChwc2MtPmJhZG9w dCA9PSBiYWRfZXJyb3IpIHsNCi0JCSAgICAvKiBOb3BlLCBpdCB3YXNuJ3Qg ZXZlbiBhbiBleHRyYSBIVFRQIGhlYWRlci4gR2l2ZSB1cC4gKi8NCi0JCSAg ICByZXR1cm4gTlVMTDsNCi0JCX0NCi0JCWVsc2UgaWYgKHBzYy0+YmFkb3B0 ID09IGJhZF9ib2R5KSB7DQotCQkgICAgLyogaWYgd2UndmUgYWxyZWFkeSBz dGFydGVkIGxvYWRpbmcgaGVhZGVyc19vdXQsIHRoZW4NCi0JCSAgICAgKiBy ZXR1cm4gd2hhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBzbyBmYXIsIGluIHRoZSBo b3Blcw0KLQkJICAgICAqIHRoYXQgdGhleSBhcmUgdXNlZnVsLiBPdGhlcndp c2UsIHdlIGNvbXBsZXRlbHkgYmFpbC4NCi0JCSAgICAgKi8NCi0JCSAgICAv KiBGSVhNRTogV2UndmUgYWxyZWFkeSBzY2FyZmVkIHRoZSBzdXBwb3NlZCAx c3QgbGluZSBvZg0KLQkJICAgICAqIHRoZSBib2R5LCBzbyB0aGUgYWN0dWFs IGNvbnRlbnQgbWF5IGVuZCB1cCBiZWluZyBib2d1cw0KLQkJICAgICAqIGFz IHdlbGwuIElmIHRoZSBjb250ZW50IGlzIEhUTUwsIHdlIG1heSBiZSBsdWNr eS4NCi0JCSAgICAgKi8NCi0JCSAgICBpZiAoc2F3X2hlYWRlcnMpIHsNCi0J CQlhcF9sb2dfZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfV0FSTklORywgMCwg ci0+c2VydmVyLA0KLQkJCSAicHJveHk6IFN0YXJ0aW5nIGJvZHkgZHVlIHRv IGJvZ3VzIG5vbi1oZWFkZXIgaW4gaGVhZGVycyAiDQotCQkJICJyZXR1cm5l ZCBieSAlcyAoJXMpIiwgci0+dXJpLCByLT5tZXRob2QpOw0KLQkJCXJldHVy biBoZWFkZXJzX291dDsNCi0JCSAgICB9IGVsc2Ugew0KLQkJCSBhcF9sb2df ZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfV0FSTklORywgMCwgci0+c2VydmVy LA0KLQkJCSAicHJveHk6IE5vIEhUVFAgaGVhZGVycyAiDQotCQkJICJyZXR1 cm5lZCBieSAlcyAoJXMpIiwgci0+dXJpLCByLT5tZXRob2QpOw0KLQkJCXJl dHVybiBOVUxMOw0KLQkJICAgIH0NCi0JCX0NCi0JICAgIH0NCi0JICAgIC8q IHRoaXMgaXMgdGhlIHBzYy0+YmFkb3B0ID09IGJhZF9pZ25vcmUgY2FzZSAq Lw0KLQkgICAgYXBfbG9nX2Vycm9yKEFQTE9HX01BUkssIEFQTE9HX1dBUk5J TkcsIDAsIHItPnNlcnZlciwNCi0JCQkgInByb3h5OiBJZ25vcmluZyBib2d1 cyBIVFRQIGhlYWRlciAiDQotCQkJICJyZXR1cm5lZCBieSAlcyAoJXMpIiwg ci0+dXJpLCByLT5tZXRob2QpOw0KLQkgICAgY29udGludWU7DQotCX0NCi0N Ci0gICAgICAgICp2YWx1ZSA9ICdcMCc7DQotICAgICAgICArK3ZhbHVlOw0K LQkvKiBYWFg6IFJGQzIwNjggZGVmaW5lcyBvbmx5IFNQIGFuZCBIVCBhcyB3 aGl0ZXNwYWNlLCB0aGlzIHRlc3QgaXMNCi0JICogd3JvbmcuLi4gYW5kIHNv IGFyZSBtYW55IG90aGVycyBwcm9iYWJseS4NCi0JICovDQotICAgICAgICB3 aGlsZSAoYXByX2lzc3BhY2UoKnZhbHVlKSkNCi0gICAgICAgICAgICArK3Zh bHVlOyAgICAgICAgICAgIC8qIFNraXAgdG8gc3RhcnQgb2YgdmFsdWUgICAq Lw0KLQ0KLQkvKiBzaG91bGQgc3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSBh cyB3ZWxsICovDQotCWZvciAoZW5kID0gJnZhbHVlW3N0cmxlbih2YWx1ZSkt MV07IGVuZCA+IHZhbHVlICYmIGFwcl9pc3NwYWNlKCplbmQpOyAtLWVuZCkN Ci0JICAgICplbmQgPSAnXDAnOw0KLQ0KLSAgICAgICAgLyogbWFrZSBzdXJl IHdlIGFkZCBzbyBhcyBub3QgdG8gZGVzdHJveSBkdXBsaWNhdGVkIGhlYWRl cnMgKi8NCi0gICAgICAgIGFwcl90YWJsZV9hZGQoaGVhZGVyc19vdXQsIGJ1 ZmZlciwgdmFsdWUpOw0KLSAgICAgICAgc2F3X2hlYWRlcnMgPSAxOw0KLQ0K LQkvKiB0aGUgaGVhZGVyIHdhcyB0b28gbG9uZzsgYXQgdGhlIGxlYXN0IHdl IHNob3VsZCBza2lwIGV4dHJhIGRhdGEgKi8NCi0JaWYgKGxlbiA+PSBzaXpl IC0gMSkgeyANCi0JICAgIHdoaWxlICgobGVuID0gYXBfZ2V0bGluZShmaWVs ZCwgTUFYX1NUUklOR19MRU4sIHJyLCAxKSkNCi0JCSAgICA+PSBNQVhfU1RS SU5HX0xFTiAtIDEpIHsNCi0JCS8qIHNvYWsgdXAgdGhlIGV4dHJhIGRhdGEg Ki8NCi0JICAgIH0NCi0JICAgIGlmIChsZW4gPT0gMCkgLyogdGltZSB0byBl eGl0IHRoZSBsYXJnZXIgbG9vcCBhcyB3ZWxsICovDQotCQlicmVhazsNCi0J fQ0KLSAgICB9DQotICAgIHJldHVybiBoZWFkZXJzX291dDsNCi19DQotDQog DQogLyoNCiAgKiBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg Y2FzZS1pbnNlbnNpdGl2ZSB0b2tlbnMsIHdpdGgNCg== ---1463810294-1627417438-1088232129=:26894--