From: Shugo Maeda Date: 2008-08-20T23:24:47+09:00 Subject: [ruby-dev:35884] Re: [Bug #437] test_strftime(TestTime) fails on Solaris ------=_Part_48430_22090865.1219242497496 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline 前田です。 2008/08/18 14:34 Shugo Maeda : >> いっそ、全部自前のmissing/strftime.cを使うというのでどうでしょ >> う。将来のことを考えると結局はこっちが道かも。 > > 方向性としては賛成なのですが、1.9.1までにやります? とりあえず、作業してみました。パッチを添付します。 i686-linux/i386-solaris2.10で確認したかぎりではtest_time.rbも 通るようになりました。 ただ、他のプラットフォーム(Windowsとか)でちゃんと動くかどうかは かなり怪しいと思います。 あと、%L(millisecond)/%N(nanosecond)もついでに実装しました。 -- Shugo Maeda ------=_Part_48430_22090865.1219242497496 Content-Type: text/x-diff; name=strftime.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fk41co4h0 Content-Disposition: attachment; filename=strftime.diff SW5kZXg6IHRpbWUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aW1lLmMJKHJldmlzaW9uIDE4NzI5KQorKysg dGltZS5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE2LDkgKzIwMTYsMTQgQEAKIAkJICAgIHRpbWVf em9uZSh0aW1lKSk7CiB9CiAKK3NpemVfdAorcmJfc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1h eHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkgICAgY29uc3Qgc3RydWN0IHRtICp0aW1lcHRy LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRzLCBpbnQgZ210KTsKKwogI2RlZmluZSBTTUFMTEJV RiAxMDAKIHN0YXRpYyBpbnQKLXJiX3N0cmZ0aW1lKGNoYXIgKipidWYsIGNvbnN0IGNoYXIgKmZv cm1hdCwgc3RydWN0IHRtICp0aW1lKQorcmJfc3RyZnRpbWVfYWxsb2MoY2hhciAqKmJ1ZiwgY29u c3QgY2hhciAqZm9ybWF0LAorCQkgIHN0cnVjdCB0bSAqdGltZSwgc3RydWN0IHRpbWVzcGVjICp0 cywgaW50IGdtdCkKIHsKICAgICBpbnQgc2l6ZSwgbGVuLCBmbGVuOwogCkBAIC0yMDI4LDEyICsy MDMzLDEyIEBACiAJcmV0dXJuIDA7CiAgICAgfQogICAgIGVycm5vID0gMDsKLSAgICBsZW4gPSBz dHJmdGltZSgqYnVmLCBTTUFMTEJVRiwgZm9ybWF0LCB0aW1lKTsKKyAgICBsZW4gPSByYl9zdHJm dGltZSgqYnVmLCBTTUFMTEJVRiwgZm9ybWF0LCB0aW1lLCB0cywgZ210KTsKICAgICBpZiAobGVu ICE9IDAgfHwgKCoqYnVmID09ICdcMCcgJiYgZXJybm8gIT0gRVJBTkdFKSkgcmV0dXJuIGxlbjsK ICAgICBmb3IgKHNpemU9MTAyNDsgOyBzaXplKj0yKSB7CiAJKmJ1ZiA9IHhtYWxsb2Moc2l6ZSk7 CiAJKCpidWYpWzBdID0gJ1wwJzsKLQlsZW4gPSBzdHJmdGltZSgqYnVmLCBzaXplLCBmb3JtYXQs IHRpbWUpOworCWxlbiA9IHJiX3N0cmZ0aW1lKCpidWYsIHNpemUsIGZvcm1hdCwgdGltZSwgdHMs IGdtdCk7CiAJLyoKIAkgKiBidWZsZW4gY2FuIGJlIHplcm8gRUlUSEVSIGJlY2F1c2UgdGhlcmUn cyBub3QgZW5vdWdoCiAJICogcm9vbSBpbiB0aGUgc3RyaW5nLCBvciBiZWNhdXNlIHRoZSBjb250 cm9sIGNvbW1hbmQKQEAgLTIxMTgsNyArMjEyMyw3IEBACiAKIAlzdHIgPSByYl9zdHJfbmV3KDAs IDApOwogCXdoaWxlIChwIDwgcGUpIHsKLQkgICAgbGVuID0gcmJfc3RyZnRpbWUoJmJ1ZiwgcCwg JnRvYmotPnRtKTsKKwkgICAgbGVuID0gcmJfc3RyZnRpbWVfYWxsb2MoJmJ1ZiwgcCwgJnRvYmot PnRtLCAmdG9iai0+dHMsIHRvYmotPmdtdCk7CiAJICAgIHJiX3N0cl9jYXQoc3RyLCBidWYsIGxl bik7CiAJICAgIHAgKz0gc3RybGVuKHApOwogCSAgICBpZiAoYnVmICE9IGJ1ZmZlcikgewpAQCAt MjEzMSw3ICsyMTM2LDggQEAKIAlyZXR1cm4gc3RyOwogICAgIH0KICAgICBlbHNlIHsKLQlsZW4g PSByYl9zdHJmdGltZSgmYnVmLCBSU1RSSU5HX1BUUihmb3JtYXQpLCAmdG9iai0+dG0pOworCWxl biA9IHJiX3N0cmZ0aW1lX2FsbG9jKCZidWYsIFJTVFJJTkdfUFRSKGZvcm1hdCksCisJCQkgICAg ICAgCSZ0b2JqLT50bSwgJnRvYmotPnRzLCB0b2JqLT5nbXQpOwogICAgIH0KICAgICBzdHIgPSBy Yl9zdHJfbmV3KGJ1ZiwgbGVuKTsKICAgICBpZiAoYnVmICE9IGJ1ZmZlcikgeGZyZWUoYnVmKTsK SW5kZXg6IGNvbW1vbi5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb21tb24ubWsJKHJldmlzaW9uIDE4NzI5 KQorKysgY29tbW9uLm1rCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAJCXNpZ25h bC4kKE9CSkVYVCkgXAogCQlzcHJpbnRmLiQoT0JKRVhUKSBcCiAJCXN0LiQoT0JKRVhUKSBcCisJ CXN0cmZ0aW1lLiQoT0JKRVhUKSBcCiAJCXN0cmluZy4kKE9CSkVYVCkgXAogCQlzdHJ1Y3QuJChP QkpFWFQpIFwKIAkJdGltZS4kKE9CSkVYVCkgXApAQCAtNTY4LDYgKzU2OSw3IEBACiAgIHskKFZQ QVRIKX1lbmNvZGluZy5oIHskKFZQQVRIKX12c25wcmludGYuYwogc3QuJChPQkpFWFQpOiB7JChW UEFUSCl9c3QuYyB7JChWUEFUSCl9Y29uZmlnLmggeyQoVlBBVEgpfWRlZmluZXMuaCBcCiAgIHsk KFZQQVRIKX1zdC5oCitzdHJmdGltZS4kKE9CSkVYVCk6IHskKFZQQVRIKX1zdHJmdGltZS5jIHsk KFZQQVRIKX1jb25maWcuaAogc3RyaW5nLiQoT0JKRVhUKTogeyQoVlBBVEgpfXN0cmluZy5jICQo UlVCWV9IX0lOQ0xVREVTKSBcCiAgIHskKFZQQVRIKX1zdC5oIHskKFZQQVRIKX1yZS5oIHskKFZQ QVRIKX1yZWdleC5oIHskKFZQQVRIKX1vbmlndXJ1bWEuaCBcCiAgIHskKFZQQVRIKX1lbmNvZGlu Zy5oCkluZGV4OiBzdHJmdGltZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN0cmZ0aW1lLmMJKHJldmlzaW9u IDApCisrKyBzdHJmdGltZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyNCBAQAorLyoKKyAq IHN0cmZ0aW1lLmMKKyAqCisgKiBQdWJsaWMtZG9tYWluIGltcGxlbWVudGF0aW9uIG9mIEFOU0kg QyBsaWJyYXJ5IHJvdXRpbmUuCisgKgorICogSXQncyB3cml0dGVuIGluIG9sZC1zdHlsZSBDIGZv ciBtYXhpbWFsIHBvcnRhYmlsaXR5LgorICogSG93ZXZlciwgc2luY2UgSSdtIHVzZWQgdG8gcHJv dG90eXBlcywgSSd2ZSBpbmNsdWRlZCB0aGVtIHRvby4KKyAqCisgKiBJZiB5b3Ugd2FudCBzdHVm ZiBpbiB0aGUgU3lzdGVtIFYgYXNjZnRpbWUgcm91dGluZSwgYWRkIHRoZSBTWVNWX0VYVCBkZWZp bmUuCisgKiBGb3IgZXh0ZW5zaW9ucyBmcm9tIFN1bk9TLCBhZGQgU1VOT1NfRVhULgorICogRm9y IHN0dWZmIG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIFAxMDAzLjIgZGF0ZSBjb21tYW5kLCBhZGQg UE9TSVgyX0RBVEUuCisgKiBGb3IgVk1TIGRhdGVzLCBhZGQgVk1TX0VYVC4KKyAqIEZvciBhIGFu IFJGQzgyMiB0aW1lIGZvcm1hdCwgYWRkIE1BSUxIRUFERVJfRVhULgorICogRm9yIElTTyB3ZWVr IHllYXJzLCBhZGQgSVNPX0RBVEVfRVhULgorICogRm9yIGNvbXBsZXRlIFBPU0lYIHNlbWFudGlj cywgYWRkIFBPU0lYX1NFTUFOVElDUy4KKyAqCisgKiBUaGUgY29kZSBmb3IgJWMsICV4LCBhbmQg JVggbm93IGZvbGxvd3MgdGhlIDEwMDMuMiBzcGVjaWZpY2F0aW9uIGZvcgorICogdGhlIFBPU0lY IGxvY2FsZS4KKyAqIFRoaXMgdmVyc2lvbiBpZ25vcmVzIExPQ0FMRSBpbmZvcm1hdGlvbi4KKyAq IEl0IGFsc28gZG9lc24ndCB3b3JyeSBhYm91dCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuCisgKiBT byB0aGVyZS4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYWxzbyBzaGlwcGVkIHdpdGggR0FXSyAoR05V IEF3ayksIGdhd2sgc3BlY2lmaWMgYml0cyBvZgorICogY29kZSBhcmUgaW5jbHVkZWQgaWYgR0FX SyBpcyBkZWZpbmVkLgorICoKKyAqIEFybm9sZCBSb2JiaW5zCisgKiBKYW51YXJ5LCBGZWJydWFy eSwgTWFyY2gsIDE5OTEKKyAqIFVwZGF0ZWQgTWFyY2gsIEFwcmlsIDE5OTIKKyAqIFVwZGF0ZWQg QXByaWwsIDE5OTMKKyAqIFVwZGF0ZWQgRmVicnVhcnksIDE5OTQKKyAqIFVwZGF0ZWQgTWF5LCAx OTk0CisgKiBVcGRhdGVkIEphbnVhcnksIDE5OTUKKyAqIFVwZGF0ZWQgU2VwdGVtYmVyLCAxOTk1 CisgKiBVcGRhdGVkIEphbnVhcnksIDE5OTYKKyAqCisgKiBGaXhlcyBmcm9tIGFkb0BlbHNpZS5u Y2kubmloLmdvdgorICogRmVicnVhcnkgMTk5MSwgTWF5IDE5OTIKKyAqIEZpeGVzIGZyb20gVG9y IExpbGxxdmlzdCB0bWxAdGlrLnZ0dC5maQorICogTWF5LCAxOTkzCisgKiBGdXJ0aGVyIGZpeGVz IGZyb20gYWRvQGVsc2llLm5jaS5uaWguZ292CisgKiBGZWJydWFyeSAxOTk0CisgKiAleiBjb2Rl IGZyb20gY2hpcEBjaGluYWNhdC51bmljb20uY29tCisgKiBBcHBsaWVkIFNlcHRlbWJlciAxOTk1 CisgKiAlViBjb2RlIGZpeGVkIChhZ2FpbikgYW5kICVHLCAlZyBhZGRlZCwKKyAqIEphbnVhcnkg MTk5NgorICovCisKKyNpbmNsdWRlICJydWJ5L3J1YnkuaCIKKworI2lmbmRlZiBHQVdLCisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJu by5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChUTV9JTl9TWVNfVElNRSkgfHwgIWRlZmluZWQoR0FX SykgJiYgIWRlZmluZWQoX1dJTjMyX1dDRSkKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs dWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKy8qIGRlZmF1bHRzOiBzZWFzb24gdG8gdGFzdGUg Ki8KKyNkZWZpbmUgU1lTVl9FWFQJMQkvKiBzdHVmZiBpbiBTeXN0ZW0gViBhc2NmdGltZSByb3V0 aW5lICovCisjZGVmaW5lIFNVTk9TX0VYVAkxCS8qIHN0dWZmIGluIFN1bk9TIHN0cmZ0aW1lIHJv dXRpbmUgKi8KKyNkZWZpbmUgUE9TSVgyX0RBVEUJMQkvKiBzdHVmZiBpbiBQb3NpeCAxMDAzLjIg ZGF0ZSBjb21tYW5kICovCisjZGVmaW5lIFZNU19FWFQJCTEJLyogaW5jbHVkZSAldiBmb3IgVk1T IGRhdGUgZm9ybWF0ICovCisjZGVmaW5lIE1BSUxIRUFERVJfRVhUCTEJLyogYWRkICV6IGZvciBI SE1NIGZvcm1hdCAqLworI2RlZmluZSBJU09fREFURV9FWFQJMQkvKiAlRyBhbmQgJWcgZm9yIHll YXIgb2YgSVNPIHdlZWsgKi8KKyNpZm5kZWYgR0FXSworI2RlZmluZSBQT1NJWF9TRU1BTlRJQ1MJ MQkvKiBjYWxsIHR6c2V0KCkgaWYgVFogY2hhbmdlcyAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVk KElTT19EQVRFX0VYVCkKKyNpZiAhIGRlZmluZWQoUE9TSVgyX0RBVEUpCisjZGVmaW5lIFBPU0lY Ml9EQVRFCTEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBPU0lYMl9EQVRFKQorI2lm ICEgZGVmaW5lZChTWVNWX0VYVCkKKyNkZWZpbmUgU1lTVl9FWFQJMQorI2VuZGlmCisjaWYgISBk ZWZpbmVkKFNVTk9TX0VYVCkKKyNkZWZpbmUgU1VOT1NfRVhUCTEKKyNlbmRpZgorI2VuZGlmCisK KyNpZiBkZWZpbmVkKFBPU0lYMl9EQVRFKQorI2RlZmluZSBhZGRkZWNsKHN0dWZmKQlzdHVmZgor I2Vsc2UKKyNkZWZpbmUgYWRkZGVjbChzdHVmZikKKyNlbmRpZgorCisjdW5kZWYgc3RyY2hyCS8q IGF2b2lkIEFJWCB3ZWlyZG5lc3MgKi8KKworI2lmbmRlZiBfX1NURENfXworI2RlZmluZSBjb25z dAkvKiovCitleHRlcm4gdm9pZCB0enNldCgpOworc3RhdGljIGludCB3ZWVrbnVtYmVyKCk7Cith ZGRkZWNsKHN0YXRpYyBpbnQgaXNvODYwMXdrbnVtKCk7KQorI2Vsc2UKK2V4dGVybiB2b2lkIHR6 c2V0KHZvaWQpOworc3RhdGljIGludCB3ZWVrbnVtYmVyKGNvbnN0IHN0cnVjdCB0bSAqdGltZXB0 ciwgaW50IGZpcnN0d2Vla2RheSk7CithZGRkZWNsKHN0YXRpYyBpbnQgaXNvODYwMXdrbnVtKGNv bnN0IHN0cnVjdCB0bSAqdGltZXB0cik7KQorI2VuZGlmCisKKyNpZmRlZiBTVERDX0hFQURFUlMK KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCitleHRlcm4g dm9pZCAqbWFsbG9jKCk7CitleHRlcm4gdm9pZCAqcmVhbGxvYygpOworZXh0ZXJuIGNoYXIgKmdl dGVudigpOworZXh0ZXJuIGNoYXIgKnN0cmNocigpOworI2VuZGlmCisKKyNkZWZpbmUgcmFuZ2Uo bG93LCBpdGVtLCBoaSkJbWF4KGxvdywgbWluKGl0ZW0sIGhpKSkKKworI2lmZGVmIF9fQ1lHV0lO X18KKyNkZWZpbmUgRExMX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorI2lm ZGVmIF9fV0lOMzJfXworI2RlZmluZSBETExfSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQor I2VuZGlmCisjaWZuZGVmIERMTF9JTVBPUlQKKyNkZWZpbmUgRExMX0lNUE9SVAorI2VuZGlmCisj aWYgIWRlZmluZWQoT1MyKSAmJiAhZGVmaW5lZChNU0RPUykgJiYgZGVmaW5lZChIQVZFX1RaTkFN RSkKK2V4dGVybiBETExfSU1QT1JUIGNoYXIgKnR6bmFtZVsyXTsKKyNpZmRlZiBIQVZFX0RBWUxJ R0hUCitleHRlcm4gRExMX0lNUE9SVCBpbnQgZGF5bGlnaHQ7CisjZW5kaWYKKyNpZmRlZiBIQVZF X1ZBUl9USU1FWk9ORQorZXh0ZXJuIERMTF9JTVBPUlQgVFlQRU9GX1ZBUl9USU1FWk9ORSB0aW1l em9uZTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVkFSX0FMVFpPTkUKK2V4dGVybiBETExfSU1QT1JU IFRZUEVPRl9WQVJfQUxUWk9ORSBhbHR6b25lOworI2VuZGlmCisjZW5kaWYKKworI3VuZGVmIG1p bgkvKiBqdXN0IGluIGNhc2UgKi8KKworLyogbWluIC0tLSByZXR1cm4gbWluaW11bSBvZiB0d28g bnVtYmVycyAqLworCisjaWZuZGVmIF9fU1REQ19fCitzdGF0aWMgaW5saW5lIGludAorbWluKGEs IGIpCitpbnQgYSwgYjsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludAorbWluKGludCBhLCBpbnQg YikKKyNlbmRpZgoreworCXJldHVybiAoYSA8IGIgPyBhIDogYik7Cit9CisKKyN1bmRlZiBtYXgJ LyogYWxzbywganVzdCBpbiBjYXNlICovCisKKy8qIG1heCAtLS0gcmV0dXJuIG1heGltdW0gb2Yg dHdvIG51bWJlcnMgKi8KKworI2lmbmRlZiBfX1NURENfXworc3RhdGljIGlubGluZSBpbnQKK21h eChhLCBiKQoraW50IGEsIGI7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQKK21heChpbnQgYSwg aW50IGIpCisjZW5kaWYKK3sKKwlyZXR1cm4gKGEgPiBiID8gYSA6IGIpOworfQorCisvKiBzdHJm dGltZSAtLS0gcHJvZHVjZSBmb3JtYXR0ZWQgdGltZSAqLworCitzaXplX3QKK3JiX3N0cmZ0aW1l KGNoYXIgKnMsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIGNvbnN0IHN0cnVj dCB0bSAqdGltZXB0ciwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cywgaW50IGdtdCkKK3sKKwlj aGFyICplbmRwID0gcyArIG1heHNpemU7CisJY2hhciAqc3RhcnQgPSBzOworCWF1dG8gY2hhciB0 YnVmWzEwMF07CisJbG9uZyBvZmY7CisJaW50IGksIHc7CisJbG9uZyB5OworCXN0YXRpYyBzaG9y dCBmaXJzdCA9IDE7CisjaWZkZWYgUE9TSVhfU0VNQU5USUNTCisJc3RhdGljIGNoYXIgKnNhdmV0 eiA9IE5VTEw7CisJc3RhdGljIGludCBzYXZldHpsZW4gPSAwOworCWNoYXIgKnR6OworI2VuZGlm IC8qIFBPU0lYX1NFTUFOVElDUyAqLworI2lmbmRlZiBIQVZFX1RNX1pPTkUKKyNpZm5kZWYgSEFW RV9UTV9OQU1FCisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RydWN0IHRpbWV6b25lIHpvbmU7Cisj ZW5kaWYgLyogSEFWRV9UTV9OQU1FICovCisjZW5kaWYgLyogSEFWRV9UTV9aT05FICovCisKKwkv KiB2YXJpb3VzIHRhYmxlcywgdXNlZnVsIGluIE5vcnRoIEFtZXJpY2EgKi8KKwlzdGF0aWMgY29u c3QgY2hhciAqZGF5c19hW10gPSB7CisJCSJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLAorCQki VGh1IiwgIkZyaSIsICJTYXQiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmRheXNfbFtdID0g eworCQkiU3VuZGF5IiwgIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsCisJCSJUaHVy c2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKm1v bnRoc19hW10gPSB7CisJCSJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIs CisJCSJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIsCisJfTsKKwlzdGF0 aWMgY29uc3QgY2hhciAqbW9udGhzX2xbXSA9IHsKKwkJIkphbnVhcnkiLCAiRmVicnVhcnkiLCAi TWFyY2giLCAiQXByaWwiLAorCQkiTWF5IiwgIkp1bmUiLCAiSnVseSIsICJBdWd1c3QiLCAiU2Vw dGVtYmVyIiwKKwkJIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiLAorCX07CisJc3Rh dGljIGNvbnN0IGNoYXIgKmFtcG1bXSA9IHsgIkFNIiwgIlBNIiwgfTsKKworCWlmIChzID09IE5V TEwgfHwgZm9ybWF0ID09IE5VTEwgfHwgdGltZXB0ciA9PSBOVUxMIHx8IG1heHNpemUgPT0gMCkK KwkJcmV0dXJuIDA7CisKKwkvKiBxdWljayBjaGVjayBpZiB3ZSBldmVuIG5lZWQgdG8gYm90aGVy ICovCisJaWYgKHN0cmNocihmb3JtYXQsICclJykgPT0gTlVMTCAmJiBzdHJsZW4oZm9ybWF0KSAr IDEgPj0gbWF4c2l6ZSkgeworCQllcnJubyA9IEVSQU5HRTsKKwkJcmV0dXJuIDA7CisJfQorCisj aWZuZGVmIFBPU0lYX1NFTUFOVElDUworCWlmIChmaXJzdCkgeworCQl0enNldCgpOworCQlmaXJz dCA9IDA7CisJfQorI2Vsc2UJLyogUE9TSVhfU0VNQU5USUNTICovCisJdHogPSBnZXRlbnYoIlRa Iik7CisJaWYgKGZpcnN0KSB7CisJCWlmICh0eiAhPSBOVUxMKSB7CisJCQlpbnQgdHpsZW4gPSBz dHJsZW4odHopOworCisJCQlzYXZldHogPSAoY2hhciAqKSBtYWxsb2ModHpsZW4gKyAxKTsKKwkJ CWlmIChzYXZldHogIT0gTlVMTCkgeworCQkJCXNhdmV0emxlbiA9IHR6bGVuICsgMTsKKwkJCQlz dHJjcHkoc2F2ZXR6LCB0eik7CisJCQl9CisJCX0KKwkJdHpzZXQoKTsKKwkJZmlyc3QgPSAwOwor CX0KKwkvKiBpZiB3ZSBoYXZlIGEgc2F2ZWQgVFosIGFuZCBpdCBpcyBkaWZmZXJlbnQsIHJlY2Fw dHVyZSBhbmQgcmVzZXQgKi8KKwlpZiAodHogJiYgc2F2ZXR6ICYmICh0elswXSAhPSBzYXZldHpb MF0gfHwgc3RyY21wKHR6LCBzYXZldHopICE9IDApKSB7CisJCWkgPSBzdHJsZW4odHopICsgMTsK KwkJaWYgKGkgPiBzYXZldHpsZW4pIHsKKwkJCXNhdmV0eiA9IChjaGFyICopIHJlYWxsb2Moc2F2 ZXR6LCBpKTsKKwkJCWlmIChzYXZldHopIHsKKwkJCQlzYXZldHpsZW4gPSBpOworCQkJCXN0cmNw eShzYXZldHosIHR6KTsKKwkJCX0KKwkJfSBlbHNlCisJCQlzdHJjcHkoc2F2ZXR6LCB0eik7CisJ CXR6c2V0KCk7CisJfQorI2VuZGlmCS8qIFBPU0lYX1NFTUFOVElDUyAqLworCisJZm9yICg7ICpm b3JtYXQgJiYgcyA8IGVuZHAgLSAxOyBmb3JtYXQrKykgeworCQl0YnVmWzBdID0gJ1wwJzsKKwkJ aWYgKCpmb3JtYXQgIT0gJyUnKSB7CisJCQkqcysrID0gKmZvcm1hdDsKKwkJCWNvbnRpbnVlOwor CQl9CisJYWdhaW46CisJCXN3aXRjaCAoKisrZm9ybWF0KSB7CisJCWNhc2UgJ1wwJzoKKwkJCSpz KysgPSAnJSc7CisJCQlnb3RvIG91dDsKKworCQljYXNlICclJzoKKwkJCSpzKysgPSAnJSc7CisJ CQljb250aW51ZTsKKworCQljYXNlICdhJzoJLyogYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lICov CisJCQlpZiAodGltZXB0ci0+dG1fd2RheSA8IDAgfHwgdGltZXB0ci0+dG1fd2RheSA+IDYpCisJ CQkJc3RyY3B5KHRidWYsICI/Iik7CisJCQllbHNlCisJCQkJc3RyY3B5KHRidWYsIGRheXNfYVt0 aW1lcHRyLT50bV93ZGF5XSk7CisJCQlicmVhazsKKworCQljYXNlICdBJzoJLyogZnVsbCB3ZWVr ZGF5IG5hbWUgKi8KKwkJCWlmICh0aW1lcHRyLT50bV93ZGF5IDwgMCB8fCB0aW1lcHRyLT50bV93 ZGF5ID4gNikKKwkJCQlzdHJjcHkodGJ1ZiwgIj8iKTsKKwkJCWVsc2UKKwkJCQlzdHJjcHkodGJ1 ZiwgZGF5c19sW3RpbWVwdHItPnRtX3dkYXldKTsKKwkJCWJyZWFrOworCisjaWZkZWYgU1lTVl9F WFQKKwkJY2FzZSAnaCc6CS8qIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUgKi8KKyNlbmRpZgorCQlj YXNlICdiJzoJLyogYWJicmV2aWF0ZWQgbW9udGggbmFtZSAqLworCQkJaWYgKHRpbWVwdHItPnRt X21vbiA8IDAgfHwgdGltZXB0ci0+dG1fbW9uID4gMTEpCisJCQkJc3RyY3B5KHRidWYsICI/Iik7 CisJCQllbHNlCisJCQkJc3RyY3B5KHRidWYsIG1vbnRoc19hW3RpbWVwdHItPnRtX21vbl0pOwor CQkJYnJlYWs7CisKKwkJY2FzZSAnQic6CS8qIGZ1bGwgbW9udGggbmFtZSAqLworCQkJaWYgKHRp bWVwdHItPnRtX21vbiA8IDAgfHwgdGltZXB0ci0+dG1fbW9uID4gMTEpCisJCQkJc3RyY3B5KHRi dWYsICI/Iik7CisJCQllbHNlCisJCQkJc3RyY3B5KHRidWYsIG1vbnRoc19sW3RpbWVwdHItPnRt X21vbl0pOworCQkJYnJlYWs7CisKKwkJY2FzZSAnYyc6CS8qIGFwcHJvcHJpYXRlIGRhdGUgYW5k IHRpbWUgcmVwcmVzZW50YXRpb24gKi8KKwkJCXN0cmZ0aW1lKHRidWYsIHNpemVvZiB0YnVmLCAi JWEgJWIgJWUgJUg6JU06JVMgJVkiLCB0aW1lcHRyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2Qn OgkvKiBkYXkgb2YgdGhlIG1vbnRoLCAwMSAtIDMxICovCisJCQlpID0gcmFuZ2UoMSwgdGltZXB0 ci0+dG1fbWRheSwgMzEpOworCQkJc3ByaW50Zih0YnVmLCAiJTAyZCIsIGkpOworCQkJYnJlYWs7 CisKKwkJY2FzZSAnSCc6CS8qIGhvdXIsIDI0LWhvdXIgY2xvY2ssIDAwIC0gMjMgKi8KKwkJCWkg PSByYW5nZSgwLCB0aW1lcHRyLT50bV9ob3VyLCAyMyk7CisJCQlzcHJpbnRmKHRidWYsICIlMDJk IiwgaSk7CisJCQlicmVhazsKKworCQljYXNlICdJJzoJLyogaG91ciwgMTItaG91ciBjbG9jaywg MDEgLSAxMiAqLworCQkJaSA9IHJhbmdlKDAsIHRpbWVwdHItPnRtX2hvdXIsIDIzKTsKKwkJCWlm IChpID09IDApCisJCQkJaSA9IDEyOworCQkJZWxzZSBpZiAoaSA+IDEyKQorCQkJCWkgLT0gMTI7 CisJCQlzcHJpbnRmKHRidWYsICIlMDJkIiwgaSk7CisJCQlicmVhazsKKworCQljYXNlICdqJzoJ LyogZGF5IG9mIHRoZSB5ZWFyLCAwMDEgLSAzNjYgKi8KKwkJCXNwcmludGYodGJ1ZiwgIiUwM2Qi LCB0aW1lcHRyLT50bV95ZGF5ICsgMSk7CisJCQlicmVhazsKKworCQljYXNlICdtJzoJLyogbW9u dGgsIDAxIC0gMTIgKi8KKwkJCWkgPSByYW5nZSgwLCB0aW1lcHRyLT50bV9tb24sIDExKTsKKwkJ CXNwcmludGYodGJ1ZiwgIiUwMmQiLCBpICsgMSk7CisJCQlicmVhazsKKworCQljYXNlICdNJzoJ LyogbWludXRlLCAwMCAtIDU5ICovCisJCQlpID0gcmFuZ2UoMCwgdGltZXB0ci0+dG1fbWluLCA1 OSk7CisJCQlzcHJpbnRmKHRidWYsICIlMDJkIiwgaSk7CisJCQlicmVhazsKKworCQljYXNlICdw JzoJLyogYW0gb3IgcG0gYmFzZWQgb24gMTItaG91ciBjbG9jayAqLworCQkJaSA9IHJhbmdlKDAs IHRpbWVwdHItPnRtX2hvdXIsIDIzKTsKKwkJCWlmIChpIDwgMTIpCisJCQkJc3RyY3B5KHRidWYs IGFtcG1bMF0pOworCQkJZWxzZQorCQkJCXN0cmNweSh0YnVmLCBhbXBtWzFdKTsKKwkJCWJyZWFr OworCisJCWNhc2UgJ1MnOgkvKiBzZWNvbmQsIDAwIC0gNjAgKi8KKwkJCWkgPSByYW5nZSgwLCB0 aW1lcHRyLT50bV9zZWMsIDYwKTsKKwkJCXNwcmludGYodGJ1ZiwgIiUwMmQiLCBpKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgJ1UnOgkvKiB3ZWVrIG9mIHllYXIsIFN1bmRheSBpcyBmaXJzdCBkYXkg b2Ygd2VlayAqLworCQkJc3ByaW50Zih0YnVmLCAiJTAyZCIsIHdlZWtudW1iZXIodGltZXB0ciwg MCkpOworCQkJYnJlYWs7CisKKwkJY2FzZSAndyc6CS8qIHdlZWtkYXksIFN1bmRheSA9PSAwLCAw IC0gNiAqLworCQkJaSA9IHJhbmdlKDAsIHRpbWVwdHItPnRtX3dkYXksIDYpOworCQkJc3ByaW50 Zih0YnVmLCAiJWQiLCBpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1cnOgkvKiB3ZWVrIG9mIHll YXIsIE1vbmRheSBpcyBmaXJzdCBkYXkgb2Ygd2VlayAqLworCQkJc3ByaW50Zih0YnVmLCAiJTAy ZCIsIHdlZWtudW1iZXIodGltZXB0ciwgMSkpOworCQkJYnJlYWs7CisKKwkJY2FzZSAneCc6CS8q IGFwcHJvcHJpYXRlIGRhdGUgcmVwcmVzZW50YXRpb24gKi8KKwkJCXN0cmZ0aW1lKHRidWYsIHNp emVvZiB0YnVmLCAiJW0vJWQvJXkiLCB0aW1lcHRyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1gn OgkvKiBhcHByb3ByaWF0ZSB0aW1lIHJlcHJlc2VudGF0aW9uICovCisJCQlzdHJmdGltZSh0YnVm LCBzaXplb2YgdGJ1ZiwgIiVIOiVNOiVTIiwgdGltZXB0cik7CisJCQlicmVhazsKKworCQljYXNl ICd5JzoJLyogeWVhciB3aXRob3V0IGEgY2VudHVyeSwgMDAgLSA5OSAqLworCQkJaSA9IHRpbWVw dHItPnRtX3llYXIgJSAxMDA7CisJCQlzcHJpbnRmKHRidWYsICIlMDJkIiwgaSk7CisJCQlicmVh azsKKworCQljYXNlICdZJzoJLyogeWVhciB3aXRoIGNlbnR1cnkgKi8KKwkJCXNwcmludGYodGJ1 ZiwgIiVsZCIsIDE5MDBMICsgdGltZXB0ci0+dG1feWVhcik7CisJCQlicmVhazsKKworI2lmZGVm IE1BSUxIRUFERVJfRVhUCisJCS8qCisJCSAqIEZyb206IENoaXAgUm9zZW50aGFsIDxjaGlwQGNo aW5hY2F0LnVuaWNvbS5jb20+CisJCSAqIERhdGU6IFN1biwgMTkgTWFyIDE5OTUgMDA6MzM6Mjkg LTA2MDAgKENTVCkKKwkJICogCisJCSAqIFdhcm5pbmc6IHRoZSAleiBbY29kZV0gaXMgaW1wbGVt ZW50ZWQgYnkgaW5zcGVjdGluZyB0aGUKKwkJICogdGltZXpvbmUgbmFtZSBjb25kaXRpb25hbCBj b21waWxlIHNldHRpbmdzLCBhbmQKKwkJICogaW5mZXJyaW5nIGEgbWV0aG9kIHRvIGdldCB0aW1l em9uZSBvZmZzZXRzLiBJJ3ZlIHRyaWVkCisJCSAqIHRoaXMgY29kZSBvbiBhIGNvdXBsZSBvZiBt YWNoaW5lcywgYnV0IEkgZG9uJ3QgZG91YnQKKwkJICogdGhlcmUgaXMgc29tZSBzeXN0ZW0gb3V0 IHRoZXJlIHRoYXQgd29uJ3QgbGlrZSBpdC4KKwkJICogTWF5YmUgdGhlIGVhc2llc3QgdGhpbmcg dG8gZG8gd291bGQgYmUgdG8gYnJhY2tldCB0aGlzCisJCSAqIHdpdGggYW4gI2lmZGVmIHRoYXQg Y2FuIHR1cm4gaXQgb2ZmLiBUaGUgJXogZmVhdHVyZQorCQkgKiB3b3VsZCBiZSBhbiBhZG1pdHRl ZGx5IG9ic2N1cmUgb25lIHRoYXQgbW9zdCBmb2xrcyBjYW4KKwkJICogbGl2ZSB3aXRob3V0LCBi dXQgaXQgd291bGQgYmUgYSBncmVhdCBoZWxwIHRvIHRob3NlIG9mCisJCSAqIHVzIHRoYXQgbXVj ayBhcm91bmQgd2l0aCB2YXJpb3VzIG1lc3NhZ2UgcHJvY2Vzc29ycy4KKwkJICovCisgCQljYXNl ICd6JzoJLyogdGltZSB6b25lIG9mZnNldCBlYXN0IG9mIEdNVCBlLmcuIC0wNjAwICovCisJCQlp ZiAoZ210KSB7CisJCQkgICAgc3RyY3B5KHRidWYsICIrMDAwMCIpOworCQkJICAgIGJyZWFrOwor CQkJfQorI2lmZGVmIEhBVkVfVE1fTkFNRQorCQkJLyoKKwkJCSAqIFN5c3RlbXMgd2l0aCB0bV9u YW1lIHByb2JhYmx5IGhhdmUgdG1fdHphZGogYXMKKwkJCSAqIHNlY3Mgd2VzdCBvZiBHTVQuICBD b252ZXJ0IHRvIG1pbnMgZWFzdCBvZiBHTVQuCisJCQkgKi8KKwkJCW9mZiA9IC10aW1lcHRyLT50 bV90emFkaiAvIDYwOworI2Vsc2UgLyogIUhBVkVfVE1fTkFNRSAqLworI2lmZGVmIEhBVkVfVE1f Wk9ORQorCQkJLyoKKwkJCSAqIFN5c3RlbXMgd2l0aCB0bV96b25lIHByb2JhYmx5IGhhdmUgdG1f Z210b2ZmIGFzCisJCQkgKiBzZWNzIGVhc3Qgb2YgR01ULiAgQ29udmVydCB0byBtaW5zIGVhc3Qg b2YgR01ULgorCQkJICovCisJCQlvZmYgPSB0aW1lcHRyLT50bV9nbXRvZmYgLyA2MDsKKyNlbHNl IC8qICFIQVZFX1RNX1pPTkUgKi8KKyNpZmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorCQkJZ2V0dGlt ZW9mZGF5KCZ0diwgJnpvbmUpOworCQkJb2ZmID0gLXpvbmUudHpfbWludXRlc3dlc3Q7CisjZWxz ZQorI2lmIEhBVkVfVkFSX1RJTUVaT05FCisjaWYgSEFWRV9WQVJfQUxUWk9ORQorCQkJb2ZmID0g LShkYXlsaWdodCA/IHRpbWV6b25lIDogYWx0em9uZSkgLyA2MDsKKyNlbHNlCisJCQlvZmYgPSAt dGltZXpvbmUgLyA2MDsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvKiAhSEFWRV9U TV9aT05FICovCisjZW5kaWYgLyogIUhBVkVfVE1fTkFNRSAqLworCQkJaWYgKG9mZiA8IDApIHsK KwkJCQl0YnVmWzBdID0gJy0nOworCQkJCW9mZiA9IC1vZmY7CisJCQl9IGVsc2UgeworCQkJCXRi dWZbMF0gPSAnKyc7CisJCQl9CisJCQlzcHJpbnRmKHRidWYrMSwgIiUwMnUlMDJ1IiwgKHVuc2ln bmVkKW9mZi82MCwgKHVuc2lnbmVkKW9mZiU2MCk7CisJCQlicmVhazsKKyNlbmRpZiAvKiBNQUlM SEVBREVSX0VYVCAqLworCisJCWNhc2UgJ1onOgkvKiB0aW1lIHpvbmUgbmFtZSBvciBhYmJyZXZh dGlvbiAqLworCQkJaWYgKGdtdCkgeworCQkJICAgIHN0cmNweSh0YnVmLCAiR01UIik7CisJCQkg ICAgYnJlYWs7CisJCQl9CisjaWZkZWYgSEFWRV9UWk5BTUUKKwkJCWkgPSAoZGF5bGlnaHQgJiYg dGltZXB0ci0+dG1faXNkc3QgPiAwKTsgLyogMCBvciAxICovCisJCQlzdHJjcHkodGJ1ZiwgdHpu YW1lW2ldKTsKKyNlbHNlCisjaWZkZWYgSEFWRV9UTV9aT05FCisJCQlzdHJjcHkodGJ1ZiwgdGlt ZXB0ci0+dG1fem9uZSk7CisjZWxzZQorI2lmZGVmIEhBVkVfVE1fTkFNRQorCQkJc3RyY3B5KHRi dWYsIHRpbWVwdHItPnRtX25hbWUpOworI2Vsc2UKKyNpZmRlZiBIQVZFX1RJTUVaT05FCisJCQln ZXR0aW1lb2ZkYXkoJiB0diwgJiB6b25lKTsKKyNpZmRlZiBUSU1FWk9ORV9WT0lECisJCQlzdHJj cHkodGJ1ZiwgdGltZXpvbmUoKSk7CisjZWxzZQorCQkJc3RyY3B5KHRidWYsIHRpbWV6b25lKHpv bmUudHpfbWludXRlc3dlc3QsCisJCQkJCQl0aW1lcHRyLT50bV9pc2RzdCA+IDApKTsKKyNlbmRp ZiAvKiBUSU1FWk9ORV9WT0lEICovCisjZW5kaWYgLyogSEFWRV9USU1FWk9ORSAqLworI2VuZGlm IC8qIEhBVkVfVE1fTkFNRSAqLworI2VuZGlmIC8qIEhBVkVfVE1fWk9ORSAqLworI2VuZGlmIC8q IEhBVkVfVFpOQU1FICovCisJCQlicmVhazsKKworI2lmZGVmIFNZU1ZfRVhUCisJCWNhc2UgJ24n OgkvKiBzYW1lIGFzIFxuICovCisJCQl0YnVmWzBdID0gJ1xuJzsKKwkJCXRidWZbMV0gPSAnXDAn OworCQkJYnJlYWs7CisKKwkJY2FzZSAndCc6CS8qIHNhbWUgYXMgXHQgKi8KKwkJCXRidWZbMF0g PSAnXHQnOworCQkJdGJ1ZlsxXSA9ICdcMCc7CisJCQlicmVhazsKKworCQljYXNlICdEJzoJLyog ZGF0ZSBhcyAlbS8lZC8leSAqLworCQkJc3RyZnRpbWUodGJ1Ziwgc2l6ZW9mIHRidWYsICIlbS8l ZC8leSIsIHRpbWVwdHIpOworCQkJYnJlYWs7CisKKwkJY2FzZSAnZSc6CS8qIGRheSBvZiBtb250 aCwgYmxhbmsgcGFkZGVkICovCisJCQlzcHJpbnRmKHRidWYsICIlMmQiLCByYW5nZSgxLCB0aW1l cHRyLT50bV9tZGF5LCAzMSkpOworCQkJYnJlYWs7CisKKwkJY2FzZSAncic6CS8qIHRpbWUgYXMg JUk6JU06JVMgJXAgKi8KKwkJCXN0cmZ0aW1lKHRidWYsIHNpemVvZiB0YnVmLCAiJUk6JU06JVMg JXAiLCB0aW1lcHRyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1InOgkvKiB0aW1lIGFzICVIOiVN ICovCisJCQlzdHJmdGltZSh0YnVmLCBzaXplb2YgdGJ1ZiwgIiVIOiVNIiwgdGltZXB0cik7CisJ CQlicmVhazsKKworCQljYXNlICdUJzoJLyogdGltZSBhcyAlSDolTTolUyAqLworCQkJc3RyZnRp bWUodGJ1Ziwgc2l6ZW9mIHRidWYsICIlSDolTTolUyIsIHRpbWVwdHIpOworCQkJYnJlYWs7Cisj ZW5kaWYKKworI2lmZGVmIFNVTk9TX0VYVAorCQljYXNlICdrJzoJLyogaG91ciwgMjQtaG91ciBj bG9jaywgYmxhbmsgcGFkICovCisJCQlzcHJpbnRmKHRidWYsICIlMmQiLCByYW5nZSgwLCB0aW1l cHRyLT50bV9ob3VyLCAyMykpOworCQkJYnJlYWs7CisKKwkJY2FzZSAnbCc6CS8qIGhvdXIsIDEy LWhvdXIgY2xvY2ssIDEgLSAxMiwgYmxhbmsgcGFkICovCisJCQlpID0gcmFuZ2UoMCwgdGltZXB0 ci0+dG1faG91ciwgMjMpOworCQkJaWYgKGkgPT0gMCkKKwkJCQlpID0gMTI7CisJCQllbHNlIGlm IChpID4gMTIpCisJCQkJaSAtPSAxMjsKKwkJCXNwcmludGYodGJ1ZiwgIiUyZCIsIGkpOworCQkJ YnJlYWs7CisjZW5kaWYKKworCisjaWZkZWYgVk1TX0VYVAorCQljYXNlICd2JzoJLyogZGF0ZSBh cyBkZC1iYmItWVlZWSAqLworCQkJc3ByaW50Zih0YnVmLCAiJTJkLSUzLjNzLSU0bGQiLAorCQkJ CXJhbmdlKDEsIHRpbWVwdHItPnRtX21kYXksIDMxKSwKKwkJCQltb250aHNfYVtyYW5nZSgwLCB0 aW1lcHRyLT50bV9tb24sIDExKV0sCisJCQkJdGltZXB0ci0+dG1feWVhciArIDE5MDBMKTsKKwkJ CWZvciAoaSA9IDM7IGkgPCA2OyBpKyspCisJCQkJaWYgKGlzbG93ZXIodGJ1ZltpXSkpCisJCQkJ CXRidWZbaV0gPSB0b3VwcGVyKHRidWZbaV0pOworCQkJYnJlYWs7CisjZW5kaWYKKworCisjaWZk ZWYgUE9TSVgyX0RBVEUKKwkJY2FzZSAnQyc6CisJCQlzcHJpbnRmKHRidWYsICIlMDJsZCIsICh0 aW1lcHRyLT50bV95ZWFyICsgMTkwMEwpIC8gMTAwKTsKKwkJCWJyZWFrOworCisKKwkJY2FzZSAn RSc6CisJCWNhc2UgJ08nOgorCQkJLyogUE9TSVggbG9jYWxlIGV4dGVuc2lvbnMsIGlnbm9yZWQg Zm9yIG5vdyAqLworCQkJZ290byBhZ2FpbjsKKworCQljYXNlICdWJzoJLyogd2VlayBvZiB5ZWFy IGFjY29yZGluZyBJU08gODYwMSAqLworCQkJc3ByaW50Zih0YnVmLCAiJTAyZCIsIGlzbzg2MDF3 a251bSh0aW1lcHRyKSk7CisJCQlicmVhazsKKworCQljYXNlICd1JzoKKwkJLyogSVNPIDg2MDE6 IFdlZWtkYXkgYXMgYSBkZWNpbWFsIG51bWJlciBbMSAoTW9uZGF5KSAtIDddICovCisJCQlzcHJp bnRmKHRidWYsICIlZCIsIHRpbWVwdHItPnRtX3dkYXkgPT0gMCA/IDcgOgorCQkJCQl0aW1lcHRy LT50bV93ZGF5KTsKKwkJCWJyZWFrOworI2VuZGlmCS8qIFBPU0lYMl9EQVRFICovCisKKyNpZmRl ZiBJU09fREFURV9FWFQKKwkJY2FzZSAnRyc6CisJCWNhc2UgJ2cnOgorCQkJLyoKKwkJCSAqIFll YXIgb2YgSVNPIHdlZWsuCisJCQkgKgorCQkJICogSWYgaXQncyBEZWNlbWJlciBidXQgdGhlIElT TyB3ZWVrIG51bWJlciBpcyBvbmUsCisJCQkgKiB0aGF0IHdlZWsgaXMgaW4gbmV4dCB5ZWFyLgor CQkJICogSWYgaXQncyBKYW51YXJ5IGJ1dCB0aGUgSVNPIHdlZWsgbnVtYmVyIGlzIDUyIG9yCisJ CQkgKiA1MywgdGhhdCB3ZWVrIGlzIGluIGxhc3QgeWVhci4KKwkJCSAqIE90aGVyd2lzZSwgaXQn cyB0aGlzIHllYXIuCisJCQkgKi8KKwkJCXcgPSBpc284NjAxd2tudW0odGltZXB0cik7CisJCQlp ZiAodGltZXB0ci0+dG1fbW9uID09IDExICYmIHcgPT0gMSkKKwkJCQl5ID0gMTkwMEwgKyB0aW1l cHRyLT50bV95ZWFyICsgMTsKKwkJCWVsc2UgaWYgKHRpbWVwdHItPnRtX21vbiA9PSAwICYmIHcg Pj0gNTIpCisJCQkJeSA9IDE5MDBMICsgdGltZXB0ci0+dG1feWVhciAtIDE7CisJCQllbHNlCisJ CQkJeSA9IDE5MDBMICsgdGltZXB0ci0+dG1feWVhcjsKKworCQkJaWYgKCpmb3JtYXQgPT0gJ0cn KQorCQkJCXNwcmludGYodGJ1ZiwgIiVsZCIsIHkpOworCQkJZWxzZQorCQkJCXNwcmludGYodGJ1 ZiwgIiUwMmxkIiwgeSAlIDEwMCk7CisJCQlicmVhazsKKyNlbmRpZiAvKiBJU09fREFURV9FWFQg Ki8KKworCQljYXNlICdMJzoJLyogbWlsbGlzZWNvbmQsIDAwMCAtIDk5OSAqLworCQkJc3ByaW50 Zih0YnVmLCAiJTAzbGQiLCB0cy0+dHZfbnNlYyAvIDEwMDAwMDApOworCQkJYnJlYWs7CisKKwkJ Y2FzZSAnTic6CS8qIG5hbm9zZWNvbmQsIDAwMDAwMDAwMCAtIDk5OTk5OTk5OSAqLworCQkJc3By aW50Zih0YnVmLCAiJTA5bGQiLCB0cy0+dHZfbnNlYyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJdGJ1ZlswXSA9ICclJzsKKwkJCXRidWZbMV0gPSAqZm9ybWF0OworCQkJdGJ1ZlsyXSA9 ICdcMCc7CisJCQlicmVhazsKKwkJfQorCQlpID0gc3RybGVuKHRidWYpOworCQlpZiAoaSkgewor CQkJaWYgKHMgKyBpIDwgZW5kcCAtIDEpIHsKKwkJCQlzdHJjcHkocywgdGJ1Zik7CisJCQkJcyAr PSBpOworCQkJfSBlbHNlIHsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCQlyZXR1cm4gMDsKKwkJ CX0KKwkJfQorCX0KK291dDoKKwlpZiAocyA+PSBlbmRwKSB7CisJCWVycm5vID0gRVJBTkdFOwor CQlyZXR1cm4gMDsKKwl9CisJaWYgKCpmb3JtYXQgPT0gJ1wwJykgeworCQkqcyA9ICdcMCc7CisJ CXJldHVybiAocyAtIHN0YXJ0KTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIGlzbGVh cCAtLS0gaXMgYSB5ZWFyIGEgbGVhcCB5ZWFyPyAqLworCisjaWZuZGVmIF9fU1REQ19fCitzdGF0 aWMgaW50Citpc2xlYXAoeWVhcikKK2xvbmcgeWVhcjsKKyNlbHNlCitzdGF0aWMgaW50Citpc2xl YXAobG9uZyB5ZWFyKQorI2VuZGlmCit7CisJcmV0dXJuICgoeWVhciAlIDQgPT0gMCAmJiB5ZWFy ICUgMTAwICE9IDApIHx8IHllYXIgJSA0MDAgPT0gMCk7Cit9CisKKworI2lmZGVmIFBPU0lYMl9E QVRFCisvKiBpc284NjAxd2tudW0gLS0tIGNvbXB1dGUgd2VlayBudW1iZXIgYWNjb3JkaW5nIHRv IElTTyA4NjAxICovCisKKyNpZm5kZWYgX19TVERDX18KK3N0YXRpYyBpbnQKK2lzbzg2MDF3a251 bSh0aW1lcHRyKQorY29uc3Qgc3RydWN0IHRtICp0aW1lcHRyOworI2Vsc2UKK3N0YXRpYyBpbnQK K2lzbzg2MDF3a251bShjb25zdCBzdHJ1Y3QgdG0gKnRpbWVwdHIpCisjZW5kaWYKK3sKKwkvKgor CSAqIEZyb20gMTAwMy4yOgorCSAqCUlmIHRoZSB3ZWVrIChNb25kYXkgdG8gU3VuZGF5KSBjb250 YWluaW5nIEphbnVhcnkgMQorCSAqCWhhcyBmb3VyIG9yIG1vcmUgZGF5cyBpbiB0aGUgbmV3IHll YXIsIHRoZW4gaXQgaXMgd2VlayAxOworCSAqCW90aGVyd2lzZSBpdCBpcyB0aGUgaGlnaGVzdCBu dW1iZXJlZCB3ZWVrIG9mIHRoZSBwcmV2aW91cworCSAqCXllYXIgKDUyIG9yIDUzKSwgYW5kIHRo ZSBuZXh0IHdlZWsgaXMgd2VlayAxLgorCSAqCisJICogQURSOiBUaGlzIG1lYW5zIGlmIEphbiAx IHdhcyBNb25kYXkgdGhyb3VnaCBUaHVyc2RheSwKKwkgKglpdCB3YXMgd2VlayAxLCBvdGhlcndp c2Ugd2VlayA1MiBvciA1My4KKwkgKgorCSAqIFhQRzQgZXJyb25lb3VzbHkgaW5jbHVkZWQgUE9T SVguMiByYXRpb25hbGUgdGV4dCBpbiB0aGUKKwkgKiBtYWluIGJvZHkgb2YgdGhlIHN0YW5kYXJk LiBUaHVzIGl0IHJlcXVpcmVzIHdlZWsgNTMuCisJICovCisKKwlpbnQgd2Vla251bSwgamFuMWRh eTsKKworCS8qIGdldCB3ZWVrIG51bWJlciwgTW9uZGF5IGFzIGZpcnN0IGRheSBvZiB0aGUgd2Vl ayAqLworCXdlZWtudW0gPSB3ZWVrbnVtYmVyKHRpbWVwdHIsIDEpOworCisJLyoKKwkgKiBXaXRo IHRoYW5rcyBhbmQgdGlwIG9mIHRoZSBoYXRsbyB0byB0bWxAdGlrLnZ0dC5maQorCSAqCisJICog V2hhdCBkYXkgb2YgdGhlIHdlZWsgZG9lcyBKYW51YXJ5IDEgZmFsbCBvbj8KKwkgKiBXZSBrbm93 IHRoYXQKKwkgKgkodGltZXB0ci0+dG1feWRheSAtIGphbjEudG1feWRheSkgTU9EIDcgPT0KKwkg KgkJKHRpbWVwdHItPnRtX3dkYXkgLSBqYW4xLnRtX3dkYXkpIE1PRCA3CisJICogYW5kIHRoYXQK KwkgKiAJamFuMS50bV95ZGF5ID09IDAKKwkgKiBhbmQgdGhhdAorCSAqIAl0aW1lcHRyLT50bV93 ZGF5IE1PRCA3ID09IHRpbWVwdHItPnRtX3dkYXkKKwkgKiBmcm9tIHdoaWNoIGl0IGZvbGxvd3Mg dGhhdC4gLiAuCisgCSAqLworCWphbjFkYXkgPSB0aW1lcHRyLT50bV93ZGF5IC0gKHRpbWVwdHIt PnRtX3lkYXkgJSA3KTsKKwlpZiAoamFuMWRheSA8IDApCisJCWphbjFkYXkgKz0gNzsKKworCS8q CisJICogSWYgSmFuIDEgd2FzIGEgTW9uZGF5IHRocm91Z2ggVGh1cnNkYXksIGl0IHdhcyBpbgor CSAqIHdlZWsgMS4gIE90aGVyd2lzZSBpdCB3YXMgbGFzdCB5ZWFyJ3MgaGlnaGVzdCB3ZWVrLCB3 aGljaCBpcworCSAqIHRoaXMgeWVhcidzIHdlZWsgMC4KKwkgKgorCSAqIFdoYXQgZG9lcyB0aGF0 IG1lYW4/CisJICogSWYgSmFuIDEgd2FzIE1vbmRheSwgdGhlIHdlZWsgbnVtYmVyIGlzIGV4YWN0 bHkgcmlnaHQsIGl0IGNhbgorCSAqCW5ldmVyIGJlIDAuCisJICogSWYgaXQgd2FzIFR1ZXNkYXkg dGhyb3VnaCBUaHVyc2RheSwgdGhlIHdlZWtudW1iZXIgaXMgb25lCisJICoJbGVzcyB0aGFuIGl0 IHNob3VsZCBiZSwgc28gd2UgYWRkIG9uZS4KKwkgKiBPdGhlcndpc2UsIEZyaWRheSwgU2F0dXJk YXkgb3IgU3VuZGF5LCB0aGUgd2VlayBudW1iZXIgaXMKKwkgKiBPSywgYnV0IGlmIGl0IGlzIDAs IGl0IG5lZWRzIHRvIGJlIDUyIG9yIDUzLgorCSAqLworCXN3aXRjaCAoamFuMWRheSkgeworCWNh c2UgMToJCS8qIE1vbmRheSAqLworCQlicmVhazsKKwljYXNlIDI6CQkvKiBUdWVzZGF5ICovCisJ Y2FzZSAzOgkJLyogV2VkbmVzZGF5ICovCisJY2FzZSA0OgkJLyogVGh1cnNkYXkgKi8KKwkJd2Vl a251bSsrOworCQlicmVhazsKKwljYXNlIDU6CQkvKiBGcmlkYXkgKi8KKwljYXNlIDY6CQkvKiBT YXR1cmRheSAqLworCWNhc2UgMDoJCS8qIFN1bmRheSAqLworCQlpZiAod2Vla251bSA9PSAwKSB7 CisjaWZkZWYgVVNFX0JST0tFTl9YUEc0CisJCQkvKiBYUEc0IChhcyBvZiBNYXJjaCAxOTk0KSBz YXlzIDUzIHVuY29uZGl0aW9uYWxseSAqLworCQkJd2Vla251bSA9IDUzOworI2Vsc2UKKwkJCS8q IGdldCB3ZWVrIG51bWJlciBvZiBsYXN0IHdlZWsgb2YgbGFzdCB5ZWFyICovCisJCQlzdHJ1Y3Qg dG0gZGVjMzFseTsJLyogMTIvMzEgbGFzdCB5ZWFyICovCisJCQlkZWMzMWx5ID0gKnRpbWVwdHI7 CisJCQlkZWMzMWx5LnRtX3llYXItLTsKKwkJCWRlYzMxbHkudG1fbW9uID0gMTE7CisJCQlkZWMz MWx5LnRtX21kYXkgPSAzMTsKKwkJCWRlYzMxbHkudG1fd2RheSA9IChqYW4xZGF5ID09IDApID8g NiA6IGphbjFkYXkgLSAxOworCQkJZGVjMzFseS50bV95ZGF5ID0gMzY0ICsgaXNsZWFwKGRlYzMx bHkudG1feWVhciArIDE5MDBMKTsKKwkJCXdlZWtudW0gPSBpc284NjAxd2tudW0oJiBkZWMzMWx5 KTsKKyNlbmRpZgorCQl9CisJCWJyZWFrOworCX0KKworCWlmICh0aW1lcHRyLT50bV9tb24gPT0g MTEpIHsKKwkJLyoKKwkJICogVGhlIGxhc3Qgd2VlayBvZiB0aGUgeWVhcgorCQkgKiBjYW4gYmUg aW4gd2VlayAxIG9mIG5leHQgeWVhci4KKwkJICogU2lnaC4KKwkJICoKKwkJICogVGhpcyBjYW4g b25seSBoYXBwZW4gaWYKKwkJICoJTSAgIFQgIFcKKwkJICoJMjkgIDMwIDMxCisJCSAqCTMwICAz MQorCQkgKgkzMQorCQkgKi8KKwkJaW50IHdkYXksIG1kYXk7CisKKwkJd2RheSA9IHRpbWVwdHIt PnRtX3dkYXk7CisJCW1kYXkgPSB0aW1lcHRyLT50bV9tZGF5OworCQlpZiAoICAgKHdkYXkgPT0g MSAmJiAobWRheSA+PSAyOSAmJiBtZGF5IDw9IDMxKSkKKwkJICAgIHx8ICh3ZGF5ID09IDIgJiYg KG1kYXkgPT0gMzAgfHwgbWRheSA9PSAzMSkpCisJCSAgICB8fCAod2RheSA9PSAzICYmICBtZGF5 ID09IDMxKSkKKwkJCXdlZWtudW0gPSAxOworCX0KKworCXJldHVybiB3ZWVrbnVtOworfQorI2Vu ZGlmCisKKy8qIHdlZWtudW1iZXIgLS0tIGZpZ3VyZSBob3cgbWFueSB3ZWVrcyBpbnRvIHRoZSB5 ZWFyICovCisKKy8qIFdpdGggdGhhbmtzIGFuZCB0aXAgb2YgdGhlIGhhdGxvIHRvIGFkb0BlbHNp ZS5uY2kubmloLmdvdiAqLworCisjaWZuZGVmIF9fU1REQ19fCitzdGF0aWMgaW50Cit3ZWVrbnVt YmVyKHRpbWVwdHIsIGZpcnN0d2Vla2RheSkKK2NvbnN0IHN0cnVjdCB0bSAqdGltZXB0cjsKK2lu dCBmaXJzdHdlZWtkYXk7CisjZWxzZQorc3RhdGljIGludAord2Vla251bWJlcihjb25zdCBzdHJ1 Y3QgdG0gKnRpbWVwdHIsIGludCBmaXJzdHdlZWtkYXkpCisjZW5kaWYKK3sKKwlpbnQgd2RheSA9 IHRpbWVwdHItPnRtX3dkYXk7CisJaW50IHJldDsKKworCWlmIChmaXJzdHdlZWtkYXkgPT0gMSkg eworCQlpZiAod2RheSA9PSAwKQkvKiBzdW5kYXkgKi8KKwkJCXdkYXkgPSA2OworCQllbHNlCisJ CQl3ZGF5LS07CisJfQorCXJldCA9ICgodGltZXB0ci0+dG1feWRheSArIDcgLSB3ZGF5KSAvIDcp OworCWlmIChyZXQgPCAwKQorCQlyZXQgPSAwOworCXJldHVybiByZXQ7Cit9CisKKyNpZiAwCisv KiBBRFIgLS0tIEknbSBsb2F0aGUgdG8gbWVzcyB3aXRoIGFkbydzIGNvZGUgLi4uICovCisKK0Rh dGU6ICAgICAgICAgV2VkLCAyNCBBcHIgOTEgMjA6NTQ6MDggTURUCitGcm9tOiBNaWNoYWwgSmFl Z2VybWFubiA8YXVkZmF4IWVtb3J5IXZtLnVjcy5VQWxiZXJ0YS5DQSFOVE9NQ1pBSz4KK1RvOiBh cm5vbGRAYXVkaW9mYXguY29tCisKK0hpIEFybm9sZCwKK2luIGEgcHJvY2VzcyBvZiBmaXhpbmcg b2Ygc3RyZnRpbWUoKSBpbiBsaWJyYXJpZXMgb24gQXRhcmkgU1QgSSBncmFiYmVkCitzb21lIHBp ZWNlcyBvZiBjb2RlIGZyb20geW91ciBvd24gc3RyZnRpbWUuICBXaGVuIGRvaW5nIHRoYXQgaXQg Y2FtZQordG8gbWluZCB0aGF0IHlvdXIgd2Vla251bWJlcigpIGZ1bmN0aW9uIGNvbXBpbGVzIGEg bGl0dGxlIGJpdCBuaWNlcgoraW4gdGhlIGZvbGxvd2luZyBmb3JtOgorLyoKKyAqIGZpcnN0d2Vl a2RheSBpcyAwIGlmIHN0YXJ0aW5nIGluIFN1bmRheSwgbm9uLXplcm8gaWYgaW4gTW9uZGF5Cisg Ki8KK3sKKyAgICByZXR1cm4gKHRpbWVwdHItPnRtX3lkYXkgLSB0aW1lcHRyLT50bV93ZGF5ICsK KwkgICAgKGZpcnN0d2Vla2RheSA/ICh0aW1lcHRyLT50bV93ZGF5ID8gOCA6IDEpIDogNykpIC8g NzsKK30KK0hvdyBuaWNlciBpdCBkZXBlbmRzIG9uIGEgY29tcGlsZXIsIG9mIGNvdXJzZSwgYnV0 IGFsd2F5cyBhIHRpbnkgYml0LgorCisgICBDaGVlcnMsCisgICBNaWNoYWwKKyAgIG50b21jemFr QHZtLnVjcy51YWxiZXJ0YS5jYQorI2VuZGlmCisKKyNpZmRlZglURVNUX1NUUkZUSU1FCisKKy8q CisgKiBOQU1FOgorICoJdHN0CisgKgorICogU1lOT1BTSVM6CisgKgl0c3QKKyAqCisgKiBERVND UklQVElPTjoKKyAqCSJ0c3QiIGlzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBmdW5jdGlvbiAic3Ry ZnRpbWUiLgorICoKKyAqIE9QVElPTlM6CisgKglOb25lLgorICoKKyAqIEFVVEhPUjoKKyAqCUth cmwgVm9nZWwKKyAqCUNvbnRyb2wgRGF0YSBTeXN0ZW1zLCBJbmMuCisgKgl2b2dlbGtlQGMtMTdp Z3Aud3BhZmIuYWYubWlsCisgKgorICogQlVHUzoKKyAqCU5vbmUgbm90aWNlZCB5ZXQuCisgKgor ICogQ09NUElMRToKKyAqCWNjIC1vIHRzdCAtRFRFU1RfU1RSRlRJTUUgc3RyZnRpbWUuYworICov CisKKy8qIEFEUjogSSByZWZvcm1hdHRlZCB0aGlzIHRvIG15IGxpa2luZywgYW5kIGRlbGV0ZWQg c29tZSB1bm5lZWRlZCBjb2RlLiAqLworCisjaWZuZGVmIE5VTEwKKyNpbmNsdWRlCTxzdGRpby5o PgorI2VuZGlmCisjaW5jbHVkZQk8c3lzL3RpbWUuaD4KKyNpbmNsdWRlCTxzdHJpbmcuaD4KKwor I2RlZmluZQkJTUFYVElNRQkJMTMyCisKKy8qCisgKiBBcnJheSBvZiB0aW1lIGZvcm1hdHMuCisg Ki8KKworc3RhdGljIGNoYXIgKmFycmF5W10gPQoreworCSIoJSVBKSAgICAgIGZ1bGwgd2Vla2Rh eSBuYW1lLCB2YXIgbGVuZ3RoIChTdW5kYXkuLlNhdHVyZGF5KSAgJUEiLAorCSIoJSVCKSAgICAg ICBmdWxsIG1vbnRoIG5hbWUsIHZhciBsZW5ndGggKEphbnVhcnkuLkRlY2VtYmVyKSAgJUIiLAor CSIoJSVDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Vu dHVyeSAgJUMiLAorCSIoJSVEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGUgKCUlbS8lJWQvJSV5KSAgJUQiLAorCSIoJSVFKSAgICAgICAgICAgICAgICAgICAgICAg ICAgIExvY2FsZSBleHRlbnNpb25zIChpZ25vcmVkKSAgJUUiLAorCSIoJSVIKSAgICAgICAgICAg ICAgICAgICAgICAgICAgaG91ciAoMjQtaG91ciBjbG9jaywgMDAuLjIzKSAgJUgiLAorCSIoJSVJ KSAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciAoMTItaG91ciBjbG9jaywgMDEuLjEyKSAg JUkiLAorCSIoJSVNKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0 ZSAoMDAuLjU5KSAgJU0iLAorCSIoJSVPKSAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2Fs ZSBleHRlbnNpb25zIChpZ25vcmVkKSAgJU8iLAorCSIoJSVSKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRpbWUsIDI0LWhvdXIgKCUlSDolJU0pICAlUiIsCisJIiglJVMpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kICgwMC4uNjApICAlUyIsCisJ IiglJVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSwgMjQtaG91ciAoJSVIOiUl TTolJVMpICAlVCIsCisJIiglJVUpICAgIHdlZWsgb2YgeWVhciwgU3VuZGF5IGFzIGZpcnN0IGRh eSBvZiB3ZWVrICgwMC4uNTMpICAlVSIsCisJIiglJVYpICAgICAgICAgICAgICAgICAgICB3ZWVr IG9mIHllYXIgYWNjb3JkaW5nIHRvIElTTyA4NjAxICAlViIsCisJIiglJVcpICAgIHdlZWsgb2Yg eWVhciwgTW9uZGF5IGFzIGZpcnN0IGRheSBvZiB3ZWVrICgwMC4uNTMpICAlVyIsCisJIiglJVgp ICAgICBhcHByb3ByaWF0ZSBsb2NhbGUgdGltZSByZXByZXNlbnRhdGlvbiAoJUg6JU06JVMpICAl WCIsCisJIiglJVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhciB3aXRoIGNlbnR1cnkg KDE5NzAuLi4pICAlWSIsCisJIiglJVopIHRpbWV6b25lIChFRFQpLCBvciBibGFuayBpZiB0aW1l em9uZSBub3QgZGV0ZXJtaW5hYmxlICAlWiIsCisJIiglJWEpICAgICAgICAgIGxvY2FsZSdzIGFi YnJldmlhdGVkIHdlZWtkYXkgbmFtZSAoU3VuLi5TYXQpICAlYSIsCisJIiglJWIpICAgICAgICAg ICAgbG9jYWxlJ3MgYWJicmV2aWF0ZWQgbW9udGggbmFtZSAoSmFuLi5EZWMpICAlYiIsCisJIigl JWMpICAgICAgICAgICBmdWxsIGRhdGUgKFNhdCBOb3YgIDQgMTI6MDI6MzMgMTk4OSklbiV0JXQl dCAgJWMiLAorCSIoJSVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5IG9mIHRoZSBt b250aCAoMDEuLjMxKSAgJWQiLAorCSIoJSVlKSAgICAgICAgICAgICAgIGRheSBvZiB0aGUgbW9u dGgsIGJsYW5rLXBhZGRlZCAoIDEuLjMxKSAgJWUiLAorCSIoJSVoKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNhbWUgYXMgKCUlYikgICVoIiwKKwkiKCUlaikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGF5IG9mIHRoZSB5ZWFyICgwMDEuLjM2NikgICVqIiwK KwkiKCUlaykgICAgICAgICAgICAgICBob3VyLCAyNC1ob3VyIGNsb2NrLCBibGFuayBwYWQgKCAw Li4yMykgICVrIiwKKwkiKCUlbCkgICAgICAgICAgICAgICBob3VyLCAxMi1ob3VyIGNsb2NrLCBi bGFuayBwYWQgKCAwLi4xMikgICVsIiwKKwkiKCUlbSkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbW9udGggKDAxLi4xMikgICVtIiwKKwkiKCUlcCkgICAgICAgICAgICAg IGxvY2FsZSdzIEFNIG9yIFBNIGJhc2VkIG9uIDEyLWhvdXIgY2xvY2sgICVwIiwKKwkiKCUlcikg ICAgICAgICAgICAgICAgICAgdGltZSwgMTItaG91ciAoc2FtZSBhcyAlJUk6JSVNOiUlUyAlJXAp ICAlciIsCisJIiglJXUpIElTTyA4NjAxOiBXZWVrZGF5IGFzIGRlY2ltYWwgbnVtYmVyIFsxIChN b25kYXkpIC0gN10gICAldSIsCisJIiglJXYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWTVMgZGF0ZSAoZGQtYmJiLVlZWVkpICAldiIsCisJIiglJXcpICAgICAgICAgICAgICAgICAg ICAgICBkYXkgb2Ygd2VlayAoMC4uNiwgU3VuZGF5ID09IDApICAldyIsCisJIiglJXgpICAgICAg ICAgICAgICAgIGFwcHJvcHJpYXRlIGxvY2FsZSBkYXRlIHJlcHJlc2VudGF0aW9uICAleCIsCisJ IiglJXkpICAgICAgICAgICAgICAgICAgICAgIGxhc3QgdHdvIGRpZ2l0cyBvZiB5ZWFyICgwMC4u OTkpICAleSIsCisJIiglJXopICAgICAgdGltZXpvbmUgb2Zmc2V0IGVhc3Qgb2YgR01UIGFzIEhI TU0gKGUuZy4gLTA1MDApICAleiIsCisJKGNoYXIgKikgTlVMTAorfTsKKworLyogbWFpbiByb3V0 aW5lLiAqLworCitpbnQKK21haW4oYXJnYywgYXJndikKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7 Cit7CisJbG9uZyB0aW1lKCk7CisKKwljaGFyICpuZXh0OworCWNoYXIgc3RyaW5nW01BWFRJTUVd OworCisJaW50IGs7CisJaW50IGxlbmd0aDsKKworCXN0cnVjdCB0bSAqdG07CisKKwlsb25nIGNs b2NrOworCisJLyogQ2FsbCB0aGUgZnVuY3Rpb24uICovCisKKwljbG9jayA9IHRpbWUoKGxvbmcg KikgMCk7CisJdG0gPSBsb2NhbHRpbWUoJmNsb2NrKTsKKworCWZvciAoayA9IDA7IG5leHQgPSBh cnJheVtrXTsgaysrKSB7CisJCWxlbmd0aCA9IHN0cmZ0aW1lKHN0cmluZywgTUFYVElNRSwgbmV4 dCwgdG0pOworCQlwcmludGYoIiVzXG4iLCBzdHJpbmcpOworCX0KKworCWV4aXQoMCk7Cit9Cisj ZW5kaWYJLyogVEVTVF9TVFJGVElNRSAqLwpJbmRleDogdGVzdC9ydWJ5L3Rlc3RfdGltZS5yYgo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSB0ZXN0L3J1YnkvdGVzdF90aW1lLnJiCShyZXZpc2lvbiAxODcyOSkKKysr IHRlc3QvcnVieS90ZXN0X3RpbWUucmIJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw1ICszNzksOSBA QAogICAgIGFzc2VydF9lcXVhbCgiZm9vIiAqIDEwMDAsIFQyMDAwLnN0cmZ0aW1lKCJmb28iICog MTAwMCkpCiAKICAgICBhc3NlcnRfZXF1YWwoIlNhdCIsIFRpbWUuYXQoOTQ2Njg0ODAwKS5zdHJm dGltZSgiJWEiKSkKKworICAgIHQgPSBUaW1lLmF0KDk0NjY4NDgwMCwgMTIzNDU2Ljc4OSkKKyAg ICBhc3NlcnRfZXF1YWwoIjEyMyIsIHQuc3RyZnRpbWUoIiVMIikpCisgICAgYXNzZXJ0X2VxdWFs KCIxMjM0NTY3ODkiLCB0LnN0cmZ0aW1lKCIlTiIpKQogICBlbmQKIGVuZAo= ------=_Part_48430_22090865.1219242497496--