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--