Bug 688749 silent/unattended uninstaller
"Russell Lang" <[email protected]> Sat, 09 Dec 2006 19:07:16 +1100
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Message-ID | <[email protected]> |
--Message-Boundary-17608 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body This has been committed. Fix bug 688749 silent/unattended uninstaller. Add silent uninstall option to MS-Windows ghostscript uninstaller. Reformatted part of the code to make it match the GSview uninstaller, on which it was based. For a silent uninstall, use uninstgs.exe "path\to\uninstal.txt" -q Russell Lang [email protected] Ghostgum Software Pty Ltd http://www.ghostgum.com.au/ --Message-Boundary-17608 Content-type: Application/Octet-stream; name="win_silent_uninst.txt"; type=Text Content-disposition: attachment; filename="win_silent_uninst.txt" Content-transfer-encoding: BASE64 LS0tIGw6c3JjL2R3dW5pbnN0LmNwcAlGcmkgRGVjIDA4IDIxOjQ3OjEwIDIwMDYNCisrKyBz cmMvZHd1bmluc3QuY3BwCVNhdCBEZWMgMDkgMDU6NTM6MzUgMjAwNg0KQEAgLTExLDcgKzEx LDcgQEANCiAgICBTYW4gUmFmYWVsLCBDQSAgOTQ5MDMsIFUuUy5BLiwgKzEoNDE1KTQ5Mi05 ODYxLCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4NCiAqLw0KIA0KLS8vICRJZDogZHd1bmlu c3QuY3BwIDc0NzIgMjAwNi0xMi0wOCAyMTo0NzowMVogZ2hvc3RndW0gJA0KKy8vICRJZDog ZHd1bmluc3QuY3BwIDY2NTEgMjAwNi0wMy0xMyAxNjoxODoxOVogc3RlZmFuICQNCiANCiAj ZGVmaW5lIFNUUklDVA0KICNpbmNsdWRlIDx3aW5kb3dzLmg+DQpAQCAtMjEsNiArMjEsNyBA QA0KICNpbmNsdWRlIDxzdGRpby5oPg0KICNpbmNsdWRlIDxzdHJpbmcuaD4NCiAjaW5jbHVk ZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPGN0eXBlLmg+DQogI2luY2x1ZGUgPGRpcmVjdC5o Pg0KICNpbmNsdWRlICJkd3VuaW5zdC5oIg0KIA0KQEAgLTM1LDEzICszNiw2IEBADQogI2Rl ZmluZSBNQVhTVFIgMjU2DQogI2RlZmluZSBVTklOU1RBTExLRVkgVEVYVCgiU09GVFdBUkVc XE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXFVuaW5zdGFsbCIpDQogDQot I2lmZGVmIF9XSU42NA0KLSNkZWZpbmUgRExHUkVUVVJOIElOVF9QVFINCi0jZWxzZQ0KLSNk ZWZpbmUgRExHUkVUVVJOIEJPT0wNCi0jZW5kaWYNCi0NCi0NCiBIV05EIGhEbGdNb2RlbGVz czsNCiBIV05EIGhUZXh0MTsNCiBIV05EIGhUZXh0MjsNCkBAIC01Miw2ICs0Niw3IEBADQog Y2hhciBzelNlY3Rpb25bXSA9ICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyI7 DQogQk9PTCBiUXVpdCA9IEZBTFNFOw0KIEJPT0wgZ0Vycm9yID0gRkFMU0U7CS8vIHNldCBU UlVFIGlmIGFuIHVuaW5zdGFsbCB3YXMgbm90IHN1Y2Nlc3NmdWwgDQorQk9PTCBiU2lsZW50 ID0gRkFMU0U7DQogDQogY2hhciBzelRpdGxlW01BWFNUUl07DQogY2hhciBzekxvZ0ZpbGVb TUFYU1RSXTsNCkBAIC02Niw5ICs2MSwyMSBAQA0KIEJPT0wgc2hlbGxfb2xkKHZvaWQpOw0K IEJPT0wgZG9FT0Yodm9pZCk7DQogDQorI2lmZGVmIF9XSU42NA0KKyNkZWZpbmUgRExHUkVU VVJOIElOVF9QVFINCisjZWxzZQ0KKyNkZWZpbmUgRExHUkVUVVJOIEJPT0wNCisjZW5kaWYN CisNCiAvLyAjZGVmaW5lIGdzX2FkZG1lc3Moc3RyKSBmcHV0cyhzdHIsIHN0ZG91dCkJLy8g Zm9yIGRlYnVnIA0KICNkZWZpbmUgZ3NfYWRkbWVzcyhzdHIpDQogDQoraW50IG1lc3NhZ2Vf Ym94KExQQ1RTVFIgbWVzc2FnZSwgTFBDVFNUUiB0aXRsZSwgaW50IG5UeXBlKQ0KK3sNCisg ICAgaWYgKGJTaWxlbnQpDQorCXJldHVybiAwOw0KKyAgICByZXR1cm4gTWVzc2FnZUJveChI V05EX0RFU0tUT1AsIG1lc3NhZ2UsIHRpdGxlLCBuVHlwZSk7DQorfQ0KIA0KIC8vIGxpbmtl ZCBsaXN0IGZvciBkZWxldGluZyByZWdpc3RyeSBlbnRyaWVzIGluIHJldmVyc2Ugb3JkZXIN CiB0eXBlZGVmIHN0cnVjdCB0YWdLRVkgew0KQEAgLTEyMyw3ICsxMzAsOCBAQA0KIAl9DQog CWVsc2UgaWYgKHN0cmNtcChzekxpbmUsICJGaWxlTmV3Iik9PTApIHsNCiAJCVNldFdpbmRv d1RleHQoaFRleHQxLCAiUmVtb3ZpbmcgRmlsZXMiKTsNCi0JCVNsZWVwKERFTEFZX1NURVAp Ow0KKwkJaWYgKCFiU2lsZW50KQ0KKwkJICAgIFNsZWVwKERFTEFZX1NURVApOw0KIAkJaWYg KCFkb2ZpbGVzKCkpDQogCQkJcmV0dXJuIEZBTFNFOw0KIAkJU2V0V2luZG93VGV4dChoVGV4 dDEsICIiKTsNCkBAIC0xMzEsNyArMTM5LDggQEANCiAJfQ0KIAllbHNlIGlmIChzdHJjbXAo c3pMaW5lLCAiUmVnaXN0cnlOZXciKT09MCkgew0KIAkJU2V0V2luZG93VGV4dChoVGV4dDEs ICJSZW1vdmluZyBSZWdpc3RyeSBlbnRyaWVzIik7DQotCQlTbGVlcChERUxBWV9TVEVQKTsN CisJCWlmICghYlNpbGVudCkNCisJCSAgICBTbGVlcChERUxBWV9TVEVQKTsNCiAJCWlmICgh cmVnaXN0cnlfZGVsZXRlKCkpDQogCQkJcmV0dXJuIEZBTFNFOw0KIAkJU2V0V2luZG93VGV4 dChoVGV4dDEsICIiKTsNCkBAIC0xMzksNyArMTQ4LDggQEANCiAJfQ0KIAllbHNlIGlmIChz dHJjbXAoc3pMaW5lLCAiUmVnaXN0cnlPbGQiKT09MCkgew0KIAkJU2V0V2luZG93VGV4dCho VGV4dDEsICJSZXN0b3JpbmcgUmVnaXN0cnkgZW50cmllcyIpOw0KLQkJU2xlZXAoREVMQVlf U1RFUCk7DQorCQlpZiAoIWJTaWxlbnQpDQorCQkgICAgU2xlZXAoREVMQVlfU1RFUCk7DQog CQlpZiAoIXJlZ2lzdHJ5X2ltcG9ydCgpKQ0KIAkJCXJldHVybiBGQUxTRTsNCiAJCVNldFdp bmRvd1RleHQoaFRleHQxLCAiIik7DQpAQCAtMTQ3LDcgKzE1Nyw4IEBADQogCX0NCiAJZWxz ZSBpZiAoc3RyY21wKHN6TGluZSwgIlNoZWxsTmV3Iik9PTApIHsNCiAJCVNldFdpbmRvd1Rl eHQoaFRleHQxLCAiUmVtb3ZpbmcgU3RhcnQgTWVudSBpdGVtcyIpOw0KLQkJU2xlZXAoREVM QVlfU1RFUCk7DQorCQlpZiAoIWJTaWxlbnQpDQorCQkgICAgU2xlZXAoREVMQVlfU1RFUCk7 DQogCQlpZiAoIXNoZWxsX25ldygpKQ0KIAkJCXJldHVybiBGQUxTRTsNCiAJCVNldFdpbmRv d1RleHQoaFRleHQxLCAiIik7DQpAQCAtMTU1LDcgKzE2Niw4IEBADQogCX0NCiAJZWxzZSBp ZiAoc3RyY21wKHN6TGluZSwgIlNoZWxsT2xkIik9PTApIHsNCiAJCVNldFdpbmRvd1RleHQo aFRleHQxLCAiUmVzdG9yaW5nIFN0YXJ0IE1lbnUgaXRlbXMiKTsNCi0JCVNsZWVwKERFTEFZ X1NURVApOw0KKwkJaWYgKCFiU2lsZW50KQ0KKwkJICAgIFNsZWVwKERFTEFZX1NURVApOw0K IAkJaWYgKCFzaGVsbF9vbGQoKSkNCiAJCQlyZXR1cm4gRkFMU0U7DQogCQlTZXRXaW5kb3dU ZXh0KGhUZXh0MSwgIiIpOw0KQEAgLTE3OCw3ICsxOTAsOCBAQA0KIAl9DQogCWlmIChzekxp bmVbMF0gIT0gJ1wwJykgew0KIAkgICAgU2V0V2luZG93VGV4dChoVGV4dDIsIHN6TGluZSk7 DQotCSAgICBTbGVlcChERUxBWV9GSUxFKTsNCisJICAgIGlmICghYlNpbGVudCkNCisJCVNs ZWVwKERFTEFZX0ZJTEUpOw0KIAkgICAgZ3NfYWRkbWVzcygiRGVsZXRpbmcgRmlsZTogIik7 DQogCSAgICBnc19hZGRtZXNzKHN6TGluZSk7DQogCSAgICBnc19hZGRtZXNzKCJcbiIpOw0K QEAgLTI1NiwxMSArMjY5LDM2IEBADQogCSAgICBnc19hZGRtZXNzKCJcbiIpOw0KIAl9DQog ICAgIH0NCisNCisgICAgLy8gRmluZCBvdXQgaWYga2V5IGhhcyBzdWJrZXlzIG9yIHZhbHVl cw0KKyAgICBUQ0hBUiBzekNsYXNzW01BWFNUUl07DQorICAgIERXT1JEIGNjaENsYXNzOw0K KyAgICBEV09SRCBjU3ViS2V5czsNCisgICAgRFdPUkQgY2NoTWF4U3ViS2V5Ow0KKyAgICBE V09SRCBjY2hNYXhDbGFzczsNCisgICAgRFdPUkQgY1ZhbHVlczsNCisgICAgRFdPUkQgY2No TWF4VmFsdWVOYW1lOw0KKyAgICBEV09SRCBjYk1heFZhbHVlRGF0YTsNCisgICAgRFdPUkQg Y2JTZWN1cml0eURlc2NyaXB0b3I7DQorICAgIEZJTEVUSU1FIGZ0TGFzdFdyaXRlVGltZTsN CisgICAgY2NoQ2xhc3MgPSBzaXplb2Yoc3pDbGFzcykgLyBzaXplb2YoVENIQVIpOw0KKyAg ICBjU3ViS2V5cyA9IDA7DQorICAgIGNWYWx1ZXMgPSAwOw0KKyAgICBSZWdRdWVyeUluZm9L ZXkoaGtleSwgc3pDbGFzcywgJmNjaENsYXNzLCBOVUxMLA0KKyAgICAJJmNTdWJLZXlzLCAm Y2NoTWF4U3ViS2V5LCAmY2NoTWF4Q2xhc3MsIA0KKyAgICAJJmNWYWx1ZXMsICZjY2hNYXhW YWx1ZU5hbWUsICZjYk1heFZhbHVlRGF0YSwNCisgICAgCSZjYlNlY3VyaXR5RGVzY3JpcHRv ciwgJmZ0TGFzdFdyaXRlVGltZSk7DQorDQogICAgIC8vIGNsb3NlIGtleQ0KICAgICBpZiAo aGtleSAhPSBIS0VZX0NMQVNTRVNfUk9PVCkNCiAJUmVnQ2xvc2VLZXkoaGtleSk7DQogICAg IC8vIGRlbGV0ZSB0aGUga2V5DQotICAgIGlmIChzdHJsZW4oa2V5bmFtZSkpIHsNCisgICAg aWYgKChjU3ViS2V5cyAhPSAwKSB8fCAoY1ZhbHVlcyAhPSAwKSkgew0KKyAgICAJZ3NfYWRk bWVzcygiTm90IGRlbGV0aW5nIG5vbiBlbXB0eSByZWdpc3RyeSBrZXlcbiAgICIpOw0KKwln c19hZGRtZXNzKGtleW5hbWUpOw0KKwlnc19hZGRtZXNzKCJcbiIpOw0KKyAgICB9DQorICAg IGVsc2UgaWYgKHN0cmxlbihrZXluYW1lKSkgew0KIAlnc19hZGRtZXNzKCJEZWxldGluZyBy ZWdpc3RyeSBrZXlcbiAgICIpOw0KIAlnc19hZGRtZXNzKGtleW5hbWUpOw0KIAlnc19hZGRt ZXNzKCJcbiIpOw0KQEAgLTI3NCwzMyArMzEyLDMyIEBADQogQk9PTA0KIHJlZ2lzdHJ5X2Rl bGV0ZSgpDQogew0KLQlsb25nIGxvZ2luZGV4Ow0KLQlLRVkgKmtleTsNCisgICAgbG9uZyBs b2dpbmRleDsNCisgICAgS0VZICprZXk7DQogCQ0KICAgICAvLyBzY2FuIGxvZyBmaWxlDQog ICAgIC8vIHNvIHdlIGNhbiByZW1vdmUga2V5cyBpbiByZXZlcnNlIG9yZGVyDQogICAgIGxv Z2luZGV4ID0gMDsNCiAgICAgd2hpbGUgKEdldExpbmUoKSAmJiAhSXNTZWN0aW9uKCkpIHsN Ci0JCUtFWSAqa2V5Ow0KLQkJaWYgKHN6TGluZVswXSA9PSAnWycpIHsNCi0JCQlpZiAoKGtl eSA9IChLRVkgKiltYWxsb2Moc2l6ZW9mKEtFWSkpKQ0KLQkJCQkhPSAoS0VZICopTlVMTCkg ew0KLQkJCQlrZXktPnByZXZpb3VzID0gbGFzdF9rZXk7DQotCQkJCWtleS0+aW5kZXggPSBs b2dpbmRleDsNCi0JCQkJbGFzdF9rZXkgPSBrZXk7DQotCQkJfQ0KKwlLRVkgKmtleTsNCisJ aWYgKHN6TGluZVswXSA9PSAnWycpIHsNCisJCWlmICgoa2V5ID0gKEtFWSAqKW1hbGxvYyhz aXplb2YoS0VZKSkpDQorCQkJIT0gKEtFWSAqKU5VTEwpIHsNCisJCQlrZXktPnByZXZpb3Vz ID0gbGFzdF9rZXk7DQorCQkJa2V5LT5pbmRleCA9IGxvZ2luZGV4Ow0KKwkJCWxhc3Rfa2V5 ID0ga2V5Ow0KIAkJfQ0KLQkJbG9naW5kZXggPSBmdGVsbChmTG9nKTsNCisJfQ0KKwlsb2dp bmRleCA9IGZ0ZWxsKGZMb2cpOw0KICAgICB9DQogCQ0KICAgICAvLyBSZW1vdmUga2V5cw0K LSAgICBmb3IgKGtleSA9IGxhc3Rfa2V5OyBrZXkgIT0gTlVMTDsgDQotCWtleSA9IGtleS0+ cHJldmlvdXMpIHsNCi0JCWlmIChrZXkgIT0gbGFzdF9rZXkpDQotCQkJZnJlZShsYXN0X2tl eSk7DQotCQlmc2VlayhmTG9nLCBrZXktPmluZGV4LCBTRUVLX1NFVCk7DQotCQlyZWdpc3Ry eV9kZWxldGVfa2V5KCk7DQotCQlsYXN0X2tleSA9IGtleTsNCisgICAgZm9yIChrZXkgPSBs YXN0X2tleTsga2V5ICE9IE5VTEw7IGtleSA9IGtleS0+cHJldmlvdXMpIHsNCisJaWYgKGtl eSAhPSBsYXN0X2tleSkNCisJCWZyZWUobGFzdF9rZXkpOw0KKwlmc2VlayhmTG9nLCBrZXkt PmluZGV4LCBTRUVLX1NFVCk7DQorCXJlZ2lzdHJ5X2RlbGV0ZV9rZXkoKTsNCisJbGFzdF9r ZXkgPSBrZXk7DQogICAgIH0NCiAgICAgZnJlZShsYXN0X2tleSk7DQogCQ0KQEAgLTM0OSw4 NCArMzg2LDg0IEBADQogQk9PTA0KIHJlZ2lzdHJ5X2ltcG9ydCgpDQogew0KLQlIS0VZIGhr ZXkgPSBIS0VZX0NMQVNTRVNfUk9PVDsNCi0JSEtFWSBocmtleTsNCi0JY2hhciAqcmtleSwg KnNrZXk7DQotCWNoYXIgKnZhbHVlOw0KLQljaGFyICpuYW1lOw0KLQlEV09SRCBkd1Jlc3Vs dDsNCisgICAgSEtFWSBoa2V5ID0gSEtFWV9DTEFTU0VTX1JPT1Q7DQorICAgIEhLRVkgaHJr ZXk7DQorICAgIGNoYXIgKnJrZXksICpza2V5Ow0KKyAgICBjaGFyICp2YWx1ZTsNCisgICAg Y2hhciAqbmFtZTsNCisgICAgRFdPUkQgZHdSZXN1bHQ7DQogICAgIEdldExpbmUoKTsNCiAg ICAgaWYgKHN0cm5jbXAoc3pMaW5lLCAiUkVHRURJVDQiLCA4KSAhPSAwKQ0KLQkJcmV0dXJu IEZBTFNFOw0KKwlyZXR1cm4gRkFMU0U7DQogCQ0KICAgICB3aGlsZSAoR2V0TGluZSgpKSB7 DQotCQlpZiAoSXNTZWN0aW9uKCkpDQotCQkJYnJlYWs7DQotCQlpZiAoKHN6TGluZVswXSA9 PSAnXDAnKSB8fCAoc3pMaW5lWzBdID09ICdccicpIHx8IChzekxpbmVbMF0gPT0gJ1xuJykp DQotCQkJY29udGludWU7DQotCQlpZiAoc3pMaW5lWzBdID09ICdbJykgew0KLQkJCS8vIGtl eSBuYW1lDQotCQkJaWYgKGhrZXkgIT0gSEtFWV9DTEFTU0VTX1JPT1QpIHsNCi0JCQkJUmVn Q2xvc2VLZXkoaGtleSk7DQotCQkJCWhrZXkgPSBIS0VZX0NMQVNTRVNfUk9PVDsNCi0JCQl9 DQotCQkJcmtleSA9IHN0cnRvayhzekxpbmUrMSwgIlxcXVxuXHIiKTsNCi0JCQlpZiAocmtl eSA9PSAoY2hhciAqKU5VTEwpDQotCQkJCXJldHVybiBGQUxTRTsNCi0JCQlza2V5ID0gc3Ry dG9rKE5VTEwsICJdXG5cciIpOw0KLQkJCWlmIChzdHJjbXAocmtleSwgIkhLRVlfQ0xBU1NF U19ST09UIik9PTApDQotCQkJCWhya2V5ID0gSEtFWV9DTEFTU0VTX1JPT1Q7DQotCQkJZWxz ZSBpZiAoc3RyY21wKHJrZXksICJIS0VZX0NVUlJFTlRfVVNFUiIpPT0wKQ0KLQkJCQlocmtl eSA9IEhLRVlfQ1VSUkVOVF9VU0VSOw0KLQkJCWVsc2UgaWYgKHN0cmNtcChya2V5LCAiSEtF WV9MT0NBTF9NQUNISU5FIik9PTApDQotCQkJCWhya2V5ID0gSEtFWV9MT0NBTF9NQUNISU5F Ow0KLQkJCWVsc2UgaWYgKHN0cmNtcChya2V5LCAiSEtFWV9VU0VSUyIpPT0wKQ0KLQkJCQlo cmtleSA9IEhLRVlfVVNFUlM7DQotCQkJZWxzZQ0KLQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJ aWYgKHNrZXkgPT0gKGNoYXIgKilOVUxMKQ0KLQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJZ3Nf YWRkbWVzcygiQ3JlYXRpbmcgcmVnaXN0cnkga2V5XG4gICAiKTsNCi0JCQlnc19hZGRtZXNz KHJrZXkpOw0KLQkJCWdzX2FkZG1lc3MoIlxcIik7DQotCQkJZ3NfYWRkbWVzcygic2tleSIp Ow0KLQkJCWdzX2FkZG1lc3MoIlxuIik7DQotCQkJaWYgKFJlZ0NyZWF0ZUtleUV4KGhya2V5 LCBza2V5LCAwLCAiIiwgMCwgS0VZX0FMTF9BQ0NFU1MsIA0KLQkJCQlOVUxMLCAmaGtleSwg JmR3UmVzdWx0KQ0KLQkJCQkhPSBFUlJPUl9TVUNDRVNTKQ0KLQkJCQlyZXR1cm4gRkFMU0U7 DQotCQl9DQotCQllbHNlIGlmIChzekxpbmVbMF0gPT0gJ0AnKSB7DQotCQkJLy8gZGVmYXVs dCB2YWx1ZQ0KLQkJCWlmIChzdHJsZW4oc3pMaW5lKSA8IDQpDQotCQkJCXJldHVybiBGQUxT RTsNCi0JCQl2YWx1ZSA9IHN0cnRvayhzekxpbmUrMywgIlwwNDJcclxuIik7DQotCQkJaWYg KHZhbHVlKSB7DQotCQkJCXJlZ2lzdHJ5X3VucXVvdGUodmFsdWUpOw0KLQkJCQlnc19hZGRt ZXNzKCJTZXR0aW5nIHJlZ2lzdHJ5IGtleSB2YWx1ZVxuICAgIik7DQotCQkJCWdzX2FkZG1l c3ModmFsdWUpOw0KLQkJCQlnc19hZGRtZXNzKCJcbiIpOw0KLQkJCQlpZiAoUmVnU2V0VmFs dWVFeChoa2V5LCBOVUxMLCAwLCBSRUdfU1osIA0KLQkJCQkJKENPTlNUIEJZVEUgKil2YWx1 ZSwgc3RybGVuKHZhbHVlKSsxKQ0KLQkJCQkJIT0gRVJST1JfU1VDQ0VTUykNCi0JCQkJCXJl dHVybiBGQUxTRTsNCi0JCQl9DQotCQl9DQotCQllbHNlIGlmIChzekxpbmVbMF0gPT0gJ1ww NDInKSB7DQotCQkJLy8gbmFtZWQgdmFsdWUNCi0JCQluYW1lID0gc3RydG9rKHN6TGluZSsx LCAiXDA0MlxyXG4iKTsNCi0JCQlzdHJ0b2soTlVMTCwgIlwwNDJcclxuIik7DQotCQkJdmFs dWUgPSBzdHJ0b2soTlVMTCwgIlwwNDJcclxuIik7DQotCQkJcmVnaXN0cnlfdW5xdW90ZSh2 YWx1ZSk7DQotCQkJZ3NfYWRkbWVzcygiU2V0dGluZyByZWdpc3RyeSBrZXkgdmFsdWVcbiAg ICIpOw0KLQkJCWdzX2FkZG1lc3MobmFtZSk7DQotCQkJZ3NfYWRkbWVzcygiPSIpOw0KLQkJ CWdzX2FkZG1lc3ModmFsdWUpOw0KLQkJCWdzX2FkZG1lc3MoIlxuIik7DQotCQkJaWYgKFJl Z1NldFZhbHVlRXgoaGtleSwgbmFtZSwgMCwgUkVHX1NaLCAoQ09OU1QgQllURSAqKXZhbHVl LCBzdHJsZW4odmFsdWUpKzEpDQotCQkJCSE9IEVSUk9SX1NVQ0NFU1MpDQotCQkJCXJldHVy biBGQUxTRTsNCi0JCX0NCisJaWYgKElzU2VjdGlvbigpKQ0KKwkgICAgYnJlYWs7DQorCWlm ICgoc3pMaW5lWzBdID09ICdcMCcpIHx8IChzekxpbmVbMF0gPT0gJ1xyJykgfHwgKHN6TGlu ZVswXSA9PSAnXG4nKSkNCisJICAgIGNvbnRpbnVlOw0KKwlpZiAoc3pMaW5lWzBdID09ICdb Jykgew0KKwkgICAgLy8ga2V5IG5hbWUNCisJICAgIGlmIChoa2V5ICE9IEhLRVlfQ0xBU1NF U19ST09UKSB7DQorCQkgICAgUmVnQ2xvc2VLZXkoaGtleSk7DQorCQkgICAgaGtleSA9IEhL RVlfQ0xBU1NFU19ST09UOw0KKwkgICAgfQ0KKwkgICAgcmtleSA9IHN0cnRvayhzekxpbmUr MSwgIlxcXVxuXHIiKTsNCisJICAgIGlmIChya2V5ID09IChjaGFyICopTlVMTCkNCisJCSAg ICByZXR1cm4gRkFMU0U7DQorCSAgICBza2V5ID0gc3RydG9rKE5VTEwsICJdXG5cciIpOw0K KwkgICAgaWYgKHN0cmNtcChya2V5LCAiSEtFWV9DTEFTU0VTX1JPT1QiKT09MCkNCisJCSAg ICBocmtleSA9IEhLRVlfQ0xBU1NFU19ST09UOw0KKwkgICAgZWxzZSBpZiAoc3RyY21wKHJr ZXksICJIS0VZX0NVUlJFTlRfVVNFUiIpPT0wKQ0KKwkJICAgIGhya2V5ID0gSEtFWV9DVVJS RU5UX1VTRVI7DQorCSAgICBlbHNlIGlmIChzdHJjbXAocmtleSwgIkhLRVlfTE9DQUxfTUFD SElORSIpPT0wKQ0KKwkJICAgIGhya2V5ID0gSEtFWV9MT0NBTF9NQUNISU5FOw0KKwkgICAg ZWxzZSBpZiAoc3RyY21wKHJrZXksICJIS0VZX1VTRVJTIik9PTApDQorCQkgICAgaHJrZXkg PSBIS0VZX1VTRVJTOw0KKwkgICAgZWxzZQ0KKwkJICAgIHJldHVybiBGQUxTRTsNCisJICAg IGlmIChza2V5ID09IChjaGFyICopTlVMTCkNCisJCSAgICByZXR1cm4gRkFMU0U7DQorCSAg ICBnc19hZGRtZXNzKCJDcmVhdGluZyByZWdpc3RyeSBrZXlcbiAgICIpOw0KKwkgICAgZ3Nf YWRkbWVzcyhya2V5KTsNCisJICAgIGdzX2FkZG1lc3MoIlxcIik7DQorCSAgICBnc19hZGRt ZXNzKCJza2V5Iik7DQorCSAgICBnc19hZGRtZXNzKCJcbiIpOw0KKwkgICAgaWYgKFJlZ0Ny ZWF0ZUtleUV4KGhya2V5LCBza2V5LCAwLCAiIiwgMCwgS0VZX0FMTF9BQ0NFU1MsIA0KKwkJ ICAgIE5VTEwsICZoa2V5LCAmZHdSZXN1bHQpDQorCQkgICAgIT0gRVJST1JfU1VDQ0VTUykN CisJCSAgICByZXR1cm4gRkFMU0U7DQorCX0NCisJZWxzZSBpZiAoc3pMaW5lWzBdID09ICdA Jykgew0KKwkgICAgLy8gZGVmYXVsdCB2YWx1ZQ0KKwkgICAgaWYgKHN0cmxlbihzekxpbmUp IDwgNCkNCisJCSAgICByZXR1cm4gRkFMU0U7DQorCSAgICB2YWx1ZSA9IHN0cnRvayhzekxp bmUrMywgIlwwNDJcclxuIik7DQorCSAgICBpZiAodmFsdWUpIHsNCisJCSAgICByZWdpc3Ry eV91bnF1b3RlKHZhbHVlKTsNCisJCSAgICBnc19hZGRtZXNzKCJTZXR0aW5nIHJlZ2lzdHJ5 IGtleSB2YWx1ZVxuICAgIik7DQorCQkgICAgZ3NfYWRkbWVzcyh2YWx1ZSk7DQorCQkgICAg Z3NfYWRkbWVzcygiXG4iKTsNCisJCSAgICBpZiAoUmVnU2V0VmFsdWVFeChoa2V5LCBOVUxM LCAwLCBSRUdfU1osIA0KKwkJCSAgICAoQ09OU1QgQllURSAqKXZhbHVlLCBzdHJsZW4odmFs dWUpKzEpDQorCQkJICAgICE9IEVSUk9SX1NVQ0NFU1MpDQorCQkJICAgIHJldHVybiBGQUxT RTsNCisJICAgIH0NCisJfQ0KKwllbHNlIGlmIChzekxpbmVbMF0gPT0gJ1wwNDInKSB7DQor CSAgICAvLyBuYW1lZCB2YWx1ZQ0KKwkgICAgbmFtZSA9IHN0cnRvayhzekxpbmUrMSwgIlww NDJcclxuIik7DQorCSAgICBzdHJ0b2soTlVMTCwgIlwwNDJcclxuIik7DQorCSAgICB2YWx1 ZSA9IHN0cnRvayhOVUxMLCAiXDA0MlxyXG4iKTsNCisJICAgIHJlZ2lzdHJ5X3VucXVvdGUo dmFsdWUpOw0KKwkgICAgZ3NfYWRkbWVzcygiU2V0dGluZyByZWdpc3RyeSBrZXkgdmFsdWVc biAgICIpOw0KKwkgICAgZ3NfYWRkbWVzcyhuYW1lKTsNCisJICAgIGdzX2FkZG1lc3MoIj0i KTsNCisJICAgIGdzX2FkZG1lc3ModmFsdWUpOw0KKwkgICAgZ3NfYWRkbWVzcygiXG4iKTsN CisJICAgIGlmIChSZWdTZXRWYWx1ZUV4KGhrZXksIG5hbWUsIDAsIFJFR19TWiwgKENPTlNU IEJZVEUgKil2YWx1ZSwgDQorCQlzdHJsZW4odmFsdWUpKzEpICE9IEVSUk9SX1NVQ0NFU1Mp DQorCQlyZXR1cm4gRkFMU0U7DQorCX0NCiAgICAgfQ0KICAgICBpZiAoaGtleSAhPSBIS0VZ X0NMQVNTRVNfUk9PVCkNCiAJCVJlZ0Nsb3NlS2V5KGhrZXkpOw0KQEAgLTUwMCwxNzYgKzUz NywxNzYgQEANCiBCT09MIHNoZWxsX25ldyh2b2lkKQ0KIHsNCiANCi0JY2hhciAqcCwgKnE7 DQotCWNoYXIgZ3JvdXBbTUFYU1RSXTsNCi0JLy8gcmVtb3ZlIHNoZWxsIGl0ZW1zIGFkZGVk IGJ5IEdob3N0c2NyaXB0DQotCS8vIFdlIGNhbiBvbmx5IGRlbGV0ZSBvbmUgZ3JvdXAgd2l0 aCB0aGlzIGNvZGUNCi0JZ3JvdXBbMF0gPSAnXDAnOw0KLQl3aGlsZSAoR2V0TGluZSgpKSB7 DQotCQlpZiAoSXNTZWN0aW9uKCkpIHsNCi0JCQlpZiAoc3RybGVuKGdyb3VwKSAhPSAwKSB7 DQotCQkJCWdzX2FkZG1lc3MoIlJlbW92aW5nIHNoZWxsIGZvbGRlclxuICAiKTsNCi0JCQkJ Z3NfYWRkbWVzcyhncm91cCk7DQotCQkJCWdzX2FkZG1lc3MoIlxuIik7DQotCQkJCVJlbW92 ZURpcmVjdG9yeShncm91cCk7DQotCQkJfQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQkJ cCA9IHN0cnRvayhzekxpbmUsICI9Iik7DQotCQlxID0gc3RydG9rKE5VTEwsICIiKTsNCi0J CWlmIChwID09IE5VTEwpIHsNCi0JCQljb250aW51ZTsNCi0JCX0NCi0JCWVsc2UgaWYgKHN0 cmNtcChwLCAiR3JvdXAiKT09MCkgew0KLQkJCWlmIChxKQ0KLQkJCQlzdHJuY3B5KGdyb3Vw LCBxLCBzaXplb2YoZ3JvdXApLTEpOw0KLQkJCS8vIGRlZmVyIHRoaXMgdW50aWwgd2UgaGF2 ZSByZW1vdmUgY29udGVudHMNCi0JCX0NCi0JCWVsc2UgaWYgKHN0cmNtcChwLCAiTmFtZSIp ID09IDApIHsNCi0JCQlpZiAocSkgew0KLQkJCQlnc19hZGRtZXNzKCJSZW1vdmluZyBzaGVs bCBsaW5rXG4gICIpOw0KLQkJCQlnc19hZGRtZXNzKHEpOw0KLQkJCQlnc19hZGRtZXNzKCJc biIpOw0KLQkJCQlEZWxldGVGaWxlKHEpOw0KLQkJCX0NCi0JCX0NCisgICAgY2hhciAqcCwg KnE7DQorICAgIGNoYXIgZ3JvdXBbTUFYU1RSXTsNCisgICAgLy8gcmVtb3ZlIHNoZWxsIGl0 ZW1zIGFkZGVkIGJ5IEdob3N0c2NyaXB0DQorICAgIC8vIFdlIGNhbiBvbmx5IGRlbGV0ZSBv bmUgZ3JvdXAgd2l0aCB0aGlzIGNvZGUNCisgICAgZ3JvdXBbMF0gPSAnXDAnOw0KKyAgICB3 aGlsZSAoR2V0TGluZSgpKSB7DQorCWlmIChJc1NlY3Rpb24oKSkgew0KKwkgICAgaWYgKHN0 cmxlbihncm91cCkgIT0gMCkgew0KKwkJICAgIGdzX2FkZG1lc3MoIlJlbW92aW5nIHNoZWxs IGZvbGRlclxuICAiKTsNCisJCSAgICBnc19hZGRtZXNzKGdyb3VwKTsNCisJCSAgICBnc19h ZGRtZXNzKCJcbiIpOw0KKwkJICAgIFJlbW92ZURpcmVjdG9yeShncm91cCk7DQorCSAgICB9 DQorCSAgICByZXR1cm4gVFJVRTsNCisJfQ0KKwlwID0gc3RydG9rKHN6TGluZSwgIj0iKTsN CisJcSA9IHN0cnRvayhOVUxMLCAiIik7DQorCWlmIChwID09IE5VTEwpIHsNCisJICAgIGNv bnRpbnVlOw0KKwl9DQorCWVsc2UgaWYgKHN0cmNtcChwLCAiR3JvdXAiKT09MCkgew0KKwkg ICAgaWYgKHEpDQorCQlzdHJuY3B5KGdyb3VwLCBxLCBzaXplb2YoZ3JvdXApLTEpOw0KKwkg ICAgLy8gZGVmZXIgdGhpcyB1bnRpbCB3ZSBoYXZlIHJlbW92ZSBjb250ZW50cw0KKwl9DQor CWVsc2UgaWYgKHN0cmNtcChwLCAiTmFtZSIpID09IDApIHsNCisJICAgIGlmIChxKSB7DQor CQlnc19hZGRtZXNzKCJSZW1vdmluZyBzaGVsbCBsaW5rXG4gICIpOw0KKwkJZ3NfYWRkbWVz cyhxKTsNCisJCWdzX2FkZG1lc3MoIlxuIik7DQorCQlEZWxldGVGaWxlKHEpOw0KKwkgICAg fQ0KIAl9DQorICAgIH0NCiANCi0JcmV0dXJuIFRSVUU7DQorICAgIHJldHVybiBUUlVFOw0K IH0NCiANCiANCiBCT09MIENyZWF0ZVNoZWxsTGluayhMUENTVFIgbmFtZSwgTFBDU1RSIGRl c2NyaXB0aW9uLCBMUENTVFIgcHJvZ3JhbSwgDQogCUxQQ1NUUiBhcmd1bWVudHMsIExQQ1NU UiBkaXJlY3RvcnksIExQQ1NUUiBpY29uLCBpbnQgbkljb25JbmRleCkNCiB7DQotCUhSRVNV TFQgaHJlczsgICAgDQotCUlTaGVsbExpbmsqIHBzbDsNCisgICAgSFJFU1VMVCBocmVzOyAg ICANCisgICAgSVNoZWxsTGluayogcHNsOw0KIA0KLQkvLyBFbnN1cmUgc3RyaW5nIGlzIFVO SUNPREUuDQotCVdDSEFSIHdzeltNQVhfUEFUSF07DQotCU11bHRpQnl0ZVRvV2lkZUNoYXIo Q1BfQUNQLCAwLCBuYW1lLCAtMSwgd3N6LCBNQVhfUEFUSCk7DQotDQotCS8vIFNhdmUgbmV3 IHNoZWxsIGxpbmsNCi0NCi0JLy8gR2V0IGEgcG9pbnRlciB0byB0aGUgSVNoZWxsTGluayBp bnRlcmZhY2UuDQotCWhyZXMgPSBDb0NyZWF0ZUluc3RhbmNlKENMU0lEX1NoZWxsTGluaywg TlVMTCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsDQotCQlJSURfSVNoZWxsTGluaywgKHZvaWQg KiopJnBzbCk7DQotCWlmIChTVUNDRUVERUQoaHJlcykpICAgIHsNCi0JCUlQZXJzaXN0Rmls ZSogcHBmOw0KLQkJLy8gUXVlcnkgSVNoZWxsTGluayBmb3IgdGhlIElQZXJzaXN0RmlsZSBp bnRlcmZhY2UgZm9yIA0KLQkJLy8gc2F2aW5nIHRoZSBzaGVsbCBsaW5rIGluIHBlcnNpc3Rl bnQgc3RvcmFnZS4NCi0JCWhyZXMgPSBwc2wtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JUGVyc2lz dEZpbGUsICh2b2lkICoqKSZwcGYpOw0KLQkJaWYgKFNVQ0NFRURFRChocmVzKSkgeyAgICAg ICAgICAgIA0KLQkJCWdzX2FkZG1lc3MoIkFkZGluZyBzaGVsbCBsaW5rXG4gICIpOw0KLQkJ CWdzX2FkZG1lc3MobmFtZSk7DQotCQkJZ3NfYWRkbWVzcygiXG4iKTsNCi0NCi0JCQkvLyBT ZXQgdGhlIHBhdGggdG8gdGhlIHNoZWxsIGxpbmsgdGFyZ2V0Lg0KLQkJCWhyZXMgPSBwc2wt PlNldFBhdGgocHJvZ3JhbSk7ICAgICAgICAgDQotCQkJaWYgKCFTVUNDRUVERUQoaHJlcykp IHsNCi0JCQkJZ3NfYWRkbWVzcygiU2V0UGF0aCBmYWlsZWQhIik7DQotCQkJCWdFcnJvciA9 IFRSVUU7DQotCQkJfQ0KLQkJCS8vIFNldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHNoZWxs IGxpbmsuDQotCQkJaHJlcyA9IHBzbC0+U2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOyAg ICAgICAgIA0KLQkJCWlmICghU1VDQ0VFREVEKGhyZXMpKSB7DQotCQkJCWdzX2FkZG1lc3Mo IlNldERlc2NyaXB0aW9uIGZhaWxlZCEiKTsNCi0JCQkJZ0Vycm9yID0gVFJVRTsNCi0JCQl9 DQotCQkJaWYgKChhcmd1bWVudHMgIT0gKExQQ1NUUilOVUxMKSAmJiAqYXJndW1lbnRzKSB7 DQotCQkJCS8vIFNldCB0aGUgYXJndW1lbnRzIG9mIHRoZSBzaGVsbCBsaW5rIHRhcmdldC4N Ci0JCQkJaHJlcyA9IHBzbC0+U2V0QXJndW1lbnRzKGFyZ3VtZW50cyk7ICAgICAgICAgDQot CQkJCWlmICghU1VDQ0VFREVEKGhyZXMpKSB7DQotCQkJCQlnc19hZGRtZXNzKCJTZXRBcmd1 bWVudHMgZmFpbGVkISIpOw0KLQkJCQkJZ0Vycm9yID0gVFJVRTsNCi0JCQkJfQ0KLQkJCX0N Ci0JCQlpZiAoKGRpcmVjdG9yeSAhPSAoTFBDU1RSKU5VTEwpICYmICpkaXJlY3RvcnkpIHsN Ci0JCQkJLy8gU2V0IHRoZSBhcmd1bWVudHMgb2YgdGhlIHNoZWxsIGxpbmsgdGFyZ2V0Lg0K LQkJCQlocmVzID0gcHNsLT5TZXRXb3JraW5nRGlyZWN0b3J5KGRpcmVjdG9yeSk7ICAgICAg ICAgDQotCQkJCWlmICghU1VDQ0VFREVEKGhyZXMpKSB7DQotCQkJCQlnc19hZGRtZXNzKCJT ZXRXb3JraW5nRGlyZWN0b3J5IGZhaWxlZCEiKTsNCi0JCQkJCWdFcnJvciA9IFRSVUU7DQot CQkJCX0NCi0JCQl9DQotCQkJaWYgKChpY29uICE9IChMUENTVFIpTlVMTCkgJiYgKmljb24p IHsNCi0JCQkJLy8gU2V0IHRoZSBhcmd1bWVudHMgb2YgdGhlIHNoZWxsIGxpbmsgdGFyZ2V0 Lg0KLQkJCQlocmVzID0gcHNsLT5TZXRJY29uTG9jYXRpb24oaWNvbiwgbkljb25JbmRleCk7 ICAgICAgICAgDQotCQkJCWlmICghU1VDQ0VFREVEKGhyZXMpKSB7DQotCQkJCQlnc19hZGRt ZXNzKCJTZXRJY29uTG9jYXRpb24gZmFpbGVkISIpOw0KLQkJCQkJZ0Vycm9yID0gVFJVRTsN Ci0JCQkJfQ0KLQkJCX0NCisgICAgLy8gRW5zdXJlIHN0cmluZyBpcyBVTklDT0RFLg0KKyAg ICBXQ0hBUiB3c3pbTUFYX1BBVEhdOw0KKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FD UCwgMCwgbmFtZSwgLTEsIHdzeiwgTUFYX1BBVEgpOw0KKw0KKyAgICAvLyBTYXZlIG5ldyBz aGVsbCBsaW5rDQorDQorICAgIC8vIEdldCBhIHBvaW50ZXIgdG8gdGhlIElTaGVsbExpbmsg aW50ZXJmYWNlLg0KKyAgICBocmVzID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9TaGVsbExp bmssIE5VTEwsIENMU0NUWF9JTlBST0NfU0VSVkVSLA0KKwkgICAgSUlEX0lTaGVsbExpbmss ICh2b2lkICoqKSZwc2wpOw0KKyAgICBpZiAoU1VDQ0VFREVEKGhyZXMpKSAgICB7DQorCUlQ ZXJzaXN0RmlsZSogcHBmOw0KKwkvLyBRdWVyeSBJU2hlbGxMaW5rIGZvciB0aGUgSVBlcnNp c3RGaWxlIGludGVyZmFjZSBmb3IgDQorCS8vIHNhdmluZyB0aGUgc2hlbGwgbGluayBpbiBw ZXJzaXN0ZW50IHN0b3JhZ2UuDQorCWhyZXMgPSBwc2wtPlF1ZXJ5SW50ZXJmYWNlKElJRF9J UGVyc2lzdEZpbGUsICh2b2lkICoqKSZwcGYpOw0KKwlpZiAoU1VDQ0VFREVEKGhyZXMpKSB7 ICAgICAgICAgICAgDQorCSAgICBnc19hZGRtZXNzKCJBZGRpbmcgc2hlbGwgbGlua1xuICAi KTsNCisJICAgIGdzX2FkZG1lc3MobmFtZSk7DQorCSAgICBnc19hZGRtZXNzKCJcbiIpOw0K IA0KLQkJCS8vIFNhdmUgdGhlIGxpbmsgdmlhIHRoZSBJUGVyc2lzdEZpbGU6OlNhdmUgbWV0 aG9kLg0KLQkJCWhyZXMgPSBwcGYtPlNhdmUod3N6LCBUUlVFKTsgICAgDQotCQkJLy8gUmVs ZWFzZSBwb2ludGVyIHRvIElQZXJzaXN0RmlsZS4gICAgICAgICANCi0JCQlwcGYtPlJlbGVh c2UoKTsNCi0JCX0NCi0JCS8vIFJlbGVhc2UgcG9pbnRlciB0byBJU2hlbGxMaW5rLiAgICAg ICANCi0JCXBzbC0+UmVsZWFzZSgpOyAgICANCisJICAgIC8vIFNldCB0aGUgcGF0aCB0byB0 aGUgc2hlbGwgbGluayB0YXJnZXQuDQorCSAgICBocmVzID0gcHNsLT5TZXRQYXRoKHByb2dy YW0pOyAgICAgICAgIA0KKwkgICAgaWYgKCFTVUNDRUVERUQoaHJlcykpIHsNCisJCSAgICBn c19hZGRtZXNzKCJTZXRQYXRoIGZhaWxlZCEiKTsNCisJCSAgICBnRXJyb3IgPSBUUlVFOw0K KwkgICAgfQ0KKwkgICAgLy8gU2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2hlbGwgbGlu ay4NCisJICAgIGhyZXMgPSBwc2wtPlNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsgICAg ICAgICANCisJICAgIGlmICghU1VDQ0VFREVEKGhyZXMpKSB7DQorCQkgICAgZ3NfYWRkbWVz cygiU2V0RGVzY3JpcHRpb24gZmFpbGVkISIpOw0KKwkJICAgIGdFcnJvciA9IFRSVUU7DQor CSAgICB9DQorCSAgICBpZiAoKGFyZ3VtZW50cyAhPSAoTFBDU1RSKU5VTEwpICYmICphcmd1 bWVudHMpIHsNCisJCSAgICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBvZiB0aGUgc2hlbGwgbGlu ayB0YXJnZXQuDQorCQkgICAgaHJlcyA9IHBzbC0+U2V0QXJndW1lbnRzKGFyZ3VtZW50cyk7 ICAgICAgICAgDQorCQkgICAgaWYgKCFTVUNDRUVERUQoaHJlcykpIHsNCisJCQkgICAgZ3Nf YWRkbWVzcygiU2V0QXJndW1lbnRzIGZhaWxlZCEiKTsNCisJCQkgICAgZ0Vycm9yID0gVFJV RTsNCisJCSAgICB9DQorCSAgICB9DQorCSAgICBpZiAoKGRpcmVjdG9yeSAhPSAoTFBDU1RS KU5VTEwpICYmICpkaXJlY3RvcnkpIHsNCisJCSAgICAvLyBTZXQgdGhlIGFyZ3VtZW50cyBv ZiB0aGUgc2hlbGwgbGluayB0YXJnZXQuDQorCQkgICAgaHJlcyA9IHBzbC0+U2V0V29ya2lu Z0RpcmVjdG9yeShkaXJlY3RvcnkpOyAgICAgICAgIA0KKwkJICAgIGlmICghU1VDQ0VFREVE KGhyZXMpKSB7DQorCQkJICAgIGdzX2FkZG1lc3MoIlNldFdvcmtpbmdEaXJlY3RvcnkgZmFp bGVkISIpOw0KKwkJCSAgICBnRXJyb3IgPSBUUlVFOw0KKwkJICAgIH0NCisJICAgIH0NCisJ ICAgIGlmICgoaWNvbiAhPSAoTFBDU1RSKU5VTEwpICYmICppY29uKSB7DQorCQkgICAgLy8g U2V0IHRoZSBhcmd1bWVudHMgb2YgdGhlIHNoZWxsIGxpbmsgdGFyZ2V0Lg0KKwkJICAgIGhy ZXMgPSBwc2wtPlNldEljb25Mb2NhdGlvbihpY29uLCBuSWNvbkluZGV4KTsgICAgICAgICAN CisJCSAgICBpZiAoIVNVQ0NFRURFRChocmVzKSkgew0KKwkJCSAgICBnc19hZGRtZXNzKCJT ZXRJY29uTG9jYXRpb24gZmFpbGVkISIpOw0KKwkJCSAgICBnRXJyb3IgPSBUUlVFOw0KKwkJ ICAgIH0NCisJICAgIH0NCisNCisJICAgIC8vIFNhdmUgdGhlIGxpbmsgdmlhIHRoZSBJUGVy c2lzdEZpbGU6OlNhdmUgbWV0aG9kLg0KKwkgICAgaHJlcyA9IHBwZi0+U2F2ZSh3c3osIFRS VUUpOyAgICANCisJICAgIC8vIFJlbGVhc2UgcG9pbnRlciB0byBJUGVyc2lzdEZpbGUuICAg ICAgICAgDQorCSAgICBwcGYtPlJlbGVhc2UoKTsNCiAJfQ0KKwkvLyBSZWxlYXNlIHBvaW50 ZXIgdG8gSVNoZWxsTGluay4gICAgICAgDQorCXBzbC0+UmVsZWFzZSgpOyAgICANCisgICAg fQ0KIA0KLQlyZXR1cm4gKGhyZXMgPT0gMCk7DQorICAgIHJldHVybiAoaHJlcyA9PSAwKTsN CiB9DQogDQogDQogDQogQk9PTCBzaGVsbF9vbGQodm9pZCkNCiB7DQotCS8vIEFkZCBzaGVs bCBpdGVtcyByZW1vdmVkIGJ5IEdob3N0c2NyaXB0DQotCWNoYXIgKnAsICpxOw0KLQljaGFy IG5hbWVbTUFYU1RSXTsNCi0JY2hhciBkZXNjcmlwdGlvbltNQVhTVFJdOw0KLQljaGFyIHBy b2dyYW1bTUFYU1RSXTsNCi0JY2hhciBhcmd1bWVudHNbTUFYU1RSXTsNCi0JY2hhciBkaXJl Y3RvcnlbTUFYU1RSXTsNCi0JY2hhciBpY29uW01BWFNUUl07DQotCWludCBuSWNvbkluZGV4 Ow0KLQkvLyBSZW1vdmUgc2hlbGwgaXRlbXMgYWRkZWQgYnkgR2hvc3RzY3JpcHQNCi0JbmFt ZVswXSA9IGRlc2NyaXB0aW9uWzBdID0gcHJvZ3JhbVswXSA9IGFyZ3VtZW50c1swXSANCi0J CT0gZGlyZWN0b3J5WzBdID0gaWNvblswXSA9ICdcMCc7DQotCW5JY29uSW5kZXggPSAwOw0K LQkNCi0Jd2hpbGUgKEdldExpbmUoKSkgew0KLQkJaWYgKElzU2VjdGlvbigpKQ0KLQkJCXJl dHVybiBUUlVFOw0KLQkJcCA9IHN0cnRvayhzekxpbmUsICI9Iik7DQotCQlxID0gc3RydG9r KE5VTEwsICIiKTsNCi0JCWlmIChzdHJsZW4oc3pMaW5lKSA9PSAwKSB7DQotCQkJaWYgKG5h bWVbMF0gIT0gJ1wwJykgew0KLQkJCQkvLyBhZGQgc3RhcnQgbWVudSBpdGVtDQotCQkJCUNy ZWF0ZVNoZWxsTGluayhuYW1lLCBkZXNjcmlwdGlvbiwgcHJvZ3JhbSwgYXJndW1lbnRzLCAN Ci0JCQkJCWRpcmVjdG9yeSwgaWNvbiwgbkljb25JbmRleCk7DQotCQkJfQ0KLQkJCW5hbWVb MF0gPSBkZXNjcmlwdGlvblswXSA9IHByb2dyYW1bMF0gPSBhcmd1bWVudHNbMF0gDQotCQkJ CT0gZGlyZWN0b3J5WzBdID0gaWNvblswXSA9ICdcMCc7DQotCQkJbkljb25JbmRleCA9IDA7 DQotCQkJY29udGludWU7DQotCQl9DQotCQllbHNlIGlmIChwID09IChjaGFyICopTlVMTCkg ew0KLQkJCWNvbnRpbnVlOw0KLQkJfQ0KLQkJZWxzZSBpZiAoc3RyY21wKHAsICJHcm91cCIp PT0wKSB7DQotCQkJTWFrZURpcihxKTsNCi0JCX0NCi0JCWVsc2UgaWYgKHN0cmNtcChwLCAi TmFtZSIpID09IDApDQotCQkJc3RybmNweShuYW1lLCBxLCBzaXplb2YobmFtZSktMSk7DQot CQllbHNlIGlmIChzdHJjbXAocCwgIkRlc2NyaXB0aW9uIikgPT0gMCkNCi0JCQlzdHJuY3B5 KGRlc2NyaXB0aW9uLCBxLCBzaXplb2YoZGVzY3JpcHRpb24pLTEpOw0KLQkJZWxzZSBpZiAo c3RyY21wKHAsICJQcm9ncmFtIikgPT0gMCkNCi0JCQlzdHJuY3B5KHByb2dyYW0sIHEsIHNp emVvZihwcm9ncmFtKS0xKTsNCi0JCWVsc2UgaWYgKHN0cmNtcChwLCAiQXJndW1lbnRzIikg PT0gMCkNCi0JCQlzdHJuY3B5KGFyZ3VtZW50cywgcSwgc2l6ZW9mKGFyZ3VtZW50cyktMSk7 DQotCQllbHNlIGlmIChzdHJjbXAocCwgIkRpcmVjdG9yeSIpID09IDApDQotCQkJc3RybmNw eShkaXJlY3RvcnksIHEsIHNpemVvZihkaXJlY3RvcnkpLTEpOw0KLQkJZWxzZSBpZiAoc3Ry Y21wKHAsICJJY29uTG9jYXRpb24iKSA9PSAwKQ0KLQkJCXN0cm5jcHkoaWNvbiwgcSwgc2l6 ZW9mKGljb24pLTEpOw0KLQkJZWxzZSBpZiAoc3RyY21wKHAsICJJY29uSW5kZXgiKSA9PSAw KQ0KLQkJCW5JY29uSW5kZXggPSBhdG9pKHEpOw0KLQl9DQotCQ0KLQlyZXR1cm4gVFJVRTsN CisgICAgLy8gQWRkIHNoZWxsIGl0ZW1zIHJlbW92ZWQgYnkgR2hvc3RzY3JpcHQNCisgICAg Y2hhciAqcCwgKnE7DQorICAgIGNoYXIgbmFtZVtNQVhTVFJdOw0KKyAgICBjaGFyIGRlc2Ny aXB0aW9uW01BWFNUUl07DQorICAgIGNoYXIgcHJvZ3JhbVtNQVhTVFJdOw0KKyAgICBjaGFy IGFyZ3VtZW50c1tNQVhTVFJdOw0KKyAgICBjaGFyIGRpcmVjdG9yeVtNQVhTVFJdOw0KKyAg ICBjaGFyIGljb25bTUFYU1RSXTsNCisgICAgaW50IG5JY29uSW5kZXg7DQorICAgIC8vIFJl bW92ZSBzaGVsbCBpdGVtcyBhZGRlZCBieSBHaG9zdHNjcmlwdA0KKyAgICBuYW1lWzBdID0g ZGVzY3JpcHRpb25bMF0gPSBwcm9ncmFtWzBdID0gYXJndW1lbnRzWzBdIA0KKwkgICAgPSBk aXJlY3RvcnlbMF0gPSBpY29uWzBdID0gJ1wwJzsNCisgICAgbkljb25JbmRleCA9IDA7DQor ICAgIA0KKyAgICB3aGlsZSAoR2V0TGluZSgpKSB7DQorCWlmIChJc1NlY3Rpb24oKSkNCisJ CXJldHVybiBUUlVFOw0KKwlwID0gc3RydG9rKHN6TGluZSwgIj0iKTsNCisJcSA9IHN0cnRv ayhOVUxMLCAiIik7DQorCWlmIChzdHJsZW4oc3pMaW5lKSA9PSAwKSB7DQorCQlpZiAobmFt ZVswXSAhPSAnXDAnKSB7DQorCQkJLy8gYWRkIHN0YXJ0IG1lbnUgaXRlbQ0KKwkJCUNyZWF0 ZVNoZWxsTGluayhuYW1lLCBkZXNjcmlwdGlvbiwgcHJvZ3JhbSwgYXJndW1lbnRzLCANCisJ CQkJZGlyZWN0b3J5LCBpY29uLCBuSWNvbkluZGV4KTsNCisJCX0NCisJCW5hbWVbMF0gPSBk ZXNjcmlwdGlvblswXSA9IHByb2dyYW1bMF0gPSBhcmd1bWVudHNbMF0gDQorCQkJPSBkaXJl Y3RvcnlbMF0gPSBpY29uWzBdID0gJ1wwJzsNCisJCW5JY29uSW5kZXggPSAwOw0KKwkJY29u dGludWU7DQorCX0NCisJZWxzZSBpZiAocCA9PSAoY2hhciAqKU5VTEwpIHsNCisJCWNvbnRp bnVlOw0KKwl9DQorCWVsc2UgaWYgKHN0cmNtcChwLCAiR3JvdXAiKT09MCkgew0KKwkJTWFr ZURpcihxKTsNCisJfQ0KKwllbHNlIGlmIChzdHJjbXAocCwgIk5hbWUiKSA9PSAwKQ0KKwkJ c3RybmNweShuYW1lLCBxLCBzaXplb2YobmFtZSktMSk7DQorCWVsc2UgaWYgKHN0cmNtcChw LCAiRGVzY3JpcHRpb24iKSA9PSAwKQ0KKwkJc3RybmNweShkZXNjcmlwdGlvbiwgcSwgc2l6 ZW9mKGRlc2NyaXB0aW9uKS0xKTsNCisJZWxzZSBpZiAoc3RyY21wKHAsICJQcm9ncmFtIikg PT0gMCkNCisJCXN0cm5jcHkocHJvZ3JhbSwgcSwgc2l6ZW9mKHByb2dyYW0pLTEpOw0KKwll bHNlIGlmIChzdHJjbXAocCwgIkFyZ3VtZW50cyIpID09IDApDQorCQlzdHJuY3B5KGFyZ3Vt ZW50cywgcSwgc2l6ZW9mKGFyZ3VtZW50cyktMSk7DQorCWVsc2UgaWYgKHN0cmNtcChwLCAi RGlyZWN0b3J5IikgPT0gMCkNCisJCXN0cm5jcHkoZGlyZWN0b3J5LCBxLCBzaXplb2YoZGly ZWN0b3J5KS0xKTsNCisJZWxzZSBpZiAoc3RyY21wKHAsICJJY29uTG9jYXRpb24iKSA9PSAw KQ0KKwkJc3RybmNweShpY29uLCBxLCBzaXplb2YoaWNvbiktMSk7DQorCWVsc2UgaWYgKHN0 cmNtcChwLCAiSWNvbkluZGV4IikgPT0gMCkNCisJCW5JY29uSW5kZXggPSBhdG9pKHEpOw0K KyAgICB9DQorICAgIA0KKyAgICByZXR1cm4gVFJVRTsNCiB9DQogDQogDQpAQCAtNjgzLDYg KzcyMCw4IEBADQogICBzd2l0Y2gobWVzc2FnZSkgew0KICAgICBjYXNlIFdNX0lOSVRESUFM T0c6DQogCSAgICBTZXRXaW5kb3dUZXh0KGh3bmQsIHN6VGl0bGUpOw0KKwkgICAgaWYgKGJT aWxlbnQpDQorCQlQb3N0TWVzc2FnZShod25kLCBXTV9DT01NQU5ELCBJRE9LLCAwKTsNCiAJ ICAgIHJldHVybiBUUlVFOw0KIAljYXNlIFdNX0NPTU1BTkQ6DQogCSAgICBzd2l0Y2goTE9X T1JEKHdQYXJhbSkpIHsNCkBAIC03MDQsNiArNzQzLDggQEANCiAJCSAgICBFbmFibGVXaW5k b3coR2V0RGxnSXRlbShod25kLCBJRENBTkNFTCksIFRSVUUpOw0KIAkJICAgIFNldERsZ0l0 ZW1UZXh0KGh3bmQsIElEQ0FOQ0VMLCAiRXhpdCIpOw0KIAkJICAgIFNldEZvY3VzKEdldERs Z0l0ZW0oaHduZCwgSURDQU5DRUwpKTsNCisJCSAgICBpZiAoYlNpbGVudCkNCisJCQlQb3N0 TWVzc2FnZShod25kLCBXTV9DT01NQU5ELCBJRENBTkNFTCwgMCk7DQogCQkgICAgcmV0dXJu IFRSVUU7DQogCQljYXNlIElET0s6DQogCQkgICAgLy8gU3RhcnQgcmVtb3ZhbA0KQEAgLTc1 Myw3MiArNzk0LDg3IEBADQogQk9PTA0KIGluaXQodm9pZCkNCiB7DQotCURXT1JEIHZlcnNp b24gPSBHZXRWZXJzaW9uKCk7DQotCWNoYXIgKnAsICpzOw0KKyAgICBEV09SRCB2ZXJzaW9u ID0gR2V0VmVyc2lvbigpOw0KKyAgICBjaGFyICpwLCAqczsNCisgICAgaW50IGxlbjsNCisg ICAgQk9PTCBpbnF1b3RlID0gRkFMU0U7DQogICAgIC8vIGdldCBsb2NhdGlvbiBvZiB1bmlu c3RhbGwgbG9nIGZyb20gY29tbWFuZCBsaW5lIGFzIGFyZ3ZbMV0NCiAgICAgcCA9IEdldENv bW1hbmRMaW5lKCk7DQotCXMgPSBwOw0KLQlpZiAoKnMgPT0gJ1wwNDInKSB7DQotCQkvLyBz a2lwIG92ZXIgcHJvZ3JhbSBuYW1lDQotCQlzKys7DQotCQl3aGlsZSAoKnMgJiYgKnMhPSdc MDQyJykNCi0JCQlzKys7DQotCQlpZiAoKnMpDQotCQkJcysrOw0KLQl9DQotCWVsc2UgaWYg KCpzICE9ICcgJykgew0KLQkJLy8gc2tpcCBvdmVyIHByb2dyYW0gbmFtZQ0KLQkJcysrOw0K LQkJd2hpbGUgKCpzICYmICpzIT0nICcpDQotCQkJcysrOw0KLQkJaWYgKCpzKQ0KLQkJCXMr KzsNCi0JfQ0KLQl3aGlsZSAoKnMgJiYgKnM9PScgJykNCi0JCXMrKzsNCi0JaWYgKCpzID09 ICdcMDQyJykNCi0JCXMrKzsNCi0Jc3RybmNweShzekxvZ0ZpbGUsIHMsIHNpemVvZihzekxv Z0ZpbGUpKTsNCi0JcyA9IHN6TG9nRmlsZTsNCi0Jd2hpbGUgKCpzKSB7DQotCQlpZiAoKnMg PT0gJ1wwNDInKSB7DQotCQkJKnMgPSAnXDAnOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJcysr Ow0KLQl9DQotCWlmIChzdHJsZW4oc3pMb2dGaWxlKSA9PSAwKSB7DQotCQlNZXNzYWdlQm94 KEhXTkRfREVTS1RPUCwgIlVzYWdlOiB1bmluc3RncyBsb2dmaWxlLnR4dCIsIA0KLQkJCSJH UEwgR2hvc3RzY3JpcHQgVW5pbnN0YWxsIiwgTUJfT0spOw0KLQkJcmV0dXJuIEZBTFNFOw0K LQl9DQotCQ0KLQkvLyByZWFkIGZpcnN0IGZldyBsaW5lcyBvZiBmaWxlIHRvIGdldCB0aXRs ZQ0KLQlmTG9nID0gZm9wZW4oc3pMb2dGaWxlLCAiciIpOw0KLQlpZiAoZkxvZyA9PSAoRklM RSAqKU5VTEwpIHsNCi0JCU1lc3NhZ2VCb3goSFdORF9ERVNLVE9QLCBzekxvZ0ZpbGUsICJD YW4ndCBmaW5kIGZpbGUiLCBNQl9PSyk7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JR2V0 TGluZSgpOw0KLQlpZiAoIUlzU2VjdGlvbigpKSB7DQotCQlNZXNzYWdlQm94KEhXTkRfREVT S1RPUCwgc3pMb2dGaWxlLCAiTm90IHZhbGlkIHVuaW5zdGFsbCBsb2ciLCANCi0JCQlNQl9P Syk7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JR2V0TGluZSgpOw0KLQlpZiAoc3RyY21w KHN6TGluZSwgIlVuaW5zdGFsbE5hbWUiKSAhPSAwKSB7DQotCQlNZXNzYWdlQm94KEhXTkRf REVTS1RPUCwgc3pMb2dGaWxlLCAiTm90IHZhbGlkIHVuaW5zdGFsbCBsb2ciLCANCi0JCQlN Ql9PSyk7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JR2V0TGluZSgpOw0KLQlzdHJjcHko c3pUaXRsZSwgc3pMaW5lKTsNCi0JDQotCU5leHRTZWN0aW9uKCk7DQotCQ0KLQlpZiAoTE9C WVRFKExPV09SRCh2ZXJzaW9uKSkgPj0gNCkNCi0JCWlzX3dpbjQgPSBUUlVFOw0KLQlyZXR1 cm4gVFJVRTsNCisgICAgcyA9IHA7DQorICAgIGlmICgqcyA9PSAnXDA0MicpIHsNCisJICAg IC8vIHNraXAgb3ZlciBwcm9ncmFtIG5hbWUNCisJICAgIHMrKzsNCisJICAgIHdoaWxlICgq cyAmJiAqcyE9J1wwNDInKQ0KKwkJICAgIHMrKzsNCisJICAgIGlmICgqcykNCisJCSAgICBz Kys7DQorICAgIH0NCisgICAgZWxzZSBpZiAoKnMgIT0gJyAnKSB7DQorCSAgICAvLyBza2lw IG92ZXIgcHJvZ3JhbSBuYW1lDQorCSAgICBzKys7DQorCSAgICB3aGlsZSAoKnMgJiYgKnMh PScgJykNCisJCSAgICBzKys7DQorCSAgICBpZiAoKnMpDQorCQkgICAgcysrOw0KKyAgICB9 DQorICAgIHdoaWxlICgqcyAmJiAqcz09JyAnKQ0KKwkgICAgcysrOw0KKyAgICBpZiAoKnMg PT0gJ1wwNDInKSB7DQorCXMrKzsNCisJaW5xdW90ZSA9IFRSVUU7DQorICAgIH0NCisgICAg cCA9IHM7DQorICAgIGlmIChpbnF1b3RlKSB7DQorCXdoaWxlICgqcyAmJiAoKnMgIT0gJ1ww NDInKSkNCisJICAgIHMrKzsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisJd2hpbGUgKCpzICYm ICgqcyAhPSAnICcpKQ0KKwkgICAgcysrOw0KKyAgICB9DQorICAgIGxlbiA9IHMgLSBwOw0K KyAgICBzdHJuY3B5KHN6TG9nRmlsZSwgcCwgbWluKGxlbiwgc2l6ZW9mKHN6TG9nRmlsZSkt MSkpOw0KKyAgICBzekxvZ0ZpbGVbbGVuXSA9ICdcMCc7DQorICAgIGlmIChpbnF1b3RlICYm ICgqcyA9PSAnXDA0MicpKSB7DQorCXMrKzsNCisJaW5xdW90ZSA9IEZBTFNFOw0KKyAgICB9 DQorDQorICAgIGlmIChzdHJsZW4oc3pMb2dGaWxlKSA9PSAwKSB7DQorCSAgICBtZXNzYWdl X2JveCgiVXNhZ2U6IHVuaW5zdGdzIGxvZ2ZpbGUudHh0IFstcV0iLCANCisJCSAgICAiR1BM IEdob3N0c2NyaXB0IFVuaW5zdGFsbCIsIE1CX09LKTsNCisJICAgIHJldHVybiBGQUxTRTsN CisgICAgfQ0KKw0KKyAgICB3aGlsZSAoKnMgJiYgKnM9PScgJykNCisJICAgIHMrKzsNCisg ICAgaWYgKHN0cm5jbXAocywgIi1xIiwgMikgPT0gMCkNCisJYlNpbGVudCA9IFRSVUU7DQor ICAgIA0KKyAgICAvLyByZWFkIGZpcnN0IGZldyBsaW5lcyBvZiBmaWxlIHRvIGdldCB0aXRs ZQ0KKyAgICBmTG9nID0gZm9wZW4oc3pMb2dGaWxlLCAiciIpOw0KKyAgICBpZiAoZkxvZyA9 PSAoRklMRSAqKU5VTEwpIHsNCisJICAgIG1lc3NhZ2VfYm94KHN6TG9nRmlsZSwgIkNhbid0 IGZpbmQgZmlsZSIsIE1CX09LKTsNCisJICAgIHJldHVybiBGQUxTRTsNCisgICAgfQ0KKyAg ICBHZXRMaW5lKCk7DQorICAgIGlmICghSXNTZWN0aW9uKCkpIHsNCisJICAgIG1lc3NhZ2Vf Ym94KHN6TG9nRmlsZSwgIk5vdCB2YWxpZCB1bmluc3RhbGwgbG9nIiwgTUJfT0spOw0KKwkg ICAgcmV0dXJuIEZBTFNFOw0KKyAgICB9DQorICAgIEdldExpbmUoKTsNCisgICAgaWYgKHN0 cmNtcChzekxpbmUsICJVbmluc3RhbGxOYW1lIikgIT0gMCkgew0KKwkgICAgbWVzc2FnZV9i b3goc3pMb2dGaWxlLCAiTm90IHZhbGlkIHVuaW5zdGFsbCBsb2ciLCBNQl9PSyk7DQorCSAg ICByZXR1cm4gRkFMU0U7DQorICAgIH0NCisgICAgR2V0TGluZSgpOw0KKyAgICBzdHJjcHko c3pUaXRsZSwgc3pMaW5lKTsNCisgICAgDQorICAgIE5leHRTZWN0aW9uKCk7DQorICAgIA0K KyAgICBpZiAoTE9CWVRFKExPV09SRCh2ZXJzaW9uKSkgPj0gNCkNCisJaXNfd2luNCA9IFRS VUU7DQorICAgIHJldHVybiBUUlVFOw0KIH0NCiANCiAjaWZkZWYgX19CT1JMQU5EQ19fDQpA QCAtODQzLDcgKzg5OSw3IEBADQogICAgIGhUZXh0MiA9IEdldERsZ0l0ZW0oaERsZ01vZGVs ZXNzLCBJRENfVDIpOw0KIA0KICAgICBTZXRXaW5kb3dQb3MoaERsZ01vZGVsZXNzLCBIV05E X1RPUCwgMCwgMCwgMCwgMCwgDQotCVNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8IFNX UF9OT1NJWkUpOw0KKwkoYlNpbGVudCA/IFNXUF9ISURFV0lORE9XIDogU1dQX1NIT1dXSU5E T1cpIHwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUpOw0KIA0KICAgICB3aGlsZSAoaERsZ01v ZGVsZXNzICYmIEdldE1lc3NhZ2UoJm1zZywgKEhXTkQpTlVMTCwgMCwgMCkpIHsNCiAJaWYg KChoRGxnTW9kZWxlc3MgPT0gMCkgfHwgIUlzRGlhbG9nTWVzc2FnZShoRGxnTW9kZWxlc3Ms ICZtc2cpKSB7DQpAQCAtODUyLDEwICs5MDgsMTAgQEANCiAJfQ0KICAgICB9DQogDQotCWlm IChmTG9nKQ0KLQkJZmNsb3NlKGZMb2cpOw0KLQkNCi0JQ29VbmluaXRpYWxpemUoKTsNCisg ICAgaWYgKGZMb2cpDQorCWZjbG9zZShmTG9nKTsNCisNCisgICAgQ29VbmluaXRpYWxpemUo KTsNCiANCiAgICAgcmV0dXJuIDA7DQogfQ0K --Message-Boundary-17608 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gs-code-review mailing list [email protected] http://www.ghostscript.com/mailman/listinfo/gs-code-review --Message-Boundary-17608--