ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGU5MGUyYzMuLjkyN2M4OWMgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSw1ICsxLDYgQEAKIGdpdAogZ2l0LWFkZAorZ2l0LWFtCiBnaXQtYXBwbHkKIGdpdC1hcHBseW1ib3gKIGdpdC1hcHBseXBhdGNoCkBAIC03LDkgKzgsMTEgQEAKIGdpdC1iaXNlY3QKIGdpdC1icmFuY2gKIGdpdC1jYXQtZmlsZQorZ2l0LWNoZWNrLXJlZi1mb3JtYXQKIGdpdC1jaGVja291dAogZ2l0LWNoZWNrb3V0LWluZGV4CiBnaXQtY2hlcnJ5CitnaXQtY2hlcnJ5LXBpY2sKIGdpdC1jbG9uZQogZ2l0LWNsb25lLXBhY2sKIGdpdC1jb21taXQKQEAgLTI1LDYgKzI4LDcgQEAKIGdpdC1kaWZmLXRyZWUKIGdpdC1mZXRjaAogZ2l0LWZldGNoLXBhY2sKK2dpdC1maW5kdGFncwogZ2l0LWZtdC1tZXJnZS1tc2cKIGdpdC1mb3JtYXQtcGF0Y2gKIGdpdC1mc2NrLW9iamVjdHMKQEAgLTMyLDYgKzM2LDcgQEAKIGdpdC1ncmVwCiBnaXQtaGFzaC1vYmplY3QKIGdpdC1odHRwLWZldGNoCitnaXQtaW5kZXgtcGFjawogZ2l0LWluaXQtZGIKIGdpdC1sb2NhbC1mZXRjaAogZ2l0LWxvZwpAQCAtNDksNiArNTQsOCBAQAogZ2l0LW1lcmdlLXJlc29sdmUKIGdpdC1tZXJnZS1zdHVwaWQKIGdpdC1ta3RhZworZ2l0LW5hbWUtcmV2CitnaXQtbXYKIGdpdC1vY3RvcHVzCiBnaXQtcGFjay1vYmplY3RzCiBnaXQtcGFyc2UtcmVtb3RlCkBAIC03Myw2ICs4MCw3IEBACiBnaXQtc2VuZC1lbWFpbAogZ2l0LXNlbmQtcGFjawogZ2l0LXNoLXNldHVwCitnaXQtc2hlbGwKIGdpdC1zaG9ydGxvZwogZ2l0LXNob3ctYnJhbmNoCiBnaXQtc2hvdy1pbmRleApAQCAtODIsNiArOTAsNyBAQAogZ2l0LXNzaC11cGxvYWQKIGdpdC1zdGF0dXMKIGdpdC1zdHJpcHNwYWNlCitnaXQtc3ZuaW1wb3J0CiBnaXQtc3ltYm9saWMtcmVmCiBnaXQtdGFnCiBnaXQtdGFyLXRyZWUKQEAgLTEwMSwzICsxMTAsNiBAQAogKi5kc2MKICouZGViCiBnaXQtY29yZS5zcGVjCisqLmV4ZQorbGliZ2l0LmEKKyoubwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKaW5kZXggYmIyMWQ2YS4uM2NmYTM2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0xNywxNCArMTcsMTQgQEAKIERPQ19NQU4xPSQocGF0c3Vic3QgJS50eHQsJS4xLCQoTUFOMV9UWFQpKQogRE9DX01BTjc9JChwYXRzdWJzdCAlLnR4dCwlLjcsJChNQU43X1RYVCkpCiAKLXByZWZpeD0kKEhPTUUpCitwcmVmaXg/PSQoSE9NRSkKIGJpbj0kKHByZWZpeCkvYmluCiBtYW5kaXI9JChwcmVmaXgpL21hbgogbWFuMT0kKG1hbmRpcikvbWFuMQogbWFuNz0kKG1hbmRpcikvbWFuNwogIyBERVNURElSPQogCi1JTlNUQUxMPWluc3RhbGwKK0lOU1RBTEw/PWluc3RhbGwKIAogIwogIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGlzIGEgbWlub3IgYnVnIGluIGFzY2lpZG9jLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQKaW5kZXggNDM2MTI3OC4uNTc0MzZmMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2N2cy1taWdyYXRpb24udHh0CkBAIC0xLDYgKzEsNSBAQAotR2l0IGZvciBDVlMgdXNlcnMKK2dpdCBmb3IgQ1ZTIHVzZXJzCiA9PT09PT09PT09PT09PT09PQotdjAuOTkuNSwgQXVnIDIwMDUKIAogT2ssIHNvIHlvdSdyZSBhIENWUyB1c2VyLiBUaGF0J3Mgb2ssIGl0J3MgYSB0cmVhdGFibGUgY29uZGl0aW9uLCBhbmQgdGhlCiBmaXJzdCBzdGVwIHRvIHJlY292ZXJ5IGlzIGFkbWl0dGluZyB5b3UgaGF2ZSBhIHByb2JsZW0uIFRoZSBmYWN0IHRoYXQKQEAgLTgsNyArNyw3IEBACiBhbHJlYWR5LgogCiBUaGUgdGhpbmcgYWJvdXQgQ1ZTIGlzIHRoYXQgaXQgYWJzb2x1dGVseSBzdWNrcyBhcyBhIHNvdXJjZSBjb250cm9sCi1tYW5hZ2VyLCBhbmQgeW91J2xsIHRodXMgYmUgaGFwcHkgd2l0aCBhbG1vc3QgYW55dGhpbmcgZWxzZS4gR2l0LAorbWFuYWdlciwgYW5kIHlvdSdsbCB0aHVzIGJlIGhhcHB5IHdpdGggYWxtb3N0IGFueXRoaW5nIGVsc2UuIGdpdCwKIGhvd2V2ZXIsIG1heSBiZSBhIGJpdCAndG9vJyBkaWZmZXJlbnQgKHJlYWQ6ICJnb29kIikgZm9yIHlvdXIgdGFzdGUsIGFuZAogZG9lcyBhIGxvdCBvZiB0aGluZ3MgZGlmZmVyZW50bHkuIAogCkBAIC0xNiw3ICsxNSw3IEBACiBiYXNpY2FsbHkgYSB0b29sIGZvciB0cmFja2luZyAnZmlsZScgaGlzdG9yeSwgd2hpbGUgZ2l0IGlzIGEgdG9vbCBmb3IKIHRyYWNraW5nICdwcm9qZWN0JyBoaXN0b3J5LiAgVGhpcyBzb21ldGltZXMgY2F1c2VzIHByb2JsZW1zIGlmIHlvdSBhcmUKIHVzZWQgdG8gZG9pbmcgdmVyeSBzdHJhbmdlIHRoaW5ncyBpbiBDVlMsIGluIHBhcnRpY3VsYXIgaWYgeW91J3JlIGRvaW5nCi10aGluZ3MgbGlrZSBtYWtpbmcgYnJhbmNoZXMgb2YganVzdCBhIHN1YnNldCBvZiB0aGUgcHJvamVjdC4gIEdpdCBjYW4ndAordGhpbmdzIGxpa2UgbWFraW5nIGJyYW5jaGVzIG9mIGp1c3QgYSBzdWJzZXQgb2YgdGhlIHByb2plY3QuICBnaXQgY2FuJ3QKIHRyYWNrIHRoYXQsIHNpbmNlIGdpdCBuZXZlciB0cmFja3MgdGhpbmdzIG9uIHRoZSBsZXZlbCBvZiBhbiBpbmRpdmlkdWFsCiBmaWxlLCBvbmx5IG9uIHRoZSB3aG9sZSBwcm9qZWN0IGxldmVsLiAKIApAQCAtMzMsNyArMzIsNyBAQAogCiBTZWNvbmQ6IENWUyBoYXMgdGhlIG5vdGlvbiBvZiBhICJyZXBvc2l0b3J5IiBhcyBvcHBvc2VkIHRvIHRoZSB0aGluZwogdGhhdCB5b3UncmUgYWN0dWFsbHkgd29ya2luZyBpbiAoeW91ciB3b3JraW5nIGRpcmVjdG9yeSwgb3IgeW91cgotImNoZWNrZWQgb3V0IHRyZWUiKS4gIEdpdCBkb2VzIG5vdCBoYXZlIHRoYXQgbm90aW9uIGF0IGFsbCwgYW5kIGFsbCBnaXQKKyJjaGVja2VkIG91dCB0cmVlIikuICBnaXQgZG9lcyBub3QgaGF2ZSB0aGF0IG5vdGlvbiBhdCBhbGwsIGFuZCBhbGwgZ2l0CiB3b3JraW5nIGRpcmVjdG9yaWVzICdhcmUnIHRoZSByZXBvc2l0b3JpZXMuICBIb3dldmVyLCB5b3UgY2FuIGVhc2lseQogZW11bGF0ZSB0aGUgQ1ZTIG1vZGVsIGJ5IGhhdmluZyBvbmUgc3BlY2lhbCAiZ2xvYmFsIHJlcG9zaXRvcnkiLCB3aGljaAogcGVvcGxlIGNhbiBzeW5jaHJvbml6ZSB3aXRoLiAgU2VlIGRldGFpbHMgbGF0ZXIsIGJ1dCBpbiB0aGUgbWVhbnRpbWUKQEAgLTUwLDcgKzQ5LDcgQEAKIGhvdyB0byBjb21taXQgc3R1ZmYgZXRjIGluIGdpdCkgaXMgdG8gY3JlYXRlIGEgZ2l0J2lmaWVkIHZlcnNpb24gb2YgeW91cgogQ1ZTIGFyY2hpdmUuCiAKLUhhcHBpbHksIHRoYXQncyB2ZXJ5IGVhc3kgaW5kZWVkLiBHaXQgd2lsbCBkbyBpdCBmb3IgeW91LCBhbHRob3VnaCBnaXQKK0hhcHBpbHksIHRoYXQncyB2ZXJ5IGVhc3kgaW5kZWVkLiBnaXQgd2lsbCBkbyBpdCBmb3IgeW91LCBhbHRob3VnaCBnaXQKIHdpbGwgbmVlZCB0aGUgaGVscCBvZiBhIHByb2dyYW0gY2FsbGVkICJjdnNwcyI6CiAKIAlodHRwOi8vd3d3LmNvYml0ZS5jb20vY3ZzcHMvCkBAIC0xMzYsNyArMTM1LDcgQEAKIHRoZXJlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGVxdWl2YWxlbnQgaW5mb3JtYXRpb24gKHNlZSB0aGUgZ2l0CiBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgZm9yIGRldGFpbHMpLiAKIAotR2l0IGhhcyBhIGNvdXBsZSBvZiBhbHRlcm5hdGl2ZXMsIHRob3VnaCwgdGhhdCB5b3UgbWF5IGZpbmQgc3VmZmljaWVudAorZ2l0IGhhcyBhIGNvdXBsZSBvZiBhbHRlcm5hdGl2ZXMsIHRob3VnaCwgdGhhdCB5b3UgbWF5IGZpbmQgc3VmZmljaWVudAogb3IgZXZlbiBzdXBlcmlvciBkZXBlbmRpbmcgb24geW91ciB1c2UuICBPbmUgaXMgY2FsbGVkICJnaXQtd2hhdGNoYW5nZWQiCiAoZm9yIG9idmlvdXMgcmVhc29ucykgYW5kIHRoZSBvdGhlciBvbmUgaXMgY2FsbGVkICJwaWNrYXhlIiAoImEgdG9vbCBmb3IKIHRoZSBzb2Z0d2FyZSBhcmNoZW9sb2dpc3QiKS4gCkBAIC0yMDksNyArMjA4LDcgQEAKIEFsc28sIGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LCB0aGUgc2FtZSBzdGF0ZW1lbnQgbWlnaHQgaGF2ZQogYXBwZWFyZWQgYXQgZmlyc3QgaW4gYSBkaWZmZXJlbnQgZmlsZSBhbmQgbGF0ZXIgdGhlIGZpbGUgd2FzCiByZW5hbWVkIHRvICJhLWZpbGUuYyIuICBDVlMgYW5ub3RhdGUgd291bGQgbm90IGhlbHAgeW91IHRvIGdvCi1iYWNrIGFjcm9zcyBzdWNoIGEgcmVuYW1lLCBidXQgR0lUIHdvdWxkIHN0aWxsIGhlbHAgeW91IGluIHN1Y2gKK2JhY2sgYWNyb3NzIHN1Y2ggYSByZW5hbWUsIGJ1dCBnaXQgd291bGQgc3RpbGwgaGVscCB5b3UgaW4gc3VjaAogYSBzaXR1YXRpb24uICBGb3IgdGhhdCwgeW91IGNhbiBnaXZlIHRoZSAtQyBmbGFnIHRvCiBnaXQtZGlmZi10cmVlLCBsaWtlIHRoaXM6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKaW5kZXggZGFjZDhmYi4uZDFkMGQyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKQEAgLTU1LDYgKzU1LDExIEBACiA6MTAwNjQ0IDEwMDY0NCA1YmU0YTQuLi4uLi4gMDAwMDAwLi4uLi4uIE0gZmlsZS5jCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hlbiBgLXpgIG9wdGlvbiBpcyBub3QgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAorcmVzcGVjdGl2ZWx5LgorCisKIEdlbmVyYXRpbmcgcGF0Y2hlcyB3aXRoIC1wCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMDYsNyArMTExLDcgQEAKIHBhcmFtZXRlciwgPHBhdGg+LgogCiAKLUdpdCBzcGVjaWZpYyBleHRlbnNpb24gdG8gZGlmZiBmb3JtYXQKK2dpdCBzcGVjaWZpYyBleHRlbnNpb24gdG8gZGlmZiBmb3JtYXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2hhdCAtcCBvcHRpb24gcHJvZHVjZXMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlCkBAIC0xMzcsMyArMTQyLDcgQEAKICAgICAgICByZW5hbWUgdG8gPHBhdGg+CiAgICAgICAgc2ltaWxhcml0eSBpbmRleCA8bnVtYmVyPgogICAgICAgIGRpc3NpbWlsYXJpdHkgaW5kZXggPG51bWJlcj4KKyAgICAgICBpbmRleCA8aGFzaD4uLjxoYXNoPiA8bW9kZT4KKworMy4gIFRBQiwgTEYsIGFuZCBiYWNrc2xhc2ggY2hhcmFjdGVycyBpbiBwYXRobmFtZXMgYXJlCisgICAgcmVwcmVzZW50ZWQgYXMgYFx0YCwgYFxuYCwgYW5kIGBcXGAsIHJlc3BlY3RpdmVseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dAppbmRleCAwNjUwMGQwLi4zMjAwNWIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CkBAIC00LDEwICs0LDYgQEAKIC11OjoKIAlTeW5vbnltIGZvciAiLXAiLgogCi0tcjo6Ci0JTG9vayByZWN1cnNpdmVseSBpbiBzdWJkaXJlY3Rvcmllczsgb25seSB1c2VkIGJ5ICJnaXQtZGlmZi10cmVlIjsKLQlvdGhlciBkaWZmIGNvbW1hbmRzIGFsd2F5cyB3b3JrIHJlY3Vyc2l2ZWx5LgotCiAtejo6CiAJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmY29yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmZjb3JlLnR4dAppbmRleCA5ZDIwYTRmLi5jYjRlNTYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmZjb3JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmZjb3JlLnR4dApAQCAtNiwxMyArNiwxMiBAQAogSW50cm9kdWN0aW9uCiAtLS0tLS0tLS0tLS0KIAotVGhlIGRpZmYgY29tbWFuZHMgZ2l0LWRpZmYtaW5kZXgsIGdpdC1kaWZmLWZpbGVzLCBhbmQKLWdpdC1kaWZmLXRyZWUgY2FuIGJlIHRvbGQgdG8gbWFuaXB1bGF0ZSBkaWZmZXJlbmNlcyB0aGV5IGZpbmQKLWluIHVuY29udmVudGlvbmFsIHdheXMgYmVmb3JlIHNob3dpbmcgZGlmZigxKSBvdXRwdXQuICBUaGUKLW1hbmlwdWxhdGlvbiBpcyBjb2xsZWN0aXZlbHkgY2FsbGVkICJkaWZmY29yZSB0cmFuc2Zvcm1hdGlvbiIuCi1UaGlzIHNob3J0IG5vdGUgZGVzY3JpYmVzIHdoYXQgdGhleSBhcmUgYW5kIGhvdyB0byB1c2UgdGhlbSB0bwotcHJvZHVjZSBkaWZmIG91dHB1dHMgdGhhdCBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgdGhhbiB0aGUKLWNvbnZlbnRpb25hbCBraW5kLgorVGhlIGRpZmYgY29tbWFuZHMgZ2l0LWRpZmYtaW5kZXgsIGdpdC1kaWZmLWZpbGVzLCBnaXQtZGlmZi10cmVlLCBhbmQKK2dpdC1kaWZmLXN0YWdlcyBjYW4gYmUgdG9sZCB0byBtYW5pcHVsYXRlIGRpZmZlcmVuY2VzIHRoZXkgZmluZCBpbgordW5jb252ZW50aW9uYWwgd2F5cyBiZWZvcmUgc2hvd2luZyBkaWZmKDEpIG91dHB1dC4gIFRoZSBtYW5pcHVsYXRpb24KK2lzIGNvbGxlY3RpdmVseSBjYWxsZWQgImRpZmZjb3JlIHRyYW5zZm9ybWF0aW9uIi4gIFRoaXMgc2hvcnQgbm90ZQorZGVzY3JpYmVzIHdoYXQgdGhleSBhcmUgYW5kIGhvdyB0byB1c2UgdGhlbSB0byBwcm9kdWNlIGRpZmYgb3V0cHV0cwordGhhdCBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgdGhhbiB0aGUgY29udmVudGlvbmFsIGtpbmQuCiAKIAogVGhlIGNoYWluIG9mIG9wZXJhdGlvbgpAQCAtMjksNyArMjgsMTAgQEAKICAtIGdpdC1kaWZmLWZpbGVzIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUKICAgIHdvcmtpbmcgZGlyZWN0b3J5OwogCi0gLSBnaXQtZGlmZi10cmVlIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHR3byAidHJlZSIgb2JqZWN0cy4KKyAtIGdpdC1kaWZmLXRyZWUgY29tcGFyZXMgY29udGVudHMgb2YgdHdvICJ0cmVlIiBvYmplY3RzOworCisgLSBnaXQtZGlmZi1zdGFnZXMgY29tcGFyZXMgY29udGVudHMgb2YgYmxvYnMgYXQgdHdvIHN0YWdlcyBpbiBhbgorICAgdW5tZXJnZWQgaW5kZXggZmlsZS4KIAogSW4gYWxsIG9mIHRoZXNlIGNhc2VzLCB0aGUgY29tbWFuZHMgdGhlbXNlbHZlcyBjb21wYXJlCiBjb3JyZXNwb25kaW5nIHBhdGhzIGluIHRoZSB0d28gc2V0cyBvZiBmaWxlcy4gIFRoZSByZXN1bHQgb2YKQEAgLTY1LDE0ICs2NywyMyBAQAogZGlmZi1wYXRjaCBmb3JtYXQuCiAKIAotZGlmZmNvcmUtcGF0aHNwZWMKLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmY29yZS1wYXRoc3BlYzogRm9yIElnbm9yaW5nIEZpbGVzIE91dHNpZGUgT3VyIENvbnNpZGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgZmlyc3QgdHJhbnNmb3JtYXRpb24gaW4gdGhlIGNoYWluIGlzIGRpZmZjb3JlLXBhdGhzcGVjLCBhbmQKIGlzIGNvbnRyb2xsZWQgYnkgZ2l2aW5nIHRoZSBwYXRobmFtZSBwYXJhbWV0ZXJzIHRvIHRoZQogZ2l0LWRpZmYtKiBjb21tYW5kcyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIHBhdGhzcGVjIGlzIHVzZWQKIHRvIGxpbWl0IHRoZSB3b3JsZCBkaWZmIG9wZXJhdGVzIGluLiAgSXQgcmVtb3ZlcyB0aGUgZmlsZXBhaXJzCi1vdXRzaWRlIHRoZSBzcGVjaWZpZWQgc2V0IG9mIHBhdGhuYW1lcy4KK291dHNpZGUgdGhlIHNwZWNpZmllZCBzZXQgb2YgcGF0aG5hbWVzLiAgRS5nLiBJZiB0aGUgaW5wdXQgc2V0IAorb2YgZmlsZXBhaXJzIGluY2x1ZGVkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQuLi4gMDEyMzQ1Ni4uLiBNIGp1bmtmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRoZSBjb21tYW5kIGludm9jYXRpb24gd2FzICJnaXQtZGlmZi1maWxlcyBteWZpbGUiLCB0aGVuIHRoZQoranVua2ZpbGUgZW50cnkgd291bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGJlY2F1c2Ugb25seSAibXlmaWxlIgoraXMgdW5kZXIgY29uc2lkZXJhdGlvbi4KIAogSW1wbGVtZW50YXRpb24gbm90ZS4gIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBnaXQtZGlmZi10cmVlCiB1c2VzIHRoZSBwYXRobmFtZSBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kIGxpbmUgdG8gY3VsbCBzZXQgb2YKQEAgLTgwLDggKzkxLDggQEAKIHVzZSBkaWZmY29yZS1wYXRoc3BlYywgYnV0IHRoZSBlbmQgcmVzdWx0IGlzIHRoZSBzYW1lLgogCiAKLWRpZmZjb3JlLWJyZWFrCi0tLS0tLS0tLS0tLS0tLQorZGlmZmNvcmUtYnJlYWs6IEZvciBTcGxpdHRpbmcgVXAgIkNvbXBsZXRlIFJld3JpdGVzIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgc2Vjb25kIHRyYW5zZm9ybWF0aW9uIGluIHRoZSBjaGFpbiBpcyBkaWZmY29yZS1icmVhaywgYW5kIGlzCiBjb250cm9sbGVkIGJ5IHRoZSAtQiBvcHRpb24gdG8gdGhlIGdpdC1kaWZmLSogY29tbWFuZHMuICBUaGlzIGlzCkBAIC0xMTUsOCArMTI2LDggQEAKIGFmdGVyICItQiIgb3B0aW9uIChlLmcuICItQjc1IiB0byB0ZWxsIGl0IHRvIHVzZSA3NSUpLgogCiAKLWRpZmZjb3JlLXJlbmFtZQotLS0tLS0tLS0tLS0tLS0tCitkaWZmY29yZS1yZW5hbWU6IEZvciBEZXRlY3Rpb24gUmVuYW1lcyBhbmQgQ29waWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZCB0byBkZXRlY3QgcmVuYW1lcyBhbmQgY29waWVzLCBhbmQgaXMKIGNvbnRyb2xsZWQgYnkgdGhlIC1NIG9wdGlvbiAodG8gZGV0ZWN0IHJlbmFtZXMpIGFuZCB0aGUgLUMgb3B0aW9uCkBAIC0xMzYsMTYgKzE0NywxNiBAQAogOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiAwMTIzNDU2Li4uIFIxMDAgZmlsZVggZmlsZTAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkLCB0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgbW9kaWZpZWQKLWZpbGVzIGFuZCBjb250ZW50cyBvZiB1bmNoYW5nZWQgZmlsZXMgYXJlIGNvbnNpZGVyZWQgYXMKLWNhbmRpZGF0ZXMgb2YgdGhlIHNvdXJjZSBmaWxlcyBpbiByZW5hbWUvY29weSBvcGVyYXRpb24sIGluCi1hZGRpdGlvbiB0byB0aGUgZGVsZXRlZCBmaWxlcy4gIElmIHRoZSBpbnB1dCB3ZXJlIGxpa2UgdGhlc2UKLWZpbGVwYWlycywgdGhhdCB0YWxrIGFib3V0IGEgbW9kaWZpZWQgZmlsZSBmaWxlWSBhbmQgYSBuZXdseQorV2hlbiB0aGUgIi1DIiBvcHRpb24gaXMgdXNlZCwgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIG1vZGlmaWVkIGZpbGVzLAorYW5kIGRlbGV0ZWQgZmlsZXMgKGFuZCBhbHNvIHVubW9kaWZpZWQgZmlsZXMsIGlmIHRoZQorIlwtLWZpbmQtY29waWVzLWhhcmRlciIgb3B0aW9uIGlzIHVzZWQpIGFyZSBjb25zaWRlcmVkIGFzIGNhbmRpZGF0ZXMKK29mIHRoZSBzb3VyY2UgZmlsZXMgaW4gcmVuYW1lL2NvcHkgb3BlcmF0aW9uLiAgSWYgdGhlIGlucHV0IHdlcmUgbGlrZQordGhlc2UgZmlsZXBhaXJzLCB0aGF0IHRhbGsgYWJvdXQgYSBtb2RpZmllZCBmaWxlIGZpbGVZIGFuZCBhIG5ld2x5CiBjcmVhdGVkIGZpbGUgZmlsZTA6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiAxMjM0NTY3Li4uIE0gZmlsZVkKLTowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDEyMzQ1Ni4uLiBBIGZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIGJjZDM0NTYuLi4gQSBmaWxlMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiBmaWxlWSBhbmQgdGhlIHJlc3VsdGluZyBjb250ZW50cyBvZgpAQCAtMTU0LDE0ICsxNjUsMTQgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQotOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiAwMTIzNDU2Li4uIEMxMDAgZmlsZVkgZmlsZTAKKzoxMDA2NDQgMTAwNjQ0IDAxMjM0NTYuLi4gYmNkMzQ1Ni4uLiBDMTAwIGZpbGVZIGZpbGUwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gYm90aCByZW5hbWUgYW5kIGNvcHkgZGV0ZWN0aW9uLCB0aGUgc2FtZSAiZXh0ZW50IG9mIGNoYW5nZXMiCiBhbGdvcml0aG0gdXNlZCBpbiBkaWZmY29yZS1icmVhayBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB0d28KIGZpbGVzIGFyZSAic2ltaWxhciBlbm91Z2giLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gdXNlCi1zaW1pbGFyaXR5IHNjb3JlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IDUwJSBieSBnaXZpbmcgYQotbnVtYmVyIGFmdGVyICItTSIgb3IgIi1DIiBvcHRpb24gKGUuZy4gIi1NOCIgdG8gdGVsbCBpdCB0byB1c2UKK2Egc2ltaWxhcml0eSBzY29yZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBvZiA1MCUgYnkgZ2l2aW5nIGEKK251bWJlciBhZnRlciB0aGUgIi1NIiBvciAiLUMiIG9wdGlvbiAoZS5nLiAiLU04IiB0byB0ZWxsIGl0IHRvIHVzZQogOC8xMCA9IDgwJSkuCiAKIE5vdGUuICBXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkIHdpdGggYFwtLWZpbmQtY29waWVzLWhhcmRlcmAKQEAgLTE3Myw4ICsxODQsOCBAQAogY29waWVkIGhhcHBlbmVkIHRvIGhhdmUgYmVlbiBtb2RpZmllZCBpbiB0aGUgc2FtZSBjaGFuZ2VzZXQuCiAKIAotZGlmZmNvcmUtbWVyZ2UtYnJva2VuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RpZmZjb3JlLW1lcmdlLWJyb2tlbjogRm9yIFB1dHRpbmcgIkNvbXBsZXRlIFJld3JpdGVzIiBCYWNrIFRvZ2V0aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gbWVyZ2UgZmlsZXBhaXJzIGJyb2tlbiBieQogZGlmZmNvcmUtYnJlYWssIGFuZCBub3QgdHJhbnNmb3JtZWQgaW50byByZW5hbWUvY29weSBieQpAQCAtMjE1LDggKzIyNiw4IEBACiB2ZXJzaW9uIHByZWZpeGVkIHdpdGggJysnLgogCiAKLWRpZmZjb3JlLXBpY2theGUKLS0tLS0tLS0tLS0tLS0tLS0KK2RpZmZjb3JlLXBpY2theGU6IEZvciBEZXRlY3RpbmcgQWRkaXRpb24vRGVsZXRpb24gb2YgU3BlY2lmaWVkIFN0cmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZCB0byBmaW5kIGZpbGVwYWlycyB0aGF0IHJlcHJlc2VudAogY2hhbmdlcyB0aGF0IHRvdWNoIGEgc3BlY2lmaWVkIHN0cmluZywgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlCkBAIC0yMzAsNyArMjQxLDcgQEAKIG9wcG9zaXRlIGNhc2UgdGhhdCBsb3NlcyB0aGUgc3BlY2lmaWVkIHN0cmluZy4KIAogV2hlbiBgXC0tcGlja2F4ZS1hbGxgIGlzIG5vdCBpbiBlZmZlY3QsIGRpZmZjb3JlLXBpY2theGUgbGVhdmVzCi1vbmx5IHN1Y2ggZmlsZXBhaXJzIHRoYXQgdG91Y2hlcyB0aGUgc3BlY2lmaWVkIHN0cmluZyBpbiBpdHMKK29ubHkgc3VjaCBmaWxlcGFpcnMgdGhhdCB0b3VjaCB0aGUgc3BlY2lmaWVkIHN0cmluZyBpbiBpdHMKIG91dHB1dC4gIFdoZW4gYFwtLXBpY2theGUtYWxsYCBpcyB1c2VkLCBkaWZmY29yZS1waWNrYXhlIGxlYXZlcyBhbGwKIGZpbGVwYWlycyBpbnRhY3QgaWYgdGhlcmUgaXMgc3VjaCBhIGZpbGVwYWlyLCBvciBtYWtlcyB0aGUKIG91dHB1dCBlbXB0eSBvdGhlcndpc2UuICBUaGUgbGF0dGVyIGJlaGF2aW91ciBpcyBkZXNpZ25lZCB0bwpAQCAtMjM4LDE5ICsyNDksMTkgQEAKIGNoYW5nZXNldCBlYXNpZXIuCiAKIAotZGlmZmNvcmUtb3JkZXIKLS0tLS0tLS0tLS0tLS0tCitkaWZmY29yZS1vcmRlcjogRm9yIFNvcnRpbmcgdGhlIE91dHB1dCBCYXNlZCBvbiBGaWxlbmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGlzIHVzZWQgdG8gcmVvcmRlciB0aGUgZmlsZXBhaXJzIGFjY29yZGluZyB0byB0aGUgdXNlcidzCiAob3IgcHJvamVjdCdzKSB0YXN0ZSwgYW5kIGlzIGNvbnRyb2xsZWQgYnkgdGhlIC1PIG9wdGlvbiB0byB0aGUKIGdpdC1kaWZmLSogY29tbWFuZHMuCiAKLVRoaXMgdGFrZXMgYSB0ZXh0IGZpbGUgZWFjaCBvZiB3aG9zZSBsaW5lIGlzIGEgc2hlbGwgZ2xvYgorVGhpcyB0YWtlcyBhIHRleHQgZmlsZSBlYWNoIG9mIHdob3NlIGxpbmVzIGlzIGEgc2hlbGwgZ2xvYgogcGF0dGVybi4gIEZpbGVwYWlycyB0aGF0IG1hdGNoIGEgZ2xvYiBwYXR0ZXJuIG9uIGFuIGVhcmxpZXIgbGluZQogaW4gdGhlIGZpbGUgYXJlIG91dHB1dCBiZWZvcmUgb25lcyB0aGF0IG1hdGNoIGEgbGF0ZXIgbGluZSwgYW5kCiBmaWxlcGFpcnMgdGhhdCBkbyBub3QgbWF0Y2ggYW55IGdsb2IgcGF0dGVybiBhcmUgb3V0cHV0IGxhc3QuCiAKLUFzIGFuIGV4YW1wbGUsIHR5cGljYWwgb3JkZXJmaWxlIGZvciB0aGUgY29yZSBHSVQgcHJvYmFibHkKK0FzIGFuIGV4YW1wbGUsIGEgdHlwaWNhbCBvcmRlcmZpbGUgZm9yIHRoZSBjb3JlIGdpdCBwcm9iYWJseQogd291bGQgbG9vayBsaWtlIHRoaXM6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKaW5kZXggNGEwM2I0Yy4uMzIzMDAyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CkBAIC03LDcgKzcsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtYWRkJyA8ZmlsZT4uLi4KKydnaXQtYWRkJyBbLW5dIFstdl0gPGZpbGU+Li4uCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMTksNiArMTksMTMgQEAKIDxmaWxlPi4uLjo6CiAJRmlsZXMgdG8gYWRkIHRvIHRoZSBjYWNoZS4KIAorLW46OgorICAgICAgICBEb24ndCBhY3R1YWxseSBhZGQgdGhlIGZpbGUocyksIGp1c3Qgc2hvdyBpZiB0aGV5IGV4aXN0LgorCistdjo6CisgICAgICAgIEJlIHZlcmJvc2UuCisKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNGRjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKQEAgLTAsMCArMSw5MCBAQAorZ2l0LWFtKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFtIC0gQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBpbiBhIG1haWxib3gKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtYW0nIFstLXNpZ25vZmZdIFstLWRvdGVzdD08ZGlyPl0gWy0tdXRmOF0gWy0tM3dheV0gPG1ib3g+Li4uCisnZ2l0LWFtJyBbLS1za2lwXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBtYWlsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCBpbnRvIGNvbW1pdCBsb2cgbWVzc2FnZSwKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb24gYW5kIHBhdGNoZXMsIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKworT1BUSU9OUworLS0tLS0tLQorLS1zaWdub2ZmOjoKKwlBZGQgYFNpZ25lZC1vZmYtYnk6YCBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSwgdXNpbmcKKwl0aGUgY29tbWl0dGVyIGlkZW50aXR5IG9mIHlvdXJzZWxmLgorCistLWRvdGVzdD08ZGlyPjo6CisJSW5zdGVhZCBvZiBgLmRvdGVzdGAgZGlyZWN0b3J5LCB1c2UgPGRpcj4gYXMgYSB3b3JraW5nCisJYXJlYSB0byBzdG9yZSBleHRyYWN0ZWQgcGF0Y2hlcy4KKworLS11dGY4LCAtLWtlZXA6OgorCVBhc3MgYC0tdXRmOGAgYW5kIGAtLWtlZXBgIGZsYWdzIHRvIGBnaXQtbWFpbGluZm9gIChzZWUKKwlnaXRsaW5rOmdpdC1tYWlsaW5mb1sxXSkuCisKKy0tM3dheTo6CisJV2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgZmFsbCBiYWNrIG9uCisJMy13YXkgbWVyZ2UsIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvLCBhbmQgd2UgaGF2ZSB0aG9zZSBibG9icworCWxvY2FsbHkuCisKKy0tc2tpcDo6CisJU2tpcCB0aGUgY3VycmVudCBwYXRjaC4gIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIHdoZW4KKwlyZXN0YXJ0aW5nIGFuIGFib3J0ZWQgcGF0Y2guCisKKy0taW50ZXJhY3RpdmU6OgorCVJ1biBpbnRlcmFjdGl2ZWx5LCBqdXN0IGxpa2UgZ2l0LWFwcGx5bWJveC4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1doZW4gaW5pdGlhbGx5IGludm9raW5nIGl0LCB5b3UgZ2l2ZSBpdCBuYW1lcyBvZiB0aGUgbWFpbGJveGVzCit0byBjcnVuY2guICBVcG9uIHNlZWluZyB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSwgaXQKK2Fib3J0cyBpbiB0aGUgbWlkZGxlLCBqdXN0IGxpa2UgJ2dpdC1hcHBseW1ib3gnIGRvZXMuICBZb3UgY2FuCityZWNvdmVyIGZyb20gdGhpcyBpbiBvbmUgb2YgdHdvIHdheXM6CisKKy4gc2tpcCB0aGUgY3VycmVudCBvbmUgYnkgcmUtcnVubmluZyB0aGUgY29tbWFuZCB3aXRoICctLXNraXAnCisgIG9wdGlvbi4KKworLiBoYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgcnVuICdnaXQKKyAgZGlmZiBIRUFEJyB0byBleHRyYWN0IHRoZSBtZXJnZSByZXN1bHQgaW50byBhIHBhdGNoIGZvcm0gYW5kCisgIHJlcGxhY2luZyB0aGUgcGF0Y2ggaW4gLmRvdGVzdC9wYXRjaCBmaWxlLiAgQWZ0ZXIgZG9pbmcgdGhpcywKKyAgcnVuIGBnaXQtcmVzZXQgLS1oYXJkIEhFQURgIHRvIGJyaW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlCisgIHN0YXRlIGJlZm9yZSBoYWxmLWFwcGx5aW5nIHRoZSBwYXRjaCwgdGhlbiByZS1ydW4gdGhlIGNvbW1hbmQKKyAgd2l0aG91dCBhbnkgb3B0aW9ucy4KKworVGhlIGNvbW1hbmQgcmVmdXNlcyB0byBwcm9jZXNzIG5ldyBtYWlsYm94ZXMgd2hpbGUgYC5kb3Rlc3RgCitkaXJlY3RvcnkgZXhpc3RzLCBzbyBpZiB5b3UgZGVjaWRlIHRvIHN0YXJ0IG92ZXIgZnJvbSBzY3JhdGNoLAorcnVuIGBybSAtZiAuZG90ZXN0YCBiZWZvcmUgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIG1haWxib3gKK25hbWVzLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorZ2l0bGluazpnaXQtYXBwbHltYm94WzFdLCBnaXRsaW5rOmdpdC1hcHBseXBhdGNoWzFdLgorCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgUGV0ciBCYXVkaXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitUaGlzIG1hbnVhbCBwYWdlIGlzIGEgc3R1Yi4gWW91IGNhbiBoZWxwIHRoZSBnaXQgZG9jdW1lbnRhdGlvbiBieSBleHBhbmRpbmcgaXQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKaW5kZXggOGNiYmI0Yi4uZWI4ZjkwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dApAQCAtMSwxNSArMSwxNCBAQAogZ2l0LWFwcGx5KDEpCiA9PT09PT09PT09PT0KLXYwLjEsIEp1bmUgMjAwNQogCiBOQU1FCiAtLS0tCi1naXQtYXBwbHkgLSBBcHBseSBwYXRjaCBvbiBhIEdJVCBpbmRleCBmaWxlIGFuZCBhIHdvcmsgdHJlZQorZ2l0LWFwcGx5IC0gQXBwbHkgcGF0Y2ggb24gYSBnaXQgaW5kZXggZmlsZSBhbmQgYSB3b3JrIHRyZWUKIAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtYXBwbHknIFstLW5vLW1lcmdlXSBbLS1zdGF0XSBbLS1zdW1tYXJ5XSBbLS1jaGVja10gWy0taW5kZXhdIFstLXNob3ctZmlsZXNdIFstLWFwcGx5XSBbPHBhdGNoPi4uLl0KKydnaXQtYXBwbHknIFstLXN0YXRdIFstLW51bXN0YXRdIFstLXN1bW1hcnldIFstLWNoZWNrXSBbLS1pbmRleF0gWy0tYXBwbHldIFstLWluZGV4LWluZm9dIFstel0gWzxwYXRjaD4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMjIsMTUgKzIxLDE2IEBACiAJVGhlIGZpbGVzIHRvIHJlYWQgcGF0Y2ggZnJvbS4gICctJyBjYW4gYmUgdXNlZCB0byByZWFkCiAJZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCiAKLS0tbm8tbWVyZ2U6OgotCVRoZSBkZWZhdWx0IG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHRoZSBtZXJnZSBiZWhhdmlvdXIKLQl3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiAgVGhpcyBmbGFnIGV4cGxpY2l0bHkKLQl0ZWxscyB0aGUgcHJvZ3JhbSBub3QgdG8gdXNlIHRoZSBtZXJnZSBiZWhhdmlvdXIuCi0KIC0tc3RhdDo6CiAJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlCiAJaW5wdXQuICBUdXJucyBvZmYgImFwcGx5Ii4KIAorLS1udW1zdGF0OjoKKwlTaW1pbGFyIHRvIFwtLXN0YXQsIGJ1dCBzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCBwYXRobmFtZSB3aXRob3V0CisJYWJicmV2aWF0aW9uLCB0byBtYWtlIGl0IG1vcmUgbWFjaGluZSBmcmllbmRseS4gIFR1cm5zCisJb2ZmICJhcHBseSIuCisKIC0tc3VtbWFyeTo6CiAJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIGNvbmRlbnNlZAogCXN1bW1hcnkgb2YgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSBnaXQgZGlmZiBleHRlbmRlZApAQCAtNTEsOCArNTEsMTkgQEAKIAl1cC10by1kYXRlLCBpdCBpcyBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgVGhpcyBmbGFnIGFsc28KIAljYXVzZXMgdGhlIGluZGV4IGZpbGUgdG8gYmUgdXBkYXRlZC4KIAotLS1zaG93LWZpbGVzOjoKLQlTaG93IHN1bW1hcnkgb2YgZmlsZXMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLgorLS1pbmRleC1pbmZvOjoKKwlOZXdlciBnaXQtZGlmZiBvdXRwdXQgaGFzIGVtYmVkZGVkICdpbmRleCBpbmZvcm1hdGlvbicKKwlmb3IgZWFjaCBibG9iIHRvIGhlbHAgaWRlbnRpZnkgdGhlIG9yaWdpbmFsIHZlcnNpb24gdGhhdAorCXRoZSBwYXRjaCBhcHBsaWVzIHRvLiAgV2hlbiB0aGlzIGZsYWcgaXMgZ2l2ZW4sIGFuZCBpZgorCXRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBibG9iIGlzIGF2YWlsYWJsZSBsb2NhbGx5LAorCW91dHB1dHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlbSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCistejo6CisJV2hlbiBzaG93aW5nIHRoZSBpbmRleCBpbmZvcm1hdGlvbiwgZG8gbm90IG11bmdlIHBhdGhzLAorCWJ1dCB1c2UgTlVMIHRlcm1pbmF0ZWQgbWFjaGluZSByZWFkYWJsZSBmb3JtYXQuICBXaXRob3V0CisJdGhpcyBmbGFnLCB0aGUgcGF0aG5hbWVzIG91dHB1dCB3aWxsIGhhdmUgVEFCLCBMRiwgYW5kCisJYmFja3NsYXNoIGNoYXJhY3RlcnMgcmVwbGFjZWQgd2l0aCBgXHRgLCBgXG5gLCBhbmQgYFxcYCwKKwlyZXNwZWN0aXZlbHkuCiAKIC0tYXBwbHk6OgogCUlmIHlvdSB1c2UgYW55IG9mIHRoZSBvcHRpb25zIG1hcmtlZCBgYFR1cm5zIG9mZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHltYm94LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5bWJveC50eHQKaW5kZXggYmI1NDM3OC4uZjc0YzZhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHltYm94LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseW1ib3gudHh0CkBAIC04LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtYXBwbHltYm94JyBbLXVdIFsta10gWy1xXSAoIC1jIC5kb3Rlc3QvPG51bT4gfCA8bWJveD4gKSBbIDxzaWdub2ZmPiBdCisnZ2l0LWFwcGx5bWJveCcgWy11XSBbLWtdIFstcV0gWy1tXSAoIC1jIC5kb3Rlc3QvPG51bT4gfCA8bWJveD4gKSBbIDxzaWdub2ZmPiBdCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzMsNiArMzMsMTQgQEAKIAltdW5naW5nLCBhbmQgaXMgbW9zdCB1c2VmdWwgd2hlbiB1c2VkIHRvIHJlYWQgYmFjayAnZ2l0CiAJZm9ybWF0LXBhdGNoIC0tbWJveCcgb3V0cHV0LgogCistbTo6CisJUGF0Y2hlcyBhcmUgYXBwbGllZCB3aXRoIGBnaXQtYXBwbHlgIGNvbW1hbmQsIGFuZCB1bmxlc3MKKwlpdCBjbGVhbmx5IGFwcGxpZXMgd2l0aG91dCBmdXp6LCB0aGUgcHJvY2Vzc2luZyBmYWlscy4KKwlXaXRoIHRoaXMgZmxhZywgaWYgYSB0cmVlIHRoYXQgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seQorCWlzIGZvdW5kIGluIGEgcmVwb3NpdG9yeSwgdGhlIHBhdGNoIGlzIGFwcGxpZWQgdG8gdGhlCisJdHJlZSBhbmQgdGhlbiBhIDMtd2F5IG1lcmdlIGJldHdlZW4gdGhlIHJlc3VsdGluZyB0cmVlCisJYW5kIHRoZSBjdXJyZW50IHRyZWUuCisKIC11OjoKIAlCeSBkZWZhdWx0LCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLCBhdXRob3IgbmFtZSBhbmQKIAlhdXRob3IgZW1haWwgYXJlIHRha2VuIGZyb20gdGhlIGUtbWFpbCB3aXRob3V0IGFueQpAQCAtNjcsNyArNzUsNyBAQAogCiBTRUUgQUxTTwogLS0tLS0tLS0KLWdpdGxpbms6Z2l0LWFwcGx5cGF0Y2hbMV0uCitnaXRsaW5rOmdpdC1hbVsxXSwgZ2l0bGluazpnaXQtYXBwbHlwYXRjaFsxXS4KIAogCiBBdXRob3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKaW5kZXggYjY3OTNjZi4uZmNkYTAxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1hcmNoaW1wb3J0IC0gSW1wb3J0IGFuIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdJVAorZ2l0LWFyY2hpbXBvcnQgLSBJbXBvcnQgYW4gQXJjaCByZXBvc2l0b3J5IGludG8gZ2l0CiAKIAogU1lOT1BTSVMKQEAgLTQwLDE0ICs0MCwxNCBAQAogCiBNRVJHRVMKIC0tLS0tLQotUGF0Y2ggbWVyZ2UgZGF0YSBmcm9tIEFyY2ggaXMgdXNlZCB0byBtYXJrIG1lcmdlcyBpbiBHSVQgYXMgd2VsbC4gR0lUIAorUGF0Y2ggbWVyZ2UgZGF0YSBmcm9tIEFyY2ggaXMgdXNlZCB0byBtYXJrIG1lcmdlcyBpbiBnaXQgYXMgd2VsbC4gZ2l0IAogZG9lcyBub3QgY2FyZSBtdWNoIGFib3V0IHRyYWNraW5nIHBhdGNoZXMsIGFuZCBvbmx5IGNvbnNpZGVycyBhIG1lcmdlIHdoZW4gYQogYnJhbmNoIGluY29ycG9yYXRlcyBhbGwgdGhlIGNvbW1pdHMgc2luY2UgdGhlIHBvaW50IHRoZXkgZm9ya2VkLiBUaGUgZW5kIHJlc3VsdAotaXMgdGhhdCBHSVQgd2lsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIGhvdyBmYXIgYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZC4gU28gdGhlIAoraXMgdGhhdCBnaXQgd2lsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIGhvdyBmYXIgYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZC4gU28gdGhlIAogaW1wb3J0IHByb2Nlc3MgZG9lcyBsb3NlIHNvbWUgcGF0Y2gtdHJhZGluZyBtZXRhZGF0YS4KIAogRm9ydHVuYXRlbHksIHdoZW4geW91IHRyeSBhbmQgbWVyZ2UgYnJhbmNoZXMgaW1wb3J0ZWQgZnJvbSBBcmNoLCAKLUdJVCB3aWxsIGZpbmQgYSBnb29kIG1lcmdlIGJhc2UsIGFuZCBpdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBpZGVudGlmeWluZyAKK2dpdCB3aWxsIGZpbmQgYSBnb29kIG1lcmdlIGJhc2UsIGFuZCBpdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBpZGVudGlmeWluZyAKIHBhdGNoZXMgdGhhdCBoYXZlIGJlZW4gdHJhZGVkIG91dC1vZi1zZXF1ZW5jZSBiZXR3ZWVuIHRoZSBicmFuY2hlcy4gCiAKIE9QVElPTlMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dAppbmRleCBmMjFhNmUwLi5hYjRkY2FlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWNhdC1maWxlKDEpCiA9PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2ZTk1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC0wLDAgKzEsNTAgQEAKK2dpdC1jaGVjay1yZWYtZm9ybWF0KDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2stcmVmLWZvcm1hdCAtIE1ha2Ugc3VyZSByZWYgbmFtZSBpcyB3ZWxsIGZvcm1lZC4KKworU1lOT1BTSVMKKy0tLS0tLS0tCisnZ2l0LWNoZWNrLXJlZi1mb3JtYXQnIDxyZWZuYW1lPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NoZWNrcyBpZiBhIGdpdmVuICdyZWZuYW1lJyBpcyBhY2NlcHRhYmxlLCBhbmQgZXhpdHMgbm9uLXplcm8gaWYKK2l0IGlzIG5vdC4KKworQSByZWZlcmVuY2UgaXMgdXNlZCBpbiBnaXQgdG8gc3BlY2lmeSBicmFuY2hlcyBhbmQgdGFncy4gIEEKK2JyYW5jaCBoZWFkIGlzIHN0b3JlZCB1bmRlciBgJEdJVF9ESVIvcmVmcy9oZWFkc2AgZGlyZWN0b3J5LCBhbmQKK2EgdGFnIGlzIHN0b3JlZCB1bmRlciBgJEdJVF9ESVIvcmVmcy90YWdzYCBkaXJlY3RvcnkuICBnaXQKK2ltcG9zZXMgdGhlIGZvbGxvd2luZyBydWxlcyBvbiBob3cgcmVmcyBhcmUgbmFtZWQ6CisKKy4gSXQgY291bGQgYmUgbmFtZWQgaGllcmFyY2hpY2FsbHkgKGkuZS4gc2VwYXJhdGVkIHdpdGggc2xhc2gKKyAgYC9gKSwgYnV0IGVhY2ggb2YgaXRzIGNvbXBvbmVudCBjYW5ub3QgYmVnaW4gd2l0aCBhIGRvdCBgLmA7CisKKy4gSXQgY2Fubm90IGhhdmUgdHdvIGNvbnNlY3V0aXZlIGRvdHMgYC4uYCBhbnl3aGVyZTsKKworLiBJdCBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlciAoaS5lLiBieXRlcyB3aG9zZQorICB2YWx1ZXMgYXJlIGxvd2VyIHRoYW4gXDA0MCwgb3IgXDE3NyBgREVMYCksIHNwYWNlLCB0aWxkZSBgfmAsCisgIGNhcmV0IGB7Y2FyZXR9YCwgb3IgY29sb24gYDpgIGFueXdoZXJlOworCisuIEl0IGNhbm5vdCBlbmQgd2l0aCBhIHNsYXNoIGAvYC4KKworVGhlc2UgcnVsZXMgbWFrZXMgaXQgZWFzeSBmb3Igc2hlbGwgc2NyaXB0IGJhc2VkIHRvb2xzIHRvIHBhcnNlCityZWZuYW1lcywgYW5kIGFsc28gYXZvaWRzIGFtYmlndWl0aWVzIGluIGNlcnRhaW4gcmVmbmFtZQorZXhwcmVzc2lvbnMgKHNlZSBnaXRsaW5rOmdpdC1yZXYtcGFyc2VbMV0pLiAgTmFtZWx5OgorCisuIGRvdWJsZS1kb3QgYC4uYCBhcmUgb2Z0ZW4gdXNlZCBhcyBpbiBgcmVmMS4ucmVmMmAsIGFuZCBpbiBzb21lCisgIGNvbnRleHQgdGhpcyBub3RhdGlvbiBtZWFucyBge2NhcmV0fXJlZjEgcmVmMmAgKGkuZS4gbm90IGluCisgIHJlZjEgYW5kIGluIHJlZjIpLgorCisuIHRpbGRlIGB+YCBhbmQgY2FyZXQgYHtjYXJldH1gIGFyZSB1c2VkIHRvIGludHJvZHVjZSBwb3N0Zml4CisgICdudGggcGFyZW50JyBhbmQgJ3BlZWwgb25pb24nIG9wZXJhdGlvbi4KKworLiBjb2xvbiBgOmAgaXMgdXNlZCBhcyBpbiBgc3JjcmVmOmRzdHJlZmAgdG8gbWVhbiAidXNlIHNyY3JlZlwncworICB2YWx1ZSBhbmQgc3RvcmUgaXQgaW4gZHN0cmVmIiBpbiBmZXRjaCBhbmQgcHVzaCBvcGVyYXRpb25zLgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CmluZGV4IDcwNjQ1YWUuLjU4OWRjOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY2hlY2tvdXQtaW5kZXgoMSkKID09PT09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CmluZGV4IGY3NTNjMTQuLmI3YmIxYjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKQEAgLTcsMTIgKzcsMjQgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWNoZWNrb3V0JyBbLWZdIFstYiA8bmV3X2JyYW5jaD5dIFs8YnJhbmNoPl0KKydnaXQtY2hlY2tvdXQnIFstZl0gWy1iIDxuZXdfYnJhbmNoPl0gWzxicmFuY2g+XSBbPHBhdGhzPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1VcGRhdGVzIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIHRvIHJlZmxlY3QgdGhlIHNwZWNpZmllZCBicmFuY2gsCi08YnJhbmNoPi4gVXBkYXRlcyBIRUFEIHRvIGJlIDxicmFuY2g+IG9yLCBpZiBzcGVjaWZpZWQsIDxuZXdfYnJhbmNoPi4KKworV2hlbiA8cGF0aHM+IGFyZSBub3QgZ2l2ZW4sIHRoaXMgY29tbWFuZCBzd2l0Y2hlcyBicmFuY2hlcywgYnkKK3VwZGF0aW5nIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIHRvIHJlZmxlY3QgdGhlIHNwZWNpZmllZAorYnJhbmNoLCA8YnJhbmNoPiwgYW5kIHVwZGF0aW5nIEhFQUQgdG8gYmUgPGJyYW5jaD4gb3IsIGlmCitzcGVjaWZpZWQsIDxuZXdfYnJhbmNoPi4KKworV2hlbiA8cGF0aHM+IGFyZSBnaXZlbiwgdGhpcyBjb21tYW5kIGRvZXMgKm5vdCogc3dpdGNoCiticmFuY2hlcy4gIEl0IHVwZGF0ZXMgdGhlIG5hbWVkIHBhdGhzIGluIHRoZSB3b3JraW5nIHRyZWUgZnJvbQordGhlIGluZGV4IGZpbGUgKGkuZS4gaXQgcnVucyBgZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11YCkuICBJbgordGhpcyBjYXNlLCBgLWZgIGFuZCBgLWJgIG9wdGlvbnMgYXJlIG1lYW5pbmdsZXNzIGFuZCBnaXZpbmcKK2VpdGhlciBvZiB0aGVtIHJlc3VsdHMgaW4gYW4gZXJyb3IuICA8YnJhbmNoPiBhcmd1bWVudCBjYW4gYmUKK3VzZWQgdG8gc3BlY2lmeSBhIHNwZWNpZmljIHRyZWUtaXNoIHRvIHVwZGF0ZSB0aGUgaW5kZXggZm9yIHRoZQorZ2l2ZW4gcGF0aHMgYmVmb3JlIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUuCisKIAogT1BUSU9OUwogLS0tLS0tLQpAQCAtMjksNiArNDEsMzAgQEAKIAlCcmFuY2ggdG8gY2hlY2tvdXQ7IG1heSBiZSBhbnkgb2JqZWN0IElEIHRoYXQgcmVzb2x2ZXMgdG8gYQogCWNvbW1pdC4gRGVmYXVsdHMgdG8gSEVBRC4KIAorCitFWEFNUExFCistLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2UgY2hlY2tzIG91dCB0aGUgYG1hc3RlcmAgYnJhbmNoLCByZXZlcnRzCit0aGUgYE1ha2VmaWxlYCB0byB0d28gcmV2aXNpb25zIGJhY2ssIGRlbGV0ZXMgaGVsbG8uYyBieQorbWlzdGFrZSwgYW5kIGdldHMgaXQgYmFjayBmcm9tIHRoZSBpbmRleC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IGNoZWNrb3V0IG1hc3Rlcn4yIE1ha2VmaWxlCiskIHJtIC1mIGhlbGxvLmMKKyQgZ2l0IGNoZWNrb3V0IGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCitJZiB5b3UgaGF2ZSBhbiB1bmZvcnR1bmF0ZSBicmFuY2ggdGhhdCBpcyBuYW1lZCBgaGVsbG8uY2AsIHRoZQorbGFzdCBzdGVwIGFib3ZlIHdvdWxkIGJlIGNvbmZ1c2VkIGFzIGFuIGluc3RydWN0aW9uIHRvIHN3aXRjaCB0bwordGhhdCBicmFuY2guICBZb3Ugc2hvdWxkIGluc3RlYWQgd3JpdGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLS0gaGVsbG8uYworLS0tLS0tLS0tLS0tCisKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CmluZGV4IDg0NjJlMDYuLjI2ZTA0NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY2hlcnJ5LXBpY2soMSkKID09PT09PT09PT09PT09PT09PQotdjAuOTkuNSBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLXBhY2sudHh0CmluZGV4IGE3ODY4ZTUuLmNmYzdiNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLXBhY2sudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWNsb25lLXBhY2soMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSwyNyArOCwyMyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtY2xvbmUtcGFjaycgWy1xXSBbLS1leGVjPTxnaXQtdXBsb2FkLXBhY2s+XSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPGhlYWQ+Li4uXQorJ2dpdC1jbG9uZS1wYWNrJyBbLS1leGVjPTxnaXQtdXBsb2FkLXBhY2s+XSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPGhlYWQ+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KIENsb25lcyBhIHJlcG9zaXRvcnkgaW50byB0aGUgY3VycmVudCByZXBvc2l0b3J5IGJ5IGludm9raW5nCiAnZ2l0LXVwbG9hZC1wYWNrJywgcG9zc2libHkgb24gdGhlIHJlbW90ZSBob3N0IHZpYSBzc2gsIGluCi10aGUgbmFtZWQgcmVwb3NpdG9yeSwgYW5kIGludm9raW5nICdnaXQtdW5wYWNrLW9iamVjdHMnIGxvY2FsbHkKLXRvIHJlY2VpdmUgdGhlIHBhY2suCit0aGUgbmFtZWQgcmVwb3NpdG9yeSwgYW5kIHN0b3JlcyB0aGUgc2VudCBwYWNrIGluIHRoZSBsb2NhbAorcmVwb3NpdG9yeS4KIAogT1BUSU9OUwogLS0tLS0tLQotLXE6OgotCVBhc3MgJy1xJyBmbGFnIHRvICdnaXQtdW5wYWNrLW9iamVjdHMnOyB0aGlzIG1ha2VzIHRoZQotCWNsb25pbmcgcHJvY2VzcyBsZXNzIHZlcmJvc2UuCi0KIC0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPjo6CiAJVXNlIHRoaXMgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byAnZ2l0LXVwbG9hZC1wYWNrJyBvbiB0aGUKIAlyZW1vdGUgc2lkZSwgaWYgaXQgaXMgbm90IGZvdW5kIG9uIHlvdXIgJFBBVEguCiAJSW5zdGFsbGF0aW9ucyBvZiBzc2hkIGlnbm9yZSB0aGUgdXNlcidzIGVudmlyb25tZW50CiAJc2V0dXAgc2NyaXB0cyBmb3IgbG9naW4gc2hlbGxzIChlLmcuIC5iYXNoX3Byb2ZpbGUpIGFuZAotCXlvdXIgcHJpdmF0ZWx5IGluc3RhbGxlZCBHSVQgbWF5IG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtCisJeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIGdpdCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KIAlkZWZhdWx0ICRQQVRILiAgQW5vdGhlciB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBpcyB0byBzZXQKIAl1cCB5b3VyICRQQVRIIGluICIuYmFzaHJjIiwgYnV0IHRoaXMgZmxhZyBpcyBmb3IgcGVvcGxlCiAJd2hvIGRvIG5vdCB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vbi1pbnRlcmFjdGl2ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CmluZGV4IDdkNzEzYzcuLmRkOTJjZGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY2xvbmUoMSkKID09PT09PT09PT09PQotdjAuMSwgSnVseSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTksNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBjbG9uZScgWy1sIFstc11dIFstcV0gWy1uXSBbLXUgPHVwbG9hZC1wYWNrPl0gPHJlcG9zaXRvcnk+IDxkaXJlY3Rvcnk+CisnZ2l0LWNsb25lJyBbLWwgWy1zXV0gWy1xXSBbLW5dIFstdSA8dXBsb2FkLXBhY2s+XSA8cmVwb3NpdG9yeT4gPGRpcmVjdG9yeT4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKaW5kZXggOWFiYTg2OC4uYjY0Y2Q2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1jb21taXQtdHJlZSgxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC00OSw4ICs0OCw4IEBACiAtIGNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBhbmQgdGhlIGNvbW1pdCB0aW1lLgogCiBJZiBub3QgcHJvdmlkZWQsICJnaXQtY29tbWl0LXRyZWUiIHVzZXMgeW91ciBuYW1lLCBob3N0bmFtZSBhbmQgZG9tYWluIHRvCi1wcm92aWRlIGF1dGhvciBhbmQgY29tbWl0dGVyIGluZm8uIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlCi1mb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorcHJvdmlkZSBhdXRob3IgYW5kIGNvbW1pdHRlciBpbmZvLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5CitlaXRoZXIgYC5naXQvY29uZmlnYCBmaWxlLCBvciB1c2luZyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KIAogCUdJVF9BVVRIT1JfTkFNRQogCUdJVF9BVVRIT1JfRU1BSUwKQEAgLTYwLDEwICs1OSwxNyBAQAogCiAobmIgIjwiLCAiPiIgYW5kICJcbiJzIGFyZSBzdHJpcHBlZCkKIAorSW4gYC5naXQvY29uZmlnYCBmaWxlLCB0aGUgZm9sbG93aW5nIGl0ZW1zIGFyZSB1c2VkOgorCisJW3VzZXJdCisJCW5hbWUgPSAiWW91ciBOYW1lIgorCQllbWFpbCA9ICJ5b3VyQGVtYWlsLmFkZHJlc3MueHoiCisKIEEgY29tbWl0IGNvbW1lbnQgaXMgcmVhZCBmcm9tIHN0ZGluIChtYXggOTk5IGNoYXJzKS4gSWYgYSBjaGFuZ2Vsb2cKIGVudHJ5IGlzIG5vdCBwcm92aWRlZCB2aWEgIjwiIHJlZGlyZWN0aW9uLCAiZ2l0LWNvbW1pdC10cmVlIiB3aWxsIGp1c3Qgd2FpdAogZm9yIG9uZSB0byBiZSBlbnRlcmVkIGFuZCB0ZXJtaW5hdGVkIHdpdGggXkQuCiAKKwogRGlhZ25vc3RpY3MKIC0tLS0tLS0tLS0tCiBZb3UgZG9uJ3QgZXhpc3QuIEdvIGF3YXkhOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CmluZGV4IDc5MGE4ZWIuLjFlZGMyNzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1jb21taXQoMSkKID09PT09PT09PT09PT0KLXYwLjk5LjQsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTgsNyArNyw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBjb21taXQnIFstYV0gWy1zXSBbLXZdIFsoLWMgfCAtQykgPGNvbW1pdD4gfCAtRiA8ZmlsZT4gfCAtbSA8bXNnPl0gWy1lXSA8ZmlsZT4uLi4KKydnaXQtY29tbWl0JyBbLWFdIFstc10gWy12XSBbKC1jIHwgLUMpIDxjb21taXQ+IHwgLUYgPGZpbGU+IHwgLW0gPG1zZz5dIFstZV0gPGZpbGU+Li4uCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29udmVydC1vYmplY3RzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbnZlcnQtb2JqZWN0cy50eHQKaW5kZXggNmNlNjJkYy4uYjEyMjBjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29udmVydC1vYmplY3RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb252ZXJ0LW9iamVjdHMudHh0CkBAIC0xLDEwICsxLDkgQEAKIGdpdC1jb252ZXJ0LW9iamVjdHMoMSkKID09PT09PT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KLWdpdC1jb252ZXJ0LW9iamVjdHMgLSBDb252ZXJ0cyBvbGQtc3R5bGUgR0lUIHJlcG9zaXRvcnkKK2dpdC1jb252ZXJ0LW9iamVjdHMgLSBDb252ZXJ0cyBvbGQtc3R5bGUgZ2l0IHJlcG9zaXRvcnkKIAogCiBTWU5PUFNJUwpAQCAtMTMsNyArMTIsNyBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLUNvbnZlcnRzIG9sZC1zdHlsZSBHSVQgcmVwb3NpdG9yeSB0byB0aGUgbGF0ZXN0IGZvcm1hdAorQ29udmVydHMgb2xkLXN0eWxlIGdpdCByZXBvc2l0b3J5IHRvIHRoZSBsYXRlc3QgZm9ybWF0CiAKIAogQXV0aG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dAppbmRleCBiNTc1M2E0Li5mNTI0OGM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY3ZzaW1wb3J0KDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMTEsNyArMTAsNyBAQAogLS0tLS0tLS0KICdnaXQtY3ZzaW1wb3J0JyBbIC1vIDxicmFuY2gtZm9yLUhFQUQ+IF0gWyAtaCBdIFsgLXYgXQogCQkJWyAtZCA8Q1ZTUk9PVD4gXSBbIC1wIDxvcHRpb25zLWZvci1jdnNwcz4gXQotCQkJWyAtQyA8R0lUX3JlcG9zaXRvcnk+IF0gWyAtaSBdIFsgLWsgXQorCQkJWyAtQyA8Z2l0X3JlcG9zaXRvcnk+IF0gWyAtaSBdIFsgLWsgXQogCQkJWyAtcyA8c3Vic3Q+IF0gWyAtbSBdIFsgLU0gcmVnZXggXSBbIDxDVlNfbW9kdWxlPiBdCiAKIApAQCAtMzEsNyArMzAsNyBAQAogCWFyZSBzdXBwb3J0ZWQuCiAKIC1DIDx0YXJnZXQtZGlyPjo6Ci0gICAgICAgIFRoZSBHSVQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKyAgICAgICAgVGhlIGdpdCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAogICAgICAgICBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLiAgRGVmYXVsdCBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAKIC1pOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CmluZGV4IDA2NWYyYWEuLjY3YzVmMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dApAQCAtMywxMSArMywxMiBAQAogCiBOQU1FCiAtLS0tCi1naXQtZGFlbW9uIC0gQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgR0lUIHJlcG9zaXRvcmllcy4KK2dpdC1kYWVtb24gLSBBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBnaXQgcmVwb3NpdG9yaWVzLgogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtZGFlbW9uJyBbLS12ZXJib3NlXSBbLS1zeXNsb2ddIFstLWluZXRkIHwgLS1wb3J0PW5dCisnZ2l0LWRhZW1vbicgWy0tdmVyYm9zZV0gWy0tc3lzbG9nXSBbLS1pbmV0ZCB8IC0tcG9ydD1uXSBbLS1leHBvcnQtYWxsXQorICAgICAgICAgICAgIFstLXRpbWVvdXQ9bl0gWy0taW5pdC10aW1lb3V0PW5dIFtkaXJlY3RvcnkuLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMjAsMTggKzIxLDM1IEBACiAKIEl0IHZlcmlmaWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kCiBpdCB3aWxsIHJlZnVzZSB0byBleHBvcnQgYW55IGdpdCBkaXJlY3RvcnkgdGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZAotZm9yIGV4cG9ydCB0aGlzIHdheS4KK2ZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUgJy0tZXhwb3J0LWFsbCcgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCkuIElmIHlvdQorcGFzcyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyAnZ2l0LWRhZW1vbicgYXJndW1lbnRzLCB5b3UgY2FuIGZ1cnRoZXIgcmVzdHJpY3QKK3RoZSBvZmZlcnMgdG8gYSB3aGl0ZWxpc3QgY29tcHJpc2luZyBvZiB0aG9zZS4KIAogVGhpcyBpcyBpZGVhbGx5IHN1aXRlZCBmb3IgcmVhZC1vbmx5IHVwZGF0ZXMsIGllIHB1bGxpbmcgZnJvbSBnaXQgcmVwb3NpdG9yaWVzLgogCiBPUFRJT05TCiAtLS0tLS0tCistLWV4cG9ydC1hbGw6OgorCUFsbG93IHB1bGxpbmcgZnJvbSBhbGwgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UgR0lUIHJlcG9zaXRvcmllcworCShoYXZlIHRoZSAnb2JqZWN0cycgc3ViZGlyZWN0b3J5IGFuZCBhICdIRUFEJyBmaWxlKSwgZXZlbiBpZiB0aGV5CisJZG8gbm90IGhhdmUgdGhlICdnaXQtZGFlbW9uLWV4cG9ydC1vaycgZmlsZS4KKwogLS1pbmV0ZDo6CiAJSGF2ZSB0aGUgc2VydmVyIHJ1biBhcyBhbiBpbmV0ZCBzZXJ2aWNlLgogCiAtLXBvcnQ6OgogCUxpc3RlbiBvbiBhbiBhbHRlcm5hdGl2ZSBwb3J0LgogCistLWluaXQtdGltZW91dDo6CisJVGltZW91dCBiZXR3ZWVuIHRoZSBtb21lbnQgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZQorCWNsaWVudCByZXF1ZXN0IGlzIHJlY2VpdmVkICh0eXBpY2FsbHkgYSByYXRoZXIgbG93IHZhbHVlLCBzaW5jZQorCXRoYXQgc2hvdWxkIGJlIGJhc2ljYWxseSBpbW1lZGlhdGUpLgorCistLXRpbWVvdXQ6OgorCVRpbWVvdXQgZm9yIHNwZWNpZmljIGNsaWVudCBzdWItcmVxdWVzdHMuIFRoaXMgaW5jbHVkZXMgdGhlIHRpbWUKKwlpdCB0YWtlcyBmb3IgdGhlIHNlcnZlciB0byBwcm9jZXNzIHRoZSBzdWItcmVxdWVzdCBhbmQgdGltZSBzcGVudAorCXdhaXRpbmcgZm9yIG5leHQgY2xpZW50J3MgcmVxdWVzdC4KKwogLS1zeXNsb2c6OgogCUxvZyB0byBzeXNsb2cgaW5zdGVhZCBvZiBzdGRlcnIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbXBseQogCS0tdmVyYm9zZSwgdGh1cyBieSBkZWZhdWx0IG9ubHkgZXJyb3IgY29uZGl0aW9ucyB3aWxsIGJlIGxvZ2dlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKaW5kZXggZWI5ZmI3NC4uZTM4NzM4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtZGlmZi1maWxlcygxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKaW5kZXggOGI2YTk1My4uMmZjM2VlZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtZGlmZi1pbmRleCgxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtc3RhZ2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtc3RhZ2VzLnR4dAppbmRleCAyNzZkN2JkLi4yOGM2MGZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXN0YWdlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1zdGFnZXMudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWRpZmYtc3RhZ2VzKDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bmUgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dAppbmRleCAzMzlhOTIyOC4uZjU3YzhkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWRpZmYtdHJlZSgxKQogPT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWRpZmYtdHJlZScgWy0tc3RkaW5dIFstbV0gWy1zXSBbLXZdIFstLXByZXR0eV0gWy10XSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8dHJlZS1pc2g+XSBbPHBhdGg+Li4uXQorJ2dpdC1kaWZmLXRyZWUnIFstLXN0ZGluXSBbLW1dIFstc10gWy12XSBbLS1wcmV0dHldIFstdF0gWy1yXSBbLS1yb290XSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8dHJlZS1pc2g+XSBbPHBhdGg+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTM0LDYgKzMzLDkgQEAKIAlOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgZG9lcyBub3QgcHJvdmlkZSBhbnkgd2lsZGNhcmQgb3IgcmVnZXhwCiAJZmVhdHVyZXMuCiAKKy1yOjoKKyAgICAgICAgcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworCiAtdDo6CiAJc2hvdyB0cmVlIGVudHJ5IGl0c2VsZiBhcyB3ZWxsIGFzIHN1YnRyZWVzLiAgSW1wbGllcyAtci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dAppbmRleCAxZDI4MTgyLi5lYTZmYWFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1mZXRjaC1wYWNrKDEpCiA9PT09PT09PT09PT09PT09PQotdjAuMSwgSnVseSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTM1LDcgKzM0LDcgQEAKIAlyZW1vdGUgc2lkZSwgaWYgaXMgbm90IGZvdW5kIG9uIHlvdXIgJFBBVEguCiAJSW5zdGFsbGF0aW9ucyBvZiBzc2hkIGlnbm9yZXMgdGhlIHVzZXIncyBlbnZpcm9ubWVudAogCXNldHVwIHNjcmlwdHMgZm9yIGxvZ2luIHNoZWxscyAoZS5nLiAuYmFzaF9wcm9maWxlKSBhbmQKLQl5b3VyIHByaXZhdGVseSBpbnN0YWxsZWQgR0lUIG1heSBub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbQorCXlvdXIgcHJpdmF0ZWx5IGluc3RhbGxlZCBnaXQgbWF5IG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtCiAJZGVmYXVsdCAkUEFUSC4gIEFub3RoZXIgd29ya2Fyb3VuZCBzdWdnZXN0ZWQgaXMgdG8gc2V0CiAJdXAgeW91ciAkUEFUSCBpbiAiLmJhc2hyYyIsIGJ1dCB0aGlzIGZsYWcgaXMgZm9yIHBlb3BsZQogCXdobyBkbyBub3Qgd2FudCB0byBwYXkgdGhlIG92ZXJoZWFkIGZvciBub24taW50ZXJhY3RpdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dAppbmRleCAxZmE5ZjRkLi43MTY5MzY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWZldGNoKDEpCiA9PT09PT09PT09PT0KLXYwLjk5LjUsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTI2LDYgKzI1LDExIEBACiAtLS0tLS0tCiBpbmNsdWRlOjpwdWxsLWZldGNoLXBhcmFtLnR4dFtdCiAKKy1hLCBcLS1hcHBlbmQ6OgorCUFwcGVuZCByZWYgbmFtZXMgYW5kIG9iamVjdCBuYW1lcyBvZiBmZXRjaGVkIHJlZnMgdG8gdGhlCisJZXhpc3RpbmcgY29udGVudHMgb2YgJEdJVF9ESVIvRkVUQ0hfSEVBRC4gIFdpdGhvdXQgdGhpcworCW9wdGlvbiBvbGQgZGF0YSBpbiAkR0lUX0RJUi9GRVRDSF9IRUFEIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisKIC11LCBcLS11cGRhdGUtaGVhZC1vazo6CiAJQnkgZGVmYXVsdCAnZ2l0LWZldGNoJyByZWZ1c2VzIHRvIHVwZGF0ZSB0aGUgaGVhZCB3aGljaAogCWNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIFRoaXMgZmxhZyBkaXNhYmxlcyB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IGExNDgzZmYuLmYzZWY0YzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWZvcm1hdC1wYXRjaCcgWy1uXVstbyA8ZGlyPl1bLWtdWy0tbWJveF1bLS1kaWZmLW9wdGlvbnNdIDxoaXM+IFs8bWluZT5dCisnZ2l0LWZvcm1hdC1wYXRjaCcgWy1uXVstbyA8ZGlyPnwtLXN0ZG91dF1bLWtdWy0tbWJveF1bLS1kaWZmLW9wdGlvbnNdIDxoaXM+IFs8bWluZT5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNTQsNiArNTQsMTAgQEAKIAljb25jYXRlbmF0ZWQgdG9nZXRoZXIgYW5kIGZlZCB0byBgZ2l0LWFwcGx5bWJveGAuCiAJSW1wbGllcyAtLWF1dGhvciBhbmQgLS1kYXRlLgogCistLXN0ZG91dDo6CisJVGhpcyBmbGFnIGdlbmVyYXRlcyB0aGUgbWJveCBmb3JtYXR0ZWQgb3V0cHV0IHRvIHRoZQorCXN0YW5kYXJkIG91dHB1dCwgaW5zdGVhZCBvZiBzYXZpbmcgdGhlbSBpbnRvIGEgZmlsZSBwZXIKKwlwYXRjaCBhbmQgaW1wbGllcyAtLW1ib3guCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay1vYmplY3RzLnR4dAppbmRleCBiYTI1MWE1Li41ZGM5ZGJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtZnNjay1vYmplY3RzKDEpCiA9PT09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC00MiwyMiArNDEsMjIgQEAKIAkoJEdJVF9ESVIvb2JqZWN0cyksIG1ha2luZyBzdXJlIHRoYXQgaXQgaXMgY29uc2lzdGVudCBhbmQKIAljb21wbGV0ZSB3aXRob3V0IHJlZmVycmluZyB0byBvYmplY3RzIGZvdW5kIGluIGFsdGVybmF0ZQogCW9iamVjdCBwb29scyBsaXN0ZWQgaW4gR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMsCi0Jbm9yIHBhY2tlZCBHSVQgYXJjaGl2ZXMgZm91bmQgaW4gJEdJVF9ESVIvb2JqZWN0cy9wYWNrOworCW5vciBwYWNrZWQgZ2l0IGFyY2hpdmVzIGZvdW5kIGluICRHSVRfRElSL29iamVjdHMvcGFjazsKIAljYW5ub3QgYmUgdXNlZCB3aXRoIC0tZnVsbC4KIAogLS1mdWxsOjoKIAlDaGVjayBub3QganVzdCBvYmplY3RzIGluIEdJVF9PQkpFQ1RfRElSRUNUT1JZCiAJKCRHSVRfRElSL29iamVjdHMpLCBidXQgYWxzbyB0aGUgb25lcyBmb3VuZCBpbiBhbHRlcm5hdGUKIAlvYmplY3QgcG9vbHMgbGlzdGVkIGluIEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTLAotCWFuZCBpbiBwYWNrZWQgR0lUIGFyY2hpdmVzIGZvdW5kIGluICRHSVRfRElSL29iamVjdHMvcGFjaworCWFuZCBpbiBwYWNrZWQgZ2l0IGFyY2hpdmVzIGZvdW5kIGluICRHSVRfRElSL29iamVjdHMvcGFjawogCWFuZCBjb3JyZXNwb25kaW5nIHBhY2sgc3ViZGlyZWN0b3JpZXMgaW4gYWx0ZXJuYXRlCiAJb2JqZWN0IHBvb2xzOyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc3RhbmRhbG9uZS4KIAogLS1zdHJpY3Q6OgogCUVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZywgbmFtZWx5IHRvIGNhdGNoIGEgZmlsZSBtb2RlCiAJcmVjb3JkZWQgd2l0aCBnK3cgYml0IHNldCwgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgb2xkZXIKLQl2ZXJzaW9ucyBvZiBHSVQuICBFeGlzdGluZyByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKLQlMaW51eCBrZXJuZWwsIEdJVCBpdHNlbGYsIGFuZCBzcGFyc2UgcmVwb3NpdG9yeSBoYXZlIG9sZAorCXZlcnNpb25zIG9mIGdpdC4gIEV4aXN0aW5nIHJlcG9zaXRvcmllcywgaW5jbHVkaW5nIHRoZQorCUxpbnV4IGtlcm5lbCwgZ2l0IGl0c2VsZiwgYW5kIHNwYXJzZSByZXBvc2l0b3J5IGhhdmUgb2xkCiAJb2JqZWN0cyB0aGF0IHRyaWdnZXJzIHRoaXMgY2hlY2ssIGJ1dCBpdCBpcyByZWNvbW1lbmRlZAogCXRvIGNoZWNrIG5ldyBwcm9qZWN0cyB3aXRoIHRoaXMgZmxhZy4KIApAQCAtODEsNyArODAsNyBAQAogdGhlIGhvcGVzIHRoYXQgc29tZWJvZHkgZWxzZSBoYXMgdGhlIG9iamVjdCB5b3UgaGF2ZSBjb3JydXB0ZWQpLgogCiBPZiBjb3Vyc2UsICJ2YWxpZCB0cmVlIiBkb2Vzbid0IG1lYW4gdGhhdCBpdCB3YXNuJ3QgZ2VuZXJhdGVkIGJ5IHNvbWUKLWV2aWwgcGVyc29uLCBhbmQgdGhlIGVuZCByZXN1bHQgbWlnaHQgYmUgY3JhcC4gR2l0IGlzIGEgcmV2aXNpb24KK2V2aWwgcGVyc29uLCBhbmQgdGhlIGVuZCByZXN1bHQgbWlnaHQgYmUgY3JhcC4gZ2l0IGlzIGEgcmV2aXNpb24KIHRyYWNraW5nIHN5c3RlbSwgbm90IGEgcXVhbGl0eSBhc3N1cmFuY2Ugc3lzdGVtIDspCiAKIEV4dHJhY3RlZCBEaWFnbm9zdGljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dAppbmRleCA1ZjA4MjE2Li4wMTc1NzkzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1ncmVwKDEpCiA9PT09PT09PT09PQotdjAuOTkuNiwgU2VwIDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CmluZGV4IDkzNWNjNjYuLjkyMzlmMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtaGFzaC1vYmplY3QoMSkKID09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dAppbmRleCBjMDM0MjcyLi4wODg2MjRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dApAQCAtMSwxMCArMSw5IEBACiBnaXQtaHR0cC1mZXRjaCgxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KLWdpdC1odHRwLWZldGNoIC0gRG93bmxvYWRzIGEgcmVtb3RlIEdJVCByZXBvc2l0b3J5IHZpYSBIVFRQCitnaXQtaHR0cC1mZXRjaCAtIERvd25sb2FkcyBhIHJlbW90ZSBnaXQgcmVwb3NpdG9yeSB2aWEgSFRUUAogCiAKIFNZTk9QU0lTCkBAIC0xMyw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotRG93bmxvYWRzIGEgcmVtb3RlIEdJVCByZXBvc2l0b3J5IHZpYSBIVFRQLgorRG93bmxvYWRzIGEgcmVtb3RlIGdpdCByZXBvc2l0b3J5IHZpYSBIVFRQLgogCiAtYzo6CiAJR2V0IHRoZSBjb21taXQgb2JqZWN0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZTU1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CkBAIC0wLDAgKzEsNDQgQEAKK2dpdC1pbmRleC1wYWNrKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5kZXgtcGFjayAtIEJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtaW5kZXgtcGFjaycgWy1vIDxpbmRleC1maWxlPl0gPHBhY2stZmlsZT4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIGEgcGFja2VkIGFyY2hpdmUgKC5wYWNrKSBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZSwgYW5kCitidWlsZHMgYSBwYWNrIGluZGV4IGZpbGUgKC5pZHgpIGZvciBpdC4gIFRoZSBwYWNrZWQgYXJjaGl2ZQordG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCBjYW4gdGhlbiBiZSBwbGFjZWQgaW4gdGhlCitvYmplY3RzL3BhY2svIGRpcmVjdG9yeSBvZiBhIGdpdCByZXBvc2l0b3J5LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1vIDxpbmRleC1maWxlPjo6CisJV3JpdGUgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4IGludG8gdGhlIHNwZWNpZmllZAorCWZpbGUuICBXaXRob3V0IHRoaXMgb3B0aW9uIHRoZSBuYW1lIG9mIHBhY2sgaW5kZXgKKwlmaWxlIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIG5hbWUgb2YgcGFja2VkIGFyY2hpdmUKKwlmaWxlIGJ5IHJlcGxhY2luZyAucGFjayB3aXRoIC5pZHggKGFuZCB0aGUgcHJvZ3JhbQorCWZhaWxzIGlmIHRoZSBuYW1lIG9mIHBhY2tlZCBhcmNoaXZlIGRvZXMgbm90IGVuZAorCXdpdGggLnBhY2spLgorCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IFNlcmdleSBWbGFzb3YgPHZzdUBhbHRsaW51eC5ydT4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBTZXJnZXkgVmxhc292CisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LWRiLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CmluZGV4IGVmMmQwNGEuLmVmMTgyNmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWluaXQtZGIoMSkKID09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1sb2NhbC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2NhbC1mZXRjaC50eHQKaW5kZXggY2NmOTczNS4uODdhYmVjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9jYWwtZmV0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxvY2FsLWZldGNoLnR4dApAQCAtMSwxMCArMSw5IEBACiBnaXQtbG9jYWwtZmV0Y2goMSkKID09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQotZ2l0LWxvY2FsLWZldGNoIC0gRHVwbGljYXRlcyBhbm90aGVyIEdJVCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtCitnaXQtbG9jYWwtZmV0Y2ggLSBEdXBsaWNhdGVzIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgb24gYSBsb2NhbCBzeXN0ZW0KIAogCiBTWU5PUFNJUwpAQCAtMTMsNyArMTIsNyBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLUR1cGxpY2F0ZXMgYW5vdGhlciBHSVQgcmVwb3NpdG9yeSBvbiBhIGxvY2FsIHN5c3RlbS4KK0R1cGxpY2F0ZXMgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBvbiBhIGxvY2FsIHN5c3RlbS4KIAogT1BUSU9OUwogLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKaW5kZXggMmEwZTVhYy4uMTNhMzk5OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWxvZygxKQogPT09PT09PT09PQotdjAuOTkuNCwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IGxvZycgPG9wdGlvbj4uLi4KKydnaXQtbG9nJyA8b3B0aW9uPi4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dAppbmRleCBmNDUwMWQ2Li44YzE3ODRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CkBAIC01NCw3ICs1NCw3IEBACiAJc3VjY2VlZC4KIAogLXo6OgotCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0CisJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQuCiAKIC14fC0tZXhjbHVkZT08cGF0dGVybj46OgogCVNraXBzIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4uCkBAIC0xMDAsNiArMTAwLDEwIEBACiB0aGUgdXNlciAob3IgdGhlIHBvcmNlbGFpbikgdG8gc2VlIHdoYXQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVjb3JkZWQgYXQgdGhlCiBwYXRoLiAoc2VlIGdpdC1yZWFkLXRyZWUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3RhdGUpCiAKK1doZW4gYC16YCBvcHRpb24gaXMgbm90IHVzZWQsIFRBQiwgTEYsIGFuZCBiYWNrc2xhc2ggY2hhcmFjdGVycworaW4gcGF0aG5hbWVzIGFyZSByZXByZXNlbnRlZCBhcyBgXHRgLCBgXG5gLCBhbmQgYFxcYCwKK3Jlc3BlY3RpdmVseS4KKwogCiBFeGNsdWRlIFBhdHRlcm5zCiAtLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dAppbmRleCA4OWJkNjA5Li5jMGE4MGQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtbHMtcmVtb3RlKDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CmluZGV4IDBkMTU5ZmQuLmJhMDQzOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWxzLXRyZWUoMSkKID09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zOSw2ICszOCwxMCBAQAogLS0tLS0tLS0tLS0tLQogICAgICAgICA8bW9kZT4gU1AgPHR5cGU+IFNQIDxvYmplY3Q+IFRBQiA8ZmlsZT4KIAorV2hlbiBgLXpgIG9wdGlvbiBpcyBub3QgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAorcmVzcGVjdGl2ZWx5LgorCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dAppbmRleCA1NTdkMmU5Li4wM2E5NDc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKQEAgLTcsNyArNyw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1tYWlsc3BsaXQnIDxtYm94PiA8ZGlyZWN0b3J5PgorJ2dpdC1tYWlsc3BsaXQnIFstZDxwcmVjPl0gWzxtYm94Pl0gPGRpcmVjdG9yeT4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0xNywxNCArMTcsMjMgQEAKIE9QVElPTlMKIC0tLS0tLS0KIDxtYm94Pjo6Ci0JTWJveCBmaWxlIHRvIHNwbGl0LgorCU1ib3ggZmlsZSB0byBzcGxpdC4gIElmIG5vdCBnaXZlbiwgdGhlIG1ib3ggaXMgcmVhZCBmcm9tCisJdGhlIHN0YW5kYXJkIGlucHV0LgogCiA8ZGlyZWN0b3J5Pjo6CiAJRGlyZWN0b3J5IGluIHdoaWNoIHRvIHBsYWNlIHRoZSBpbmRpdmlkdWFsIG1lc3NhZ2VzLgogCistZDxwcmVjPjo6CisJSW5zdGVhZCBvZiB0aGUgZGVmYXVsdCA0IGRpZ2l0cyB3aXRoIGxlYWRpbmcgemVyb3MsCisJZGlmZmVyZW50IHByZWNpc2lvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciB0aGUgZ2VuZXJhdGVkCisJZmlsZW5hbWVzLgorCisKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KK2FuZCBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CisKIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKaW5kZXggZTQ2OTIxNi4uZDFkNTZmMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtbWVyZ2UtYmFzZSgxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dAppbmRleCA1Y2FlZTkwLi5kMDcyZmRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW1lcmdlLWluZGV4KDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLW9uZS1maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLW9uZS1maWxlLnR4dAppbmRleCA3MTI3Mzk3Li44NmFhZDM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW1lcmdlLW9uZS1maWxlKDEpCiA9PT09PT09PT09PT09PT09PT09PT0KLXYwLjk5LjQsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAppbmRleCBkY2EzNjNkLi5hMDA3YThiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW1lcmdlKDEpCiA9PT09PT09PT09PT0KLXYwLjk5LjYsIFNlcCAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dAppbmRleCA0NGVkNGI1Li4yODYwYTNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW1rdGFnKDEpCiA9PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQ1ODgyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0CkBAIC0wLDAgKzEsNTEgQEAKK2dpdC1tdigxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tdiAtIFNjcmlwdCB1c2VkIHRvIG1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgZGlyZWN0b3J5IG9yIHN5bWxpbmsuCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCisnZ2l0LW12JyBbLWZdIFstbl0gPHNvdXJjZT4gPGRlc3RpbmF0aW9uPgorJ2dpdC1tdicgWy1mXSBbLWtdIFstbl0gPHNvdXJjZT4gLi4uIDxkZXN0aW5hdGlvbiBkaXJlY3Rvcnk+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBtb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1saW5rLgorSW4gdGhlIGZpcnN0IGZvcm0sIGl0IHJlbmFtZXMgPHNvdXJjZT4sIHdoaWNoIG11c3QgZXhpc3QgYW5kIGJlIGVpdGhlcgorYSBmaWxlLCBzeW1saW5rIG9yIGRpcmVjdG9yeSwgdG8gPGRlc3RpbmF0aW9uPiwgd2hpY2ggbXVzdCBub3QgZXhpc3QuCitJbiB0aGUgc2Vjb25kIGZvcm0sIHRoZSBsYXN0IGFyZ3VtZW50IGhhcyB0byBiZSBhbiBleGlzdGluZworZGlyZWN0b3J5OyB0aGUgZ2l2ZW4gc291cmNlcyB3aWxsIGJlIG1vdmVkIGludG8gdGhpcyBkaXJlY3RvcnkuCisKK1RoZSBpbmRleCBpcyB1cGRhdGVkIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgYnV0IHRoZSBjaGFuZ2UgbXVzdCBzdGlsbCBiZQorY29tbWl0dGVkLgorCitPUFRJT05TCistLS0tLS0tCistZjo6CisJRm9yY2UgcmVuYW1pbmcgb3IgbW92aW5nIGV2ZW4gdGFyZ2V0cyBleGlzdAorLWs6OgorICAgICAgICBTa2lwIG1vdmUgb3IgcmVuYW1lIGFjdGlvbnMgd2hpY2ggd291bGQgbGVhZCB0byBhbiBlcnJvcgorCWNvbmRpdGlvbi4gQW4gZXJyb3IgaGFwcGVucyB3aGVuIGEgc291cmNlIGlzIG5laXRoZXIgZXhpc3Rpbmcgbm9yCisgICAgICAgIGNvbnRyb2xsZWQgYnkgR0lULCBvciB3aGVuIGl0IHdvdWxkIG92ZXJ3cml0ZSBhbiBleGlzdGluZworICAgICAgICBmaWxlIHVubGVzcyAnLWYnIGlzIGdpdmVuLgorLW46OgorCURvIG5vdGhpbmc7IG9ubHkgc2hvdyB3aGF0IHdvdWxkIGhhcHBlbgorCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KK1Jld3JpdHRlbiBieSBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorTW92ZSBmdW5jdGlvbmFsaXR5IGFkZGVkIGJ5IEpvc2VmIFdlaWRlbmRvcmZlciA8Sm9zZWYuV2VpZGVuZG9yZmVyQGdteC5kZT4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3YjBiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dApAQCAtMCwwICsxLDY2IEBACitnaXQtbmFtZS1yZXYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbmFtZS1yZXYgLSBGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzLgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorJ2dpdC1uYW1lLXJldicgWy0tdGFnc10gKCAtLWFsbCB8IC0tc3RkaW4gfCA8Y29tbWl0aXNoPi4uLiApCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorRmluZHMgc3ltYm9saWMgbmFtZXMgc3VpdGFibGUgZm9yIGh1bWFuIGRpZ2VzdGlvbiBmb3IgcmV2aXNpb25zIGdpdmVuIGluIGFueQorZm9ybWF0IHBhcnNhYmxlIGJ5IGdpdC1yZXYtcGFyc2UuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLXRhZ3M6OgorCURvIG5vdCB1c2UgYnJhbmNoIG5hbWVzLCBidXQgb25seSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMKKworLS1hbGw6OgorCUxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMKKworLS1zdGRpbjo6CisJUmVhZCBmcm9tIHN0ZGluLCBhcHBlbmQgIig8cmV2X25hbWU+KSIgdG8gYWxsIHNoYTEncyBvZiBuYW1lJ2FibGUKKwljb21taXRzLCBhbmQgcGFzcyB0byBzdGRvdXQKKworRVhBTVBMRQorLS0tLS0tLQorCitHaXZlbiBhIGNvbW1pdCwgZmluZCBvdXQgd2hlcmUgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIHJlZnMuIFNheSBzb21lYm9keQord3JvdGUgeW91IGFib3V0IHRoYXQgcGhhbnRhc3RpYyBjb21taXQgMzNkYjVmNGQ5MDI3YTEwZTQ3N2NjZjA1NGIyYzFhYjk0Zjc0Yzg1YS4KK09mIGNvdXJzZSwgeW91IGxvb2sgaW50byB0aGUgY29tbWl0LCBidXQgdGhhdCBvbmx5IHRlbGxzIHlvdSB3aGF0IGhhcHBlbmVkLCBidXQKK25vdCB0aGUgY29udGV4dC4KKworRW50ZXIgZ2l0LW5hbWUtcmV2OgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IG5hbWUtcmV2IDMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEKKy0tLS0tLS0tLS0tLQorCitOb3cgeW91IGFyZSB3aXNlciwgYmVjYXVzZSB5b3Uga25vdyB0aGF0IGl0IGhhcHBlbmVkIDk0MCByZXZpc2lvbnMgYmVmb3JlIHYwLjk5LgorCitBbm90aGVyIG5pY2UgdGhpbmcgeW91IGNhbiBkbyBpczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBsb2cgfCBnaXQgbmFtZS1yZXYgLS1zdGRpbgorLS0tLS0tLS0tLS0tCisKKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgSm9oYW5uZXMgU2NoaW5kZWxpbiA8Sm9oYW5uZXMuU2NoaW5kZWxpbkBnbXguZGU+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1vY3RvcHVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW9jdG9wdXMudHh0CmluZGV4IDg4MWMzMTcuLjZlMzJlYTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW9jdG9wdXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW9jdG9wdXMudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW9jdG9wdXMoMSkKID09PT09PT09PT09PT09Ci12MC45OS41LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dAppbmRleCA0NGFiYTk0Li5kMWU5M2RiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcGFjay1vYmplY3RzKDEpCiA9PT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LXBhY2stb2JqZWN0cycgWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSB7LS1zdGRvdXQgfCBiYXNlLW5hbWV9IDwgb2JqZWN0LWxpc3QKKydnaXQtcGFjay1vYmplY3RzJyBbLS1sb2NhbF0gWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSB7LS1zdGRvdXQgfCBiYXNlLW5hbWV9IDwgb2JqZWN0LWxpc3QKIAogCiBERVNDUklQVElPTgpAQCAtMzEsNyArMzAsNyBAQAogCiBQbGFjaW5nIGJvdGggaW4gdGhlIHBhY2svIHN1YmRpcmVjdG9yeSBvZiAkR0lUX09CSkVDVF9ESVJFQ1RPUlkgKG9yCiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIG9uICRHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUykKLWVuYWJsZXMgR0lUIHRvIHJlYWQgZnJvbSBzdWNoIGFuIGFyY2hpdmUuCitlbmFibGVzIGdpdCB0byByZWFkIGZyb20gc3VjaCBhbiBhcmNoaXZlLgogCiAKIE9QVElPTlMKQEAgLTY1LDYgKzY0LDExIEBACiAJVGhpcyBmbGFnIGNhdXNlcyBhbiBvYmplY3QgYWxyZWFkeSBpbiBhIHBhY2sgaWdub3JlZAogCWV2ZW4gaWYgaXQgYXBwZWFycyBpbiB0aGUgc3RhbmRhcmQgaW5wdXQuCiAKKy0tbG9jYWw6OgorCVRoaXMgZmxhZyBpcyBzaW1pbGFyIHRvIGAtLWluY3JlbWVudGFsYDsgaW5zdGVhZCBvZgorCWlnbm9yaW5nIGFsbCBwYWNrZWQgb2JqZWN0cywgaXQgb25seSBpZ25vcmVzIG9iamVjdHMKKwl0aGF0IGFyZSBwYWNrZWQgYW5kIG5vdCBpbiB0aGUgbG9jYWwgb2JqZWN0IHN0b3JlCisJKGkuZS4gYm9ycm93ZWQgZnJvbSBhbiBhbHRlcm5hdGUpLgogCiBBdXRob3IKIC0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CmluZGV4IDNlNTYwYTMuLmM4YmQxOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKQEAgLTE4LDYgKzE4LDEyIEBACiAKIElPVywgeW91IGNhbiB1c2UgdGhpcyB0aGluZyB0byBsb29rIGZvciBsaWtlbHkgZHVwbGljYXRlIGNvbW1pdHMuCiAKK1doZW4gZGVhbGluZyB3aXRoIGdpdC1kaWZmLXRyZWUgb3V0cHV0LCBpdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3RoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIHByZWZpeGVkIHdpdGggdGhlIG9iamVjdCBuYW1lIG9mIHRoZQorY29tbWl0LCBhbmQgb3V0cHV0cyB0d28gNDAtYnl0ZSBoZXhhZGVjaW1hbCBzdHJpbmcuICBUaGUgZmlyc3QKK3N0cmluZyBpcyB0aGUgcGF0Y2ggSUQsIGFuZCB0aGUgc2Vjb25kIHN0cmluZyBpcyB0aGUgY29tbWl0IElELgorVGhpcyBjYW4gYmUgdXNlZCB0byBtYWtlIGEgbWFwcGluZyBmcm9tIHBhdGNoIElEIHRvIGNvbW1pdCBJRC4KKwogT1BUSU9OUwogLS0tLS0tLQogPHBhdGNoPjo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wZWVrLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wZWVrLXJlbW90ZS50eHQKaW5kZXggYzE1MjdmMS4uOTE1ZDNmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1wZWVrLXJlbW90ZSgxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMjMsNyArMjIsNyBAQAogCXJlbW90ZSBzaWRlLCBpZiBpdCBpcyBub3QgZm91bmQgb24geW91ciAkUEFUSC4gU29tZQogCWluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKIAlzZXR1cCBzY3JpcHRzIGZvciBsb2dpbiBzaGVsbHMgKGUuZy4gLmJhc2hfcHJvZmlsZSkgYW5kCi0JeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIEdJVCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KKwl5b3VyIHByaXZhdGVseSBpbnN0YWxsZWQgZ2l0IG1heSBub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbQogCWRlZmF1bHQgJFBBVEguICBBbm90aGVyIHdvcmthcm91bmQgc3VnZ2VzdGVkIGlzIHRvIHNldAogCXVwIHlvdXIgJFBBVEggaW4gIi5iYXNocmMiLCBidXQgdGhpcyBmbGFnIGlzIGZvciBwZW9wbGUKIAl3aG8gZG8gbm90IHdhbnQgdG8gcGF5IHRoZSBvdmVyaGVhZCBmb3Igbm9uLWludGVyYWN0aXZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dAppbmRleCA1YzQ4YTA5Li4yOGExNTAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcHJ1bmUtcGFja2VkKDEpCiA9PT09PT09PT09PT09PT09PT09PT0KLXYwLjEsIEF1Z3VzdCAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dAppbmRleCBkMTY3NmNiLi4zMzY3YzliIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXBydW5lKDEpCiA9PT09PT09PT09PT0KLXYwLjk5LjUsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQKaW5kZXggYzM1ZDJlYi4uYmFlMDVkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcHVsbCgxKQogPT09PT09PT09PT0KLXYwLjk5LjQsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTI1LDYgKzI0LDEwIEBACiAtLS0tLS0tCiBpbmNsdWRlOjpwdWxsLWZldGNoLXBhcmFtLnR4dFtdCiAKKy1hLCBcLS1hcHBlbmQ6OgorCUFwcGVuZCByZWYgbmFtZXMgYW5kIG9iamVjdCBuYW1lcyBvZiBmZXRjaGVkIHJlZnMgdG8gdGhlCisJZXhpc3RpbmcgY29udGVudHMgb2YgJEdJVF9ESVIvRkVUQ0hfSEVBRC4gIFdpdGhvdXQgdGhpcworCW9wdGlvbiBvbGQgZGF0YSBpbiAkR0lUX0RJUi9GRVRDSF9IRUFEIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CmluZGV4IDgwOWFjOGIuLmY0NWFjNWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CkBAIC0yMSw2ICsyMSwxNSBAQAogLS0tLS0tLQogaW5jbHVkZTo6cHVsbC1mZXRjaC1wYXJhbS50eHRbXQogCitcLS1hbGw6OgorCUluc3RlYWQgb2YgbmFtaW5nIGVhY2ggcmVmIHRvIHB1c2gsIHNwZWNpZmllcyBhbGwgcmVmcworCXRvIGJlIHB1c2hlZC4KKworLWYsIFwtLWZvcmNlOjoKKwlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIGxvY2FsIHJlZiB0aGF0IGlzCisJbm90IGFuIGFuY2VzdG9yIG9mIHRoZSByZW1vdGUgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgorCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB0aGUKKwlsb2NhbCByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoIGNhcmUuCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dAppbmRleCA1NjUzYmFjLi43ZGI1ZmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcmVhZC10cmVlKDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dAppbmRleCBmYjRiNzZiLi44YWZkZTE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcmVjZWl2ZS1wYWNrKDEpCiA9PT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVuYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbmFtZS50eHQKaW5kZXggMjE5MjhkYy4uNTgzY2IwMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVuYW1lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW5hbWUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXJlbmFtZSgxKQogPT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKaW5kZXggYmQ4MzBhZC4uMGMxYWU0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXJlcGFjaygxKQogPT09PT09PT09PT09PQotdjAuOTkuNSwgQXVndXN0IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzb2x2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dAppbmRleCA3ZDNlYjc5Li40ZTU3YzJiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1yZXNvbHZlKDEpCiA9PT09PT09PT09PT09PQotdjAuOTkuNSwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHJlc29sdmUnIDxjdXJyZW50PiA8bWVyZ2VkPiA8bWVzc2FnZT4KKydnaXQtcmVzb2x2ZScgPGN1cnJlbnQ+IDxtZXJnZWQ+IDxtZXNzYWdlPgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dAppbmRleCBmMzg2YTNhLi4wNjRjY2IxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXJldi1saXN0KDEpCiA9PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTksNyArOCwxOCBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtcmV2LWxpc3QnIFsgKi0tbWF4LWNvdW50Kj1udW1iZXIgXSBbICotLW1heC1hZ2UqPXRpbWVzdGFtcCBdIFsgKi0tbWluLWFnZSo9dGltZXN0YW1wIF0gWyAqLS1iaXNlY3QqIF0gWyAqLS1wcmV0dHkqIF0gWyAqLS1vYmplY3RzKiBdIFsgKi0tbWVyZ2Utb3JkZXIqIFsgKi0tc2hvdy1icmVha3MqIF0gXSA8Y29tbWl0PiBbIDxjb21taXQ+IC4uLl0gWyBePGNvbW1pdD4gLi4uXQorJ2dpdC1yZXYtbGlzdCcgWyBcLS1tYXgtY291bnQ9bnVtYmVyIF0KKwlbIFwtLW1heC1hZ2U9dGltZXN0YW1wIF0KKwlbIFwtLW1pbi1hZ2U9dGltZXN0YW1wIF0KKwlbIFwtLXNwYXJzZSBdCisJWyBcLS1uby1tZXJnZXMgXQorCVsgXC0tYWxsIF0KKwlbIFsgXC0tbWVyZ2Utb3JkZXIgWyBcLS1zaG93LWJyZWFrcyBdIF0gfCBbIFwtLXRvcG8tb3JkZXIgXSB8IF0KKwlbIFwtLXBhcmVudHMgXQorCVsgXC0tb2JqZWN0cyBbIFwtLXVucGFja2VkIF0gXQorCVsgXC0tcHJldHR5IHwgXC0taGVhZGVyIHwgXQorCVsgXC0tYmlzZWN0IF0KKwk8Y29tbWl0Pi4uLiBbIFwtLSA8cGF0aHM+Li4uIF0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0xNywyMiArMjcsMzQgQEAKIGdpdmVuIGNvbW1pdChzKSwgdGFraW5nIGFuY2VzdHJ5IHJlbGF0aW9uc2hpcCBpbnRvIGFjY291bnQuICBUaGlzIGlzCiB1c2VmdWwgdG8gcHJvZHVjZSBodW1hbi1yZWFkYWJsZSBsb2cgb3V0cHV0LgogCi1Db21taXRzIHdoaWNoIGFyZSBzdGF0ZWQgd2l0aCBhIHByZWNlZGluZyAnXicgY2F1c2UgbGlzdGluZyB0byBzdG9wIGF0Ci10aGF0IHBvaW50LiBUaGVpciBwYXJlbnRzIGFyZSBpbXBsaWVkLiAiZ2l0LXJldi1saXN0IGZvbyBiYXIgXmJheiIgdGh1cworQ29tbWl0cyB3aGljaCBhcmUgc3RhdGVkIHdpdGggYSBwcmVjZWRpbmcgJ3tjYXJldH0nIGNhdXNlIGxpc3RpbmcgdG8gc3RvcCBhdAordGhhdCBwb2ludC4gVGhlaXIgcGFyZW50cyBhcmUgaW1wbGllZC4gImdpdC1yZXYtbGlzdCBmb28gYmFyIHtjYXJldH1iYXoiIHRodXMKIG1lYW5zICJsaXN0IGFsbCB0aGUgY29tbWl0cyB3aGljaCBhcmUgaW5jbHVkZWQgaW4gJ2ZvbycgYW5kICdiYXInLCBidXQKIG5vdCBpbiAnYmF6JyIuCiAKK0Egc3BlY2lhbCBub3RhdGlvbiA8Y29tbWl0MT4uLjxjb21taXQyPiBjYW4gYmUgdXNlZCBhcyBhCitzaG9ydC1oYW5kIGZvciB7Y2FyZXR9PGNvbW1pdDE+IDxjb21taXQyPi4KKworCiBPUFRJT05TCiAtLS0tLS0tCiAtLXByZXR0eTo6CiAJUHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQgY2hhbmdlc2V0cyBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLgogCistLWhlYWRlcjo6CisJUHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQgaW4gcmF3LWZvcm1hdDsgZWFjaAorCXJlY29yZCBpcyBzZXBhcmF0ZWQgd2l0aCBhIE5VTCBjaGFyYWN0ZXIuCisKIC0tb2JqZWN0czo6CiAJUHJpbnQgdGhlIG9iamVjdCBJRHMgb2YgYW55IG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBsaXN0ZWQgY29tbWl0cy4KIAknZ2l0LXJldi1saXN0IC0tb2JqZWN0cyBmb28gXmJhcicgdGh1cyBtZWFucyAic2VuZCBtZSBhbGwgb2JqZWN0IElEcwogCXdoaWNoIEkgbmVlZCB0byBkb3dubG9hZCBpZiBJIGhhdmUgdGhlIGNvbW1pdCBvYmplY3QgJ2JhcicsIGJ1dAogCW5vdCAnZm9vJyIuCiAKKy0tdW5wYWNrZWQ6OgorCU9ubHkgdXNlZnVsIHdpdGggYC0tb2JqZWN0c2A7IHByaW50IHRoZSBvYmplY3QgSURzIHRoYXQKKwlhcmUgbm90IGluIHBhY2tzLgorCiAtLWJpc2VjdDo6CiAJTGltaXQgb3V0cHV0IHRvIHRoZSBvbmUgY29tbWl0IG9iamVjdCB3aGljaCBpcyByb3VnaGx5IGhhbGZ3YXkKIAliZXR3ZWVuIHRoZSBpbmNsdWRlZCBhbmQgZXhjbHVkZWQgY29tbWl0cy4gVGh1cywgaWYgJ2dpdC1yZXYtbGlzdApAQCAtNDMsNiArNjUsMzAgQEAKIAlyZXBlYXRlZGx5IGdlbmVyYXRlIGFuZCB0ZXN0IG5ldyAnbWlkcG9pbnQncyB1bnRpbCB0aGUgY29tbWl0IGNoYWluCiAJaXMgb2YgbGVuZ3RoIG9uZS4KIAorLS1tYXgtY291bnQ6OgorCUxpbWl0IHRoZSBudW1iZXIgb2YgY29tbWl0cyBvdXRwdXQuCisKKy0tbWF4LWFnZT10aW1lc3RhbXAsIC0tbWluLWFnZT10aW1lc3RhbXA6OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBzcGVjaWZpZWQgdGltZSByYW5nZS4KKworLS1zcGFyc2U6OgorCVdoZW4gb3B0aW9uYWwgcGF0aHMgYXJlIGdpdmVuLCB0aGUgY29tbWFuZCBvdXRwdXRzIG9ubHkKKwl0aGUgY29tbWl0cyB0aGF0IGNoYW5nZXMgYXQgbGVhc3Qgb25lIG9mIHRoZW0sIGFuZCBhbHNvCisJaWdub3JlcyBtZXJnZXMgdGhhdCBkbyBub3QgdG91Y2ggdGhlIGdpdmVuIHBhdGhzLiAgVGhpcworCWZsYWcgbWFrZXMgdGhlIGNvbW1hbmQgb3V0cHV0IGFsbCBlbGlnaWJsZSBjb21taXRzCisJKHN0aWxsIHN1YmplY3QgdG8gY291bnQgYW5kIGFnZSBsaW1pdGF0aW9uKSwgYnV0IGFwcGx5CisJbWVyZ2Ugc2ltcGxpZmljYXRpb24gbmV2ZXJ0aGVsZXNzLgorCistLWFsbDo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYCRHSVRfRElSL3JlZnMvYCBhcmUKKwlsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyA8Y29tbWl0Pi4KKworLS10b3BvLW9yZGVyOjoKKwlCeSBkZWZhdWx0LCB0aGUgY29tbWl0cyBhcmUgc2hvd24gaW4gcmV2ZXJzZQorCWNocm9ub2xvZ2ljYWwgb3JkZXIuICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtIGFwcGVhciBpbgorCXRvcG9sb2dpY2FsIG9yZGVyIChpLmUuIGRlc2NlbmRhbnQgY29tbWl0cyBhcmUgc2hvd24KKwliZWZvcmUgdGhlaXIgcGFyZW50cykuCisKIC0tbWVyZ2Utb3JkZXI6OgogCVdoZW4gc3BlY2lmaWVkIHRoZSBjb21taXQgaGlzdG9yeSBpcyBkZWNvbXBvc2VkIGludG8gYSB1bmlxdWUKIAlzZXF1ZW5jZSBvZiBtaW5pbWFsLCBub24tbGluZWFyIGVwb2NocyBhbmQgbWF4aW1hbCwgbGluZWFyIGVwb2Nocy4KQEAgLTg1LDcgKzEzMSw4IEBACiBUaGVzZSAiYnJlYWtzIiByZXByZXNlbnQgbmVjZXNzYXJ5IGRpc2NvbnRpbnVpdGllcyBpbXBsaWVkIGJ5IHRyeWluZyB0bwogcmVwcmVzZW50IGFuIGFyYnRpcmFyeSBEQUcgaW4gYSBsaW5lYXIgZm9ybS4KICsKLSotLXNob3ctYnJlYWtzKiBpcyBvbmx5IHZhbGlkIGlmICotLW1lcmdlLW9yZGVyKiBpcyBhbHNvIHNwZWNpZmllZC4KK2AtLXNob3ctYnJlYWtzYCBpcyBvbmx5IHZhbGlkIGlmIGAtLW1lcmdlLW9yZGVyYCBpcyBhbHNvIHNwZWNpZmllZC4KKwogCiBBdXRob3IKIC0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKaW5kZXggOTlmZDkwZS4uMDk5ZGIyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CkBAIC03OSw4ICs3OSw5IEBACiBTUEVDSUZZSU5HIFJFVklTSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQSByZXZpc2lvbiBwYXJhbWV0ZXIgdHlwaWNhbGx5IG5hbWVzIGEgY29tbWl0IG9iamVjdC4gIFRoZXkgdXNlCi13aGF0IGlzIGNhbGxlZCBhbiAnZXh0ZW5kZWQgU0hBMScgc3ludGF4LgorQSByZXZpc2lvbiBwYXJhbWV0ZXIgdHlwaWNhbGx5LCBidXQgbm90IG5lY2Vzc2FyaWx5LCBuYW1lcyBhCitjb21taXQgb2JqZWN0LiAgVGhleSB1c2Ugd2hhdCBpcyBjYWxsZWQgYW4gJ2V4dGVuZGVkIFNIQTEnCitzeW50YXguCiAKICogVGhlIGZ1bGwgU0hBMSBvYmplY3QgbmFtZSAoNDAtYnl0ZSBoZXhhZGVjaW1hbCBzdHJpbmcpLCBvcgogICBhIHN1YnN0cmluZyBvZiBzdWNoIHRoYXQgaXMgdW5pcXVlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4KQEAgLTkxLDcgKzkyLDcgQEAKICogQSBzeW1ib2xpYyByZWYgbmFtZS4gIEUuZy4gJ21hc3RlcicgdHlwaWNhbGx5IG1lYW5zIHRoZSBjb21taXQKICAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJEdJVF9ESVIvcmVmcy9oZWFkcy9tYXN0ZXIuICBJZiB5b3UKICAgaGFwcGVuIHRvIGhhdmUgYm90aCBoZWFkcy9tYXN0ZXIgYW5kIHRhZ3MvbWFzdGVyLCB5b3UgY2FuCi0gIGV4cGxpY2l0bHkgc2F5ICdoZWFkcy9tYXN0ZXInIHRvIHRlbGwgR0lUIHdoaWNoIG9uZSB5b3UgbWVhbi4KKyAgZXhwbGljaXRseSBzYXkgJ2hlYWRzL21hc3RlcicgdG8gdGVsbCBnaXQgd2hpY2ggb25lIHlvdSBtZWFuLgogCiAqIEEgc3VmZml4ICd7Y2FyZXR9JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgZmlyc3QgcGFyZW50IG9mCiAgIHRoYXQgY29tbWl0IG9iamVjdC4gICd7Y2FyZXR9PG4+JyBtZWFucyB0aGUgPG4+dGggcGFyZW50IChpLmUuCkBAIC0xMDYsNiArMTA3LDE4IEBACiAgIGVxdWl2YWxlbnQgdG8gcmV2e2NhcmV0fXtjYXJldH17Y2FyZXR9IHdoaWNoIGlzIGVxdWl2YWxlbnQgdG9cCiAgIHJldntjYXJldH0xe2NhcmV0fTF7Y2FyZXR9MS4KIAorKiBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gb2JqZWN0IHR5cGUgbmFtZSBlbmNsb3NlZCBpbgorICBicmFjZSBwYWlyIChlLmcuIGB2MC45OS44e2NhcmV0fVx7Y29tbWl0XH1gKSBtZWFucyB0aGUgb2JqZWN0CisgIGNvdWxkIGJlIGEgdGFnLCBhbmQgZGVyZWZlcmVuY2UgdGhlIHRhZyByZWN1cnNpdmVseSB1bnRpbCBhbgorICBvYmplY3Qgb2YgdGhhdCB0eXBlIGlzIGZvdW5kIG9yIHRoZSBvYmplY3QgY2Fubm90IGJlCisgIGRlcmVmZXJlbmNlZCBhbnltb3JlIChpbiB3aGljaCBjYXNlLCBiYXJmKS4gIGByZXZ7Y2FyZXR9MGAKKyAgaW50cm9kdWNlZCBlYXJsaWVyIGlzIGEgc2hvcnQtaGFuZCBmb3IgYHJldntjYXJldH1ce2NvbW1pdFx9YC4KKworKiBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZW1wdHkgYnJhY2UgcGFpcgorICAoZS5nLiBgdjAuOTkuOHtjYXJldH1ce1x9YCkgbWVhbnMgdGhlIG9iamVjdCBjb3VsZCBiZSBhIHRhZywKKyAgYW5kIGRlcmVmZXJlbmNlIHRoZSB0YWcgcmVjdXJzaXZlbHkgdW50aWwgYSBub24tdGFnIG9iamVjdCBpcworICBmb3VuZC4KKwogJ2dpdC1yZXYtcGFyc2UnIGFsc28gYWNjZXB0cyBhIHByZWZpeCAne2NhcmV0fScgdG8gcmV2aXNpb24gcGFyYW1ldGVyLAogd2hpY2ggaXMgcGFzc2VkIHRvICdnaXQtcmV2LWxpc3QnLiAgVHdvIHJldmlzaW9uIHBhcmFtZXRlcnMKIGNvbmNhdGVuYXRlZCB3aXRoICcuLicgaXMgYSBzaG9ydC1oYW5kIGZvciB3cml0aW5nIGEgcmFuZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKaW5kZXggYjk1ZTMzZC4uYjliZWM1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc2VuZC1lbWFpbCgxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dAppbmRleCAyMTlkZmMyLi41NzdmMDZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc2VuZC1wYWNrKDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGQ4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKQEAgLTAsMCArMSwzNSBAQAorZ2l0LXNoZWxsKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoZWxsIC0gUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR0lUIG92ZXIgU1NIIG9ubHkKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtc2hlbGwgLWMgPGNvbW1hbmQ+IDxhcmd1bWVudD4nCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgbG9naW4gc2hlbGwgZm9yIFNTSCBhY2NvdW50cyB5b3Ugd2FudAordG8gcmVzdHJpY3QgdG8gR0lUIHB1bGwvcHVzaCBhY2Nlc3Mgb25seS4gSXQgcGVybWl0cyBleGVjdXRpb24gb25seQorb2Ygc2VydmVyLXNpZGUgR0lUIGNvbW1hbmRzIGltcGxlbWVudGluZyB0aGUgcHVsbC9wdXNoIGZ1bmN0aW9uYWxpdHkuCitUaGUgY29tbWFuZHMgY2FuIGJlIGV4ZWN1dGVkIG9ubHkgYnkgdGhlICctYycgb3B0aW9uOyB0aGUgc2hlbGwgaXMgbm90CitpbnRlcmFjdGl2ZS4KKworQ3VycmVudGx5LCBvbmx5IHRoZSBgZ2l0LXJlY2VpdmUtcGFja2AgYW5kIGBnaXQtdXBsb2FkLXBhY2tgIGNvbW1hbmRzCithcmUgcGVybWl0dGVkIHRvIGJlIGNhbGxlZCwgd2l0aCBhIHNpbmdsZSByZXF1aXJlZCBhcmd1bWVudC4KKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBQZXRyIEJhdWRpcyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAppbmRleCBhODUyZTliLi42NWNhNzdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXNob3J0bG9nKDEpCiA9PT09PT09PT09PT09PT0KLXYwLjk5LjQsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTksNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBsb2cgLS1wcmV0dHk9c2hvcnQgfCBnaXQgc2hvcnRsb2cnCisnZ2l0LWxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZycKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKaW5kZXggNWI4MGQ1YS4uYzZjOTdiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1zaG93LWJyYW5jaCgxKQogPT09PT09PT09PT09PT09PT09Ci12MC45OS41LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC04LDcgKzcsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgc2hvdy1icmFuY2ggWy0tYWxsXSBbLS1oZWFkc10gWy0tdGFnc10gWy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXSA8cmVmZXJlbmNlPi4uLicKKydnaXQtc2hvdy1icmFuY2ggWy0tYWxsXSBbLS1oZWFkc10gWy0tdGFnc10gWy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXSBbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIDxyZWZlcmVuY2U+Li4uJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTQ1LDYgKzQ0LDE1IEBACiAJQW1vbmcgdGhlIDxyZWZlcmVuY2U+cyBnaXZlbiwgZGlzcGxheSBvbmx5IHRoZSBvbmVzIHRoYXQKIAljYW5ub3QgYmUgcmVhY2hlZCBmcm9tIGFueSBvdGhlciA8cmVmZXJlbmNlPi4KIAorLS1uby1uYW1lOjoKKwlEbyBub3Qgc2hvdyBuYW1pbmcgc3RyaW5ncyBmb3IgZWFjaCBjb21taXQuCisKKy0tc2hhMS1uYW1lOjoKKwlJbnN0ZWFkIG9mIG5hbWluZyB0aGUgY29tbWl0cyB1c2luZyB0aGUgcGF0aCB0byByZWFjaAorCXRoZW0gZnJvbSBoZWFkcyAoZS5nLiAibWFzdGVyfjIiIHRvIG1lYW4gdGhlIGdyYW5kcGFyZW50CisJb2YgIm1hc3RlciIpLCBuYW1lIHRoZW0gd2l0aCB0aGUgdW5pcXVlIHByZWZpeCBvZiB0aGVpcgorCW9iamVjdCBuYW1lcy4KKwogTm90ZSB0aGF0IC0tbW9yZSwgLS1saXN0LCAtLWluZGVwZW5kZW50IGFuZCAtLW1lcmdlLWJhc2Ugb3B0aW9ucwogYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KIApAQCAtODksMjEgKzk3LDYgQEAKIGFkZHMgb25lIGNvbW1pdCAnSW50cm9kdWNlICJyZXNldCB0eXBlIicuICAibWhmIiBicmFuY2ggaGFzIG1hbnkKIG90aGVyIGNvbW1pdHMuCiAKLVdoZW4gb25seSBvbmUgaGVhZCBpcyBnaXZlbiwgdGhlIG91dHB1dCBmb3JtYXQgY2hhbmdlcyBzbGlnaHRseQotdG8gY29uc2VydmUgc3BhY2UuICBUaGUgJysnIHNpZ24gdG8gc2hvdyB3aGljaCBjb21taXQgaXMKLXJlYWNoYWJsZSBmcm9tIHdoaWNoIGhlYWQgYW5kIHRoZSBmaXJzdCBOIGxpbmVzIHRvIHNob3cgdGhlIGxpc3QKLW9mIGhlYWRzIGJlaW5nIGRpc3BsYXllZCBhcmUgYm90aCBtZWFuaW5nbGVzcyBzbyB0aGV5IGFyZQotb21pdHRlZC4gIEFsc28gdGhlIGxhYmVsIGdpdmVuIHRvIGVhY2ggY29tbWl0IGRvZXMgbm90IHJlcGVhdAotdGhlIG5hbWUgb2YgdGhlIGJyYW5jaCBiZWNhdXNlIGl0IGlzIG9idmlvdXMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgc2hvdy1icmFuY2ggLS1tb3JlPTQgbWFzdGVyCi1bbWFzdGVyXSBBZGQgJ2dpdCBzaG93LWJyYW5jaCcuCi1bfjFdIEFkZCBhIG5ldyBleHRlbmRlZCBTSEExIHN5bnRheCA8bmFtZT5+PG51bT4KLVt+Ml0gRml4ICJnaXQtZGlmZiBBIEIiCi1bfjNdIGdpdC1scy1maWxlczogZ2VuZXJhbGl6ZWQgcGF0aHNwZWNzCi1bfjRdIE1ha2UgImdpdC1scy1maWxlcyIgd29yayBpbiBzdWJkaXJlY3RvcmllcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CmluZGV4IDcyNzIwYWQuLmJlMDliNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXNob3ctaW5kZXgoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMTQsNyArMTMsNyBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVJlYWRzIGdpdmVuIGlkeCBmaWxlIGZvciBwYWNrZWQgR0lUIGFyY2hpdmUgY3JlYXRlZCB3aXRoCitSZWFkcyBnaXZlbiBpZHggZmlsZSBmb3IgcGFja2VkIGdpdCBhcmNoaXZlIGNyZWF0ZWQgd2l0aAogZ2l0LXBhY2stb2JqZWN0cyBjb21tYW5kLCBhbmQgZHVtcHMgaXRzIGNvbnRlbnRzLgogCiBUaGUgaW5mb3JtYXRpb24gaXQgb3V0cHV0cyBpcyBzdWJzZXQgb2Ygd2hhdCB5b3UgY2FuIGdldCBmcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLWZldGNoLnR4dAppbmRleCBlMzg4N2FjLi5iNzExNmIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtZmV0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1mZXRjaC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc3NoLWZldGNoKDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtdXBsb2FkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC11cGxvYWQudHh0CmluZGV4IGI2MjUwMTkuLjcwMjY3NGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNzaC11cGxvYWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC11cGxvYWQudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXNzaC11cGxvYWQoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBKdW4gMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dAppbmRleCA2ZDQ5YTVhLi43NTNmYzA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc3RhdHVzKDEpCiA9PT09PT09PT09PT09Ci12MC45OS40LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgc3RhdHVzJworJ2dpdC1zdGF0dXMnCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bmltcG9ydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiZGMwOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bmltcG9ydC50eHQKQEAgLTAsMCArMSwxMzcgQEAKK2dpdC1zdm5pbXBvcnQoMSkKKz09PT09PT09PT09PT09PT0KK3YwLjEsIEp1bHkgMjAwNQorCitOQU1FCistLS0tCitnaXQtc3ZuaW1wb3J0IC0gSW1wb3J0IGEgU1ZOIHJlcG9zaXRvcnkgaW50byBnaXQKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtc3ZuaW1wb3J0JyBbIC1vIDxicmFuY2gtZm9yLUhFQUQ+IF0gWyAtaCBdIFsgLXYgXSBbIC1kIHwgLUQgXQorCQkJWyAtQyA8R0lUX3JlcG9zaXRvcnk+IF0gWyAtaSBdIFsgLXUgXSBbLWwgbGltaXRfbnJfY2hhbmdlc10KKwkJCVsgLWIgYnJhbmNoX3N1YmRpciBdIFsgLXQgdHJ1bmtfc3ViZGlyIF0gWyAtVCB0YWdfc3ViZGlyIF0KKwkJCVsgLXMgc3RhcnRfY2hnIF0gWyAtbSBdIFsgLU0gcmVnZXggXQorCQkJPFNWTl9yZXBvc2l0b3J5X1VSTD4gWyA8cGF0aD4gXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW1wb3J0cyBhIFNWTiByZXBvc2l0b3J5IGludG8gZ2l0LiBJdCB3aWxsIGVpdGhlciBjcmVhdGUgYSBuZXcKK3JlcG9zaXRvcnksIG9yIGluY3JlbWVudGFsbHkgaW1wb3J0IGludG8gYW4gZXhpc3Rpbmcgb25lLgorCitTVk4gYWNjZXNzIGlzIGRvbmUgYnkgdGhlIFNWTjo6IFBlcmwgbW9kdWxlLgorCitnaXQtc3ZuaW1wb3J0IGFzc3VtZXMgdGhhdCBTVk4gcmVwb3NpdG9yaWVzIGFyZSBvcmdhbml6ZWQgaW50byBvbmUKKyJ0cnVuayIgZGlyZWN0b3J5IHdoZXJlIHRoZSBtYWluIGRldmVsb3BtZW50IGhhcHBlbnMsICJicmFuY2gvRk9PIgorZGlyZWN0b3JpZXMgZm9yIGJyYW5jaGVzLCBhbmQgIi90YWdzL0ZPTyIgZGlyZWN0b3JpZXMgZm9yIHRhZ3MuCitPdGhlciBzdWJkaXJlY3RvcmllcyBhcmUgaWdub3JlZC4KKworZ2l0LXN2bmltcG9ydCBjcmVhdGVzIGEgZmlsZSAiLmdpdC9zdm4yZ2l0Iiwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yCitpbmNyZW1lbnRhbCBTVk4gaW1wb3J0cy4KKworT1BUSU9OUworLS0tLS0tLQorLUMgPHRhcmdldC1kaXI+OjoKKyAgICAgICAgVGhlIEdJVCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorICAgICAgICBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLiAgRGVmYXVsdCBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKy1zIDxzdGFydF9yZXY+OjoKKyAgICAgICAgU3RhcnQgaW1wb3J0aW5nIGF0IHRoaXMgU1ZOIGNoYW5nZSBudW1iZXIuIFRoZSAgZGVmYXVsdCBpcyAxLgorKworV2hlbiBpbXBvcnRpbmcgaW5jZW1lbnRhbGx5LCB5b3UgbWlnaHQgbmVlZCB0byBlZGl0IHRoZSAuZ2l0L3N2bjJnaXQgZmlsZS4KKworLWk6OgorCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKwllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgY2FjaGUgcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorCW5vdCBjcmVhdGUgdGhlbSBpZiB0aGV5IGRvIG5vdCBleGlzdC4KKworLXQgPHRydW5rX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiB0cnVuay4gRGVmYXVsdCAidHJ1bmsiLgorCistVCA8dGFnX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiBzdWJkaXJlY3RvcnkgZm9yIHRhZ3MuIERlZmF1bHQgInRhZ3MiLgorCistYiA8YnJhbmNoX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiBzdWJkaXJlY3RvcnkgZm9yIGJyYW5jaGVzLiBEZWZhdWx0ICJicmFuY2hlcyIuCisKKy1vIDxicmFuY2gtZm9yLUhFQUQ+OjoKKwlUaGUgJ3RydW5rJyBicmFuY2ggZnJvbSBTVk4gaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4KKwl0aGUgZ2l0IHJlcG9zaXRvcnkuIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBpbXBvcnQgaW50byBhCisJZGlmZmVyZW50IGJyYW5jaC4KKworLW06OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJd2lsbCBlbmFibGUgZGVmYXVsdCByZWdleGVzIHRoYXQgdHJ5IHRvIGNhcHR1cmUgdGhlIG5hbWUgc291cmNlCisJYnJhbmNoIG5hbWUgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKy1NIDxyZWdleD46OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIGN1c3RvbQorCXJlZ2V4LiBJdCBjYW4gYmUgdXNlZCB3aXRoIC1tIHRvIGFsc28gc2VlIHRoZSBkZWZhdWx0IHJlZ2V4ZXMuCisJWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KKworLWwgPG1heF9udW1fY2hhbmdlcz46OgorCUxpbWl0IHRoZSBudW1iZXIgb2YgU1ZOIGNoYW5nZXNldHMgd2UgcHVsbCBiZWZvcmUgcXVpdHRpbmcuCisJVGhpcyBvcHRpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIFNWTiBsaWJyYXJ5IGhhcyBzZXJpb3VzIG1lbW9yeQorCWxlYWtzOyB0aGUgcmVjb21tZW5kZWQgdmFsdWUgZm9yIG5vbnRyaXZpYWwgaW1wb3J0cyBpcyAxMDAuCisKKwlnaXQtc3ZuaW1wb3J0IHdpbGwgc3RpbGwgZXhpdCB3aXRoIGEgemVybyBleGl0IGNvZGUuIFlvdSBjYW4gY2hlY2sKKwl0aGUgc2l6ZSBvZiB0aGUgZmlsZSAiLmdpdC9zdm4yZ2l0IiB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjYWxsCisJdGhlIGltcG9ydGVyIGFnYWluLgorCistdjo6CisJVmVyYm9zaXR5OiBsZXQgJ3N2bmltcG9ydCcgcmVwb3J0IHdoYXQgaXQgaXMgZG9pbmcuCisKKy1kOjoKKwlVc2UgZGlyZWN0IEhUVFAgcmVxdWVzdHMgaWYgcG9zc2libGUuIFRoZSAiPHBhdGg+IiBhcmd1bWVudCBpcyB1c2VkCisJb25seSBmb3IgcmV0cmlldmluZyB0aGUgU1ZOIGxvZ3M7IHRoZSBwYXRoIHRvIHRoZSBjb250ZW50cyBpcworCWluY2x1ZGVkIGluIHRoZSBTVk4gbG9nLgorCistRDo6CisJVXNlIGRpcmVjdCBIVFRQIHJlcXVlc3RzIGlmIHBvc3NpYmxlLiBUaGUgIjxwYXRoPiIgYXJndW1lbnQgaXMgdXNlZAorCWZvciByZXRyaWV2aW5nIHRoZSBsb2dzLCBhcyB3ZWxsIGFzIGZvciB0aGUgY29udGVudHMuCisrCitUaGVyZSdzIG5vIHNhZmUgd2F5IHRvIGF1dG9tYXRpY2FsbHkgZmluZCBvdXQgd2hpY2ggb2YgdGhlc2Ugb3B0aW9ucyB0bwordXNlLCBzbyB5b3UgbmVlZCB0byB0cnkgYm90aC4gVXN1YWxseSwgdGhlIG9uZSB0aGF0J3Mgd3Jvbmcgd2lsbCBkaWUKK3dpdGggYSA0MHggZXJyb3IgcHJldHR5IHF1aWNrbHkuCisKKzxTVk5fcmVwb3NpdG9yeV9VUkw+OjoKKwlUaGUgVVJMIG9mIHRoZSBTVk4gbW9kdWxlIHlvdSB3YW50IHRvIGltcG9ydC4gRm9yIGxvY2FsCisJcmVwb3NpdG9yaWVzLCB1c2UgImZpbGU6Ly8vYWJzb2x1dGUvcGF0aCIuCisrCitJZiB5b3UncmUgdXNpbmcgdGhlICItZCIgb3IgIi1EIiBvcHRpb24sIHRoaXMgaXMgdGhlIFVSTCBvZiB0aGUgU1ZOCityZXBvc2l0b3J5IGl0c2VsZjsgaXQgdXN1YWxseSBlbmRzIGluICIvc3ZuIi4KKworPFNWTl9yZXBvc2l0b3J5X1VSTD46OgorCVRoZSBVUkwgb2YgdGhlIFNWTiBtb2R1bGUgeW91IHdhbnQgdG8gaW1wb3J0LiBGb3IgbG9jYWwKKwlyZXBvc2l0b3JpZXMsIHVzZSAiZmlsZTovLy9hYnNvbHV0ZS9wYXRoIi4KKworPHBhdGg+CisJVGhlIHBhdGggdG8gdGhlIG1vZHVsZSB5b3Ugd2FudCB0byBjaGVjayBvdXQuCisKKy1oOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXYnIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCisKK090aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKK2EgemVybyBleGl0IHN0YXR1cy4KKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgTWF0dGhpYXMgVXJsaWNocyA8c211cmZAc211cmYubm9yaXMuZGU+LCB3aXRoIGhlbHAgZnJvbQordmFyaW91cyBwYXJ0aWNpcGFudHMgb2YgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKworQmFzZWQgb24gYSBjdnMyZ2l0IHNjcmlwdCBieSB0aGUgc2FtZSBhdXRob3IuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IE1hdHRoaWFzIFVybGljaHMgPHNtdXJmQHNtdXJmLm5vcmlzLmRlPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CmluZGV4IGUxMWY1MWMuLjM5ODQ4MTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dApAQCAtOCwxOSArOCwyNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtdGFnJyBbLWEgfCAtc10gWy1mXSBbLW0gPG1zZz5dIDxuYW1lPiBbPGhlYWQ+XQorJ2dpdC10YWcnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+XSA8bmFtZT4gWzxoZWFkPl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1BZGRzIGEgInRhZyIgcmVmZXJlbmNlIGluIC5naXQvcmVmcy90YWdzLworQWRkcyBhICd0YWcnIHJlZmVyZW5jZSBpbiAuZ2l0L3JlZnMvdGFncy8KIAotVW5sZXNzICItZiIgaXMgZ2l2ZW4sIHRoZSB0YWcgbXVzdCBub3QgeWV0IGV4aXN0IGluICIuZ2l0L3JlZnMvdGFncyIKK1VubGVzcyBgLWZgIGlzIGdpdmVuLCB0aGUgdGFnIG11c3Qgbm90IHlldCBleGlzdCBpbgorYC5naXQvcmVmcy90YWdzL2AgZGlyZWN0b3J5LgogCi1JZiAiLXMiIG9yICItYSIgaXMgcGFzc2VkLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIGZvciBhIHRhZyBtZXNzYWdlLgotYW5kIGEgdGFnIG9iamVjdCBpcyBjcmVhdGVkLiAgT3RoZXJ3aXNlIGp1c3QgdGhlIFNIQTEgb2JqZWN0Ci1uYW1lIG9mIHRoZSBjb21taXQgb2JqZWN0IGlzIHdyaXR0ZW4uCitJZiBvbmUgb2YgYC1hYCwgYC1zYCwgb3IgYC11IDxrZXktaWQ+YCBpcyBwYXNzZWQsIHRoZSBjb21tYW5kCitjcmVhdGVzIGEgJ3RhZycgb2JqZWN0LCBhbmQgcmVxdWlyZXMgdGhlIHRhZyBtZXNzYWdlLiAgVW5sZXNzCitgLW0gPG1zZz5gIGlzIGdpdmVuLCBhbiBlZGl0b3IgaXMgc3RhcnRlZCBmb3IgdGhlIHVzZXIgdG8gdHlwZQoraW4gdGhlIHRhZyBtZXNzYWdlLgogCi1BIEdudVBHIHNpZ25lZCB0YWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB3aGVuICItcyIgaXMgdXNlZC4KK090aGVyd2lzZSBqdXN0IHRoZSBTSEExIG9iamVjdCBuYW1lIG9mIHRoZSBjb21taXQgb2JqZWN0IGlzCit3cml0dGVuIChpLmUuIGFuIGxpZ2h0d2VpZ2h0IHRhZykuCisKK0EgR251UEcgc2lnbmVkIHRhZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHdoZW4gYC1zYCBvciBgLXUKKzxrZXktaWQ+YCBpcyB1c2VkLiAgV2hlbiBgLXUgPGtleS1pZD5gIGlzIG5vdCB1c2VkLCB0aGUKK2NvbW1pdHRlciBpZGVudGl0eSBmb3IgdGhlIGN1cnJlbnQgdXNlciBpcyB1c2VkIHRvIGZpbmQgdGhlCitHbnVQRyBrZXkgZm9yIHNpZ25pbmcuCiAKIAogQXV0aG9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQKaW5kZXggNDgwYTBjZi4uMjEzOWI2ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRhci10cmVlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC10YXItdHJlZSgxKQogPT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQKaW5kZXggMzkwM2IyZC4uMjEzZGM4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC11bnBhY2stZmlsZSgxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQKaW5kZXggOWI5ODJkOS4uYjcxNmJhMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC11bnBhY2stb2JqZWN0cygxKQogPT09PT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKaW5kZXggNmZhMWQ5OC4uNThiOWU0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC05LDEyICs5LDEzIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KICdnaXQtdXBkYXRlLWluZGV4JwotCSAgICAgWy0tYWRkXSBbLS1yZW1vdmVdIFstLXJlZnJlc2hdIFstLXJlcGxhY2VdCi0JICAgICBbLS1pZ25vcmUtbWlzc2luZ10KLQkgICAgIFstLWZvcmNlLXJlbW92ZV0KKwkgICAgIFstLWFkZF0gWy0tcmVtb3ZlIHwgLS1mb3JjZS1yZW1vdmVdIFstLXJlcGxhY2VdIAorCSAgICAgWy0tcmVmcmVzaCBbLXFdIFstLXVubWVyZ2VkXSBbLS1pZ25vcmUtbWlzc2luZ11dCiAJICAgICBbLS1jYWNoZWluZm8gPG1vZGU+IDxvYmplY3Q+IDxmaWxlPl1cKgotCSAgICAgWy0taW5mby1vbmx5XQorCSAgICAgWy0tY2htb2Q9KCt8LSl4XQorCSAgICAgWy0taW5mby1vbmx5XSBbLS1pbmRleC1pbmZvXQogCSAgICAgWy16XSBbLS1zdGRpbl0KKwkgICAgIFstLXZlcmJvc2VdCiAJICAgICBbLS1dIFs8ZmlsZT5dXCoKIAogREVTQ1JJUFRJT04KQEAgLTQyLDEyICs0MywyOCBAQAogCUxvb2tzIGF0IHRoZSBjdXJyZW50IGNhY2hlIGFuZCBjaGVja3MgdG8gc2VlIGlmIG1lcmdlcyBvcgogCXVwZGF0ZXMgYXJlIG5lZWRlZCBieSBjaGVja2luZyBzdGF0KCkgaW5mb3JtYXRpb24uCiAKKy1xOjoKKyAgICAgICAgUXVpZXQuICBJZiAtLXJlZnJlc2ggZmluZHMgdGhhdCB0aGUgY2FjaGUgbmVlZHMgYW4gdXBkYXRlLCB0aGUKKyAgICAgICAgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBlcnJvciBvdXQuICBUaGlzIG9wdGlvbiBtYWtlcworICAgICAgICBnaXQtdXBkYXRlLWluZGV4IGNvbnRpbnVlIGFueXdheS4KKworLS11bm1lcmdlZDo6CisgICAgICAgIElmIC0tcmVmcmVzaCBmaW5kcyB1bm1lcmdlZCBjaGFuZ2VzIGluIHRoZSBjYWNoZSwgdGhlIGRlZmF1bHQgCisgICAgICAgIGJlaGF2aW9yIGlzIHRvIGVycm9yIG91dC4gIFRoaXMgb3B0aW9uIG1ha2VzIGdpdC11cGRhdGUtaW5kZXggCisgICAgICAgIGNvbnRpbnVlIGFueXdheS4KKwogLS1pZ25vcmUtbWlzc2luZzo6CiAJSWdub3JlcyBtaXNzaW5nIGZpbGVzIGR1cmluZyBhIC0tcmVmcmVzaAogCiAtLWNhY2hlaW5mbyA8bW9kZT4gPG9iamVjdD4gPHBhdGg+OjoKIAlEaXJlY3RseSBpbnNlcnQgdGhlIHNwZWNpZmllZCBpbmZvIGludG8gdGhlIGNhY2hlLgogCQorLS1pbmRleC1pbmZvOjoKKyAgICAgICAgUmVhZCBpbmRleCBpbmZvIGZyb20gc3RkaW4uCisKKy0tY2htb2Q9KCt8LSl4OjoKKyAgICAgICAgU2V0IHRoZSBleGVjdXRlIHBlcm1pc3Npb25zIG9uIHRoZSB1cGRhdGVkIGZpbGVzLiAgICAgICAgCisKIC0taW5mby1vbmx5OjoKIAlEbyBub3QgY3JlYXRlIG9iamVjdHMgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSBmb3IgYWxsCiAJPGZpbGU+IGFyZ3VtZW50cyB0aGF0IGZvbGxvdyB0aGlzIGZsYWc7IGp1c3QgaW5zZXJ0CkBAIC03MCw2ICs4Nyw5IEBACiAJcmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LiAgUGF0aHMgYXJlCiAJc2VwYXJhdGVkIGJ5IExGIChpLmUuIG9uZSBwYXRoIHBlciBsaW5lKSBieSBkZWZhdWx0LgogCistLXZlcmJvc2U6OgorICAgICAgICBSZXBvcnQgd2hhdCBpcyBiZWluZyBhZGRlZCBhbmQgcmVtb3ZlZCBmcm9tIGluZGV4LgorCiAtejo6CiAJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tc3RkaW5gOyBwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGgKIAlOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgTEYuCkBAIC03OSw3ICs5OSw3IEBACiAKIDxmaWxlPjo6CiAJRmlsZXMgdG8gYWN0IG9uLgotCU5vdGUgdGhhdCBmaWxlcyBiZWdpbmluZyB3aXRoICcuJyBhcmUgZGlzY2FyZGVkLiBUaGlzIGluY2x1ZGVzCisJTm90ZSB0aGF0IGZpbGVzIGJlZ2lubmluZyB3aXRoICcuJyBhcmUgZGlzY2FyZGVkLiBUaGlzIGluY2x1ZGVzCiAJYC4vZmlsZWAgYW5kIGBkaXIvLi9maWxlYC4gSWYgeW91IGRvbid0IHdhbnQgdGhpcywgdGhlbiB1c2UJCiAJY2xlYW5lciBuYW1lcy4KIAlUaGUgc2FtZSBhcHBsaWVzIHRvIGRpcmVjdG9yaWVzIGVuZGluZyAnLycgYW5kIHBhdGhzIHdpdGggJy8vJwpAQCAtMTIxLDYgKzE0MSwxNyBAQAogICAgZ2l0LWNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdC11cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKIAogCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGhvbm9ycyBgY29yZS5maWxlbW9kZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIElmCit5b3VyIHJlcG9zaXRvcnkgaXMgb24gYW4gZmlsZXN5c3RlbSB3aG9zZSBleGVjdXRhYmxlIGJpdHMgYXJlCit1bnJlbGlhYmxlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gJ2ZhbHNlJy4gIFRoaXMgY2F1c2VzIHRoZQorY29tbWFuZCB0byBpZ25vcmUgZGlmZmVyZW5jZXMgaW4gZmlsZSBtb2RlcyByZWNvcmRlZCBpbiB0aGUKK2luZGV4IGFuZCB0aGUgZmlsZSBtb2RlIG9uIHRoZSBmaWxlc3lzdGVtIGlmIHRoZXkgZGlmZmVyIG9ubHkgb24KK2V4ZWN1dGFibGUgYml0LiAgIE9uIHN1Y2ggYW4gdW5mb3J0dW5hdGUgZmlsZXN5c3RlbSwgeW91IG1heQorbmVlZCB0byB1c2UgYGdpdC11cGRhdGUtaW5kZXggLS1jaG1vZD1gLgorCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXNlcnZlci1pbmZvLnR4dAppbmRleCAyZWZkNTQwLi4zZDBkZWEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtdXBkYXRlLXNlcnZlci1pbmZvKDEpCiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CmluZGV4IDk4ODE1YjYuLjNkOGY4ZWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtdXBsb2FkLXBhY2soMSkKID09PT09PT09PT09PT09PT09PQotdjAuMSwgSnVseSAyMDA1CiAKIE5BTUUKIC0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CmluZGV4IGMxYzcxNzIuLmMyMmQzNGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC12YXIoMSkKID09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKaW5kZXggYjEwMGFhNy4uY2Q3NGZmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dApAQCAtMSwxMCArMSw5IEBACiBnaXQtdmVyaWZ5LXBhY2soMSkKID09PT09PT09PT09PT09PT09PQotdjAuMSwgSnVuZSAyMDA1CiAKIE5BTUUKIC0tLS0KLWdpdC12ZXJpZnktcGFjayAtIFZhbGlkYXRlIHBhY2tlZCBHSVQgYXJjaGl2ZSBmaWxlcy4KK2dpdC12ZXJpZnktcGFjayAtIFZhbGlkYXRlIHBhY2tlZCBnaXQgYXJjaGl2ZSBmaWxlcy4KIAogCiBTWU5PUFNJUwpAQCAtMTQsNyArMTMsNyBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVJlYWRzIGdpdmVuIGlkeCBmaWxlIGZvciBwYWNrZWQgR0lUIGFyY2hpdmUgY3JlYXRlZCB3aXRoCitSZWFkcyBnaXZlbiBpZHggZmlsZSBmb3IgcGFja2VkIGdpdCBhcmNoaXZlIGNyZWF0ZWQgd2l0aAogZ2l0LXBhY2stb2JqZWN0cyBjb21tYW5kIGFuZCB2ZXJpZmllcyBpZHggZmlsZSBhbmQgdGhlCiBjb3JyZXNwb25kaW5nIHBhY2sgZmlsZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0CmluZGV4IGRiMmVmZWEuLmU2ZjU3ZDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtd2hhdGNoYW5nZWQoMSkKID09PT09PT09PT09PT09PT09PQotdjAuOTkuNCwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHdoYXRjaGFuZ2VkJyA8b3B0aW9uPi4uLgorJ2dpdC13aGF0Y2hhbmdlZCcgPG9wdGlvbj4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CmluZGV4IDcxZTE2ZDEuLjUxYmU0NGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXdyaXRlLXRyZWUoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKaW5kZXggZTE0MTAyMS4uNTlkMGRjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdCg3KQogPT09PT09Ci12MC45OS42LCBTZXAgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC02OSw2ICs2OCw5IEBACiBnaXRsaW5rOmdpdC1oYXNoLW9iamVjdFsxXTo6CiAJQ29tcHV0ZXMgdGhlIG9iamVjdCBJRCBmcm9tIGEgZmlsZS4KIAorZ2l0bGluazpnaXQtaW5kZXgtcGFjay5odG1sWzFdOjoKKwlCdWlsZCBwYWNrIGluZGV4IGZpbGUgZm9yIGFuIGV4aXN0aW5nIHBhY2tlZCBhcmNoaXZlLgorCiBnaXRsaW5rOmdpdC1pbml0LWRiWzFdOjoKIAlDcmVhdGVzIGFuIGVtcHR5IGdpdCBvYmplY3QgZGF0YWJhc2UKIApAQCAtMTMxLDYgKzEzMyw5IEBACiBnaXRsaW5rOmdpdC1tZXJnZS1iYXNlWzFdOjoKIAlGaW5kcyBhcyBnb29kIGEgY29tbW9uIGFuY2VzdG9yIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlCiAKK2dpdGxpbms6Z2l0LW5hbWUtcmV2WzFdOjoKKwlGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzCisKIGdpdGxpbms6Z2l0LXJldi1saXN0WzFdOjoKIAlMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKIApAQCAtMTQ3LDcgKzE1Miw3IEBACiAJRGlzcGxheXMgYSBnaXQgbG9naWNhbCB2YXJpYWJsZQogCiBnaXRsaW5rOmdpdC12ZXJpZnktcGFja1sxXTo6Ci0JVmFsaWRhdGVzIHBhY2tlZCBHSVQgYXJjaGl2ZSBmaWxlcworCVZhbGlkYXRlcyBwYWNrZWQgZ2l0IGFyY2hpdmUgZmlsZXMKIAogVGhlIGludGVycm9nYXRlIGNvbW1hbmRzIG1heSBjcmVhdGUgZmlsZXMgLSBhbmQgeW91IGNhbiBmb3JjZSB0aGVtIHRvCiB0b3VjaCB0aGUgd29ya2luZyBmaWxlIHNldCAtIGJ1dCBpbiBnZW5lcmFsIHRoZXkgZG9uJ3QKQEAgLTE2NCwxMSArMTY5LDExIEBACiAJVXBkYXRlcyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuCiAKIGdpdGxpbms6Z2l0LWh0dHAtZmV0Y2hbMV06OgotCURvd25sb2FkcyBhIHJlbW90ZSBHSVQgcmVwb3NpdG9yeSB2aWEgSFRUUAorCURvd25sb2FkcyBhIHJlbW90ZSBnaXQgcmVwb3NpdG9yeSB2aWEgSFRUUAogCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtaHR0cC1wdWxsLgogCiBnaXRsaW5rOmdpdC1sb2NhbC1mZXRjaFsxXTo6Ci0JRHVwbGljYXRlcyBhbm90aGVyIEdJVCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtCisJRHVwbGljYXRlcyBhbm90aGVyIGdpdCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtCiAJUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1sb2NhbC1wdWxsLgogCiBnaXRsaW5rOmdpdC1wZWVrLXJlbW90ZVsxXTo6CkBAIC0xODAsNiArMTg1LDkgQEAKIGdpdGxpbms6Z2l0LXNlbmQtcGFja1sxXTo6CiAJUHVzaGVzIHRvIGEgcmVtb3RlIHJlcG9zaXRvcnksIGludGVsbGlnZW50bHkuCiAKK2dpdGxpbms6Z2l0LXNoZWxsWzFdOjoKKwlSZXN0cmljdGVkIHNoZWxsIGZvciBHSVQtb25seSBTU0ggYWNjZXNzLgorCiBnaXRsaW5rOmdpdC1zc2gtZmV0Y2hbMV06OgogCVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCiAJUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1zc2gtcHVsbC4KQEAgLTIwNCw2ICsyMTIsOSBAQAogCUFkZCBwYXRocyB0byB0aGUgaW5kZXggZmlsZS4KIAlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWFkZC1zY3JpcHQuCiAKK2dpdGxpbms6Z2l0LWFtWzFdOjoKKwlBcHBseSBwYXRjaGVzIGZyb20gYSBtYWlsYm94LCBidXQgY29vbGVyLgorCiBnaXRsaW5rOmdpdC1hcHBseW1ib3hbMV06OgogCUFwcGx5IHBhdGNoZXMgZnJvbSBhIG1haWxib3guCiAKQEAgLTI1Nyw2ICsyNjgsOSBAQAogZ2l0bGluazpnaXQtbWVyZ2VbMV06OgogCUdyYW5kIHVuaWZpZWQgbWVyZ2UgZHJpdmVyLgogCitnaXRsaW5rOmdpdC1tdlsxXTo6CisJTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rLgorCiBnaXRsaW5rOmdpdC1vY3RvcHVzWzFdOjoKIAlNZXJnZSBtb3JlIHRoYW4gdHdvIGNvbW1pdHMuCiAJUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1vY3RvcHVzLXNjcmlwdC4KQEAgLTMyMyw3ICszMzcsNyBAQAogCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtYXJjaGltcG9ydC1zY3JpcHQuCiAKIGdpdGxpbms6Z2l0LWNvbnZlcnQtb2JqZWN0c1sxXTo6Ci0JQ29udmVydHMgb2xkLXN0eWxlIEdJVCByZXBvc2l0b3J5CisJQ29udmVydHMgb2xkLXN0eWxlIGdpdCByZXBvc2l0b3J5CiAJUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1jb252ZXJ0LWNhY2hlLgogCiBnaXRsaW5rOmdpdC1jdnNpbXBvcnRbMV06OgpAQCAtMzQyLDE3ICszNTYsMjkgQEAKIAlIYXJkbGluayBjb21tb24gb2JqZWN0cyBpbiBsb2NhbCByZXBvc2l0b3JpZXMuCiAJUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1yZWxpbmstc2NyaXB0LgogCitnaXRsaW5rOmdpdC1zdm5pbXBvcnRbMV06OgorCUltcG9ydCBhIFNWTiByZXBvc2l0b3J5IGludG8gZ2l0LgorCiBnaXRsaW5rOmdpdC1zaC1zZXR1cFsxXTo6CiAJQ29tbW9uIGdpdCBzaGVsbCBzY3JpcHQgc2V0dXAgY29kZS4KIAlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXNoLXNldHVwLXNjcmlwdC4KIAorZ2l0bGluazpnaXQtc3ltYm9saWMtcmVmWzFdOjoKKwlSZWFkIGFuZCBtb2RpZnkgc3ltYm9saWMgcmVmcworCiBnaXRsaW5rOmdpdC10YWdbMV06OgogCUFuIGV4YW1wbGUgc2NyaXB0IHRvIGNyZWF0ZSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHCiAJUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC10YWctc2NyaXB0LgogCitnaXRsaW5rOmdpdC11cGRhdGUtcmVmWzFdOjoKKwlVcGRhdGUgdGhlIG9iamVjdCBuYW1lIHN0b3JlZCBpbiBhIHJlZiBzYWZlbHkuCisKIAogSW50ZXJyb2dhdG9yczoKIAorZ2l0bGluazpnaXQtY2hlY2stcmVmLWZvcm1hdFsxXTo6CisJTWFrZSBzdXJlIHJlZiBuYW1lIGlzIHdlbGwgZm9ybWVkLgorCiBnaXRsaW5rOmdpdC1jaGVycnlbMV06OgogCUZpbmQgY29tbWl0cyBub3QgbWVyZ2VkIHVwc3RyZWFtLgogCkBAIC0zNjEsNyArMzg3LDcgQEAKIAlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWNvdW50LW9iamVjdHMtc2NyaXB0LgogCiBnaXRsaW5rOmdpdC1kYWVtb25bMV06OgotCUEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdJVCByZXBvc2l0b3JpZXMuCisJQSByZWFsbHkgc2ltcGxlIHNlcnZlciBmb3IgZ2l0IHJlcG9zaXRvcmllcy4KIAogZ2l0bGluazpnaXQtZ2V0LXRhci1jb21taXQtaWRbMV06OgogCUV4dHJhY3QgY29tbWl0IElEIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIHVzaW5nIGdpdC10YXItdHJlZS4KQEAgLTM5MCw2ICs0MTYsOSBAQAogCVNlbmQgcGF0Y2ggZS1tYWlscyBvdXQgb2YgImZvcm1hdC1wYXRjaCAtLW1ib3giIG91dHB1dC4KIAlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXNlbmQtZW1haWwtc2NyaXB0LgogCitnaXRsaW5rOmdpdC1zeW1ib2xpYy1yZWZzWzFdOjoKKwlSZWFkIGFuZCBtb2RpZnkgc3ltYm9saWMgcmVmcy4KKwogZ2l0bGluazpnaXQtc3RyaXBzcGFjZVsxXTo6CiAJRmlsdGVyIG91dCBlbXB0eSBsaW5lcy4KIApAQCAtNDAxLDYgKzQzMCwzNyBAQAogCWdpdGsuCiAKIAorQ29uZmlndXJhdGlvbiBNZWNoYW5pc20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0YXJ0aW5nIGZyb20gMC45OS45IChhY3R1YWxseSBtaWQgMC45OS44LkdJVCksIC5naXQvY29uZmlnIGZpbGUKK2lzIHVzZWQgdG8gaG9sZCBwZXItcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBJdCBpcyBhCitzaW1wbGUgdGV4dCBmaWxlIG1vZGVsbGVkIGFmdGVyIGAuaW5pYCBmb3JtYXQgZmFtaWxpYXIgdG8gc29tZQorcGVvcGxlLiAgSGVyZSBpcyBhbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyMKKyMgVGhpcyBpcyB0aGUgY29uZmlnIGZpbGUsIGFuZAorIyBhICcjJyBvciAnOycgY2hhcmFjdGVyIGluZGljYXRlcworIyBhIGNvbW1lbnQKKyMKKworOyBjb3JlIHZhcmlhYmxlcworW2NvcmVdCisJOyBEb24ndCB0cnVzdCBmaWxlIG1vZGVzCisJZmlsZW1vZGUgPSBmYWxzZQorCis7IHVzZXIgaWRlbnRpdHkKK1t1c2VyXQorCW5hbWUgPSAiSnVuaW8gQyBIYW1hbm8iCisJZW1haWwgPSAianVua2lvQHR3aW5zdW4uY29tIgorCistLS0tLS0tLS0tLS0KKworVmFyaW91cyBjb21tYW5kcyByZWFkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgYWRqdXN0Cit0aGVpciBvcGVyYXRpb24gYWNjb3JkaW5nbHkuCisKKwogSWRlbnRpZmllciBUZXJtaW5vbG9neQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogPG9iamVjdD46OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS50eHQgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LnR4dAppbmRleCBhMDY5YjdiLi5lYjdiNDcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LnR4dApAQCAtMSw1ICsxLDUgQEAKIG9iamVjdDo6Ci0JVGhlIHVuaXQgb2Ygc3RvcmFnZSBpbiBHSVQuIEl0IGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkKKwlUaGUgdW5pdCBvZiBzdG9yYWdlIGluIGdpdC4gSXQgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieQogCXRoZSBTSEExIG9mIGl0cyBjb250ZW50cy4gQ29uc2VxdWVudGx5LCBhbiBvYmplY3QgY2FuIG5vdAogCWJlIGNoYW5nZWQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG9va3MudHh0IGIvRG9jdW1lbnRhdGlvbi9ob29rcy50eHQKaW5kZXggNTdmNDcyMC4uN2VlMzU3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob29rcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ob29rcy50eHQKQEAgLTEsNiArMSw1IEBACi1Ib29rcyB1c2VkIGJ5IEdJVAorSG9va3MgdXNlZCBieSBnaXQKID09PT09PT09PT09PT09PT09Ci12MC45OS42LCBTZXAgMjAwNQogCiBIb29rcyBhcmUgbGl0dGxlIHNjcmlwdHMgeW91IGNhbiBwbGFjZSBpbiBgJEdJVF9ESVIvaG9va3NgCiBkaXJlY3RvcnkgdG8gdHJpZ2dlciBhY3Rpb24gYXQgY2VydGFpbiBwb2ludHMuICBXaGVuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dAppbmRleCA4ZGJkZGJmLi5lOGRiOWQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQKQEAgLTYsNyArNiw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0gUnN5bmMgVVJMOgkJcnN5bmM6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0LwogLSBIVFRQKHMpIFVSTDoJCWh0dHA6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0LwotLSBHSVQgVVJMOgkJZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC8KKy0gZ2l0IFVSTDoJCWdpdDovL3JlbW90ZS5tYWNoaW5lL3BhdGgvdG8vcmVwby5naXQvCiAJCQlvciByZW1vdGUubWFjaGluZTovcGF0aC90by9yZXBvLmdpdC8KIC0gTG9jYWwgZGlyZWN0b3J5OgkvcGF0aC90by9yZXBvLmdpdC8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzUsMTMgKzc1LDMgQEAKICAgcHVzaGluZy4gIFRoYXQgaXMsIGRvIG5vdCBzdG9yZSBpdCBsb2NhbGx5IGlmCiAgIGZldGNoaW5nLCBhbmQgdXBkYXRlIHRoZSBzYW1lIG5hbWUgaWYgcHVzaGluZy4KIAotLWEsIFwtLWFwcGVuZDo6Ci0JQXBwZW5kIHJlZiBuYW1lcyBhbmQgb2JqZWN0IG5hbWVzIG9mIGZldGNoZWQgcmVmcyB0byB0aGUKLQlleGlzdGluZyBjb250ZW50cyBvZiAkR0lUX0RJUi9GRVRDSF9IRUFELiAgV2l0aG91dCB0aGlzCi0Jb3B0aW9uIG9sZCBkYXRhIGluICRHSVRfRElSL0ZFVENIX0hFQUQgd2lsbCBiZSBvdmVyd3JpdHRlbi4KLQotLWYsIFwtLWZvcmNlOjoKLQlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIGxvY2FsIHJlZiB0aGF0IGlzCi0Jbm90IGFuIGFuY2VzdG9yIG9mIHRoZSByZW1vdGUgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgotCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB0aGUKLQlsb2NhbCByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoIGNhcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3JlcG9zaXRvcnktbGF5b3V0LnR4dCBiL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CmluZGV4IGQyMGZhODAuLjFiNWYyMjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CkBAIC0xLDYgKzEsNSBAQAotR0lUIHJlcG9zaXRvcnkgbGF5b3V0CitnaXQgcmVwb3NpdG9yeSBsYXlvdXQKID09PT09PT09PT09PT09PT09PT09PQotdjAuOTkuNSwgU2VwIDIwMDUKIAogWW91IG1heSBmaW5kIHRoZXNlIHRoaW5ncyBpbiB5b3VyIGdpdCByZXBvc2l0b3J5IChgLmdpdGAKIGRpcmVjdG9yeSBmb3IgYSByZXBvc2l0b3J5IGFzc29jaWF0ZWQgd2l0aCB5b3VyIHdvcmtpbmcgdHJlZSwgb3IKQEAgLTEyMCw3ICsxMTksNyBAQAogaW5mby9leGNsdWRlOjoKIAlUaGlzIGZpbGUsIGJ5IGNvbnZlbnRpb24gYW1vbmcgUG9yY2VsYWlucywgc3RvcmVzIHRoZQogCWV4Y2x1ZGUgcGF0dGVybiBsaXN0LiAgYGdpdCBzdGF0dXNgIGxvb2tzIGF0IGl0LCBidXQKLQlvdGhlcndpc2UgaXQgaXMgbm90IGxvb2tlZCBhdCBieSBhbnkgb2YgdGhlIGNvcmUgR0lUCisJb3RoZXJ3aXNlIGl0IGlzIG5vdCBsb29rZWQgYXQgYnkgYW55IG9mIHRoZSBjb3JlIGdpdAogCWNvbW1hbmRzLgogCiByZW1vdGVzOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKaW5kZXggMzZmNDJlMC4uYjlmNzM3ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKQEAgLTEsNiArMSw1IEBACiBBIHNob3J0IGdpdCB0dXRvcmlhbAogPT09PT09PT09PT09PT09PT09PT0KLXYwLjk5LjUsIEF1ZyAyMDA1CiAKIEludHJvZHVjdGlvbgogLS0tLS0tLS0tLS0tCkBAIC01Miw3ICs1MSw5IEBACiBpbnNwZWN0IHRoYXQgd2l0aCBgbHNgLiBGb3IgeW91ciBuZXcgZW1wdHkgcHJvamVjdCwgaXQgc2hvdWxkIHNob3cgeW91CiB0aHJlZSBlbnRyaWVzLCBhbW9uZyBvdGhlciB0aGluZ3M6CiAKLSAtIGEgc3ltbGluayBjYWxsZWQgYEhFQURgLCBwb2ludGluZyB0byBgcmVmcy9oZWFkcy9tYXN0ZXJgCisgLSBhIHN5bWxpbmsgY2FsbGVkIGBIRUFEYCwgcG9pbnRpbmcgdG8gYHJlZnMvaGVhZHMvbWFzdGVyYCAoaWYgeW91cgorICAgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBuYXRpdmUgc3ltbGlua3MsIGl0IGlzIGEgZmlsZSBjb250YWluaW5nIHRoZQorICAgbGluZSAicmVmOiByZWZzL2hlYWRzL21hc3RlciIpCiArCiBEb24ndCB3b3JyeSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoZSBmaWxlIHRoYXQgdGhlIGBIRUFEYCBsaW5rIHBvaW50cyB0bwogZG9lc24ndCBldmVuIGV4aXN0IHlldCAtLSB5b3UgaGF2ZW4ndCBjcmVhdGVkIHRoZSBjb21taXQgdGhhdCB3aWxsCkBAIC0xNjEsNyArMTYyLDcgQEAKIAlnaXQtY2F0LWZpbGUgLXQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOAogCiB3aGVyZSB0aGUgYC10YCB0ZWxscyBgZ2l0LWNhdC1maWxlYCB0byB0ZWxsIHlvdSB3aGF0IHRoZSAidHlwZSIgb2YgdGhlCi1vYmplY3QgaXMuIEdpdCB3aWxsIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgYSAiYmxvYiIgb2JqZWN0IChpZSBqdXN0IGEKK29iamVjdCBpcy4gZ2l0IHdpbGwgdGVsbCB5b3UgdGhhdCB5b3UgaGF2ZSBhICJibG9iIiBvYmplY3QgKGllIGp1c3QgYQogcmVndWxhciBmaWxlKSwgYW5kIHlvdSBjYW4gc2VlIHRoZSBjb250ZW50cyB3aXRoCiAKIAlnaXQtY2F0LWZpbGUgImJsb2IiIDU1N2RiMDMKQEAgLTIyOCw2ICsyMjksNyBAQAogCiAtLS0tLS0tLS0tLS0KIGRpZmYgLS1naXQgYS9oZWxsbyBiL2hlbGxvCitpbmRleCA1NTdkYjAzLi4yNjM0MTRmIDEwMDY0NAogLS0tIGEvaGVsbG8KICsrKyBiL2hlbGxvCiBAQCAtMSArMSwyIEBACkBAIC0yOTAsMTMgKzI5MiwxNiBAQAogb24gaXRzIHN0YW5kYXJkIGlucHV0LCBhbmQgaXQgd2lsbCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZyBvYmplY3QgbmFtZSBmb3IgdGhlCiBjb21taXQgdG8gaXRzIHN0YW5kYXJkIG91dHB1dC4KIAotQW5kIHRoaXMgaXMgd2hlcmUgd2Ugc3RhcnQgdXNpbmcgdGhlIGAuZ2l0L0hFQURgIGZpbGUuIFRoZSBgSEVBRGAgZmlsZSBpcwotc3VwcG9zZWQgdG8gY29udGFpbiB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0b3Atb2YtdHJlZSwgYW5kIHNpbmNlIHRoYXQncwotZXhhY3RseSB3aGF0IGBnaXQtY29tbWl0LXRyZWVgIHNwaXRzIG91dCwgd2UgY2FuIGRvIHRoaXMgYWxsIHdpdGggYSBzaW1wbGUKLXNoZWxsIHBpcGVsaW5lOgorQW5kIHRoaXMgaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBgLmdpdC9yZWZzL2hlYWRzL21hc3RlcmAgZmlsZQord2hpY2ggaXMgcG9pbnRlZCBhdCBieSBgSEVBRGAuIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBjb250YWluCit0aGUgcmVmZXJlbmNlIHRvIHRoZSB0b3Atb2YtdHJlZSBvZiB0aGUgbWFzdGVyIGJyYW5jaCwgYW5kIHNpbmNlCit0aGF0J3MgZXhhY3RseSB3aGF0IGBnaXQtY29tbWl0LXRyZWVgIHNwaXRzIG91dCwgd2UgY2FuIGRvIHRoaXMKK2FsbCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIHNoZWxsIGNvbW1hbmRzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVjaG8gIkluaXRpYWwgY29tbWl0IiB8IGdpdC1jb21taXQtdHJlZSAkKGdpdC13cml0ZS10cmVlKSA+IC5naXQvSEVBRAordHJlZT0kKGdpdC13cml0ZS10cmVlKQorY29tbWl0PSQoZWNobyAnSW5pdGlhbCBjb21taXQnIHwgZ2l0LWNvbW1pdC10cmVlICR0cmVlKQorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAkKGNvbW1pdCkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB3aGljaCB3aWxsIHNheToKQEAgLTM3OCw3ICszODMsNyBAQAogCiBUaGlzIGlzIG5vdCBoYXJkIHRvIHVuZGVyc3RhbmQsIGFzIHNvb24gYXMgeW91IHJlYWxpemUgdGhhdCBnaXQgc2ltcGx5CiBuZXZlciBrbm93cyAob3IgY2FyZXMpIGFib3V0IGZpbGVzIHRoYXQgaXQgaXMgbm90IHRvbGQgYWJvdXQKLWV4cGxpY2l0bHkuIEdpdCB3aWxsIG5ldmVyIGdvICpsb29raW5nKiBmb3IgZmlsZXMgdG8gY29tcGFyZSwgaXQKK2V4cGxpY2l0bHkuIGdpdCB3aWxsIG5ldmVyIGdvICpsb29raW5nKiBmb3IgZmlsZXMgdG8gY29tcGFyZSwgaXQKIGV4cGVjdHMgeW91IHRvIHRlbGwgaXQgd2hhdCB0aGUgZmlsZXMgYXJlLCBhbmQgdGhhdCdzIHdoYXQgdGhlIGluZGV4CiBpcyB0aGVyZSBmb3IuCiA9PT09PT09PT09PT09PT09CkBAIC01NDQsNyArNTQ5LDcgQEAKIENvcHlpbmcgcmVwb3NpdG9yaWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1HaXQgcmVwb3NpdG9yaWVzIGFyZSBub3JtYWxseSB0b3RhbGx5IHNlbGYtc3VmZmljaWVudCwgYW5kIGl0J3Mgd29ydGggbm90aW5nCitnaXQgcmVwb3NpdG9yaWVzIGFyZSBub3JtYWxseSB0b3RhbGx5IHNlbGYtc3VmZmljaWVudCwgYW5kIGl0J3Mgd29ydGggbm90aW5nCiB0aGF0IHVubGlrZSBDVlMsIGZvciBleGFtcGxlLCB0aGVyZSBpcyBubyBzZXBhcmF0ZSBub3Rpb24gb2YKICJyZXBvc2l0b3J5IiBhbmQgIndvcmtpbmcgdHJlZSIuIEEgZ2l0IHJlcG9zaXRvcnkgbm9ybWFsbHkgKmlzKiB0aGUKIHdvcmtpbmcgdHJlZSwgd2l0aCB0aGUgbG9jYWwgZ2l0IGluZm9ybWF0aW9uIGhpZGRlbiBpbiB0aGUgYC5naXRgCkBAIC02OTIsNyArNjk3LDkgQEAKIGp1c3QgdGVsbGluZyBgZ2l0IGNoZWNrb3V0YCB3aGF0IHRoZSBiYXNlIG9mIHRoZSBjaGVja291dCB3b3VsZCBiZS4KIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgaGF2ZSBhbiBlYXJsaWVyIHRhZyBvciBicmFuY2gsIHlvdSdkIGp1c3QgZG8KIAotCWdpdCBjaGVja291dCAtYiBteWJyYW5jaCBlYXJsaWVyLWNvbW1pdAorLS0tLS0tLS0tLS0tCitnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggZWFybGllci1jb21taXQKKy0tLS0tLS0tLS0tLQogCiBhbmQgaXQgd291bGQgY3JlYXRlIHRoZSBuZXcgYnJhbmNoIGBteWJyYW5jaGAgYXQgdGhlIGVhcmxpZXIgY29tbWl0LAogYW5kIGNoZWNrIG91dCB0aGUgc3RhdGUgYXQgdGhhdCB0aW1lLgpAQCAtNzAwLDE3ICs3MDcsMjkgQEAKIAogWW91IGNhbiBhbHdheXMganVzdCBqdW1wIGJhY2sgdG8geW91ciBvcmlnaW5hbCBgbWFzdGVyYCBicmFuY2ggYnkgZG9pbmcKIAotCWdpdCBjaGVja291dCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tCiAKIChvciBhbnkgb3RoZXIgYnJhbmNoLW5hbWUsIGZvciB0aGF0IG1hdHRlcikgYW5kIGlmIHlvdSBmb3JnZXQgd2hpY2gKIGJyYW5jaCB5b3UgaGFwcGVuIHRvIGJlIG9uLCBhIHNpbXBsZQogCi0JbHMgLWwgLmdpdC9IRUFECistLS0tLS0tLS0tLS0KK2xzIC1sIC5naXQvSEVBRAorLS0tLS0tLS0tLS0tCiAKLXdpbGwgdGVsbCB5b3Ugd2hlcmUgaXQncyBwb2ludGluZy4gVG8gZ2V0IHRoZSBsaXN0IG9mIGJyYW5jaGVzCi15b3UgaGF2ZSwgeW91IGNhbiBzYXkKK3dpbGwgdGVsbCB5b3Ugd2hlcmUgaXQncyBwb2ludGluZyAoTm90ZSB0aGF0IG9uIHBsYXRmb3JtcyB3aXRoIGJhZCBvciBubworc3ltbGluayBzdXBwb3J0LCB5b3UgaGF2ZSB0byBleGVjdXRlCiAKLQlnaXQgYnJhbmNoCistLS0tLS0tLS0tLS0KK2NhdCAuZ2l0L0hFQUQKKy0tLS0tLS0tLS0tLQorCitpbnN0ZWFkKS4gVG8gZ2V0IHRoZSBsaXN0IG9mIGJyYW5jaGVzIHlvdSBoYXZlLCB5b3UgY2FuIHNheQorCistLS0tLS0tLS0tLS0KK2dpdCBicmFuY2gKKy0tLS0tLS0tLS0tLQogCiB3aGljaCBpcyBub3RoaW5nIG1vcmUgdGhhbiBhIHNpbXBsZSBzY3JpcHQgYXJvdW5kIGBscyAuZ2l0L3JlZnMvaGVhZHNgLgogVGhlcmUgd2lsbCBiZSBhc3RlcmlzayBpbiBmcm9udCBvZiB0aGUgYnJhbmNoIHlvdSBhcmUgY3VycmVudGx5IG9uLgpAQCAtNzE4LDcgKzczNyw5IEBACiBTb21ldGltZXMgeW91IG1heSB3aXNoIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggX3dpdGhvdXRfIGFjdHVhbGx5CiBjaGVja2luZyBpdCBvdXQgYW5kIHN3aXRjaGluZyB0byBpdC4gSWYgc28sIGp1c3QgdXNlIHRoZSBjb21tYW5kCiAKLQlnaXQgYnJhbmNoIDxicmFuY2huYW1lPiBbc3RhcnRpbmdwb2ludF0KKy0tLS0tLS0tLS0tLQorZ2l0IGJyYW5jaCA8YnJhbmNobmFtZT4gW3N0YXJ0aW5ncG9pbnRdCistLS0tLS0tLS0tLS0KIAogd2hpY2ggd2lsbCBzaW1wbHkgX2NyZWF0ZV8gdGhlIGJyYW5jaCwgYnV0IHdpbGwgbm90IGRvIGFueXRoaW5nIGZ1cnRoZXIuIAogWW91IGNhbiB0aGVuIGxhdGVyIC0tIG9uY2UgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIGFjdHVhbGx5IGRldmVsb3AKQEAgLTg0NCw3ICs4NjUsNiBAQAogICEgW215YnJhbmNoXSBTb21lIHdvcmsuCiAtLQogKyAgW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KLSsgIFttYXN0ZXJ+MV0gU29tZSBmdW4uCiArKyBbbXlicmFuY2hdIFNvbWUgd29yay4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC04NzEsOCArODkxLDEwIEBACiB0byB0aGUgYG1hc3RlcmAgYnJhbmNoLiBMZXQncyBnbyBiYWNrIHRvIGBteWJyYW5jaGAsIGFuZCBydW4KIHJlc29sdmUgdG8gZ2V0IHRoZSAidXBzdHJlYW0gY2hhbmdlcyIgYmFjayB0byB5b3VyIGJyYW5jaC4KIAotCWdpdCBjaGVja291dCBteWJyYW5jaAotCWdpdCByZXNvbHZlIEhFQUQgbWFzdGVyICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIKKy0tLS0tLS0tLS0tLQorZ2l0IGNoZWNrb3V0IG15YnJhbmNoCitnaXQgcmVzb2x2ZSBIRUFEIG1hc3RlciAiTWVyZ2UgdXBzdHJlYW0gY2hhbmdlcy4iCistLS0tLS0tLS0tLS0KIAogVGhpcyBvdXRwdXRzIHNvbWV0aGluZyBsaWtlIHRoaXMgKHRoZSBhY3R1YWwgY29tbWl0IG9iamVjdCBuYW1lcwogd291bGQgYmUgZGlmZmVyZW50KQpAQCAtOTUxLDcgKzk3Myw3IEBACiBib3RoIGVuZHMgb24gdGhlIGxvY2FsIG1hY2hpbmUgaW5zdGVhZCBvZiBydW5uaW5nIG90aGVyIGVuZCBvbgogdGhlIHJlbW90ZSBtYWNoaW5lIHZpYSBgc3NoYC4KIAotR0lUIE5hdGl2ZTo6CitnaXQgTmF0aXZlOjoKIAlgZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCiArCiBUaGlzIHRyYW5zcG9ydCB3YXMgZGVzaWduZWQgZm9yIGFub255bW91cyBkb3dubG9hZGluZy4gIExpa2UgU1NICkBAIC05NzIsMTMgKzk5NCwxMyBAQAogc29tZXRpbWVzIGFsc28gY2FsbGVkICdjb21taXQgd2Fsa2VycycuCiArCiBUaGUgJ2NvbW1pdCB3YWxrZXJzJyBhcmUgc29tZXRpbWVzIGFsc28gY2FsbGVkICdkdW1iCi10cmFuc3BvcnRzJywgYmVjYXVzZSB0aGV5IGRvIG5vdCByZXF1aXJlIGFueSBHSVQgYXdhcmUgc21hcnQKLXNlcnZlciBsaWtlIEdJVCBOYXRpdmUgdHJhbnNwb3J0IGRvZXMuICBBbnkgc3RvY2sgSFRUUCBzZXJ2ZXIKK3RyYW5zcG9ydHMnLCBiZWNhdXNlIHRoZXkgZG8gbm90IHJlcXVpcmUgYW55IGdpdCBhd2FyZSBzbWFydAorc2VydmVyIGxpa2UgZ2l0IE5hdGl2ZSB0cmFuc3BvcnQgZG9lcy4gIEFueSBzdG9jayBIVFRQIHNlcnZlcgogd291bGQgc3VmZmljZS4KICsKIFRoZXJlIGFyZSAoY29uZnVzaW5nbHkgZW5vdWdoKSBgZ2l0LXNzaC1mZXRjaGAgYW5kIGBnaXQtc3NoLXVwbG9hZGAKIHByb2dyYW1zLCB3aGljaCBhcmUgJ2NvbW1pdCB3YWxrZXJzJzsgdGhleSBvdXRsaXZlZCB0aGVpcgotdXNlZnVsbmVzcyB3aGVuIEdJVCBOYXRpdmUgYW5kIFNTSCB0cmFuc3BvcnRzIHdlcmUgaW50cm9kdWNlZCwKK3VzZWZ1bG5lc3Mgd2hlbiBnaXQgTmF0aXZlIGFuZCBTU0ggdHJhbnNwb3J0cyB3ZXJlIGludHJvZHVjZWQsCiBhbmQgbm90IHVzZWQgYnkgYGdpdCBwdWxsYCBvciBgZ2l0IHB1c2hgIHNjcmlwdHMuCiAKIE9uY2UgeW91IGZldGNoIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB5b3UgYHJlc29sdmVgIHRoYXQKQEAgLTEwODIsMTkgKzExMDQsMjMgQEAKIG9uIHRoZSByZW1vdGUgbWFjaGluZS4gVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdHdvIG92ZXIKIHRoZSBuZXR3b3JrIGludGVybmFsbHkgdXNlcyBhbiBTU0ggY29ubmVjdGlvbi4KIAotWW91ciBwcml2YXRlIHJlcG9zaXRvcnkncyBHSVQgZGlyZWN0b3J5IGlzIHVzdWFsbHkgYC5naXRgLCBidXQKK1lvdXIgcHJpdmF0ZSByZXBvc2l0b3J5J3MgZ2l0IGRpcmVjdG9yeSBpcyB1c3VhbGx5IGAuZ2l0YCwgYnV0CiB5b3VyIHB1YmxpYyByZXBvc2l0b3J5IGlzIG9mdGVuIG5hbWVkIGFmdGVyIHRoZSBwcm9qZWN0IG5hbWUsCiBpLmUuIGA8cHJvamVjdD4uZ2l0YC4gTGV0J3MgY3JlYXRlIHN1Y2ggYSBwdWJsaWMgcmVwb3NpdG9yeSBmb3IKIHByb2plY3QgYG15LWdpdGAuIEFmdGVyIGxvZ2dpbmcgaW50byB0aGUgcmVtb3RlIG1hY2hpbmUsIGNyZWF0ZQogYW4gZW1wdHkgZGlyZWN0b3J5OgogCi0JbWtkaXIgbXktZ2l0LmdpdAorLS0tLS0tLS0tLS0tCitta2RpciBteS1naXQuZ2l0CistLS0tLS0tLS0tLS0KIAotVGhlbiwgbWFrZSB0aGF0IGRpcmVjdG9yeSBpbnRvIGEgR0lUIHJlcG9zaXRvcnkgYnkgcnVubmluZworVGhlbiwgbWFrZSB0aGF0IGRpcmVjdG9yeSBpbnRvIGEgZ2l0IHJlcG9zaXRvcnkgYnkgcnVubmluZwogYGdpdCBpbml0LWRiYCwgYnV0IHRoaXMgdGltZSwgc2luY2UgaXRzIG5hbWUgaXMgbm90IHRoZSB1c3VhbAogYC5naXRgLCB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHk6CiAKLQlHSVRfRElSPW15LWdpdC5naXQgZ2l0LWluaXQtZGIKKy0tLS0tLS0tLS0tLQorR0lUX0RJUj1teS1naXQuZ2l0IGdpdC1pbml0LWRiCistLS0tLS0tLS0tLS0KIAogTWFrZSBzdXJlIHRoaXMgZGlyZWN0b3J5IGlzIGF2YWlsYWJsZSBmb3Igb3RoZXJzIHlvdSB3YW50IHlvdXIKIGNoYW5nZXMgdG8gYmUgcHVsbGVkIGJ5IHZpYSB0aGUgdHJhbnNwb3J0IG9mIHlvdXIgY2hvaWNlLiBBbHNvCkBAIC0xMTE4LDcgKzExNDQsOSBAQAogQ29tZSBiYWNrIHRvIHRoZSBtYWNoaW5lIHlvdSBoYXZlIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LiBGcm9tCiB0aGVyZSwgcnVuIHRoaXMgY29tbWFuZDoKIAotCWdpdCBwdXNoIDxwdWJsaWMtaG9zdD46L3BhdGgvdG8vbXktZ2l0LmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorZ2l0IHB1c2ggPHB1YmxpYy1ob3N0PjovcGF0aC90by9teS1naXQuZ2l0IG1hc3RlcgorLS0tLS0tLS0tLS0tCiAKIFRoaXMgc3luY2hyb25pemVzIHlvdXIgcHVibGljIHJlcG9zaXRvcnkgdG8gbWF0Y2ggdGhlIG5hbWVkCiBicmFuY2ggaGVhZCAoaS5lLiBgbWFzdGVyYCBpbiB0aGlzIGNhc2UpIGFuZCBvYmplY3RzIHJlYWNoYWJsZQpAQCAtMTEyOCw3ICsxMTU2LDkgQEAKIHJlcG9zaXRvcnkuIEtlcm5lbC5vcmcgbWlycm9yIG5ldHdvcmsgdGFrZXMgY2FyZSBvZiB0aGUKIHByb3BhZ2F0aW9uIHRvIG90aGVyIHB1YmxpY2x5IHZpc2libGUgbWFjaGluZXM6CiAKLQlnaXQgcHVzaCBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9naXQvZ2l0LmdpdC8gCistLS0tLS0tLS0tLS0KK2dpdCBwdXNoIG1hc3Rlci5rZXJuZWwub3JnOi9wdWIvc2NtL2dpdC9naXQuZ2l0LyAKKy0tLS0tLS0tLS0tLQogCiAKIFBhY2tpbmcgeW91ciByZXBvc2l0b3J5CkBAIC0xMTQxLDcgKzExNzEsOSBAQAogaW1tdXRhYmxlIG9uY2UgdGhleSBhcmUgY3JlYXRlZCwgdGhlcmUgaXMgYSB3YXkgdG8gb3B0aW1pemUgdGhlCiBzdG9yYWdlIGJ5ICJwYWNraW5nIHRoZW0gdG9nZXRoZXIiLiBUaGUgY29tbWFuZAogCi0JZ2l0IHJlcGFjaworLS0tLS0tLS0tLS0tCitnaXQgcmVwYWNrCistLS0tLS0tLS0tLS0KIAogd2lsbCBkbyBpdCBmb3IgeW91LiBJZiB5b3UgZm9sbG93ZWQgdGhlIHR1dG9yaWFsIGV4YW1wbGVzLCB5b3UKIHdvdWxkIGhhdmUgYWNjdW11bGF0ZWQgYWJvdXQgMTcgb2JqZWN0cyBpbiBgLmdpdC9vYmplY3RzLz8/L2AKQEAgLTExNjUsNyArMTE5Nyw5IEBACiBPbmNlIHlvdSBoYXZlIHBhY2tlZCBvYmplY3RzLCB5b3UgZG8gbm90IG5lZWQgdG8gbGVhdmUgdGhlCiB1bnBhY2tlZCBvYmplY3RzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGFjayBmaWxlIGFueW1vcmUuCiAKLQlnaXQgcHJ1bmUtcGFja2VkCistLS0tLS0tLS0tLS0KK2dpdCBwcnVuZS1wYWNrZWQKKy0tLS0tLS0tLS0tLQogCiB3b3VsZCByZW1vdmUgdGhlbSBmb3IgeW91LgogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGEwZDRkZTUuLjViYjUxMDggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0yNyw4ICsyNywxMiBAQAogIyBEZWZpbmUgTkVFRFNfU09DS0VUIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKFN1bk9TLAogIyBQYXRyaWNrIE1hdXJpdHopLgogIworIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgorIwogIyBEZWZpbmUgV0lUSF9PV05fU1VCUFJPQ0VTU19QWSBpZiB5b3Ugd2FudCB0byB1c2Ugd2l0aCBweXRob24gMi4zLgogIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCisjCiAjIERlZmluZSBDT0xMSVNJT05fQ0hFQ0sgYmVsb3cgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKICMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CiAjIHN1ZmZpY2llbnQgZ3VhcmFudGVlIHRoYXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgd2lsbCBldmVyIGhhcHBlbi4KQEAgLTQ4LDcgKzUyLDcgQEAKIAogIyBERUZJTkVTICs9IC1EVVNFX1NUREVWCiAKLUdJVF9WRVJTSU9OID0gMC45OS44ZworR0lUX1ZFUlNJT04gPSAwLjk5LjlhCiAKIENGTEFHUyA9IC1nIC1PMiAtV2FsbAogQUxMX0NGTEFHUyA9ICQoQ0ZMQUdTKSAkKFBMQVRGT1JNX0RFRklORVMpICQoREVGSU5FUykKQEAgLTgzLDQ0ICs4Nyw0NSBAQAogCWdpdC1yZXBhY2suc2ggZ2l0LXJlcXVlc3QtcHVsbC5zaCBnaXQtcmVzZXQuc2ggXAogCWdpdC1yZXNvbHZlLnNoIGdpdC1yZXZlcnQuc2ggZ2l0LXNoLXNldHVwLnNoIGdpdC1zdGF0dXMuc2ggXAogCWdpdC10YWcuc2ggZ2l0LXZlcmlmeS10YWcuc2ggZ2l0LXdoYXRjaGFuZ2VkLnNoIGdpdC5zaCBcCi0JZ2l0LWFwcGx5bWJveC5zaCBnaXQtYXBwbHlwYXRjaC5zaCBcCisJZ2l0LWFwcGx5bWJveC5zaCBnaXQtYXBwbHlwYXRjaC5zaCBnaXQtYW0uc2ggXAogCWdpdC1tZXJnZS5zaCBnaXQtbWVyZ2Utc3R1cGlkLnNoIGdpdC1tZXJnZS1vY3RvcHVzLnNoIFwKIAlnaXQtbWVyZ2UtcmVzb2x2ZS5zaCBnaXQtZ3JlcC5zaAogCiBTQ1JJUFRfUEVSTCA9IFwKIAlnaXQtYXJjaGltcG9ydC5wZXJsIGdpdC1jdnNpbXBvcnQucGVybCBnaXQtcmVsaW5rLnBlcmwgXAotCWdpdC1yZW5hbWUucGVybCBnaXQtc2hvcnRsb2cucGVybCBnaXQtZm10LW1lcmdlLW1zZy5wZXJsCisJZ2l0LXJlbmFtZS5wZXJsIGdpdC1zaG9ydGxvZy5wZXJsIGdpdC1mbXQtbWVyZ2UtbXNnLnBlcmwgXAorCWdpdC1maW5kdGFncy5wZXJsIGdpdC1zdm5pbXBvcnQucGVybCBnaXQtbXYucGVybAogCiBTQ1JJUFRfUFlUSE9OID0gXAogCWdpdC1tZXJnZS1yZWN1cnNpdmUucHkKIAogIyBUaGUgb25lcyB0aGF0IGRvIG5vdCBoYXZlIHRvIGxpbmsgd2l0aCBsY3J5cHRvIG5vciBsei4KIFNJTVBMRV9QUk9HUkFNUyA9IFwKLQlnaXQtZ2V0LXRhci1jb21taXQtaWQgZ2l0LW1haWxpbmZvIGdpdC1tYWlsc3BsaXQgZ2l0LXN0cmlwc3BhY2UgXAotCWdpdC1kYWVtb24gZ2l0LXZhcgorCWdpdC1nZXQtdGFyLWNvbW1pdC1pZCRYIGdpdC1tYWlsaW5mbyRYIGdpdC1tYWlsc3BsaXQkWCBcCisJZ2l0LXN0cmlwc3BhY2UkWCBnaXQtdmFyJFggZ2l0LWRhZW1vbiRYCiAKICMgLi4uIGFuZCBhbGwgdGhlIHJlc3QKIFBST0dSQU1TID0gXAotCWdpdC1hcHBseSBnaXQtY2F0LWZpbGUgXAotCWdpdC1jaGVja291dC1pbmRleCBnaXQtY2xvbmUtcGFjayBnaXQtY29tbWl0LXRyZWUgXAotCWdpdC1jb252ZXJ0LW9iamVjdHMgZ2l0LWRpZmYtZmlsZXMgXAotCWdpdC1kaWZmLWluZGV4IGdpdC1kaWZmLXN0YWdlcyBcCi0JZ2l0LWRpZmYtdHJlZSBnaXQtZmV0Y2gtcGFjayBnaXQtZnNjay1vYmplY3RzIFwKLQlnaXQtaGFzaC1vYmplY3QgZ2l0LWluaXQtZGIgXAotCWdpdC1sb2NhbC1mZXRjaCBnaXQtbHMtZmlsZXMgZ2l0LWxzLXRyZWUgZ2l0LW1lcmdlLWJhc2UgXAotCWdpdC1tZXJnZS1pbmRleCBnaXQtbWt0YWcgZ2l0LXBhY2stb2JqZWN0cyBnaXQtcGF0Y2gtaWQgXAotCWdpdC1wZWVrLXJlbW90ZSBnaXQtcHJ1bmUtcGFja2VkIGdpdC1yZWFkLXRyZWUgXAotCWdpdC1yZWNlaXZlLXBhY2sgZ2l0LXJldi1saXN0IGdpdC1yZXYtcGFyc2UgXAotCWdpdC1zZW5kLXBhY2sgZ2l0LXNob3ctYnJhbmNoIFwKLQlnaXQtc2hvdy1pbmRleCBnaXQtc3NoLWZldGNoIFwKLQlnaXQtc3NoLXVwbG9hZCBnaXQtdGFyLXRyZWUgZ2l0LXVucGFjay1maWxlIFwKLQlnaXQtdW5wYWNrLW9iamVjdHMgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIFwKLQlnaXQtdXBsb2FkLXBhY2sgZ2l0LXZlcmlmeS1wYWNrIGdpdC13cml0ZS10cmVlIFwKLQlnaXQtdXBkYXRlLXJlZiBnaXQtc3ltYm9saWMtcmVmIGdpdC1jaGVjay1yZWYtZm9ybWF0IFwKLQkkKFNJTVBMRV9QUk9HUkFNUykKKwlnaXQtYXBwbHkkWCBnaXQtY2F0LWZpbGUkWCBcCisJZ2l0LWNoZWNrb3V0LWluZGV4JFggZ2l0LWNsb25lLXBhY2skWCBnaXQtY29tbWl0LXRyZWUkWCBcCisJZ2l0LWNvbnZlcnQtb2JqZWN0cyRYIGdpdC1kaWZmLWZpbGVzJFggXAorCWdpdC1kaWZmLWluZGV4JFggZ2l0LWRpZmYtc3RhZ2VzJFggXAorCWdpdC1kaWZmLXRyZWUkWCBnaXQtZmV0Y2gtcGFjayRYIGdpdC1mc2NrLW9iamVjdHMkWCBcCisJZ2l0LWhhc2gtb2JqZWN0JFggZ2l0LWluZGV4LXBhY2skWCBnaXQtaW5pdC1kYiRYIFwKKwlnaXQtbG9jYWwtZmV0Y2gkWCBnaXQtbHMtZmlsZXMkWCBnaXQtbHMtdHJlZSRYIGdpdC1tZXJnZS1iYXNlJFggXAorCWdpdC1tZXJnZS1pbmRleCRYIGdpdC1ta3RhZyRYIGdpdC1wYWNrLW9iamVjdHMkWCBnaXQtcGF0Y2gtaWQkWCBcCisJZ2l0LXBlZWstcmVtb3RlJFggZ2l0LXBydW5lLXBhY2tlZCRYIGdpdC1yZWFkLXRyZWUkWCBcCisJZ2l0LXJlY2VpdmUtcGFjayRYIGdpdC1yZXYtbGlzdCRYIGdpdC1yZXYtcGFyc2UkWCBcCisJZ2l0LXNlbmQtcGFjayRYIGdpdC1zaG93LWJyYW5jaCRYIGdpdC1zaGVsbCRYIFwKKwlnaXQtc2hvdy1pbmRleCRYIGdpdC1zc2gtZmV0Y2gkWCBcCisJZ2l0LXNzaC11cGxvYWQkWCBnaXQtdGFyLXRyZWUkWCBnaXQtdW5wYWNrLWZpbGUkWCBcCisJZ2l0LXVucGFjay1vYmplY3RzJFggZ2l0LXVwZGF0ZS1pbmRleCRYIGdpdC11cGRhdGUtc2VydmVyLWluZm8kWCBcCisJZ2l0LXVwbG9hZC1wYWNrJFggZ2l0LXZlcmlmeS1wYWNrJFggZ2l0LXdyaXRlLXRyZWUkWCBcCisJZ2l0LXVwZGF0ZS1yZWYkWCBnaXQtc3ltYm9saWMtcmVmJFggZ2l0LWNoZWNrLXJlZi1mb3JtYXQkWCBcCisJZ2l0LW5hbWUtcmV2JFggJChTSU1QTEVfUFJPR1JBTVMpCiAKICMgQmFja3dhcmQgY29tcGF0aWJpbGl0eSAtLSB0byBiZSByZW1vdmVkIGFmdGVyIDEuMAotUFJPR1JBTVMgKz0gZ2l0LXNzaC1wdWxsIGdpdC1zc2gtcHVzaAorUFJPR1JBTVMgKz0gZ2l0LXNzaC1wdWxsJFggZ2l0LXNzaC1wdXNoJFgKIAogR0lUX0xJU1RfVFdFQUsgPQogCkBAIC0xNDYsNyArMTUxLDcgQEAKIAogRElGRl9PQkpTID0gXAogCWRpZmYubyBkaWZmY29yZS1icmVhay5vIGRpZmZjb3JlLW9yZGVyLm8gZGlmZmNvcmUtcGF0aHNwZWMubyBcCi0JZGlmZmNvcmUtcGlja2F4ZS5vIGRpZmZjb3JlLXJlbmFtZS5vCisJZGlmZmNvcmUtcGlja2F4ZS5vIGRpZmZjb3JlLXJlbmFtZS5vIHRyZWUtZGlmZi5vCiAKIExJQl9PQkpTID0gXAogCWJsb2IubyBjb21taXQubyBjb25uZWN0Lm8gY291bnQtZGVsdGEubyBjc3VtLWZpbGUubyBcCkBAIC0xNTQsMTkgKzE1OSwzNCBAQAogCW9iamVjdC5vIHBhY2stY2hlY2subyBwYXRjaC1kZWx0YS5vIHBhdGgubyBwa3QtbGluZS5vIFwKIAlxdW90ZS5vIHJlYWQtY2FjaGUubyByZWZzLm8gcnVuLWNvbW1hbmQubyBcCiAJc2VydmVyLWluZm8ubyBzZXR1cC5vIHNoYTFfZmlsZS5vIHNoYTFfbmFtZS5vIHN0cmJ1Zi5vIFwKLQl0YWcubyB0cmVlLm8gdXNhZ2UubyAkKERJRkZfT0JKUykKKwl0YWcubyB0cmVlLm8gdXNhZ2UubyBjb25maWcubyBlbnZpcm9ubWVudC5vIGN0eXBlLm8gY29weS5vIFwKKwkkKERJRkZfT0JKUykKIAogTElCUyA9ICQoTElCX0ZJTEUpCiBMSUJTICs9IC1segogCisjIFNoZWxsIHF1b3RlOworIyBSZXN1bHQgb2YgdGhpcyBuZWVkcyB0byBiZSBwbGFjZWQgaW5zaWRlICcnCitzaHEgPSAkKHN1YnN0ICcsJ1wnJywkKDEpKQorIyBUaGlzIGhhcyBzdXJyb3VuZGluZyAnJworc2hlbGxxdW90ZSA9ICckKGNhbGwgc2hxLCQoMSkpJworCiAjCiAjIFBsYXRmb3JtIHNwZWNpZmljIHR3ZWFrcwogIwotaWZlcSAoJChzaGVsbCB1bmFtZSAtcyksRGFyd2luKQorCisjIFdlIGNob29zZSB0byBhdm9pZCAiaWYgLi4gZWxzZSBpZiAuLiBlbHNlIC4uIGVuZGlmIGVuZGlmIgorIyBiZWNhdXNlIG1haW50YWluaW5nIHRoZSBuZXN0aW5nIHRvIG1hdGNoIGlzIGEgcGFpbi4gIElmCisjIHdlIGhhZCAiZWxpZiIgdGhpbmdzIHdvdWxkIGhhdmUgYmVlbiBtdWNoIG5pY2VyLi4uCit1bmFtZV9TIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1zIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX00gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW0gMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfTyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtbyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCisKK2lmZXEgKCQodW5hbWVfUyksRGFyd2luKQogCU5FRURTX1NTTF9XSVRIX0NSWVBUTyA9IFllc1BsZWFzZQogCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCiBlbmRpZgotaWZlcSAoJChzaGVsbCB1bmFtZSAtcyksU3VuT1MpCitpZmVxICgkKHVuYW1lX1MpLFN1bk9TKQogCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQogCU5FRURTX05TTCA9IFllc1BsZWFzZQogCVNIRUxMX1BBVEggPSAvYmluL2Jhc2gKQEAgLTE3NiwxNCArMTk2LDIzIEBACiAJVEFSID0gZ3RhcgogCVBMQVRGT1JNX0RFRklORVMgKz0gLURfX0VYVEVOU0lPTlNfXwogZW5kaWYKLWlmbmVxICgsJChmaW5kc3RyaW5nIGFybSwkKHNoZWxsIHVuYW1lIC1tKSkpCi0JQVJNX1NIQTEgPSBZZXNQbGVhc2UKK2lmZXEgKCQodW5hbWVfTyksQ3lnd2luKQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlYID0gLmV4ZQorCVBMQVRGT1JNX0RFRklORVMgKz0gLURVU0VfU1lNTElOS19IRUFEPTAKIGVuZGlmCi1pZmVxICgkKHNoZWxsIHVuYW1lIC1zKSxPcGVuQlNEKQoraWZlcSAoJCh1bmFtZV9TKSxPcGVuQlNEKQogCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKIAlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQogCVBMQVRGT1JNX0RFRklORVMgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYgogZW5kaWYKK2lmbmVxICgsJChmaW5kc3RyaW5nIGFybSwkKHVuYW1lX00pKSkKKwlBUk1fU0hBMSA9IFllc1BsZWFzZQorZW5kaWYKKworLWluY2x1ZGUgY29uZmlnLm1hawogCiBpZm5kZWYgTk9fQ1VSTAogCWlmZGVmIENVUkxESVIKQEAgLTE5Myw3ICsyMjIsNyBAQAogCWVsc2UKIAkJQ1VSTF9MSUJDVVJMID0gLWxjdXJsCiAJZW5kaWYKLQlQUk9HUkFNUyArPSBnaXQtaHR0cC1mZXRjaAorCVBST0dSQU1TICs9IGdpdC1odHRwLWZldGNoJFgKIGVuZGlmCiAKIGlmbmRlZiBTSEVMTF9QQVRICkBAIC0yMTcsNyArMjQ2LDcgQEAKIAkJT1BFTlNTTF9MSU5LID0KIAllbmRpZgogZWxzZQotCURFRklORVMgKz0gJy1ETk9fT1BFTlNTTCcKKwlERUZJTkVTICs9IC1ETk9fT1BFTlNTTAogCU1PWklMTEFfU0hBMSA9IDEKIAlPUEVOU1NMX0xJQlNTTCA9CiBlbmRpZgpAQCAtMjUwLDYgKzI3OSwxMyBAQAogCURFRklORVMgKz0gLURzdHJjYXNlc3RyPWdpdHN0cmNhc2VzdHIgLUROT19TVFJDQVNFU1RSPTEKIAlMSUJfT0JKUyArPSBjb21wYXQvc3RyY2FzZXN0ci5vCiBlbmRpZgoraWZkZWYgTk9fTU1BUAorCURFRklORVMgKz0gLURtbWFwPWdpdGZha2VtbWFwIC1EbXVubWFwPWdpdGZha2VtdW5tYXAgLUROT19NTUFQCisJTElCX09CSlMgKz0gY29tcGF0L21tYXAubworZW5kaWYKK2lmZGVmIE5PX0lQVjYKKwlERUZJTkVTICs9IC1ETk9fSVBWNiAtRHNvY2thZGRyX3N0b3JhZ2U9c29ja2FkZHJfaW4KK2VuZGlmCiAKIGlmZGVmIFBQQ19TSEExCiAJU0hBMV9IRUFERVIgPSAicHBjL3NoYTEuaCIKQEAgLTI2OSwxNCArMzA1LDE0IEBACiBlbmRpZgogZW5kaWYKIAotREVGSU5FUyArPSAnLURTSEExX0hFQURFUj0kKFNIQTFfSEVBREVSKScKK0RFRklORVMgKz0gLURTSEExX0hFQURFUj0kKGNhbGwgc2hlbGxxdW90ZSwkKFNIQTFfSEVBREVSKSkKIAogU0NSSVBUUyA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkgXAogCSAgJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSkgXAogCSAgJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSkgXAotCSAgZ2l0aworCSAgZ2l0ayBnaXQtY2hlcnJ5LXBpY2sKIAotZXhwb3J0IFRBUiBJTlNUQUxMIERFU1RESVIgU0hFTExfUEFUSAorZXhwb3J0IHByZWZpeCBUQVIgSU5TVEFMTCBERVNURElSIFNIRUxMX1BBVEggdGVtcGxhdGVfZGlyCiAjIyMgQnVpbGQgcnVsZXMKIAogYWxsOiAkKFBST0dSQU1TKSAkKFNDUklQVFMpCkBAIC0yODYsNTggKzMyMiw2NyBAQAogCiBnaXQ6IGdpdC5zaCBNYWtlZmlsZQogCXJtIC1mICRAKyAkQAotCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSCl8JyBcCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChjYWxsIHNocSwkKFNIRUxMX1BBVEgpKXwnIFwKIAkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgLWUgJ3MvQEBYQEAvJChYKS9nJyBcCiAJICAgICQoR0lUX0xJU1RfVFdFQUspIDwkQC5zaCA+JEArCiAJY2htb2QgK3ggJEArCiAJbXYgJEArICRACiAKICQoZmlsdGVyLW91dCBnaXQsJChwYXRzdWJzdCAlLnNoLCUsJChTQ1JJUFRfU0gpKSkgOiAlIDogJS5zaAogCXJtIC1mICRACi0Jc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIKXwnICRALnNoID4kQAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoY2FsbCBzaHEsJChTSEVMTF9QQVRIKSl8JyBcCisJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCisJICAgICRALnNoID4kQAogCWNobW9kICt4ICRACiAKICQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpIDogJSA6ICUucGVybAogCXJtIC1mICRACi0Jc2VkIC1lICcxc3wjIS4qcGVybHwjISQoUEVSTF9QQVRIKXwnICRALnBlcmwgPiRACisJc2VkIC1lICcxc3wjIS4qcGVybHwjISQoY2FsbCBzaHEsJChQRVJMX1BBVEgpKXwnIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgJEAucGVybCA+JEAKIAljaG1vZCAreCAkQAogCiAkKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKSA6ICUgOiAlLnB5CiAJcm0gLWYgJEAKLQlzZWQgLWUgJzFzfCMhLipweXRob258IyEkKFBZVEhPTl9QQVRIKXwnIFwKLQkgICAgLWUgJ3N8QEBHSVRfUFlUSE9OX1BBVEhAQHwkKEdJVF9QWVRIT05fRElSKXxnJyBcCi0JCSRALnB5ID4kQAorCXNlZCAtZSAnMXN8IyEuKnB5dGhvbnwjISQoY2FsbCBzaHEsJChQWVRIT05fUEFUSCkpfCcgXAorCSAgICAtZSAnc3xAQEdJVF9QWVRIT05fUEFUSEBAfCQoY2FsbCBzaHEsJChHSVRfUFlUSE9OX0RJUikpfGcnIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgJEAucHkgPiRACiAJY2htb2QgK3ggJEAKIAorZ2l0LWNoZXJyeS1waWNrOiBnaXQtcmV2ZXJ0CisJY3AgJDwgJEAKKwogJS5vOiAlLmMKIAkkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgJDwKICUubzogJS5TCiAJJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpICQ8CiAKLWdpdC0lOiAlLm8gJChMSUJfRklMRSkKK2dpdC0lJFg6ICUubyAkKExJQl9GSUxFKQogCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCiAKLWdpdC1tYWlsaW5mbyA6IFNJTVBMRV9MSUIgKz0gJChMSUJfNF9JQ09OVikKK2dpdC1tYWlsaW5mbyRYIDogU0lNUExFX0xJQiArPSAkKExJQl80X0lDT05WKQogJChTSU1QTEVfUFJPR1JBTVMpIDogJChMSUJfRklMRSkKLSQoU0lNUExFX1BST0dSQU1TKSA6IGdpdC0lIDogJS5vCiskKFNJTVBMRV9QUk9HUkFNUykgOiBnaXQtJSRYIDogJS5vCiAJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCX0ZJTEUpICQoU0lNUExFX0xJQikKIAotZ2l0LWh0dHAtZmV0Y2g6IGZldGNoLm8KLWdpdC1sb2NhbC1mZXRjaDogZmV0Y2gubwotZ2l0LXNzaC1mZXRjaDogcnNoLm8gZmV0Y2gubwotZ2l0LXNzaC11cGxvYWQ6IHJzaC5vCi1naXQtc3NoLXB1bGw6IHJzaC5vIGZldGNoLm8KLWdpdC1zc2gtcHVzaDogcnNoLm8KK2dpdC1odHRwLWZldGNoJFg6IGZldGNoLm8KK2dpdC1sb2NhbC1mZXRjaCRYOiBmZXRjaC5vCitnaXQtc3NoLWZldGNoJFg6IHJzaC5vIGZldGNoLm8KK2dpdC1zc2gtdXBsb2FkJFg6IHJzaC5vCitnaXQtc3NoLXB1bGwkWDogcnNoLm8gZmV0Y2gubworZ2l0LXNzaC1wdXNoJFg6IHJzaC5vCiAKLWdpdC1odHRwLWZldGNoOiBMSUJTICs9ICQoQ1VSTF9MSUJDVVJMKQotZ2l0LXJldi1saXN0OiBMSUJTICs9ICQoT1BFTlNTTF9MSUJTU0wpCitnaXQtaHR0cC1mZXRjaCRYOiBMSUJTICs9ICQoQ1VSTF9MSUJDVVJMKQorZ2l0LXJldi1saXN0JFg6IExJQlMgKz0gJChPUEVOU1NMX0xJQlNTTCkKIAogaW5pdC1kYi5vOiBpbml0LWRiLmMKIAkkKENDKSAtYyAkKEFMTF9DRkxBR1MpIFwKLQkJLURERUZBVUxUX0dJVF9URU1QTEFURV9ESVI9JyIkKHRlbXBsYXRlX2RpcikiJyAkKi5jCisJCS1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSQoY2FsbCBzaGVsbHF1b3RlLCIkKHRlbXBsYXRlX2RpcikiKSAkKi5jCiAKICQoTElCX09CSlMpOiAkKExJQl9IKQotJChwYXRzdWJzdCBnaXQtJSwlLm8sJChQUk9HUkFNUykpOiAkKExJQl9IKQorJChwYXRzdWJzdCBnaXQtJSRYLCUubywkKFBST0dSQU1TKSk6ICQoTElCX0gpCiAkKERJRkZfT0JKUyk6IGRpZmZjb3JlLmgKIAogJChMSUJfRklMRSk6ICQoTElCX09CSlMpCkBAIC0zNTIsMTAgKzM5NywxMCBAQAogdGVzdDogYWxsCiAJJChNQUtFKSAtQyB0LyBhbGwKIAotdGVzdC1kYXRlOiB0ZXN0LWRhdGUuYyBkYXRlLm8KK3Rlc3QtZGF0ZSRYOiB0ZXN0LWRhdGUuYyBkYXRlLm8KIAkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAIHRlc3QtZGF0ZS5jIGRhdGUubwogCi10ZXN0LWRlbHRhOiB0ZXN0LWRlbHRhLmMgZGlmZi1kZWx0YS5vIHBhdGNoLWRlbHRhLm8KK3Rlc3QtZGVsdGEkWDogdGVzdC1kZWx0YS5jIGRpZmYtZGVsdGEubyBwYXRjaC1kZWx0YS5vCiAJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkXgogCiBjaGVjazoKQEAgLTM2NiwxMyArNDExLDEyIEBACiAjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCiAKIGluc3RhbGw6ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKLQkkKElOU1RBTEwpIC1kIC1tNzU1ICQoREVTVERJUikkKGJpbmRpcikKLQkkKElOU1RBTEwpICQoUFJPR1JBTVMpICQoU0NSSVBUUykgJChERVNURElSKSQoYmluZGlyKQotCSQoSU5TVEFMTCkgZ2l0LXJldmVydCAkKERFU1RESVIpJChiaW5kaXIpL2dpdC1jaGVycnktcGljawotCXNoIC4vY21kLXJlbmFtZS5zaCAkKERFU1RESVIpJChiaW5kaXIpCisJJChJTlNUQUxMKSAtZCAtbTc1NSAkKGNhbGwgc2hlbGxxdW90ZSwkKERFU1RESVIpJChiaW5kaXIpKQorCSQoSU5TVEFMTCkgJChQUk9HUkFNUykgJChTQ1JJUFRTKSAkKGNhbGwgc2hlbGxxdW90ZSwkKERFU1RESVIpJChiaW5kaXIpKQorCXNoIC4vY21kLXJlbmFtZS5zaCAkKGNhbGwgc2hlbGxxdW90ZSwkKERFU1RESVIpJChiaW5kaXIpKQogCSQoTUFLRSkgLUMgdGVtcGxhdGVzIGluc3RhbGwKLQkkKElOU1RBTEwpIC1kIC1tNzU1ICQoREVTVERJUikkKEdJVF9QWVRIT05fRElSKQotCSQoSU5TVEFMTCkgJChQWU1PRFVMRVMpICQoREVTVERJUikkKEdJVF9QWVRIT05fRElSKQorCSQoSU5TVEFMTCkgLWQgLW03NTUgJChjYWxsIHNoZWxscXVvdGUsJChERVNURElSKSQoR0lUX1BZVEhPTl9ESVIpKQorCSQoSU5TVEFMTCkgJChQWU1PRFVMRVMpICQoY2FsbCBzaGVsbHF1b3RlLCQoREVTVERJUikkKEdJVF9QWVRIT05fRElSKSkKIAogaW5zdGFsbC1kb2M6CiAJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwKZGlmZiAtLWdpdCBhL2FwcGx5LmMgYi9hcHBseS5jCmluZGV4IGM1OGQ5YTIuLjNlNTNiMzQgMTAwNjQ0Ci0tLSBhL2FwcGx5LmMKKysrIGIvYXBwbHkuYwpAQCAtNSwzNiArNSwyOCBAQAogICoKICAqIFRoaXMgYXBwbGllcyBwYXRjaGVzIG9uIHRvcCBvZiBzb21lIChhcmJpdHJhcnkpIHZlcnNpb24gb2YgdGhlIFNDTS4KICAqCi0gKiBOT1RFISBJdCBkb2VzIGFsbCBpdHMgd29yayBpbiB0aGUgaW5kZXggZmlsZSwgYW5kIG9ubHkgY2FyZXMgYWJvdXQKLSAqIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgaWYgeW91IHRlbGwgaXQgdG8gIm1lcmdlIiB0aGUKLSAqIHBhdGNoIGFwcGx5LgotICoKLSAqIEV2ZW4gd2hlbiBtZXJnaW5nIGl0IGFsd2F5cyB0YWtlcyB0aGUgc291cmNlIGZyb20gdGhlIGluZGV4LCBhbmQKLSAqIHVzZXMgdGhlIHdvcmtpbmcgdHJlZSBhcyBhICJicmFuY2giIGZvciBhIDMtd2F5IG1lcmdlLgogICovCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxmbm1hdGNoLmg+CiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJxdW90ZS5oIgogCi0vLyBXZSBkZWZhdWx0IHRvIHRoZSBtZXJnZSBiZWhhdmlvdXIsIHNpbmNlIHRoYXQncyB3aGF0IG1vc3QgcGVvcGxlIHdvdWxkCi0vLyBleHBlY3QuCi0vLwogLy8gIC0tY2hlY2sgdHVybnMgb24gY2hlY2tpbmcgdGhhdCB0aGUgd29ya2luZyB0cmVlIG1hdGNoZXMgdGhlCiAvLyAgICBmaWxlcyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCwgYnV0IGRvZXNuJ3QgYXBwbHkgdGhlIHBhdGNoCiAvLyAgLS1zdGF0IGRvZXMganVzdCBhIGRpZmZzdGF0LCBhbmQgZG9lc24ndCBhY3R1YWxseSBhcHBseQotLy8gIC0tc2hvdy1maWxlcyBzaG93cyB0aGUgZGlyZWN0b3J5IGNoYW5nZXMKKy8vICAtLW51bXN0YXQgZG9lcyBudW1lcmljIGRpZmZzdGF0LCBhbmQgZG9lc24ndCBhY3R1YWxseSBhcHBseQorLy8gIC0taW5kZXgtaW5mbyBzaG93cyB0aGUgb2xkIGFuZCBuZXcgaW5kZXggaW5mbyBmb3IgcGF0aHMgaWYgYXZhaWxhYmxlLgogLy8KLXN0YXRpYyBpbnQgbWVyZ2VfcGF0Y2ggPSAxOwogc3RhdGljIGludCBjaGVja19pbmRleCA9IDA7CiBzdGF0aWMgaW50IHdyaXRlX2luZGV4ID0gMDsKIHN0YXRpYyBpbnQgZGlmZnN0YXQgPSAwOworc3RhdGljIGludCBudW1zdGF0ID0gMDsKIHN0YXRpYyBpbnQgc3VtbWFyeSA9IDA7CiBzdGF0aWMgaW50IGNoZWNrID0gMDsKIHN0YXRpYyBpbnQgYXBwbHkgPSAxOwotc3RhdGljIGludCBzaG93X2ZpbGVzID0gMDsKK3N0YXRpYyBpbnQgc2hvd19pbmRleF9pbmZvID0gMDsKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CiBzdGF0aWMgY29uc3QgY2hhciBhcHBseV91c2FnZVtdID0KLSJnaXQtYXBwbHkgWy0tbm8tbWVyZ2VdIFstLXN0YXRdIFstLXN1bW1hcnldIFstLWNoZWNrXSBbLS1pbmRleF0gWy0tYXBwbHldIFstLXNob3ctZmlsZXNdIDxwYXRjaD4uLi4iOworImdpdC1hcHBseSBbLS1zdGF0XSBbLS1udW1zdGF0XSBbLS1zdW1tYXJ5XSBbLS1jaGVja10gWy0taW5kZXhdIFstLWFwcGx5XSBbLS1pbmRleC1pbmZvXSBbLXpdIDxwYXRjaD4uLi4iOwogCiAvKgogICogRm9yICJkaWZmLXN0YXQiIGxpa2UgYmVoYXZpb3VyLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBiaWdnZXN0IGNoYW5nZQpAQCAtNjcsNiArNTksOCBAQAogCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnRzOwogCWNoYXIgKnJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdHNpemU7CisJY2hhciBvbGRfc2hhMV9wcmVmaXhbNDFdOworCWNoYXIgbmV3X3NoYTFfcHJlZml4WzQxXTsKIAlzdHJ1Y3QgcGF0Y2ggKm5leHQ7CiB9OwogCkBAIC0zNjYsNiArMzYwLDM4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9pbmRleChjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qIGluZGV4IGxpbmUgaXMgTiBoZXhhZGVjaW1hbCwgIi4uIiwgTiBoZXhhZGVjaW1hbCwKKwkgKiBhbmQgb3B0aW9uYWwgc3BhY2Ugd2l0aCBvY3RhbCBtb2RlLgorCSAqLworCWNvbnN0IGNoYXIgKnB0ciwgKmVvbDsKKwlpbnQgbGVuOworCisJcHRyID0gc3RyY2hyKGxpbmUsICcuJyk7CisJaWYgKCFwdHIgfHwgcHRyWzFdICE9ICcuJyB8fCA0MCA8PSBwdHIgLSBsaW5lKQorCQlyZXR1cm4gMDsKKwlsZW4gPSBwdHIgLSBsaW5lOworCW1lbWNweShwYXRjaC0+b2xkX3NoYTFfcHJlZml4LCBsaW5lLCBsZW4pOworCXBhdGNoLT5vbGRfc2hhMV9wcmVmaXhbbGVuXSA9IDA7CisKKwlsaW5lID0gcHRyICsgMjsKKwlwdHIgPSBzdHJjaHIobGluZSwgJyAnKTsKKwllb2wgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisKKwlpZiAoIXB0ciB8fCBlb2wgPCBwdHIpCisJCXB0ciA9IGVvbDsKKwlsZW4gPSBwdHIgLSBsaW5lOworCisJaWYgKDQwIDw9IGxlbikKKwkJcmV0dXJuIDA7CisJbWVtY3B5KHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgsIGxpbmUsIGxlbik7CisJcGF0Y2gtPm5ld19zaGExX3ByZWZpeFtsZW5dID0gMDsKKwlpZiAoKnB0ciA9PSAnICcpCisJCXBhdGNoLT5uZXdfbW9kZSA9IHBhdGNoLT5vbGRfbW9kZSA9IHN0cnRvdWwocHRyKzEsIE5VTEwsIDgpOworCXJldHVybiAwOworfQorCiAvKgogICogVGhpcyBpcyBub3JtYWwgZm9yIGEgZGlmZiB0aGF0IGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nOiB3ZSdsbCBmYWxsIHRocm91Z2gKICAqIGludG8gdGhlIG5leHQgZGlmZi4gVGVsbCB0aGUgcGFyc2VyIHRvIGJyZWFrIG91dC4KQEAgLTU2NSw2ICs1OTEsNyBAQAogCQkJeyAicmVuYW1lIHRvICIsIGdpdGRpZmZfcmVuYW1lZHN0IH0sCiAJCQl7ICJzaW1pbGFyaXR5IGluZGV4ICIsIGdpdGRpZmZfc2ltaWxhcml0eSB9LAogCQkJeyAiZGlzc2ltaWxhcml0eSBpbmRleCAiLCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkgfSwKKwkJCXsgImluZGV4ICIsIGdpdGRpZmZfaW5kZXggfSwKIAkJCXsgIiIsIGdpdGRpZmZfdW5yZWNvZ25pemVkIH0sCiAJCX07CiAJCWludCBpOwpAQCAtNzkzLDcgKzgyMCwxMCBAQAogICAgICAgICAgICAgICAgIC8qIFdlIGFsbG93ICJcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiLiBEZXBlbmRpbmcKICAgICAgICAgICAgICAgICAgKiBvbiBsb2NhbGUgc2V0dGluZ3Mgd2hlbiB0aGUgcGF0Y2ggd2FzIHByb2R1Y2VkIHdlCiAgICAgICAgICAgICAgICAgICogZG9uJ3Qga25vdyB3aGF0IHRoaXMgbGluZSBsb29rcyBsaWtlLiBUaGUgb25seQotICAgICAgICAgICAgICAgICAqIHRoaW5nIHdlIGRvIGtub3cgaXMgdGhhdCBpdCBiZWdpbnMgd2l0aCAiXCAiLiAqLworICAgICAgICAgICAgICAgICAqIHRoaW5nIHdlIGRvIGtub3cgaXMgdGhhdCBpdCBiZWdpbnMgd2l0aCAiXCAiLgorCQkgKiBDaGVja2luZyBmb3IgMTIgaXMganVzdCBmb3Igc2FuaXR5IGNoZWNrIC0tIGFueQorCQkgKiBsMTBuIG9mICJcIE5vIG5ld2xpbmUuLi4iIGlzIGF0IGxlYXN0IHRoYXQgbG9uZy4KKwkJICovCiAJCWNhc2UgJ1xcJzoKIAkJCWlmIChsZW4gPCAxMiB8fCBtZW1jbXAobGluZSwgIlxcICIsIDIpKQogCQkJCXJldHVybiAtMTsKQEAgLTExNTYsMTcgKzExODYsMzkgQEAKIAogCWlmIChvbGRfbmFtZSkgewogCQlpbnQgY2hhbmdlZDsKKwkJaW50IHN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsICZzdCk7CiAKLQkJaWYgKGxzdGF0KG9sZF9uYW1lLCAmc3QpIDwgMCkKLQkJCXJldHVybiBlcnJvcigiJXM6ICVzIiwgb2xkX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAJCWlmIChjaGVja19pbmRleCkgewogCQkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG9sZF9uYW1lLCBzdHJsZW4ob2xkX25hbWUpKTsKIAkJCWlmIChwb3MgPCAwKQotCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4Iiwgb2xkX25hbWUpOworCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IiwKKwkJCQkJICAgICBvbGRfbmFtZSk7CisJCQlpZiAoc3RhdF9yZXQgPCAwKSB7CisJCQkJc3RydWN0IGNoZWNrb3V0IGNvc3RhdGU7CisJCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCQkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBvbGRfbmFtZSwKKwkJCQkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkvKiBjaGVja291dCAqLworCQkJCWNvc3RhdGUuYmFzZV9kaXIgPSAiIjsKKwkJCQljb3N0YXRlLmJhc2VfZGlyX2xlbiA9IDA7CisJCQkJY29zdGF0ZS5mb3JjZSA9IDA7CisJCQkJY29zdGF0ZS5xdWlldCA9IDA7CisJCQkJY29zdGF0ZS5ub3RfbmV3ID0gMDsKKwkJCQljb3N0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOworCQkJCWlmIChjaGVja291dF9lbnRyeShhY3RpdmVfY2FjaGVbcG9zXSwKKwkJCQkJCSAgICZjb3N0YXRlKSB8fAorCQkJCSAgICBsc3RhdChvbGRfbmFtZSwgJnN0KSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCiAJCQljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChhY3RpdmVfY2FjaGVbcG9zXSwgJnN0KTsKIAkJCWlmIChjaGFuZ2VkKQotCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4Iiwgb2xkX25hbWUpOworCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IiwKKwkJCQkJICAgICBvbGRfbmFtZSk7CiAJCX0KKwkJZWxzZSBpZiAoc3RhdF9yZXQgPCAwKQorCQkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBvbGRfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwogCQlpZiAocGF0Y2gtPmlzX25ldyA8IDApCiAJCQlwYXRjaC0+aXNfbmV3ID0gMDsKIAkJc3Quc3RfbW9kZSA9IG50b2hsKGNyZWF0ZV9jZV9tb2RlKHN0LnN0X21vZGUpKTsKQEAgLTEyMTgsMzIgKzEyNzAsMzggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfZmlsZShpbnQgYywgdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW5saW5lIGludCBpc19udWxsX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlwcmludGYoIiVjICVvICVzXG4iLCBjLCBtb2RlLCBuYW1lKTsKKwlyZXR1cm4gIW1lbWNtcChzaGExLCBudWxsX3NoYTEsIDIwKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19maWxlX2xpc3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhfbGlzdChzdHJ1Y3QgcGF0Y2ggKmxpc3QpCiB7Ci0JZm9yICg7cGF0Y2ggOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7Ci0JCWlmIChwYXRjaC0+aXNfcmVuYW1lKSB7Ci0JCQlzaG93X2ZpbGUoJy0nLCBwYXRjaC0+b2xkX21vZGUsIHBhdGNoLT5vbGRfbmFtZSk7Ci0JCQlzaG93X2ZpbGUoJysnLCBwYXRjaC0+bmV3X21vZGUsIHBhdGNoLT5uZXdfbmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocGF0Y2gtPmlzX2NvcHkgfHwgcGF0Y2gtPmlzX25ldykgewotCQkJc2hvd19maWxlKCcrJywgcGF0Y2gtPm5ld19tb2RlLCBwYXRjaC0+bmV3X25hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHBhdGNoLT5pc19kZWxldGUpIHsKLQkJCXNob3dfZmlsZSgnLScsIHBhdGNoLT5vbGRfbW9kZSwgcGF0Y2gtPm9sZF9uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChwYXRjaC0+b2xkX21vZGUgJiYgcGF0Y2gtPm5ld19tb2RlICYmIHBhdGNoLT5vbGRfbW9kZSAhPSBwYXRjaC0+bmV3X21vZGUpIHsKLQkJCXByaW50ZigiTSAlbzolbyAlc1xuIiwgcGF0Y2gtPm9sZF9tb2RlLCBwYXRjaC0+bmV3X21vZGUsIHBhdGNoLT5vbGRfbmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcmludGYoIk0gJW8gJXNcbiIsIHBhdGNoLT5vbGRfbW9kZSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwlzdHJ1Y3QgcGF0Y2ggKnBhdGNoOworCisJLyogT25jZSB3ZSBzdGFydCBzdXBwb3J0aW5nIHRoZSByZXZlcnNlIHBhdGNoLCBpdCBtYXkgYmUKKwkgKiB3b3J0aCBzaG93aW5nIHRoZSBuZXcgc2hhMSBwcmVmaXgsIGJ1dCB1bnRpbCB0aGVuLi4uCisJICovCisJZm9yIChwYXRjaCA9IGxpc3Q7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfcHRyOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpuYW1lOworCisJCW5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CisJCWlmIChwYXRjaC0+aXNfbmV3KQorCQkJc2hhMV9wdHIgPSBudWxsX3NoYTE7CisJCWVsc2UgaWYgKGdldF9zaGExKHBhdGNoLT5vbGRfc2hhMV9wcmVmaXgsIHNoYTEpKQorCQkJZGllKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIsCisJCQkgICAgbmFtZSk7CisJCWVsc2UKKwkJCXNoYTFfcHRyID0gc2hhMTsKKworCQlwcmludGYoIiUwNm8gJXMJIixwYXRjaC0+b2xkX21vZGUsIHNoYTFfdG9faGV4KHNoYTFfcHRyKSk7CisJCWlmIChsaW5lX3Rlcm1pbmF0aW9uICYmIHF1b3RlX2Nfc3R5bGUobmFtZSwgTlVMTCwgTlVMTCwgMCkpCisJCQlxdW90ZV9jX3N0eWxlKG5hbWUsIE5VTEwsIHN0ZG91dCwgMCk7CisJCWVsc2UKKwkJCWZwdXRzKG5hbWUsIHN0ZG91dCk7CisJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CiAJfQogfQogCkBAIC0xMjYxLDYgKzEzMTksMjAgQEAKIAlwcmludGYoIiAlZCBmaWxlcyBjaGFuZ2VkLCAlZCBpbnNlcnRpb25zKCspLCAlZCBkZWxldGlvbnMoLSlcbiIsIGZpbGVzLCBhZGRzLCBkZWxzKTsKIH0KIAorc3RhdGljIHZvaWQgbnVtc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJZm9yICggOyBwYXRjaDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQljb25zdCBjaGFyICpuYW1lOworCQluYW1lID0gcGF0Y2gtPm9sZF9uYW1lID8gcGF0Y2gtPm9sZF9uYW1lIDogcGF0Y2gtPm5ld19uYW1lOworCQlwcmludGYoIiVkXHQlZFx0IiwgcGF0Y2gtPmxpbmVzX2FkZGVkLCBwYXRjaC0+bGluZXNfZGVsZXRlZCk7CisJCWlmIChsaW5lX3Rlcm1pbmF0aW9uICYmIHF1b3RlX2Nfc3R5bGUobmFtZSwgTlVMTCwgTlVMTCwgMCkpCisJCQlxdW90ZV9jX3N0eWxlKG5hbWUsIE5VTEwsIHN0ZG91dCwgMCk7CisJCWVsc2UKKwkJCWZwdXRzKG5hbWUsIHN0ZG91dCk7CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBzaG93X2ZpbGVfbW9kZV9uYW1lKGNvbnN0IGNoYXIgKm5ld2RlbGV0ZSwgdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaWYgKG1vZGUpCkBAIC0xNTg4LDEyICsxNjYwLDE1IEBACiAJCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgY2FjaGVmaWxlIik7CiAJfQogCi0JaWYgKHNob3dfZmlsZXMpCi0JCXNob3dfZmlsZV9saXN0KGxpc3QpOworCWlmIChzaG93X2luZGV4X2luZm8pCisJCXNob3dfaW5kZXhfbGlzdChsaXN0KTsKIAogCWlmIChkaWZmc3RhdCkKIAkJc3RhdF9wYXRjaF9saXN0KGxpc3QpOwogCisJaWYgKG51bXN0YXQpCisJCW51bXN0YXRfcGF0Y2hfbGlzdChsaXN0KTsKKwogCWlmIChzdW1tYXJ5KQogCQlzdW1tYXJ5X3BhdGNoX2xpc3QobGlzdCk7CiAKQEAgLTE2MjIsMTYgKzE2OTcsMTYgQEAKIAkJCWV4Y2x1ZGVzID0geDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIE5FRURTV09SSzogdGhpcyBkb2VzIG5vdCBkbyBhbnl0aGluZyBhdCB0aGlzIG1vbWVudC4gKi8KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1tZXJnZSIpKSB7Ci0JCQltZXJnZV9wYXRjaCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItLXN0YXQiKSkgewogCQkJYXBwbHkgPSAwOwogCQkJZGlmZnN0YXQgPSAxOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1udW1zdGF0IikpIHsKKwkJCWFwcGx5ID0gMDsKKwkJCW51bXN0YXQgPSAxOworCQkJY29udGludWU7CisJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdW1tYXJ5IikpIHsKIAkJCWFwcGx5ID0gMDsKIAkJCXN1bW1hcnkgPSAxOwpAQCAtMTY1MCw4ICsxNzI1LDEzIEBACiAJCQlhcHBseSA9IDE7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3ctZmlsZXMiKSkgewotCQkJc2hvd19maWxlcyA9IDE7CisJCWlmICghc3RyY21wKGFyZywgIi0taW5kZXgtaW5mbyIpKSB7CisJCQlhcHBseSA9IDA7CisJCQlzaG93X2luZGV4X2luZm8gPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkgeworCQkJbGluZV90ZXJtaW5hdGlvbiA9IDA7CiAJCQljb250aW51ZTsKIAkJfQogCQlmZCA9IG9wZW4oYXJnLCBPX1JET05MWSk7CmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaAppbmRleCAyMDFjZTk5Li42NzdjNmFjIDEwMDY0NAotLS0gYS9jYWNoZS5oCisrKyBiL2NhY2hlLmgKQEAgLTExLDcgKzExLDkgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmbmRlZiBOT19NTUFQCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTE2NSw2ICsxNjcsNyBAQAogZXh0ZXJuIGludCBjZV9tb2RpZmllZChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpOwogZXh0ZXJuIGludCBjZV9wYXRoX21hdGNoKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CiBleHRlcm4gaW50IGluZGV4X2ZkKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgd3JpdGVfb2JqZWN0LCBjb25zdCBjaGFyICp0eXBlKTsKK2V4dGVybiBpbnQgaW5kZXhfcGF0aCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCB3cml0ZV9vYmplY3QpOwogZXh0ZXJuIHZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KTsKIAogc3RydWN0IGNhY2hlX2ZpbGUgewpAQCAtMTc1LDYgKzE3OCw4IEBACiBleHRlcm4gaW50IGNvbW1pdF9pbmRleF9maWxlKHN0cnVjdCBjYWNoZV9maWxlICopOwogZXh0ZXJuIHZvaWQgcm9sbGJhY2tfaW5kZXhfZmlsZShzdHJ1Y3QgY2FjaGVfZmlsZSAqKTsKIAorZXh0ZXJuIGludCB0cnVzdF9leGVjdXRhYmxlX2JpdDsKKwogI2RlZmluZSBNVElNRV9DSEFOR0VECTB4MDAwMQogI2RlZmluZSBDVElNRV9DSEFOR0VECTB4MDAwMgogI2RlZmluZSBPV05FUl9DSEFOR0VECTB4MDAwNApAQCAtMTg5LDYgKzE5NCw3IEBACiBleHRlcm4gY2hhciAqc2hhMV9maWxlX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gY2hhciAqc2hhMV9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gY2hhciAqc2hhMV9wYWNrX2luZGV4X25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gY29uc3QgY2hhciAqZmluZF91bmlxdWVfYWJicmV2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCk7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBudWxsX3NoYTFbMjBdOwogCiBpbnQgZ2l0X21rc3RlbXAoY2hhciAqcGF0aCwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlKTsKQEAgLTIxOCw2ICsyMjQsNyBAQAogZXh0ZXJuIGludCB3cml0ZV9zaGExX2Zyb21fZmQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBjaGFyICpidWZmZXIsCiAJCQkgICAgICBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpidWZwb3NuKTsKIGV4dGVybiBpbnQgd3JpdGVfc2hhMV90b19mZChpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBtb3ZlX3RlbXBfdG9fZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjaGFyICpmaWxlbmFtZSk7CiAKIGV4dGVybiBpbnQgaGFzX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgaGFzX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKQEAgLTMwNiw2ICszMTMsNyBAQAogCXZvaWQgKnBhY2tfYmFzZTsKIAl1bnNpZ25lZCBpbnQgcGFja19sYXN0X3VzZWQ7CiAJdW5zaWduZWQgaW50IHBhY2tfdXNlX2NudDsKKwlpbnQgcGFja19sb2NhbDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNoYXIgcGFja19uYW1lWzBdOyAvKiBzb21ldGhpbmcgbGlrZSAiLmdpdC9vYmplY3RzL3BhY2sveHh4eHgucGFjayIgKi8KIH0gKnBhY2tlZF9naXQ7CkBAIC0zMzIsNiArMzQwLDcgQEAKIAkJICAgICAgaW50IG5yX3JlZnNwZWMsIGNoYXIgKipyZWZzcGVjLCBpbnQgYWxsKTsKIGV4dGVybiBpbnQgZ2V0X2FjayhpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKTsKIGV4dGVybiBzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9oZWFkcyhpbnQgaW4sIHN0cnVjdCByZWYgKipsaXN0LCBpbnQgbnJfbWF0Y2gsIGNoYXIgKiptYXRjaCwgaW50IGlnbm9yZV9mdW5ueSk7CitleHRlcm4gaW50IHNlcnZlcl9zdXBwb3J0cyhjb25zdCBjaGFyICpmZWF0dXJlKTsKIAogZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4X2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKQEAgLTM0NSw3ICszNTQsNyBAQAogCiBleHRlcm4gaW50IHVzZV9wYWNrZWRfZ2l0KHN0cnVjdCBwYWNrZWRfZ2l0ICopOwogZXh0ZXJuIHZvaWQgdW51c2VfcGFja2VkX2dpdChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKLWV4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY2hhciAqLCBpbnQpOworZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICphZGRfcGFja2VkX2dpdChjaGFyICosIGludCwgaW50KTsKIGV4dGVybiBpbnQgbnVtX3BhY2tlZF9vYmplY3RzKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwKTsKIGV4dGVybiBpbnQgbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIqKTsKIGV4dGVybiBpbnQgZmluZF9wYWNrX2VudHJ5X29uZShjb25zdCB1bnNpZ25lZCBjaGFyICosIHN0cnVjdCBwYWNrX2VudHJ5ICosIHN0cnVjdCBwYWNrZWRfZ2l0ICopOwpAQCAtMzU1LDQgKzM2NCw1NSBAQAogLyogRHVtYiBzZXJ2ZXJzIHN1cHBvcnQgKi8KIGV4dGVybiBpbnQgdXBkYXRlX3NlcnZlcl9pbmZvKGludCk7CiAKKyNpZmRlZiBOT19NTUFQCisKKyNpZm5kZWYgUFJPVF9SRUFECisjZGVmaW5lIFBST1RfUkVBRCAxCisjZGVmaW5lIFBST1RfV1JJVEUgMgorI2RlZmluZSBNQVBfUFJJVkFURSAxCisjZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lkKiktMSkKKyNlbmRpZgorCitleHRlcm4gdm9pZCAqZ2l0ZmFrZW1tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90ICwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCk7CitleHRlcm4gaW50IGdpdGZha2VtdW5tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpOworCisjZW5kaWYKKwordHlwZWRlZiBpbnQgKCpjb25maWdfZm5fdCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnKGNvbmZpZ19mbl90IGZuKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisjZGVmaW5lIE1BWF9HSVROQU1FICgxMDAwKQorZXh0ZXJuIGNoYXIgZ2l0X2RlZmF1bHRfZW1haWxbTUFYX0dJVE5BTUVdOworZXh0ZXJuIGNoYXIgZ2l0X2RlZmF1bHRfbmFtZVtNQVhfR0lUTkFNRV07CisKKy8qIFNhbmUgY3R5cGUgLSBubyBsb2NhbGUsIGFuZCB3b3JrcyB3aXRoIHNpZ25lZCBjaGFycyAqLworI3VuZGVmIGlzc3BhY2UKKyN1bmRlZiBpc2RpZ2l0CisjdW5kZWYgaXNhbHBoYQorI3VuZGVmIGlzYWxudW0KKyN1bmRlZiB0b2xvd2VyCisjdW5kZWYgdG91cHBlcgorZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2FuZV9jdHlwZVsyNTZdOworI2RlZmluZSBHSVRfU1BBQ0UgMHgwMQorI2RlZmluZSBHSVRfRElHSVQgMHgwMgorI2RlZmluZSBHSVRfQUxQSEEgMHgwNAorI2RlZmluZSBzYW5lX2lzdGVzdCh4LG1hc2spICgoc2FuZV9jdHlwZVsodW5zaWduZWQgY2hhcikoeCldICYgKG1hc2spKSAhPSAwKQorI2RlZmluZSBpc3NwYWNlKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1NQQUNFKQorI2RlZmluZSBpc2RpZ2l0KHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0RJR0lUKQorI2RlZmluZSBpc2FscGhhKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBKQorI2RlZmluZSBpc2FsbnVtKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0FMUEhBIHwgR0lUX0RJR0lUKQorI2RlZmluZSB0b2xvd2VyKHgpIHNhbmVfY2FzZSgodW5zaWduZWQgY2hhcikoeCksIDB4MjApCisjZGVmaW5lIHRvdXBwZXIoeCkgc2FuZV9jYXNlKCh1bnNpZ25lZCBjaGFyKSh4KSwgMCkKKworc3RhdGljIGlubGluZSBpbnQgc2FuZV9jYXNlKGludCB4LCBpbnQgaGlnaCkKK3sKKwlpZiAoc2FuZV9pc3Rlc3QoeCwgR0lUX0FMUEhBKSkKKwkJeCA9ICh4ICYgfjB4MjApIHwgaGlnaDsKKwlyZXR1cm4geDsKK30KKworZXh0ZXJuIGludCBjb3B5X2ZkKGludCBpZmQsIGludCBvZmQpOwogI2VuZGlmIC8qIENBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2NoZWNrb3V0LWluZGV4LmMgYi9jaGVja291dC1pbmRleC5jCmluZGV4IDU5NmQzMjAuLmRhYjM3NzggMTAwNjQ0Ci0tLSBhL2NoZWNrb3V0LWluZGV4LmMKKysrIGIvY2hlY2tvdXQtaW5kZXguYwpAQCAtNjMsMTUgKzYzLDIwIEBACiAKIHN0YXRpYyBpbnQgY2hlY2tvdXRfYWxsKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGksIGVycnMgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9uciA7IGkrKykgewogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpZiAoY2Vfc3RhZ2UoY2UpKQogCQkJY29udGludWU7CiAJCWlmIChjaGVja291dF9lbnRyeShjZSwgJnN0YXRlKSA8IDApCi0JCQlyZXR1cm4gLTE7CisJCQllcnJzKys7CiAJfQorCWlmIChlcnJzKQorCQkvKiB3ZSBoYXZlIGFscmVhZHkgZG9uZSBvdXIgZXJyb3IgcmVwb3J0aW5nLgorCQkgKiBleGl0IHdpdGggdGhlIHNhbWUgY29kZSBhcyBkaWUoKS4KKwkJICovCisJCWV4aXQoMTI4KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvY2xvbmUtcGFjay5jIGIvY2xvbmUtcGFjay5jCmluZGV4IDJhYzM1ZjYuLjk2MDkyMTkgMTAwNjQ0Ci0tLSBhL2Nsb25lLXBhY2suYworKysgYi9jbG9uZS1wYWNrLmMKQEAgLTMsOCArMyw4IEBACiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCi1zdGF0aWMgaW50IHF1aWV0Owotc3RhdGljIGNvbnN0IGNoYXIgY2xvbmVfcGFja191c2FnZVtdID0gImdpdC1jbG9uZS1wYWNrIFstcV0gWy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxoZWFkcz5dKiI7CitzdGF0aWMgY29uc3QgY2hhciBjbG9uZV9wYWNrX3VzYWdlW10gPQorImdpdC1jbG9uZS1wYWNrIFstLWV4ZWM9PGdpdC11cGxvYWQtcGFjaz5dIFs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8aGVhZHM+XSoiOwogc3RhdGljIGNvbnN0IGNoYXIgKmV4ZWMgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKIAogc3RhdGljIHZvaWQgY2xvbmVfaGFuZHNoYWtlKGludCBmZFsyXSwgc3RydWN0IHJlZiAqcmVmKQpAQCAtMTEyLDExICsxMTIsMTQzIEBACiAJZnJlZShoZWFkX3BhdGgpOwogfQogCitzdGF0aWMgaW50IGZpbmlzaF9wYWNrKGNvbnN0IGNoYXIgKnBhY2tfdG1wX25hbWUpCit7CisJaW50IHBpcGVfZmRbMl07CisJcGlkX3QgcGlkOworCWNoYXIgaWR4W1BBVEhfTUFYXTsKKwljaGFyIGZpbmFsW1BBVEhfTUFYXTsKKwljaGFyIGhhc2hbNDFdOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciAqY3A7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGlwZShwaXBlX2ZkKSA8IDApCisJCWRpZSgiZ2l0LWNsb25lLXBhY2s6IHVuYWJsZSB0byBzZXQgdXAgcGlwZSIpOworCisJc3RyY3B5KGlkeCwgcGFja190bXBfbmFtZSk7IC8qICIuZ2l0L29iamVjdHMvcGFjay1YWFhYWFgiICovCisJY3AgPSBzdHJyY2hyKGlkeCwgJy8nKTsKKwltZW1jcHkoY3AsICIvcGlkeCIsIDUpOworCisJcGlkID0gZm9yaygpOworCWlmIChwaWQgPCAwKQorCQlkaWUoImdpdC1jbG9uZS1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgZ2l0LWluZGV4LXBhY2siKTsKKwlpZiAoIXBpZCkgeworCQljbG9zZSgwKTsKKwkJZHVwMihwaXBlX2ZkWzFdLCAxKTsKKwkJY2xvc2UocGlwZV9mZFswXSk7CisJCWNsb3NlKHBpcGVfZmRbMV0pOworCQlleGVjbHAoImdpdC1pbmRleC1wYWNrIiwiZ2l0LWluZGV4LXBhY2siLAorCQkgICAgICAgIi1vIiwgaWR4LCBwYWNrX3RtcF9uYW1lLCBOVUxMKTsKKwkJZXJyb3IoImNhbm5vdCBleGVjIGdpdC1pbmRleC1wYWNrIDwlcz4gPCVzPiIsCisJCSAgICAgIGlkeCwgcGFja190bXBfbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCWNsb3NlKHBpcGVfZmRbMV0pOworCWlmIChyZWFkKHBpcGVfZmRbMF0sIGhhc2gsIDQwKSAhPSA0MCkgeworCQllcnJvcigiZ2l0LWNsb25lLXBhY2s6IHVuYWJsZSB0byByZWFkIGZyb20gZ2l0LWluZGV4LXBhY2siKTsKKwkJZXJyID0gMTsKKwl9CisJY2xvc2UocGlwZV9mZFswXSk7CisKKwlmb3IgKDs7KSB7CisJCWludCBzdGF0dXMsIGNvZGU7CisJCWludCByZXR2YWwgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCk7CisKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCWVycm9yKCJ3YWl0cGlkIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IocmV0dmFsKSk7CisJCQlnb3RvIGVycm9yX2RpZTsKKwkJfQorCQlpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgeworCQkJaW50IHNpZyA9IFdURVJNU0lHKHN0YXR1cyk7CisJCQllcnJvcigiZ2l0LWluZGV4LXBhY2sgZGllZCBvZiBzaWduYWwgJWQiLCBzaWcpOworCQkJZ290byBlcnJvcl9kaWU7CisJCX0KKwkJaWYgKCFXSUZFWElURUQoc3RhdHVzKSkgeworCQkJZXJyb3IoImdpdC1pbmRleC1wYWNrIGRpZWQgb2YgdW5uYXR1cmFsIGNhdXNlcyAlZCIsCisJCQkgICAgICBzdGF0dXMpOworCQkJZ290byBlcnJvcl9kaWU7CisJCX0KKwkJY29kZSA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CisJCWlmIChjb2RlKSB7CisJCQllcnJvcigiZ2l0LWluZGV4LXBhY2sgZGllZCB3aXRoIGVycm9yIGNvZGUgJWQiLCBjb2RlKTsKKwkJCWdvdG8gZXJyb3JfZGllOworCQl9CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yX2RpZTsKKwkJYnJlYWs7CisJfQorCWhhc2hbNDBdID0gMDsKKwlpZiAoZ2V0X3NoYTFfaGV4KGhhc2gsIHNoYTEpKSB7CisJCWVycm9yKCJnaXQtaW5kZXgtcGFjayByZXBvcnRlZCBub25zZW5zZSAnJXMnIiwgaGFzaCk7CisJCWdvdG8gZXJyb3JfZGllOworCX0KKwkvKiBOb3cgd2UgaGF2ZSBwYWNrIGluIHBhY2tfdG1wX25hbWVbXSwgYW5kCisJICogaWR4IGluIGlkeFtdOyByZW5hbWUgdGhlbSB0byB0aGVpciBmaW5hbCBuYW1lcy4KKwkgKi8KKwlzbnByaW50ZihmaW5hbCwgc2l6ZW9mKGZpbmFsKSwKKwkJICIlcy9wYWNrL3BhY2stJXMucGFjayIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIGhhc2gpOworCW1vdmVfdGVtcF90b19maWxlKHBhY2tfdG1wX25hbWUsIGZpbmFsKTsKKwljaG1vZChmaW5hbCwgMDQ0NCk7CisJc25wcmludGYoZmluYWwsIHNpemVvZihmaW5hbCksCisJCSAiJXMvcGFjay9wYWNrLSVzLmlkeCIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIGhhc2gpOworCW1vdmVfdGVtcF90b19maWxlKGlkeCwgZmluYWwpOworCWNobW9kKGZpbmFsLCAwNDQ0KTsKKwlyZXR1cm4gMDsKKworIGVycm9yX2RpZToKKwl1bmxpbmsoaWR4KTsKKwl1bmxpbmsocGFja190bXBfbmFtZSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGludCBjbG9uZV93aXRob3V0X3VucGFjayhpbnQgZmRbMl0pCit7CisJY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKKwlpbnQgb2ZkLCBpZmQ7CisKKwlpZmQgPSBmZFswXTsKKwlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksCisJCSAiJXMvcGFjay90bXAtWFhYWFhYIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJb2ZkID0gbWtzdGVtcCh0bXBmaWxlKTsKKwlpZiAob2ZkIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlICVzIiwgdG1wZmlsZSk7CisKKwl3aGlsZSAoMSkgeworCQljaGFyIGJ1Zls4MTkyXTsKKwkJc3NpemVfdCBzeiwgd3N6LCBwb3M7CisJCXN6ID0gcmVhZChpZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAoc3ogPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoc3ogPCAwKSB7CisJCQllcnJvcigiZXJyb3IgcmVhZGluZyBwYWNrICglcykiLCBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2Uob2ZkKTsKKwkJCXVubGluayh0bXBmaWxlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwb3MgPSAwOworCQl3aGlsZSAocG9zIDwgc3opIHsKKwkJCXdzeiA9IHdyaXRlKG9mZCwgYnVmICsgcG9zLCBzeiAtIHBvcyk7CisJCQlpZiAod3N6IDwgMCkgeworCQkJCWVycm9yKCJlcnJvciB3cml0aW5nIHBhY2sgKCVzKSIsCisJCQkJICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQljbG9zZShvZmQpOworCQkJCXVubGluayh0bXBmaWxlKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlwb3MgKz0gd3N6OworCQl9CisJfQorCWNsb3NlKG9mZCk7CisJcmV0dXJuIGZpbmlzaF9wYWNrKHRtcGZpbGUpOworfQorCiBzdGF0aWMgaW50IGNsb25lX3BhY2soaW50IGZkWzJdLCBpbnQgbnJfbWF0Y2gsIGNoYXIgKiptYXRjaCkKIHsKIAlzdHJ1Y3QgcmVmICpyZWZzOwogCWludCBzdGF0dXM7Ci0JcGlkX3QgcGlkOwogCiAJZ2V0X3JlbW90ZV9oZWFkcyhmZFswXSwgJnJlZnMsIG5yX21hdGNoLCBtYXRjaCwgMSk7CiAJaWYgKCFyZWZzKSB7CkBAIC0xMjQsMzUgKzI1NiwxMiBAQAogCQlkaWUoIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIik7CiAJfQogCWNsb25lX2hhbmRzaGFrZShmZCwgcmVmcyk7Ci0JcGlkID0gZm9yaygpOwotCWlmIChwaWQgPCAwKQotCQlkaWUoImdpdC1jbG9uZS1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgZ2l0LXVucGFjay1vYmplY3RzIik7Ci0JaWYgKCFwaWQpIHsKLQkJZHVwMihmZFswXSwgMCk7Ci0JCWNsb3NlKGZkWzBdKTsKLQkJY2xvc2UoZmRbMV0pOwotCQlleGVjbHAoImdpdC11bnBhY2stb2JqZWN0cyIsICJnaXQtdW5wYWNrLW9iamVjdHMiLAotCQkJcXVpZXQgPyAiLXEiIDogTlVMTCwgTlVMTCk7Ci0JCWRpZSgiZ2l0LXVucGFjay1vYmplY3RzIGV4ZWMgZmFpbGVkIik7Ci0JfQotCWNsb3NlKGZkWzBdKTsKLQljbG9zZShmZFsxXSk7Ci0Jd2hpbGUgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA8IDApIHsKLQkJaWYgKGVycm5vICE9IEVJTlRSKQotCQkJZGllKCJ3YWl0aW5nIGZvciBnaXQtdW5wYWNrLW9iamVjdHM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7Ci0JCWludCBjb2RlID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKLQkJaWYgKGNvZGUpCi0JCQlkaWUoImdpdC11bnBhY2stb2JqZWN0cyBkaWVkIHdpdGggZXJyb3IgY29kZSAlZCIsIGNvZGUpOworCisJc3RhdHVzID0gY2xvbmVfd2l0aG91dF91bnBhY2soZmQpOworCisJaWYgKCFzdGF0dXMpCiAJCXdyaXRlX3JlZnMocmVmcyk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgewotCQlpbnQgc2lnID0gV1RFUk1TSUcoc3RhdHVzKTsKLQkJZGllKCJnaXQtdW5wYWNrLW9iamVjdHMgZGllZCBvZiBzaWduYWwgJWQiLCBzaWcpOwotCX0KLQlkaWUoIlNoZXJsb2NrIEhvbG1lcyEgZ2l0LXVucGFjay1vYmplY3RzIGRpZWQgb2YgdW5uYXR1cmFsIGNhdXNlcyAlZCEiLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTE2OCwxNCArMjc3LDE0IEBACiAJCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKIAkJaWYgKCphcmcgPT0gJy0nKSB7Ci0JCQlpZiAoIXN0cmNtcCgiLXEiLCBhcmcpKSB7Ci0JCQkJcXVpZXQgPSAxOworCQkJaWYgKCFzdHJjbXAoIi1xIiwgYXJnKSkKIAkJCQljb250aW51ZTsKLQkJCX0KIAkJCWlmICghc3RybmNtcCgiLS1leGVjPSIsIGFyZywgNykpIHsKIAkJCQlleGVjID0gYXJnICsgNzsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKCItLWtlZXAiLCBhcmcpKQorCQkJCWNvbnRpbnVlOwogCQkJdXNhZ2UoY2xvbmVfcGFja191c2FnZSk7CiAJCX0KIAkJZGVzdCA9IGFyZzsKZGlmZiAtLWdpdCBhL2NvbW1pdC10cmVlLmMgYi9jb21taXQtdHJlZS5jCmluZGV4IGIxZWYwYjUuLmI2MDI5OWYgMTAwNjQ0Ci0tLSBhL2NvbW1pdC10cmVlLmMKKysrIGIvY29tbWl0LXRyZWUuYwpAQCAtNSwxMCArNSw2IEBACiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgogCi0jaW5jbHVkZSA8cHdkLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KICNkZWZpbmUgQkxPQ0tJTkcgKDF1bCA8PCAxNCkKIAogLyoKQEAgLTg5LDYgKzg1LDkgQEAKIAljaGFyICpidWZmZXI7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKKwlzZXR1cF9pZGVudCgpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwogCWlmIChhcmdjIDwgMiB8fCBnZXRfc2hhMV9oZXgoYXJndlsxXSwgdHJlZV9zaGExKSA8IDApCiAJCXVzYWdlKGNvbW1pdF90cmVlX3VzYWdlKTsKIApAQCAtMTA0LDcgKzEwMyw2IEBACiAJfQogCWlmICghcGFyZW50cykKIAkJZnByaW50ZihzdGRlcnIsICJDb21taXR0aW5nIGluaXRpYWwgdHJlZSAlc1xuIiwgYXJndlsxXSk7Ci0Jc2V0dXBfaWRlbnQoKTsKIAogCWluaXRfYnVmZmVyKCZidWZmZXIsICZzaXplKTsKIAlhZGRfYnVmZmVyKCZidWZmZXIsICZzaXplLCAidHJlZSAlc1xuIiwgc2hhMV90b19oZXgodHJlZV9zaGExKSk7CmRpZmYgLS1naXQgYS9jb21taXQuYyBiL2NvbW1pdC5jCmluZGV4IGY3MzVmOTguLjhmNDAzMTggMTAwNjQ0Ci0tLSBhL2NvbW1pdC5jCisrKyBiL2NvbW1pdC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKZGlmZiAtLWdpdCBhL2NvbXBhdC9tbWFwLmMgYi9jb21wYXQvbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNTFjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbW1hcC5jCkBAIC0wLDAgKzEsNTAgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAiLi4vY2FjaGUuaCIKKwordm9pZCAqZ2l0ZmFrZW1tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90ICwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKK3sKKwlpbnQgbiA9IDA7CisKKwlpZiAoc3RhcnQgIT0gTlVMTCB8fCAhKGZsYWdzICYgTUFQX1BSSVZBVEUpKQorCQlkaWUoIkludmFsaWQgdXNhZ2Ugb2YgZ2l0ZmFrZW1tYXAuIik7CisKKwlpZiAobHNlZWsoZmQsIG9mZnNldCwgU0VFS19TRVQpIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIE1BUF9GQUlMRUQ7CisJfQorCisJc3RhcnQgPSB4bWFsbG9jKGxlbmd0aCk7CisJaWYgKHN0YXJ0ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiBNQVBfRkFJTEVEOworCX0KKworCXdoaWxlIChuIDwgbGVuZ3RoKSB7CisJCWludCBjb3VudCA9IHJlYWQoZmQsIHN0YXJ0K24sIGxlbmd0aC1uKTsKKworCQlpZiAoY291bnQgPT0gMCkgeworCQkJbWVtc2V0KHN0YXJ0K24sIDAsIGxlbmd0aC1uKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZnJlZShzdGFydCk7CisJCQllcnJubyA9IEVBQ0NFUzsKKwkJCXJldHVybiBNQVBfRkFJTEVEOworCQl9CisKKwkJbiArPSBjb3VudDsKKwl9CisKKwlyZXR1cm4gc3RhcnQ7Cit9CisKK2ludCBnaXRmYWtlbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCWZyZWUoc3RhcnQpOworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOWZlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcuYwpAQCAtMCwwICsxLDIzNiBAQAorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2RlZmluZSBNQVhOQU1FICgyNTYpCisKK3N0YXRpYyBGSUxFICpjb25maWdfZmlsZTsKK3N0YXRpYyBpbnQgY29uZmlnX2xpbmVucjsKK3N0YXRpYyBpbnQgZ2V0X25leHRfY2hhcih2b2lkKQoreworCWludCBjOworCUZJTEUgKmY7CisKKwljID0gJ1xuJzsKKwlpZiAoKGYgPSBjb25maWdfZmlsZSkgIT0gTlVMTCkgeworCQljID0gZmdldGMoZik7CisJCWlmIChjID09ICdcbicpCisJCQljb25maWdfbGluZW5yKys7CisJCWlmIChjID09IEVPRikgeworCQkJY29uZmlnX2ZpbGUgPSBOVUxMOworCQkJYyA9ICdcbic7CisJCX0KKwl9CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV92YWx1ZSh2b2lkKQoreworCXN0YXRpYyBjaGFyIHZhbHVlWzEwMjRdOworCWludCBxdW90ZSA9IDAsIGNvbW1lbnQgPSAwLCBsZW4gPSAwLCBzcGFjZSA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAobGVuID49IHNpemVvZih2YWx1ZSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJaWYgKHF1b3RlKQorCQkJCXJldHVybiBOVUxMOworCQkJdmFsdWVbbGVuXSA9IDA7CisJCQlyZXR1cm4gdmFsdWU7CisJCX0KKwkJaWYgKGNvbW1lbnQpCisJCQljb250aW51ZTsKKwkJaWYgKGlzc3BhY2UoYykgJiYgIXF1b3RlKSB7CisJCQlzcGFjZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3BhY2UpIHsKKwkJCWlmIChsZW4pCisJCQkJdmFsdWVbbGVuKytdID0gJyAnOworCQkJc3BhY2UgPSAwOworCQl9CisJCWlmIChjID09ICdcXCcpIHsKKwkJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xuJzoKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3QnOgorCQkJCWMgPSAnXHQnOworCQkJCWJyZWFrOworCQkJY2FzZSAnYic6CisJCQkJYyA9ICdcYic7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQljID0gJ1xuJzsKKwkJCQlicmVhazsKKwkJCS8qIFNvbWUgY2hhcmFjdGVycyBlc2NhcGUgYXMgdGhlbXNlbHZlcyAqLworCQkJY2FzZSAnXFwnOiBjYXNlICciJzoKKwkJCQlicmVhazsKKwkJCS8qIFJlamVjdCB1bmtub3duIGVzY2FwZSBzZXF1ZW5jZXMgKi8KKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQl2YWx1ZVtsZW4rK10gPSBjOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJyInKSB7CisJCQlxdW90ZSA9IDEtcXVvdGU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXF1b3RlKSB7CisJCQlpZiAoYyA9PSAnOycgfHwgYyA9PSAnIycpIHsKKwkJCQljb21tZW50ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQl2YWx1ZVtsZW4rK10gPSBjOworCX0KK30KKworc3RhdGljIGludCBnZXRfdmFsdWUoY29uZmlnX2ZuX3QgZm4sIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGM7CisJY2hhciAqdmFsdWU7CisKKwkvKiBHZXQgdGhlIGZ1bGwgbmFtZSAqLworCWZvciAoOzspIHsKKwkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGMgPT0gRU9GKQorCQkJYnJlYWs7CisJCWlmICghaXNhbG51bShjKSkKKwkJCWJyZWFrOworCQluYW1lW2xlbisrXSA9IHRvbG93ZXIoYyk7CisJCWlmIChsZW4gPj0gTUFYTkFNRSkKKwkJCXJldHVybiAtMTsKKwl9CisJbmFtZVtsZW5dID0gMDsKKwl3aGlsZSAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljID0gZ2V0X25leHRfY2hhcigpOworCisJdmFsdWUgPSBOVUxMOworCWlmIChjICE9ICdcbicpIHsKKwkJaWYgKGMgIT0gJz0nKQorCQkJcmV0dXJuIC0xOworCQl2YWx1ZSA9IHBhcnNlX3ZhbHVlKCk7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBmbihuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Jhc2VfdmFyKGNoYXIgKm5hbWUpCit7CisJaW50IGJhc2VsZW4gPSAwOworCisJZm9yICg7OykgeworCQlpbnQgYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGMgPT0gRU9GKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYyA9PSAnXScpCisJCQlyZXR1cm4gYmFzZWxlbjsKKwkJaWYgKCFpc2FsbnVtKGMpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYmFzZWxlbiA+IE1BWE5BTUUgLyAyKQorCQkJcmV0dXJuIC0xOworCQluYW1lW2Jhc2VsZW4rK10gPSB0b2xvd2VyKGMpOworCX0KK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfZmlsZShjb25maWdfZm5fdCBmbikKK3sKKwlpbnQgY29tbWVudCA9IDA7CisJaW50IGJhc2VsZW4gPSAwOworCXN0YXRpYyBjaGFyIHZhcltNQVhOQU1FXTsKKworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjID09ICdcbicpIHsKKwkJCS8qIEVPRj8gKi8KKwkJCWlmICghY29uZmlnX2ZpbGUpCisJCQkJcmV0dXJuIDA7CisJCQljb21tZW50ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjb21tZW50IHx8IGlzc3BhY2UoYykpCisJCQljb250aW51ZTsKKwkJaWYgKGMgPT0gJyMnIHx8IGMgPT0gJzsnKSB7CisJCQljb21tZW50ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICdbJykgeworCQkJYmFzZWxlbiA9IGdldF9iYXNlX3Zhcih2YXIpOworCQkJaWYgKGJhc2VsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCXZhcltiYXNlbGVuKytdID0gJy4nOworCQkJdmFyW2Jhc2VsZW5dID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghaXNhbHBoYShjKSkKKwkJCWJyZWFrOworCQl2YXJbYmFzZWxlbl0gPSB0b2xvd2VyKGMpOworCQlpZiAoZ2V0X3ZhbHVlKGZuLCB2YXIsIGJhc2VsZW4rMSkgPCAwKQorCQkJYnJlYWs7CisJfQorCWRpZSgiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQiLCBjb25maWdfbGluZW5yKTsKK30KKworaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKwkJY2hhciAqZW5kOworCQlpbnQgdmFsID0gc3RydG9sKHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKCEqZW5kKQorCQkJcmV0dXJuIHZhbDsKKwl9CisJZGllKCJiYWQgY29uZmlnIHZhbHVlIGZvciAnJXMnIiwgbmFtZSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIDE7CisJaWYgKCEqdmFsdWUpCisJCXJldHVybiAwOworCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInRydWUiKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGdpdF9jb25maWdfaW50KG5hbWUsIHZhbHVlKSAhPSAwOworfQorCitpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJLyogVGhpcyBuZWVkcyBhIGJldHRlciBuYW1lICovCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5maWxlbW9kZSIpKSB7CisJCXRydXN0X2V4ZWN1dGFibGVfYml0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLm5hbWUiKSkgeworCQlzdHJuY3B5KGdpdF9kZWZhdWx0X25hbWUsIHZhbHVlLCBzaXplb2YoZ2l0X2RlZmF1bHRfbmFtZSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLmVtYWlsIikpIHsKKwkJc3RybmNweShnaXRfZGVmYXVsdF9lbWFpbCwgdmFsdWUsIHNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlLi4gKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4pCit7CisJaW50IHJldDsKKwlGSUxFICpmID0gZm9wZW4oZ2l0X3BhdGgoImNvbmZpZyIpLCAiciIpOworCisJcmV0ID0gLTE7CisJaWYgKGYpIHsKKwkJY29uZmlnX2ZpbGUgPSBmOworCQljb25maWdfbGluZW5yID0gMTsKKwkJcmV0ID0gZ2l0X3BhcnNlX2ZpbGUoZm4pOworCQlmY2xvc2UoZik7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggZTIxZDM5YS4uYzJiYWRjNyAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogCitzdGF0aWMgY2hhciAqc2VydmVyX2NhcGFiaWxpdGllcyA9IE5VTEw7CisKIC8qCiAgKiBSZWFkIGFsbCB0aGUgcmVmcyBmcm9tIHRoZSBvdGhlciBlbmQKICAqLwpAQCAtMjAsNyArMjIsNyBAQAogCQl1bnNpZ25lZCBjaGFyIG9sZF9zaGExWzIwXTsKIAkJc3RhdGljIGNoYXIgYnVmZmVyWzEwMDBdOwogCQljaGFyICpuYW1lOwotCQlpbnQgbGVuOworCQlpbnQgbGVuLCBuYW1lX2xlbjsKIAogCQlsZW4gPSBwYWNrZXRfcmVhZF9saW5lKGluLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKIAkJaWYgKCFsZW4pCkBAIC0zNiw2ICszOCwxMyBAQAogCQkgICAgY2hlY2tfcmVmX2Zvcm1hdChuYW1lICsgNSkpCiAJCQljb250aW51ZTsKIAorCQluYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKGxlbiAhPSBuYW1lX2xlbiArIDQxKSB7CisJCQlpZiAoc2VydmVyX2NhcGFiaWxpdGllcykKKwkJCQlmcmVlKHNlcnZlcl9jYXBhYmlsaXRpZXMpOworCQkJc2VydmVyX2NhcGFiaWxpdGllcyA9IHN0cmR1cChuYW1lICsgbmFtZV9sZW4gKyAxKTsKKwkJfQorCiAJCWlmIChucl9tYXRjaCAmJiAhcGF0aF9tYXRjaChuYW1lLCBucl9tYXRjaCwgbWF0Y2gpKQogCQkJY29udGludWU7CiAJCXJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgbGVuIC0gNDApOwpAQCAtNDcsNiArNTYsMTIgQEAKIAlyZXR1cm4gbGlzdDsKIH0KIAoraW50IHNlcnZlcl9zdXBwb3J0cyhjb25zdCBjaGFyICpmZWF0dXJlKQoreworCXJldHVybiBzZXJ2ZXJfY2FwYWJpbGl0aWVzICYmCisJCXN0cnN0cihzZXJ2ZXJfY2FwYWJpbGl0aWVzLCBmZWF0dXJlKSAhPSBOVUxMOworfQorCiBpbnQgZ2V0X2FjayhpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKQogewogCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CkBAIC01OSw4ICs3NCwxMSBAQAogCWlmICghc3RyY21wKGxpbmUsICJOQUsiKSkKIAkJcmV0dXJuIDA7CiAJaWYgKCFzdHJuY21wKGxpbmUsICJBQ0sgIiwgMykpIHsKLQkJaWYgKCFnZXRfc2hhMV9oZXgobGluZSs0LCByZXN1bHRfc2hhMSkpCisJCWlmICghZ2V0X3NoYTFfaGV4KGxpbmUrNCwgcmVzdWx0X3NoYTEpKSB7CisJCQlpZiAoc3Ryc3RyKGxpbmUrNDUsICJjb250aW51ZSIpKQorCQkJCXJldHVybiAyOwogCQkJcmV0dXJuIDE7CisJCX0KIAl9CiAJZGllKCJnaXQtZmV0Y2hfcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290ICclcyciLCBsaW5lKTsKIH0KQEAgLTI5MSwxMiArMzA5LDE4IEBACiAJCXJldHVybiBQUk9UT19TU0g7CiAJaWYgKCFzdHJjbXAobmFtZSwgImdpdCIpKQogCQlyZXR1cm4gUFJPVE9fR0lUOworCWlmICghc3RyY21wKG5hbWUsICJnaXQrc3NoIikpCisJCXJldHVybiBQUk9UT19TU0g7CisJaWYgKCFzdHJjbXAobmFtZSwgInNzaCtnaXQiKSkKKwkJcmV0dXJuIFBST1RPX1NTSDsKIAlkaWUoIkkgZG9uJ3QgaGFuZGxlIHByb3RvY29sICclcyciLCBuYW1lKTsKIH0KIAogI2RlZmluZSBTVFJfKHMpCSMgcwogI2RlZmluZSBTVFIocykJU1RSXyhzKQogCisjaWZuZGVmIE5PX0lQVjYKKwogc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICpwcm9nLCBjaGFyICpob3N0LCBjaGFyICpwYXRoKQogewogCWludCBzb2NrZmQgPSAtMTsKQEAgLTM1Myw2ICszNzcsNzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2Vsc2UgLyogTk9fSVBWNiAqLworCitzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKmhvc3QsIGNoYXIgKnBhdGgpCit7CisJaW50IHNvY2tmZCA9IC0xOworCWNoYXIgKmNvbG9uLCAqZW5kOworCWNoYXIgKnBvcnQgPSBTVFIoREVGQVVMVF9HSVRfUE9SVCksICplcDsKKwlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJc3RydWN0IHNvY2thZGRyX2luIHNhOworCWNoYXIgKiphcDsKKwl1bnNpZ25lZCBpbnQgbnBvcnQ7CisKKwlpZiAoaG9zdFswXSA9PSAnWycpIHsKKwkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOworCQlpZiAoZW5kKSB7CisJCQkqZW5kID0gMDsKKwkJCWVuZCsrOworCQkJaG9zdCsrOworCQl9IGVsc2UKKwkJCWVuZCA9IGhvc3Q7CisJfSBlbHNlCisJCWVuZCA9IGhvc3Q7CisJY29sb24gPSBzdHJjaHIoZW5kLCAnOicpOworCisJaWYgKGNvbG9uKSB7CisJCSpjb2xvbiA9IDA7CisJCXBvcnQgPSBjb2xvbiArIDE7CisJfQorCisKKwloZSA9IGdldGhvc3RieW5hbWUoaG9zdCk7CisJaWYgKCFoZSkKKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgaHN0cmVycm9yKGhfZXJybm8pKTsKKwlucG9ydCA9IHN0cnRvdWwocG9ydCwgJmVwLCAxMCk7CisJaWYgKCBlcCA9PSBwb3J0IHx8ICplcCApIHsKKwkJLyogTm90IG51bWVyaWMgKi8KKwkJc3RydWN0IHNlcnZlbnQgKnNlID0gZ2V0c2VydmJ5bmFtZShwb3J0LCJ0Y3AiKTsKKwkJaWYgKCAhc2UgKQorCQkJZGllKCJVbmtub3duIHBvcnQgJXNcbiIsIHBvcnQpOworCQlucG9ydCA9IHNlLT5zX3BvcnQ7CisJfQorCisJZm9yIChhcCA9IGhlLT5oX2FkZHJfbGlzdDsgKmFwOyBhcCsrKSB7CisJCXNvY2tmZCA9IHNvY2tldChoZS0+aF9hZGRydHlwZSwgU09DS19TVFJFQU0sIDApOworCQlpZiAoc29ja2ZkIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCW1lbXNldCgmc2EsIDAsIHNpemVvZiBzYSk7CisJCXNhLnNpbl9mYW1pbHkgPSBoZS0+aF9hZGRydHlwZTsKKwkJc2Euc2luX3BvcnQgPSBodG9ucyhucG9ydCk7CisJCW1lbWNweSgmc2Euc2luX2FkZHIsIGFwLCBoZS0+aF9sZW5ndGgpOworCisJCWlmIChjb25uZWN0KHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mIHNhKSA8IDApIHsKKwkJCWNsb3NlKHNvY2tmZCk7CisJCQlzb2NrZmQgPSAtMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChzb2NrZmQgPCAwKQorCQlkaWUoInVuYWJsZSB0byBjb25uZWN0IGEgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworCisJZmRbMF0gPSBzb2NrZmQ7CisJZmRbMV0gPSBzb2NrZmQ7CisJcGFja2V0X3dyaXRlKHNvY2tmZCwgIiVzICVzXG4iLCBwcm9nLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIE5PX0lQVjYgKi8KKwogLyoKICAqIFllYWgsIHllYWgsIGZpeG1lLiBOZWVkIHRvIHBhc3MgaW4gdGhlIGhlYWRzIGV0Yy4KICAqLwpkaWZmIC0tZ2l0IGEvY29udmVydC1vYmplY3RzLmMgYi9jb252ZXJ0LW9iamVjdHMuYwppbmRleCA5YWQwYzc3Li5hODkyMDEzIDEwMDY0NAotLS0gYS9jb252ZXJ0LW9iamVjdHMuYworKysgYi9jb252ZXJ0LW9iamVjdHMuYwpAQCAtMSw2ICsxLDUgQEAKICNkZWZpbmUgX1hPUEVOX1NPVVJDRSAvKiBnbGliYzIgbmVlZHMgdGhpcyAqLwogI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgImNhY2hlLmgiCiAKIHN0cnVjdCBlbnRyeSB7CmRpZmYgLS1naXQgYS9jb3B5LmMgYi9jb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwOTI3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcHkuYwpAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGNvcHlfZmQoaW50IGlmZCwgaW50IG9mZCkKK3sKKwl3aGlsZSAoMSkgeworCQlpbnQgbGVuOworCQljaGFyIGJ1ZmZlcls4MTkyXTsKKwkJY2hhciAqYnVmID0gYnVmZmVyOworCQlsZW4gPSByZWFkKGlmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIGVycm9yKCJjb3B5LWZkOiByZWFkIHJldHVybmVkICVzIiwKKwkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCX0KKwkJd2hpbGUgKDEpIHsKKwkJCWludCB3cml0dGVuID0gd3JpdGUob2ZkLCBidWYsIGxlbik7CisJCQlpZiAod3JpdHRlbiA+IDApIHsKKwkJCQlidWYgKz0gd3JpdHRlbjsKKwkJCQlsZW4gLT0gd3JpdHRlbjsKKwkJCQlpZiAoIWxlbikKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXdyaXR0ZW4pCisJCQkJcmV0dXJuIGVycm9yKCJjb3B5LWZkOiB3cml0ZSByZXR1cm5lZCAwIik7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIGVycm9yKCJjb3B5LWZkOiB3cml0ZSByZXR1cm5lZCAlcyIsCisJCQkJICAgICBzdHJlcnJvcihlcnJubykpOworCQl9CisJfQorCWNsb3NlKGlmZCk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2N0eXBlLmMgYi9jdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YmRmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdHlwZS5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBTYW5lIGxvY2FsZS1pbmRlcGVuZGVudCwgQVNDSUkgY3R5cGUuCisgKgorICogTm8gc3VycHJpc2VzLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgYW5kIHVuc2lnbmVkIGNoYXJzLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2RlZmluZSBTUyBHSVRfU1BBQ0UKKyNkZWZpbmUgQUEgR0lUX0FMUEhBCisjZGVmaW5lIEREIEdJVF9ESUdJVAorCit1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XSA9IHsKKwkgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCBTUywgU1MsICAwLCAgMCwgU1MsICAwLCAgMCwJCS8qIDAtMTUgKi8KKwkgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwJCS8qIDE2LTE1ICovCisJU1MsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCQkvKiAzMi0xNSAqLworCURELCBERCwgREQsIERELCBERCwgREQsIERELCBERCwgREQsIERELCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAkJLyogNDgtMTUgKi8KKwkgMCwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwJCS8qIDY0LTE1ICovCisJQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCAgMCwgIDAsICAwLCAgMCwgIDAsCQkvKiA4MC0xNSAqLworCSAwLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLAkJLyogOTYtMTUgKi8KKwlBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsICAwLCAgMCwgIDAsICAwLCAgMCwJCS8qIDExMi0xNSAqLworCS8qIE5vdGhpbmcgaW4gdGhlIDEyOC4uIHJhbmdlICovCit9OworCmRpZmYgLS1naXQgYS9kYWVtb24uYyBiL2RhZW1vbi5jCmluZGV4IGJkMjc4YjAuLmMzZjg2NDEgMTAwNjQ0Ci0tLSBhL2RhZW1vbi5jCisrKyBiL2RhZW1vbi5jCkBAIC0xLDEzICsxLDE0IEBACi0jaW5jbHVkZSAiY2FjaGUuaCIKLSNpbmNsdWRlICJwa3QtbGluZS5oIgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImNhY2hlLmgiCiAKIHN0YXRpYyBpbnQgbG9nX3N5c2xvZzsKIHN0YXRpYyBpbnQgdmVyYm9zZTsKQEAgLTE0NCw3ICsxNDUsNyBAQAogCiAJaWYgKCBjaGRpcihkaXIpICkKIAkJcmV0dXJuIC0xOwotCQorCiAJLyoKIAkgKiBTZWN1cml0eSBvbiB0aGUgY2hlYXAuCiAJICoKQEAgLTM3NSw2ICszNzYsNyBAQAogCQlpbmV0X250b3AoQUZfSU5FVCwgJnNpbl9hZGRyLT5zaW5fYWRkciwgYWRkcmJ1Ziwgc2l6ZW9mKGFkZHJidWYpKTsKIAkJcG9ydCA9IHNpbl9hZGRyLT5zaW5fcG9ydDsKIAorI2lmbmRlZiBOT19JUFY2CiAJfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNl9hZGRyID0gKHZvaWQgKikgYWRkcjsKIApAQCAtMzg0LDYgKzM4Niw3IEBACiAJCXN0cmNhdChidWYsICJdIik7CiAKIAkJcG9ydCA9IHNpbjZfYWRkci0+c2luNl9wb3J0OworI2VuZGlmCiAJfQogCWxvZ2luZm8oIkNvbm5lY3Rpb24gZnJvbSAlczolZCIsIGFkZHJidWYsIHBvcnQpOwogCkBAIC00MTYsMTYgKzQxOSwxNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBzZXJ2ZShpbnQgcG9ydCkKKyNpZm5kZWYgTk9fSVBWNgorCitzdGF0aWMgaW50IHNvY2tzZXR1cChpbnQgcG9ydCwgaW50ICoqc29ja2xpc3RfcCkKIHsKLQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKLQlpbnQgZ2FpOwogCWludCBzb2NrbnVtID0gMCwgKnNvY2tsaXN0ID0gTlVMTDsKIAlpbnQgbWF4ZmQgPSAtMTsKLQlmZF9zZXQgZmRzX2luaXQsIGZkczsKIAljaGFyIHBidWZbTklfTUFYU0VSVl07CiAKLQlzaWduYWwoU0lHQ0hMRCwgY2hpbGRfaGFuZGxlcik7CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisJaW50IGdhaTsKIAogCXNwcmludGYocGJ1ZiwgIiVkIiwgcG9ydCk7CiAJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CkBAIC00MzgsOCArNDQxLDYgQEAKIAlpZiAoZ2FpKQogCQlkaWUoImdldGFkZHJpbmZvKCkgZmFpbGVkOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGdhaSkpOwogCi0JRkRfWkVSTygmZmRzX2luaXQpOwotCiAJZm9yIChhaSA9IGFpMDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKIAkJaW50IHNvY2tmZDsKIAkJaW50ICpuZXdsaXN0OwpAQCAtNDc4LDIzICs0NzksNjMgQEAKIAkJc29ja2xpc3QgPSBuZXdsaXN0OwogCQlzb2NrbGlzdFtzb2NrbnVtKytdID0gc29ja2ZkOwogCi0JCUZEX1NFVChzb2NrZmQsICZmZHNfaW5pdCk7CiAJCWlmIChtYXhmZCA8IHNvY2tmZCkKIAkJCW1heGZkID0gc29ja2ZkOwogCX0KIAogCWZyZWVhZGRyaW5mbyhhaTApOwogCi0JaWYgKHNvY2tudW0gPT0gMCkKLQkJZGllKCJ1bmFibGUgdG8gYWxsb2NhdGUgYW55IGxpc3RlbiBzb2NrZXRzIG9uIHBvcnQgJXUiLCBwb3J0KTsKKwkqc29ja2xpc3RfcCA9IHNvY2tsaXN0OworCXJldHVybiBzb2NrbnVtOworfQorCisjZWxzZSAvKiBOT19JUFY2ICovCisKK3N0YXRpYyBpbnQgc29ja3NldHVwKGludCBwb3J0LCBpbnQgKipzb2NrbGlzdF9wKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHNvY2tmZDsKKworCXNvY2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisJaWYgKHNvY2tmZCA8IDApCisJCXJldHVybiAwOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZiBzaW4pOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJc2luLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKwlpZiAoIGJpbmQoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mIHNpbikgPCAwICkgeworCQljbG9zZShzb2NrZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc29ja2xpc3RfcCA9IHhtYWxsb2Moc2l6ZW9mKGludCkpOworCSoqc29ja2xpc3RfcCA9IHNvY2tmZDsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgc2VydmljZV9sb29wKGludCBzb2NrbnVtLCBpbnQgKnNvY2tsaXN0KQoreworCXN0cnVjdCBwb2xsZmQgKnBmZDsKKwlpbnQgaTsKKworCXBmZCA9IHhjYWxsb2Moc29ja251bSwgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2NrbnVtOyBpKyspIHsKKwkJcGZkW2ldLmZkID0gc29ja2xpc3RbaV07CisJCXBmZFtpXS5ldmVudHMgPSBQT0xMSU47CisJfQorCisJc2lnbmFsKFNJR0NITEQsIGNoaWxkX2hhbmRsZXIpOwogCiAJZm9yICg7OykgewogCQlpbnQgaTsKLQkJZmRzID0gZmRzX2luaXQ7CiAKLQkJaWYgKHNlbGVjdChtYXhmZCArIDEsICZmZHMsIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkgeworCQlpZiAocG9sbChwZmQsIHNvY2tudW0sIC0xKSA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFSU5UUikgewotCQkJCWVycm9yKCJzZWxlY3QgZmFpbGVkLCByZXN1bWluZzogJXMiLAorCQkJCWVycm9yKCJwb2xsIGZhaWxlZCwgcmVzdW1pbmc6ICVzIiwKIAkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOwogCQkJCXNsZWVwKDEpOwogCQkJfQpAQCAtNTAyLDEyICs1NDMsMTAgQEAKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBzb2NrbnVtOyBpKyspIHsKLQkJCWludCBzb2NrZmQgPSBzb2NrbGlzdFtpXTsKLQotCQkJaWYgKEZEX0lTU0VUKHNvY2tmZCwgJmZkcykpIHsKKwkJCWlmIChwZmRbaV0ucmV2ZW50cyAmIFBPTExJTikgewogCQkJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwotCQkJCWludCBzc2xlbiA9IHNpemVvZihzcyk7Ci0JCQkJaW50IGluY29taW5nID0gYWNjZXB0KHNvY2tmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcywgJnNzbGVuKTsKKwkJCQl1bnNpZ25lZCBpbnQgc3NsZW4gPSBzaXplb2Yoc3MpOworCQkJCWludCBpbmNvbWluZyA9IGFjY2VwdChwZmRbaV0uZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3MsICZzc2xlbik7CiAJCQkJaWYgKGluY29taW5nIDwgMCkgewogCQkJCQlzd2l0Y2ggKGVycm5vKSB7CiAJCQkJCWNhc2UgRUFHQUlOOgpAQCAtNTI0LDYgKzU2MywxNyBAQAogCX0KIH0KIAorc3RhdGljIGludCBzZXJ2ZShpbnQgcG9ydCkKK3sKKwlpbnQgc29ja251bSwgKnNvY2tsaXN0OworCisJc29ja251bSA9IHNvY2tzZXR1cChwb3J0LCAmc29ja2xpc3QpOworCWlmIChzb2NrbnVtID09IDApCisJCWRpZSgidW5hYmxlIHRvIGFsbG9jYXRlIGFueSBsaXN0ZW4gc29ja2V0cyBvbiBwb3J0ICV1IiwgcG9ydCk7CisKKwlyZXR1cm4gc2VydmljZV9sb29wKHNvY2tudW0sIHNvY2tsaXN0KTsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWludCBwb3J0ID0gREVGQVVMVF9HSVRfUE9SVDsKQEAgLTU3OSw3ICs2MjksNyBAQAogCWlmIChpbmV0ZF9tb2RlKSB7CiAJCWZjbG9zZShzdGRlcnIpOyAvL0ZJWE1FOiB3b3JrYXJvdW5kCiAJCXJldHVybiBleGVjdXRlKCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHNlcnZlKHBvcnQpOwogCX0KLQotCXJldHVybiBzZXJ2ZShwb3J0KTsKIH0KZGlmZiAtLWdpdCBhL2RhdGUuYyBiL2RhdGUuYwppbmRleCBiMjFjYWRjLi42M2Y1YTA5IDEwMDY0NAotLS0gYS9kYXRlLmMKKysrIGIvZGF0ZS5jCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQogICovCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAogI2luY2x1ZGUgImNhY2hlLmgiCmRpZmYgLS1naXQgYS9kZWJpYW4vY2hhbmdlbG9nIGIvZGViaWFuL2NoYW5nZWxvZwppbmRleCAyZjhjMTMzLi43ZDE4NDgzIDEwMDY0NAotLS0gYS9kZWJpYW4vY2hhbmdlbG9nCisrKyBiL2RlYmlhbi9jaGFuZ2Vsb2cKQEAgLTEsNDQgKzEsMTQgQEAKLWdpdC1jb3JlICgwLjk5LjhnLTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworZ2l0LWNvcmUgKDAuOTkuOWEtMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CiAKLSAgKiBHSVQgMC45OS44ZworICAqIEdJVCAwLjk5LjlhCiAKLSAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBTdW4sIDIzIE9jdCAyMDA1IDAyOjAxOjQ0IC0wNzAwCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU3VuLCAzMCBPY3QgMjAwNSAxNTowMzozMiAtMDgwMAogCi1naXQtY29yZSAoMC45OS44Zi0wKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKK2dpdC1jb3JlICgwLjk5LjktMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CiAKLSAgKiBHSVQgMC45OS44ZgorICAqIEdJVCAwLjk5LjkKIAotIC0tIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gIFdlZCwgMTkgT2N0IDIwMDUgMDI6Mjk6MjQgLTA3MDAKLQotZ2l0LWNvcmUgKDAuOTkuOGUtMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93Ci0KLSAgKiBHSVQgMC45OS44ZQotCi0gLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgTW9uLCAxNyBPY3QgMjAwNSAxNzo0NTowOCAtMDcwMAotCi1naXQtY29yZSAoMC45OS44ZC0wKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKLQotICAqIEdJVCAwLjk5LjhkCi0KLSAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBTYXQsIDE1IE9jdCAyMDA1IDE3OjIyOjU4IC0wNzAwCi0KLWdpdC1jb3JlICgwLjk5LjhjLTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwotCi0gICogR0lUIDAuOTkuOGMKLQotIC0tIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gIFN1biwgIDkgT2N0IDIwMDUgMTk6MTk6MTYgLTA3MDAKLQotZ2l0LWNvcmUgKDAuOTkuOGItMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93Ci0KLSAgKiBHSVQgMC45OS44YgotCi0gLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgV2VkLCAgNSBPY3QgMjAwNSAxNTo0MToyNCAtMDcwMAotCi1naXQtY29yZSAoMC45OS44YS0wKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKLQotICAqIEdJVCAwLjk5LjhhCi0KLSAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBNb24sICAzIE9jdCAyMDA1IDE2OjI3OjMyIC0wNzAwCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU2F0LCAyOSBPY3QgMjAwNSAxNDozNDozMCAtMDcwMAogCiBnaXQtY29yZSAoMC45OS44LTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwogCmRpZmYgLS1naXQgYS9kZWJpYW4vY29udHJvbCBiL2RlYmlhbi9jb250cm9sCmluZGV4IDVkNzVjMzIuLjFmNDVmOTMgMTAwNjQ0Ci0tLSBhL2RlYmlhbi9jb250cm9sCisrKyBiL2RlYmlhbi9jb250cm9sCkBAIC0yLDE0ICsyLDE0IEBACiBTZWN0aW9uOiBkZXZlbAogUHJpb3JpdHk6IG9wdGlvbmFsCiBNYWludGFpbmVyOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+Ci1CdWlsZC1EZXBlbmRzLUluZGVwOiBsaWJ6LWRldiwgbGlic3NsLWRldiwgbGliY3VybDMtZGV2LCBhc2NpaWRvYyAoPj0gNi4wLjMpLCB4bWx0bywgZGViaGVscGVyICg+PSA0LjAuMCksIGJjCitCdWlsZC1EZXBlbmRzLUluZGVwOiBsaWJ6LWRldiwgbGlic3NsLWRldiwgbGliY3VybDMtZGV2fGxpYmN1cmwzLWdudXRscy1kZXZ8bGliY3VybDMtb3BlbnNzbC1kZXYsIGFzY2lpZG9jICg+PSA2LjAuMyksIHhtbHRvLCBkZWJoZWxwZXIgKD49IDQuMC4wKSwgYmMKIFN0YW5kYXJkcy1WZXJzaW9uOiAzLjYuMQogCiBQYWNrYWdlOiBnaXQtY29yZQogQXJjaGl0ZWN0dXJlOiBhbnkKLURlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke3Blcmw6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfSwgcGF0Y2gsIHJjcwotUmVjb21tZW5kczogcnN5bmMsIGN1cmwsIHNzaCwgbGlibWFpbC1zZW5kbWFpbC1wZXJsLCBsaWJlbWFpbC12YWxpZC1wZXJsLCBweXRob24gKD49IDIuNC4wKSwgbGVzcwotU3VnZ2VzdHM6IGNvZ2l0bworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7cGVybDpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9LCByY3MKK1JlY29tbWVuZHM6IHJzeW5jLCBjdXJsLCBzc2gsIGxpYm1haWwtc2VuZG1haWwtcGVybCwgbGliZW1haWwtdmFsaWQtcGVybCwgbGlic3ZuLWNvcmUtcGVybCAoPj0gMS4yLjEpLCBweXRob24gKD49IDIuNC4wKSwgbGVzcworU3VnZ2VzdHM6IGNvZ2l0bywgcGF0Y2gKIENvbmZsaWN0czogZ2l0LCBjb2dpdG8gKDw8IDAuMTMpCiBEZXNjcmlwdGlvbjogVGhlIGdpdCBjb250ZW50IGFkZHJlc3NhYmxlIGZpbGVzeXN0ZW0KICBHSVQgY29tZXMgaW4gdHdvIGxheWVycy4gVGhlIGJvdHRvbSBsYXllciBpcyBtZXJlbHkgYW4gZXh0cmVtZWx5IGZhc3QKZGlmZiAtLWdpdCBhL2RpZmYtZmlsZXMuYyBiL2RpZmYtZmlsZXMuYwppbmRleCA1ZTU5ODMyLi4xNzg5OTM5IDEwMDY0NAotLS0gYS9kaWZmLWZpbGVzLmMKKysrIGIvZGlmZi1maWxlcy5jCkBAIC0zOCw4ICszOCwxNCBAQAogCWNvbnN0IGNoYXIgKnByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlpbnQgZW50cmllcywgaTsKIAorCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKIAlkaWZmX3NldHVwKCZkaWZmX29wdGlvbnMpOwogCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS0iKSkgeworCQkJYXJndisrOworCQkJYXJnYy0tOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCiAJCQlzaWxlbnQgPSAxOwogCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItciIpKQpAQCAtODAsNyArODYsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewogCQlzdHJ1Y3Qgc3RhdCBzdDsKLQkJdW5zaWduZWQgaW50IG9sZG1vZGU7CisJCXVuc2lnbmVkIGludCBvbGRtb2RlLCBuZXdtb2RlOwogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpbnQgY2hhbmdlZDsKIApAQCAtMTEwLDcgKzExNiwxMyBAQAogCQlpZiAoIWNoYW5nZWQgJiYgIWRpZmZfb3B0aW9ucy5maW5kX2NvcGllc19oYXJkZXIpCiAJCQljb250aW51ZTsKIAkJb2xkbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKLQkJc2hvd19tb2RpZmllZChvbGRtb2RlLCBESUZGX0ZJTEVfQ0FOT05fTU9ERShzdC5zdF9tb2RlKSwKKworCQluZXdtb2RlID0gRElGRl9GSUxFX0NBTk9OX01PREUoc3Quc3RfbW9kZSk7CisJCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYKKwkJICAgIFNfSVNSRUcobmV3bW9kZSkgJiYgU19JU1JFRyhvbGRtb2RlKSAmJgorCQkgICAgKChuZXdtb2RlIF4gb2xkbW9kZSkgPT0gMDExMSkpCisJCQluZXdtb2RlID0gb2xkbW9kZTsKKwkJc2hvd19tb2RpZmllZChvbGRtb2RlLCBuZXdtb2RlLAogCQkJICAgICAgY2UtPnNoYTEsIChjaGFuZ2VkID8gbnVsbF9zaGExIDogY2UtPnNoYTEpLAogCQkJICAgICAgY2UtPm5hbWUpOwogCX0KZGlmZiAtLWdpdCBhL2RpZmYtaW5kZXguYyBiL2RpZmYtaW5kZXguYwppbmRleCA2MmIzNmNjLi5jOWE5ZjRjIDEwMDY0NAotLS0gYS9kaWZmLWluZGV4LmMKKysrIGIvZGlmZi1pbmRleC5jCkBAIC0xNSw3ICsxNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3N0YXRfZGF0YShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAotCQkJIHVuc2lnbmVkIGNoYXIgKipzaGExcCwgdW5zaWduZWQgaW50ICptb2RlcCkKKwkJCSB1bnNpZ25lZCBjaGFyICoqIHNoYTFwLCB1bnNpZ25lZCBpbnQgKm1vZGVwKQogewogCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSBjZS0+c2hhMTsKIAl1bnNpZ25lZCBpbnQgbW9kZSA9IGNlLT5jZV9tb2RlOwpAQCAtMzUsNiArMzUsMTAgQEAKIAkJY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsICZzdCk7CiAJCWlmIChjaGFuZ2VkKSB7CiAJCQltb2RlID0gY3JlYXRlX2NlX21vZGUoc3Quc3RfbW9kZSk7CisJCQlpZiAoIXRydXN0X2V4ZWN1dGFibGVfYml0ICYmCisJCQkgICAgU19JU1JFRyhtb2RlKSAmJiBTX0lTUkVHKGNlLT5jZV9tb2RlKSAmJgorCQkJICAgICgobW9kZSBeIGNlLT5jZV9tb2RlKSA9PSAwMTExKSkKKwkJCQltb2RlID0gY2UtPmNlX21vZGU7CiAJCQlzaGExID0gbm9fc2hhMTsKIAkJfQogCX0KQEAgLTQ5LDcgKzUzLDkgQEAKIAl1bnNpZ25lZCBjaGFyICpzaGExOwogCXVuc2lnbmVkIGludCBtb2RlOwogCi0JLyogTmV3IGZpbGUgaW4gdGhlIGluZGV4OiBpdCBtaWdodCBhY3R1YWxseSBiZSBkaWZmZXJlbnQgaW4gdGhlIHdvcmtpbmcgY29weSAqLworCS8qIE5ldyBmaWxlIGluIHRoZSBpbmRleDogaXQgbWlnaHQgYWN0dWFsbHkgYmUgZGlmZmVyZW50IGluCisJICogdGhlIHdvcmtpbmcgY29weS4KKwkgKi8KIAlpZiAoZ2V0X3N0YXRfZGF0YShuZXcsICZzaGExLCAmbW9kZSkgPCAwKQogCQlyZXR1cm47CiAKQEAgLTE3NCw2ICsxODAsNyBAQAogCWludCBhbGxvd19vcHRpb25zID0gMTsKIAlpbnQgaTsKIAorCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKIAlkaWZmX3NldHVwKCZkaWZmX29wdGlvbnMpOwogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKZGlmZiAtLWdpdCBhL2RpZmYtdHJlZS5jIGIvZGlmZi10cmVlLmMKaW5kZXggYjJkNzRlYi4uZWQzMjNkOCAxMDA2NDQKLS0tIGEvZGlmZi10cmVlLmMKKysrIGIvZGlmZi10cmVlLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJjb21taXQuaCIKQEAgLTYsMjU2ICs1LDEzIEBACiBzdGF0aWMgaW50IHNob3dfcm9vdF9kaWZmID0gMDsKIHN0YXRpYyBpbnQgdmVyYm9zZV9oZWFkZXIgPSAwOwogc3RhdGljIGludCBpZ25vcmVfbWVyZ2VzID0gMTsKLXN0YXRpYyBpbnQgcmVjdXJzaXZlID0gMDsKLXN0YXRpYyBpbnQgc2hvd190cmVlX2VudHJ5X2luX3JlY3Vyc2l2ZSA9IDA7CiBzdGF0aWMgaW50IHJlYWRfc3RkaW4gPSAwOwogCi1zdGF0aWMgc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmX29wdGlvbnM7Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpoZWFkZXIgPSBOVUxMOwogc3RhdGljIGNvbnN0IGNoYXIgKmhlYWRlcl9wcmVmaXggPSAiIjsKIHN0YXRpYyBlbnVtIGNtaXRfZm10IGNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9SQVc7CiAKLS8vIFdoYXQgcGF0aHMgYXJlIHdlIGludGVyZXN0ZWQgaW4/Ci1zdGF0aWMgaW50IG5yX3BhdGhzID0gMDsKLXN0YXRpYyBjb25zdCBjaGFyICoqcGF0aHMgPSBOVUxMOwotc3RhdGljIGludCAqcGF0aGxlbnMgPSBOVUxMOwotCi1zdGF0aWMgaW50IGRpZmZfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LCBjb25zdCBjaGFyICpiYXNlKTsKLQotc3RhdGljIHZvaWQgdXBkYXRlX3RyZWVfZW50cnkodm9pZCAqKmJ1ZnAsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQotewotCXZvaWQgKmJ1ZiA9ICpidWZwOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9ICpzaXplcDsKLQlpbnQgbGVuID0gc3RybGVuKGJ1ZikgKyAxICsgMjA7Ci0KLQlpZiAoc2l6ZSA8IGxlbikKLQkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOwotCSpidWZwID0gYnVmICsgbGVuOwotCSpzaXplcCA9IHNpemUgLSBsZW47Ci19Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYWN0KHZvaWQgKnRyZWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqKnBhdGhwLCB1bnNpZ25lZCBpbnQgKm1vZGVwKQotewotCWludCBsZW4gPSBzdHJsZW4odHJlZSkrMTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gdHJlZSArIGxlbjsKLQljb25zdCBjaGFyICpwYXRoID0gc3RyY2hyKHRyZWUsICcgJyk7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0KLQlpZiAoIXBhdGggfHwgc2l6ZSA8IGxlbiArIDIwIHx8IHNzY2FuZih0cmVlLCAiJW8iLCAmbW9kZSkgIT0gMSkKLQkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOwotCSpwYXRocCA9IHBhdGgrMTsKLQkqbW9kZXAgPSBESUZGX0ZJTEVfQ0FOT05fTU9ERShtb2RlKTsKLQlyZXR1cm4gc2hhMTsKLX0KLQotc3RhdGljIGNoYXIgKm1hbGxvY19iYXNlKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuKQotewotCWludCBiYXNlbGVuID0gc3RybGVuKGJhc2UpOwotCWNoYXIgKm5ld2Jhc2UgPSB4bWFsbG9jKGJhc2VsZW4gKyBwYXRobGVuICsgMik7Ci0JbWVtY3B5KG5ld2Jhc2UsIGJhc2UsIGJhc2VsZW4pOwotCW1lbWNweShuZXdiYXNlICsgYmFzZWxlbiwgcGF0aCwgcGF0aGxlbik7Ci0JbWVtY3B5KG5ld2Jhc2UgKyBiYXNlbGVuICsgcGF0aGxlbiwgIi8iLCAyKTsKLQlyZXR1cm4gbmV3YmFzZTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd19maWxlKGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqdHJlZSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpiYXNlKTsKLXN0YXRpYyB2b2lkIHNob3dfdHJlZShjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKnRyZWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqYmFzZSk7Ci0KLS8qIEEgZmlsZSBlbnRyeSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KLXN0YXRpYyB2b2lkIHNob3dfZmlsZShjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKnRyZWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqYmFzZSkKLXsKLQl1bnNpZ25lZCBtb2RlOwotCWNvbnN0IGNoYXIgKnBhdGg7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IGV4dHJhY3QodHJlZSwgc2l6ZSwgJnBhdGgsICZtb2RlKTsKLQotCWlmIChyZWN1cnNpdmUgJiYgU19JU0RJUihtb2RlKSkgewotCQljaGFyIHR5cGVbMjBdOwotCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JCWNoYXIgKm5ld2Jhc2UgPSBtYWxsb2NfYmFzZShiYXNlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOwotCQl2b2lkICp0cmVlOwotCi0JCXRyZWUgPSByZWFkX3NoYTFfZmlsZShzaGExLCB0eXBlLCAmc2l6ZSk7Ci0JCWlmICghdHJlZSB8fCBzdHJjbXAodHlwZSwgInRyZWUiKSkKLQkJCWRpZSgiY29ycnVwdCB0cmVlIHNoYSAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQotCQlzaG93X3RyZWUocHJlZml4LCB0cmVlLCBzaXplLCBuZXdiYXNlKTsKLQotCQlmcmVlKHRyZWUpOwotCQlmcmVlKG5ld2Jhc2UpOwotCQlyZXR1cm47Ci0JfQotCi0JZGlmZl9hZGRyZW1vdmUoJmRpZmZfb3B0aW9ucywgcHJlZml4WzBdLCBtb2RlLCBzaGExLCBiYXNlLCBwYXRoKTsKLX0KLQotc3RhdGljIGludCBjb21wYXJlX3RyZWVfZW50cnkodm9pZCAqdHJlZTEsIHVuc2lnbmVkIGxvbmcgc2l6ZTEsIHZvaWQgKnRyZWUyLCB1bnNpZ25lZCBsb25nIHNpemUyLCBjb25zdCBjaGFyICpiYXNlKQotewotCXVuc2lnbmVkIG1vZGUxLCBtb2RlMjsKLQljb25zdCBjaGFyICpwYXRoMSwgKnBhdGgyOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsICpzaGEyOwotCWludCBjbXAsIHBhdGhsZW4xLCBwYXRobGVuMjsKLQotCXNoYTEgPSBleHRyYWN0KHRyZWUxLCBzaXplMSwgJnBhdGgxLCAmbW9kZTEpOwotCXNoYTIgPSBleHRyYWN0KHRyZWUyLCBzaXplMiwgJnBhdGgyLCAmbW9kZTIpOwotCi0JcGF0aGxlbjEgPSBzdHJsZW4ocGF0aDEpOwotCXBhdGhsZW4yID0gc3RybGVuKHBhdGgyKTsKLQljbXAgPSBiYXNlX25hbWVfY29tcGFyZShwYXRoMSwgcGF0aGxlbjEsIG1vZGUxLCBwYXRoMiwgcGF0aGxlbjIsIG1vZGUyKTsKLQlpZiAoY21wIDwgMCkgewotCQlzaG93X2ZpbGUoIi0iLCB0cmVlMSwgc2l6ZTEsIGJhc2UpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChjbXAgPiAwKSB7Ci0JCXNob3dfZmlsZSgiKyIsIHRyZWUyLCBzaXplMiwgYmFzZSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoIWRpZmZfb3B0aW9ucy5maW5kX2NvcGllc19oYXJkZXIgJiYKLQkgICAgIW1lbWNtcChzaGExLCBzaGEyLCAyMCkgJiYgbW9kZTEgPT0gbW9kZTIpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBJZiB0aGUgZmlsZW1vZGUgaGFzIGNoYW5nZWQgdG8vZnJvbSBhIGRpcmVjdG9yeSBmcm9tL3RvIGEgcmVndWxhcgotCSAqIGZpbGUsIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQgYSByZW1vdmUgYW5kIGFuIGFkZC4KLQkgKi8KLQlpZiAoU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpIHsKLQkJc2hvd19maWxlKCItIiwgdHJlZTEsIHNpemUxLCBiYXNlKTsKLQkJc2hvd19maWxlKCIrIiwgdHJlZTIsIHNpemUyLCBiYXNlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHJlY3Vyc2l2ZSAmJiBTX0lTRElSKG1vZGUxKSkgewotCQlpbnQgcmV0dmFsOwotCQljaGFyICpuZXdiYXNlID0gbWFsbG9jX2Jhc2UoYmFzZSwgcGF0aDEsIHBhdGhsZW4xKTsKLQkJaWYgKHNob3dfdHJlZV9lbnRyeV9pbl9yZWN1cnNpdmUpCi0JCQlkaWZmX2NoYW5nZSgmZGlmZl9vcHRpb25zLCBtb2RlMSwgbW9kZTIsCi0JCQkJICAgIHNoYTEsIHNoYTIsIGJhc2UsIHBhdGgxKTsKLQkJcmV0dmFsID0gZGlmZl90cmVlX3NoYTEoc2hhMSwgc2hhMiwgbmV3YmFzZSk7Ci0JCWZyZWUobmV3YmFzZSk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JZGlmZl9jaGFuZ2UoJmRpZmZfb3B0aW9ucywgbW9kZTEsIG1vZGUyLCBzaGExLCBzaGEyLCBiYXNlLCBwYXRoMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZXJlc3Rpbmcodm9pZCAqdHJlZSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpiYXNlKQotewotCWNvbnN0IGNoYXIgKnBhdGg7Ci0JdW5zaWduZWQgbW9kZTsKLQlpbnQgaTsKLQlpbnQgYmFzZWxlbiwgcGF0aGxlbjsKLQotCWlmICghbnJfcGF0aHMpCi0JCXJldHVybiAxOwotCi0JKHZvaWQpZXh0cmFjdCh0cmVlLCBzaXplLCAmcGF0aCwgJm1vZGUpOwotCi0JcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKLQliYXNlbGVuID0gc3RybGVuKGJhc2UpOwotCi0JZm9yIChpPTA7IGkgPCBucl9wYXRoczsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKm1hdGNoID0gcGF0aHNbaV07Ci0JCWludCBtYXRjaGxlbiA9IHBhdGhsZW5zW2ldOwotCi0JCWlmIChiYXNlbGVuID49IG1hdGNobGVuKSB7Ci0JCQkvKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBtb3ZlIGFsb25nLi4uICovCi0JCQlpZiAoc3RybmNtcChiYXNlLCBtYXRjaCwgbWF0Y2hsZW4pKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBUaGUgYmFzZSBpcyBhIHN1YmRpcmVjdG9yeSBvZiBhIHBhdGggd2hpY2ggd2FzIHNwZWNpZmllZC4gKi8KLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJLyogRG9lcyB0aGUgYmFzZSBtYXRjaD8gKi8KLQkJaWYgKHN0cm5jbXAoYmFzZSwgbWF0Y2gsIGJhc2VsZW4pKQotCQkJY29udGludWU7Ci0KLQkJbWF0Y2ggKz0gYmFzZWxlbjsKLQkJbWF0Y2hsZW4gLT0gYmFzZWxlbjsKLQotCQlpZiAocGF0aGxlbiA+IG1hdGNobGVuKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG1hdGNobGVuID4gcGF0aGxlbikgewotCQkJaWYgKG1hdGNoW3BhdGhsZW5dICE9ICcvJykKLQkJCQljb250aW51ZTsKLQkJCWlmICghU19JU0RJUihtb2RlKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdHJuY21wKHBhdGgsIG1hdGNoLCBwYXRobGVuKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsgLyogTm8gbWF0Y2hlcyAqLwotfQotCi0vKiBBIHdob2xlIHN1Yi10cmVlIHdlbnQgYXdheSBvciBhcHBlYXJlZCAqLwotc3RhdGljIHZvaWQgc2hvd190cmVlKGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqdHJlZSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpiYXNlKQotewotCXdoaWxlIChzaXplKSB7Ci0JCWlmIChpbnRlcmVzdGluZyh0cmVlLCBzaXplLCBiYXNlKSkKLQkJCXNob3dfZmlsZShwcmVmaXgsIHRyZWUsIHNpemUsIGJhc2UpOwotCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHJlZSwgJnNpemUpOwotCX0KLX0KLQotc3RhdGljIGludCBkaWZmX3RyZWUodm9pZCAqdHJlZTEsIHVuc2lnbmVkIGxvbmcgc2l6ZTEsIHZvaWQgKnRyZWUyLCB1bnNpZ25lZCBsb25nIHNpemUyLCBjb25zdCBjaGFyICpiYXNlKQotewotCXdoaWxlIChzaXplMSB8IHNpemUyKSB7Ci0JCWlmIChucl9wYXRocyAmJiBzaXplMSAmJiAhaW50ZXJlc3RpbmcodHJlZTEsIHNpemUxLCBiYXNlKSkgewotCQkJdXBkYXRlX3RyZWVfZW50cnkoJnRyZWUxLCAmc2l6ZTEpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG5yX3BhdGhzICYmIHNpemUyICYmICFpbnRlcmVzdGluZyh0cmVlMiwgc2l6ZTIsIGJhc2UpKSB7Ci0JCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHJlZTIsICZzaXplMik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXNpemUxKSB7Ci0JCQlzaG93X2ZpbGUoIisiLCB0cmVlMiwgc2l6ZTIsIGJhc2UpOwotCQkJdXBkYXRlX3RyZWVfZW50cnkoJnRyZWUyLCAmc2l6ZTIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzaXplMikgewotCQkJc2hvd19maWxlKCItIiwgdHJlZTEsIHNpemUxLCBiYXNlKTsKLQkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0cmVlMSwgJnNpemUxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXN3aXRjaCAoY29tcGFyZV90cmVlX2VudHJ5KHRyZWUxLCBzaXplMSwgdHJlZTIsIHNpemUyLCBiYXNlKSkgewotCQljYXNlIC0xOgotCQkJdXBkYXRlX3RyZWVfZW50cnkoJnRyZWUxLCAmc2l6ZTEpOwotCQkJY29udGludWU7Ci0JCWNhc2UgMDoKLQkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0cmVlMSwgJnNpemUxKTsKLQkJCS8qIEZhbGx0aHJvdWdoICovCi0JCWNhc2UgMToKLQkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0cmVlMiwgJnNpemUyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWRpZSgiZ2l0LWRpZmYtdHJlZTogaW50ZXJuYWwgZXJyb3IiKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGlmZl90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqb2xkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXcsIGNvbnN0IGNoYXIgKmJhc2UpCi17Ci0Jdm9pZCAqdHJlZTEsICp0cmVlMjsKLQl1bnNpZ25lZCBsb25nIHNpemUxLCBzaXplMjsKLQlpbnQgcmV0dmFsOwotCi0JdHJlZTEgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShvbGQsICJ0cmVlIiwgJnNpemUxLCBOVUxMKTsKLQlpZiAoIXRyZWUxKQotCQlkaWUoInVuYWJsZSB0byByZWFkIHNvdXJjZSB0cmVlICglcykiLCBzaGExX3RvX2hleChvbGQpKTsKLQl0cmVlMiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKG5ldywgInRyZWUiLCAmc2l6ZTIsIE5VTEwpOwotCWlmICghdHJlZTIpCi0JCWRpZSgidW5hYmxlIHRvIHJlYWQgZGVzdGluYXRpb24gdHJlZSAoJXMpIiwgc2hhMV90b19oZXgobmV3KSk7Ci0JcmV0dmFsID0gZGlmZl90cmVlKHRyZWUxLCBzaXplMSwgdHJlZTIsIHNpemUyLCBiYXNlKTsKLQlmcmVlKHRyZWUxKTsKLQlmcmVlKHRyZWUyKTsKLQlyZXR1cm4gcmV0dmFsOwotfQorc3RhdGljIHN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRpb25zOwogCiBzdGF0aWMgdm9pZCBjYWxsX2RpZmZfc2V0dXBfZG9uZSh2b2lkKQogewpAQCAtMjg2LDcgKzQyLDcgQEAKIAlpbnQgcmV0OwogCiAJY2FsbF9kaWZmX3NldHVwX2RvbmUoKTsKLQlyZXQgPSBkaWZmX3RyZWVfc2hhMShvbGQsIG5ldywgYmFzZSk7CisJcmV0ID0gZGlmZl90cmVlX3NoYTEob2xkLCBuZXcsIGJhc2UsICZkaWZmX29wdGlvbnMpOwogCWNhbGxfZGlmZl9mbHVzaCgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUsMTMgKzUxLDE3IEBACiB7CiAJaW50IHJldHZhbDsKIAl2b2lkICp0cmVlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGVtcHR5LCByZWFsOwogCiAJY2FsbF9kaWZmX3NldHVwX2RvbmUoKTsKLQl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UobmV3LCAidHJlZSIsICZzaXplLCBOVUxMKTsKKwl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UobmV3LCAidHJlZSIsICZyZWFsLnNpemUsIE5VTEwpOwogCWlmICghdHJlZSkKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCByb290IHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG5ldykpOwotCXJldHZhbCA9IGRpZmZfdHJlZSgiIiwgMCwgdHJlZSwgc2l6ZSwgYmFzZSk7CisJcmVhbC5idWYgPSB0cmVlOworCisJZW1wdHkuYnVmID0gIiI7CisJZW1wdHkuc2l6ZSA9IDA7CisJcmV0dmFsID0gZGlmZl90cmVlKCZlbXB0eSwgJnJlYWwsIGJhc2UsICZkaWZmX29wdGlvbnMpOwogCWZyZWUodHJlZSk7CiAJY2FsbF9kaWZmX2ZsdXNoKCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTM4OCwxNyArMTQ4LDExIEBACiAJcmV0dXJuIGRpZmZfdHJlZV9jb21taXQoY29tbWl0LCBsaW5lKTsKIH0KIAotc3RhdGljIGludCBjb3VudF9wYXRocyhjb25zdCBjaGFyICoqcGF0aHMpCi17Ci0JaW50IGkgPSAwOwotCXdoaWxlICgqcGF0aHMrKykKLQkJaSsrOwotCXJldHVybiBpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciBkaWZmX3RyZWVfdXNhZ2VbXSA9Ci0iZ2l0LWRpZmYtdHJlZSBbLS1zdGRpbl0gWy1tXSBbLXNdIFstdl0gWy0tcHJldHR5XSBbLXRdICIKLSJbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IDx0cmVlLWlzaD4iCisiZ2l0LWRpZmYtdHJlZSBbLS1zdGRpbl0gWy1tXSBbLXNdIFstdl0gWy0tcHJldHR5XSBbLXRdIFstcl0gWy0tcm9vdF0gIgorIls8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzx0cmVlLWlzaD5dIFs8cGF0aD4uLi5dXG4iCisiICAtciAgICAgICAgICAgIGRpZmYgcmVjdXJzaXZlbHlcbiIKKyIgIC0tcm9vdCAgICAgICAgaW5jbHVkZSB0aGUgaW5pdGlhbCBjb21taXQgYXMgZGlmZiBhZ2FpbnN0IC9kZXYvbnVsbFxuIgogQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQOwogCiBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCkBAIC00MDgsNiArMTYyLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMl1bMjBdOwogCWNvbnN0IGNoYXIgKnByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAorCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKIAlucl9zaGExID0gMDsKIAlkaWZmX3NldHVwKCZkaWZmX29wdGlvbnMpOwogCkBAIC00NDUsMTEgKzIwMCwxMiBAQAogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLXIiKSkgewotCQkJcmVjdXJzaXZlID0gMTsKKwkJCWRpZmZfb3B0aW9ucy5yZWN1cnNpdmUgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLXQiKSkgewotCQkJcmVjdXJzaXZlID0gc2hvd190cmVlX2VudHJ5X2luX3JlY3Vyc2l2ZSA9IDE7CisJCQlkaWZmX29wdGlvbnMucmVjdXJzaXZlID0gMTsKKwkJCWRpZmZfb3B0aW9ucy50cmVlX2luX3JlY3Vyc2l2ZSA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItbSIpKSB7CkBAIC00NzgsMTcgKzIzNCw5IEBACiAJCXVzYWdlKGRpZmZfdHJlZV91c2FnZSk7CiAJfQogCWlmIChkaWZmX29wdGlvbnMub3V0cHV0X2Zvcm1hdCA9PSBESUZGX0ZPUk1BVF9QQVRDSCkKLQkJcmVjdXJzaXZlID0gMTsKKwkJZGlmZl9vcHRpb25zLnJlY3Vyc2l2ZSA9IDE7CiAKLQlwYXRocyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOwotCWlmIChwYXRocykgewotCQlpbnQgaTsKLQotCQlucl9wYXRocyA9IGNvdW50X3BhdGhzKHBhdGhzKTsKLQkJcGF0aGxlbnMgPSB4bWFsbG9jKG5yX3BhdGhzICogc2l6ZW9mKGludCkpOwotCQlmb3IgKGk9MDsgaTxucl9wYXRoczsgaSsrKQotCQkJcGF0aGxlbnNbaV0gPSBzdHJsZW4ocGF0aHNbaV0pOwotCX0KKwlkaWZmX3RyZWVfc2V0dXBfcGF0aHMoZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndikpOwogCiAJc3dpdGNoIChucl9zaGExKSB7CiAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvZGlmZi5jIGIvZGlmZi5jCmluZGV4IDdkMDZiMDMuLmVjOTRhOTYgMTAwNjQ0Ci0tLSBhL2RpZmYuYworKysgYi9kaWZmLmMKQEAgLTEzLDYgKzEzLDQ2IEBACiAKIHN0YXRpYyBpbnQgdXNlX3NpemVfY2FjaGU7CiAKK3N0YXRpYyBjaGFyICpxdW90ZV9vbmUoY29uc3QgY2hhciAqc3RyKQoreworCWludCBuZWVkbGVuOworCWNoYXIgKnhwOworCisJaWYgKCFzdHIpCisJCXJldHVybiBOVUxMOworCW5lZWRsZW4gPSBxdW90ZV9jX3N0eWxlKHN0ciwgTlVMTCwgTlVMTCwgMCk7CisJaWYgKCFuZWVkbGVuKQorCQlyZXR1cm4gc3RyZHVwKHN0cik7CisJeHAgPSB4bWFsbG9jKG5lZWRsZW4gKyAxKTsKKwlxdW90ZV9jX3N0eWxlKHN0ciwgeHAsIE5VTEwsIDApOworCXJldHVybiB4cDsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3R3byhjb25zdCBjaGFyICpvbmUsIGNvbnN0IGNoYXIgKnR3bykKK3sKKwlpbnQgbmVlZF9vbmUgPSBxdW90ZV9jX3N0eWxlKG9uZSwgTlVMTCwgTlVMTCwgMSk7CisJaW50IG5lZWRfdHdvID0gcXVvdGVfY19zdHlsZSh0d28sIE5VTEwsIE5VTEwsIDEpOworCWNoYXIgKnhwOworCisJaWYgKG5lZWRfb25lICsgbmVlZF90d28pIHsKKwkJaWYgKCFuZWVkX29uZSkgbmVlZF9vbmUgPSBzdHJsZW4ob25lKTsKKwkJaWYgKCFuZWVkX3R3bykgbmVlZF9vbmUgPSBzdHJsZW4odHdvKTsKKworCQl4cCA9IHhtYWxsb2MobmVlZF9vbmUgKyBuZWVkX3R3byArIDMpOworCQl4cFswXSA9ICciJzsKKwkJcXVvdGVfY19zdHlsZShvbmUsIHhwICsgMSwgTlVMTCwgMSk7CisJCXF1b3RlX2Nfc3R5bGUodHdvLCB4cCArIG5lZWRfb25lICsgMSwgTlVMTCwgMSk7CisJCXN0cmNweSh4cCArIG5lZWRfb25lICsgbmVlZF90d28gKyAxLCAiXCIiKTsKKwkJcmV0dXJuIHhwOworCX0KKwluZWVkX29uZSA9IHN0cmxlbihvbmUpOworCW5lZWRfdHdvID0gc3RybGVuKHR3byk7CisJeHAgPSB4bWFsbG9jKG5lZWRfb25lICsgbmVlZF90d28gKyAxKTsKKwlzdHJjcHkoeHAsIG9uZSk7CisJc3RyY3B5KHhwICsgbmVlZF9vbmUsIHR3byk7CisJcmV0dXJuIHhwOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZih2b2lkKQogewogCXN0YXRpYyBjb25zdCBjaGFyICpleHRlcm5hbF9kaWZmX2NtZCA9IE5VTEw7CkBAIC0xMzMsNTUgKzE3Myw1MiBAQAogCQkJIGludCBjb21wbGV0ZV9yZXdyaXRlKQogewogCWludCBpLCBuZXh0X2F0LCBjbWRfc2l6ZTsKLQljb25zdCBjaGFyICpjb25zdCBkaWZmX2NtZCA9ICJkaWZmIC1MJXMlcyAtTCVzJXMiOwotCWNvbnN0IGNoYXIgKmNvbnN0IGRpZmZfYXJnICA9ICIlcyAlc3x8OiI7IC8qICJ8fDoiIGlzIHRvIHJldHVybiAwICovCisJY29uc3QgY2hhciAqY29uc3QgZGlmZl9jbWQgPSAiZGlmZiAtTCVzIC1MJXMiOworCWNvbnN0IGNoYXIgKmNvbnN0IGRpZmZfYXJnICA9ICItLSAlcyAlc3x8OiI7IC8qICJ8fDoiIGlzIHRvIHJldHVybiAwICovCiAJY29uc3QgY2hhciAqaW5wdXRfbmFtZV9zcVsyXTsKLQljb25zdCBjaGFyICpwYXRoMFsyXTsKLQljb25zdCBjaGFyICpwYXRoMVsyXTsKLQljb25zdCBjaGFyICpuYW1lX3NxWzJdOworCWNvbnN0IGNoYXIgKmxhYmVsX3BhdGhbMl07CiAJY2hhciAqY21kOwogCi0JbmFtZV9zcVswXSA9IHNxX3F1b3RlKG5hbWVfYSk7Ci0JbmFtZV9zcVsxXSA9IHNxX3F1b3RlKG5hbWVfYik7Ci0KLQkvKiBkaWZmX2NtZCBhbmQgZGlmZl9hcmcgaGF2ZSA2ICVzIGluIHRvdGFsIHdoaWNoIG1ha2VzCi0JICogdGhlIHN1bSBvZiB0aGVzZSBzdHJpbmdzIDEyIGJ5dGVzIGxhcmdlciB0aGFuIHJlcXVpcmVkLgorCS8qIGRpZmZfY21kIGFuZCBkaWZmX2FyZyBoYXZlIDQgJXMgaW4gdG90YWwgd2hpY2ggbWFrZXMKKwkgKiB0aGUgc3VtIG9mIHRoZXNlIHN0cmluZ3MgOCBieXRlcyBsYXJnZXIgdGhhbiByZXF1aXJlZC4KIAkgKiB3ZSB1c2UgMiBzcGFjZXMgYXJvdW5kIGRpZmYtb3B0cywgYW5kIHdlIG5lZWQgdG8gY291bnQKLQkgKiB0ZXJtaW5hdGluZyBOVUwsIHNvIHdlIHN1YnRyYWN0IDkgaGVyZS4KKwkgKiB0ZXJtaW5hdGluZyBOVUw7IHdlIHVzZWQgdG8gc3VidHJhY3QgNSBoZXJlLCBidXQgd2UgZG8gbm90CisJICogY2FyZSBhYm91dCBzbWFsbCBsZWFrcyBpbiB0aGlzIHN1YnByb2Nlc3MgdGhhdCBpcyBhYm91dAorCSAqIHRvIGV4ZWMgImRpZmYiIGFueW1vcmUuCiAJICovCi0JY21kX3NpemUgPSAoc3RybGVuKGRpZmZfY21kKSArIHN0cmxlbihkaWZmX29wdHMpICsKLQkJCXN0cmxlbihkaWZmX2FyZykgLSA5KTsKKwljbWRfc2l6ZSA9IChzdHJsZW4oZGlmZl9jbWQpICsgc3RybGVuKGRpZmZfb3B0cykgKyBzdHJsZW4oZGlmZl9hcmcpCisJCSAgICArIDEyOCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWlucHV0X25hbWVfc3FbaV0gPSBzcV9xdW90ZSh0ZW1wW2ldLm5hbWUpOwotCQlpZiAoIXN0cmNtcCh0ZW1wW2ldLm5hbWUsICIvZGV2L251bGwiKSkgewotCQkJcGF0aDBbaV0gPSAiL2Rldi9udWxsIjsKLQkJCXBhdGgxW2ldID0gIiI7Ci0JCX0gZWxzZSB7Ci0JCQlwYXRoMFtpXSA9IGkgPyAiYi8iIDogImEvIjsKLQkJCXBhdGgxW2ldID0gbmFtZV9zcVtpXTsKLQkJfQotCQljbWRfc2l6ZSArPSAoc3RybGVuKHBhdGgwW2ldKSArIHN0cmxlbihwYXRoMVtpXSkgKwotCQkJICAgICBzdHJsZW4oaW5wdXRfbmFtZV9zcVtpXSkpOworCQlpZiAoIXN0cmNtcCh0ZW1wW2ldLm5hbWUsICIvZGV2L251bGwiKSkKKwkJCWxhYmVsX3BhdGhbaV0gPSAiL2Rldi9udWxsIjsKKwkJZWxzZSBpZiAoIWkpCisJCQlsYWJlbF9wYXRoW2ldID0gc3FfcXVvdGUocXVvdGVfdHdvKCJhLyIsIG5hbWVfYSkpOworCQllbHNlCisJCQlsYWJlbF9wYXRoW2ldID0gc3FfcXVvdGUocXVvdGVfdHdvKCJiLyIsIG5hbWVfYikpOworCQljbWRfc2l6ZSArPSAoc3RybGVuKGxhYmVsX3BhdGhbaV0pICsgc3RybGVuKGlucHV0X25hbWVfc3FbaV0pKTsKIAl9CiAKIAljbWQgPSB4bWFsbG9jKGNtZF9zaXplKTsKIAogCW5leHRfYXQgPSAwOwogCW5leHRfYXQgKz0gc25wcmludGYoY21kK25leHRfYXQsIGNtZF9zaXplLW5leHRfYXQsCi0JCQkgICAgZGlmZl9jbWQsCi0JCQkgICAgcGF0aDBbMF0sIHBhdGgxWzBdLCBwYXRoMFsxXSwgcGF0aDFbMV0pOworCQkJICAgIGRpZmZfY21kLCBsYWJlbF9wYXRoWzBdLCBsYWJlbF9wYXRoWzFdKTsKIAluZXh0X2F0ICs9IHNucHJpbnRmKGNtZCtuZXh0X2F0LCBjbWRfc2l6ZS1uZXh0X2F0LAogCQkJICAgICIgJXMgIiwgZGlmZl9vcHRzKTsKIAluZXh0X2F0ICs9IHNucHJpbnRmKGNtZCtuZXh0X2F0LCBjbWRfc2l6ZS1uZXh0X2F0LAogCQkJICAgIGRpZmZfYXJnLCBpbnB1dF9uYW1lX3NxWzBdLCBpbnB1dF9uYW1lX3NxWzFdKTsKIAotCXByaW50ZigiZGlmZiAtLWdpdCBhLyVzIGIvJXNcbiIsIG5hbWVfYSwgbmFtZV9iKTsKLQlpZiAoIXBhdGgxWzBdWzBdKSB7CisJcHJpbnRmKCJkaWZmIC0tZ2l0ICVzICVzXG4iLAorCSAgICAgICBxdW90ZV90d28oImEvIiwgbmFtZV9hKSwgcXVvdGVfdHdvKCJiLyIsIG5hbWVfYikpOworCWlmIChsYWJlbF9wYXRoWzBdWzBdID09ICcvJykgeworCQkvKiBkZXYvbnVsbCAqLwogCQlwcmludGYoIm5ldyBmaWxlIG1vZGUgJXNcbiIsIHRlbXBbMV0ubW9kZSk7CiAJCWlmICh4ZnJtX21zZyAmJiB4ZnJtX21zZ1swXSkKIAkJCXB1dHMoeGZybV9tc2cpOwogCX0KLQllbHNlIGlmICghcGF0aDFbMV1bMF0pIHsKKwllbHNlIGlmIChsYWJlbF9wYXRoWzFdWzBdID09ICcvJykgewogCQlwcmludGYoImRlbGV0ZWQgZmlsZSBtb2RlICVzXG4iLCB0ZW1wWzBdLm1vZGUpOwogCQlpZiAoeGZybV9tc2cgJiYgeGZybV9tc2dbMF0pCiAJCQlwdXRzKHhmcm1fbXNnKTsKQEAgLTU5NiwxNSArNjMzLDMyIEBACiAJcmVtb3ZlX3RlbXBmaWxlKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGRpZmZfZmlsbF9zaGExX2luZm8oc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlpZiAoRElGRl9GSUxFX1ZBTElEKG9uZSkpIHsKKwkJaWYgKCFvbmUtPnNoYTFfdmFsaWQpIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJaWYgKHN0YXQob25lLT5wYXRoLCAmc3QpIDwgMCkKKwkJCQlkaWUoInN0YXQgJXMiLCBvbmUtPnBhdGgpOworCQkJaWYgKGluZGV4X3BhdGgob25lLT5zaGExLCBvbmUtPnBhdGgsICZzdCwgMCkpCisJCQkJZGllKCJjYW5ub3QgaGFzaCAlc1xuIiwgb25lLT5wYXRoKTsKKwkJfQorCX0KKwllbHNlCisJCW1lbXNldChvbmUtPnNoYTEsIDAsIDIwKTsKK30KKwogc3RhdGljIHZvaWQgcnVuX2RpZmYoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCiB7CiAJY29uc3QgY2hhciAqcGdtID0gZXh0ZXJuYWxfZGlmZigpOwotCWNoYXIgbXNnX1tQQVRIX01BWCoyKzIwMF0sICp4ZnJtX21zZzsKKwljaGFyIG1zZ1tQQVRIX01BWCoyKzMwMF0sICp4ZnJtX21zZzsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lOwogCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d287CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpvdGhlcjsKKwljaGFyICpuYW1lX211bmdlZCwgKm90aGVyX211bmdlZDsKIAlpbnQgY29tcGxldGVfcmV3cml0ZSA9IDA7CisJaW50IGxlbjsKIAogCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpIHsKIAkJLyogdW5tZXJnZWQgKi8KQEAgLTYxNSw0MCArNjY5LDYzIEBACiAKIAluYW1lID0gcC0+b25lLT5wYXRoOwogCW90aGVyID0gKHN0cmNtcChuYW1lLCBwLT50d28tPnBhdGgpID8gcC0+dHdvLT5wYXRoIDogTlVMTCk7CisJbmFtZV9tdW5nZWQgPSBxdW90ZV9vbmUobmFtZSk7CisJb3RoZXJfbXVuZ2VkID0gcXVvdGVfb25lKG90aGVyKTsKIAlvbmUgPSBwLT5vbmU7IHR3byA9IHAtPnR3bzsKKworCWRpZmZfZmlsbF9zaGExX2luZm8ob25lKTsKKwlkaWZmX2ZpbGxfc2hhMV9pbmZvKHR3byk7CisKKwlsZW4gPSAwOwogCXN3aXRjaCAocC0+c3RhdHVzKSB7CiAJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6Ci0JCXNwcmludGYobXNnXywKLQkJCSJzaW1pbGFyaXR5IGluZGV4ICVkJSVcbiIKLQkJCSJjb3B5IGZyb20gJXNcbiIKLQkJCSJjb3B5IHRvICVzIiwKLQkJCShpbnQpKDAuNSArIHAtPnNjb3JlICogMTAwLjAvTUFYX1NDT1JFKSwKLQkJCW5hbWUsIG90aGVyKTsKLQkJeGZybV9tc2cgPSBtc2dfOworCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwKKwkJCQkic2ltaWxhcml0eSBpbmRleCAlZCUlXG4iCisJCQkJImNvcHkgZnJvbSAlc1xuIgorCQkJCSJjb3B5IHRvICVzXG4iLAorCQkJCShpbnQpKDAuNSArIHAtPnNjb3JlICogMTAwLjAvTUFYX1NDT1JFKSwKKwkJCQluYW1lX211bmdlZCwgb3RoZXJfbXVuZ2VkKTsKIAkJYnJlYWs7CiAJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgotCQlzcHJpbnRmKG1zZ18sCi0JCQkic2ltaWxhcml0eSBpbmRleCAlZCUlXG4iCi0JCQkicmVuYW1lIGZyb20gJXNcbiIKLQkJCSJyZW5hbWUgdG8gJXMiLAotCQkJKGludCkoMC41ICsgcC0+c2NvcmUgKiAxMDAuMC9NQVhfU0NPUkUpLAotCQkJbmFtZSwgb3RoZXIpOwotCQl4ZnJtX21zZyA9IG1zZ187CisJCWxlbiArPSBzbnByaW50Zihtc2cgKyBsZW4sIHNpemVvZihtc2cpIC0gbGVuLAorCQkJCSJzaW1pbGFyaXR5IGluZGV4ICVkJSVcbiIKKwkJCQkicmVuYW1lIGZyb20gJXNcbiIKKwkJCQkicmVuYW1lIHRvICVzXG4iLAorCQkJCShpbnQpKDAuNSArIHAtPnNjb3JlICogMTAwLjAvTUFYX1NDT1JFKSwKKwkJCQluYW1lX211bmdlZCwgb3RoZXJfbXVuZ2VkKTsKIAkJYnJlYWs7CiAJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKIAkJaWYgKHAtPnNjb3JlKSB7Ci0JCQlzcHJpbnRmKG1zZ18sCi0JCQkJImRpc3NpbWlsYXJpdHkgaW5kZXggJWQlJSIsCi0JCQkJKGludCkoMC41ICsgcC0+c2NvcmUgKiAxMDAuMC9NQVhfU0NPUkUpKTsKLQkJCXhmcm1fbXNnID0gbXNnXzsKKwkJCWxlbiArPSBzbnByaW50Zihtc2cgKyBsZW4sIHNpemVvZihtc2cpIC0gbGVuLAorCQkJCQkiZGlzc2ltaWxhcml0eSBpbmRleCAlZCUlXG4iLAorCQkJCQkoaW50KSgwLjUgKyBwLT5zY29yZSAqCisJCQkJCSAgICAgIDEwMC4wL01BWF9TQ09SRSkpOwogCQkJY29tcGxldGVfcmV3cml0ZSA9IDE7CiAJCQlicmVhazsKIAkJfQogCQkvKiBmYWxsdGhydSAqLwogCWRlZmF1bHQ6Ci0JCXhmcm1fbXNnID0gTlVMTDsKKwkJLyogbm90aGluZyAqLworCQk7CiAJfQogCisJaWYgKG1lbWNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSwgMjApKSB7CisJCWNoYXIgb25lX3NoYTFbNDFdOworCQltZW1jcHkob25lX3NoYTEsIHNoYTFfdG9faGV4KG9uZS0+c2hhMSksIDQxKTsKKworCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwKKwkJCQkiaW5kZXggJS43cy4uJS43cyIsIG9uZV9zaGExLAorCQkJCXNoYTFfdG9faGV4KHR3by0+c2hhMSkpOworCQlpZiAob25lLT5tb2RlID09IHR3by0+bW9kZSkKKwkJCWxlbiArPSBzbnByaW50Zihtc2cgKyBsZW4sIHNpemVvZihtc2cpIC0gbGVuLAorCQkJCQkiICUwNm8iLCBvbmUtPm1vZGUpOworCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwgIlxuIik7CisJfQorCisJaWYgKGxlbikKKwkJbXNnWy0tbGVuXSA9IDA7CisJeGZybV9tc2cgPSBsZW4gPyBtc2cgOiBOVUxMOworCiAJaWYgKCFwZ20gJiYKIAkgICAgRElGRl9GSUxFX1ZBTElEKG9uZSkgJiYgRElGRl9GSUxFX1ZBTElEKHR3bykgJiYKIAkgICAgKFNfSUZNVCAmIG9uZS0+bW9kZSkgIT0gKFNfSUZNVCAmIHR3by0+bW9kZSkpIHsKQEAgLTY2NSw2ICs3NDIsOSBAQAogCWVsc2UKIAkJcnVuX2V4dGVybmFsX2RpZmYocGdtLCBuYW1lLCBvdGhlciwgb25lLCB0d28sIHhmcm1fbXNnLAogCQkJCSAgY29tcGxldGVfcmV3cml0ZSk7CisKKwlmcmVlKG5hbWVfbXVuZ2VkKTsKKwlmcmVlKG90aGVyX211bmdlZCk7CiB9CiAKIHZvaWQgZGlmZl9zZXR1cChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQpAQCAtNjc0LDYgKzc1NCw5IEBACiAJb3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CiAJb3B0aW9ucy0+YnJlYWtfb3B0ID0gLTE7CiAJb3B0aW9ucy0+cmVuYW1lX2xpbWl0ID0gLTE7CisKKwlvcHRpb25zLT5jaGFuZ2UgPSBkaWZmX2NoYW5nZTsKKwlvcHRpb25zLT5hZGRfcmVtb3ZlID0gZGlmZl9hZGRyZW1vdmU7CiB9CiAKIGludCBkaWZmX3NldHVwX2RvbmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKQEAgLTg0MSwxNiArOTI0LDEzIEBACiB7CiAJaW50IHR3b19wYXRoczsKIAljaGFyIHN0YXR1c1sxMF07CisJY29uc3QgY2hhciAqcGF0aF9vbmUsICpwYXRoX3R3bzsKIAorCXBhdGhfb25lID0gcC0+b25lLT5wYXRoOworCXBhdGhfdHdvID0gcC0+dHdvLT5wYXRoOwogCWlmIChsaW5lX3Rlcm1pbmF0aW9uKSB7Ci0JCWNvbnN0IGNoYXIgKmNvbnN0IGVyciA9Ci0JCQkicGF0aCAlcyBjYW5ub3QgYmUgZXhwcmVzc2VkIHdpdGhvdXQgLXoiOwotCQlpZiAoc3RyY2hyKHAtPm9uZS0+cGF0aCwgbGluZV90ZXJtaW5hdGlvbikgfHwKLQkJICAgIHN0cmNocihwLT5vbmUtPnBhdGgsIGludGVyX25hbWVfdGVybWluYXRpb24pKQotCQkJZGllKGVyciwgcC0+b25lLT5wYXRoKTsKLQkJaWYgKHN0cmNocihwLT50d28tPnBhdGgsIGxpbmVfdGVybWluYXRpb24pIHx8Ci0JCSAgICBzdHJjaHIocC0+dHdvLT5wYXRoLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKSkKLQkJCWRpZShlcnIsIHAtPnR3by0+cGF0aCk7CisJCXBhdGhfb25lID0gcXVvdGVfb25lKHBhdGhfb25lKTsKKwkJcGF0aF90d28gPSBxdW90ZV9vbmUocGF0aF90d28pOwogCX0KIAogCWlmIChwLT5zY29yZSkKQEAgLTg3OCwxNiArOTU4LDI5IEBACiAJCSAgICAgICBwLT5vbmUtPm1vZGUsIHAtPnR3by0+bW9kZSwgc2hhMV90b19oZXgocC0+b25lLT5zaGExKSk7CiAJCXByaW50ZigiJXMgIiwgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSk7CiAJfQotCXByaW50ZigiJXMlYyVzIixzdGF0dXMsIGludGVyX25hbWVfdGVybWluYXRpb24sIHAtPm9uZS0+cGF0aCk7CisJcHJpbnRmKCIlcyVjJXMiLCBzdGF0dXMsIGludGVyX25hbWVfdGVybWluYXRpb24sIHBhdGhfb25lKTsKIAlpZiAodHdvX3BhdGhzKQotCQlwcmludGYoIiVjJXMiLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLCBwLT50d28tPnBhdGgpOworCQlwcmludGYoIiVjJXMiLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLCBwYXRoX3R3byk7CiAJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKKwlpZiAocGF0aF9vbmUgIT0gcC0+b25lLT5wYXRoKQorCQlmcmVlKCh2b2lkKilwYXRoX29uZSk7CisJaWYgKHBhdGhfdHdvICE9IHAtPnR3by0+cGF0aCkKKwkJZnJlZSgodm9pZCopcGF0aF90d28pOwogfQogCiBzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX25hbWUoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCQkgICAgaW50IGludGVyX25hbWVfdGVybWluYXRpb24sCiAJCQkgICAgaW50IGxpbmVfdGVybWluYXRpb24pCiB7Ci0JcHJpbnRmKCIlcyVjIiwgcC0+dHdvLT5wYXRoLCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwljaGFyICpwYXRoID0gcC0+dHdvLT5wYXRoOworCisJaWYgKGxpbmVfdGVybWluYXRpb24pCisJCXBhdGggPSBxdW90ZV9vbmUocC0+dHdvLT5wYXRoKTsKKwllbHNlCisJCXBhdGggPSBwLT50d28tPnBhdGg7CisJcHJpbnRmKCIlcyVjIiwgcGF0aCwgbGluZV90ZXJtaW5hdGlvbik7CisJaWYgKHAtPnR3by0+cGF0aCAhPSBwYXRoKQorCQlmcmVlKHBhdGgpOwogfQogCiBpbnQgZGlmZl91bm1vZGlmaWVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCkBAIC0xMDc0LDcgKzExNjcsOSBAQAogCQkJCSAgICAgICBkaWZmX291dHB1dF9mb3JtYXQpOwogCQkJYnJlYWs7CiAJCWNhc2UgRElGRl9GT1JNQVRfTkFNRToKLQkJCWRpZmZfZmx1c2hfbmFtZShwLCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwkJCWRpZmZfZmx1c2hfbmFtZShwLAorCQkJCQlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLAorCQkJCQlsaW5lX3Rlcm1pbmF0aW9uKTsKIAkJCWJyZWFrOwogCQl9CiAJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKaW5kZXggMmY0YTdiNC4uMTI1OTA3OSAxMDA2NDQKLS0tIGEvZGlmZi5oCisrKyBiL2RpZmYuaApAQCAtOCwxMSArOCwzMSBAQAogCShTX0lTUkVHKG1vZGUpID8gKFNfSUZSRUcgfCBjZV9wZXJtaXNzaW9ucyhtb2RlKSkgOiBcCiAJU19JU0xOSyhtb2RlKSA/IFNfSUZMTksgOiBTX0lGRElSKQogCitzdHJ1Y3QgdHJlZV9kZXNjIHsKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RydWN0IGRpZmZfb3B0aW9uczsKKwordHlwZWRlZiB2b2lkICgqY2hhbmdlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSB1bnNpZ25lZCBvbGRfbW9kZSwgdW5zaWduZWQgbmV3X21vZGUsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisKK3R5cGVkZWYgdm9pZCAoKmFkZF9yZW1vdmVfZm5fdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisKIHN0cnVjdCBkaWZmX29wdGlvbnMgewogCWNvbnN0IGNoYXIgKipwYXRoczsKIAljb25zdCBjaGFyICpmaWx0ZXI7CiAJY29uc3QgY2hhciAqb3JkZXJmaWxlOwogCWNvbnN0IGNoYXIgKnBpY2theGU7CisJdW5zaWduZWQgcmVjdXJzaXZlOjEsCisJCSB0cmVlX2luX3JlY3Vyc2l2ZToxOwogCWludCBicmVha19vcHQ7CiAJaW50IGRldGVjdF9yZW5hbWU7CiAJaW50IGZpbmRfY29waWVzX2hhcmRlcjsKQEAgLTIzLDggKzQzLDE3IEBACiAJaW50IHJldmVyc2VfZGlmZjsKIAlpbnQgcmVuYW1lX2xpbWl0OwogCWludCBzZXR1cDsKKworCWNoYW5nZV9mbl90IGNoYW5nZTsKKwlhZGRfcmVtb3ZlX2ZuX3QgYWRkX3JlbW92ZTsKIH07CiAKK2V4dGVybiB2b2lkIGRpZmZfdHJlZV9zZXR1cF9wYXRocyhjb25zdCBjaGFyICoqcGF0aHMpOworZXh0ZXJuIGludCBkaWZmX3RyZWUoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyLAorCQkgICAgIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CitleHRlcm4gaW50IGRpZmZfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LAorCQkJICBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworCiBleHRlcm4gdm9pZCBkaWZmX2FkZHJlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCiAJCQkgICBpbnQgYWRkcmVtb3ZlLAogCQkJICAgdW5zaWduZWQgbW9kZSwKQEAgLTYyLDcgKzkxLDYgQEAKIAogI2RlZmluZSBDT01NT05fRElGRl9PUFRJT05TX0hFTFAgXAogIlxuY29tbW9uIGRpZmYgb3B0aW9uczpcbiIgXAotIiAgLXIgICAgICAgICAgICBkaWZmIHJlY3Vyc2l2ZWx5IChvbmx5IG1lYW5pbmdmdWwgaW4gZGlmZi10cmVlKVxuIiBcCiAiICAteiAgICAgICAgICAgIG91dHB1dCBkaWZmLXJhdyB3aXRoIGxpbmVzIHRlcm1pbmF0ZWQgd2l0aCBOVUwuXG4iIFwKICIgIC1wICAgICAgICAgICAgb3V0cHV0IHBhdGNoIGZvcm1hdC5cbiIgXAogIiAgLXUgICAgICAgICAgICBzeW5vbnltIGZvciAtcC5cbiIgXApkaWZmIC0tZ2l0IGEvZW50cnkuYyBiL2VudHJ5LmMKaW5kZXggYjg0MjZkYi4uMTViMzRlYiAxMDA2NDQKLS0tIGEvZW50cnkuYworKysgYi9lbnRyeS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJaWYgKCFzdGF0ZS0+Zm9yY2UpIHsKIAkJCWlmICghc3RhdGUtPnF1aWV0KQogCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LWNoZWNrb3V0LWluZGV4OiAlcyBhbHJlYWR5IGV4aXN0c1xuIiwgcGF0aCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtMTsKIAkJfQogCiAJCS8qCmRpZmYgLS1naXQgYS9lbnZpcm9ubWVudC5jIGIvZW52aXJvbm1lbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM3YWY1Ci0tLSAvZGV2L251bGwKKysrIGIvZW52aXJvbm1lbnQuYwpAQCAtMCwwICsxLDc1IEBACisvKgorICogV2UgcHV0IGFsbCB0aGUgZ2l0IGNvbmZpZyB2YXJpYWJsZXMgaW4gdGhpcyBzYW1lIG9iamVjdAorICogZmlsZSwgc28gdGhhdCBwcm9ncmFtcyBjYW4gbGluayBhZ2FpbnN0IHRoZSBjb25maWcgcGFyc2VyCisgKiB3aXRob3V0IGhhdmluZyB0byBsaW5rIGFnYWluc3QgYWxsIHRoZSByZXN0IG9mIGdpdC4KKyAqCisgKiBJbiBwYXJ0aWN1bGFyLCBubyBuZWVkIHRvIGJyaW5nIGluIGxpYnogZXRjIHVubGVzcyBuZWVkZWQsCisgKiBldmVuIGlmIHlvdSBtaWdodCB3YW50IHRvIGtub3cgd2hlcmUgdGhlIGdpdCBkaXJlY3RvcnkgZXRjCisgKiBhcmUuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorCitjaGFyIGdpdF9kZWZhdWx0X2VtYWlsW01BWF9HSVROQU1FXTsKK2NoYXIgZ2l0X2RlZmF1bHRfbmFtZVtNQVhfR0lUTkFNRV07CitpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQgPSAxOworCitzdGF0aWMgY2hhciAqZ2l0X2RpciwgKmdpdF9vYmplY3RfZGlyLCAqZ2l0X2luZGV4X2ZpbGUsICpnaXRfcmVmc19kaXIsCisJKmdpdF9ncmFmdF9maWxlOworc3RhdGljIHZvaWQgc2V0dXBfZ2l0X2Vudih2b2lkKQoreworCWdpdF9kaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJaWYgKCFnaXRfZGlyKQorCQlnaXRfZGlyID0gREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UOworCWdpdF9vYmplY3RfZGlyID0gZ2V0ZW52KERCX0VOVklST05NRU5UKTsKKwlpZiAoIWdpdF9vYmplY3RfZGlyKSB7CisJCWdpdF9vYmplY3RfZGlyID0geG1hbGxvYyhzdHJsZW4oZ2l0X2RpcikgKyA5KTsKKwkJc3ByaW50ZihnaXRfb2JqZWN0X2RpciwgIiVzL29iamVjdHMiLCBnaXRfZGlyKTsKKwl9CisJZ2l0X3JlZnNfZGlyID0geG1hbGxvYyhzdHJsZW4oZ2l0X2RpcikgKyA2KTsKKwlzcHJpbnRmKGdpdF9yZWZzX2RpciwgIiVzL3JlZnMiLCBnaXRfZGlyKTsKKwlnaXRfaW5kZXhfZmlsZSA9IGdldGVudihJTkRFWF9FTlZJUk9OTUVOVCk7CisJaWYgKCFnaXRfaW5kZXhfZmlsZSkgeworCQlnaXRfaW5kZXhfZmlsZSA9IHhtYWxsb2Moc3RybGVuKGdpdF9kaXIpICsgNyk7CisJCXNwcmludGYoZ2l0X2luZGV4X2ZpbGUsICIlcy9pbmRleCIsIGdpdF9kaXIpOworCX0KKwlnaXRfZ3JhZnRfZmlsZSA9IGdldGVudihHUkFGVF9FTlZJUk9OTUVOVCk7CisJaWYgKCFnaXRfZ3JhZnRfZmlsZSkKKwkJZ2l0X2dyYWZ0X2ZpbGUgPSBzdHJkdXAoZ2l0X3BhdGgoImluZm8vZ3JhZnRzIikpOworfQorCitjaGFyICpnZXRfZ2l0X2Rpcih2b2lkKQoreworCWlmICghZ2l0X2RpcikKKwkJc2V0dXBfZ2l0X2VudigpOworCXJldHVybiBnaXRfZGlyOworfQorCitjaGFyICpnZXRfb2JqZWN0X2RpcmVjdG9yeSh2b2lkKQoreworCWlmICghZ2l0X29iamVjdF9kaXIpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gZ2l0X29iamVjdF9kaXI7Cit9CisKK2NoYXIgKmdldF9yZWZzX2RpcmVjdG9yeSh2b2lkKQoreworCWlmICghZ2l0X3JlZnNfZGlyKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9yZWZzX2RpcjsKK30KKworY2hhciAqZ2V0X2luZGV4X2ZpbGUodm9pZCkKK3sKKwlpZiAoIWdpdF9pbmRleF9maWxlKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9pbmRleF9maWxlOworfQorCitjaGFyICpnZXRfZ3JhZnRfZmlsZSh2b2lkKQoreworCWlmICghZ2l0X2dyYWZ0X2ZpbGUpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gZ2l0X2dyYWZ0X2ZpbGU7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5jIGIvZmV0Y2gtcGFjay5jCmluZGV4IDk2OWU3MmEuLjNkZjk5MTEgMTAwNjQ0Ci0tLSBhL2ZldGNoLXBhY2suYworKysgYi9mZXRjaC1wYWNrLmMKQEAgLTEyLDQxICsxMiwxNjggQEAKICJnaXQtZmV0Y2gtcGFjayBbLXFdIFstdl0gWy0tZXhlYz11cGxvYWQtcGFja10gW2hvc3Q6XWRpcmVjdG9yeSA8cmVmcz4uLi4iOwogc3RhdGljIGNvbnN0IGNoYXIgKmV4ZWMgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKIAorI2RlZmluZSBDT01QTEVURQkoMVUgPDwgMCkKKyNkZWZpbmUgQ09NTU9OCQkoMVUgPDwgMSkKKyNkZWZpbmUgQ09NTU9OX1JFRgkoMVUgPDwgMikKKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDMpCisjZGVmaW5lIFBPUFBFRAkJKDFVIDw8IDQpCisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldl9saXN0ID0gTlVMTDsKK3N0YXRpYyBpbnQgbm9uX2NvbW1vbl9yZXZzID0gMCwgbXVsdGlfYWNrID0gMDsKKworc3RhdGljIHZvaWQgcmV2X2xpc3RfcHVzaChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBtYXJrKQoreworCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgbWFyaykpIHsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbWFyazsKKworCQlpZiAoIShjb21taXQtPm9iamVjdC5wYXJzZWQpKQorCQkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisKKwkJaW5zZXJ0X2J5X2RhdGUoY29tbWl0LCAmcmV2X2xpc3QpOworCisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5vbl9jb21tb25fcmV2cysrOworCX0KK30KKworc3RhdGljIGludCByZXZfbGlzdF9pbnNlcnRfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSkpOworCisJaWYgKG8tPnR5cGUgPT0gY29tbWl0X3R5cGUpCisJCXJldl9saXN0X3B1c2goKHN0cnVjdCBjb21taXQgKilvLCBTRUVOKTsKKworCXJldHVybiAwOworfQorCisvKgorICAgVGhpcyBmdW5jdGlvbiBtYXJrcyBhIHJldiBhbmQgaXRzIGFuY2VzdG9ycyBhcyBjb21tb24uCisgICBJbiBzb21lIGNhc2VzLCBpdCBpcyBkZXNpcmFibGUgdG8gbWFyayBvbmx5IHRoZSBhbmNlc3RvcnMgKGZvciBleGFtcGxlCisgICB3aGVuIG9ubHkgdGhlIHNlcnZlciBkb2VzIG5vdCB5ZXQga25vdyB0aGF0IHRoZXkgYXJlIGNvbW1vbikuCisqLworCitzdGF0aWMgdm9pZCBtYXJrX2NvbW1vbihzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCWludCBhbmNlc3RvcnNfb25seSwgaW50IGRvbnRfcGFyc2UpCit7CisJaWYgKGNvbW1pdCAhPSBOVUxMICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSAoc3RydWN0IG9iamVjdCAqKWNvbW1pdDsKKworCQlpZiAoIWFuY2VzdG9yc19vbmx5KQorCQkJby0+ZmxhZ3MgfD0gQ09NTU9OOworCisJCWlmICghKG8tPmZsYWdzICYgU0VFTikpCisJCQlyZXZfbGlzdF9wdXNoKGNvbW1pdCwgU0VFTik7CisJCWVsc2UgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCQlpZiAoIWFuY2VzdG9yc19vbmx5ICYmICEoby0+ZmxhZ3MgJiBQT1BQRUQpKQorCQkJCW5vbl9jb21tb25fcmV2cy0tOworCQkJaWYgKCFvLT5wYXJzZWQgJiYgIWRvbnRfcGFyc2UpCisJCQkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisKKwkJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJCQkJcGFyZW50czsKKwkJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQkJbWFya19jb21tb24ocGFyZW50cy0+aXRlbSwgMCwgZG9udF9wYXJzZSk7CisJCX0KKwl9Cit9CisKKy8qCisgIEdldCB0aGUgbmV4dCByZXYgdG8gc2VuZCwgaWdub3JpbmcgdGhlIGNvbW1vbi4KKyovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyKiBnZXRfcmV2KCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCisJd2hpbGUgKGNvbW1pdCA9PSBOVUxMKSB7CisJCXVuc2lnbmVkIGludCBtYXJrOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QqIHBhcmVudHM7CisKKwkJaWYgKHJldl9saXN0ID09IE5VTEwgfHwgbm9uX2NvbW1vbl9yZXZzID09IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQljb21taXQgPSByZXZfbGlzdC0+aXRlbTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QucGFyc2VkKSkKKwkJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBQT1BQRUQ7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5vbl9jb21tb25fcmV2cy0tOworCQorCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikgeworCQkJLyogZG8gbm90IHNlbmQgImhhdmUiLCBhbmQgaWdub3JlIGFuY2VzdG9ycyAqLworCQkJY29tbWl0ID0gTlVMTDsKKwkJCW1hcmsgPSBDT01NT04gfCBTRUVOOworCQl9IGVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OX1JFRikKKwkJCS8qIHNlbmQgImhhdmUiLCBhbmQgaWdub3JlIGFuY2VzdG9ycyAqLworCQkJbWFyayA9IENPTU1PTiB8IFNFRU47CisJCWVsc2UKKwkJCS8qIHNlbmQgImhhdmUiLCBhbHNvIGZvciBpdHMgYW5jZXN0b3JzICovCisJCQltYXJrID0gU0VFTjsKKworCQl3aGlsZSAocGFyZW50cykgeworCQkJaWYgKCEocGFyZW50cy0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCQkJcmV2X2xpc3RfcHVzaChwYXJlbnRzLT5pdGVtLCBtYXJrKTsKKwkJCWlmIChtYXJrICYgQ09NTU9OKQorCQkJCW1hcmtfY29tbW9uKHBhcmVudHMtPml0ZW0sIDEsIDApOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKworCQlyZXZfbGlzdCA9IHJldl9saXN0LT5uZXh0OworCX0KKworCXJldHVybiBjb21taXQtPm9iamVjdC5zaGExOworfQorCiBzdGF0aWMgaW50IGZpbmRfY29tbW9uKGludCBmZFsyXSwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEsCiAJCSAgICAgICBzdHJ1Y3QgcmVmICpyZWZzKQogewogCWludCBmZXRjaGluZzsKLQlzdGF0aWMgY2hhciBsaW5lWzEwMDBdOwogCWludCBjb3VudCA9IDAsIGZsdXNoZXMgPSAwLCByZXR2YWw7Ci0JRklMRSAqcmV2czsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOwogCi0JcmV2cyA9IHBvcGVuKCJnaXQtcmV2LWxpc3QgJChnaXQtcmV2LXBhcnNlIC0tYWxsKSIsICJyIik7Ci0JaWYgKCFyZXZzKQotCQlkaWUoInVuYWJsZSB0byBydW4gJ2dpdC1yZXYtbGlzdCciKTsKKwlmb3JfZWFjaF9yZWYocmV2X2xpc3RfaW5zZXJ0X3JlZik7CiAKIAlmZXRjaGluZyA9IDA7CiAJZm9yICggOyByZWZzIDsgcmVmcyA9IHJlZnMtPm5leHQpIHsKIAkJdW5zaWduZWQgY2hhciAqcmVtb3RlID0gcmVmcy0+b2xkX3NoYTE7Ci0JCXVuc2lnbmVkIGNoYXIgKmxvY2FsID0gcmVmcy0+bmV3X3NoYTE7CisJCXN0cnVjdCBvYmplY3QgKm87CiAKLQkJaWYgKCFtZW1jbXAocmVtb3RlLCBsb2NhbCwgMjApKQorCQkvKgorCQkgKiBJZiB0aGF0IG9iamVjdCBpcyBjb21wbGV0ZSAoaS5lLiBpdCBpcyBhbiBhbmNlc3RvciBvZiBhCisJCSAqIGxvY2FsIHJlZiksIHdlIHRlbGwgdGhlbSB3ZSBoYXZlIGl0IGJ1dCBkbyBub3QgaGF2ZSB0bworCQkgKiB0ZWxsIHRoZW0gYWJvdXQgaXRzIGFuY2VzdG9ycywgd2hpY2ggdGhleSBhbHJlYWR5IGtub3cKKwkJICogYWJvdXQuCisJCSAqCisJCSAqIFdlIHVzZSBsb29rdXBfb2JqZWN0IGhlcmUgYmVjYXVzZSB3ZSBhcmUgb25seQorCQkgKiBpbnRlcmVzdGVkIGluIHRoZSBjYXNlIHdlICprbm93KiB0aGUgb2JqZWN0IGlzCisJCSAqIHJlYWNoYWJsZSBhbmQgd2UgaGF2ZSBhbHJlYWR5IHNjYW5uZWQgaXQuCisJCSAqLworCQlpZiAoKChvID0gbG9va3VwX29iamVjdChyZW1vdGUpKSAhPSBOVUxMKSAmJgorCQkJCShvLT5mbGFncyAmIENPTVBMRVRFKSkgewogCQkJY29udGludWU7Ci0JCXBhY2tldF93cml0ZShmZFsxXSwgIndhbnQgJXNcbiIsIHNoYTFfdG9faGV4KHJlbW90ZSkpOworCQl9CisKKwkJcGFja2V0X3dyaXRlKGZkWzFdLCAid2FudCAlcyVzXG4iLCBzaGExX3RvX2hleChyZW1vdGUpLAorCQkJbXVsdGlfYWNrID8gIiBtdWx0aV9hY2siIDogIiIpOwogCQlmZXRjaGluZysrOwogCX0KIAlwYWNrZXRfZmx1c2goZmRbMV0pOwogCWlmICghZmV0Y2hpbmcpCiAJCXJldHVybiAxOwotCWZsdXNoZXMgPSAxOworCisJZmx1c2hlcyA9IDA7CiAJcmV0dmFsID0gLTE7Ci0Jd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgcmV2cykgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpKQotCQkJZGllKCJnaXQtZmV0Y2gtcGFjazogZXhwZWN0ZWQgb2JqZWN0IG5hbWUsIGdvdCBjcnVkIik7CisJd2hpbGUgKChzaGExID0gZ2V0X3JldigpKSkgewogCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CiAJCWlmICh2ZXJib3NlKQogCQkJZnByaW50ZihzdGRlcnIsICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CiAJCWlmICghKDMxICYgKytjb3VudCkpIHsKKwkJCWludCBhY2s7CisKIAkJCXBhY2tldF9mbHVzaChmZFsxXSk7CiAJCQlmbHVzaGVzKys7CiAKQEAgLTU2LDMyICsxODMsNTEgQEAKIAkJCSAqLwogCQkJaWYgKGNvdW50ID09IDMyKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKGdldF9hY2soZmRbMF0sIHJlc3VsdF9zaGExKSkgewotCQkJCWZsdXNoZXMgPSAwOwotCQkJCXJldHZhbCA9IDA7Ci0JCQkJaWYgKHZlcmJvc2UpCi0JCQkJCWZwcmludGYoc3RkZXJyLCAiZ290IGFja1xuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9CisKKwkJCWRvIHsKKwkJCQlhY2sgPSBnZXRfYWNrKGZkWzBdLCByZXN1bHRfc2hhMSk7CisJCQkJaWYgKHZlcmJvc2UgJiYgYWNrKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgImdvdCBhY2sgJWQgJXNcbiIsIGFjaywKKwkJCQkJCQlzaGExX3RvX2hleChyZXN1bHRfc2hhMSkpOworCQkJCWlmIChhY2sgPT0gMSkgeworCQkJCQlmbHVzaGVzID0gMDsKKwkJCQkJbXVsdGlfYWNrID0gMDsKKwkJCQkJcmV0dmFsID0gMDsKKwkJCQkJZ290byBkb25lOworCQkJCX0gZWxzZSBpZiAoYWNrID09IDIpIHsKKwkJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0KKwkJCQkJCWxvb2t1cF9jb21taXQocmVzdWx0X3NoYTEpOworCQkJCQltYXJrX2NvbW1vbihjb21taXQsIDAsIDEpOworCQkJCQlyZXR2YWwgPSAwOworCQkJCX0KKwkJCX0gd2hpbGUgKGFjayk7CiAJCQlmbHVzaGVzLS07CiAJCX0KIAl9Ci0JcGNsb3NlKHJldnMpOworZG9uZToKIAlwYWNrZXRfd3JpdGUoZmRbMV0sICJkb25lXG4iKTsKIAlpZiAodmVyYm9zZSkKIAkJZnByaW50ZihzdGRlcnIsICJkb25lXG4iKTsKLQl3aGlsZSAoZmx1c2hlcykgewotCQlmbHVzaGVzLS07Ci0JCWlmIChnZXRfYWNrKGZkWzBdLCByZXN1bHRfc2hhMSkpIHsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJbXVsdGlfYWNrID0gMDsKKwkJZmx1c2hlcysrOworCX0KKwl3aGlsZSAoZmx1c2hlcyB8fCBtdWx0aV9hY2spIHsKKwkJaW50IGFjayA9IGdldF9hY2soZmRbMF0sIHJlc3VsdF9zaGExKTsKKwkJaWYgKGFjaykgewogCQkJaWYgKHZlcmJvc2UpCi0JCQkJZnByaW50ZihzdGRlcnIsICJnb3QgYWNrXG4iKTsKLQkJCXJldHVybiAwOworCQkJCWZwcmludGYoc3RkZXJyLCAiZ290IGFjayAoJWQpICVzXG4iLCBhY2ssCisJCQkJCXNoYTFfdG9faGV4KHJlc3VsdF9zaGExKSk7CisJCQlpZiAoYWNrID09IDEpCisJCQkJcmV0dXJuIDA7CisJCQltdWx0aV9hY2sgPSAxOworCQkJY29udGludWU7CiAJCX0KKwkJZmx1c2hlcy0tOwogCX0KIAlyZXR1cm4gcmV0dmFsOwogfQogCi0jZGVmaW5lIENPTVBMRVRFCSgxVSA8PCAwKQogc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29tcGxldGUgPSBOVUxMOwogCiBzdGF0aWMgaW50IG1hcmtfY29tcGxldGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTg5LDEwICsyMzUsMTMgQEAKIAlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOwogCiAJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSB0YWdfdHlwZSkgeworCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKikgbzsKKwkJaWYgKCF0LT50YWdnZWQpCisJCQlicmVhazsgLyogYnJva2VuIHJlcG9zaXRvcnkgKi8KIAkJby0+ZmxhZ3MgfD0gQ09NUExFVEU7Ci0JCW8gPSBwYXJzZV9vYmplY3QoKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZC0+c2hhMSk7CisJCW8gPSBwYXJzZV9vYmplY3QodC0+dGFnZ2VkLT5zaGExKTsKIAl9Ci0JaWYgKG8tPnR5cGUgPT0gY29tbWl0X3R5cGUpIHsKKwlpZiAobyAmJiBvLT50eXBlID09IGNvbW1pdF90eXBlKSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopbzsKIAkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09NUExFVEU7CiAJCWluc2VydF9ieV9kYXRlKGNvbW1pdCwgJmNvbXBsZXRlKTsKQEAgLTExMCw3ICsyNTksMjkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZXZlcnl0aGluZ19sb2NhbChzdHJ1Y3QgcmVmICpyZWZzKQorc3RhdGljIHZvaWQgZmlsdGVyX3JlZnMoc3RydWN0IHJlZiAqKnJlZnMsIGludCBucl9tYXRjaCwgY2hhciAqKm1hdGNoKQoreworCXN0cnVjdCByZWYgKnByZXYsICpjdXJyZW50LCAqbmV4dDsKKworCWlmICghbnJfbWF0Y2gpCisJCXJldHVybjsKKworCWZvciAocHJldiA9IE5VTEwsIGN1cnJlbnQgPSAqcmVmczsgY3VycmVudDsgY3VycmVudCA9IG5leHQpIHsKKwkJbmV4dCA9IGN1cnJlbnQtPm5leHQ7CisJCWlmICgoIW1lbWNtcChjdXJyZW50LT5uYW1lLCAicmVmcy8iLCA1KSAmJgorCQkJCQljaGVja19yZWZfZm9ybWF0KGN1cnJlbnQtPm5hbWUgKyA1KSkgfHwKKwkJCQkhcGF0aF9tYXRjaChjdXJyZW50LT5uYW1lLCBucl9tYXRjaCwgbWF0Y2gpKSB7CisJCQlpZiAocHJldiA9PSBOVUxMKQorCQkJCSpyZWZzID0gbmV4dDsKKwkJCWVsc2UKKwkJCQlwcmV2LT5uZXh0ID0gbmV4dDsKKwkJCWZyZWUoY3VycmVudCk7CisJCX0gZWxzZQorCQkJcHJldiA9IGN1cnJlbnQ7CisJfQorfQorCitzdGF0aWMgaW50IGV2ZXJ5dGhpbmdfbG9jYWwoc3RydWN0IHJlZiAqKnJlZnMsIGludCBucl9tYXRjaCwgY2hhciAqKm1hdGNoKQogewogCXN0cnVjdCByZWYgKnJlZjsKIAlpbnQgcmV0dmFsOwpAQCAtMTE5LDcgKzI5MCw3IEBACiAJdHJhY2tfb2JqZWN0X3JlZnMgPSAwOwogCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CiAKLQlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJc3RydWN0IG9iamVjdCAqbzsKIAogCQlvID0gcGFyc2Vfb2JqZWN0KHJlZi0+b2xkX3NoYTEpOwpAQCAtMTQxLDI4ICszMTIsNDcgQEAKIAlpZiAoY3V0b2ZmKQogCQltYXJrX3JlY2VudF9jb21wbGV0ZV9jb21taXRzKGN1dG9mZik7CiAKLQlmb3IgKHJldHZhbCA9IDE7IHJlZnMgOyByZWZzID0gcmVmcy0+bmV4dCkgewotCQljb25zdCB1bnNpZ25lZCBjaGFyICpyZW1vdGUgPSByZWZzLT5vbGRfc2hhMTsKKwkvKgorCSAqIE1hcmsgYWxsIGNvbXBsZXRlIHJlbW90ZSByZWZzIGFzIGNvbW1vbiByZWZzLgorCSAqIERvbid0IG1hcmsgdGhlbSBjb21tb24geWV0OyB0aGUgc2VydmVyIGhhcyB0byBiZSB0b2xkIHNvIGZpcnN0LgorCSAqLworCWZvciAocmVmID0gKnJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcobG9va3VwX29iamVjdChyZWYtPm9sZF9zaGExKSk7CisKKwkJaWYgKCFvIHx8IG8tPnR5cGUgIT0gY29tbWl0X3R5cGUgfHwgIShvLT5mbGFncyAmIENPTVBMRVRFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKG8tPmZsYWdzICYgU0VFTikpIHsKKwkJCXJldl9saXN0X3B1c2goKHN0cnVjdCBjb21taXQgKilvLCBDT01NT05fUkVGIHwgU0VFTik7CisKKwkJCW1hcmtfY29tbW9uKChzdHJ1Y3QgY29tbWl0ICopbywgMSwgMSk7CisJCX0KKwl9CisKKwlmaWx0ZXJfcmVmcyhyZWZzLCBucl9tYXRjaCwgbWF0Y2gpOworCisJZm9yIChyZXR2YWwgPSAxLCByZWYgPSAqcmVmczsgcmVmIDsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlbW90ZSA9IHJlZi0+b2xkX3NoYTE7CiAJCXVuc2lnbmVkIGNoYXIgbG9jYWxbMjBdOwogCQlzdHJ1Y3Qgb2JqZWN0ICpvOwogCi0JCW8gPSBwYXJzZV9vYmplY3QocmVtb3RlKTsKKwkJbyA9IGxvb2t1cF9vYmplY3QocmVtb3RlKTsKIAkJaWYgKCFvIHx8ICEoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKIAkJCXJldHZhbCA9IDA7CiAJCQlpZiAoIXZlcmJvc2UpCiAJCQkJY29udGludWU7CiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkid2FudCAlcyAoJXMpXG4iLCBzaGExX3RvX2hleChyZW1vdGUpLAotCQkJCXJlZnMtPm5hbWUpOworCQkJCXJlZi0+bmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCW1lbWNweShyZWZzLT5uZXdfc2hhMSwgbG9jYWwsIDIwKTsKKwkJbWVtY3B5KHJlZi0+bmV3X3NoYTEsIGxvY2FsLCAyMCk7CiAJCWlmICghdmVyYm9zZSkKIAkJCWNvbnRpbnVlOwogCQlmcHJpbnRmKHN0ZGVyciwKIAkJCSJhbHJlYWR5IGhhdmUgJXMgKCVzKVxuIiwgc2hhMV90b19oZXgocmVtb3RlKSwKLQkJCXJlZnMtPm5hbWUpOworCQkJcmVmLT5uYW1lKTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE3NCwxMiArMzY0LDE3IEBACiAJaW50IHN0YXR1czsKIAlwaWRfdCBwaWQ7CiAKLQlnZXRfcmVtb3RlX2hlYWRzKGZkWzBdLCAmcmVmLCBucl9tYXRjaCwgbWF0Y2gsIDEpOworCWdldF9yZW1vdGVfaGVhZHMoZmRbMF0sICZyZWYsIDAsIE5VTEwsIDApOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm11bHRpX2FjayIpKSB7CisJCWlmICh2ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrXG4iKTsKKwkJbXVsdGlfYWNrID0gMTsKKwl9CiAJaWYgKCFyZWYpIHsKIAkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKIAkJZGllKCJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIpOwogCX0KLQlpZiAoZXZlcnl0aGluZ19sb2NhbChyZWYpKSB7CisJaWYgKGV2ZXJ5dGhpbmdfbG9jYWwoJnJlZiwgbnJfbWF0Y2gsIG1hdGNoKSkgewogCQlwYWNrZXRfZmx1c2goZmRbMV0pOwogCQlnb3RvIGFsbF9kb25lOwogCX0KZGlmZiAtLWdpdCBhL2ZldGNoLmMgYi9mZXRjaC5jCmluZGV4IDNlMDczZDMuLjczYmRlMDcgMTAwNjQ0Ci0tLSBhL2ZldGNoLmMKKysrIGIvZmV0Y2guYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJCSAqIHRoZSBxdWV1ZSBiZWNhdXNlIHdlIG5lZWRlZCB0byBmZXRjaCBpdCBmaXJzdC4KIAkJICovCiAJCWlmICghIChvYmotPmZsYWdzICYgVE9fU0NBTikpIHsKLQkJCWlmICghaGFzX3NoYTFfZmlsZShvYmotPnNoYTEpICYmIGZldGNoKG9iai0+c2hhMSkpIHsKKwkJCWlmIChmZXRjaChvYmotPnNoYTEpKSB7CiAJCQkJcmVwb3J0X21pc3Npbmcob2JqLT50eXBlCiAJCQkJCSAgICAgICA/IG9iai0+dHlwZQogCQkJCQkgICAgICAgOiAib2JqZWN0Iiwgb2JqLT5zaGExKTsKZGlmZiAtLWdpdCBhL2ZzY2stb2JqZWN0cy5jIGIvZnNjay1vYmplY3RzLmMKaW5kZXggNjVjZWM3ZC4uMTdkMDUzNiAxMDA2NDQKLS0tIGEvZnNjay1vYmplY3RzLmMKKysrIGIvZnNjay1vYmplY3RzLmMKQEAgLTMyOSw5ICszMjksOCBAQAogCURJUiAqZGlyID0gb3BlbmRpcihwYXRoKTsKIAlzdHJ1Y3QgZGlyZW50ICpkZTsKIAotCWlmICghZGlyKSB7Ci0JCXJldHVybiBlcnJvcigibWlzc2luZyBzaGExIGRpcmVjdG9yeSAnJXMnIiwgcGF0aCk7Ci0JfQorCWlmICghZGlyKQorCQlyZXR1cm4gMDsKIAogCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKIAkJY2hhciBuYW1lWzEwMF07CmRpZmYgLS1naXQgYS9naXQtYWRkLnNoIGIvZ2l0LWFkZC5zaAppbmRleCAzZDM2NGRiLi5iNWZlNDZhIDEwMDc1NQotLS0gYS9naXQtYWRkLnNoCisrKyBiL2dpdC1hZGQuc2gKQEAgLTEsMTUgKzEsMjEgQEAKICMhL2Jpbi9zaAogCit1c2FnZSgpIHsKKyAgICBkaWUgInVzYWdlOiBnaXQgYWRkIFstbl0gWy12XSA8ZmlsZT4uLi4iCit9CisKIHNob3dfb25seT0KIHZlcmJvc2U9CiB3aGlsZSA6IDsgZG8KICAgY2FzZSAiJDEiIGluCiAgICAgLW4pCiAJc2hvd19vbmx5PXRydWUKLQl2ZXJib3NlPXRydWUKIAk7OwogICAgIC12KQotCXZlcmJvc2U9dHJ1ZQorCXZlcmJvc2U9LS12ZXJib3NlCisJOzsKKyAgICAtKikKKwl1c2FnZQogCTs7CiAgICAgKikKIAlicmVhawpAQCAtMTksMTQgKzI1LDE5IEBACiBkb25lCiAKIEdJVF9ESVI9JChnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpcikgfHwgZXhpdAotZ2xvYmFsX2V4Y2x1ZGU9Ci1pZiBbIC1mICIkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUiIF07IHRoZW4KLSAgIGdsb2JhbF9leGNsdWRlPSItLWV4Y2x1ZGUtZnJvbT0kR0lUX0RJUi9pbmZvL2V4Y2x1ZGUiCi1maQotZm9yIGkgaW4gJChnaXQtbHMtZmlsZXMgLS1vdGhlcnMgXAotCSRnbG9iYWxfZXhjbHVkZSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKLQkiJEAiKQotZG8KLSAgIFsgIiR2ZXJib3NlIiBdICYmIGVjaG8gIiAgJGkiCi0gICBbICIkc2hvd19vbmx5IiBdIHx8IGdpdC11cGRhdGUtaW5kZXggLS1hZGQgLS0gIiRpIiB8fCBleGl0Ci1kb25lCisKK2lmIHRlc3QgLWYgIiRHSVRfRElSL2luZm8vZXhjbHVkZSIKK3RoZW4KKwlnaXQtbHMtZmlsZXMgLXogXAorCS0tZXhjbHVkZS1mcm9tPSIkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUiIFwKKwktLW90aGVycyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIC0tICIkQCIKK2Vsc2UKKwlnaXQtbHMtZmlsZXMgLXogXAorCS0tb3RoZXJzIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgLS0gIiRAIgorZmkgfAorY2FzZSAiJHNob3dfb25seSIgaW4KK3RydWUpCisJeGFyZ3MgLTAgZWNobyA7OworKikKKwlnaXQtdXBkYXRlLWluZGV4IC0tYWRkICR2ZXJib3NlIC16IC0tc3RkaW4gOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2dpdC1hbS5zaCBiL2dpdC1hbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTVlYmFkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWFtLnNoCkBAIC0wLDAgKzEsMzUxIEBACisjIS9iaW4vc2gKKyMKKyMKKy4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCisKK2ZpbGVzPSQoZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLW9ubHkgSEVBRCkgfHwgZXhpdAoraWYgWyAiJGZpbGVzIiBdOyB0aGVuCisgICBlY2hvICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIiA+JjIKKyAgIGV4aXQgMQorZmkKKwordXNhZ2UgKCkgeworICAgIGVjaG8gPiYyICJ1c2FnZTogJDAgWy0tc2lnbm9mZl0gWy0tZG90ZXN0PTxkaXI+XSBbLS11dGY4XSBbLS0zd2F5XSA8bWJveD4iCisgICAgZWNobyA+JjIgIglvciwgd2hlbiByZXN1bWluZyIKKyAgICBlY2hvID4mMiAiCSQwIFstLXNraXBdIgorICAgIGV4aXQgMTsKK30KKworc3RvcF9oZXJlICgpIHsKKyAgICBlY2hvICIkMSIgPiIkZG90ZXN0L25leHQiCisgICAgZXhpdCAxCit9CisKK2dvX25leHQgKCkgeworCXJtIC1mICIkZG90ZXN0LyRtc2dudW0iICIkZG90ZXN0L21zZyIgIiRkb3Rlc3QvbXNnLWNsZWFuIiBcCisJCSIkZG90ZXN0L3BhdGNoIiAiJGRvdGVzdC9pbmZvIgorCWVjaG8gIiRuZXh0IiA+IiRkb3Rlc3QvbmV4dCIKKwl0aGlzPSRuZXh0Cit9CisKK2ZhbGxfYmFja18zd2F5ICgpIHsKKyAgICBPX09CSkVDVD1gY2QgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIgJiYgcHdkYAorCisgICAgcm0gLWZyICIkZG90ZXN0Ii9wYXRjaC1tZXJnZS0qCisgICAgbWtkaXIgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWRpciIKKworICAgICMgRmlyc3Qgc2VlIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpbmRleCBpbmZvIHRoYXQgd2UgY2FuIHVzZS4KKyAgICBpZiBnaXQtYXBwbHkgLXogLS1pbmRleC1pbmZvICIkZG90ZXN0L3BhdGNoIiBcCisJPiIkZG90ZXN0L3BhdGNoLW1lcmdlLWluZGV4LWluZm8iIDI+L2Rldi9udWxsICYmCisJR0lUX0lOREVYX0ZJTEU9IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWluZGV4IiBcCisJZ2l0LXVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm8gPCIkZG90ZXN0L3BhdGNoLW1lcmdlLWluZGV4LWluZm8iICYmCisJR0lUX0lOREVYX0ZJTEU9IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWluZGV4IiBcCisJZ2l0LXdyaXRlLXRyZWUgPiIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UrIiAmJgorCSMgaW5kZXggaGFzIHRoZSBiYXNlIHRyZWUgbm93LgorCSgKKwkgICAgY2QgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWRpciIgJiYKKwkgICAgR0lUX0lOREVYX0ZJTEU9Ii4uL3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgXAorCSAgICBHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJE9fT0JKRUNUIiBcCisJICAgIGdpdC1hcHBseSAtLWluZGV4IDwuLi9wYXRjaAorICAgICAgICApCisgICAgdGhlbgorCWVjaG8gVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLgorCW12ICIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UrIiAiJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlIgorCW12ICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtaW5kZXgiCisgICAgZWxzZQorCSMgT3RoZXJ3aXNlLCB0cnkgbmVhcmJ5IHRyZWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gYXBwbHkgdGhlCisJIyBwYXRjaC4KKwkoCisJICAgIE49MTAKKworCSAgICAjIEhvcGluZyB0aGUgcGF0Y2ggaXMgYWdhaW5zdCBvdXIgcmVjZW50IGNvbW1pdHMuLi4KKwkgICAgZ2l0LXJldi1saXN0IC0tbWF4LWNvdW50PSROIEhFQUQKKworCSAgICAjIG9yIGhvcGluZyB0aGUgcGF0Y2ggaXMgYWdhaW5zdCBrbm93biB0YWdzLi4uCisJICAgIGdpdC1scy1yZW1vdGUgLS10YWdzIC4KKwkpIHwKKwl3aGlsZSByZWFkIGJhc2UganVuaworCWRvCisJICAgICMgU2VlIGlmIHdlIGhhdmUgaXQgYXMgYSB0cmVlLi4uCisJICAgIGdpdC1jYXQtZmlsZSB0cmVlICIkYmFzZSIgPi9kZXYvbnVsbCAyPiYxIHx8IGNvbnRpbnVlCisKKwkgICAgcm0gLWZyICIkZG90ZXN0Ii9wYXRjaC1tZXJnZS0qICYmCisJICAgIG1rZGlyICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1kaXIiIHx8IGJyZWFrCisJICAgICgKKwkJY2QgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWRpciIgJiYKKwkJR0lUX0lOREVYX0ZJTEU9Li4vcGF0Y2gtbWVyZ2UtdG1wLWluZGV4ICYmCisJCUdJVF9PQkpFQ1RfRElSRUNUT1JZPSIkT19PQkpFQ1QiICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorCQlnaXQtcmVhZC10cmVlICIkYmFzZSIgJiYKKwkJZ2l0LWFwcGx5IC0taW5kZXggJiYKKwkJbXYgLi4vcGF0Y2gtbWVyZ2UtdG1wLWluZGV4IC4uL3BhdGNoLW1lcmdlLWluZGV4ICYmCisJCWVjaG8gIiRiYXNlIiA+Li4vcGF0Y2gtbWVyZ2UtYmFzZQorCSAgICApIDwiJGRvdGVzdC9wYXRjaCIgIDI+L2Rldi9udWxsICYmIGJyZWFrCisJZG9uZQorICAgIGZpCisKKyAgICB0ZXN0IC1mICIkZG90ZXN0L3BhdGNoLW1lcmdlLWluZGV4IiAmJgorICAgIGhpc190cmVlPSQoR0lUX0lOREVYX0ZJTEU9IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtaW5kZXgiIGdpdC13cml0ZS10cmVlKSAmJgorICAgIG9yaWdfdHJlZT0kKGNhdCAiJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlIikgJiYKKyAgICBybSAtZnIgIiRkb3Rlc3QiL3BhdGNoLW1lcmdlLSogfHwgZXhpdCAxCisKKyAgICBlY2hvIEZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLgorCisgICAgIyBUaGlzIGlzIG5vdCBzbyB3cm9uZy4gIERlcGVuZGluZyBvbiB3aGljaCBiYXNlIHdlIHBpY2tlZCwKKyAgICAjIG9yaWdfdHJlZSBtYXkgYmUgd2lsZGx5IGRpZmZlcmVudCBmcm9tIG91cnMsIGJ1dCBoaXNfdHJlZQorICAgICMgaGFzIHRoZSBzYW1lIHNldCBvZiB3aWxkbHkgZGlmZmVyZW50IGNoYW5nZXMgaW4gcGFydHMgdGhlCisgICAgIyBwYXRjaCBkaWQgbm90IHRvdWNoLCBzbyByZXNvbHZlIGVuZHMgdXAgY2FuY2VsbGluZyB0aGVtLAorICAgICMgc2F5aW5nIHRoYXQgd2UgcmV2ZXJ0ZWQgYWxsIHRob3NlIGNoYW5nZXMuCisKKyAgICBnaXQtbWVyZ2UtcmVzb2x2ZSAkb3JpZ190cmVlIC0tIEhFQUQgJGhpc190cmVlIHx8IHsKKwkgICAgZWNobyBGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuCisJICAgIGV4aXQgMQorICAgIH0KK30KKworcHJlYz00Citkb3Rlc3Q9LmRvdGVzdCBzaWduPSB1dGY4PSBrZWVwPSBza2lwPSBpbnRlcmFjdGl2ZT0KKword2hpbGUgY2FzZSAiJCMiIGluIDApIGJyZWFrOzsgZXNhYworZG8KKwljYXNlICIkMSIgaW4KKwktZD0qfC0tZD0qfC0tZG89KnwtLWRvdD0qfC0tZG90ZT0qfC0tZG90ZXM9KnwtLWRvdGVzdD0qKQorCWRvdGVzdD1gZXhwciAiJDEiIDogJy1bXj1dKj1cKC4qXCknYDsgc2hpZnQgOzsKKwktZHwtLWR8LS1kb3wtLWRvdHwtLWRvdGV8LS1kb3Rlc3wtLWRvdGVzdCkKKwljYXNlICIkIyIgaW4gMSkgdXNhZ2UgOzsgZXNhYzsgc2hpZnQKKwlkb3Rlc3Q9IiQxIjsgc2hpZnQ7OworCisJLWl8LS1pfC0taW58LS1pbnR8LS1pbnRlfC0taW50ZXJ8LS1pbnRlcmF8LS1pbnRlcmFjfC0taW50ZXJhY3R8XAorCS0taW50ZXJhY3RpfC0taW50ZXJhY3RpdnwtLWludGVyYWN0aXZlKQorCWludGVyYWN0aXZlPXQ7IHNoaWZ0IDs7CisKKwktM3wtLTN8LS0zd3wtLTN3YXwtLTN3YXkpCisJdGhyZWV3YXk9dDsgc2hpZnQgOzsKKwktc3wtLXN8LS1zaXwtLXNpZ3wtLXNpZ258LS1zaWdub3wtLXNpZ25vZnwtLXNpZ25vZmYpCisJc2lnbj10OyBzaGlmdCA7OworCS11fC0tdXwtLXV0fC0tdXRmfC0tdXRmOCkKKwl1dGY4PXQ7IHNoaWZ0IDs7CisJLWt8LS1rfC0ta2V8LS1rZWV8LS1rZWVwKQorCWtlZXA9dDsgc2hpZnQgOzsKKworCS0tc2t8LS1za2l8LS1za2lwKQorCXNraXA9dDsgc2hpZnQgOzsKKworCS0tKQorCXNoaWZ0OyBicmVhayA7OworCS0qKQorCXVzYWdlIDs7CisJKikKKwlicmVhayA7OworCWVzYWMKK2RvbmUKKworaWYgdGVzdCAtZCAiJGRvdGVzdCIgJiYKKyAgIGxhc3Q9JChjYXQgIiRkb3Rlc3QvbGFzdCIpICYmCisgICBuZXh0PSQoY2F0ICIkZG90ZXN0L25leHQiKSAmJgorICAgdGVzdCAkIyAhPSAwICYmCisgICB0ZXN0ICIkbmV4dCIgLWd0ICIkbGFzdCIKK3RoZW4KKyAgIHJtIC1mciAiJGRvdGVzdCIKK2ZpCisKK2lmIHRlc3QgLWQgIiRkb3Rlc3QiCit0aGVuCisJdGVzdCAiLCQjLCIgPSAiLDAsIiB8fAorCWRpZSAicHJldmlvdXMgZG90ZXN0IGRpcmVjdG9yeSAkZG90ZXN0IHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCisJcmVzdW1lPXllcworZWxzZQorCSMgTWFrZSBzdXJlIHdlIGFyZSBub3QgZ2l2ZW4gLS1za2lwCisJdGVzdCAiLCRza2lwLCIgPSAsLCB8fAorCWRpZSAid2UgYXJlIG5vdCByZXN1bWluZy4iCisKKwkjIFN0YXJ0IGFmcmVzaC4KKwlta2RpciAtcCAiJGRvdGVzdCIgfHwgZXhpdAorCisJIyBjYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9yIHVzLCBpbmNsdWRpbmcgJy0nIHRvIG1lYW4KKwkjIHN0YW5kYXJkIGlucHV0LgorCWNhdCAiJEAiIHwKKwlnaXQtbWFpbHNwbGl0IC1kJHByZWMgIiRkb3Rlc3QvIiA+IiRkb3Rlc3QvbGFzdCIgfHwgeworCQlybSAtZnIgIiRkb3Rlc3QiCisJCWV4aXQgMQorCX0KKworCWVjaG8gIiRzaWduIiA+IiRkb3Rlc3Qvc2lnbiIKKwllY2hvICIkdXRmOCIgPiIkZG90ZXN0L3V0ZjgiCisJZWNobyAiJGtlZXAiID4iJGRvdGVzdC9rZWVwIgorCWVjaG8gMSA+IiRkb3Rlc3QvbmV4dCIKK2ZpCisKK2lmIHRlc3QgIiQoY2F0ICIkZG90ZXN0L3V0ZjgiKSIgPSB0Cit0aGVuCisJdXRmOD0tdQorZmkKK2lmIHRlc3QgIiQoY2F0ICIkZG90ZXN0L2tlZXAiKSIgPSB0Cit0aGVuCisJa2VlcD0taworZmkKK2lmIHRlc3QgIiQoY2F0ICIkZG90ZXN0L3NpZ24iKSIgPSB0Cit0aGVuCisJU0lHTk9GRj1gZ2l0LXZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwgc2VkIC1lICcKKwkJCXMvPi4qLz4vCisJCQlzL14vU2lnbmVkLW9mZi1ieTogLycKKwkJYAorZWxzZQorCVNJR05PRkY9CitmaQorCitsYXN0PWBjYXQgIiRkb3Rlc3QvbGFzdCJgCit0aGlzPWBjYXQgIiRkb3Rlc3QvbmV4dCJgCitpZiB0ZXN0ICIkc2tpcCIgPSB0Cit0aGVuCisJdGhpcz1gZXhwciAiJHRoaXMiICsgMWAKK2ZpCisKK2lmIHRlc3QgIiR0aGlzIiAtZ3QgIiRsYXN0IgordGhlbgorCWVjaG8gTm90aGluZyB0byBkby4KKwlybSAtZnIgIiRkb3Rlc3QiCisJZXhpdAorZmkKKword2hpbGUgdGVzdCAiJHRoaXMiIC1sZSAiJGxhc3QiCitkbworCW1zZ251bT1gcHJpbnRmICIlMCR7cHJlY31kIiAkdGhpc2AKKwluZXh0PWBleHByICIkdGhpcyIgKyAxYAorCXRlc3QgLWYgIiRkb3Rlc3QvJG1zZ251bSIgfHwgeworCQlnb19uZXh0CisJCWNvbnRpbnVlCisJfQorCWNhc2UgIiRyZXN1bWUiIGluCisJJycpCisJCWdpdC1tYWlsaW5mbyAka2VlcCAkdXRmOCAiJGRvdGVzdC9tc2ciICIkZG90ZXN0L3BhdGNoIiBcCisJCQk8IiRkb3Rlc3QvJG1zZ251bSIgPiIkZG90ZXN0L2luZm8iIHx8CisJCQlzdG9wX2hlcmUgJHRoaXMKKwkJZ2l0LXN0cmlwc3BhY2UgPCAiJGRvdGVzdC9tc2ciID4gIiRkb3Rlc3QvbXNnLWNsZWFuIgorCQk7OworCWVzYWMKKwlyZXN1bWU9CisKKwlHSVRfQVVUSE9SX05BTUU9IiQoc2VkIC1uICcvXkF1dGhvci8gcy9BdXRob3I6IC8vcCcgIiRkb3Rlc3QvaW5mbyIpIgorCUdJVF9BVVRIT1JfRU1BSUw9IiQoc2VkIC1uICcvXkVtYWlsLyBzL0VtYWlsOiAvL3AnICIkZG90ZXN0L2luZm8iKSIKKwlHSVRfQVVUSE9SX0RBVEU9IiQoc2VkIC1uICcvXkRhdGUvIHMvRGF0ZTogLy9wJyAiJGRvdGVzdC9pbmZvIikiCisJU1VCSkVDVD0iJChzZWQgLW4gJy9eU3ViamVjdC8gcy9TdWJqZWN0OiAvL3AnICIkZG90ZXN0L2luZm8iKSIKKwlleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwgR0lUX0FVVEhPUl9EQVRFCisKKwljYXNlICIka2VlcF9zdWJqZWN0IiBpbiAtaykgIFNVQkpFQ1Q9IltQQVRDSF0gJFNVQkpFQ1QiIDs7IGVzYWMKKwlpZiB0ZXN0ICcnICE9ICIkU0lHTk9GRiIKKwl0aGVuCisJCUxBU1RfU0lHTkVEX09GRl9CWT1gCisJCQlzZWQgLW5lICcvXlNpZ25lZC1vZmYtYnk6IC9wJyAiJGRvdGVzdC9tc2ctY2xlYW4iIHwKKwkJCXRhaWwgLW4gMQorCQlgCisJCUFERF9TSUdOT0ZGPSQodGVzdCAiJExBU1RfU0lHTkVEX09GRl9CWSIgPSAiJFNJR05PRkYiIHx8IHsKKwkJICAgIHRlc3QgJycgPSAiJExBU1RfU0lHTkVEX09GRl9CWSIgJiYgZWNobworCQkgICAgZWNobyAiJFNJR05PRkYiCisJCX0pCisJZWxzZQorCQlBRERfU0lHTk9GRj0KKwlmaQorCXsKKwkJZWNobyAiJFNVQkpFQ1QiCisJCWlmIHRlc3QgLXMgIiRkb3Rlc3QvbXNnLWNsZWFuIgorCQl0aGVuCisJCQllY2hvCisJCQljYXQgIiRkb3Rlc3QvbXNnLWNsZWFuIgorCQlmaQorCQlpZiB0ZXN0ICcnICE9ICIkQUREX1NJR05PRkYiCisJCXRoZW4KKwkJCWVjaG8gIiRBRERfU0lHTk9GRiIKKwkJZmkKKwl9ID4iJGRvdGVzdC9maW5hbC1jb21taXQiCisKKwlpZiB0ZXN0ICIkaW50ZXJhY3RpdmUiID0gdAorCXRoZW4KKwkgICAgdGVzdCAtdCAwIHx8CisJICAgIGRpZSAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorCSAgICBhY3Rpb249YWdhaW4KKwkgICAgd2hpbGUgdGVzdCAiJGFjdGlvbiIgPSBhZ2FpbgorCSAgICBkbworCQllY2hvICJDb21taXQgQm9keSBpczoiCisJCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQljYXQgIiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCQllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJZWNobyAtbiAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorCQlyZWFkIHJlcGx5CisJCWNhc2UgIiRyZXBseSIgaW4KKwkJW3lZXSopIGFjdGlvbj15ZXMgOzsKKwkJW2FBXSopIGFjdGlvbj15ZXMgaW50ZXJhY3RpdmU9IDs7CisJCVtuTl0qKSBhY3Rpb249c2tpcCA7OworCQlbZUVdKikgIiR7VklTVUFMOi0ke0VESVRPUjotdml9fSIgIiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCQkgICAgICAgYWN0aW9uPWFnYWluIDs7CisJCVt2Vl0qKSBhY3Rpb249YWdhaW4KKwkJICAgICAgIExFU1M9LVMgJHtQQUdFUjotbGVzc30gIiRkb3Rlc3QvcGF0Y2giIDs7CisJCSopICAgICBhY3Rpb249YWdhaW4gOzsKKwkJZXNhYworCSAgICBkb25lCisJZWxzZQorCSAgICBhY3Rpb249eWVzCisJZmkKKworCWlmIHRlc3QgJGFjdGlvbiA9IHNraXAKKwl0aGVuCisJCWdvX25leHQKKwkJY29udGludWUKKwlmaQorCisJaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL2FwcGx5cGF0Y2gtbXNnCisJdGhlbgorCQkiJEdJVF9ESVIiL2hvb2tzL2FwcGx5cGF0Y2gtbXNnICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIgfHwKKwkJc3RvcF9oZXJlICR0aGlzCisJZmkKKworCWVjaG8KKwllY2hvICJBcHBseWluZyAnJFNVQkpFQ1QnIgorCWVjaG8KKworCWdpdC1hcHBseSAtLWluZGV4ICIkZG90ZXN0L3BhdGNoIjsgYXBwbHlfc3RhdHVzPSQ/CisJaWYgdGVzdCAkYXBwbHlfc3RhdHVzID0gMSAmJiB0ZXN0ICIkdGhyZWV3YXkiID0gdAorCXRoZW4KKwkJaWYgKGZhbGxfYmFja18zd2F5KQorCQl0aGVuCisJCSAgICAjIEFwcGx5aW5nIHRoZSBwYXRjaCB0byBhbiBlYXJsaWVyIHRyZWUgYW5kIG1lcmdpbmcgdGhlCisJCSAgICAjIHJlc3VsdCBtYXkgaGF2ZSBwcm9kdWNlZCB0aGUgc2FtZSB0cmVlIGFzIG91cnMuCisJCSAgICBjaGFuZ2VkPSIkKGdpdC1kaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1vbmx5IC16IEhFQUQpIgorCQkgICAgaWYgdGVzdCAnJyA9ICIkY2hhbmdlZCIKKwkJICAgIHRoZW4KKwkJCSAgICBlY2hvIE5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLgorCQkJICAgIGdvX25leHQKKwkJCSAgICBjb250aW51ZQorCQkgICAgZmkKKwkJICAgICMgY2xlYXIgYXBwbHlfc3RhdHVzIC0tIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IG1lcmdlZC4KKwkJICAgIGFwcGx5X3N0YXR1cz0wCisJCWZpCisJZmkKKwlpZiB0ZXN0ICRhcHBseV9zdGF0dXMgIT0gMAorCXRoZW4KKwkJZWNobyBQYXRjaCBmYWlsZWQgYXQgJG1zZ251bS4KKwkJc3RvcF9oZXJlICR0aGlzCisJZmkKKworCWlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wcmUtYXBwbHlwYXRjaAorCXRoZW4KKwkJIiRHSVRfRElSIi9ob29rcy9wcmUtYXBwbHlwYXRjaCB8fCBzdG9wX2hlcmUgJHRoaXMKKwlmaQorCisJdHJlZT0kKGdpdC13cml0ZS10cmVlKSAmJgorCWVjaG8gV3JvdGUgdHJlZSAkdHJlZSAmJgorCXBhcmVudD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwljb21taXQ9JChnaXQtY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCA8IiRkb3Rlc3QvZmluYWwtY29tbWl0IikgJiYKKwllY2hvIENvbW1pdHRlZDogJGNvbW1pdCAmJgorCWdpdC11cGRhdGUtcmVmIEhFQUQgJGNvbW1pdCAkcGFyZW50IHx8CisJc3RvcF9oZXJlICR0aGlzCisKKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1hcHBseXBhdGNoCisJdGhlbgorCQkiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtYXBwbHlwYXRjaAorCWZpCisKKwlnb19uZXh0Citkb25lCisKK3JtIC1mciAiJGRvdGVzdCIKZGlmZiAtLWdpdCBhL2dpdC1hcHBseW1ib3guc2ggYi9naXQtYXBwbHltYm94LnNoCmluZGV4IGUyYmZkMDIuLjZkZTY5MzIgMTAwNzU1Ci0tLSBhL2dpdC1hcHBseW1ib3guc2gKKysrIGIvZ2l0LWFwcGx5bWJveC5zaApAQCAtOSwxOSArOSwxOSBAQAogIyMgWW91IGdpdmUgaXQgYSBtYm94LWZvcm1hdCBjb2xsZWN0aW9uIG9mIGVtYWlscywgYW5kIGl0IHdpbGwgdHJ5IHRvCiAjIyBhcHBseSB0aGVtIHRvIHRoZSBrZXJuZWwgdXNpbmcgImFwcGx5cGF0Y2giCiAjIwotIyMgYXBwbHltYm94IFstdV0gWy1rXSBbLXFdICgtYyAuZG90ZXN0L21zZy1udW1iZXIgfCBtYWlsX2FyY2hpdmUpIFtTaWdub2ZmX2ZpbGVdIgotIyMKICMjIFRoZSBwYXRjaCBhcHBsaWNhdGlvbiBtYXkgZmFpbCBpbiB0aGUgbWlkZGxlLiAgSW4gd2hpY2ggY2FzZToKICMjICgxKSBsb29rIGF0IC5kb3Rlc3QvcGF0Y2ggYW5kIGZpeCBpdCB1cCB0byBhcHBseQogIyMgKDIpIHJlLXJ1biBhcHBseW1ib3ggd2l0aCAtYyAuZG90ZXN0L21zZy1udW1iZXIgZm9yIHRoZSBjdXJyZW50IG9uZS4KICMjIFBheSBhIHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaWYgeW91IGRvIHRoaXMgYW5kCiAjIyB1c2UgYSBTaWdub2ZmX2ZpbGUsIGJlY2F1c2UgYXBwbHlwYXRjaCB3YW50cyB0byBhcHBlbmQgdGhlIHNpZ24tb2ZmCiAjIyBtZXNzYWdlIHRvIG1zZy1jbGVhbiBldmVyeSB0aW1lIGl0IGlzIHJ1bi4KKyMjCisjIyBnaXQtYW0gaXMgc3VwcG9zZWQgdG8gYmUgdGhlIG5ld2VyIGFuZCBiZXR0ZXIgdG9vbCBmb3IgdGhpcyBqb2IuCiAKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKIHVzYWdlICgpIHsKLSAgICBlY2hvID4mMiAiYXBwbHltYm94IFstdV0gWy1rXSBbLXFdICgtYyAuZG90ZXN0LzxudW0+IHwgbWJveCkgW3NpZ25vZmZdIgorICAgIGVjaG8gPiYyICJhcHBseW1ib3ggWy11XSBbLWtdIFstcV0gWy1tXSAoLWMgLmRvdGVzdC88bnVtPiB8IG1ib3gpIFtzaWdub2ZmXSIKICAgICBleGl0IDEKIH0KIApAQCAtMzMsNiArMzMsNyBAQAogCS1rKQlrZWVwX3N1YmplY3Q9LWsgOzsKIAktcSkJcXVlcnlfYXBwbHk9dCA7OwogCS1jKQljb250aW51ZT0iJDIiOyByZXN1bWU9Zjsgc2hpZnQgOzsKKwktbSkJZmFsbGJhY2tfM3dheT10IDs7CiAJLSopCXVzYWdlIDs7CiAJKikJYnJlYWsgOzsKIAllc2FjCkBAIC00Myw3ICs0NCw4IEBACiAnJykKIAlybSAtcmYgLmRvdGVzdAogCW1rZGlyIC5kb3Rlc3QKLQlnaXQtbWFpbHNwbGl0ICIkMSIgLmRvdGVzdCB8fCBleGl0IDEKKwludW1fbXNncz0kKGdpdC1tYWlsc3BsaXQgIiQxIiAuZG90ZXN0KSB8fCBleGl0IDEKKwllY2hvICIkbnVtX21zZ3MgcGF0Y2goZXMpIHRvIHByb2Nlc3MuIgogCXNoaWZ0CiBlc2FjCiAKQEAgLTU2LDYgKzU4LDkgQEAKIGNhc2UgIiRxdWVyeV9hcHBseSIgaW4KIHQpCXRvdWNoIC5kb3Rlc3QvLnF1ZXJ5X2FwcGx5CiBlc2FjCitjYXNlICIkZmFsbF9iYWNrXzN3YXkiIGluCit0KQk6ID4uZG90ZXN0Ly4zd2F5Citlc2FjCiBjYXNlICIka2VlcF9zdWJqZWN0IiBpbgogLWspCTogPi5kb3Rlc3QvLmtlZXBfc3ViamVjdAogZXNhYwpAQCAtODAsNyArODUsMTEgQEAKICAgICBkbwogCWdpdC1hcHBseXBhdGNoIC5kb3Rlc3QvbXNnLWNsZWFuIC5kb3Rlc3QvcGF0Y2ggLmRvdGVzdC9pbmZvICIkc2lnbm9mZiIKIAljYXNlICIkPyIgaW4KLQkwIHwgMiApCisJMCkKKwkJIyBSZW1vdmUgdGhlIGNsZWFubHkgYXBwbGllZCBvbmUgdG8gcmVkdWNlIGNsdXR0ZXIuCisJCXJtIC1mIC5kb3Rlc3QvJGkKKwkJOzsKKwkyKQogCQkjIDIgaXMgYSBzcGVjaWFsIGV4aXQgY29kZSBmcm9tIGFwcGx5cGF0Y2ggdG8gaW5kaWNhdGUgdGhhdAogCSAgICAJIyB0aGUgcGF0Y2ggd2Fzbid0IGFwcGxpZWQsIGJ1dCBjb250aW51ZSBhbnl3YXkgCiAJCTs7CmRpZmYgLS1naXQgYS9naXQtYXBwbHlwYXRjaC5zaCBiL2dpdC1hcHBseXBhdGNoLnNoCmluZGV4IDlmNWE0NWIuLjY2ZmQxOWEgMTAwNzU1Ci0tLSBhL2dpdC1hcHBseXBhdGNoLnNoCisrKyBiL2dpdC1hcHBseXBhdGNoLnNoCkBAIC0yMiw2ICsyMiw4IEBACiAjIyBpZiB0aGlzIGZpbGUgZXhpc3RzLgoga2VlcF9zdWJqZWN0PS5kb3Rlc3QvLmtlZXBfc3ViamVjdAogCisjIyBXZSBkbyBub3QgYXR0ZW1wdCB0aGUgMy13YXkgbWVyZ2UgZmFsbGJhY2sgdW5sZXNzIHRoaXMgZmlsZSBleGlzdHMuCitmYWxsX2JhY2tfM3dheT0uZG90ZXN0Ly4zd2F5CiAKIE1TR0ZJTEU9JDEKIFBBVENIRklMRT0kMgpAQCAtMjksMTAgKzMxLDEwIEBACiBTSUdOT0ZGPSQ0CiBFRElUPSR7VklTVUFMOi0ke0VESVRPUjotdml9fQogCi1leHBvcnQgR0lUX0FVVEhPUl9OQU1FPSIkKHNlZCAtbiAnL15BdXRob3IvIHMvQXV0aG9yOiAvL3AnIC5kb3Rlc3QvaW5mbykiCi1leHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJChzZWQgLW4gJy9eRW1haWwvIHMvRW1haWw6IC8vcCcgLmRvdGVzdC9pbmZvKSIKLWV4cG9ydCBHSVRfQVVUSE9SX0RBVEU9IiQoc2VkIC1uICcvXkRhdGUvIHMvRGF0ZTogLy9wJyAuZG90ZXN0L2luZm8pIgotZXhwb3J0IFNVQkpFQ1Q9IiQoc2VkIC1uICcvXlN1YmplY3QvIHMvU3ViamVjdDogLy9wJyAuZG90ZXN0L2luZm8pIgorZXhwb3J0IEdJVF9BVVRIT1JfTkFNRT0iJChzZWQgLW4gJy9eQXV0aG9yLyBzL0F1dGhvcjogLy9wJyAiJElORk8iKSIKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMPSIkKHNlZCAtbiAnL15FbWFpbC8gcy9FbWFpbDogLy9wJyAiJElORk8iKSIKK2V4cG9ydCBHSVRfQVVUSE9SX0RBVEU9IiQoc2VkIC1uICcvXkRhdGUvIHMvRGF0ZTogLy9wJyAiJElORk8iKSIKK2V4cG9ydCBTVUJKRUNUPSIkKHNlZCAtbiAnL15TdWJqZWN0LyBzL1N1YmplY3Q6IC8vcCcgIiRJTkZPIikiCiAKIGlmIHRlc3QgJycgIT0gIiRTSUdOT0ZGIgogdGhlbgpAQCAtNTQsOCArNTYsMTAgQEAKIAkJCXNlZCAtbmUgJy9eU2lnbmVkLW9mZi1ieTogL3AnICIkTVNHRklMRSIgfAogCQkJdGFpbCAtbiAxCiAJCWAKLQkJdGVzdCAiJExBU1RfU0lHTkVEX09GRl9CWSIgPSAiJFNJR05PRkYiIHx8Ci0JCWVjaG8gIiRTSUdOT0ZGIiA+PiIkTVNHRklMRSIKKwkJdGVzdCAiJExBU1RfU0lHTkVEX09GRl9CWSIgPSAiJFNJR05PRkYiIHx8IHsKKwkJICAgIHRlc3QgJycgPSAiJExBU1RfU0lHTkVEX09GRl9CWSIgJiYgZWNobworCQkgICAgZWNobyAiJFNJR05PRkYiCisJCX0gPj4iJE1TR0ZJTEUiCiAJZmkKIGZpCiAKQEAgLTk5LDcgKzEwMyw4MSBAQAogZWNobyBBcHBseWluZyAiJyRTVUJKRUNUJyIKIGVjaG8KIAotZ2l0LWFwcGx5IC0taW5kZXggIiRQQVRDSEZJTEUiIHx8IGV4aXQgMQorZ2l0LWFwcGx5IC0taW5kZXggIiRQQVRDSEZJTEUiIHx8IHsKKworCSMgZ2l0LWFwcGx5IGV4aXRzIHdpdGggc3RhdHVzIDEgd2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHksCisJIyBidXQgaXQgZGllKClzIHdpdGggb3RoZXIgZmFpbHVyZXMsIG1vc3Qgbm90YWJseSB1cG9uIGNvcnJ1cHQKKwkjIHBhdGNoLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGVyZSBpcyBubyBwb2ludCB0byB0cnkgYXBwbHlpbmcKKwkjIGl0IHRvIGFub3RoZXIgdHJlZSBhbmQgZG8gMy13YXkgbWVyZ2UuCisJdGVzdCAkPyA9IDEgfHwgZXhpdCAxCisKKwl0ZXN0IC1mICIkZmFsbF9iYWNrXzN3YXkiIHx8IGV4aXQgMQorCisJIyBIZXJlIGlmIHdlIGtub3cgd2hpY2ggcmV2aXNpb24gdGhlIHBhdGNoIGFwcGxpZXMgdG8sCisJIyB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkgd29ya2luZyB0cmVlIGFuZCBpbmRleCwgYXBwbHkgdGhlCisJIyBwYXRjaCwgYW5kIGF0dGVtcHQgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgcmVzdWx0aW5nIHRyZWUuCisKKwlPX09CSkVDVD1gY2QgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIgJiYgcHdkYAorCXJtIC1mciAucGF0Y2gtbWVyZ2UtKgorCisJKAorCQlOPTEwCisKKwkJIyBpZiB0aGUgcGF0Y2ggcmVjb3JkcyB0aGUgYmFzZSB0cmVlLi4uCisJCXNlZCAtbmUgJworCQkJL15kaWZmIC9xCisJCQkvXmFwcGxpZXMtdG86IFwoWzAtOWEtZl0qXCkkL3sKKwkJCQlzLy9cMS9wCisJCQkJcQorCQkJfQorCQknICIkUEFUQ0hGSUxFIgorCisJCSMgb3IgaG9waW5nIHRoZSBwYXRjaCBpcyBhZ2FpbnN0IG91ciByZWNlbnQgY29tbWl0cy4uLgorCQlnaXQtcmV2LWxpc3QgLS1tYXgtY291bnQ9JE4gSEVBRAorCisJCSMgb3IgaG9waW5nIHRoZSBwYXRjaCBpcyBhZ2FpbnN0IGtub3duIHRhZ3MuLi4KKwkJZ2l0LWxzLXJlbW90ZSAtLXRhZ3MgLgorCSkgfAorCXdoaWxlIHJlYWQgYmFzZSBqdW5rCisJZG8KKwkJIyBUcnkgaXQgaWYgd2UgaGF2ZSBpdCBhcyBhIHRyZWUuCisJCWdpdC1jYXQtZmlsZSB0cmVlICIkYmFzZSIgPi9kZXYvbnVsbCAyPiYxIHx8IGNvbnRpbnVlCisKKwkJcm0gLWZyIC5wYXRjaC1tZXJnZS10bXAtKiAmJgorCQlta2RpciAucGF0Y2gtbWVyZ2UtdG1wLWRpciB8fCBicmVhaworCQkoCisJCQljZCAucGF0Y2gtbWVyZ2UtdG1wLWRpciAmJgorCQkJR0lUX0lOREVYX0ZJTEU9Li4vLnBhdGNoLW1lcmdlLXRtcC1pbmRleCAmJgorCQkJR0lUX09CSkVDVF9ESVJFQ1RPUlk9IiRPX09CSkVDVCIgJiYKKwkJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorCQkJZ2l0LXJlYWQtdHJlZSAiJGJhc2UiICYmCisJCQlnaXQtYXBwbHkgLS1pbmRleCAmJgorCQkJbXYgLi4vLnBhdGNoLW1lcmdlLXRtcC1pbmRleCAuLi8ucGF0Y2gtbWVyZ2UtaW5kZXggJiYKKwkJCWVjaG8gIiRiYXNlIiA+Li4vLnBhdGNoLW1lcmdlLWJhc2UKKwkJKSA8IiRQQVRDSEZJTEUiICAyPi9kZXYvbnVsbCAmJiBicmVhaworCWRvbmUKKworCXRlc3QgLWYgLnBhdGNoLW1lcmdlLWluZGV4ICYmCisJaGlzX3RyZWU9JChHSVRfSU5ERVhfRklMRT0ucGF0Y2gtbWVyZ2UtaW5kZXggZ2l0LXdyaXRlLXRyZWUpICYmCisJb3JpZ190cmVlPSQoY2F0IC5wYXRjaC1tZXJnZS1iYXNlKSAmJgorCXJtIC1mciAucGF0Y2gtbWVyZ2UtKiB8fCBleGl0IDEKKworCWVjaG8gRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlIHVzaW5nICRvcmlnX3RyZWUuLi4KKworCSMgVGhpcyBpcyBub3Qgc28gd3JvbmcuICBEZXBlbmRpbmcgb24gd2hpY2ggYmFzZSB3ZSBwaWNrZWQsCisJIyBvcmlnX3RyZWUgbWF5IGJlIHdpbGRseSBkaWZmZXJlbnQgZnJvbSBvdXJzLCBidXQgaGlzX3RyZWUKKwkjIGhhcyB0aGUgc2FtZSBzZXQgb2Ygd2lsZGx5IGRpZmZlcmVudCBjaGFuZ2VzIGluIHBhcnRzIHRoZQorCSMgcGF0Y2ggZGlkIG5vdCB0b3VjaCwgc28gcmVzb2x2ZSBlbmRzIHVwIGNhbmNlbGxpbmcgdGhlbSwKKwkjIHNheWluZyB0aGF0IHdlIHJldmVydGVkIGFsbCB0aG9zZSBjaGFuZ2VzLgorCisJaWYgZ2l0LW1lcmdlLXJlc29sdmUgJG9yaWdfdHJlZSAtLSBIRUFEICRoaXNfdHJlZQorCXRoZW4KKwkJZWNobyBEb25lLgorCWVsc2UKKwkJZWNobyBGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuCisJCWV4aXQgMQorCWZpCit9CiAKIGlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wcmUtYXBwbHlwYXRjaAogdGhlbgpkaWZmIC0tZ2l0IGEvZ2l0LWNoZWNrb3V0LnNoIGIvZ2l0LWNoZWNrb3V0LnNoCmluZGV4IDJjMDUzYTMuLmNiMzNmZGMgMTAwNzU1Ci0tLSBhL2dpdC1jaGVja291dC5zaAorKysgYi9naXQtY2hlY2tvdXQuc2gKQEAgLTEsNiArMSwxMCBAQAogIyEvYmluL3NoCiAuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgogCit1c2FnZSAoKSB7CisgICAgZGllICJ1c2FnZTogZ2l0IGNoZWNrb3V0IFstZl0gWy1iIDxuZXdfYnJhbmNoPl0gWzxicmFuY2g+XSBbPHBhdGhzPi4uLl0iCit9CisKIG9sZD0kKGdpdC1yZXYtcGFyc2UgSEVBRCkKIG5ldz0KIGZvcmNlPQpAQCAtMjMsMzIgKzI3LDg0IEBACiAJIi1mIikKIAkJZm9yY2U9MQogCQk7OworCS0tKQorCQlicmVhaworCQk7OworCS0qKQorCQl1c2FnZQorCQk7OwogCSopCi0JCXJldj0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRhcmdeMCIgMj4vZGV2L251bGwpIHx8Ci0JCQlkaWUgIkkgZG9uJ3Qga25vdyBhbnkgJyRhcmcnLiIKLQkJaWYgWyAteiAiJHJldiIgXTsgdGhlbgotCQkJZWNobyAidW5rbm93biBmbGFnICRhcmciCi0JCQlleGl0IDEKKwkJaWYgcmV2PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJGFyZ14wIiAyPi9kZXYvbnVsbCkKKwkJdGhlbgorCQkJaWYgWyAteiAiJHJldiIgXTsgdGhlbgorCQkJCWVjaG8gInVua25vd24gZmxhZyAkYXJnIgorCQkJCWV4aXQgMQorCQkJZmkKKwkJCW5ldz0iJHJldiIKKwkJCWlmIFsgLWYgIiRHSVRfRElSL3JlZnMvaGVhZHMvJGFyZyIgXTsgdGhlbgorCQkJCWJyYW5jaD0iJGFyZyIKKwkJCWZpCisJCWVsaWYgcmV2PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJGFyZ157dHJlZX0iIDI+L2Rldi9udWxsKQorCQl0aGVuCisJCQkjIGNoZWNraW5nIG91dCBzZWxlY3RlZCBwYXRocyBmcm9tIGEgdHJlZS1pc2guCisJCQluZXc9IiRyZXYiCisJCQlicmFuY2g9CisJCWVsc2UKKwkJCW5ldz0KKwkJCWJyYW5jaD0KKwkJCXNldCB4ICIkYXJnIiAiJEAiCisJCQlzaGlmdAogCQlmaQotCQlpZiBbICIkbmV3IiBdOyB0aGVuCi0JCQllY2hvICJNdWx0aXBsZSByZXZpc2lvbnM/IgotCQkJZXhpdCAxCi0JCWZpCi0JCW5ldz0iJHJldiIKLQkJaWYgWyAtZiAiJEdJVF9ESVIvcmVmcy9oZWFkcy8kYXJnIiBdOyB0aGVuCi0JCQlicmFuY2g9IiRhcmciCi0JCWZpCisJCWJyZWFrCiAJCTs7CiAgICAgZXNhYwogZG9uZQorCisjIFRoZSBiZWhhdmlvdXIgb2YgdGhlIGNvbW1hbmQgd2l0aCBhbmQgd2l0aG91dCBleHBsaWNpdCBwYXRoCisjIHBhcmFtZXRlcnMgaXMgcXVpdGUgZGlmZmVyZW50LgorIworIyBXaXRob3V0IHBhdGhzLCB3ZSBhcmUgY2hlY2tpbmcgb3V0IGV2ZXJ5dGhpbmcgaW4gdGhlIHdvcmsgdHJlZSwKKyMgcG9zc2libHkgc3dpdGNoaW5nIGJyYW5jaGVzLiAgVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3VyLgorIworIyBXaXRoIHBhdGhzLCB3ZSBhcmUgX25ldmVyXyBzd2l0Y2hpbmcgYnJhbmNoLCBidXQgY2hlY2tpbmcgb3V0CisjIHRoZSBuYW1lZCBwYXRocyBmcm9tIGVpdGhlciBpbmRleCAod2hlbiBubyByZXYgaXMgZ2l2ZW4pLAorIyBvciB0aGUgbmFtZWQgdHJlZS1pc2ggKHdoZW4gcmV2IGlzIGdpdmVuKS4KKworaWYgdGVzdCAiJCMiIC1nZSAxCit0aGVuCisJaWYgdGVzdCAnJyAhPSAiJG5ld2JyYW5jaCRmb3JjZSIKKwl0aGVuCisJCWRpZSAidXBkYXRpbmcgcGF0aHMgYW5kIHN3aXRjaGluZyBicmFuY2hlcyBvciBmb3JjaW5nIGFyZSBpbmNvbXBhdGlibGUuIgorCWZpCisJaWYgdGVzdCAnJyAhPSAiJG5ldyIKKwl0aGVuCisJCSMgZnJvbSBhIHNwZWNpZmljIHRyZWUtaXNoOyBub3RlIHRoYXQgdGhpcyBpcyBmb3IKKwkJIyByZXNjdWluZyBwYXRocyBhbmQgaXMgbmV2ZXIgbWVhbnQgdG8gcmVtb3ZlIHdoYXQKKwkJIyBpcyBub3QgaW4gdGhlIG5hbWVkIHRyZWUtaXNoLgorCQlnaXQtbHMtdHJlZSAtciAiJG5ldyIgIiRAIiB8CisJCXNlZCAtbmUgJ3MvXlwoWzAtN10qXCkgYmxvYiBcKC4qXCkkL1wxIFwyL3AnIHwKKwkJZ2l0LXVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gfHwgZXhpdCAkPworCWZpCisJZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11IC0tICIkQCIKKwlleGl0ICQ/CitlbHNlCisJIyBNYWtlIHN1cmUgd2UgZGlkIG5vdCBmYWxsIGJhY2sgb24gJGFyZ157dHJlZX0gY29kZXBhdGgKKwkjIHNpbmNlIHdlIGFyZSBub3QgY2hlY2tpbmcgb3V0IGZyb20gYW4gYXJiaXRyYXJ5IHRyZWUtaXNoLAorCSMgYnV0IHN3aXRjaGluZyBicmFuY2hlcy4KKwlpZiB0ZXN0ICcnICE9ICIkbmV3IgorCXRoZW4KKwkJZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJG5ld157Y29tbWl0fSIgPi9kZXYvbnVsbCAyPiYxIHx8CisJCWRpZSAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0LiIKKwlmaQorZmkKKwogWyAteiAiJG5ldyIgXSAmJiBuZXc9JG9sZAogCi0jCiAjIElmIHdlIGRvbid0IGhhdmUgYW4gb2xkIGJyYW5jaCB0aGF0IHdlJ3JlIHN3aXRjaGluZyB0bywKICMgYW5kIHdlIGRvbid0IGhhdmUgYSBuZXcgYnJhbmNoIG5hbWUgZm9yIHRoZSB0YXJnZXQgd2UKICMgYXJlIHN3aXRjaGluZyB0bywgdGhlbiB3ZSdkIGJldHRlciBqdXN0IGJlIGNoZWNraW5nIG91dAogIyB3aGF0IHdlIGFscmVhZHkgaGFkCi0jCisKIFsgLXogIiRicmFuY2gkbmV3YnJhbmNoIiBdICYmCiAJWyAiJG5ldyIgIT0gIiRvbGQiIF0gJiYKIAlkaWUgImdpdCBjaGVja291dDogeW91IG5lZWQgdG8gc3BlY2lmeSBhIG5ldyBicmFuY2ggbmFtZSIKZGlmZiAtLWdpdCBhL2dpdC1jb21taXQuc2ggYi9naXQtY29tbWl0LnNoCmluZGV4IDU5MWZjZGMuLjEwNjUxZDggMTAwNzU1Ci0tLSBhL2dpdC1jb21taXQuc2gKKysrIGIvZ2l0LWNvbW1pdC5zaApAQCAtNiw3ICs2LDcgQEAKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKIHVzYWdlICgpIHsKLQlkaWUgJ2dpdCBjb21taXQgWy1hXSBbLXYgfCAtLW5vLXZlcmlmeV0gIFstbSA8bWVzc2FnZT5dIFstRiA8bG9nZmlsZT5dIFsoLUN8LWMpIDxjb21taXQ+XSBbPHBhdGg+Li4uXScKKwlkaWUgJ2dpdCBjb21taXQgWy1hXSBbLXNdIFstdiB8IC0tbm8tdmVyaWZ5XSAgWy1tIDxtZXNzYWdlPiB8IC1GIDxsb2dmaWxlPiB8ICgtQ3wtYykgPGNvbW1pdD5dIFstZV0gWzxwYXRoPi4uLl0nCiB9CiAKIGFsbD0gbG9nZmlsZT0gdXNlX2NvbW1pdD0gbm9fZWRpdD0gbG9nX2dpdmVuPSBsb2dfbWVzc2FnZT0gdmVyaWZ5PXQgc2lnbm9mZj0KQEAgLTk5LDcgKzk5LDcgQEAKICwwKQogCTs7CiAqKQotCWdpdC1kaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC16ICIkQCIgfAorCWdpdC1kaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC16IC0tICIkQCIgfAogCWdpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbgogCTs7CiBlc2FjIHx8IGV4aXQgMQpAQCAtMTI5LDcgKzEyOSw3IEBACiBlbGlmIHRlc3QgIiR1c2VfY29tbWl0IiAhPSAiIgogdGhlbgogCWdpdC1jYXQtZmlsZSBjb21taXQgIiR1c2VfY29tbWl0IiB8IHNlZCAtZSAnMSwvXiQvZCcKLWZpIHwgZ2l0LXN0cmlwc3BhY2UgPi5lZGl0bXNnCitmaSB8IGdpdC1zdHJpcHNwYWNlID4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCiAKIGNhc2UgIiRzaWdub2ZmIiBpbgogdCkKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJcy8+LiovPi8KIAkJCXMvXi9TaWduZWQtb2ZmLWJ5OiAvCiAJCScKLQl9ID4+LmVkaXRtc2cKKwl9ID4+IiRHSVRfRElSIi9DT01NSVRfRURJVE1TRwogCTs7CiBlc2FjCiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWVjaG8gIiMJJEdJVF9ESVIvTUVSR0VfSEVBRCIKIAllY2hvICIjIGFuZCB0cnkgYWdhaW4iCiAJZWNobyAiIyIKLWZpID4+LmVkaXRtc2cKK2ZpID4+IiRHSVRfRElSIi9DT01NSVRfRURJVE1TRwogCiBQQVJFTlRTPSItcCBIRUFEIgogaWYgR0lUX0RJUj0iJEdJVF9ESVIiIGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIDI+JjEKQEAgLTE5NywxNiArMTk3LDE2IEBACiAJZmkKIAlQQVJFTlRTPSIiCiBmaQotZ2l0LXN0YXR1cyA+Pi5lZGl0bXNnCitnaXQtc3RhdHVzID4+IiRHSVRfRElSIi9DT01NSVRfRURJVE1TRwogaWYgWyAiJD8iICE9ICIwIiAtYSAhIC1mICIkR0lUX0RJUi9NRVJHRV9IRUFEIiBdCiB0aGVuCi0Jcm0gLWYgLmVkaXRtc2cKKwlybSAtZiAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciCiAJZ2l0LXN0YXR1cwogCWV4aXQgMQogZmkKIGNhc2UgIiRub19lZGl0IiBpbgogJycpCi0JJHtWSVNVQUw6LSR7RURJVE9SOi12aX19IC5lZGl0bXNnCisJJHtWSVNVQUw6LSR7RURJVE9SOi12aX19ICIkR0lUX0RJUi9DT01NSVRfRURJVE1TRyIKIAk7OwogZXNhYwogCkBAIC0yMTQsMTYgKzIxNCwyMCBAQAogdCkKIAlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvY29tbWl0LW1zZwogCXRoZW4KLQkJIiRHSVRfRElSIi9ob29rcy9jb21taXQtbXNnIC5lZGl0bXNnIHx8IGV4aXQKKwkJIiRHSVRfRElSIi9ob29rcy9jb21taXQtbXNnICIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cgfHwgZXhpdAogCWZpCiBlc2FjCiAKLWdyZXAgLXYgJ14jJyA8IC5lZGl0bXNnIHwgZ2l0LXN0cmlwc3BhY2UgPiAuY21pdG1zZwotZ3JlcCAtdiAtaSAnXlNpZ25lZC1vZmYtYnknIC5jbWl0bXNnID4uY21pdGNoawotaWYgdGVzdCAtcyAuY21pdGNoaworZ3JlcCAtdiAnXiMnIDwgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRyB8CitnaXQtc3RyaXBzcGFjZSA+ICIkR0lUX0RJUiIvQ09NTUlUX01TRworCitpZiBjbnQ9YGdyZXAgLXYgLWkgJ15TaWduZWQtb2ZmLWJ5JyAiJEdJVF9ESVIiL0NPTU1JVF9NU0cgfAorCWdpdC1zdHJpcHNwYWNlIHwKKwl3YyAtbGAgJiYKKyAgIHRlc3QgMCAtbHQgJGNudAogdGhlbgogCXRyZWU9JChnaXQtd3JpdGUtdHJlZSkgJiYKLQljb21taXQ9JChjYXQgLmNtaXRtc2cgfCBnaXQtY29tbWl0LXRyZWUgJHRyZWUgJFBBUkVOVFMpICYmCisJY29tbWl0PSQoY2F0ICIkR0lUX0RJUiIvQ09NTUlUX01TRyB8IGdpdC1jb21taXQtdHJlZSAkdHJlZSAkUEFSRU5UUykgJiYKIAlnaXQtdXBkYXRlLXJlZiBIRUFEICRjb21taXQgJGN1cnJlbnQgJiYKIAlybSAtZiAtLSAiJEdJVF9ESVIvTUVSR0VfSEVBRCIKIGVsc2UKQEAgLTIzMSw3ICsyMzUsNyBAQAogCWZhbHNlCiBmaQogcmV0PSIkPyIKLXJtIC1mIC5jbWl0bXNnIC5lZGl0bXNnIC5jbWl0Y2hrCitybSAtZiAiJEdJVF9ESVIvQ09NTUlUX01TRyIgIiRHSVRfRElSL0NPTU1JVF9FRElUTVNHIgogCiBpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1jb21taXQgJiYgdGVzdCAiJHJldCIgPSAwCiB0aGVuCmRpZmYgLS1naXQgYS9naXQtY29yZS5zcGVjLmluIGIvZ2l0LWNvcmUuc3BlYy5pbgppbmRleCA4NzYzMDY5Li41MjQwZGQyIDEwMDY0NAotLS0gYS9naXQtY29yZS5zcGVjLmluCisrKyBiL2dpdC1jb3JlLnNwZWMuaW4KQEAgLTksNyArOSw3IEBACiBTb3VyY2U6IAlodHRwOi8va2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6CiBCdWlsZFJlcXVpcmVzOgl6bGliLWRldmVsLCBvcGVuc3NsLWRldmVsLCBjdXJsLWRldmVsICAleyE/X3dpdGhvdXRfZG9jczosIHhtbHRvLCBhc2NpaWRvYyA+IDYuMC4zfQogQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQotUmVxdWlyZXM6CXJzeW5jLCByY3MsIGN1cmwsIGxlc3MsIG9wZW5zc2gtY2xpZW50cywgcHl0aG9uID49IDIuMywgdGsgPj0gOC40CitSZXF1aXJlczoJemxpYiA+PSAxLjIsIHJzeW5jLCByY3MsIGN1cmwsIGxlc3MsIG9wZW5zc2gtY2xpZW50cywgcHl0aG9uID49IDIuMywgdGsgPj0gOC40CiAKICVkZXNjcmlwdGlvbgogVGhpcyBpcyBhIHN0dXBpZCAoYnV0IGV4dHJlbWVseSBmYXN0KSBkaXJlY3RvcnkgY29udGVudCBtYW5hZ2VyLiAgSXQKZGlmZiAtLWdpdCBhL2dpdC1jb3VudC1vYmplY3RzLnNoIGIvZ2l0LWNvdW50LW9iamVjdHMuc2gKaW5kZXggNzRlZTRmMy4uODQzZDJmZCAxMDA3NTUKLS0tIGEvZ2l0LWNvdW50LW9iamVjdHMuc2gKKysrIGIvZ2l0LWNvdW50LW9iamVjdHMuc2gKQEAgLTIsNyArMiw3IEBACiAKIC4gZ2l0LXNoLXNldHVwCiAKLWVjaG8gJChmaW5kICIkR0lUX0RJUi9vYmplY3RzIi8/PyAtdHlwZSBmIC1wcmludCB8IHdjIC1sKSBvYmplY3RzLCBcCitlY2hvICQoZmluZCAiJEdJVF9ESVIvb2JqZWN0cyIvPz8gLXR5cGUgZiAtcHJpbnQgMj4vZGV2L251bGwgfCB3YyAtbCkgb2JqZWN0cywgXAogJCh7CiAgICAgZWNobyAwCiAgICAgIyAibm8tc3VjaCIgaXMgdG8gaGVscCBEYXJ3aW4gZm9sa3MgYnkgbm90IHVzaW5nIHhhcmdzIC1yLgpkaWZmIC0tZ2l0IGEvZ2l0LWN2c2ltcG9ydC5wZXJsIGIvZ2l0LWN2c2ltcG9ydC5wZXJsCmluZGV4IGYwMGY3NTkuLmJiYjgzZmIgMTAwNzU1Ci0tLSBhL2dpdC1jdnNpbXBvcnQucGVybAorKysgYi9naXQtY3ZzaW1wb3J0LnBlcmwKQEAgLTU3MCw2ICs1NzAsNyBAQAogCXVubGVzcygkcGlkKSB7CiAJCSRwci0+d3JpdGVyKCk7CiAJCSRwdy0+cmVhZGVyKCk7CisJCW9wZW4oT1VULCI+JlNURE9VVCIpOwogCQlkdXAyKCRwdy0+ZmlsZW5vKCksMCk7CiAJCWR1cDIoJHByLT5maWxlbm8oKSwxKTsKIAkJJHByLT5jbG9zZSgpOwpAQCAtNTg3LDEwICs1ODgsOSBAQAogCQkJCWlmICggLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG1wYXJlbnQiKSB7CiAJCQkJCSRtcGFyZW50ID0gZ2V0X2hlYWRyZWYoJG1wYXJlbnQsICRnaXRfZGlyKTsKIAkJCQkJcHVzaCBAcGFyLCAnLXAnLCAkbXBhcmVudDsKLQkJCQkJIyBwcmludGluZyBoZXJlIGJyZWFrcyBpbXBvcnQgIyAKLQkJCQkJIyAjIHByaW50ICJNZXJnZSBwYXJlbnQgYnJhbmNoOiAkbXBhcmVudFxuIiBpZiAkb3B0X3Y7CisJCQkJCXByaW50IE9VVCAiTWVyZ2UgcGFyZW50IGJyYW5jaDogJG1wYXJlbnRcbiIgaWYgJG9wdF92OwogCQkJCX0KLQkJICAgIAl9IAorCQkJfQogCQl9CiAKIAkJZXhlYygiZW52IiwKZGlmZiAtLWdpdCBhL2dpdC1kaWZmLnNoIGIvZ2l0LWRpZmYuc2gKaW5kZXggODRhMTUyYS4uYjNlYzg0YiAxMDA3NTUKLS0tIGEvZ2l0LWRpZmYuc2gKKysrIGIvZ2l0LWRpZmYuc2gKQEAgLTI4LDE2ICsyOCwxNiBAQAogPyonICdePyopCiAJYmVnaW49JChleHByICIkcmV2IiA6ICcuKl4uXChbMC05YS1mXSpcKS4qJykgJiYKIAllbmQ9JChleHByICIkcmV2IiA6ICcuXChbMC05YS1mXSpcKS4gLionKSB8fCBleGl0Ci0JY21kPSJnaXQtZGlmZi10cmVlICRmbGFncyAkYmVnaW4gJGVuZCAkZmlsZXMiCisJY21kPSJnaXQtZGlmZi10cmVlICRmbGFncyAkYmVnaW4gJGVuZCAtLSAkZmlsZXMiCiAJOzsKID8qJyAnPyopCi0JY21kPSJnaXQtZGlmZi10cmVlICRmbGFncyAkcmV2ICRmaWxlcyIKKwljbWQ9ImdpdC1kaWZmLXRyZWUgJGZsYWdzICRyZXYgLS0gJGZpbGVzIgogCTs7CiA/KicgJykKLQljbWQ9ImdpdC1kaWZmLWluZGV4ICRmbGFncyAkcmV2ICRmaWxlcyIKKwljbWQ9ImdpdC1kaWZmLWluZGV4ICRmbGFncyAkcmV2IC0tICRmaWxlcyIKIAk7OwogJycpCi0JY21kPSJnaXQtZGlmZi1maWxlcyAkZmxhZ3MgJGZpbGVzIgorCWNtZD0iZ2l0LWRpZmYtZmlsZXMgJGZsYWdzIC0tICRmaWxlcyIKIAk7OwogKikKIAlkaWUgIkkgZG9uJ3QgdW5kZXJzdGFuZCAkKiIKZGlmZiAtLWdpdCBhL2dpdC1mZXRjaC5zaCBiL2dpdC1mZXRjaC5zaAppbmRleCAzNjBmZWNkLi4zMWU1ZjRjIDEwMDc1NQotLS0gYS9naXQtZmV0Y2guc2gKKysrIGIvZ2l0LWZldGNoLnNoCkBAIC01LDYgKzUsMTAgQEAKIF94NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCiBfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgogCitMRj0nCisnCitJRlM9IiRMRiIKKwogdGFncz0KIGFwcGVuZD0KIGZvcmNlPQpAQCAtMTEwLDcgKzExNCwxMiBAQAogCSMgaXMgbm8gd2F5IHRvIGd1YXJhbnRlZSAiZmFzdC1mb3J3YXJkIiBhbnl3YXkuCiAJaWYgdGVzdCAtZiAiJEdJVF9ESVIvJDEiCiAJdGhlbgotCQllY2hvID4mMiAiKiAkMTogdXBkYXRpbmcgd2l0aCAkMyIKKwkJaWYgbm93Xz0kKGNhdCAiJEdJVF9ESVIvJDEiKSAmJiB0ZXN0ICIkbm93XyIgPSAiJDIiCisJCXRoZW4KKwkJCWVjaG8gPiYyICIqICQxOiBzYW1lIGFzICQzIgorCQllbHNlCisJCQllY2hvID4mMiAiKiAkMTogdXBkYXRpbmcgd2l0aCAkMyIKKwkJZmkKIAllbHNlCiAJCWVjaG8gPiYyICIqICQxOiBzdG9yaW5nICQzIgogCWZpCkBAIC0xNzgsNyArMTg3LDcgQEAKIAlpZiB0ZXN0ICIkIyIgLWd0IDEKIAl0aGVuCiAJCSMgcmVtb3RlIFVSTCBwbHVzIGV4cGxpY2l0IHJlZnNwZWNzOyB3ZSBuZWVkIHRvIG1lcmdlIHRoZW0uCi0JCXJlZmxpc3Q9IiRyZWZsaXN0ICR0YWdsaXN0IgorCQlyZWZsaXN0PSIkcmVmbGlzdCRMRiR0YWdsaXN0IgogCWVsc2UKIAkJIyBObyBleHBsaWNpdCByZWZzcGVjczsgZmV0Y2ggdGFncyBvbmx5LgogCQlyZWZsaXN0PSR0YWdsaXN0CkBAIC0xODcsNyArMTk2LDcgQEAKIAogZm9yIHJlZiBpbiAkcmVmbGlzdAogZG8KLSAgICByZWZzPSIkcmVmcyAkcmVmIgorICAgIHJlZnM9IiRyZWZzJExGJHJlZiIKIAogICAgICMgVGhlc2UgYXJlIHJlbGF0aXZlIHBhdGggZnJvbSAkR0lUX0RJUiwgdHlwaWNhbGx5IHN0YXJ0aW5nIGF0IHJlZnMvCiAgICAgIyBidXQgbWF5IGJlIEhFQUQKQEAgLTIwOCw3ICsyMTcsNyBAQAogICAgIHJlbW90ZV9uYW1lPSQoZXhwciAiJHJlZiIgOiAnXChbXjpdKlwpOicpCiAgICAgbG9jYWxfbmFtZT0kKGV4cHIgIiRyZWYiIDogJ1teOl0qOlwoLipcKScpCiAKLSAgICBycmVmPSIkcnJlZiAkcmVtb3RlX25hbWUiCisgICAgcnJlZj0iJHJyZWYkTEYkcmVtb3RlX25hbWUiCiAKICAgICAjIFRoZXJlIGFyZSB0cmFuc3BvcnRzIHRoYXQgY2FuIGZldGNoIG9ubHkgb25lIGhlYWQgYXQgYSB0aW1lLi4uCiAgICAgY2FzZSAiJHJlbW90ZSIgaW4KQEAgLTIxNiw3ICsyMjUsMTIgQEAKIAlpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIF07IHRoZW4KIAkgICAgY3VybF9leHRyYV9hcmdzPSItayIKIAlmaQotCWhlYWQ9JChjdXJsIC1uc2YgJGN1cmxfZXh0cmFfYXJncyAiJHJlbW90ZS8kcmVtb3RlX25hbWUiKSAmJgorCXJlbW90ZV9uYW1lX3F1b3RlZD0kKHBlcmwgLWUgJworCSAgICBteSAkdSA9ICRBUkdWWzBdOworCSAgICAkdSA9fiBzeyhbXi1hLXpBLVowLTkvLl0pfXtzcHJpbnRmIiUlJTAyeCIsb3JkKCQxKX1lZzsKKwkgICAgcHJpbnQgIiR1IjsKKwknICIkcmVtb3RlX25hbWUiKQorCWhlYWQ9JChjdXJsIC1uc2YgJGN1cmxfZXh0cmFfYXJncyAiJHJlbW90ZS8kcmVtb3RlX25hbWVfcXVvdGVkIikgJiYKIAlleHByICIkaGVhZCIgOiAiJF94NDBcJCIgPi9kZXYvbnVsbCB8fAogCQlkaWUgIkZhaWxlZCB0byBmZXRjaCAkcmVtb3RlX25hbWUgZnJvbSAkcmVtb3RlIgogCWVjaG8gPiYyIEZldGNoaW5nICIkcmVtb3RlX25hbWUgZnJvbSAkcmVtb3RlIiB1c2luZyBodHRwCkBAIC0yNjYsNiArMjgwLDcgQEAKIGh0dHA6Ly8qIHwgaHR0cHM6Ly8qIHwgcnN5bmM6Ly8qICkKICAgICA7OyAjIHdlIGFyZSBhbHJlYWR5IGRvbmUuCiAqKQorICAgIElGUz0iIAkkTEYiCiAgICAgKAogCWdpdC1mZXRjaC1wYWNrICIkcmVtb3RlIiAkcnJlZiB8fCBlY2hvIGZhaWxlZCAiJHJlbW90ZSIKICAgICApIHwKZGlmZiAtLWdpdCBhL2dpdC1maW5kdGFncy5wZXJsIGIvZ2l0LWZpbmR0YWdzLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQ1YWZmZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1maW5kdGFncy5wZXJsCkBAIC0wLDAgKzEsOTQgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTWFydGluIExhbmdob2ZmCisjCisjIFdhbGsgdGhlIHRhZ3MgYW5kIGZpbmQgaWYgdGhleSBtYXRjaCBhIGNvbW1pdAorIyBleHBlY3RzIGEgU0hBMSBvZiBhIGNvbW1pdC4gT3B0aW9uIC10IGVuYWJsZXMgCisjIHNlYXJjaGluZyB0cmVlcyB0b28uCisjCisKK3VzZSBzdHJpY3Q7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgRmlsZTo6RmluZDsKK3VzZSBHZXRvcHQ6OlN0ZDsKKworbXkgJGdpdF9kaXIgPSAkRU5We0dJVF9ESVJ9IHx8ICcuZ2l0JzsKKyRnaXRfZGlyID1+IHN8LyR8fDsgIyBjaG9tcCB0cmFpbGluZyBzbGFzaAorCisjIG9wdGlvbnMKK291ciAkb3B0X3Q7CitnZXRvcHRzKCJ0IikgfHwgdXNhZ2UoKTsKKworbXkgQHRhZ2ZpbGVzICAgPSBgZmluZCAkZ2l0X2Rpci9yZWZzL3RhZ3MgLWZvbGxvdyAtdHlwZSBmYDsgIyBoYXlzdGFjaworbXkgJHRhcmdldCA9IHNoaWZ0IEBBUkdWOyAgICAgICAgICAgICAgICAgICAgICMgbmVlZGxlCit1bmxlc3MgKCR0YXJnZXQpIHsKKyAgICB1c2FnZSgpOworfQorCisjIGRyaXZlIHRoZSBwcm9jZXNzaW5nIGZyb20gdGhlIGZpbmQgaG9vaworIyBzbG93ZXIsIHNhZmVyICg/KSB0aGFuIHRoZSBmaW5kIHV0aWxpdHkKK2ZpbmQoIHsgd2FudGVkICAgPT4gXCZwcm9jZXNzLAorCW5vX2NoZGlyID0+IDEsCisJZm9sbG93ICAgPT4gMSwKKyAgICAgIH0sICIkZ2l0X2Rpci9yZWZzL3RhZ3MiKTsKKworCitzdWIgcHJvY2VzcyB7CisgICAgbXkgKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkKTsKKworICAgICMgcHJvY2VzcyBvbmx5IHJlZ3VsYXIgZmlsZXMKKyAgICB1bmxlc3MgKCgoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQpID0gbHN0YXQoJF8pKSAmJiAtZiBfKSB7CisJcmV0dXJuIDE7ICMgaWdub3JlZCBhbnl3YXkKKyAgICB9CisKKyAgICBteSAkdGFnZmlsZSA9ICRfOworICAgIGNob21wICR0YWdmaWxlOworICAgIG15ICR0YWduYW1lID0gc3Vic3RyKCR0YWdmaWxlLCBsZW5ndGgoJGdpdF9kaXIuJy9yZWZzL3RhZ3MvJykpOworCisgICAgbXkgJHRhZ2lkID0gcXVpY2tyZWFkKCR0YWdmaWxlKTsKKyAgICBjaG9tcCAkdGFnaWQ7CisKKyAgICAjIGlzIGl0IGp1c3QgYSBzb2Z0IHRhZz8KKyAgICBpZiAoJHRhZ2lkIGVxICR0YXJnZXQpIHsKKwlwcmludCAiJHRhZ25hbWVcbiI7CisJcmV0dXJuIDE7ICMgZG9uZSB3aXRoIHRoaXMgdGFnCisgICAgfQorCisgICAgIyBncmFiIHRoZSBmaXJzdCAyIGxpbmVzICh0aGUgd2hvbGUgdGFnIGNvdWxkIGJlIGxhcmdlKQorICAgIG15ICR0YWdvYmogPSBgZ2l0LWNhdC1maWxlIHRhZyAkdGFnaWQgfCBoZWFkIC1uMiBgOworICAgIGlmICgkdGFnb2JqID1+ICBtL150eXBlIGNvbW1pdCQvbSkgeyAjIG9ubHkgZGVhbCB3aXRoIGNvbW1pdHMKKworCWlmICgkdGFnb2JqID1+IG0vXm9iamVjdCAkdGFyZ2V0JC9tKSB7ICMgbWF0Y2ggb24gdGhlIGNvbW1pdAorCSAgICBwcmludCAiJHRhZ25hbWVcbiI7CisKKwl9IGVsc2lmICggJG9wdF90ICYmICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93IHRoZSBjb21taXQKKwkJICR0YWdvYmogPX4gbS9eb2JqZWN0IChcUyspJC9tKSB7ICMgYW5kIHRyeSB0byBtYXRjaCB0cmVlcworCSAgICBteSAkY29tbWl0aWQgPSAkMTsKKwkgICAgbXkgJGNvbW1pdG9iaiA9IGBnaXQtY2F0LWZpbGUgY29tbWl0ICRjb21taXRpZCB8IGhlYWQgLW4xYDsKKwkgICAgY2hvbXAgJGNvbW1pdG9iajsKKwkgICAgJGNvbW1pdG9iaiA9fiBtL150cmVlIChcUyspJC87CisJICAgIG15ICR0cmVlaWQgPSAkMTsKKwkgICAgaWYgKCR0YXJnZXQgZXEgJHRyZWVpZCkgeworCQlwcmludCAiJHRhZ25hbWVcbiI7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgcXVpY2tyZWFkIHsKKyAgICBteSAkZmlsZSA9IHNoaWZ0OworICAgIGxvY2FsICQvOyAjIHVuZGVmOiBzbHVycCBtb2RlCisgICAgb3BlbiBGSUxFLCAiPCRmaWxlIgorCW9yIGRpZSAiQ2Fubm90IG9wZW4gJGZpbGUgOiAkISI7CisgICAgbXkgJGNvbnRlbnQgPSA8RklMRT47CisgICAgY2xvc2UgRklMRTsKKyAgICByZXR1cm4gJGNvbnRlbnQ7Cit9CisKK3N1YiB1c2FnZSB7CisJcHJpbnQgU1RERVJSIDw8RU5EOworVXNhZ2U6ICR7XGJhc2VuYW1lICQwfSAgICAgIyBmaW5kIHRhZ3MgZm9yIGEgY29tbWl0IG9yIHRyZWUKKyAgICAgICBbIC10IF0gPGNvbW1pdC1vci10cmVlLXNoYTE+CitFTkQKKwlleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvZ2l0LWZvcm1hdC1wYXRjaC5zaCBiL2dpdC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggMjg0NDc5OS4uMDIwN2FiMSAxMDA3NTUKLS0tIGEvZ2l0LWZvcm1hdC1wYXRjaC5zaAorKysgYi9naXQtZm9ybWF0LXBhdGNoLnNoCkBAIC02LDcgKzYsOSBAQAogLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZS4iCiAKIHVzYWdlICgpIHsKLSAgICBlY2hvID4mMiAidXNhZ2U6ICQwIicgWy1uXSBbLW8gZGlyXSBbLS1rZWVwLXN1YmplY3RdIFstLW1ib3hdIFstLWNoZWNrXSBbLS1zaWdub2ZmXSBbLTxkaWZmIG9wdGlvbnM+Li4uXSB1cHN0cmVhbSBbIG91ci1oZWFkIF0KKyAgICBlY2hvID4mMiAidXNhZ2U6ICQwIicgWy1uXSBbLW8gZGlyIHwgLS1zdGRvdXRdIFstLWtlZXAtc3ViamVjdF0gWy0tbWJveF0KKyAgICBbLS1jaGVja10gWy0tc2lnbm9mZl0gWy08ZGlmZiBvcHRpb25zPi4uLl0KKyAgICAoIGZyb20uLnRvIC4uLiB8IHVwc3RyZWFtIFsgb3VyLWhlYWQgXSApCiAKIFByZXBhcmUgZWFjaCBjb21taXQgd2l0aCBpdHMgcGF0Y2ggc2luY2Ugb3VyLWhlYWQgZm9ya2VkIGZyb20gdXBzdHJlYW0sCiBvbmUgZmlsZSBwZXIgcGF0Y2gsIGZvciBlLW1haWwgc3VibWlzc2lvbi4gIEVhY2ggb3V0cHV0IGZpbGUgaXMKQEAgLTQ5LDYgKzUxLDggQEAKICAgICBudW1iZXJlZD10IDs7CiAgICAgLXN8LS1zfC0tc2l8LS1zaWd8LS1zaWdufC0tc2lnbm98LS1zaWdub2Z8LS1zaWdub2ZmKQogICAgIHNpZ25vZmY9dCA7OworICAgIC0tc3R8LS1zdGR8LS1zdGRvfC0tc3Rkb3V8LS1zdGRvdXQpCisgICAgc3Rkb3V0PXQgbWJveD10IGRhdGU9dCBhdXRob3I9dCA7OwogICAgIC1vPSp8LS1vPSp8LS1vdT0qfC0tb3V0PSp8LS1vdXRwPSp8LS1vdXRwdT0qfC0tb3V0cHV0PSp8LS1vdXRwdXQtPSp8XAogICAgIC0tb3V0cHV0LWQ9KnwtLW91dHB1dC1kaT0qfC0tb3V0cHV0LWRpcj0qfC0tb3V0cHV0LWRpcmU9KnxcCiAgICAgLS1vdXRwdXQtZGlyZWM9KnwtLW91dHB1dC1kaXJlY3Q9KnwtLW91dHB1dC1kaXJlY3RvPSp8XApAQCAtNzMsMjUgKzc3LDcwIEBACiAJZGllICctLWtlZXAtc3ViamVjdCBhbmQgLS1udW1iZXJlZCBhcmUgaW5jb21wYXRpYmxlLicgOzsKIGVzYWMKIAotcmV2MT0gcmV2Mj0KLWNhc2UgIiQjIiBpbgotMikKLSAgICByZXYxPSIkMSIgcmV2Mj0iJDIiIDs7Ci0xKQotICAgIGNhc2UgIiQxIiBpbgotICAgICouLiopCi0JcmV2MT1gZXhwciAiJDEiIDogJ1woLipcKVwuXC4nYAotCXJldjI9YGV4cHIgIiQxIiA6ICcuKlwuXC5cKC4qXCknYAordG1wPS50bXAtc2VyaWVzJCQKK3RyYXAgJ3JtIC1mICR0bXAtKicgMCAxIDIgMyAxNQorCitzZXJpZXM9JHRtcC1zZXJpZXMKK2NvbW1zZz0kdG1wLWNvbW1zZworZmlsZWxpc3Q9JHRtcC1maWxlcworCisjIEJhY2t3YXJkIGNvbXBhdGlibGUgYXJndW1lbnQgcGFyc2luZyBoYWNrLgorIworIyBIaXN0b3JpY2FsbHksIHdlIHN1cHBvcnRlZDoKKyMgMS4gInJldjEiCQlpcyBlcXVpdmFsZW50IHRvICJyZXYxLi5IRUFEIgorIyAyLiAicmV2MS4ucmV2MiIKKyMgMy4gInJldjEiICJyZXYyCWlzIGVxdWl2YWxlbnQgdG8gInJldjEuLnJldjIiCisjCisjIFdlIHdhbnQgdG8gdGFrZSBhIHNlcXVlbmNlIG9mICJyZXYxLi5yZXYyIiBpbiBnZW5lcmFsLgorCitjYXNlICIkIywkMSIgaW4KKzEsPyouLj8qKQorCSMgc2luZ2xlICJyZXYxLi5yZXYyIgogCTs7Ci0gICAgKikKLSAgICAgICAgcmV2MT0iJDEiCi0JcmV2Mj0iSEVBRCIKKzEsKikKKwkjIHNpbmdsZSByZXYxCisJc2V0IHggIiQxLi5IRUFEIgorCXNoaWZ0CiAJOzsKLSAgICBlc2FjIDs7Ci0qKQotICAgIHVzYWdlIDs7CisyLD8qLi4/KikKKwkjIG5vdCB0cmFkaXRpb25hbCAicmV2MSIgInJldjIiCisJOzsKKzIsKikKKwlzZXQgeCAiJDEuLiQyIgorCXNoaWZ0CisJOzsKIGVzYWMKIAorIyBOb3cgd2UgaGF2ZSB3aGF0IHdlIHdhbnQgaW4gJEAKK2ZvciByZXZwYWlyCitkbworCWNhc2UgIiRyZXZwYWlyIiBpbgorCT8qLi4/KikKKwkJcmV2MT1gZXhwciAiJHJldnBhaXIiIDogJ1woLipcKVwuXC4nYAorCQlyZXYyPWBleHByICIkcmV2cGFpciIgOiAnLipcLlwuXCguKlwpJ2AKKwkJOzsKKwkqKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmV2MV4wIiA+L2Rldi9udWxsIDI+JjEgfHwKKwkJZGllICJOb3QgYSB2YWxpZCByZXYgJHJldjEgKCRyZXZwYWlyKSIKKwlnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmV2Ml4wIiA+L2Rldi9udWxsIDI+JjEgfHwKKwkJZGllICJOb3QgYSB2YWxpZCByZXYgJHJldjIgKCRyZXZwYWlyKSIKKwlnaXQtY2hlcnJ5IC12ICIkcmV2MSIgIiRyZXYyIiB8CisJd2hpbGUgcmVhZCBzaWduIHJldiBjb21tZW50CisJZG8KKwkJY2FzZSAiJHNpZ24iIGluCisJCSctJykKKwkJCWVjaG8gPiYyICJNZXJnZWQgYWxyZWFkeTogJGNvbW1lbnQiCisJCQk7OworCQkqKQorCQkJZWNobyAkcmV2CisJCQk7OworCQllc2FjCisJZG9uZQorZG9uZSA+JHNlcmllcworCiBtZT1gZ2l0LXZhciBHSVRfQVVUSE9SX0lERU5UIHwgc2VkIC1lICdzLz4uKi8+LydgCiAKIGNhc2UgIiRvdXRkaXIiIGluCkBAIC0xMDAsMTMgKzE0OSw2IEBACiBlc2FjCiB0ZXN0IC1kICIkb3V0ZGlyIiB8fCBta2RpciAtcCAiJG91dGRpciIgfHwgZXhpdAogCi10bXA9LnRtcC1zZXJpZXMkJAotdHJhcCAncm0gLWYgJHRtcC0qJyAwIDEgMiAzIDE1Ci0KLXNlcmllcz0kdG1wLXNlcmllcwotY29tbXNnPSR0bXAtY29tbXNnCi1maWxlbGlzdD0kdG1wLWZpbGVzCi0KIHRpdGxlU2NyaXB0PScKIAkvLi9kCiAJL14kL24KQEAgLTEyOCwzOCArMTcwLDcgQEAKIAlxCiB9JwogCi1naXQtY2hlcnJ5IC12ICIkcmV2MSIgIiRyZXYyIiB8Ci13aGlsZSByZWFkIHNpZ24gcmV2IGNvbW1lbnQKLWRvCi0JY2FzZSAiJHNpZ24iIGluCi0JJy0nKQotCQllY2hvID4mMiAiTWVyZ2VkIGFscmVhZHk6ICRjb21tZW50IgotCQk7OwotCSopCi0JCWVjaG8gJHJldgotCQk7OwotCWVzYWMKLWRvbmUgPiRzZXJpZXMKLQotdG90YWw9YHdjIC1sIDwkc2VyaWVzIHwgdHIgLWRjICJbMC05XSJgCi1pPTEKLXdoaWxlIHJlYWQgY29tbWl0Ci1kbwotICAgIGdpdC1jYXQtZmlsZSBjb21taXQgIiRjb21taXQiIHwgZ2l0LXN0cmlwc3BhY2UgPiRjb21tc2cKLSAgICB0aXRsZT1gc2VkIC1uZSAiJHRpdGxlU2NyaXB0IiA8JGNvbW1zZ2AKLSAgICBjYXNlICIkbnVtYmVyZWQiIGluCi0gICAgJycpIG51bT0gOzsKLSAgICAqKQotCWNhc2UgJHRvdGFsIGluCi0JMSkgbnVtPSA7OwotCSopIG51bT0nICdgcHJpbnRmICIlZC8lZCIgJGkgJHRvdGFsYCA7OwotCWVzYWMKLSAgICBlc2FjCi0KLSAgICBmaWxlPWBwcmludGYgJyUwNGQtJXN0eHQnICRpICIkdGl0bGUiYAotICAgIGk9YGV4cHIgIiRpIiArIDFgCi0gICAgZWNobyAiKiAkZmlsZSIKLSAgICB7Citwcm9jZXNzX29uZSAoKSB7CiAJbWFpbFNjcmlwdD0nCiAJLy4vZAogCS9eJC9uJwpAQCAtMTc4LDYgKzE4OSw3IEBACiAJICAgIGVjaG8gJ0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMScgOyMgVU5JWCAiRnJvbSIgbGluZQogCSAgICA7OwogCWVzYWMKKwogCWV2YWwgIiQoc2VkIC1uZSAiJHdob3NlcGF0Y2hTY3JpcHQiICRjb21tc2cpIgogCXRlc3QgIiRhdXRob3IsJGF1IiA9ICIsJG1lIiB8fCB7CiAJCW1haWxTY3JpcHQ9IiRtYWlsU2NyaXB0IicKQEAgLTE5Niw3ICsyMDgsOSBAQAogCW4KIAliIGJvZHknCiAKLQlzZWQgLW5lICIkbWFpbFNjcmlwdCIgPCRjb21tc2cKKwkoY2F0ICRjb21tc2cgOyBlY2hvOyBlY2hvKSB8CisJc2VkIC1uZSAiJG1haWxTY3JpcHQiIHwKKwlnaXQtc3RyaXBzcGFjZQogCiAJdGVzdCAiJHNpZ25vZmYiID0gInQiICYmIHsKIAkJb2Zmc2lnbmVyPWBnaXQtdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfCBzZWQgLWUgJ3MvPi4qLz4vJ2AKQEAgLTIxMiwyMSArMjI2LDQ5IEBACiAJZWNobwogCWdpdC1kaWZmLXRyZWUgLXAgJGRpZmZfb3B0cyAiJGNvbW1pdCIgfCBnaXQtYXBwbHkgLS1zdGF0IC0tc3VtbWFyeQogCWVjaG8KKwlnaXQtY2F0LWZpbGUgY29tbWl0ICIkY29tbWl0XiIgfCBzZWQgLWUgJ3MvXnRyZWUgL2FwcGxpZXMtdG86IC8nIC1lIHEKIAlnaXQtZGlmZi10cmVlIC1wICRkaWZmX29wdHMgIiRjb21taXQiCisJZWNobyAiLS0tIgorCWVjaG8gIkBAR0lUX1ZFUlNJT05AQCIKIAogCWNhc2UgIiRtYm94IiBpbgogCXQpCiAJCWVjaG8KIAkJOzsKIAllc2FjCi0gICAgfSA+IiRvdXRkaXIkZmlsZSIKLSAgICBjYXNlICIkY2hlY2siIGluCi0gICAgdCkKLQkjIFRoaXMgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgZnJvbSBBbmRyZXcgTW9ydG9uJ3MgUGVyZmVjdCBQYXRjaC4KLQkjIExpbmVzIHlvdSBpbnRyb2R1Y2Ugc2hvdWxkIG5vdCBoYXZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0JIyBBbHNvIGNoZWNrIGZvciBhbiBpbmRlbnRhdGlvbiB0aGF0IGhhcyBTUCBiZWZvcmUgYSBUQUIuCi0gICAgICAgIGdyZXAgLW4gJ14rXChbIAldKiAJLipcfC4qWyAJXVwpJCcgIiRvdXRkaXIkZmlsZSIKK30KIAotCTogZG8gbm90IGV4aXQgd2l0aCBub24temVybyBiZWNhdXNlIHdlIHNhdyBubyBwcm9ibGVtIGluIHRoZSBsYXN0IG9uZS4KK3RvdGFsPWB3YyAtbCA8JHNlcmllcyB8IHRyIC1kYyAiWzAtOV0iYAoraT0xCit3aGlsZSByZWFkIGNvbW1pdAorZG8KKyAgICBnaXQtY2F0LWZpbGUgY29tbWl0ICIkY29tbWl0IiB8IGdpdC1zdHJpcHNwYWNlID4kY29tbXNnCisgICAgdGl0bGU9YHNlZCAtbmUgIiR0aXRsZVNjcmlwdCIgPCRjb21tc2dgCisgICAgY2FzZSAiJG51bWJlcmVkIiBpbgorICAgICcnKSBudW09IDs7CisgICAgKikKKwljYXNlICR0b3RhbCBpbgorCTEpIG51bT0gOzsKKwkqKSBudW09JyAnYHByaW50ZiAiJWQvJWQiICRpICR0b3RhbGAgOzsKKwllc2FjCiAgICAgZXNhYworCisgICAgZmlsZT1gcHJpbnRmICclMDRkLSVzdHh0JyAkaSAiJHRpdGxlImAKKyAgICBpZiB0ZXN0ICcnID0gIiRzdGRvdXQiCisgICAgdGhlbgorCSAgICBlY2hvICIqICRmaWxlIgorCSAgICBwcm9jZXNzX29uZSA+IiRvdXRkaXIkZmlsZSIKKwkgICAgaWYgdGVzdCB0ID0gIiRjaGVjayIKKwkgICAgdGhlbgorCQkjIFRoaXMgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgZnJvbSBBbmRyZXcgTW9ydG9uJ3MgUGVyZmVjdCBQYXRjaC4KKwkJIyBMaW5lcyB5b3UgaW50cm9kdWNlIHNob3VsZCBub3QgaGF2ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgorCQkjIEFsc28gY2hlY2sgZm9yIGFuIGluZGVudGF0aW9uIHRoYXQgaGFzIFNQIGJlZm9yZSBhIFRBQi4KKwkJZ3JlcCAtbiAnXitcKFsgCV0qIAkuKlx8LipbIAldXCkkJyAiJG91dGRpciRmaWxlIgorCQk6CisJICAgIGZpCisgICAgZWxzZQorCSAgICBlY2hvID4mMiAiKiAkZmlsZSIKKwkgICAgcHJvY2Vzc19vbmUKKyAgICBmaQorICAgIGk9YGV4cHIgIiRpIiArIDFgCiBkb25lIDwkc2VyaWVzCmRpZmYgLS1naXQgYS9naXQtbHMtcmVtb3RlLnNoIGIvZ2l0LWxzLXJlbW90ZS5zaAppbmRleCBiZmJkNWE0Li5mMGYwYjA3IDEwMDc1NQotLS0gYS9naXQtbHMtcmVtb3RlLnNoCisrKyBiL2dpdC1scy1yZW1vdGUuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKICMKLS4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCisuIGdpdC1zaC1zZXR1cAogCiB1c2FnZSAoKSB7CiAgICAgZWNobyA+JjIgInVzYWdlOiAkMCBbLS1oZWFkc10gWy0tdGFnc10gPHJlcG9zaXRvcnk+IDxyZWZzPi4uLiIKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1yZWN1cnNpdmUucHkgYi9naXQtbWVyZ2UtcmVjdXJzaXZlLnB5CmluZGV4IGI4MGE4NjAuLjYyNmQ4NTQgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS1yZWN1cnNpdmUucHkKKysrIGIvZ2l0LW1lcmdlLXJlY3Vyc2l2ZS5weQpAQCAtNCw3ICs0LDcgQEAKIGZyb20gaGVhcHEgaW1wb3J0IGhlYXBwdXNoLCBoZWFwcG9wCiBmcm9tIHNldHMgaW1wb3J0IFNldAogCi1zeXMucGF0aC5hcHBlbmQoJ0BAR0lUX1BZVEhPTl9QQVRIQEAnKQorc3lzLnBhdGguYXBwZW5kKCcnJ0BAR0lUX1BZVEhPTl9QQVRIQEAnJycpCiBmcm9tIGdpdE1lcmdlQ29tbW9uIGltcG9ydCAqCiAKIG9yaWdpbmFsSW5kZXhGaWxlID0gb3MuZW52aXJvbi5nZXQoJ0dJVF9JTkRFWF9GSUxFJywKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS5zaCBiL2dpdC1tZXJnZS5zaAppbmRleCAzNDY1MDQxLi42YWQ5NmViIDEwMDc1NQotLS0gYS9naXQtbWVyZ2Uuc2gKKysrIGIvZ2l0LW1lcmdlLnNoCkBAIC0yNSw3ICsyNSw3IEBACiAKIHNhdmVzdGF0ZSgpIHsKIAkjIFN0YXNoIGF3YXkgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMuCi0JZ2l0LWRpZmYtaW5kZXggLXIgLXogLS1uYW1lLW9ubHkgJGhlYWQgfAorCWdpdC1kaWZmLWluZGV4IC16IC0tbmFtZS1vbmx5ICRoZWFkIHwKIAljcGlvIC0wIC1vID4iJEdJVF9ESVIvTUVSR0VfU0FWRSIKIH0KIApAQCAtMzgsMTAgKzM4LDIwIEBACiAJZmkKIH0KIAotc3VtbWFyeSgpIHsKK2ZpbmlzaCAoKSB7CisJdGVzdCAnJyA9ICIkMiIgfHwgZWNobyAiJDIiCisJY2FzZSAiJG1lcmdlX21zZyIgaW4KKwknJykKKwkJZWNobyAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRCIKKwkJOzsKKwkqKQorCQlnaXQtdXBkYXRlLXJlZiBIRUFEICIkMSIgIiRoZWFkIiB8fCBleGl0IDEKKwkJOzsKKwllc2FjCisKIAljYXNlICIkbm9fc3VtbWFyeSIgaW4KIAknJykKLQkJZ2l0LWRpZmYtdHJlZSAtcCAtTSAkaGVhZCAiJDEiIHwKKwkJZ2l0LWRpZmYtdHJlZSAtcCAtTSAiJGhlYWQiICIkMSIgfAogCQlnaXQtYXBwbHkgLS1zdGF0IC0tc3VtbWFyeQogCQk7OwogCWVzYWMKQEAgLTEwOCw3ICsxMTgsNyBAQAogMSwiJDEiKQogCSMgSWYgaGVhZCBjYW4gcmVhY2ggYWxsIHRoZSBtZXJnZSB0aGVuIHdlIGFyZSB1cCB0byBkYXRlLgogCSMgYnV0IGZpcnN0IHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZQotCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZS4gWWVlYWghIgorCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZS4iCiAJZHJvcHNhdmUKIAlleGl0IDAKIAk7OwpAQCAtMTE2LDEwICsxMjYsOSBAQAogCSMgQWdhaW4gdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLgogCWVjaG8gIlVwZGF0aW5nIGZyb20gJGhlYWQgdG8gJDEuIgogCWdpdC11cGRhdGUtaW5kZXggLS1yZWZyZXNoIDI+L2Rldi9udWxsCi0JZ2l0LXJlYWQtdHJlZSAtdSAtbSAkaGVhZCAiJDEiICYmCiAJbmV3X2hlYWQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMV4wIikgJiYKLQlnaXQtdXBkYXRlLXJlZiBIRUFEICIkbmV3X2hlYWQiICIkaGVhZCIgfHwgZXhpdCAxCi0Jc3VtbWFyeSAiJDEiCisJZ2l0LXJlYWQtdHJlZSAtdSAtbSAkaGVhZCAiJG5ld19oZWFkIiAmJgorCWZpbmlzaCAiJG5ld19oZWFkIiAiRmFzdCBmb3J3YXJkIgogCWRyb3BzYXZlCiAJZXhpdCAwCiAJOzsKQEAgLTE0MCw4ICsxNDksNyBAQAogCSAgICAgICAgZWNobyAiJG1lcmdlX21zZyIgfAogCSAgICAgICAgZ2l0LWNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAtcCBIRUFEIC1wICIkMSIKIAkgICAgKSB8fCBleGl0Ci0JICAgIGdpdC11cGRhdGUtcmVmIEhFQUQgJHJlc3VsdF9jb21taXQgJGhlYWQKLQkgICAgc3VtbWFyeSAkcmVzdWx0X2NvbW1pdAorCSAgICBmaW5pc2ggIiRyZXN1bHRfY29tbWl0IiAiSW4taW5kZXggbWVyZ2UiCiAJICAgIGRyb3BzYXZlCiAJICAgIGV4aXQgMAogCWZpCkBAIC0yMzcsOSArMjQ1LDcgQEAKICAgICAgICAgcGFyZW50cz0iJHBhcmVudHMgLXAgJHJlbW90ZSIKICAgICBkb25lCiAgICAgcmVzdWx0X2NvbW1pdD0kKGVjaG8gIiRtZXJnZV9tc2ciIHwgZ2l0LWNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAkcGFyZW50cykgfHwgZXhpdAotICAgIGVjaG8gIkNvbW1pdHRlZCBtZXJnZSAkcmVzdWx0X2NvbW1pdCwgbWFkZSBieSAkd3Rfc3RyYXRlZ3kuIgotICAgIGdpdC11cGRhdGUtcmVmIEhFQUQgJHJlc3VsdF9jb21taXQgJGhlYWQKLSAgICBzdW1tYXJ5ICRyZXN1bHRfY29tbWl0CisgICAgZmluaXNoICIkcmVzdWx0X2NvbW1pdCIgIk1lcmdlICRyZXN1bHRfY29tbWl0LCBtYWRlIGJ5ICR3dF9zdHJhdGVneS4iCiAgICAgZHJvcHNhdmUKICAgICBleGl0IDAKIGZpCmRpZmYgLS1naXQgYS9naXQtbXYucGVybCBiL2dpdC1tdi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3ZTM1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbXYucGVybApAQCAtMCwwICsxLDE5NSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDA1LCBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIyAgICAgICAgICAgICAgICAgSm9zZWYgV2VpZGVuZG9yZmVyIDxKb3NlZi5XZWlkZW5kb3JmZXJAZ214LmRlPgorIworIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisjIGF0IHRoZSBkaXNjcmV0aW9uIG9mIExpbnVzIFRvcnZhbGRzLgorCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgR2V0b3B0OjpTdGQ7CisKK3N1YiB1c2FnZSgpIHsKKwlwcmludCA8PEVPVDsKKyQwIFstZl0gWy1uXSA8c291cmNlPiA8ZGVzdD4KKyQwIFstZl0gWy1rXSBbLW5dIDxzb3VyY2U+IC4uLiA8ZGVzdCBkaXJlY3Rvcnk+CisKK0luIHRoZSBmaXJzdCBmb3JtLCBzb3VyY2UgbXVzdCBleGlzdCBhbmQgYmUgZWl0aGVyIGEgZmlsZSwKK3N5bWxpbmsgb3IgZGlyZWN0b3J5LCBkZXN0IG11c3Qgbm90IGV4aXN0LiBJdCByZW5hbWVzIHNvdXJjZSB0byBkZXN0LgorSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgbGFzdCBhcmd1bWVudCBoYXMgdG8gYmUgYW4gZXhpc3RpbmcKK2RpcmVjdG9yeTsgdGhlIGdpdmVuIHNvdXJjZXMgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LgorCitVcGRhdGVzIHRoZSBnaXQgY2FjaGUgdG8gcmVmbGVjdCB0aGUgY2hhbmdlLgorVXNlICJnaXQgY29tbWl0IiB0byBtYWtlIHRoZSBjaGFuZ2UgcGVybWFuZW50bHkuCisKK09wdGlvbnM6CisgIC1mICAgRm9yY2UgcmVuYW1pbmcvbW92aW5nLCBldmVuIGlmIHRhcmdldCBleGlzdHMKKyAgLWsgICBDb250aW51ZSBvbiBlcnJvciBieSBza2lwcGluZworICAgICAgIG5vdC1leGlzdGluZyBvciBub3QgcmV2aXNpb24tY29udHJvbGxlZCBzb3VyY2UKKyAgLW4gICBEbyBub3RoaW5nOyBzaG93IHdoYXQgd291bGQgaGFwcGVuCitFT1QKKwlleGl0KDEpOworfQorCisjIFNhbml0eSBjaGVja3M6CitteSAkR0lUX0RJUiA9ICRFTlZ7J0dJVF9ESVInfSB8fCAiLmdpdCI7CisKK3VubGVzcyAoIC1kICRHSVRfRElSICYmIC1kICRHSVRfRElSIC4gIi9vYmplY3RzIiAmJiAKKwktZCAkR0lUX0RJUiAuICIvb2JqZWN0cy8iICYmIC1kICRHSVRfRElSIC4gIi9yZWZzIikgeworICAgIHByaW50ICJHaXQgcmVwb3NpdG9yeSBub3QgZm91bmQuIjsKKyAgICB1c2FnZSgpOworfQorCisKK291ciAoJG9wdF9uLCAkb3B0X2YsICRvcHRfaCwgJG9wdF9rLCAkb3B0X3YpOworZ2V0b3B0cygiaG5ma3YiKSB8fCB1c2FnZTsKK3VzYWdlKCkgaWYgJG9wdF9oOworQEFSR1YgPj0gMSBvciB1c2FnZTsKKworbXkgKEBzcmNBcmdzLCBAZHN0QXJncywgQHNyY3MsIEBkc3RzKTsKK215ICgkc3JjLCAkZHN0LCAkYmFzZSwgJGRzdERpcik7CisKK215ICRhcmdDb3VudCA9IHNjYWxhciBAQVJHVjsKK2lmICgtZCAkQVJHVlskYXJnQ291bnQtMV0pIHsKKwkkZHN0RGlyID0gJEFSR1ZbJGFyZ0NvdW50LTFdOworCUBzcmNBcmdzID0gQEFSR1ZbMC4uJGFyZ0NvdW50LTJdOworCQorCWZvcmVhY2ggJHNyYyAoQHNyY0FyZ3MpIHsKKwkJJGJhc2UgPSAkc3JjOworCQkkYmFzZSA9fiBzL14uKlwvLy87CisJCSRkc3QgPSAiJGRzdERpci8iLiAkYmFzZTsKKwkJcHVzaCBAZHN0QXJncywgJGRzdDsKKwl9Cit9CitlbHNlIHsKKyAgICBpZiAoJGFyZ0NvdW50ICE9IDIpIHsKKwlwcmludCAiRXJyb3I6IG1vdmluZyB0byBkaXJlY3RvcnkgJyIKKwkgICAgLiAkQVJHVlskYXJnQ291bnQtMV0KKwkgICAgLiAiJyBub3QgcG9zc2libGU7IG5vdCBleGlzaXRpbmdcbiI7CisJdXNhZ2U7CisgICAgfQorICAgIEBzcmNBcmdzID0gKCRBUkdWWzBdKTsKKyAgICBAZHN0QXJncyA9ICgkQVJHVlsxXSk7CisgICAgJGRzdERpciA9ICIiOworfQorCitteSAoQGFsbGZpbGVzLEBzcmNmaWxlcyxAZHN0ZmlsZXMpOworbXkgJHNhZmVzcmM7CitteSAoJW92ZXJ3cml0dGVuLCAlc3JjRm9yRHN0KTsKKworJC8gPSAiXDAiOworb3BlbihGLCItfCIsImdpdC1scy1maWxlcyIsIi16IikKKyAgICAgICAgb3IgZGllICJGYWlsZWQgdG8gb3BlbiBwaXBlIGZyb20gZ2l0LWxzLWZpbGVzOiAiIC4gJCE7CisKK0BhbGxmaWxlcyA9IG1hcCB7IGNob21wOyAkXzsgfSA8Rj47CitjbG9zZShGKTsKKworCitteSAoJGksICRiYWQpOword2hpbGUoc2NhbGFyIEBzcmNBcmdzID4gMCkgeworICAgICRzcmMgPSBzaGlmdCBAc3JjQXJnczsKKyAgICAkZHN0ID0gc2hpZnQgQGRzdEFyZ3M7CisgICAgJGJhZCA9ICIiOworCisgICAgaWYgKCRvcHRfdikgeworCXByaW50ICJDaGVja2luZyByZW5hbWUgb2YgJyRzcmMnIHRvICckZHN0J1xuIjsKKyAgICB9CisKKyAgICB1bmxlc3MgKC1mICRzcmMgfHwgLWwgJHNyYyB8fCAtZCAkc3JjKSB7CisJJGJhZCA9ICJiYWQgc291cmNlICckc3JjJyI7CisgICAgfQorCisgICAgJG92ZXJ3cml0dGVueyRkc3R9ID0gMDsKKyAgICBpZiAoKCRiYWQgZXEgIiIpICYmIC1lICRkc3QpIHsKKwkkYmFkID0gImRlc3RpbmF0aW9uICckZHN0JyBhbHJlYWR5IGV4aXN0cyI7CisJaWYgKC1mICRkc3QgJiYgJG9wdF9mKSB7CisJICAgIHByaW50ICJXYXJuaW5nOiAkYmFkOyB3aWxsIG92ZXJ3cml0ZSFcbiI7CisJICAgICRiYWQgPSAiIjsKKwkgICAgJG92ZXJ3cml0dGVueyRkc3R9ID0gMTsKKwl9CisgICAgfQorICAgIAorICAgIGlmICgoJGJhZCBlcSAiIikgJiYgKCRzcmMgZXEgJGRzdERpcikpIHsKKwkkYmFkID0gImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgJyRzcmMnIGludG8gaXRzZWxmIjsKKyAgICB9CisKKyAgICBpZiAoJGJhZCBlcSAiIikgeworCSRzYWZlc3JjID0gcXVvdGVtZXRhKCRzcmMpOworCUBzcmNmaWxlcyA9IGdyZXAgL14kc2FmZXNyYyhcL3wkKS8sIEBhbGxmaWxlczsKKyAgICAgICAgaWYgKHNjYWxhciBAc3JjZmlsZXMgPT0gMCkgeworCSAgICAkYmFkID0gIickc3JjJyBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIjsKKwl9CisgICAgfQorCisgICAgaWYgKCRiYWQgZXEgIiIpIHsKKyAgICAgICBpZiAoZGVmaW5lZCAkc3JjRm9yRHN0eyRkc3R9KSB7CisgICAgICAgICAgICRiYWQgPSAiY2FuIG5vdCBtb3ZlICckc3JjJyB0byAnJGRzdCc7IGFscmVhZHkgdGFyZ2V0IG9mICI7CisgICAgICAgICAgICRiYWQgLj0gIiciLiRzcmNGb3JEc3R7JGRzdH0uIiciOworICAgICAgIH0KKyAgICAgICBlbHNlIHsKKyAgICAgICAgICAgJHNyY0ZvckRzdHskZHN0fSA9ICRzcmM7CisgICAgICAgfQorICAgIH0KKworICAgIGlmICgkYmFkIG5lICIiKSB7CisJaWYgKCRvcHRfaykgeworCSAgICBwcmludCAiV2FybmluZzogJGJhZDsgc2tpcHBpbmdcbiI7CisJICAgIG5leHQ7CisJfQorCXByaW50ICJFcnJvcjogJGJhZFxuIjsKKwl1c2FnZSgpOworICAgIH0KKyAgICBwdXNoIEBzcmNzLCAkc3JjOworICAgIHB1c2ggQGRzdHMsICRkc3Q7Cit9CisKKyMgRmluYWwgcGFzczogcmVuYW1lL21vdmUKK215IChAZGVsZXRlZGZpbGVzLEBhZGRlZGZpbGVzLEBjaGFuZ2VkZmlsZXMpOword2hpbGUoc2NhbGFyIEBzcmNzID4gMCkgeworICAgICRzcmMgPSBzaGlmdCBAc3JjczsKKyAgICAkZHN0ID0gc2hpZnQgQGRzdHM7CisKKyAgICBpZiAoJG9wdF9uIHx8ICRvcHRfdikgeyBwcmludCAiUmVuYW1pbmcgJHNyYyB0byAkZHN0XG4iOyB9CisgICAgaWYgKCEkb3B0X24pIHsKKwlyZW5hbWUoJHNyYywkZHN0KQorCSAgICBvciBkaWUgInJlbmFtZSBmYWlsZWQ6ICQhIjsKKyAgICB9CisKKyAgICAkc2FmZXNyYyA9IHF1b3RlbWV0YSgkc3JjKTsKKyAgICBAc3JjZmlsZXMgPSBncmVwIC9eJHNhZmVzcmMoXC98JCkvLCBAYWxsZmlsZXM7CisgICAgQGRzdGZpbGVzID0gQHNyY2ZpbGVzOworICAgIHMvXiRzYWZlc3JjKFwvfCQpLyRkc3QkMS8gZm9yIEBkc3RmaWxlczsKKworICAgIHB1c2ggQGRlbGV0ZWRmaWxlcywgQHNyY2ZpbGVzOworICAgIGlmIChzY2FsYXIgQHNyY2ZpbGVzID09IDEpIHsKKwlpZiAoJG92ZXJ3cml0dGVueyRkc3R9ID09MSkgeworCSAgICBwdXNoIEBjaGFuZ2VkZmlsZXMsICRkc3Q7CisJfSBlbHNlIHsKKwkgICAgcHVzaCBAYWRkZWRmaWxlcywgJGRzdDsKKwl9CisgICAgfQorICAgIGVsc2UgeworCXB1c2ggQGFkZGVkZmlsZXMsIEBkc3RmaWxlczsKKyAgICB9Cit9CisKK2lmICgkb3B0X24pIHsKKwlwcmludCAiQ2hhbmdlZCAgOiAiLiBqb2luKCIsICIsIEBjaGFuZ2VkZmlsZXMpIC4iXG4iOworCXByaW50ICJBZGRpbmcgICA6ICIuIGpvaW4oIiwgIiwgQGFkZGVkZmlsZXMpIC4iXG4iOworCXByaW50ICJEZWxldGluZyA6ICIuIGpvaW4oIiwgIiwgQGRlbGV0ZWRmaWxlcykgLiJcbiI7CisJZXhpdCgxKTsKK30KKwkKK215ICRyYzsKK2lmIChzY2FsYXIgQGNoYW5nZWRmaWxlcyA+MCkgeworCSRyYyA9IHN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsIi0tIixAY2hhbmdlZGZpbGVzKTsKKwlkaWUgImdpdC11cGRhdGUtaW5kZXggZmFpbGVkIHRvIHVwZGF0ZSBjaGFuZ2VkIGZpbGVzIHdpdGggY29kZSAkP1xuIiBpZiAkcmM7Cit9CitpZiAoc2NhbGFyIEBhZGRlZGZpbGVzID4wKSB7CisJJHJjID0gc3lzdGVtKCJnaXQtdXBkYXRlLWluZGV4IiwiLS1hZGQiLCItLSIsQGFkZGVkZmlsZXMpOworCWRpZSAiZ2l0LXVwZGF0ZS1pbmRleCBmYWlsZWQgdG8gYWRkIG5ldyBuYW1lcyB3aXRoIGNvZGUgJD9cbiIgaWYgJHJjOworfQorJHJjID0gc3lzdGVtKCJnaXQtdXBkYXRlLWluZGV4IiwiLS1yZW1vdmUiLCItLSIsQGRlbGV0ZWRmaWxlcyk7CitkaWUgImdpdC11cGRhdGUtaW5kZXggZmFpbGVkIHRvIHJlbW92ZSBvbGQgbmFtZXMgd2l0aCBjb2RlICQ/XG4iIGlmICRyYzsKZGlmZiAtLWdpdCBhL2dpdC1wYXJzZS1yZW1vdGUuc2ggYi9naXQtcGFyc2UtcmVtb3RlLnNoCmluZGV4IDMyZjEwODUuLmFlYTdiMGUgMTAwNzU1Ci0tLSBhL2dpdC1wYXJzZS1yZW1vdGUuc2gKKysrIGIvZ2l0LXBhcnNlLXJlbW90ZS5zaApAQCAtMSw2ICsxLDYgQEAKICMhL2Jpbi9zaAogCi0uIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgorLiBnaXQtc2gtc2V0dXAKIAogZ2V0X2RhdGFfc291cmNlICgpIHsKIAljYXNlICIkMSIgaW4KZGlmZiAtLWdpdCBhL2dpdC1wcnVuZS5zaCBiL2dpdC1wcnVuZS5zaAppbmRleCA5NjU3ZGJmLi5lZjMxYmQyIDEwMDc1NQotLS0gYS9naXQtcHJ1bmUuc2gKKysrIGIvZ2l0LXBydW5lLnNoCkBAIC0xNSw2ICsxNSw3IEBACiAgICAgc2hpZnQ7CiBkb25lCiAKK3N5bmMKIGdpdC1mc2NrLW9iamVjdHMgLS1mdWxsIC0tY2FjaGUgLS11bnJlYWNoYWJsZSAiJEAiIHwKIHNlZCAtbmUgJy91bnJlYWNoYWJsZSAvewogICAgIHMvdW5yZWFjaGFibGUgW14gXVteIF0qIC8vCkBAIC0yMiw2ICsyMyw3IEBACiB9JyB8IHsKIAljZCAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZIiB8fCBleGl0CiAJeGFyZ3MgJGVjaG8gcm0gLWYKKwlybWRpciAyPi9kZXYvbnVsbCBbMC05YS1mXVswLTlhLWZdCiB9CiAKIGdpdC1wcnVuZS1wYWNrZWQgJGRyeXJ1bgpkaWZmIC0tZ2l0IGEvZ2l0LXB1c2guc2ggYi9naXQtcHVzaC5zaAppbmRleCAwMGQ3MTUwLi41YWE2NTMxIDEwMDc1NQotLS0gYS9naXQtcHVzaC5zaAorKysgYi9naXQtcHVzaC5zaApAQCAtMSw2ICsxLDExIEBACiAjIS9iaW4vc2gKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKK3VzYWdlICgpIHsKKyAgICBkaWUgIlVzYWdlOiBnaXQgcHVzaCBbLS1hbGxdIFstLWZvcmNlXSA8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPl0iCit9CisKKwogIyBQYXJzZSBvdXQgcGFyYW1ldGVycyBhbmQgdGhlbiBzdG9wIGF0IHJlbW90ZSwgc28gdGhhdCB3ZSBjYW4KICMgdHJhbnNsYXRlIGl0IHVzaW5nIC5naXQvYnJhbmNoZXMgaW5mb3JtYXRpb24KIGhhc19hbGw9CkBAIC0xOCw3ICsyMyw3IEBACiAJLS1leGVjPSopCiAJCWhhc19leGVjPSIkMSIgOzsKIAktKikKLQkJZGllICJVbmtub3duIHBhcmFtZXRlciAkMSIgOzsKKyAgICAgICAgICAgICAgICB1c2FnZSA7OwogICAgICAgICAqKQogCQlzZXQgeCAiJEAiCiAJCXNoaWZ0CkBAIC0yOCw3ICszMyw4IEBACiBkb25lCiBjYXNlICIkIyIgaW4KIDApCi0JZGllICJXaGVyZSB3b3VsZCB5b3Ugd2FudCB0byBwdXNoIHRvZGF5PyIgOzsKKwllY2hvICJXaGVyZSB3b3VsZCB5b3Ugd2FudCB0byBwdXNoIHRvZGF5PyIKKyAgICAgICAgdXNhZ2UgOzsKIGVzYWMKIAogLiBnaXQtcGFyc2UtcmVtb3RlCkBAIC00MCw4ICs0NiwxMCBAQAogc2hpZnQKIAogY2FzZSAiJHJlbW90ZSIgaW4KLWh0dHA6Ly8qIHwgaHR0cHM6Ly8qIHwgZ2l0Oi8vKiB8IHJzeW5jOi8vKiApCi0JZGllICJDYW5ub3QgcHVzaCB0byAkcmVtb3RlIiA7OworaHR0cDovLyogfCBodHRwczovLyogfCBnaXQ6Ly8qKQorCWRpZSAiQ2Fubm90IHVzZSBSRUFELU9OTFkgdHJhbnNwb3J0IHRvIHB1c2ggdG8gJHJlbW90ZSIgOzsKK3JzeW5jOi8vKikKKyAgICAgICAgZGllICJQdXNoaW5nIHdpdGggcnN5bmMgdHJhbnNwb3J0IGlzIGRlcHJlY2F0ZWQiIDs7CiBlc2FjCiAKIHNldCB4ICIkcmVtb3RlIiAiJEAiOyBzaGlmdApkaWZmIC0tZ2l0IGEvZ2l0LXJlbmFtZS5wZXJsIGIvZ2l0LXJlbmFtZS5wZXJsCmluZGV4IGEyOGM4YzguLjNiMTEyN2IgMTAwNzU1Ci0tLSBhL2dpdC1yZW5hbWUucGVybAorKysgYi9naXQtcmVuYW1lLnBlcmwKQEAgLTE1LDcgKzE1LDcgQEAKIG15ICRHSVRfRElSID0gJEVOVnsnR0lUX0RJUid9IHx8ICIuZ2l0IjsKIAogdW5sZXNzICggLWQgJEdJVF9ESVIgJiYgLWQgJEdJVF9ESVIgLiAiL29iamVjdHMiICYmIAotCS1kICRHSVRfRElSIC4gIi9vYmplY3RzLzAwIiAmJiAtZCAkR0lUX0RJUiAuICIvcmVmcyIpIHsKKwktZCAkR0lUX0RJUiAuICIvb2JqZWN0cy8iICYmIC1kICRHSVRfRElSIC4gIi9yZWZzIikgewogCXVzYWdlKCJHaXQgcmVwb3NpdG9yeSBub3QgZm91bmQuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1yZXBhY2suc2ggYi9naXQtcmVwYWNrLnNoCmluZGV4IGIzOTVkMGUuLmQzNDE5NjYgMTAwNzU1Ci0tLSBhL2dpdC1yZXBhY2suc2gKKysrIGIvZ2l0LXJlcGFjay5zaApAQCAtNSwxMyArNSwxNCBAQAogCiAuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgogCQotbm9fdXBkYXRlX2luZm89IGFsbF9pbnRvX29uZT0gcmVtb3ZlX3JlZHVuZGFudD0KK25vX3VwZGF0ZV9pbmZvPSBhbGxfaW50b19vbmU9IHJlbW92ZV9yZWR1bmRhbnQ9IGxvY2FsPQogd2hpbGUgY2FzZSAiJCMiIGluIDApIGJyZWFrIDs7IGVzYWMKIGRvCiAJY2FzZSAiJDEiIGluCiAJLW4pCW5vX3VwZGF0ZV9pbmZvPXQgOzsKIAktYSkJYWxsX2ludG9fb25lPXQgOzsKIAktZCkJcmVtb3ZlX3JlZGFuZGFudD10IDs7CisJLWwpCWxvY2FsPXQgOzsKIAkqKQlicmVhayA7OwogCWVzYWMKIAlzaGlmdApAQCAtMzcsNiArMzgsOSBAQAogCSAgICBmaW5kIC4gLXR5cGUgZiBcKCAtbmFtZSAnKi5wYWNrJyAtbyAtbmFtZSAnKi5pZHgnIFwpIC1wcmludGAKIAk7OwogZXNhYworaWYgWyAiJGxvY2FsIiBdOyB0aGVuCisJcGFja19vYmplY3RzPSIkcGFja19vYmplY3RzIC0tbG9jYWwiCitmaQogbmFtZT0kKGdpdC1yZXYtbGlzdCAtLW9iamVjdHMgJHJldl9saXN0ICQoZ2l0LXJldi1wYXJzZSAkcmV2X3BhcnNlKSB8CiAJZ2l0LXBhY2stb2JqZWN0cyAtLW5vbi1lbXB0eSAkcGFja19vYmplY3RzIC50bXAtcGFjaykgfHwKIAlleGl0IDEKQEAgLTU4LDYgKzYyLDcgQEAKIAkjIGFsbC1pbnRvLW9uZSBpcyB1c2VkLgogCWlmIHRlc3QgIiRhbGxfaW50b19vbmUiICE9ICcnICYmIHRlc3QgIiRleGlzdGluZyIgIT0gJycKIAl0aGVuCisJCXN5bmMKIAkJKCBjZCAiJFBBQ0tESVIiICYmCiAJCSAgZm9yIGUgaW4gJGV4aXN0aW5nCiAJCSAgZG8KZGlmZiAtLWdpdCBhL2dpdC1yZXNldC5zaCBiL2dpdC1yZXNldC5zaAppbmRleCBmOTk5NWNhLi4yMDg2ZDI2IDEwMDc1NQotLS0gYS9naXQtcmVzZXQuc2gKKysrIGIvZ2l0LXJlc2V0LnNoCkBAIC0xLDYgKzEsMTAgQEAKICMhL2Jpbi9zaAogLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZSIKIAordXNhZ2UgKCkgeworCWRpZSAnVXNhZ2U6IGdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZF0gIFs8Y29tbWl0LWlzaD5dJworfQorCiB0bXA9L3Zhci90bXAvcmVzZXQuJCQKIHRyYXAgJ3JtIC1mICR0bXAtKicgMCAxIDIgMyAxNQogCkBAIC0xMCw2ICsxNCw4IEBACiAJcmVzZXRfdHlwZT0iJDEiCiAJc2hpZnQKIAk7OworLSopCisgICAgICAgIHVzYWdlIDs7CiBlc2FjCiAKIHJldj0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgIiRAIikgfHwgZXhpdApkaWZmIC0tZ2l0IGEvZ2l0LXNoLXNldHVwLnNoIGIvZ2l0LXNoLXNldHVwLnNoCmluZGV4IGEwMTcyNjguLmRiYjk4ODQgMTAwNzU1Ci0tLSBhL2dpdC1zaC1zZXR1cC5zaAorKysgYi9naXQtc2gtc2V0dXAuc2gKQEAgLTIyLDQgKzIyLDQgQEAKICopCWZhbHNlIDs7CiBlc2FjICYmCiBbIC1kICIkR0lUX0RJUi9yZWZzIiBdICYmCi1bIC1kICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkvMDAiIF0KK1sgLWQgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWS8iIF0KZGlmZiAtLWdpdCBhL2dpdC1zaG9ydGxvZy5wZXJsIGIvZ2l0LXNob3J0bG9nLnBlcmwKaW5kZXggOGYwOTg0Yi4uMGIxNGY4MyAxMDA3NTUKLS0tIGEvZ2l0LXNob3J0bG9nLnBlcmwKKysrIGIvZ2l0LXNob3J0bG9nLnBlcmwKQEAgLTIsNTUgKzIsMTMgQEAKIAogdXNlIHN0cmljdDsKIAotIwotIyBFdmVuIHdpdGggZ2l0LCB3ZSBkb24ndCBhbHdheXMgaGF2ZSBuYW1lIHRyYW5zbGF0aW9ucy4KLSMgU28gaGF2ZSBhbiBlbWFpbC0+cmVhbCBuYW1lIHRhYmxlIHRvIHRyYW5zbGF0ZSB0aGUKLSMgKGhvcGVmdWxseSBmZXcpIG1pc3NpbmcgbmFtZXMKLSMKLW15ICVtYWlsbWFwID0gKAotCSdSLk1hcmVrQHNoLmN2dXQuY3onID0+ICdSdWRvbGYgTWFyZWsnLAotCSdSYWxmLldpbGRlbmh1ZXNAZ214LmRlJyA9PiAnUmFsZiBXaWxkZW5odWVzJywKLQknYWhlcnJtYW5AZGUuaWJtLmNvbScgPT4gJ0FuZHJlYXMgSGVycm1hbm4nLAotCSdha3BtQG9zZGwub3JnJyA9PiAnQW5kcmV3IE1vcnRvbicsCi0JJ2FuZHJldy52YXNxdWV6QHFsb2dpYy5jb20nID0+ICdBbmRyZXcgVmFzcXVleicsCi0JJ2FxdXluaEBnbWFpbC5jb20nID0+ICdOZ3V5ZW4gQW5oIFF1eW5oJywKLQknYXhib2VAc3VzZS5kZScgPT4gJ0plbnMgQXhib2UnLAotCSdibGFpc29yYmxhZGVAeWFob28uaXQnID0+ICdQYW9sbyBcJ0JsYWlzb3JibGFkZVwnIEdpYXJydXNzbycsCi0JJ2J1bmtAc3R1c3RhLmRlJyA9PiAnQWRyaWFuIEJ1bmsnLAotCSdkb21lbkBjb2Rlcm9jay5vcmcnID0+ICdEb21lbiBQdW5jZXInLAotCSdkb3VnZ0B0b3JxdWUubmV0JyA9PiAnRG91Z2xhcyBHaWxiZXJ0JywKLQknZHdtdzJAc2hpbnlib29rLmluZnJhZGVhZC5vcmcnID0+ICdEYXZpZCBXb29kaG91c2UnLAotCSdlY2FzaGluQGNvcmFpZC5jb20nID0+ICdFZCBMIENhc2hpbicsCi0JJ2ZlbGl4QGRlcmtsZWNrcy5kZScgPT4gJ0ZlbGl4IE1vZWxsZXInLAotCSdmemFnb0BzeXN0ZW1mYWJyaWN3b3Jrcy5jb20nID0+ICdGcmFuayBaYWdvJywKLQknZ3JlZ2toQHN1c2UuZGUnID0+ICdHcmVnIEtyb2FoLUhhcnRtYW4nLAotCSdoY2hAbHN0LmRlJyA9PiAnQ2hyaXN0b3BoIEhlbGx3aWcnLAotCSdodGVqdW5AZ21haWwuY29tJyA9PiAnVGVqdW4gSGVvJywKLQknamVqYkBtdWxncmF2ZS4obm9uZSknID0+ICdKYW1lcyBCb3R0b21sZXknLAotCSdqZWpiQHRpdGFuaWMuaWwuc3RlZWxleWUuY29tJyA9PiAnSmFtZXMgQm90dG9tbGV5JywKLQknamdhcnppa0BwcmV0emVsLnl5ei51cycgPT4gJ0plZmYgR2FyemlrJywKLQknam9obnBvbEAya2EubWlwdC5ydScgPT4gJ0V2Z2VuaXkgUG9seWFrb3YnLAotCSdrYXkuc2lldmVyc0B2cmZ5Lm9yZycgPT4gJ0theSBTaWV2ZXJzJywKLQknbWlueWFyZEBhY20ub3JnJyA9PiAnQ29yZXkgTWlueWFyZCcsCi0JJ21zaGFoQHRlamEuY29tJyA9PiAnTWl0ZXNoIHNoYWgnLAotCSdwakBsdWRkLmx0dS5zZScgPT4gJ1BldGVyIEEgSm9uc3NvbicsCi0JJ3JtcHNAam9lbC5pc3QudXRsLnB0JyA9PiAnUnVpIFNhcmFpdmEnLAotCSdzYW50dHUuaHlya2tvQGdtYWlsLmNvbScgPT4gJ1NhbnR0dSBIeXJra/YnLAotCSdzaW1vbkB0aGVrZWxsZXlzLm9yZy51aycgPT4gJ1NpbW9uIEtlbGxleScsCi0JJ3NzYW50QGluLmlibS5jb20nID0+ICdTYWNoaW4gUCBTYW50JywKLQkndGVycmFAZ25vbWUub3JnJyA9PiAnTW9ydGVuIFdlbGluZGVyJywKLQkndG9ueS5sdWNrQGludGVsLmNvbScgPT4gJ1RvbnkgTHVjaycsCi0JJ3dlbGluZGVyQGFuZW1vbmUucmVudGVjLmNvbScgPT4gJ01vcnRlbiBXZWxpbmRlcicsCi0JJ3dlbGluZGVyQGRhcnRlci5yZW50ZWMuY29tJyA9PiAnTW9ydGVuIFdlbGluZGVyJywKLQknd2VsaW5kZXJAdHJvbGwuY29tJyA9PiAnTW9ydGVuIFdlbGluZGVyJywKLSk7Ci0KK215ICglbWFpbG1hcCk7CitteSAoJWVtYWlsKTsKIG15ICglbWFwKTsKIG15ICRwc3RhdGUgPSAxOwogbXkgJG5fcmVjb3JkcyA9IDA7CiBteSAkbl9vdXRwdXQgPSAwOwogCi0KIHN1YiBzaG9ydGxvZ19lbnRyeSgkJCkgewogCW15ICgkbmFtZSwgJGRlc2MpID0gQF87CiAJbXkgJGtleSA9ICRuYW1lOwpAQCAtMTA4LDQxICs2NiwzNSBAQAogCQlpZiAoJHBzdGF0ZSA9PSAxKSB7CiAJCQlteSAoJGVtYWlsKTsKIAotCQkJbmV4dCB1bmxlc3MgL15bQWFddXRob3I6PyAoLiopPCguKik+LiokLzsKLQkKKwkJCW5leHQgdW5sZXNzIC9eW0FhXXV0aG9yOj9ccyooLio/KVxzKjwoLiopPi87CisKIAkJCSRuX3JlY29yZHMrKzsKLQkKKwogCQkJJGF1dGhvciA9ICQxOwogCQkJJGVtYWlsID0gJDI7CiAJCQkkZGVzYyA9IHVuZGVmOwogCi0JCQkjIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4KLQkJCSMgd2h5IGRvZXNuJ3QgY2hvbXAgd29yaz8KLQkJCXdoaWxlICgkYXV0aG9yICYmICgkYXV0aG9yID1+IC9ccyQvKSkgewotCQkJCWNob3AgJGF1dGhvcjsKLQkJCX0KLQkKIAkJCSMgY3NldCBhdXRob3IgZml4dXBzCiAJCQlpZiAoZXhpc3RzICRtYWlsbWFweyRlbWFpbH0pIHsKIAkJCQkkYXV0aG9yID0gJG1haWxtYXB7JGVtYWlsfTsKIAkJCX0gZWxzaWYgKGV4aXN0cyAkbWFpbG1hcHskYXV0aG9yfSkgewogCQkJCSRhdXRob3IgPSAkbWFpbG1hcHskYXV0aG9yfTsKLQkJCX0gZWxzaWYgKCghJGF1dGhvcikgfHwgKCRhdXRob3IgZXEgIiIpKSB7CisJCQl9IGVsc2lmICghJGF1dGhvcikgewogCQkJCSRhdXRob3IgPSAkZW1haWw7CiAJCQl9Ci0JCisJCQkkZW1haWx7JGF1dGhvcn17JGVtYWlsfSsrOwogCQkJJHBzdGF0ZSsrOwogCQl9Ci0JCisKIAkJIyBza2lwIHRvIGJsYW5rIGxpbmUKIAkJZWxzaWYgKCRwc3RhdGUgPT0gMikgewogCQkJbmV4dCB1bmxlc3MgL15ccyokLzsKIAkJCSRwc3RhdGUrKzsKIAkJfQotCQorCiAJCSMgc2tpcCB0byBub24tYmxhbmsgbGluZQogCQllbHNpZiAoJHBzdGF0ZSA9PSAzKSB7Ci0JCQluZXh0IHVubGVzcyAvXlxzKihcUy4qKSQvOworCQkJbmV4dCB1bmxlc3MgL15ccyo/KC4qKS87CiAKIAkJCSMgc2tpcCBsaW5lcyB0aGF0IGFyZSBvYnZpb3VzbHkgbm90CiAJCQkjIGEgMS1saW5lIGNzZXQgZGVzY3JpcHRpb24KQEAgLTE1MCw5ICsxMDIsOSBAQAogCiAJCQljaG9tcDsKIAkJCSRkZXNjID0gJDE7Ci0JCisKIAkJCSZzaG9ydGxvZ19lbnRyeSgkYXV0aG9yLCAkZGVzYyk7Ci0JCisKIAkJCSRwc3RhdGUgPSAxOwogCQl9CiAJCkBAIC0xNjIsMTYgKzExNCw4NyBAQAogCX0KIH0KIAorc3ViIHJlYWRfbWFpbG1hcCB7CisJbXkgKCRmaCwgJG1haWxtYXApID0gQF87CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlpZiAoL14oW14jXS4qPylccyo8KC4qKT4vKSB7CisJCQkkbWFpbG1hcC0+eyQyfSA9ICQxOworCQl9CisJfQorfQorCitzdWIgc2V0dXBfbWFpbG1hcCB7CisJcmVhZF9tYWlsbWFwKFwqREFUQSwgXCVtYWlsbWFwKTsKKwlpZiAoLWYgJy5tYWlsbWFwJykgeworCQlteSAkZmggPSB1bmRlZjsKKwkJb3BlbiAkZmgsICc8JywgJy5tYWlsbWFwJzsKKwkJcmVhZF9tYWlsbWFwKCRmaCwgXCVtYWlsbWFwKTsKKwkJY2xvc2UgJGZoOworCX0KK30KKwogc3ViIGZpbmFsaXplIHsKIAkjcHJpbnQgIlxuJG5fcmVjb3JkcyByZWNvcmRzIHBhcnNlZC5cbiI7CiAKIAlpZiAoJG5fcmVjb3JkcyAhPSAkbl9vdXRwdXQpIHsKIAkJZGllICJwYXJzZSBlcnJvcjogaW5wdXQgcmVjb3JkcyAhPSBvdXRwdXQgcmVjb3Jkc1xuIjsKIAl9CisJaWYgKDApIHsKKwkJZm9yIG15ICRhdXRob3IgKHNvcnQga2V5cyAlZW1haWwpIHsKKwkJCW15ICRlID0gJGVtYWlseyRhdXRob3J9OworCQkJZm9yIG15ICRlbWFpbCAoc29ydCBrZXlzICUkZSkgeworCQkJCXByaW50IFNUREVSUiAiJGF1dGhvciA8JGVtYWlsPlxuIjsKKwkJCX0KKwkJfQorCX0KIH0KIAorJnNldHVwX21haWxtYXA7CiAmY2hhbmdlbG9nX2lucHV0OwogJnNob3J0bG9nX291dHB1dDsKICZmaW5hbGl6ZTsKIGV4aXQoMCk7CiAKKworX19EQVRBX18KKyMKKyMgRXZlbiB3aXRoIGdpdCwgd2UgZG9uJ3QgYWx3YXlzIGhhdmUgbmFtZSB0cmFuc2xhdGlvbnMuCisjIFNvIGhhdmUgYW4gZW1haWwtPnJlYWwgbmFtZSB0YWJsZSB0byB0cmFuc2xhdGUgdGhlCisjIChob3BlZnVsbHkgZmV3KSBtaXNzaW5nIG5hbWVzCisjCitBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CitBbmRyZWFzIEhlcnJtYW5uIDxhaGVycm1hbkBkZS5pYm0uY29tPgorQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4KK0FuZHJldyBWYXNxdWV6IDxhbmRyZXcudmFzcXVlekBxbG9naWMuY29tPgorQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+CitDb3JleSBNaW55YXJkIDxtaW55YXJkQGFjbS5vcmc+CitEYXZpZCBXb29kaG91c2UgPGR3bXcyQHNoaW55Ym9vay5pbmZyYWRlYWQub3JnPgorRG9tZW4gUHVuY2VyIDxkb21lbkBjb2Rlcm9jay5vcmc+CitEb3VnbGFzIEdpbGJlcnQgPGRvdWdnQHRvcnF1ZS5uZXQ+CitFZCBMIENhc2hpbiA8ZWNhc2hpbkBjb3JhaWQuY29tPgorRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4KK0ZlbGl4IE1vZWxsZXIgPGZlbGl4QGRlcmtsZWNrcy5kZT4KK0ZyYW5rIFphZ28gPGZ6YWdvQHN5c3RlbWZhYnJpY3dvcmtzLmNvbT4KK0dyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CitKYW1lcyBCb3R0b21sZXkgPGplamJAbXVsZ3JhdmUuKG5vbmUpPgorSmFtZXMgQm90dG9tbGV5IDxqZWpiQHRpdGFuaWMuaWwuc3RlZWxleWUuY29tPgorSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcHJldHplbC55eXoudXM+CitKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPgorTWl0ZXNoIHNoYWggPG1zaGFoQHRlamEuY29tPgorTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBnbm9tZS5vcmc+CitNb3J0ZW4gV2VsaW5kZXIgPHdlbGluZGVyQGFuZW1vbmUucmVudGVjLmNvbT4KK01vcnRlbiBXZWxpbmRlciA8d2VsaW5kZXJAZGFydGVyLnJlbnRlYy5jb20+CitNb3J0ZW4gV2VsaW5kZXIgPHdlbGluZGVyQHRyb2xsLmNvbT4KK05ndXllbiBBbmggUXV5bmggPGFxdXluaEBnbWFpbC5jb20+CitQYW9sbyAnQmxhaXNvcmJsYWRlJyBHaWFycnVzc28gPGJsYWlzb3JibGFkZUB5YWhvby5pdD4KK1BldGVyIEEgSm9uc3NvbiA8cGpAbHVkZC5sdHUuc2U+CitSYWxmIFdpbGRlbmh1ZXMgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CitSdWRvbGYgTWFyZWsgPFIuTWFyZWtAc2guY3Z1dC5jej4KK1J1aSBTYXJhaXZhIDxybXBzQGpvZWwuaXN0LnV0bC5wdD4KK1NhY2hpbiBQIFNhbnQgPHNzYW50QGluLmlibS5jb20+CitTYW50dHUgSHlya2sbLEF2GyhCIDxzYW50dHUuaHlya2tvQGdtYWlsLmNvbT4KK1NpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+CitUZWp1biBIZW8gPGh0ZWp1bkBnbWFpbC5jb20+CitUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+CmRpZmYgLS1naXQgYS9naXQtc3RhdHVzLnNoIGIvZ2l0LXN0YXR1cy5zaAppbmRleCBmYmRkMzc3Li42MmEyNGE5IDEwMDc1NQotLS0gYS9naXQtc3RhdHVzLnNoCisrKyBiL2dpdC1zdGF0dXMuc2gKQEAgLTExLDcgKzExLDcgQEAKICMKICIKICAgdHJhaWxlcj0iIgotICB3aGlsZSByZWFkIG9sZG1vZGUgbW9kZSBvbGRzaGEgc2hhIHN0YXR1cyBuYW1lIG5ld25hbWUKKyAgd2hpbGUgcmVhZCBzdGF0dXMgbmFtZSBuZXduYW1lCiAgIGRvCiAgICAgZWNobyAtbiAiJGhlYWRlciIKICAgICBoZWFkZXI9IiIKQEAgLTQxLDE2ICs0MSwxMSBAQAogCiBpZiBHSVRfRElSPSIkR0lUX0RJUiIgZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgMj4mMQogdGhlbgotCWdpdC1kaWZmLWluZGV4IC1NIC0tY2FjaGVkIEhFQUQgfAorCWdpdC1kaWZmLWluZGV4IC1NIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgSEVBRCB8CiAJc2VkIC1lICcKLQkJcy9eOi8vIAotCQloCi0JCXMvXlteCV0qLy8KKwkJcy9cXC9cXFxcL2cKIAkJcy8gL1xcIC9nCi0JCXgKLQkJcy8JLiokLy8KLQkJRwotCQlzL1xuLyAvJyB8CisJJyB8CiAJcmVwb3J0ICJVcGRhdGVkIGJ1dCBub3QgY2hlY2tlZCBpbiIgIndpbGwgY29tbWl0IgogCiAJY29tbWl0dGFibGU9IiQ/IgpAQCAtNjAsNDAgKzU1LDQ4IEBACiAjJwogCWdpdC1scy1maWxlcyB8CiAJc2VkIC1lICcKKwkJcy9cXC9cXFxcL2cKIAkJcy8gL1xcIC9nCi0JCXMvXi9vIG8gbyBvIEEgLycgfAorCQlzL14vQSAvCisJJyB8CiAJcmVwb3J0ICJVcGRhdGVkIGJ1dCBub3QgY2hlY2tlZCBpbiIgIndpbGwgY29tbWl0IgogCiAJY29tbWl0dGFibGU9IiQ/IgogZmkKIAotZ2l0LWRpZmYtZmlsZXMgfAorZ2l0LWRpZmYtZmlsZXMgIC0tbmFtZS1zdGF0dXMgfAogc2VkIC1lICcKLQlzL146Ly8gCi0JaAotCXMvXlteCV0qLy8KKwlzL1xcL1xcXFwvZwogCXMvIC9cXCAvZwotCXgKLQlzLwkuKiQvLwotCUcKLQlzL1xuLyAvJyB8CisnIHwKIHJlcG9ydCAiQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQiICJ1c2UgZ2l0LXVwZGF0ZS1pbmRleCB0byBtYXJrIGZvciBjb21taXQiCiAKLWlmIGdyZXAgLXYgJ14jJyAiJEdJVF9ESVIvaW5mby9leGNsdWRlIiA+L2Rldi9udWxsIDI+JjEKKworaWYgdGVzdCAtZiAiJEdJVF9ESVIvaW5mby9leGNsdWRlIgogdGhlbgotCWdpdC1scy1maWxlcyAtLW90aGVycyBcCi0JICAgIC0tZXhjbHVkZS1mcm9tPSIkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUiIFwKLQkgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSB8Ci0Jc2VkIC1lICcKLQkxaVwKLSNcCi0jIElnbm9yZWQgZmlsZXM6XAotIyAgICh1c2UgImdpdCBhZGQiIHRvIGFkZCB0byBjb21taXQpXAotIwotCXMvXi8jCS8KLQkkYVwKLSMnCi1maQorICAgIGdpdC1scy1maWxlcyAteiAtLW90aGVycyBcCisJLS1leGNsdWRlLWZyb209IiRHSVRfRElSL2luZm8vZXhjbHVkZSIgXAorICAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlCitlbHNlCisgICAgZ2l0LWxzLWZpbGVzIC16IC0tb3RoZXJzIFwKKyAgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZQorZmkgfAorcGVybCAtZSAnJC8gPSAiXDAiOworCW15ICRzaG93biA9IDA7CisJd2hpbGUgKDw+KSB7CisJCWNob21wOworCQlzfFxcfFxcXFx8ZzsKKwkJc3xcdHxcXHR8ZzsKKwkJc3xcbnxcXG58ZzsKKwkJcy9eLyMJLzsKKwkJaWYgKCEkc2hvd24pIHsKKwkJCXByaW50ICIjXG4jIFVudHJhY2tlZCBmaWxlczpcbiI7CisJCQlwcmludCAiIyAgICh1c2UgXCJnaXQgYWRkXCIgdG8gYWRkIHRvIGNvbW1pdClcbiNcbiI7CisJCQkkc2hvd24gPSAxOworCQl9CisJCXByaW50ICIkX1xuIjsKKwl9CisnCiAKIGNhc2UgIiRjb21taXR0YWJsZSIgaW4KIDApCmRpZmYgLS1naXQgYS9naXQtc3ZuaW1wb3J0LnBlcmwgYi9naXQtc3ZuaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDViNmExOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdm5pbXBvcnQucGVybApAQCAtMCwwICsxLDcxNyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMgVGhpcyB0b29sIGlzIGNvcHlyaWdodCAoYykgMjAwNSwgTWF0dGhpYXMgVXJsaWNocy4KKyMgSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdudSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorIworIyBUaGUgYmFzaWMgaWRlYSBpcyB0byBwdWxsIGFuZCBhbmFseXplIFNWTiBjaGFuZ2VzLgorIworIyBDaGVja2luZyBvdXQgdGhlIGZpbGVzIGlzIGRvbmUgYnkgYSBzaW5nbGUgbG9uZy1ydW5uaW5nIFNWTiBjb25uZWN0aW9uLgorIworIyBUaGUgaGVhZCByZXZpc2lvbiBpcyBvbiBicmFuY2ggIm9yaWdpbiIgYnkgZGVmYXVsdC4KKyMgWW91IGNhbiBjaGFuZ2UgdGhhdCB3aXRoIHRoZSAnLW8nIG9wdGlvbi4KKworcmVxdWlyZSA1LjAwODsgIyBmb3Igc2hlbGwtc2FmZSBvcGVuKCItfCIsTElTVCkKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgVGltZTo6TG9jYWw7Cit1c2UgSU86OlBpcGU7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBTVk46OkNvcmU7Cit1c2UgU1ZOOjpSYTsKKworZGllICJOZWVkIENWTjpDb3JlIDEuMi4xIG9yIGJldHRlciIgaWYgJFNWTjo6Q29yZTo6VkVSU0lPTiBsdCAiMS4yLjEiOworCiskU0lHeydQSVBFJ309IklHTk9SRSI7CiskRU5WeydUWid9PSJVVEMiOworCitvdXIoJG9wdF9oLCRvcHRfbywkb3B0X3YsJG9wdF91LCRvcHRfQywkb3B0X2ksJG9wdF9tLCRvcHRfTSwkb3B0X3QsJG9wdF9ULCRvcHRfYiwkb3B0X3MsJG9wdF9sLCRvcHRfZCwkb3B0X0QpOworCitzdWIgdXNhZ2UoKSB7CisJcHJpbnQgU1RERVJSIDw8RU5EOworVXNhZ2U6ICR7XGJhc2VuYW1lICQwfSAgICAgIyBmZXRjaC91cGRhdGUgR0lUIGZyb20gQ1ZTCisgICAgICAgWy1vIGJyYW5jaC1mb3ItSEVBRF0gWy1oXSBbLXZdIFstbCBtYXhfbnVtX2NoYW5nZXNdCisgICAgICAgWy1DIEdJVF9yZXBvc2l0b3J5XSBbLXQgdGFnbmFtZV0gWy1UIHRydW5rbmFtZV0gWy1iIGJyYW5jaG5hbWVdCisgICAgICAgWy1kfC1EXSBbLWldIFstdV0gWy1zIHN0YXJ0X2NoZ10gWy1tXSBbLU0gcmVnZXhdIFtTVk5fVVJMXQorRU5ECisJZXhpdCgxKTsKK30KKworZ2V0b3B0cygiYjpDOmREaGlsOm1NOm86czp0OlQ6dXYiKSBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitteSAkdGFnX25hbWUgPSAkb3B0X3QgfHwgInRhZ3MiOworbXkgJHRydW5rX25hbWUgPSAkb3B0X1QgfHwgInRydW5rIjsKK215ICRicmFuY2hfbmFtZSA9ICRvcHRfYiB8fCAiYnJhbmNoZXMiOworCitAQVJHViA9PSAxIG9yIEBBUkdWID09IDIgb3IgdXNhZ2UoKTsKKworJG9wdF9vIHx8PSAib3JpZ2luIjsKKyRvcHRfcyB8fD0gMTsKKyRvcHRfbCA9IDEwMCB1bmxlc3MgZGVmaW5lZCAkb3B0X2w7CitteSAkZ2l0X3RyZWUgPSAkb3B0X0M7CiskZ2l0X3RyZWUgfHw9ICIuIjsKKworbXkgJHN2bl91cmwgPSAkQVJHVlswXTsKK215ICRzdm5fZGlyID0gJEFSR1ZbMV07CisKK291ciBAbWVyZ2VyeCA9ICgpOworaWYgKCRvcHRfbSkgeworCUBtZXJnZXJ4ID0gKCBxci9cVyg/OmZyb218b2Z8bWVyZ2V8bWVyZ2luZ3xtZXJnZWQpIChcdyspL2kgKTsKK30KK2lmICgkb3B0X00pIHsKKwlwdXNoIChAbWVyZ2VyeCwgcXIvJG9wdF9NLyk7Cit9CisKK3NlbGVjdChTVERFUlIpOyAkfD0xOyBzZWxlY3QoU1RET1VUKTsKKworCitwYWNrYWdlIFNWTmNvbm47CisjIEJhc2ljIFNWTiBjb25uZWN0aW9uLgorIyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gY29ubmVjdGluZyBhbmQgZG93bmxvYWRpbmcsIHNvIC4uLgorCit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKK3VzZSBQT1NJWCBxdyhzdHJmdGltZSBkdXAyKTsKKworc3ViIG5ldyB7CisJbXkoJHdoYXQsJHJlcG8pID0gQF87CisJJHdoYXQ9cmVmKCR3aGF0KSBpZiByZWYoJHdoYXQpOworCisJbXkgJHNlbGYgPSB7fTsKKwkkc2VsZi0+eydidWZmZXInfSA9ICIiOworCWJsZXNzKCRzZWxmLCR3aGF0KTsKKworCSRyZXBvID1+IHMjLyskIyM7CisJJHNlbGYtPnsnZnVsbHJlcCd9ID0gJHJlcG87CisJJHNlbGYtPmNvbm4oKTsKKworCXJldHVybiAkc2VsZjsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJbXkgJHMgPSBTVk46OlJhLT5uZXcoJHJlcG8pOworCisJZGllICJTVk4gY29ubmVjdGlvbiB0byAkcmVwbzogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHM7CisJJHNlbGYtPnsnc3ZuJ30gPSAkczsKKwkkc2VsZi0+eydyZXBvJ30gPSAkcmVwbzsKKwkkc2VsZi0+eydtYXhyZXYnfSA9ICRzLT5nZXRfbGF0ZXN0X3Jldm51bSgpOworfQorCitzdWIgZmlsZSB7CisJbXkoJHNlbGYsJHBhdGgsJHJldikgPSBAXzsKKworCW15ICgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRzdm4uWFhYWFhYJywKKwkJICAgIERJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCisJcHJpbnQgIi4uLiAkcmV2ICRwYXRoIC4uLlxuIiBpZiAkb3B0X3Y7CisJZXZhbCB7ICRzZWxmLT57J3N2bid9LT5nZXRfZmlsZSgkcGF0aCwkcmV2LCRmaCk7IH07CisJaWYoJEApIHsKKwkJcmV0dXJuIHVuZGVmIGlmICRAID1+IC9BdHRlbXB0ZWQgdG8gZ2V0IGNoZWNrc3VtLzsKKwkJZGllICRAOworCX0KKwljbG9zZSAoJGZoKTsKKworCXJldHVybiAkbmFtZTsKK30KKworcGFja2FnZSBtYWluOwordXNlIFVSSTsKKworbXkgJHN2biA9ICRzdm5fdXJsOworJHN2biAuPSAiLyRzdm5fZGlyIiBpZiBkZWZpbmVkICRzdm5fZGlyOworJHN2biA9IFNWTmNvbm4tPm5ldygkc3ZuKTsKKworbXkgJGx3cF91YTsKK2lmKCRvcHRfZCBvciAkb3B0X0QpIHsKKwkkc3ZuX3VybCA9IFVSSS0+bmV3KCRzdm5fdXJsKS0+Y2Fub25pY2FsOworCWlmKCRvcHRfRCkgeworCQkkc3ZuX2RpciA9fiBzIy8qJCMvIzsKKwl9IGVsc2UgeworCQkkc3ZuX2RpciA9ICIiOworCX0KKwlpZiAoJHN2bl91cmwtPnNjaGVtZSBlcSAiaHR0cCIpIHsKKwkJdXNlIExXUDo6VXNlckFnZW50OworCQkkbHdwX3VhID0gTFdQOjpVc2VyQWdlbnQtPm5ldyhrZWVwX2FsaXZlID0+IDEsIHJlcXVlc3RzX3JlZGlyZWN0YWJsZSA9PiBbXSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBub3QgSFRUUDsgdHVybmluZyBvZmYgZGlyZWN0IGZpbGUgYWNjZXNzXG4iOworCQkkb3B0X2Q9MDsKKwl9Cit9CisKK3N1YiBwZGF0ZSgkKSB7CisJbXkoJGQpID0gQF87CisJJGQgPX4gbSMoXGRcZFxkXGQpLShcZFxkKS0oXGRcZClUKFxkXGQpOihcZFxkKTooXGRcZCkjCisJCW9yIGRpZSAiVW5wYXJzZWFibGUgZGF0ZTogJGRcbiI7CisJbXkgJHk9JDE7ICR5LT0xOTAwIGlmICR5PjE5MDA7CisJcmV0dXJuIHRpbWVnbSgkNnx8MCwkNSwkNCwkMywkMi0xLCR5KTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCisKK3N1YiBnZXRfaGVhZHJlZigkJCkgeworICAgIG15ICRuYW1lICAgID0gc2hpZnQ7CisgICAgbXkgJGdpdF9kaXIgPSBzaGlmdDsKKyAgICBteSAkc2hhOworCisgICAgaWYgKG9wZW4oQywiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbmFtZSIpKSB7CisJY2hvbXAoJHNoYSA9IDxDPik7CisJY2xvc2UoQyk7CisJbGVuZ3RoKCRzaGEpID09IDQwCisJICAgIG9yIGRpZSAiQ2Fubm90IGdldCBoZWFkIGlkIGZvciAkbmFtZSAoJHNoYSk6ICQhXG4iOworICAgIH0KKyAgICByZXR1cm4gJHNoYTsKK30KKworCistZCAkZ2l0X3RyZWUKKwlvciBta2RpcigkZ2l0X3RyZWUsMDc3NykKKwlvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgJGdpdF90cmVlOiAkISI7CitjaGRpcigkZ2l0X3RyZWUpOworCitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICRmb3J3YXJkX21hc3RlciA9IDA7CitteSAlYnJhbmNoZXM7CisKK215ICRnaXRfZGlyID0gJEVOVnsiR0lUX0RJUiJ9IHx8ICIuZ2l0IjsKKyRnaXRfZGlyID0gZ2V0d2QoKS4iLyIuJGdpdF9kaXIgdW5sZXNzICRnaXRfZGlyID1+IG0jXi8jOworJEVOVnsiR0lUX0RJUiJ9ID0gJGdpdF9kaXI7CitteSAkb3JpZ19naXRfaW5kZXg7Ciskb3JpZ19naXRfaW5kZXggPSAkRU5We0dJVF9JTkRFWF9GSUxFfSBpZiBleGlzdHMgJEVOVntHSVRfSU5ERVhfRklMRX07CitteSAoJGdpdF9paCwgJGdpdF9pbmRleCkgPSB0ZW1wZmlsZSgnZ2l0WFhYWFhYJywgU1VGRklYID0+ICcuaWR4JywKKwkJCQkgICAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKK2Nsb3NlICgkZ2l0X2loKTsKKyRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGdpdF9pbmRleDsKK215ICRtYXhudW0gPSAwOworbXkgJGxhc3RfcmV2ID0gIiI7CitteSAkbGFzdF9icmFuY2g7CitteSAkY3VycmVudF9yZXYgPSAkb3B0X3MtMTsKK3VubGVzcygtZCAkZ2l0X2RpcikgeworCXN5c3RlbSgiZ2l0LWluaXQtZGIiKTsKKwlkaWUgIkNhbm5vdCBpbml0IHRoZSBHSVQgZGIgYXQgJGdpdF90cmVlOiAkP1xuIiBpZiAkPzsKKwlzeXN0ZW0oImdpdC1yZWFkLXRyZWUiKTsKKwlkaWUgIkNhbm5vdCBpbml0IGFuIGVtcHR5IHRyZWU6ICQ/XG4iIGlmICQ/OworCisJJGxhc3RfYnJhbmNoID0gJG9wdF9vOworCSRvcmlnX2JyYW5jaCA9ICIiOworfSBlbHNlIHsKKwktZiAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kb3B0X28iCisJCW9yIGRpZSAiQnJhbmNoICckb3B0X28nIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJFaXRoZXIgdXNlIHRoZSBjb3JyZWN0ICctbyBicmFuY2gnIG9wdGlvbixcbiIuCisJCSAgICAgICAib3IgaW1wb3J0IHRvIGEgbmV3IHJlcG9zaXRvcnkuXG4iOworCisJLWYgIiRnaXRfZGlyL3N2bjJnaXQiCisJCW9yIGRpZSAiJyRnaXRfZGlyL3N2bjJnaXQnIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJZb3UgbmVlZCB0aGF0IGZpbGUgZm9yIGluY3JlbWVudGFsIGltcG9ydHMuXG4iOworCSRsYXN0X2JyYW5jaCA9IGJhc2VuYW1lKHJlYWRsaW5rKCIkZ2l0X2Rpci9IRUFEIikpOworCXVubGVzcygkbGFzdF9icmFuY2gpIHsKKwkJd2FybiAiQ2Fubm90IHJlYWQgdGhlIGxhc3QgYnJhbmNoIG5hbWU6ICQhIC0tIGFzc3VtaW5nICdtYXN0ZXInXG4iOworCQkkbGFzdF9icmFuY2ggPSAibWFzdGVyIjsKKwl9CisJJG9yaWdfYnJhbmNoID0gJGxhc3RfYnJhbmNoOworCSRsYXN0X3JldiA9IGdldF9oZWFkcmVmKCRvcmlnX2JyYW5jaCwgJGdpdF9kaXIpOworCWlmICgtZiAiJGdpdF9kaXIvU1ZOMkdJVF9IRUFEIikgeworCQlkaWUgPDxFT007CitTVk4yR0lUX0hFQUQgZXhpc3RzLgorTWFrZSBzdXJlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgY29ycmVzcG9uZHMgdG8gSEVBRCBhbmQgcmVtb3ZlIFNWTjJHSVRfSEVBRC4KK1lvdSBtYXkgbmVlZCB0byBydW4KKworICAgIGdpdC1yZWFkLXRyZWUgLW0gLXUgU1ZOMkdJVF9IRUFEIEhFQUQKK0VPTQorCX0KKwlzeXN0ZW0oJ2NwJywgIiRnaXRfZGlyL0hFQUQiLCAiJGdpdF9kaXIvU1ZOMkdJVF9IRUFEIik7CisKKwkkZm9yd2FyZF9tYXN0ZXIgPQorCSAgICAkb3B0X28gbmUgJ21hc3RlcicgJiYgLWYgIiRnaXRfZGlyL3JlZnMvaGVhZHMvbWFzdGVyIiAmJgorCSAgICBzeXN0ZW0oJ2NtcCcsICctcycsICIkZ2l0X2Rpci9yZWZzL2hlYWRzL21hc3RlciIsCisJCQkJIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIikgPT0gMDsKKworCSMgcG9wdWxhdGUgaW5kZXgKKwlzeXN0ZW0oJ2dpdC1yZWFkLXRyZWUnLCAkbGFzdF9yZXYpOworCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisKKwkjIEdldCB0aGUgbGFzdCBpbXBvcnQgdGltZXN0YW1wcworCW9wZW4gbXkgJEIsIjwiLCAiJGdpdF9kaXIvc3ZuMmdpdCI7CisJd2hpbGUoPCRCPikgeworCQljaG9tcDsKKwkJbXkoJG51bSwkYnJhbmNoLCRyZWYpID0gc3BsaXQ7CisJCSRicmFuY2hlc3skYnJhbmNofXskbnVtfSA9ICRyZWY7CisJCSRicmFuY2hlc3skYnJhbmNofXsiTEFTVCJ9ID0gJHJlZjsKKwkJJGN1cnJlbnRfcmV2ID0gJG51bSBpZiAkY3VycmVudF9yZXYgPCAkbnVtOworCX0KKwljbG9zZSgkQik7Cit9CistZCAkZ2l0X2RpcgorCW9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSBnaXQgc3ViZGlyICgkZ2l0X2RpcikuXG4iOworCitvcGVuIEJSQU5DSEVTLCI+PiIsICIkZ2l0X2Rpci9zdm4yZ2l0IjsKKworc3ViIGdldF9maWxlKCQkJCkgeworCW15KCRyZXYsJGJyYW5jaCwkcGF0aCkgPSBAXzsKKworCSMgcmV2ZXJ0IHNwbGl0X3BhdGgoKSwgYmVsb3cKKwlteSAkc3ZucGF0aDsKKwkkcGF0aCA9ICIiIGlmICRwYXRoIGVxICIvIjsgIyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgLi4uCisJaWYoJGJyYW5jaCBlcSAiLyIpIHsKKwkJJHN2bnBhdGggPSAiJHRydW5rX25hbWUvJHBhdGgiOworCX0gZWxzaWYoJGJyYW5jaCA9fiBtI14vIykgeworCQkkc3ZucGF0aCA9ICIkdGFnX25hbWUkYnJhbmNoLyRwYXRoIjsKKwl9IGVsc2UgeworCQkkc3ZucGF0aCA9ICIkYnJhbmNoX25hbWUvJGJyYW5jaC8kcGF0aCI7CisJfQorCisJIyBub3cgZ2V0IGl0CisJbXkgJG5hbWU7CisJaWYoJG9wdF9kKSB7CisJCW15KCRyZXEsJHJlcyk7CisKKwkJIyAvc3ZuLyFzdm4vYmMvMi9kamFuZ28vdHJ1bmsvZGphbmdvLWRvY3MvYnVpbGQucHkKKwkJbXkgJHVybD0kc3ZuX3VybC0+Y2xvbmUoKTsKKwkJJHVybC0+cGF0aCgkdXJsLT5wYXRoLiIvIXN2bi9iYy8kcmV2LyRzdm5fZGlyJHN2bnBhdGgiKTsKKwkJcHJpbnQgIi4uLiAkcGF0aC4uLlxuIiBpZiAkb3B0X3Y7CisJCSRyZXEgPSBIVFRQOjpSZXF1ZXN0LT5uZXcoR0VUID0+ICR1cmwpOworCQkkcmVzID0gJGx3cF91YS0+cmVxdWVzdCgkcmVxKTsKKwkJaWYgKCRyZXMtPmlzX3N1Y2Nlc3MpIHsKKwkJCW15ICRmaDsKKwkJCSgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRzdm4uWFhYWFhYJywKKwkJCURJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCQkJcHJpbnQgJGZoICRyZXMtPmNvbnRlbnQ7CisJCQljbG9zZSgkZmgpIG9yIGRpZSAiQ291bGQgbm90IHdyaXRlICRuYW1lOiAkIVxuIjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiB1bmRlZiBpZiAkcmVzLT5jb2RlID09IDMwMTsgIyBkaXJlY3Rvcnk/CisJCQlkaWUgJHJlcy0+c3RhdHVzX2xpbmUuIiBhdCAkdXJsXG4iOworCQl9CisJfSBlbHNlIHsKKwkJJG5hbWUgPSAkc3ZuLT5maWxlKCIvJHN2bnBhdGgiLCRyZXYpOworCQlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJG5hbWU7CisJfQorCisJb3BlbiBteSAkRiwgJy18JywgImdpdC1oYXNoLW9iamVjdCIsICItdyIsICRuYW1lCisJCW9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvYmplY3Q6ICQhXG4iOworCW15ICRzaGEgPSA8JEY+OworCWNob21wICRzaGE7CisJY2xvc2UgJEY7CisJdW5saW5rICRuYW1lOworCW15ICRtb2RlID0gIjA2NDQiOyAjIFNWIGRvZXMgbm90IHNlZW0gdG8gc3RvcmUgYW55IGZpbGUgbW9kZXMKKwlyZXR1cm4gWyRtb2RlLCAkc2hhLCAkcGF0aF07Cit9CisKK3N1YiBzcGxpdF9wYXRoKCQkKSB7CisJbXkoJHJldiwkcGF0aCkgPSBAXzsKKwlteSAkYnJhbmNoOworCisJaWYoJHBhdGggPX4gcyNeL1xRJHRhZ19uYW1lXEUvKFteL10rKS8/IyMpIHsKKwkJJGJyYW5jaCA9ICIvJDEiOworCX0gZWxzaWYoJHBhdGggPX4gcyNeL1xRJHRydW5rX25hbWVcRS8/IyMpIHsKKwkJJGJyYW5jaCA9ICIvIjsKKwl9IGVsc2lmKCRwYXRoID1+IHMjXi9cUSRicmFuY2hfbmFtZVxFLyhbXi9dKykvPyMjKSB7CisJCSRicmFuY2ggPSAkMTsKKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgIiRyZXY6IFVucmVjb2duaXplZCBwYXRoOiAkcGF0aFxuIjsKKwkJcmV0dXJuICgpCisJfQorCSRwYXRoID0gIi8iIGlmICRwYXRoIGVxICIiOworCXJldHVybiAoJGJyYW5jaCwkcGF0aCk7Cit9CisKK3N1YiBjb3B5X3N1YmRpcigkJCQkJCQpIHsKKwkjIFNvbWVib2R5IGNvcGllZCBhIHdob2xlIHN1YmRpcmVjdG9yeS4KKwkjIFdlIG5lZWQgdG8gZmluZCB0aGUgaW5kZXggZW50cmllcyBmcm9tIHRoZSBvbGQgdmVyc2lvbiB3aGljaCB0aGUKKwkjIFNWTiBsb2cgZW50cnkgcG9pbnRzIHRvLCBhbmQgYWRkIHRoZW0gdG8gdGhlIG5ldyBwbGFjZS4KKworCW15KCRuZXdyZXYsJG5ld2JyYW5jaCwkcGF0aCwkb2xkcGF0aCwkcmV2LCRuZXcpID0gQF87CisJbXkoJGJyYW5jaCwkc3JjcGF0aCkgPSBzcGxpdF9wYXRoKCRyZXYsJG9sZHBhdGgpOworCisJbXkgJGdpdHJldiA9ICRicmFuY2hlc3skYnJhbmNofXskcmV2fTsKKwl1bmxlc3MoJGdpdHJldikgeworCQlwcmludCBTVERFUlIgIiRuZXdyZXY6JG5ld2JyYW5jaDogY291bGQgbm90IGZpbmQgJG9sZHBhdGggXEAgJHJldlxuIjsKKwkJcmV0dXJuOworCX0KKwlwcmludCAiJG5ld3JldjokbmV3YnJhbmNoOiRwYXRoOiBjb3B5aW5nIGZyb20gJGJyYW5jaDokc3JjcGF0aCBAICRyZXZcbiIgaWYgJG9wdF92OworCSRzcmNwYXRoID1+IHMjLyokIy8jOworCW9wZW4gbXkgJGYsIi18IiwiZ2l0LWxzLXRyZWUiLCItciIsIi16IiwkZ2l0cmV2LCRzcmNwYXRoOworCWxvY2FsICQvID0gIlwwIjsKKwl3aGlsZSg8JGY+KSB7CisJCWNob21wOworCQlteSgkbSwkcCkgPSBzcGxpdCgvXHQvLCRfLDIpOworCQlteSgkbW9kZSwkdHlwZSwkc2hhMSkgPSBzcGxpdCgvIC8sJG0pOworCQluZXh0IGlmICR0eXBlIG5lICJibG9iIjsKKwkJJHAgPSBzdWJzdHIoJHAsbGVuZ3RoKCRzcmNwYXRoKS0xKTsKKwkJcHJpbnQgIi4uLiBmb3VuZCAkcGF0aCRwIC4uLlxuIiBpZiAkb3B0X3Y7CisJCXB1c2goQCRuZXcsWyRtb2RlLCRzaGExLCRwYXRoLiRwXSk7CisJfQorCWNsb3NlKCRmKSBvcgorCQlwcmludCBTVERFUlIgIiRuZXdyZXY6JG5ld2JyYW5jaDogY291bGQgbm90IGxpc3QgZmlsZXMgaW4gJG9sZHBhdGggXEAgJHJldlxuIjsKK30KKworc3ViIGNvbW1pdCB7CisJbXkoJGJyYW5jaCwgJGNoYW5nZWRfcGF0aHMsICRyZXZpc2lvbiwgJGF1dGhvciwgJGRhdGUsICRtZXNzYWdlKSA9IEBfOworCW15KCRhdXRob3JfbmFtZSwkYXV0aG9yX2VtYWlsLCRkZXN0KTsKKwlteShAb2xkLEBuZXcpOworCisJaWYgKG5vdCBkZWZpbmVkICRhdXRob3IpIHsKKwkJJGF1dGhvcl9uYW1lID0gJGF1dGhvcl9lbWFpbCA9ICJ1bmtub3duIjsKKwl9IGVsc2lmICgkYXV0aG9yID1+IC9eKC4qPylccys8KC4qKT4kLykgeworCQkoJGF1dGhvcl9uYW1lLCAkYXV0aG9yX2VtYWlsKSA9ICgkMSwgJDIpOworCX0gZWxzZSB7CisJCSRhdXRob3IgPX4gcy9ePCguKik+JC8kMS87CisJCSRhdXRob3JfbmFtZSA9ICRhdXRob3JfZW1haWwgPSAkYXV0aG9yOworCX0KKwkkZGF0ZSA9IHBkYXRlKCRkYXRlKTsKKworCW15ICR0YWc7CisJbXkgJHBhcmVudDsKKwlpZigkYnJhbmNoIGVxICIvIikgeyAjIHRydW5rCisJCSRwYXJlbnQgPSAkb3B0X287CisJfSBlbHNpZigkYnJhbmNoID1+IG0jXi8oLispIykgeyAjIHRhZworCQkkdGFnID0gMTsKKwkJJHBhcmVudCA9ICQxOworCX0gZWxzZSB7ICMgIm5vcm1hbCIgYnJhbmNoCisJCSMgbm90aGluZyB0byBkbworCQkkcGFyZW50ID0gJGJyYW5jaDsKKwl9CisJJGRlc3QgPSAkcGFyZW50OworCisJbXkgJHByZXYgPSAkY2hhbmdlZF9wYXRocy0+eyIvIn07CisJaWYoJHByZXYgYW5kICRwcmV2LT5bMF0gZXEgIkEiKSB7CisJCWRlbGV0ZSAkY2hhbmdlZF9wYXRocy0+eyIvIn07CisJCW15ICRvbGRwYXRoID0gJHByZXYtPlsxXTsKKwkJbXkgJHJldjsKKwkJaWYoZGVmaW5lZCAkb2xkcGF0aCkgeworCQkJbXkgJHA7CisJCQkoJHBhcmVudCwkcCkgPSBzcGxpdF9wYXRoKCRyZXZpc2lvbiwkb2xkcGF0aCk7CisJCQlpZigkcGFyZW50IGVxICIvIikgeworCQkJCSRwYXJlbnQgPSAkb3B0X287CisJCQl9IGVsc2UgeworCQkJCSRwYXJlbnQgPX4gcyNeLyMjOyAjIGlmIGl0J3MgYSB0YWcKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRwYXJlbnQgPSB1bmRlZjsKKwkJfQorCX0KKworCW15ICRyZXY7CisJaWYoJHJldmlzaW9uID4gJG9wdF9zIGFuZCBkZWZpbmVkICRwYXJlbnQpIHsKKwkJb3BlbihILCJnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICRwYXJlbnQgfCIpOworCQkkcmV2ID0gPEg+OworCQljbG9zZShIKSBvciBkbyB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX07CisJCWNob3AgJHJldjsKKwkJaWYobGVuZ3RoKCRyZXYpICE9IDQwKSB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX0KKwkJJHJldiA9ICRicmFuY2hlc3soJHBhcmVudCBlcSAkb3B0X28pID8gIi8iIDogJHBhcmVudH17IkxBU1QifTsKKwkJaWYoJHJldmlzaW9uICE9ICRvcHRfcyBhbmQgbm90ICRyZXYpIHsKKwkJCXByaW50IFNUREVSUiAiJHJldmlzaW9uOiBkbyBub3Qga25vdyBhbmNlc3RvciBmb3IgJyRwYXJlbnQnIVxuIjsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCSRyZXYgPSB1bmRlZjsKKwl9CisKKyMJaWYoJHByZXYgYW5kICRwcmV2LT5bMF0gZXEgIkEiKSB7CisjCQlpZihub3QgJHRhZykgeworIwkJCXVubGVzcyhvcGVuKEgsIj4gJGdpdF9kaXIvcmVmcy9oZWFkcy8kYnJhbmNoIikpIHsKKyMJCQkJcHJpbnQgU1RERVJSICIkcmV2aXNpb246IENvdWxkIG5vdCBjcmVhdGUgYnJhbmNoICRicmFuY2g6ICQhXG4iOworIwkJCQkkc3RhdGU9MTE7CisjCQkJCW5leHQ7CisjCQkJfQorIwkJCXByaW50IEggIiRyZXZcbiIKKyMJCQkJb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgYnJhbmNoICRicmFuY2g6ICQhIjsKKyMJCQljbG9zZShIKQorIwkJCQlvciBkaWUgIkNvdWxkIG5vdCB3cml0ZSBicmFuY2ggJGJyYW5jaDogJCEiOworIwkJfQorIwl9CisJaWYobm90IGRlZmluZWQgJHJldikgeworCQl1bmxpbmsoJGdpdF9pbmRleCk7CisJfSBlbHNpZiAoJHJldiBuZSAkbGFzdF9yZXYpIHsKKwkJcHJpbnQgIlN3aXRjaGluZyBmcm9tICRsYXN0X3JldiB0byAkcmV2ICgkYnJhbmNoKVxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIsICRyZXYpOworCQlkaWUgInJlYWQtdHJlZSBmYWlsZWQgZm9yICRyZXY6ICQ/XG4iIGlmICQ/OworCQkkbGFzdF9yZXYgPSAkcmV2OworCX0KKworCW15ICRjaWQ7CisJaWYoJHRhZyBhbmQgbm90ICUkY2hhbmdlZF9wYXRocykgeworCQkkY2lkID0gJHJldjsKKwl9IGVsc2UgeworCQlteSBAcGF0aHMgPSBzb3J0IGtleXMgJSRjaGFuZ2VkX3BhdGhzOworCQlmb3JlYWNoIG15ICRwYXRoKEBwYXRocykgeworCQkJbXkgJGFjdGlvbiA9ICRjaGFuZ2VkX3BhdGhzLT57JHBhdGh9OworCisJCQlpZiAoJGFjdGlvbi0+WzBdIGVxICJBIikgeworCQkJCW15ICRmID0gZ2V0X2ZpbGUoJHJldmlzaW9uLCRicmFuY2gsJHBhdGgpOworCQkJCWlmKCRmKSB7CisJCQkJCXB1c2goQG5ldywkZikgaWYgJGY7CisJCQkJfSBlbHNpZigkYWN0aW9uLT5bMV0pIHsKKwkJCQkJY29weV9zdWJkaXIoJHJldmlzaW9uLCRicmFuY2gsJHBhdGgsJGFjdGlvbi0+WzFdLCRhY3Rpb24tPlsyXSxcQG5ldyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXkgJG9wYXRoID0gJGFjdGlvbi0+WzNdOworCQkJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogJGJyYW5jaDogY291bGQgbm90IGZldGNoICckb3BhdGgnXG4iOworCQkJCX0KKwkJCX0gZWxzaWYgKCRhY3Rpb24tPlswXSBlcSAiRCIpIHsKKwkJCQlwdXNoKEBvbGQsJHBhdGgpOworCQkJfSBlbHNpZiAoJGFjdGlvbi0+WzBdIGVxICJNIikgeworCQkJCW15ICRmID0gZ2V0X2ZpbGUoJHJldmlzaW9uLCRicmFuY2gsJHBhdGgpOworCQkJCXB1c2goQG5ldywkZikgaWYgJGY7CisJCQl9IGVsc2lmICgkYWN0aW9uLT5bMF0gZXEgIlIiKSB7CisJCQkJIyByZWZlciB0byBhIGZpbGUvdHJlZSBpbiBhbiBlYXJsaWVyIGNvbW1pdAorCQkJCXB1c2goQG9sZCwkcGF0aCk7ICMgcmVtb3ZlIGFueSBvbGQgc3R1ZmYKKworCQkJCSMgLi4uIGFuZCBhZGQgYW55IG5ldyBzdHVmZgorCQkJCW15KCRiLCRzcmNwYXRoKSA9IHNwbGl0X3BhdGgoJHJldmlzaW9uLCRhY3Rpb24tPlsxXSk7CisJCQkJJHNyY3BhdGggPX4gcyMvKiQjLyM7CisJCQkJb3BlbiBteSAkRiwiLXwiLCJnaXQtbHMtdHJlZSIsIi1yIiwiLXoiLCAkYnJhbmNoZXN7JGJ9eyRhY3Rpb24tPlsyXX0sICRzcmNwYXRoOworCQkJCWxvY2FsICQvID0gIlwwIjsKKwkJCQl3aGlsZSg8JEY+KSB7CisJCQkJCWNob21wOworCQkJCQlteSgkbSwkcCkgPSBzcGxpdCgvXHQvLCRfLDIpOworCQkJCQlteSgkbW9kZSwkdHlwZSwkc2hhMSkgPSBzcGxpdCgvIC8sJG0pOworCQkJCQluZXh0IGlmICR0eXBlIG5lICJibG9iIjsKKwkJCQkJJHAgPSBzdWJzdHIoJHAsbGVuZ3RoKCRzcmNwYXRoKS0xKTsKKwkJCQkJcHVzaChAbmV3LFskbW9kZSwkc2hhMSwkcGF0aC4kcF0pOworCQkJCX0KKwkJCQljbG9zZSgkRik7CisJCQl9IGVsc2UgeworCQkJCWRpZSAiJHJldmlzaW9uOiB1bmtub3duIGFjdGlvbiAnIi4kYWN0aW9uLT5bMF0uIicgZm9yICRwYXRoXG4iOworCQkJfQorCQl9CisKKwkJaWYoQG9sZCkgeworCQkJb3BlbiBteSAkRiwgIi18IiwgImdpdC1scy1maWxlcyIsICIteiIsIEBvbGQgb3IgZGllICQhOworCQkJQG9sZCA9ICgpOworCQkJbG9jYWwgJC8gPSAiXDAiOworCQkJd2hpbGUoPCRGPikgeworCQkJCWNob21wOworCQkJCXB1c2goQG9sZCwkXyk7CisJCQl9CisJCQljbG9zZSgkRik7CisKKwkJCXdoaWxlKEBvbGQpIHsKKwkJCQlteSBAbzI7CisJCQkJaWYoQG9sZCA+IDU1KSB7CisJCQkJCUBvMiA9IHNwbGljZShAb2xkLDAsNTApOworCQkJCX0gZWxzZSB7CisJCQkJCUBvMiA9IEBvbGQ7CisJCQkJCUBvbGQgPSAoKTsKKwkJCQl9CisJCQkJc3lzdGVtKCJnaXQtdXBkYXRlLWluZGV4IiwiLS1mb3JjZS1yZW1vdmUiLCItLSIsQG8yKTsKKwkJCQlkaWUgIkNhbm5vdCByZW1vdmUgZmlsZXM6ICQ/XG4iIGlmICQ/OworCQkJfQorCQl9CisJCXdoaWxlKEBuZXcpIHsKKwkJCW15IEBuMjsKKwkJCWlmKEBuZXcgPiAxMikgeworCQkJCUBuMiA9IHNwbGljZShAbmV3LDAsMTApOworCQkJfSBlbHNlIHsKKwkJCQlAbjIgPSBAbmV3OworCQkJCUBuZXcgPSAoKTsKKwkJCX0KKwkJCXN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsIi0tYWRkIiwKKwkJCQkobWFwIHsgKCctLWNhY2hlaW5mbycsIEAkXykgfSBAbjIpKTsKKwkJCWRpZSAiQ2Fubm90IGFkZCBmaWxlczogJD9cbiIgaWYgJD87CisJCX0KKworCQlteSAkcGlkID0gb3BlbihDLCItfCIpOworCQlkaWUgIkNhbm5vdCBmb3JrOiAkISIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwkJdW5sZXNzKCRwaWQpIHsKKwkJCWV4ZWMoImdpdC13cml0ZS10cmVlIik7CisJCQlkaWUgIkNhbm5vdCBleGVjIGdpdC13cml0ZS10cmVlOiAkIVxuIjsKKwkJfQorCQljaG9tcChteSAkdHJlZSA9IDxDPik7CisJCWxlbmd0aCgkdHJlZSkgPT0gNDAKKwkJCW9yIGRpZSAiQ2Fubm90IGdldCB0cmVlIGlkICgkdHJlZSk6ICQhXG4iOworCQljbG9zZShDKQorCQkJb3IgZGllICJFcnJvciBydW5uaW5nIGdpdC13cml0ZS10cmVlOiAkP1xuIjsKKwkJcHJpbnQgIlRyZWUgSUQgJHRyZWVcbiIgaWYgJG9wdF92OworCisJCW15ICRwciA9IElPOjpQaXBlLT5uZXcoKSBvciBkaWUgIkNhbm5vdCBvcGVuIHBpcGU6ICQhXG4iOworCQlteSAkcHcgPSBJTzo6UGlwZS0+bmV3KCkgb3IgZGllICJDYW5ub3Qgb3BlbiBwaXBlOiAkIVxuIjsKKwkJJHBpZCA9IGZvcmsoKTsKKwkJZGllICJGb3JrOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQl1bmxlc3MoJHBpZCkgeworCQkJJHByLT53cml0ZXIoKTsKKwkJCSRwdy0+cmVhZGVyKCk7CisJCQlvcGVuKE9VVCwiPiZTVERPVVQiKTsKKwkJCWR1cDIoJHB3LT5maWxlbm8oKSwwKTsKKwkJCWR1cDIoJHByLT5maWxlbm8oKSwxKTsKKwkJCSRwci0+Y2xvc2UoKTsKKwkJCSRwdy0+Y2xvc2UoKTsKKworCQkJbXkgQHBhciA9ICgpOworCQkJQHBhciA9ICgiLXAiLCRyZXYpIGlmIGRlZmluZWQgJHJldjsKKworCQkJIyBsb29zZSBkZXRlY3Rpb24gb2YgbWVyZ2VzCisJCQkjIGJhc2VkIG9uIHRoZSBjb21taXQgbXNnCisJCQlmb3JlYWNoIG15ICRyeCAoQG1lcmdlcngpIHsKKwkJCQlpZiAoJG1lc3NhZ2UgPX4gJHJ4KSB7CisJCQkJCW15ICRtcGFyZW50ID0gJDE7CisJCQkJCWlmICgkbXBhcmVudCBlcSAnSEVBRCcpIHsgJG1wYXJlbnQgPSAkb3B0X28gfTsKKwkJCQkJaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbXBhcmVudCIpIHsKKwkJCQkJCSRtcGFyZW50ID0gZ2V0X2hlYWRyZWYoJG1wYXJlbnQsICRnaXRfZGlyKTsKKwkJCQkJCXB1c2ggQHBhciwgJy1wJywgJG1wYXJlbnQ7CisJCQkJCQlwcmludCBPVVQgIk1lcmdlIHBhcmVudCBicmFuY2g6ICRtcGFyZW50XG4iIGlmICRvcHRfdjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJZXhlYygiZW52IiwKKwkJCQkiR0lUX0FVVEhPUl9OQU1FPSRhdXRob3JfbmFtZSIsCisJCQkJIkdJVF9BVVRIT1JfRU1BSUw9JGF1dGhvcl9lbWFpbCIsCisJCQkJIkdJVF9BVVRIT1JfREFURT0iLnN0cmZ0aW1lKCIrMDAwMCAlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSksCisJCQkJIkdJVF9DT01NSVRURVJfTkFNRT0kYXV0aG9yX25hbWUiLAorCQkJCSJHSVRfQ09NTUlUVEVSX0VNQUlMPSRhdXRob3JfZW1haWwiLAorCQkJCSJHSVRfQ09NTUlUVEVSX0RBVEU9Ii5zdHJmdGltZSgiKzAwMDAgJVktJW0tJWQgJUg6JU06JVMiLGdtdGltZSgkZGF0ZSkpLAorCQkJCSJnaXQtY29tbWl0LXRyZWUiLCAkdHJlZSxAcGFyKTsKKwkJCWRpZSAiQ2Fubm90IGV4ZWMgZ2l0LWNvbW1pdC10cmVlOiAkIVxuIjsKKwkJfQorCQkkcHctPndyaXRlcigpOworCQkkcHItPnJlYWRlcigpOworCisJCSRtZXNzYWdlID1+IHMvW1xzXG5dK1x6Ly87CisKKwkJcHJpbnQgJHB3ICIkbWVzc2FnZVxuIgorCQkJb3IgZGllICJFcnJvciB3cml0aW5nIHRvIGdpdC1jb21taXQtdHJlZTogJCFcbiI7CisJCSRwdy0+Y2xvc2UoKTsKKworCQlwcmludCAiQ29tbWl0dGVkIGNoYW5nZSAkcmV2aXNpb246JGJyYW5jaCAiLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSkuIilcbiIgaWYgJG9wdF92OworCQljaG9tcCgkY2lkID0gPCRwcj4pOworCQlsZW5ndGgoJGNpZCkgPT0gNDAKKwkJCW9yIGRpZSAiQ2Fubm90IGdldCBjb21taXQgaWQgKCRjaWQpOiAkIVxuIjsKKwkJcHJpbnQgIkNvbW1pdCBJRCAkY2lkXG4iIGlmICRvcHRfdjsKKwkJJHByLT5jbG9zZSgpOworCisJCXdhaXRwaWQoJHBpZCwwKTsKKwkJZGllICJFcnJvciBydW5uaW5nIGdpdC1jb21taXQtdHJlZTogJD9cbiIgaWYgJD87CisJfQorCisJaWYobm90IGRlZmluZWQgJGRlc3QpIHsKKwkJcHJpbnQgIi4uLiBubyBrbm93biBwYXJlbnRcbiIgaWYgJG9wdF92OworCX0gZWxzaWYobm90ICR0YWcpIHsKKwkJcHJpbnQgIldyaXRpbmcgdG8gcmVmcy9oZWFkcy8kZGVzdFxuIiBpZiAkb3B0X3Y7CisJCW9wZW4oQywiPiRnaXRfZGlyL3JlZnMvaGVhZHMvJGRlc3QiKSBhbmQKKwkJcHJpbnQgQyAoIiRjaWRcbiIpIGFuZAorCQljbG9zZShDKQorCQkJb3IgZGllICJDYW5ub3Qgd3JpdGUgYnJhbmNoICRkZXN0IGZvciB1cGRhdGU6ICQhXG4iOworCX0KKworCWlmKCR0YWcpIHsKKwkJbXkoJGluLCAkb3V0KSA9ICgnJywnJyk7CisJCSRsYXN0X3JldiA9ICItIiBpZiAlJGNoYW5nZWRfcGF0aHM7CisJCSMgdGhlIHRhZyB3YXMgJ2NvbXBsZXgnLCBpLmUuIGRpZCBub3QgcmVmZXIgdG8gYSAicmVhbCIgcmV2aXNpb24KKworCQkkZGVzdCA9fiB0ci9fL1wuLyBpZiAkb3B0X3U7CisKKwkJbXkgJHBpZCA9IG9wZW4yKCRpbiwgJG91dCwgJ2dpdC1ta3RhZycpOworCQlwcmludCAkb3V0ICgib2JqZWN0ICRjaWRcbiIuCisJCSAgICAidHlwZSBjb21taXRcbiIuCisJCSAgICAidGFnICRkZXN0XG4iLgorCQkgICAgInRhZ2dlciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+XG4iKSBhbmQKKwkJY2xvc2UoJG91dCkKKwkJICAgIG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSB0YWcgb2JqZWN0ICRkZXN0OiAkIVxuIjsKKworCQlteSAkdGFnb2JqID0gPCRpbj47CisJCWNob21wICR0YWdvYmo7CisKKwkJaWYgKCAhY2xvc2UoJGluKSBvciB3YWl0cGlkKCRwaWQsIDApICE9ICRwaWQgb3IKKwkJCQkkPyAhPSAwIG9yICR0YWdvYmogIX4gL15bMDEyMzQ1Njc4OWFiY2RlZl17NDB9JC8gKSB7CisJCQlkaWUgIkNhbm5vdCBjcmVhdGUgdGFnIG9iamVjdCAkZGVzdDogJCFcbiI7CisJCX0KKworCQlvcGVuKEMsIj4kZ2l0X2Rpci9yZWZzL3RhZ3MvJGRlc3QiKSBhbmQKKwkJcHJpbnQgQyAoIiR0YWdvYmpcbiIpIGFuZAorCQljbG9zZShDKQorCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkYnJhbmNoOiAkIVxuIjsKKworCQlwcmludCAiQ3JlYXRlZCB0YWcgJyRkZXN0JyBvbiAnJGJyYW5jaCdcbiIgaWYgJG9wdF92OworCX0KKwkkYnJhbmNoZXN7JGJyYW5jaH17IkxBU1QifSA9ICRjaWQ7CisJJGJyYW5jaGVzeyRicmFuY2h9eyRyZXZpc2lvbn0gPSAkY2lkOworCSRsYXN0X3JldiA9ICRjaWQ7CisJcHJpbnQgQlJBTkNIRVMgIiRyZXZpc2lvbiAkYnJhbmNoICRjaWRcbiI7CisJcHJpbnQgIkRPTkU6ICRyZXZpc2lvbiAkZGVzdCAkY2lkXG4iIGlmICRvcHRfdjsKK30KKworbXkgKCRjaGFuZ2VkX3BhdGhzLCAkcmV2aXNpb24sICRhdXRob3IsICRkYXRlLCAkbWVzc2FnZSwgJHBvb2wpID0gQF87CitzdWIgX2NvbW1pdF9hbGwgeworCSgkY2hhbmdlZF9wYXRocywgJHJldmlzaW9uLCAkYXV0aG9yLCAkZGF0ZSwgJG1lc3NhZ2UsICRwb29sKSA9IEBfOworCW15ICVwOworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJJHB7JHBhdGh9ID0gWyAkYWN0aW9uLT5hY3Rpb24sJGFjdGlvbi0+Y29weWZyb21fcGF0aCwgJGFjdGlvbi0+Y29weWZyb21fcmV2LCAkcGF0aCBdOworCX0KKwkkY2hhbmdlZF9wYXRocyA9IFwlcDsKK30KKworc3ViIGNvbW1pdF9hbGwgeworCW15ICVkb25lOworCW15IEBjb2w7CisJbXkgJHByZWY7CisJbXkgJGJyYW5jaDsKKworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJKCRicmFuY2gsJHBhdGgpID0gc3BsaXRfcGF0aCgkcmV2aXNpb24sJHBhdGgpOworCQluZXh0IGlmIG5vdCBkZWZpbmVkICRicmFuY2g7CisJCSRkb25leyRicmFuY2h9eyRwYXRofSA9ICRhY3Rpb247CisJfQorCXdoaWxlKCgkYnJhbmNoLCRjaGFuZ2VkX3BhdGhzKSA9IGVhY2ggJWRvbmUpIHsKKwkJY29tbWl0KCRicmFuY2gsICRjaGFuZ2VkX3BhdGhzLCAkcmV2aXNpb24sICRhdXRob3IsICRkYXRlLCAkbWVzc2FnZSk7CisJfQorfQorCit3aGlsZSgrKyRjdXJyZW50X3JldiA8PSAkc3ZuLT57J21heHJldid9KSB7CisJJHN2bi0+eydzdm4nfS0+Z2V0X2xvZygiLyIsJGN1cnJlbnRfcmV2LCRjdXJyZW50X3JldiwkY3VycmVudF9yZXYsMSwxLFwmX2NvbW1pdF9hbGwsIiIpOworCWNvbW1pdF9hbGwoKTsKKwlpZigkb3B0X2wgYW5kIG5vdCAtLSRvcHRfbCkgeworCQlwcmludCBTVERFUlIgIlN0b3BwaW5nLCBiZWNhdXNlIHRoZXJlIGlzIGEgbWVtb3J5IGxlYWsgKGluIHRoZSBTVk4gbGlicmFyeSkuXG4iOworCQlwcmludCBTVERFUlIgIlBsZWFzZSByZXBlYXQgdGhpcyBjb21tYW5kOyBpdCB3aWxsIGNvbnRpbnVlIHNhZmVseVxuIjsKKwkJbGFzdDsKKwl9Cit9CisKKwordW5saW5rKCRnaXRfaW5kZXgpOworCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZigkb3JpZ19icmFuY2gpIHsKKwlwcmludCAiRE9ORVxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQlpZiAkZm9yd2FyZF9tYXN0ZXI7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKCdnaXQtcmVhZC10cmVlJywgJy1tJywgJy11JywgJ1NWTjJHSVRfSEVBRCcsICdIRUFEJyk7CisJCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfSBlbHNlIHsKKwkkb3JpZ19icmFuY2ggPSAibWFzdGVyIjsKKwlwcmludCAiRE9ORTsgY3JlYXRpbmcgJG9yaWdfYnJhbmNoIGJyYW5jaFxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQl1bmxlc3MgLWYgIiRnaXRfZGlyL3JlZnMvaGVhZHMvbWFzdGVyIjsKKwl1bmxpbmsoIiRnaXRfZGlyL0hFQUQiKTsKKwlzeW1saW5rKCJyZWZzL2hlYWRzLyRvcmlnX2JyYW5jaCIsIiRnaXRfZGlyL0hFQUQiKTsKKwl1bmxlc3MgKCRvcHRfaSkgeworCQlzeXN0ZW0oJ2dpdCBjaGVja291dCcpOworCQlkaWUgImNoZWNrb3V0IGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfQordW5saW5rKCIkZ2l0X2Rpci9TVk4yR0lUX0hFQUQiKTsKK2Nsb3NlKEJSQU5DSEVTKTsKZGlmZiAtLWdpdCBhL2dpdC10YWcuc2ggYi9naXQtdGFnLnNoCmluZGV4IDExYjA0OTIuLmZhYTc2NjcgMTAwNzU1Ci0tLSBhL2dpdC10YWcuc2gKKysrIGIvZ2l0LXRhZy5zaApAQCAtNCw3ICs0LDcgQEAKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKIHVzYWdlICgpIHsKLSAgICBlY2hvID4mMiAiVXNhZ2U6IGdpdC10YWcgWy1hIHwgLXNdIFstZl0gWy1tICJ0YWcgbWVzc2FnZSJdIHRhZ25hbWUgW2hlYWRdIgorICAgIGVjaG8gPiYyICJVc2FnZTogZ2l0LXRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPl0gPHRhZ25hbWU+IFs8aGVhZD5dIgogICAgIGV4aXQgMQogfQogCkBAIC0xMiw2ICsxMiw3IEBACiBzaWduZWQ9CiBmb3JjZT0KIG1lc3NhZ2U9Cit1c2VybmFtZT0KIHdoaWxlIGNhc2UgIiQjIiBpbiAwKSBicmVhayA7OyBlc2FjCiBkbwogICAgIGNhc2UgIiQxIiBpbgpAQCAtMzAsNiArMzEsMTIgQEAKIAlzaGlmdAogCW1lc3NhZ2U9IiQxIgogCTs7CisgICAgLXUpCisJYW5ub3RhdGU9MQorCXNpZ25lZD0xCisJc2hpZnQKKwl1c2VybmFtZT0iJDEiCisJOzsKICAgICAtKikKICAgICAgICAgdXNhZ2UKIAk7OwpAQCAtNTIsNiArNTksNyBAQAogb2JqZWN0PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8fCBleGl0IDEKIHR5cGU9JChnaXQtY2F0LWZpbGUgLXQgJG9iamVjdCkgfHwgZXhpdCAxCiB0YWdnZXI9JChnaXQtdmFyIEdJVF9DT01NSVRURVJfSURFTlQpIHx8IGV4aXQgMQorOiAke3VzZXJuYW1lOj0kKGV4cHIgIiR0YWdnZXIiIDogJ1woLio+XCknKX0KIAogdHJhcCAncm0gLWYgLnRtcC10YWcqIC50YWdtc2cgLmVkaXRtc2cnIDAKIApAQCAtNjcsMTMgKzc1LDE1IEBACiAKICAgICBncmVwIC12ICdeIycgPCAuZWRpdG1zZyB8IGdpdC1zdHJpcHNwYWNlID4gLnRhZ21zZwogCi0gICAgWyAtcyAudGFnbXNnIF0gfHwgZXhpdAorICAgIFsgLXMgLnRhZ21zZyBdIHx8IHsKKwllY2hvID4mMiAiTm8gdGFnIG1lc3NhZ2U/IgorCWV4aXQgMQorICAgIH0KIAogICAgICggZWNobyAtZSAib2JqZWN0ICRvYmplY3RcbnR5cGUgJHR5cGVcbnRhZyAkbmFtZVxudGFnZ2VyICR0YWdnZXJcbiI7IGNhdCAudGFnbXNnICkgPiAudG1wLXRhZwogICAgIHJtIC1mIC50bXAtdGFnLmFzYyAudGFnbXNnCiAgICAgaWYgWyAiJHNpZ25lZCIgXTsgdGhlbgotCW1lPSQoZXhwciAiJHRhZ2dlciIgOiAnXCguKj5cKScpICYmCi0JZ3BnIC1ic2EgLXUgIiRtZSIgLnRtcC10YWcgJiYKKwlncGcgLWJzYSAtdSAiJHVzZXJuYW1lIiAudG1wLXRhZyAmJgogCWNhdCAudG1wLXRhZy5hc2MgPj4udG1wLXRhZyB8fAogCWRpZSAiZmFpbGVkIHRvIHNpZ24gdGhlIHRhZyB3aXRoIEdQRy4iCiAgICAgZmkKZGlmZiAtLWdpdCBhL2dpdC5zaCBiL2dpdC5zaAppbmRleCAxYzczY2ExLi45NDk0MGFlIDEwMDc1NQotLS0gYS9naXQuc2gKKysrIGIvZ2l0LnNoCkBAIC0xMSw3ICsxMSwxOCBAQAogCQllY2hvICJnaXQgdmVyc2lvbiBAQEdJVF9WRVJTSU9OQEAiCiAJCWV4aXQgMCA7OwogCWVzYWMKLQl0ZXN0IC14ICIkcGF0aC9naXQtJGNtZCIgJiYgZXhlYyAiJHBhdGgvZ2l0LSRjbWQiICIkQCIgOzsKKwkKKwl0ZXN0IC14ICIkcGF0aC9naXQtJGNtZCIgJiYgZXhlYyAiJHBhdGgvZ2l0LSRjbWQiICIkQCIKKwkKKwljYXNlICdAQFhAQCcgaW4KKwkgICAgJycpCisJCTs7CisJICAgICopCisJCXRlc3QgLXggIiRwYXRoL2dpdC0kY21kQEBYQEAiICYmCisJCWV4ZWMgIiRwYXRoL2dpdC0kY21kQEBYQEAiICIkQCIKKwkJOzsKKwllc2FjCisJOzsKIGVzYWMKIAogZWNobyAiVXNhZ2U6IGdpdCBDT01NQU5EIFtPUFRJT05TXSBbVEFSR0VUXSIKZGlmZiAtLWdpdCBhL2dpdGsgYi9naXRrCmluZGV4IGYxZWE0ZTEuLmE5ZDM3ZDkgMTAwNzU1Ci0tLSBhL2dpdGsKKysrIGIvZ2l0awpAQCAtMjgwNiw3ICsyODA2LDcgQEAKICAgICBzZXQgdHJlZWRpZmYge30KICAgICBzZXQgaWQgW2xpbmRleCAkaWRzIDBdCiAgICAgc2V0IHAgW2xpbmRleCAkaWRzIDFdCi0gICAgaWYgW2NhdGNoIHtzZXQgZ2R0ZiBbb3BlbiAifGdpdC1kaWZmLXRyZWUgLXIgJHAgJGlkIiByXX1dIHJldHVybgorICAgIGlmIFtjYXRjaCB7c2V0IGdkdGYgW29wZW4gInxnaXQtZGlmZi10cmVlIC1yICRpZCIgcl19XSByZXR1cm4KICAgICBmY29uZmlndXJlICRnZHRmIC1ibG9ja2luZyAwCiAgICAgZmlsZWV2ZW50ICRnZHRmIHJlYWRhYmxlIFtsaXN0IGdldHRyZWVkaWZmbGluZSAkZ2R0ZiAkaWRzXQogfQpAQCAtMjg0Miw3ICsyODQyLDcgQEAKICAgICBzZXQgaWQgW2xpbmRleCAkaWRzIDBdCiAgICAgc2V0IHAgW2xpbmRleCAkaWRzIDFdCiAgICAgc2V0IGVudihHSVRfRElGRl9PUFRTKSAkZGlmZm9wdHMKLSAgICBzZXQgY21kIFtsaXN0IHwgZ2l0LWRpZmYtdHJlZSAtciAtcCAtQyAkcCAkaWRdCisgICAgc2V0IGNtZCBbbGlzdCB8IGdpdC1kaWZmLXRyZWUgLXIgLXAgLUMgJGlkXQogICAgIGlmIHtbY2F0Y2gge3NldCBiZGYgW29wZW4gJGNtZCByXX0gZXJyXX0gewogCXB1dHMgImVycm9yIGdldHRpbmcgZGlmZnM6ICRlcnIiCiAJcmV0dXJuCmRpZmYgLS1naXQgYS9odHRwLWZldGNoLmMgYi9odHRwLWZldGNoLmMKaW5kZXggNzFhOGM2MC4uYTFiMDNjZCAxMDA2NDQKLS0tIGEvaHR0cC1mZXRjaC5jCisrKyBiL2h0dHAtZmV0Y2guYwpAQCAtNiw2ICs2LDExIEBACiAjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAjaW5jbHVkZSA8Y3VybC9lYXN5Lmg+CiAKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisjZGVmaW5lIFVTRV9DVVJMX01VTFRJCisjZGVmaW5lIERFRkFVTFRfTUFYX1JFUVVFU1RTIDUKKyNlbmRpZgorCiAjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwNzA0CiAjZGVmaW5lIGN1cmxfZ2xvYmFsX2NsZWFudXAoKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSgwKQogI2VuZGlmCkBAIC0xMywxNiArMTgsMjkgQEAKICNkZWZpbmUgY3VybF9nbG9iYWxfaW5pdChhKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSgwKQogI2VuZGlmCiAKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBjMDQKKyNkZWZpbmUgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorI2VuZGlmCisKICNkZWZpbmUgUFJFVl9CVUZfU0laRSA0MDk2CiAjZGVmaW5lIFJBTkdFX0hFQURFUl9TSVpFIDMwCiAKLXN0YXRpYyBDVVJMICpjdXJsOworc3RhdGljIGludCBnb3RfYWx0ZXJuYXRlcyA9IDA7CitzdGF0aWMgaW50IGFjdGl2ZV9yZXF1ZXN0cyA9IDA7CitzdGF0aWMgaW50IGRhdGFfcmVjZWl2ZWQ7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBtYXhfcmVxdWVzdHMgPSAtMTsKK3N0YXRpYyBDVVJMTSAqY3VybG07CisjZW5kaWYKKyNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorc3RhdGljIENVUkwgKmN1cmxfZGVmYXVsdDsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpwcmFnbWFfaGVhZGVyOwogc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpub19wcmFnbWFfaGVhZGVyOwogc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpub19yYW5nZV9oZWFkZXI7CiBzdGF0aWMgY2hhciBjdXJsX2Vycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CiAKLXN0YXRpYyBjaGFyICppbml0aWFsX2Jhc2U7Ci0KIHN0cnVjdCBhbHRfYmFzZQogewogCWNoYXIgKmJhc2U7CkBAIC0zMywxNyArNTEsNTkgQEAKIAogc3RhdGljIHN0cnVjdCBhbHRfYmFzZSAqYWx0ID0gTlVMTDsKIAotc3RhdGljIFNIQV9DVFggYzsKLXN0YXRpYyB6X3N0cmVhbSBzdHJlYW07CitlbnVtIHRyYW5zZmVyX3N0YXRlIHsKKwlXQUlUSU5HLAorCUFCT1JURUQsCisJQUNUSVZFLAorCUNPTVBMRVRFLAorfTsKIAotc3RhdGljIGludCBsb2NhbDsKLXN0YXRpYyBpbnQgenJldDsKK3N0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0Cit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG87CisJY2hhciAqdXJsOworCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJaW50IGxvY2FsOworCWVudW0gdHJhbnNmZXJfc3RhdGUgc3RhdGU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJY2hhciBlcnJvcnN0cltDVVJMX0VSUk9SX1NJWkVdOworCWxvbmcgaHR0cF9jb2RlOworCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKKwlTSEFfQ1RYIGM7CisJel9zdHJlYW0gc3RyZWFtOworCWludCB6cmV0OworCWludCByZW5hbWU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5leHQ7Cit9OwogCi1zdGF0aWMgaW50IGN1cmxfc3NsX3ZlcmlmeTsKLXN0YXRpYyBjaGFyICpzc2xfY2VydDsKLXN0YXRpYyBjaGFyICpzc2xfa2V5Owotc3RhdGljIGNoYXIgKnNzbF9jYXBhdGg7Ci1zdGF0aWMgY2hhciAqc3NsX2NhaW5mbzsKK3N0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90Cit7CisJQ1VSTCAqY3VybDsKKwlGSUxFICpsb2NhbDsKKwlpbnQgaW5fdXNlOworCWludCBkb25lOworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWxvbmcgaHR0cF9jb2RlOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0X3F1ZXVlX2hlYWQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICphY3RpdmVfcXVldWVfaGVhZCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgY3VybF9zc2xfdmVyaWZ5ID0gLTE7CitzdGF0aWMgY2hhciAqc3NsX2NlcnQgPSBOVUxMOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKK3N0YXRpYyBjaGFyICpzc2xfa2V5ID0gTlVMTDsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKK3N0YXRpYyBjaGFyICpzc2xfY2FwYXRoID0gTlVMTDsKKyNlbmRpZgorc3RhdGljIGNoYXIgKnNzbF9jYWluZm8gPSBOVUxMOworc3RhdGljIGxvbmcgY3VybF9sb3dfc3BlZWRfbGltaXQgPSAtMTsKK3N0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX3RpbWUgPSAtMTsKIAogc3RydWN0IGJ1ZmZlcgogewpAQCAtNTIsNiArMTEyLDcxIEBACiAgICAgICAgIHZvaWQgKmJ1ZmZlcjsKIH07CiAKK3N0YXRpYyBpbnQgaHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsdmVyaWZ5IiwgdmFyKSkgeworCQlpZiAoY3VybF9zc2xfdmVyaWZ5ID09IC0xKSB7CisJCQljdXJsX3NzbF92ZXJpZnkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydCIsIHZhcikpIHsKKwkJaWYgKHNzbF9jZXJ0ID09IE5VTEwpIHsKKwkJCXNzbF9jZXJ0ID0geG1hbGxvYyhzdHJsZW4odmFsdWUpKzEpOworCQkJc3RyY3B5KHNzbF9jZXJ0LCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xrZXkiLCB2YXIpKSB7CisJCWlmIChzc2xfa2V5ID09IE5VTEwpIHsKKwkJCXNzbF9rZXkgPSB4bWFsbG9jKHN0cmxlbih2YWx1ZSkrMSk7CisJCQlzdHJjcHkoc3NsX2tleSwgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYXBhdGgiLCB2YXIpKSB7CisJCWlmIChzc2xfY2FwYXRoID09IE5VTEwpIHsKKwkJCXNzbF9jYXBhdGggPSB4bWFsbG9jKHN0cmxlbih2YWx1ZSkrMSk7CisJCQlzdHJjcHkoc3NsX2NhcGF0aCwgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCWlmICghc3RyY21wKCJodHRwLnNzbGNhaW5mbyIsIHZhcikpIHsKKwkJaWYgKHNzbF9jYWluZm8gPT0gTlVMTCkgeworCQkJc3NsX2NhaW5mbyA9IHhtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwkJCXN0cmNweShzc2xfY2FpbmZvLCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkJCisJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CisJCWlmIChtYXhfcmVxdWVzdHMgPT0gLTEpCisJCQltYXhfcmVxdWVzdHMgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKKwlpZiAoIXN0cmNtcCgiaHR0cC5sb3dzcGVlZGxpbWl0IiwgdmFyKSkgeworCQlpZiAoY3VybF9sb3dfc3BlZWRfbGltaXQgPT0gLTEpCisJCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IChsb25nKWdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWR0aW1lIiwgdmFyKSkgeworCQlpZiAoY3VybF9sb3dfc3BlZWRfdGltZSA9PSAtMSkKKwkJCWN1cmxfbG93X3NwZWVkX3RpbWUgPSAobG9uZylnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IG9uZXMgKi8KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworfQorCiBzdGF0aWMgc2l6ZV90IGZ3cml0ZV9idWZmZXIodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXIgKmJ1ZmZlcikKIHsKQEAgLTYwLDgxICsxODUsNTIxIEBACiAgICAgICAgICAgICAgICAgc2l6ZSA9IGJ1ZmZlci0+c2l6ZSAtIGJ1ZmZlci0+cG9zbjsKICAgICAgICAgbWVtY3B5KGJ1ZmZlci0+YnVmZmVyICsgYnVmZmVyLT5wb3NuLCBwdHIsIHNpemUpOwogICAgICAgICBidWZmZXItPnBvc24gKz0gc2l6ZTsKKwlkYXRhX3JlY2VpdmVkKys7CiAgICAgICAgIHJldHVybiBzaXplOwogfQogCitzdGF0aWMgc2l6ZV90IGZ3cml0ZV9idWZmZXJfZHluYW1pYyhjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLAorCQkJCSAgICBzaXplX3Qgbm1lbWIsIHN0cnVjdCBidWZmZXIgKmJ1ZmZlcikKK3sKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlpZiAoc2l6ZSA+IGJ1ZmZlci0+c2l6ZSAtIGJ1ZmZlci0+cG9zbikgeworCQlidWZmZXItPnNpemUgPSBidWZmZXItPnNpemUgKiAzIC8gMjsKKwkJaWYgKGJ1ZmZlci0+c2l6ZSA8IGJ1ZmZlci0+cG9zbiArIHNpemUpCisJCQlidWZmZXItPnNpemUgPSBidWZmZXItPnBvc24gKyBzaXplOworCQlidWZmZXItPmJ1ZmZlciA9IHhyZWFsbG9jKGJ1ZmZlci0+YnVmZmVyLCBidWZmZXItPnNpemUpOworCX0KKwltZW1jcHkoYnVmZmVyLT5idWZmZXIgKyBidWZmZXItPnBvc24sIHB0ciwgc2l6ZSk7CisJYnVmZmVyLT5wb3NuICs9IHNpemU7CisJZGF0YV9yZWNlaXZlZCsrOworCXJldHVybiBzaXplOworfQorCiBzdGF0aWMgc2l6ZV90IGZ3cml0ZV9zaGExX2ZpbGUodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAogCQkJICAgICAgIHZvaWQgKmRhdGEpCiB7CiAJdW5zaWduZWQgY2hhciBleHBuWzQwOTZdOwogCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOwogCWludCBwb3NuID0gMDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqKWRhdGE7CiAJZG8gewotCQlzc2l6ZV90IHJldHZhbCA9IHdyaXRlKGxvY2FsLCBwdHIgKyBwb3NuLCBzaXplIC0gcG9zbik7CisJCXNzaXplX3QgcmV0dmFsID0gd3JpdGUocmVxdWVzdC0+bG9jYWwsCisJCQkJICAgICAgIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1cm4gcG9zbjsKIAkJcG9zbiArPSByZXR2YWw7CiAJfSB3aGlsZSAocG9zbiA8IHNpemUpOwogCi0Jc3RyZWFtLmF2YWlsX2luID0gc2l6ZTsKLQlzdHJlYW0ubmV4dF9pbiA9IHB0cjsKKwlyZXF1ZXN0LT5zdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXJlcXVlc3QtPnN0cmVhbS5uZXh0X2luID0gcHRyOwogCWRvIHsKLQkJc3RyZWFtLm5leHRfb3V0ID0gZXhwbjsKLQkJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihleHBuKTsKLQkJenJldCA9IGluZmxhdGUoJnN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKLQkJU0hBMV9VcGRhdGUoJmMsIGV4cG4sIHNpemVvZihleHBuKSAtIHN0cmVhbS5hdmFpbF9vdXQpOwotCX0gd2hpbGUgKHN0cmVhbS5hdmFpbF9pbiAmJiB6cmV0ID09IFpfT0spOworCQlyZXF1ZXN0LT5zdHJlYW0ubmV4dF9vdXQgPSBleHBuOworCQlyZXF1ZXN0LT5zdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGV4cG4pOworCQlyZXF1ZXN0LT56cmV0ID0gaW5mbGF0ZSgmcmVxdWVzdC0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCQlTSEExX1VwZGF0ZSgmcmVxdWVzdC0+YywgZXhwbiwKKwkJCSAgICBzaXplb2YoZXhwbikgLSByZXF1ZXN0LT5zdHJlYW0uYXZhaWxfb3V0KTsKKwl9IHdoaWxlIChyZXF1ZXN0LT5zdHJlYW0uYXZhaWxfaW4gJiYgcmVxdWVzdC0+enJldCA9PSBaX09LKTsKKwlkYXRhX3JlY2VpdmVkKys7CiAJcmV0dXJuIHNpemU7CiB9CiAKLXZvaWQgcHJlZmV0Y2godW5zaWduZWQgY2hhciAqc2hhMSkKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIHZvaWQgcHJvY2Vzc19jdXJsX21lc3NhZ2VzKHZvaWQpOworc3RhdGljIHZvaWQgcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHZvaWQpOworI2VuZGlmCitzdGF0aWMgaW50IGZldGNoX2FsdGVybmF0ZXMoY2hhciAqYmFzZSk7CisKK3N0YXRpYyBDVVJMKiBnZXRfY3VybF9oYW5kbGUodm9pZCkKIHsKLX0KKwlDVVJMKiByZXN1bHQgPSBjdXJsX2Vhc3lfaW5pdCgpOwogCi1pbnQgcmVsaW5rX29yX3JlbmFtZShjaGFyICpvbGQsIGNoYXIgKm5ldykgewotCWludCByZXQ7CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGN1cmxfc3NsX3ZlcmlmeSk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwNworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX05FVFJDLCBDVVJMX05FVFJDX09QVElPTkFMKTsKKyNlbmRpZgogCi0JcmV0ID0gbGluayhvbGQsIG5ldyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJLyogU2FtZSBDb2RhIGhhY2sgYXMgaW4gd3JpdGVfc2hhMV9maWxlKHNoYTFfZmlsZS5jKSAqLwotCQlyZXQgPSBlcnJubzsKLQkJaWYgKHJldCA9PSBFWERFViAmJiAhcmVuYW1lKG9sZCwgbmV3KSkKLQkJCXJldHVybiAwOwotCX0KLQl1bmxpbmsob2xkKTsKLQlpZiAocmV0KSB7Ci0JCWlmIChyZXQgIT0gRUVYSVNUKQotCQkJcmV0dXJuIHJldDsKKwlpZiAoc3NsX2NlcnQgIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMQ0VSVCwgc3NsX2NlcnQpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKKwlpZiAoc3NsX2tleSAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xLRVksIHNzbF9rZXkpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorCWlmIChzc2xfY2FwYXRoICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0NBUEFUSCwgc3NsX2NhcGF0aCk7CisjZW5kaWYKKwlpZiAoc3NsX2NhaW5mbyAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQUlORk8sIHNzbF9jYWluZm8pOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKKworCWlmIChjdXJsX2xvd19zcGVlZF9saW1pdCA+IDAgJiYgY3VybF9sb3dfc3BlZWRfdGltZSA+IDApIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULAorCQkJCSBjdXJsX2xvd19zcGVlZF9saW1pdCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0xPV19TUEVFRF9USU1FLAorCQkJCSBjdXJsX2xvd19zcGVlZF90aW1lKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGdvdF9hbHRlcm5hdGVzID0gMDsKLQotc3RhdGljIGludCBmZXRjaF9pbmRleChzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCitzdGF0aWMgc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKQogewotCWNoYXIgKmZpbGVuYW1lOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5ld3Nsb3Q7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWludCBudW1fdHJhbnNmZXJzOworCisJLyogV2FpdCBmb3IgYSBzbG90IHRvIG9wZW4gdXAgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwgKi8KKwl3aGlsZSAoYWN0aXZlX3JlcXVlc3RzID49IG1heF9yZXF1ZXN0cykgeworCQljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKwkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCQl9CisJfQorI2VuZGlmCisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMICYmIHNsb3QtPmluX3VzZSkgeworCQlzbG90ID0gc2xvdC0+bmV4dDsKKwl9CisJaWYgKHNsb3QgPT0gTlVMTCkgeworCQluZXdzbG90ID0geG1hbGxvYyhzaXplb2YoKm5ld3Nsb3QpKTsKKwkJbmV3c2xvdC0+Y3VybCA9IE5VTEw7CisJCW5ld3Nsb3QtPmluX3VzZSA9IDA7CisJCW5ld3Nsb3QtPm5leHQgPSBOVUxMOworCisJCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwkJaWYgKHNsb3QgPT0gTlVMTCkgeworCQkJYWN0aXZlX3F1ZXVlX2hlYWQgPSBuZXdzbG90OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHNsb3QtPm5leHQgIT0gTlVMTCkgeworCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJfQorCQkJc2xvdC0+bmV4dCA9IG5ld3Nsb3Q7CisJCX0KKwkJc2xvdCA9IG5ld3Nsb3Q7CisJfQorCisJaWYgKHNsb3QtPmN1cmwgPT0gTlVMTCkgeworI2lmZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwkJc2xvdC0+Y3VybCA9IGdldF9jdXJsX2hhbmRsZSgpOworI2Vsc2UKKwkJc2xvdC0+Y3VybCA9IGN1cmxfZWFzeV9kdXBoYW5kbGUoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorCX0KKworCWFjdGl2ZV9yZXF1ZXN0cysrOworCXNsb3QtPmluX3VzZSA9IDE7CisJc2xvdC0+ZG9uZSA9IDA7CisJc2xvdC0+bG9jYWwgPSBOVUxMOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBwcmFnbWFfaGVhZGVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcmFuZ2VfaGVhZGVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGN1cmxfZXJyb3JzdHIpOworCisJcmV0dXJuIHNsb3Q7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlDVVJMTWNvZGUgY3VybG1fcmVzdWx0ID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKworCWlmIChjdXJsbV9yZXN1bHQgIT0gQ1VSTE1fT0sgJiYKKwkgICAgY3VybG1fcmVzdWx0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeworCQlhY3RpdmVfcmVxdWVzdHMtLTsKKwkJc2xvdC0+aW5fdXNlID0gMDsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWludCBudW1fdHJhbnNmZXJzOworCWxvbmcgbGFzdF9wb3MgPSAwOworCWxvbmcgY3VycmVudF9wb3M7CisJZmRfc2V0IHJlYWRmZHM7CisJZmRfc2V0IHdyaXRlZmRzOworCWZkX3NldCBleGNmZHM7CisJaW50IG1heF9mZDsKKwlzdHJ1Y3QgdGltZXZhbCBzZWxlY3RfdGltZW91dDsKKwlDVVJMTWNvZGUgY3VybG1fcmVzdWx0OworCisJd2hpbGUgKCFzbG90LT5kb25lKSB7CisJCWRhdGFfcmVjZWl2ZWQgPSAwOworCQlkbyB7CisJCQljdXJsbV9yZXN1bHQgPSBjdXJsX211bHRpX3BlcmZvcm0oY3VybG0sCisJCQkJCQkJICAmbnVtX3RyYW5zZmVycyk7CisJCX0gd2hpbGUgKGN1cmxtX3Jlc3VsdCA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pOworCQlpZiAobnVtX3RyYW5zZmVycyA8IGFjdGl2ZV9yZXF1ZXN0cykgeworCQkJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisJCQlwcm9jZXNzX3JlcXVlc3RfcXVldWUoKTsKKwkJfQorCisJCWlmICghZGF0YV9yZWNlaXZlZCAmJiBzbG90LT5sb2NhbCAhPSBOVUxMKSB7CisJCQljdXJyZW50X3BvcyA9IGZ0ZWxsKHNsb3QtPmxvY2FsKTsKKwkJCWlmIChjdXJyZW50X3BvcyA+IGxhc3RfcG9zKQorCQkJCWRhdGFfcmVjZWl2ZWQrKzsKKwkJCWxhc3RfcG9zID0gY3VycmVudF9wb3M7CisJCX0KKworCQlpZiAoIXNsb3QtPmRvbmUgJiYgIWRhdGFfcmVjZWl2ZWQpIHsKKwkJCW1heF9mZCA9IDA7CisJCQlGRF9aRVJPKCZyZWFkZmRzKTsKKwkJCUZEX1pFUk8oJndyaXRlZmRzKTsKKwkJCUZEX1pFUk8oJmV4Y2Zkcyk7CisJCQlzZWxlY3RfdGltZW91dC50dl9zZWMgPSAwOworCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IDUwMDAwOworCQkJc2VsZWN0KG1heF9mZCwgJnJlYWRmZHMsICZ3cml0ZWZkcywKKwkJCSAgICAgICAmZXhjZmRzLCAmc2VsZWN0X3RpbWVvdXQpOworCQl9CisJfQorI2Vsc2UKKwlzbG90LT5jdXJsX3Jlc3VsdCA9IGN1cmxfZWFzeV9wZXJmb3JtKHNsb3QtPmN1cmwpOworCWFjdGl2ZV9yZXF1ZXN0cy0tOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgocmVxdWVzdC0+c2hhMSk7CisJY2hhciBwcmV2ZmlsZVtQQVRIX01BWF07CiAJY2hhciAqdXJsOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JaW50IHJldDsKKwljaGFyICpwb3NuOworCWludCBwcmV2bG9jYWw7CisJdW5zaWduZWQgY2hhciBwcmV2X2J1ZltQUkVWX0JVRl9TSVpFXTsKKwlzc2l6ZV90IHByZXZfcmVhZCA9IDA7CiAJbG9uZyBwcmV2X3Bvc24gPSAwOwogCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOwogCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwotCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCisJc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2IiwgcmVxdWVzdC0+ZmlsZW5hbWUpOworCXVubGluayhwcmV2ZmlsZSk7CisJcmVuYW1lKHJlcXVlc3QtPnRtcGZpbGUsIHByZXZmaWxlKTsKKwl1bmxpbmsocmVxdWVzdC0+dG1wZmlsZSk7CisKKwlyZXF1ZXN0LT5sb2NhbCA9IG9wZW4ocmVxdWVzdC0+dG1wZmlsZSwKKwkJCSAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJLyogVGhpcyBjb3VsZCBoYXZlIGZhaWxlZCBkdWUgdG8gdGhlICJsYXp5IGRpcmVjdG9yeSBjcmVhdGlvbiI7CisJICogdHJ5IHRvIG1rZGlyIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LgorCSAqLworCWlmIChyZXF1ZXN0LT5sb2NhbCA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKSB7CisJCWNoYXIgKmRpciA9IHN0cnJjaHIocmVxdWVzdC0+dG1wZmlsZSwgJy8nKTsKKwkJaWYgKGRpcikgeworCQkJKmRpciA9IDA7CisJCQlta2RpcihyZXF1ZXN0LT50bXBmaWxlLCAwNzc3KTsKKwkJCSpkaXIgPSAnLyc7CisJCX0KKwkJcmVxdWVzdC0+bG9jYWwgPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCisJCQkJICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwl9CisKKwlpZiAocmVxdWVzdC0+bG9jYWwgPCAwKSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJZXJyb3IoIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyBmb3IgJXM6ICVzXG4iLAorCQkgICAgICByZXF1ZXN0LT50bXBmaWxlLCByZXF1ZXN0LT5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmcmVxdWVzdC0+c3RyZWFtLCAwLCBzaXplb2YocmVxdWVzdC0+c3RyZWFtKSk7CisKKwlpbmZsYXRlSW5pdCgmcmVxdWVzdC0+c3RyZWFtKTsKKworCVNIQTFfSW5pdCgmcmVxdWVzdC0+Yyk7CisKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXF1ZXN0LT5yZXBvLT5iYXNlKSArIDUwKTsKKwlyZXF1ZXN0LT51cmwgPSB4bWFsbG9jKHN0cmxlbihyZXF1ZXN0LT5yZXBvLT5iYXNlKSArIDUwKTsKKwlzdHJjcHkodXJsLCByZXF1ZXN0LT5yZXBvLT5iYXNlKTsKKwlwb3NuID0gdXJsICsgc3RybGVuKHJlcXVlc3QtPnJlcG8tPmJhc2UpOworCXN0cmNweShwb3NuLCAib2JqZWN0cy8iKTsKKwlwb3NuICs9IDg7CisJbWVtY3B5KHBvc24sIGhleCwgMik7CisJcG9zbiArPSAyOworCSoocG9zbisrKSA9ICcvJzsKKwlzdHJjcHkocG9zbiwgaGV4ICsgMik7CisJc3RyY3B5KHJlcXVlc3QtPnVybCwgdXJsKTsKKworCS8qIElmIGEgcHJldmlvdXMgdGVtcCBmaWxlIGlzIHByZXNlbnQsIHByb2Nlc3Mgd2hhdCB3YXMgYWxyZWFkeQorCSAgIGZldGNoZWQuICovCisJcHJldmxvY2FsID0gb3BlbihwcmV2ZmlsZSwgT19SRE9OTFkpOworCWlmIChwcmV2bG9jYWwgIT0gLTEpIHsKKwkJZG8geworCQkJcHJldl9yZWFkID0gcmVhZChwcmV2bG9jYWwsIHByZXZfYnVmLCBQUkVWX0JVRl9TSVpFKTsKKwkJCWlmIChwcmV2X3JlYWQ+MCkgeworCQkJCWlmIChmd3JpdGVfc2hhMV9maWxlKHByZXZfYnVmLAorCQkJCQkJICAgICAxLAorCQkJCQkJICAgICBwcmV2X3JlYWQsCisJCQkJCQkgICAgIHJlcXVlc3QpID09IHByZXZfcmVhZCkgeworCQkJCQlwcmV2X3Bvc24gKz0gcHJldl9yZWFkOworCQkJCX0gZWxzZSB7CisJCQkJCXByZXZfcmVhZCA9IC0xOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAocHJldl9yZWFkID4gMCk7CisJCWNsb3NlKHByZXZsb2NhbCk7CisJfQorCXVubGluayhwcmV2ZmlsZSk7CisKKwkvKiBSZXNldCBpbmZsYXRlL1NIQTEgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgdGhlIHByZXZpb3VzIHRlbXAKKwkgICBmaWxlOyBhbHNvIHJld2luZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2NhbCBmaWxlLiAqLworCWlmIChwcmV2X3JlYWQgPT0gLTEpIHsKKwkJbWVtc2V0KCZyZXF1ZXN0LT5zdHJlYW0sIDAsIHNpemVvZihyZXF1ZXN0LT5zdHJlYW0pKTsKKwkJaW5mbGF0ZUluaXQoJnJlcXVlc3QtPnN0cmVhbSk7CisJCVNIQTFfSW5pdCgmcmVxdWVzdC0+Yyk7CisJCWlmIChwcmV2X3Bvc24+MCkgeworCQkJcHJldl9wb3NuID0gMDsKKwkJCWxzZWVrKHJlcXVlc3QtPmxvY2FsLCBTRUVLX1NFVCwgMCk7CisJCQlmdHJ1bmNhdGUocmVxdWVzdC0+bG9jYWwsIDApOworCQl9CisJfQorCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXF1ZXN0KTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCByZXF1ZXN0LT5lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZGF0YSBmcm9tIGEgcHJldmlvdXMgZmV0Y2gKKwkgICBhdHRlbXB0LCBvbmx5IGZldGNoIHRoZSBkYXRhIHdlIGRvbid0IGFscmVhZHkgaGF2ZS4gKi8KKwlpZiAocHJldl9wb3NuPjApIHsKKwkJaWYgKGdldF92ZXJib3NlbHkpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVzdW1pbmcgZmV0Y2ggb2Ygb2JqZWN0ICVzIGF0IGJ5dGUgJWxkXG4iLAorCQkJCWhleCwgcHJldl9wb3NuKTsKKwkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKKwkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwKKwkJCQkgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOworCX0KKworCS8qIFRyeSB0byBnZXQgdGhlIHJlcXVlc3Qgc3RhcnRlZCwgYWJvcnQgdGhlIHJlcXVlc3Qgb24gZXJyb3IgKi8KKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJY2xvc2UocmVxdWVzdC0+bG9jYWwpOworCQlmcmVlKHJlcXVlc3QtPnVybCk7CisJCXJldHVybjsKKwl9CisJCisJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJcmVxdWVzdC0+c3RhdGUgPSBBQ1RJVkU7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWZjaG1vZChyZXF1ZXN0LT5sb2NhbCwgMDQ0NCk7CisJY2xvc2UocmVxdWVzdC0+bG9jYWwpOworCisJaWYgKHJlcXVlc3QtPmh0dHBfY29kZSA9PSA0MTYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiByZXF1ZXN0ZWQgcmFuZ2UgaW52YWxpZDsgd2UgbWF5IGFscmVhZHkgaGF2ZSBhbGwgdGhlIGRhdGEuXG4iKTsKKwl9IGVsc2UgaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCXJldHVybjsKKwl9CisKKwlpbmZsYXRlRW5kKCZyZXF1ZXN0LT5zdHJlYW0pOworCVNIQTFfRmluYWwocmVxdWVzdC0+cmVhbF9zaGExLCAmcmVxdWVzdC0+Yyk7CisJaWYgKHJlcXVlc3QtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXVubGluayhyZXF1ZXN0LT50bXBmaWxlKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobWVtY21wKHJlcXVlc3QtPnNoYTEsIHJlcXVlc3QtPnJlYWxfc2hhMSwgMjApKSB7CisJCXVubGluayhyZXF1ZXN0LT50bXBmaWxlKTsKKwkJcmV0dXJuOworCX0KKwlyZXF1ZXN0LT5yZW5hbWUgPQorCQltb3ZlX3RlbXBfdG9fZmlsZShyZXF1ZXN0LT50bXBmaWxlLCByZXF1ZXN0LT5maWxlbmFtZSk7CisKKwlpZiAocmVxdWVzdC0+cmVuYW1lID09IDApCisJCXB1bGxfc2F5KCJnb3QgJXNcbiIsIHNoYTFfdG9faGV4KHJlcXVlc3QtPnNoYTEpKTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICplbnRyeSA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKworCWlmIChyZXF1ZXN0ID09IHJlcXVlc3RfcXVldWVfaGVhZCkgeworCQlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0LT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChlbnRyeS0+bmV4dCAhPSBOVUxMICYmIGVudHJ5LT5uZXh0ICE9IHJlcXVlc3QpCisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQlpZiAoZW50cnktPm5leHQgPT0gcmVxdWVzdCkKKwkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CisJfQorCisJZnJlZShyZXF1ZXN0LT51cmwpOworCWZyZWUocmVxdWVzdCk7Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQordm9pZCBwcm9jZXNzX2N1cmxfbWVzc2FnZXModm9pZCkKK3sKKwlpbnQgbnVtX21lc3NhZ2VzOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0ID0gTlVMTDsKKwlDVVJMTXNnICpjdXJsX21lc3NhZ2UgPSBjdXJsX211bHRpX2luZm9fcmVhZChjdXJsbSwgJm51bV9tZXNzYWdlcyk7CisKKwl3aGlsZSAoY3VybF9tZXNzYWdlICE9IE5VTEwpIHsKKwkJaWYgKGN1cmxfbWVzc2FnZS0+bXNnID09IENVUkxNU0dfRE9ORSkgeworCQkJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCQkJd2hpbGUgKHNsb3QgIT0gTlVMTCAmJgorCQkJICAgICAgIHNsb3QtPmN1cmwgIT0gY3VybF9tZXNzYWdlLT5lYXN5X2hhbmRsZSkKKwkJCQlzbG90ID0gc2xvdC0+bmV4dDsKKwkJCWlmIChzbG90ICE9IE5VTEwpIHsKKwkJCQljdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY3VybG0sIHNsb3QtPmN1cmwpOworCQkJCWFjdGl2ZV9yZXF1ZXN0cy0tOworCQkJCXNsb3QtPmRvbmUgPSAxOworCQkJCXNsb3QtPmluX3VzZSA9IDA7CisJCQkJc2xvdC0+Y3VybF9yZXN1bHQgPSBjdXJsX21lc3NhZ2UtPmRhdGEucmVzdWx0OworCQkJCWN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsCisJCQkJCQkgIENVUkxJTkZPX0hUVFBfQ09ERSwKKwkJCQkJCSAgJnNsb3QtPmh0dHBfY29kZSk7CisJCQkJcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwkJCQl3aGlsZSAocmVxdWVzdCAhPSBOVUxMICYmCisJCQkJICAgICAgIHJlcXVlc3QtPnNsb3QgIT0gc2xvdCkKKwkJCQkJcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiUmVjZWl2ZWQgRE9ORSBtZXNzYWdlIGZvciB1bmtub3duIHJlcXVlc3QhXG4iKTsKKwkJCX0KKwkJCWlmIChyZXF1ZXN0ICE9IE5VTEwpIHsKKwkJCQlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9CisJCQkJCWN1cmxfbWVzc2FnZS0+ZGF0YS5yZXN1bHQ7CisJCQkJcmVxdWVzdC0+aHR0cF9jb2RlID0gc2xvdC0+aHR0cF9jb2RlOworCQkJCXJlcXVlc3QtPnNsb3QgPSBOVUxMOworCQkJCXJlcXVlc3QtPnN0YXRlID0gQ09NUExFVEU7CisKKwkJCQkvKiBVc2UgYWx0ZXJuYXRlcyBpZiBuZWNlc3NhcnkgKi8KKwkJCQlpZiAocmVxdWVzdC0+aHR0cF9jb2RlID09IDQwNCkgeworCQkJCQlmZXRjaF9hbHRlcm5hdGVzKGFsdC0+YmFzZSk7CisJCQkJCWlmIChyZXF1ZXN0LT5yZXBvLT5uZXh0ICE9IE5VTEwpIHsKKwkJCQkJCXJlcXVlc3QtPnJlcG8gPQorCQkJCQkJCXJlcXVlc3QtPnJlcG8tPm5leHQ7CisJCQkJCQlzdGFydF9yZXF1ZXN0KHJlcXVlc3QpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJZmluaXNoX3JlcXVlc3QocmVxdWVzdCk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIENVUkwgbWVzc2FnZSByZWNlaXZlZDogJWRcbiIsCisJCQkJKGludCljdXJsX21lc3NhZ2UtPm1zZyk7CisJCX0KKwkJY3VybF9tZXNzYWdlID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybG0sICZudW1fbWVzc2FnZXMpOworCX0KK30KKwordm9pZCBwcm9jZXNzX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCWludCBudW1fdHJhbnNmZXJzOworCisJd2hpbGUgKGFjdGl2ZV9yZXF1ZXN0cyA8IG1heF9yZXF1ZXN0cyAmJiByZXF1ZXN0ICE9IE5VTEwpIHsKKwkJaWYgKHJlcXVlc3QtPnN0YXRlID09IFdBSVRJTkcpIHsKKwkJCWlmIChoYXNfc2hhMV9maWxlKHJlcXVlc3QtPnNoYTEpKQorCQkJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJCWVsc2UKKwkJCQlzdGFydF9yZXF1ZXN0KHJlcXVlc3QpOworCQkJY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxtLCAmbnVtX3RyYW5zZmVycyk7CisJCX0KKwkJcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisJfQorCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkgeworCQlpZiAoIXNsb3QtPmluX3VzZSAmJiBzbG90LT5jdXJsICE9IE5VTEwpIHsKKwkJCWN1cmxfZWFzeV9jbGVhbnVwKHNsb3QtPmN1cmwpOworCQkJc2xvdC0+Y3VybCA9IE5VTEw7CisJCX0KKwkJc2xvdCA9IHNsb3QtPm5leHQ7CisJfQkJCQkKK30KKyNlbmRpZgorCit2b2lkIHByZWZldGNoKHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5ld3JlcTsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqdGFpbDsKKwljaGFyICpmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOworCisJbmV3cmVxID0geG1hbGxvYyhzaXplb2YoKm5ld3JlcSkpOworCW1lbWNweShuZXdyZXEtPnNoYTEsIHNoYTEsIDIwKTsKKwluZXdyZXEtPnJlcG8gPSBhbHQ7CisJbmV3cmVxLT51cmwgPSBOVUxMOworCW5ld3JlcS0+bG9jYWwgPSAtMTsKKwluZXdyZXEtPnN0YXRlID0gV0FJVElORzsKKwlzbnByaW50ZihuZXdyZXEtPmZpbGVuYW1lLCBzaXplb2YobmV3cmVxLT5maWxlbmFtZSksICIlcyIsIGZpbGVuYW1lKTsKKwlzbnByaW50ZihuZXdyZXEtPnRtcGZpbGUsIHNpemVvZihuZXdyZXEtPnRtcGZpbGUpLAorCQkgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CisJbmV3cmVxLT5uZXh0ID0gTlVMTDsKKworCWlmIChyZXF1ZXN0X3F1ZXVlX2hlYWQgPT0gTlVMTCkgeworCQlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSBuZXdyZXE7CisJfSBlbHNlIHsKKwkJdGFpbCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkgeworCQkJdGFpbCA9IHRhaWwtPm5leHQ7CisJCX0KKwkJdGFpbC0+bmV4dCA9IG5ld3JlcTsKKwl9CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlwcm9jZXNzX3JlcXVlc3RfcXVldWUoKTsKKwlwcm9jZXNzX2N1cmxfbWVzc2FnZXMoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGZldGNoX2luZGV4KHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKKwljaGFyICpmaWxlbmFtZTsKKwljaGFyICp1cmw7CisJY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IGN1cmxfc2xpc3QgKnJhbmdlX2hlYWRlciA9IE5VTEw7CiAKIAlGSUxFICppbmRleGZpbGU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAKIAlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGdldF92ZXJib3NlbHkpCi0JCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwKLQkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIGluZGV4IGZvciBwYWNrICVzXG4iLCBoZXgpOwogCQogCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPmJhc2UpICsgNjQpOwotCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9wYWNrL3BhY2stJXMuaWR4IiwKLQkJcmVwby0+YmFzZSwgc2hhMV90b19oZXgoc2hhMSkpOworCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9wYWNrL3BhY2stJXMuaWR4IiwgcmVwby0+YmFzZSwgaGV4KTsKIAkKIAlmaWxlbmFtZSA9IHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpOwogCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CkBAIC0xNDMsMTIgKzcwOCwxMyBAQAogCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBvcGVuIGxvY2FsIGZpbGUgJXMgZm9yIHBhY2sgaW5kZXgiLAogCQkJICAgICBmaWxlbmFtZSk7CiAKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGN1cmxfZXJyb3JzdHIpOwotCQorCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKKwlzbG90LT5sb2NhbCA9IGluZGV4ZmlsZTsKKwogCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKIAkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KIAlwcmV2X3Bvc24gPSBmdGVsbChpbmRleGZpbGUpOwpAQCAtMTU2LDMwICs3MjIsMjYgQEAKIAkJaWYgKGdldF92ZXJib3NlbHkpCiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgaW5kZXggZm9yIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJc2hhMV90b19oZXgoc2hhMSksIHByZXZfcG9zbik7CisJCQkJaGV4LCBwcmV2X3Bvc24pOwogCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwogCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOwogCX0KIAotCS8qIENsZWFyIG91dCB0aGUgUmFuZ2U6IGhlYWRlciBhZnRlciBwZXJmb3JtaW5nIHRoZSByZXF1ZXN0LCBzbwotCSAgIG90aGVyIGN1cmwgcmVxdWVzdHMgZG9uJ3QgaW5oZXJpdCBpbmFwcHJvcHJpYXRlIGhlYWRlciBkYXRhICovCi0JY3VybF9yZXN1bHQgPSBjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcmFuZ2VfaGVhZGVyKTsKLQlpZiAoY3VybF9yZXN1bHQgIT0gMCkgewotCQlmY2xvc2UoaW5kZXhmaWxlKTsKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXNcbiVzIiwgdXJsLAotCQkJICAgICBjdXJsX2Vycm9yc3RyKTsKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAoc2xvdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZjbG9zZShpbmRleGZpbGUpOworCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXNcbiVzIiwgdXJsLAorCQkJCSAgICAgY3VybF9lcnJvcnN0cik7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CiAJfQogCiAJZmNsb3NlKGluZGV4ZmlsZSk7CiAKLQlyZXQgPSByZWxpbmtfb3JfcmVuYW1lKHRtcGZpbGUsIGZpbGVuYW1lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlbmFtZSAlczogJXMiLAotCQkJICAgICBmaWxlbmFtZSwgc3RyZXJyb3IocmV0KSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOwogfQogCiBzdGF0aWMgaW50IHNldHVwX2luZGV4KHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTIwNSwxMCArNzY3LDE2IEBACiAJY2hhciAqZGF0YTsKIAlpbnQgaSA9IDA7CiAJaW50IGh0dHBfc3BlY2lmaWMgPSAxOworCXN0cnVjdCBhbHRfYmFzZSAqdGFpbCA9IGFsdDsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsX2J5dGUgPSAnXDAnOworCisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisKIAlpZiAoZ290X2FsdGVybmF0ZXMpCiAJCXJldHVybiAwOworCiAJZGF0YSA9IHhtYWxsb2MoNDA5Nik7Ci0JYnVmZmVyLnNpemUgPSA0MDk1OworCWJ1ZmZlci5zaXplID0gNDA5NjsKIAlidWZmZXIucG9zbiA9IDA7CiAJYnVmZmVyLmJ1ZmZlciA9IGRhdGE7CiAKQEAgLTIxOCwyNSArNzg2LDQxIEBACiAJdXJsID0geG1hbGxvYyhzdHJsZW4oYmFzZSkgKyAzMSk7CiAJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiwgYmFzZSk7CiAKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCSBmd3JpdGVfYnVmZmVyX2R5bmFtaWMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LIHx8ICFidWZmZXIucG9zbikgeworCQkJaHR0cF9zcGVjaWZpYyA9IDA7CiAKLQlpZiAoY3VybF9lYXN5X3BlcmZvcm0oY3VybCkgfHwgIWJ1ZmZlci5wb3NuKSB7Ci0JCWh0dHBfc3BlY2lmaWMgPSAwOworCQkJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIsIGJhc2UpOwogCi0JCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiLCBiYXNlKTsKLQkJCi0JCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKLQkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCQkKLQkJaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpKSB7Ci0JCQlyZXR1cm4gMDsKKwkJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJCQkgZndyaXRlX2J1ZmZlcl9keW5hbWljKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJCQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQkJCWZyZWUoYnVmZmVyLmJ1ZmZlcik7CisJCQkJCWlmIChzbG90LT5odHRwX2NvZGUgPT0gNDA0KQorCQkJCQkJZ290X2FsdGVybmF0ZXMgPSAxOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CiAJCX0KKwl9IGVsc2UgeworCQlmcmVlKGJ1ZmZlci5idWZmZXIpOworCQlyZXR1cm4gMDsKIAl9CiAKLQlkYXRhW2J1ZmZlci5wb3NuXSA9ICdcMCc7CisJZndyaXRlX2J1ZmZlcl9keW5hbWljKCZudWxsX2J5dGUsIDEsIDEsICZidWZmZXIpOworCWJ1ZmZlci5wb3NuLS07CisJZGF0YSA9IGJ1ZmZlci5idWZmZXI7CiAKIAl3aGlsZSAoaSA8IGJ1ZmZlci5wb3NuKSB7CiAJCWludCBwb3NuID0gaTsKQEAgLTI4MywxOCArODY3LDIxIEBACiAJCQkJCWZwcmludGYoc3RkZXJyLCAKIAkJCQkJCSJBbHNvIGxvb2sgYXQgJXNcbiIsIHRhcmdldCk7CiAJCQkJbmV3YWx0ID0geG1hbGxvYyhzaXplb2YoKm5ld2FsdCkpOwotCQkJCW5ld2FsdC0+bmV4dCA9IGFsdDsKKwkJCQluZXdhbHQtPm5leHQgPSBOVUxMOwogCQkJCW5ld2FsdC0+YmFzZSA9IHRhcmdldDsKIAkJCQluZXdhbHQtPmdvdF9pbmRpY2VzID0gMDsKIAkJCQluZXdhbHQtPnBhY2tzID0gTlVMTDsKLQkJCQlhbHQgPSBuZXdhbHQ7CisJCQkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkKKwkJCQkJdGFpbCA9IHRhaWwtPm5leHQ7CisJCQkJdGFpbC0+bmV4dCA9IG5ld2FsdDsKIAkJCQlyZXQrKzsKIAkJCX0KIAkJfQogCQlpID0gcG9zbiArIDE7CiAJfQorCiAJZ290X2FsdGVybmF0ZXMgPSAxOwotCQorCWZyZWUoYnVmZmVyLmJ1ZmZlcik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzA2LDYgKzg5Myw4IEBACiAJY2hhciAqZGF0YTsKIAlpbnQgaSA9IDA7CiAKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwogCWlmIChyZXBvLT5nb3RfaW5kaWNlcykKIAkJcmV0dXJuIDA7CiAKQEAgLTMyMCwxNSArOTA5LDI0IEBACiAJdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+YmFzZSkgKyAyMSk7CiAJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vcGFja3MiLCByZXBvLT5iYXNlKTsKIAotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBjdXJsX2Vycm9yc3RyKTsKLQkKLQlpZiAoY3VybF9lYXN5X3BlcmZvcm0oY3VybCkpCi0JCXJldHVybiBlcnJvcigiJXMiLCBjdXJsX2Vycm9yc3RyKTsKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJIGZ3cml0ZV9idWZmZXJfZHluYW1pYyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcmVlKGJ1ZmZlci5idWZmZXIpOworCQkJcmV0dXJuIGVycm9yKCIlcyIsIGN1cmxfZXJyb3JzdHIpOworCQl9CisJfSBlbHNlIHsKKwkJZnJlZShidWZmZXIuYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOworCX0KIAorCWRhdGEgPSBidWZmZXIuYnVmZmVyOwogCXdoaWxlIChpIDwgYnVmZmVyLnBvc24pIHsKIAkJc3dpdGNoIChkYXRhW2ldKSB7CiAJCWNhc2UgJ1AnOgpAQCAtMzQ4LDYgKzk0Niw3IEBACiAJCWkrKzsKIAl9CiAKKwlmcmVlKGJ1ZmZlci5idWZmZXIpOwogCXJlcG8tPmdvdF9pbmRpY2VzID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM2NCw3ICs5NjMsOCBAQAogCWxvbmcgcHJldl9wb3NuID0gMDsKIAljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKIAlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKLQlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogCiAJaWYgKGZldGNoX2luZGljZXMocmVwbykpCiAJCXJldHVybiAtMTsKQEAgLTM5MCwxMSArOTkwLDEyIEBACiAJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCiAJCQkgICAgIGZpbGVuYW1lKTsKIAotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCBwYWNrZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBjdXJsX2Vycm9yc3RyKTsKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsIHBhY2tmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKKwlzbG90LT5sb2NhbCA9IHBhY2tmaWxlOwogCiAJLyogSWYgdGhlcmUgaXMgZGF0YSBwcmVzZW50IGZyb20gYSBwcmV2aW91cyB0cmFuc2ZlciBhdHRlbXB0LAogCSAgIHJlc3VtZSB3aGVyZSBpdCBsZWZ0IG9mZiAqLwpAQCAtNDA2LDI1ICsxMDA3LDI1IEBACiAJCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSwgcHJldl9wb3NuKTsKIAkJc3ByaW50ZihyYW5nZSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKIAkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKIAl9CiAKLQkvKiBDbGVhciBvdXQgdGhlIFJhbmdlOiBoZWFkZXIgYWZ0ZXIgcGVyZm9ybWluZyB0aGUgcmVxdWVzdCwgc28KLQkgICBvdGhlciBjdXJsIHJlcXVlc3RzIGRvbid0IGluaGVyaXQgaW5hcHByb3ByaWF0ZSBoZWFkZXIgZGF0YSAqLwotCWN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3JhbmdlX2hlYWRlcik7Ci0JaWYgKGN1cmxfcmVzdWx0ICE9IDApIHsKLQkJZmNsb3NlKHBhY2tmaWxlKTsKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgZmlsZSAlc1xuJXMiLCB1cmwsCi0JCQkgICAgIGN1cmxfZXJyb3JzdHIpOworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChzbG90LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZmNsb3NlKHBhY2tmaWxlKTsKKwkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwgdXJsLAorCQkJCSAgICAgY3VybF9lcnJvcnN0cik7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CiAJfQogCiAJZmNsb3NlKHBhY2tmaWxlKTsKIAotCXJldCA9IHJlbGlua19vcl9yZW5hbWUodG1wZmlsZSwgZmlsZW5hbWUpOworCXJldCA9IG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byB3cml0ZSBwYWNrIGZpbGVuYW1lICVzOiAlcyIsCi0JCQkgICAgIGZpbGVuYW1lLCBzdHJlcnJvcihyZXQpKTsKKwkJcmV0dXJuIHJldDsKIAogCWxzdCA9ICZyZXBvLT5wYWNrczsKIAl3aGlsZSAoKmxzdCAhPSB0YXJnZXQpCkBAIC00NDEsMTg1ICsxMDQyLDE3OSBAQAogc3RhdGljIGludCBmZXRjaF9vYmplY3Qoc3RydWN0IGFsdF9iYXNlICpyZXBvLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOwotCWNoYXIgKmZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7Ci0JdW5zaWduZWQgY2hhciByZWFsX3NoYTFbMjBdOwotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JY2hhciBwcmV2ZmlsZVtQQVRIX01BWF07CiAJaW50IHJldDsKLQljaGFyICp1cmw7Ci0JY2hhciAqcG9zbjsKLQlpbnQgcHJldmxvY2FsOwotCXVuc2lnbmVkIGNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07Ci0Jc3NpemVfdCBwcmV2X3JlYWQgPSAwOwotCWxvbmcgcHJldl9wb3NuID0gMDsKLQljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKLQlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKIAotCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7Ci0Jc25wcmludGYocHJldmZpbGUsIHNpemVvZihwcmV2ZmlsZSksICIlcy5wcmV2IiwgZmlsZW5hbWUpOworCXdoaWxlIChyZXF1ZXN0ICE9IE5VTEwgJiYgbWVtY21wKHJlcXVlc3QtPnNoYTEsIHNoYTEsIDIwKSkKKwkJcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBmaW5kIHJlcXVlc3QgZm9yICVzIGluIHRoZSBxdWV1ZSIsIGhleCk7CiAKLQlpZiAodW5saW5rKHByZXZmaWxlKSAmJiAoZXJybm8gIT0gRU5PRU5UKSkKLQkJcmV0dXJuIGVycm9yKCJGYWlsZWQgdG8gdW5saW5rICVzICglcykiLAotCQkJICAgICBwcmV2ZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKLQlpZiAocmVuYW1lKHRtcGZpbGUsIHByZXZmaWxlKSAmJiAoZXJybm8gIT0gRU5PRU5UKSkKLQkJcmV0dXJuIGVycm9yKCJGYWlsZWQgdG8gcmVuYW1lICVzIHRvICVzICglcykiLAotCQkJICAgICB0bXBmaWxlLCBwcmV2ZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKLQotCWxvY2FsID0gb3Blbih0bXBmaWxlLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCi0JLyogTm90ZTogaWYgYW5vdGhlciBpbnN0YW5jZSBzdGFydHMgbm93LCBpdCB3aWxsIHR1cm4gb3VyIG5ldwotCSAgIHRtcGZpbGUgaW50byBpdHMgcHJldmZpbGUuICovCi0KLQlpZiAobG9jYWwgPCAwKQotCQlyZXR1cm4gZXJyb3IoIkNvdWxkbid0IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyBmb3IgJXM6ICVzXG4iLAotCQkJICAgICB0bXBmaWxlLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQotCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7Ci0KLQlpbmZsYXRlSW5pdCgmc3RyZWFtKTsKLQotCVNIQTFfSW5pdCgmYyk7Ci0KLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRkFJTE9ORVJST1IsIDEpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCBOVUxMKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3ByYWdtYV9oZWFkZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgY3VybF9lcnJvcnN0cik7Ci0KLQl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT5iYXNlKSArIDUwKTsKLQlzdHJjcHkodXJsLCByZXBvLT5iYXNlKTsKLQlwb3NuID0gdXJsICsgc3RybGVuKHJlcG8tPmJhc2UpOwotCXN0cmNweShwb3NuLCAib2JqZWN0cy8iKTsKLQlwb3NuICs9IDg7Ci0JbWVtY3B5KHBvc24sIGhleCwgMik7Ci0JcG9zbiArPSAyOwotCSoocG9zbisrKSA9ICcvJzsKLQlzdHJjcHkocG9zbiwgaGV4ICsgMik7Ci0KLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCi0JLyogSWYgYSBwcmV2aW91cyB0ZW1wIGZpbGUgaXMgcHJlc2VudCwgcHJvY2VzcyB3aGF0IHdhcyBhbHJlYWR5Ci0JICAgZmV0Y2hlZC4gKi8KLQlwcmV2bG9jYWwgPSBvcGVuKHByZXZmaWxlLCBPX1JET05MWSk7Ci0JaWYgKHByZXZsb2NhbCAhPSAtMSkgewotCQlkbyB7Ci0JCQlwcmV2X3JlYWQgPSByZWFkKHByZXZsb2NhbCwgcHJldl9idWYsIFBSRVZfQlVGX1NJWkUpOwotCQkJaWYgKHByZXZfcmVhZD4wKSB7Ci0JCQkJaWYgKGZ3cml0ZV9zaGExX2ZpbGUocHJldl9idWYsCi0JCQkJCQkgICAgIDEsCi0JCQkJCQkgICAgIHByZXZfcmVhZCwKLQkJCQkJCSAgICAgTlVMTCkgPT0gcHJldl9yZWFkKSB7Ci0JCQkJCXByZXZfcG9zbiArPSBwcmV2X3JlYWQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJldl9yZWFkID0gLTE7Ci0JCQkJfQotCQkJfQotCQl9IHdoaWxlIChwcmV2X3JlYWQgPiAwKTsKLQkJY2xvc2UocHJldmxvY2FsKTsKKwlpZiAoaGFzX3NoYTFfZmlsZShyZXF1ZXN0LT5zaGExKSkgeworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJldHVybiAwOwogCX0KLQl1bmxpbmsocHJldmZpbGUpOwogCi0JLyogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCi0JICAgZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4gKi8KLQlpZiAocHJldl9yZWFkID09IC0xKSB7Ci0JCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7Ci0JCWluZmxhdGVJbml0KCZzdHJlYW0pOwotCQlTSEExX0luaXQoJmMpOwotCQlpZiAocHJldl9wb3NuPjApIHsKLQkJCXByZXZfcG9zbiA9IDA7Ci0JCQlsc2Vlayhsb2NhbCwgU0VFS19TRVQsIDApOwotCQkJZnRydW5jYXRlKGxvY2FsLCAwKTsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXdoaWxlIChyZXF1ZXN0LT5zdGF0ZSA9PSBXQUlUSU5HKSB7CisJCWludCBudW1fdHJhbnNmZXJzOworCQljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKwkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCQkJcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKCk7CiAJCX0KIAl9CisjZWxzZQorCXN0YXJ0X3JlcXVlc3QocmVxdWVzdCk7CisjZW5kaWYKIAotCS8qIElmIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBkYXRhIGZyb20gYSBwcmV2aW91cyBmZXRjaAotCSAgIGF0dGVtcHQsIG9ubHkgZmV0Y2ggdGhlIGRhdGEgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlLiAqLwotCWlmIChwcmV2X3Bvc24+MCkgewotCQlpZiAoZ2V0X3ZlcmJvc2VseSkKLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBvYmplY3QgJXMgYXQgYnl0ZSAlbGRcbiIsCi0JCQkJaGV4LCBwcmV2X3Bvc24pOwotCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOwotCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKLQkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7CisJd2hpbGUgKHJlcXVlc3QtPnN0YXRlID09IEFDVElWRSkgeworCQlydW5fYWN0aXZlX3Nsb3QocmVxdWVzdC0+c2xvdCk7CisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJCXJlcXVlc3QtPmN1cmxfcmVzdWx0ID0gcmVxdWVzdC0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJCXJlcXVlc3QtPmh0dHBfY29kZSA9IHJlcXVlc3QtPnNsb3QtPmh0dHBfY29kZTsKKwkJcmVxdWVzdC0+c2xvdCA9IE5VTEw7CisKKwkJLyogVXNlIGFsdGVybmF0ZXMgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChyZXF1ZXN0LT5odHRwX2NvZGUgPT0gNDA0KSB7CisJCQlmZXRjaF9hbHRlcm5hdGVzKGFsdC0+YmFzZSk7CisJCQlpZiAocmVxdWVzdC0+cmVwby0+bmV4dCAhPSBOVUxMKSB7CisJCQkJcmVxdWVzdC0+cmVwbyA9IHJlcXVlc3QtPnJlcG8tPm5leHQ7CisJCQkJc3RhcnRfcmVxdWVzdChyZXF1ZXN0KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBDT01QTEVURTsKKwkJfQorI2VuZGlmCiAJfQogCi0JLyogQ2xlYXIgb3V0IHRoZSBSYW5nZTogaGVhZGVyIGFmdGVyIHBlcmZvcm1pbmcgdGhlIHJlcXVlc3QsIHNvCi0JICAgb3RoZXIgY3VybCByZXF1ZXN0cyBkb24ndCBpbmhlcml0IGluYXBwcm9wcmlhdGUgaGVhZGVyIGRhdGEgKi8KLQljdXJsX3Jlc3VsdCA9IGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19yYW5nZV9oZWFkZXIpOwotCWlmIChjdXJsX3Jlc3VsdCAhPSAwKSB7Ci0JCXJldHVybiBlcnJvcigiJXMiLCBjdXJsX2Vycm9yc3RyKTsKKwlpZiAocmVxdWVzdC0+c3RhdGUgPT0gQUJPUlRFRCkgeworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJldHVybiBlcnJvcigiUmVxdWVzdCBmb3IgJXMgYWJvcnRlZCIsIGhleCk7CiAJfQogCi0JZmNobW9kKGxvY2FsLCAwNDQ0KTsKLQljbG9zZShsb2NhbCk7Ci0JaW5mbGF0ZUVuZCgmc3RyZWFtKTsKLQlTSEExX0ZpbmFsKHJlYWxfc2hhMSwgJmMpOwotCWlmICh6cmV0ICE9IFpfU1RSRUFNX0VORCkgewotCQl1bmxpbmsodG1wZmlsZSk7Ci0JCXJldHVybiBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHRcbiIsIGhleCwgdXJsKTsKKwlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYgcmVxdWVzdC0+aHR0cF9jb2RlICE9IDQxNikgeworCQlpZiAocmVxdWVzdC0+aHR0cF9jb2RlID09IDQwNCkKKwkJCXJldCA9IC0xOyAvKiBCZSBzaWxlbnQsIGl0IGlzIHByb2JhYmx5IGluIGEgcGFjay4gKi8KKwkJZWxzZQorCQkJcmV0ID0gZXJyb3IoIiVzIChjdXJsX3Jlc3VsdCA9ICVkLCBodHRwX2NvZGUgPSAlbGQsIHNoYTEgPSAlcykiLAorCQkJCSAgICByZXF1ZXN0LT5lcnJvcnN0ciwgcmVxdWVzdC0+Y3VybF9yZXN1bHQsCisJCQkJICAgIHJlcXVlc3QtPmh0dHBfY29kZSwgaGV4KTsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobWVtY21wKHNoYTEsIHJlYWxfc2hhMSwgMjApKSB7Ci0JCXVubGluayh0bXBmaWxlKTsKKworCWlmIChyZXF1ZXN0LT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlyZXQgPSBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHRcbiIsIGhleCwgcmVxdWVzdC0+dXJsKTsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChtZW1jbXAocmVxdWVzdC0+c2hhMSwgcmVxdWVzdC0+cmVhbF9zaGExLCAyMCkpIHsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCQlyZXR1cm4gZXJyb3IoIkZpbGUgJXMgaGFzIGJhZCBoYXNoXG4iLCBoZXgpOwogCX0KLQlyZXQgPSByZWxpbmtfb3JfcmVuYW1lKHRtcGZpbGUsIGZpbGVuYW1lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzOiAlcyIsCi0JCQkgICAgIGZpbGVuYW1lLCBzdHJlcnJvcihyZXQpKTsKIAotCXB1bGxfc2F5KCJnb3QgJXNcbiIsIGhleCk7CisJaWYgKHJlcXVlc3QtPnJlbmFtZSA8IDApIHsKKwkJcmV0ID0gZXJyb3IoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzOiAlcyIsCisJCQkgICAgcmVxdWVzdC0+ZmlsZW5hbWUsCisJCQkgICAgc3RyZXJyb3IocmVxdWVzdC0+cmVuYW1lKSk7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBmZXRjaCh1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0cnVjdCBhbHRfYmFzZSAqYWx0YmFzZSA9IGFsdDsKKworCWlmICghZmV0Y2hfb2JqZWN0KGFsdGJhc2UsIHNoYTEpKQorCQlyZXR1cm4gMDsKIAl3aGlsZSAoYWx0YmFzZSkgewotCQlpZiAoIWZldGNoX29iamVjdChhbHRiYXNlLCBzaGExKSkKLQkJCXJldHVybiAwOwogCQlpZiAoIWZldGNoX3BhY2soYWx0YmFzZSwgc2hhMSkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKGZldGNoX2FsdGVybmF0ZXMoYWx0YmFzZS0+YmFzZSkgPiAwKSB7Ci0JCQlhbHRiYXNlID0gYWx0OwotCQkJY29udGludWU7Ci0JCX0KKwkJZmV0Y2hfYWx0ZXJuYXRlcyhhbHQtPmJhc2UpOwogCQlhbHRiYXNlID0gYWx0YmFzZS0+bmV4dDsKIAl9CiAJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZmluZCAlcyB1bmRlciAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIAotCQkgICAgIGluaXRpYWxfYmFzZSk7CisJCSAgICAgYWx0LT5iYXNlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVlZHNfcXVvdGUoaW50IGNoKQoreworCXN3aXRjaCAoY2gpIHsKKwljYXNlICcvJzogY2FzZSAnLSc6IGNhc2UgJy4nOgorCWNhc2UgJ0EnLi4uJ1onOgljYXNlICdhJy4uLid6JzoJY2FzZSAnMCcuLi4nOSc6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgaGV4KGludCB2KQoreworCWlmICh2IDwgMTApIHJldHVybiAnMCcgKyB2OworCWVsc2UgcmV0dXJuICdBJyArIHYgLSAxMDsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3JlZl91cmwoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVmKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNoYXIgKmRwLCAqcXJlZjsKKwlpbnQgbGVuLCBiYXNlbGVuLCBjaDsKKworCWJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisJbGVuID0gYmFzZWxlbiArIDY7IC8qICJyZWZzLyIgKyBOVUwgKi8KKwlmb3IgKGNwID0gcmVmOyAoY2ggPSAqY3ApICE9IDA7IGNwKyssIGxlbisrKQorCQlpZiAobmVlZHNfcXVvdGUoY2gpKQorCQkJbGVuICs9IDI7IC8qIGV4dHJhIHR3byBoZXggcGx1cyByZXBsYWNlbWVudCAlICovCisJcXJlZiA9IHhtYWxsb2MobGVuKTsKKwltZW1jcHkocXJlZiwgYmFzZSwgYmFzZWxlbik7CisJbWVtY3B5KHFyZWYgKyBiYXNlbGVuLCAicmVmcy8iLCA1KTsKKwlmb3IgKGNwID0gcmVmLCBkcCA9IHFyZWYgKyBiYXNlbGVuICsgNTsgKGNoID0gKmNwKSAhPSAwOyBjcCsrKSB7CisJCWlmIChuZWVkc19xdW90ZShjaCkpIHsKKwkJCSpkcCsrID0gJyUnOworCQkJKmRwKysgPSBoZXgoKGNoID4+IDQpICYgMHhGKTsKKwkJCSpkcCsrID0gaGV4KGNoICYgMHhGKTsKKwkJfQorCQllbHNlCisJCQkqZHArKyA9IGNoOworCX0KKwkqZHAgPSAwOworCisJcmV0dXJuIHFyZWY7CiB9CiAKIGludCBmZXRjaF9yZWYoY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotICAgICAgICBjaGFyICp1cmwsICpwb3NuOworICAgICAgICBjaGFyICp1cmw7CiAgICAgICAgIGNoYXIgaGV4WzQyXTsKICAgICAgICAgc3RydWN0IGJ1ZmZlciBidWZmZXI7Ci0JY2hhciAqYmFzZSA9IGluaXRpYWxfYmFzZTsKKwljaGFyICpiYXNlID0gYWx0LT5iYXNlOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogICAgICAgICBidWZmZXIuc2l6ZSA9IDQxOwogICAgICAgICBidWZmZXIucG9zbiA9IDA7CiAgICAgICAgIGJ1ZmZlci5idWZmZXIgPSBoZXg7CiAgICAgICAgIGhleFs0MV0gPSAnXDAnOwogICAgICAgICAKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIE5VTEwpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgY3VybF9lcnJvcnN0cik7Ci0KLSAgICAgICAgdXJsID0geG1hbGxvYyhzdHJsZW4oYmFzZSkgKyA2ICsgc3RybGVuKHJlZikpOwotICAgICAgICBzdHJjcHkodXJsLCBiYXNlKTsKLSAgICAgICAgcG9zbiA9IHVybCArIHN0cmxlbihiYXNlKTsKLSAgICAgICAgc3RyY3B5KHBvc24sICJyZWZzLyIpOwotICAgICAgICBwb3NuICs9IDU7Ci0gICAgICAgIHN0cmNweShwb3NuLCByZWYpOwotCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0KLSAgICAgICAgaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpKQotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcigiQ291bGRuJ3QgZ2V0ICVzIGZvciAlc1xuJXMiLAotCQkJICAgICB1cmwsIHJlZiwgY3VybF9lcnJvcnN0cik7CisJdXJsID0gcXVvdGVfcmVmX3VybChiYXNlLCByZWYpOworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChzbG90LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykKKwkJCXJldHVybiBlcnJvcigiQ291bGRuJ3QgZ2V0ICVzIGZvciAlc1xuJXMiLAorCQkJCSAgICAgdXJsLCByZWYsIGN1cmxfZXJyb3JzdHIpOworCX0gZWxzZSB7CisJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKKwl9CiAKICAgICAgICAgaGV4WzQwXSA9ICdcMCc7CiAgICAgICAgIGdldF9zaGExX2hleChoZXgsIHNoYTEpOwpAQCAtNjMxLDYgKzEyMjYsMTEgQEAKIAljaGFyICpjb21taXRfaWQ7CiAJY2hhciAqdXJsOwogCWludCBhcmcgPSAxOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCWNoYXIgKmxvd19zcGVlZF9saW1pdDsKKwljaGFyICpsb3dfc3BlZWRfdGltZTsKKwljaGFyICp3YWl0X3VybDsKKwlpbnQgcmMgPSAwOwogCiAJd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgewogCQlpZiAoYXJndlthcmddWzFdID09ICd0JykgewpAQCAtNjYwLDQ0ICsxMjYwLDkwIEBACiAKIAljdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CiAKLQljdXJsID0gY3VybF9lYXN5X2luaXQoKTsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXsKKwkJY2hhciAqaHR0cF9tYXhfcmVxdWVzdHMgPSBnZXRlbnYoIkdJVF9IVFRQX01BWF9SRVFVRVNUUyIpOworCQlpZiAoaHR0cF9tYXhfcmVxdWVzdHMgIT0gTlVMTCkKKwkJCW1heF9yZXF1ZXN0cyA9IGF0b2koaHR0cF9tYXhfcmVxdWVzdHMpOworCX0KKworCWN1cmxtID0gY3VybF9tdWx0aV9pbml0KCk7CisJaWYgKGN1cmxtID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBjcmVhdGluZyBjdXJsIG11bHRpIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKKworCWlmIChnZXRlbnYoIkdJVF9TU0xfTk9fVkVSSUZZIikpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDA7CisKKwlzc2xfY2VydCA9IGdldGVudigiR0lUX1NTTF9DRVJUIik7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorCXNzbF9rZXkgPSBnZXRlbnYoIkdJVF9TU0xfS0VZIik7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJc3NsX2NhcGF0aCA9IGdldGVudigiR0lUX1NTTF9DQVBBVEgiKTsKKyNlbmRpZgorCXNzbF9jYWluZm8gPSBnZXRlbnYoIkdJVF9TU0xfQ0FJTkZPIik7CisKKwlsb3dfc3BlZWRfbGltaXQgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9MSU1JVCIpOworCWlmIChsb3dfc3BlZWRfbGltaXQgIT0gTlVMTCkKKwkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSBzdHJ0b2wobG93X3NwZWVkX2xpbWl0LCBOVUxMLCAxMCk7CisJbG93X3NwZWVkX3RpbWUgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9USU1FIik7CisJaWYgKGxvd19zcGVlZF90aW1lICE9IE5VTEwpCisJCWN1cmxfbG93X3NwZWVkX3RpbWUgPSBzdHJ0b2wobG93X3NwZWVkX3RpbWUsIE5VTEwsIDEwKTsKKworCWdpdF9jb25maWcoaHR0cF9vcHRpb25zKTsKKworCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDE7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlmIChtYXhfcmVxdWVzdHMgPCAxKQorCQltYXhfcmVxdWVzdHMgPSBERUZBVUxUX01BWF9SRVFVRVNUUzsKKyNlbmRpZgorCisJcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHByYWdtYV9oZWFkZXIsICJQcmFnbWE6IG5vLWNhY2hlIik7CiAJbm9fcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKG5vX3ByYWdtYV9oZWFkZXIsICJQcmFnbWE6Iik7CiAJbm9fcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQobm9fcmFuZ2VfaGVhZGVyLCAiUmFuZ2U6Iik7CiAKLQljdXJsX3NzbF92ZXJpZnkgPSBnZXRlbnYoIkdJVF9TU0xfTk9fVkVSSUZZIikgPyAwIDogMTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGN1cmxfc3NsX3ZlcmlmeSk7Ci0jaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwNwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9ORVRSQywgQ1VSTF9ORVRSQ19PUFRJT05BTCk7CisjaWZuZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwljdXJsX2RlZmF1bHQgPSBnZXRfY3VybF9oYW5kbGUoKTsKICNlbmRpZgogCi0JaWYgKChzc2xfY2VydCA9IGdldGVudigiR0lUX1NTTF9DRVJUIikpICE9IE5VTEwpIHsKLQkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTENFUlQsIHNzbF9jZXJ0KTsKLQl9Ci0jaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgotCWlmICgoc3NsX2tleSA9IGdldGVudigiR0lUX1NTTF9LRVkiKSkgIT0gTlVMTCkgewotCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMS0VZLCBzc2xfa2V5KTsKLQl9Ci0jZW5kaWYKLSNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4Ci0JaWYgKChzc2xfY2FwYXRoID0gZ2V0ZW52KCJHSVRfU1NMX0NBUEFUSCIpKSAhPSBOVUxMKSB7Ci0JCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DQVBBVEgsIHNzbF9jYXBhdGgpOwotCX0KLSNlbmRpZgotCWlmICgoc3NsX2NhaW5mbyA9IGdldGVudigiR0lUX1NTTF9DQUlORk8iKSkgIT0gTlVMTCkgewotCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ0FJTkZPLCBzc2xfY2FpbmZvKTsKLQl9Ci0KIAlhbHQgPSB4bWFsbG9jKHNpemVvZigqYWx0KSk7CiAJYWx0LT5iYXNlID0gdXJsOwogCWFsdC0+Z290X2luZGljZXMgPSAwOwogCWFsdC0+cGFja3MgPSBOVUxMOwogCWFsdC0+bmV4dCA9IE5VTEw7Ci0JaW5pdGlhbF9iYXNlID0gdXJsOwogCiAJaWYgKHB1bGwoY29tbWl0X2lkKSkKLQkJcmV0dXJuIDE7CisJCXJjID0gMTsKIAorCWN1cmxfc2xpc3RfZnJlZV9hbGwocHJhZ21hX2hlYWRlcik7CiAJY3VybF9zbGlzdF9mcmVlX2FsbChub19wcmFnbWFfaGVhZGVyKTsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKG5vX3JhbmdlX2hlYWRlcik7CisjaWZuZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwljdXJsX2Vhc3lfY2xlYW51cChjdXJsX2RlZmF1bHQpOworI2VuZGlmCisJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCXdoaWxlIChzbG90ICE9IE5VTEwpIHsKKwkJaWYgKHNsb3QtPmluX3VzZSkgeworCQkJaWYgKGdldF92ZXJib3NlbHkpIHsKKwkJCQljdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLAorCQkJCQkJICBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLAorCQkJCQkJICAmd2FpdF91cmwpOworCQkJCWZwcmludGYoc3RkZXJyLCAiV2FpdGluZyBmb3IgJXNcbiIsIHdhaXRfdXJsKTsKKwkJCX0KKwkJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJfQorCQlpZiAoc2xvdC0+Y3VybCAhPSBOVUxMKQorCQkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CisJCXNsb3QgPSBzbG90LT5uZXh0OworCX0KKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWN1cmxfbXVsdGlfY2xlYW51cChjdXJsbSk7CisjZW5kaWYKIAljdXJsX2dsb2JhbF9jbGVhbnVwKCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvaWRlbnQuYyBiL2lkZW50LmMKaW5kZXggNTYyZjVmMS4uYmM4OWUxZCAxMDA2NDQKLS0tIGEvaWRlbnQuYworKysgYi9pZGVudC5jCkBAIC04LDEyICs4LDkgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCiAjaW5jbHVkZSA8cHdkLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KIAotc3RhdGljIGNoYXIgcmVhbF9lbWFpbFsxMDAwXTsKLXN0YXRpYyBjaGFyIHJlYWxfbmFtZVsxMDAwXTsKLXN0YXRpYyBjaGFyIHJlYWxfZGF0ZVs1MF07CitzdGF0aWMgY2hhciBnaXRfZGVmYXVsdF9kYXRlWzUwXTsKIAogc3RhdGljIHZvaWQgY29weV9nZWNvcyhzdHJ1Y3QgcGFzc3dkICp3LCBjaGFyICpuYW1lLCBpbnQgc3opCiB7CkBAIC01OCwyMiArNTUsMjkgQEAKIAkJZGllKCJZb3UgZG9uJ3QgZXhpc3QuIEdvIGF3YXkhIik7CiAKIAkvKiBHZXQgdGhlIG5hbWUgKCJnZWNvcyIpICovCi0JY29weV9nZWNvcyhwdywgcmVhbF9uYW1lLCBzaXplb2YocmVhbF9uYW1lKSk7CisJY29weV9nZWNvcyhwdywgZ2l0X2RlZmF1bHRfbmFtZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X25hbWUpKTsKIAogCS8qIE1ha2UgdXAgYSBmYWtlIGVtYWlsIGFkZHJlc3MgKG5hbWUgKyAnQCcgKyBob3N0bmFtZSBbKyAnLicgKyBkb21haW5uYW1lXSkgKi8KIAlsZW4gPSBzdHJsZW4ocHctPnB3X25hbWUpOwotCWlmIChsZW4gPiBzaXplb2YocmVhbF9lbWFpbCkvMikKKwlpZiAobGVuID4gc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKS8yKQogCQlkaWUoIllvdXIgc3lzYWRtaW4gbXVzdCBoYXRlIHlvdSEiKTsKLQltZW1jcHkocmVhbF9lbWFpbCwgcHctPnB3X25hbWUsIGxlbik7Ci0JcmVhbF9lbWFpbFtsZW4rK10gPSAnQCc7Ci0JZ2V0aG9zdG5hbWUocmVhbF9lbWFpbCArIGxlbiwgc2l6ZW9mKHJlYWxfZW1haWwpIC0gbGVuKTsKLQlpZiAoIXN0cmNocihyZWFsX2VtYWlsK2xlbiwgJy4nKSkgewotCQlsZW4gPSBzdHJsZW4ocmVhbF9lbWFpbCk7Ci0JCXJlYWxfZW1haWxbbGVuKytdID0gJy4nOwotCQlnZXRkb21haW5uYW1lKHJlYWxfZW1haWwrbGVuLCBzaXplb2YocmVhbF9lbWFpbCktbGVuKTsKKwltZW1jcHkoZ2l0X2RlZmF1bHRfZW1haWwsIHB3LT5wd19uYW1lLCBsZW4pOworCWdpdF9kZWZhdWx0X2VtYWlsW2xlbisrXSA9ICdAJzsKKwlnZXRob3N0bmFtZShnaXRfZGVmYXVsdF9lbWFpbCArIGxlbiwgc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKSAtIGxlbik7CisJaWYgKCFzdHJjaHIoZ2l0X2RlZmF1bHRfZW1haWwrbGVuLCAnLicpKSB7CisJCXN0cnVjdCBob3N0ZW50ICpoZSA9IGdldGhvc3RieW5hbWUoZ2l0X2RlZmF1bHRfZW1haWwgKyBsZW4pOworCQljaGFyICpkb21haW5uYW1lOworCisJCWxlbiA9IHN0cmxlbihnaXRfZGVmYXVsdF9lbWFpbCk7CisJCWdpdF9kZWZhdWx0X2VtYWlsW2xlbisrXSA9ICcuJzsKKwkJaWYgKGhlICYmIChkb21haW5uYW1lID0gc3RyY2hyKGhlLT5oX25hbWUsICcuJykpKQorCQkJc3RybmNweShnaXRfZGVmYXVsdF9lbWFpbCArIGxlbiwgZG9tYWlubmFtZSArIDEsIHNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkgLSBsZW4pOworCQllbHNlCisJCQlzdHJuY3B5KGdpdF9kZWZhdWx0X2VtYWlsICsgbGVuLCAiKG5vbmUpIiwgc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKSAtIGxlbik7CisJCWdpdF9kZWZhdWx0X2VtYWlsW3NpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkgLSAxXSA9IDA7CiAJfQogCS8qIEFuZCBzZXQgdGhlIGRlZmF1bHQgZGF0ZSAqLwotCWRhdGVzdGFtcChyZWFsX2RhdGUsIHNpemVvZihyZWFsX2RhdGUpKTsKKwlkYXRlc3RhbXAoZ2l0X2RlZmF1bHRfZGF0ZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X2RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU5LDEwICsxNjMsMTAgQEAKIAlpbnQgaTsKIAogCWlmICghbmFtZSkKLQkJbmFtZSA9IHJlYWxfbmFtZTsKKwkJbmFtZSA9IGdpdF9kZWZhdWx0X25hbWU7CiAJaWYgKCFlbWFpbCkKLQkJZW1haWwgPSByZWFsX2VtYWlsOwotCXN0cmNweShkYXRlLCByZWFsX2RhdGUpOworCQllbWFpbCA9IGdpdF9kZWZhdWx0X2VtYWlsOworCXN0cmNweShkYXRlLCBnaXRfZGVmYXVsdF9kYXRlKTsKIAlpZiAoZGF0ZV9zdHIpCiAJCXBhcnNlX2RhdGUoZGF0ZV9zdHIsIGRhdGUsIHNpemVvZihkYXRlKSk7CiAKZGlmZiAtLWdpdCBhL2luZGV4LXBhY2suYyBiL2luZGV4LXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODVmZTcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5kZXgtcGFjay5jCkBAIC0wLDAgKzEsNDYyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgaW5kZXhfcGFja191c2FnZVtdID0KKyJnaXQtaW5kZXgtcGFjayBbLW8gaW5kZXgtZmlsZV0gcGFjay1maWxlIjsKKworc3RydWN0IG9iamVjdF9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwllbnVtIG9iamVjdF90eXBlIHJlYWxfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworfTsKKworc3RydWN0IGRlbHRhX2VudHJ5Cit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqOworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrX25hbWU7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqcGFja19iYXNlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFja19zaXplOworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHM7CitzdGF0aWMgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YXM7CitzdGF0aWMgaW50IG5yX29iamVjdHM7CitzdGF0aWMgaW50IG5yX2RlbHRhczsKKworc3RhdGljIHZvaWQgb3Blbl9wYWNrX2ZpbGUodm9pZCkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlmZCA9IG9wZW4ocGFja19uYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnOiAlcyIsIHBhY2tfbmFtZSwKKwkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJY2xvc2UoZmQpOworCQlkaWUoImNhbm5vdCBmc3RhdCBwYWNrZmlsZSAnJXMnOiAlcyIsIHBhY2tfbmFtZSwKKwkJICAgIHN0cmVycm9yKGVycikpOworCX0KKwlwYWNrX3NpemUgPSBzdC5zdF9zaXplOworCXBhY2tfYmFzZSA9IG1tYXAoTlVMTCwgcGFja19zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJaWYgKHBhY2tfYmFzZSA9PSBNQVBfRkFJTEVEKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJY2xvc2UoZmQpOworCQlkaWUoImNhbm5vdCBtbWFwIHBhY2tmaWxlICclcyc6ICVzIiwgcGFja19uYW1lLAorCQkgICAgc3RyZXJyb3IoZXJyKSk7CisJfQorCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGFja19oZWFkZXIodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgcGFja19oZWFkZXIgKmhkcjsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCVNIQV9DVFggY3R4OworCisJLyogRW5zdXJlIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgZm9yIHRoZSBoZWFkZXIgYW5kIGZpbmFsIFNIQTEgKi8KKwlpZiAocGFja19zaXplIDwgc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikgKyAyMCkKKwkJZGllKCJwYWNrZmlsZSAnJXMnIGlzIHRvbyBzbWFsbCIsIHBhY2tfbmFtZSk7CisKKwkvKiBIZWFkZXIgY29uc2lzdGVuY3kgY2hlY2sgKi8KKwloZHIgPSAodm9pZCAqKXBhY2tfYmFzZTsKKwlpZiAoaGRyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKSkKKwkJZGllKCJwYWNrZmlsZSAnJXMnIHNpZ25hdHVyZSBtaXNtYXRjaCIsIHBhY2tfbmFtZSk7CisJaWYgKGhkci0+aGRyX3ZlcnNpb24gIT0gaHRvbmwoUEFDS19WRVJTSU9OKSkKKwkJZGllKCJwYWNrZmlsZSAnJXMnIHZlcnNpb24gJWQgZGlmZmVyZW50IGZyb20gb3VycyAlZCIsCisJCSAgICBwYWNrX25hbWUsIG50b2hsKGhkci0+aGRyX3ZlcnNpb24pLCBQQUNLX1ZFUlNJT04pOworCisJbnJfb2JqZWN0cyA9IG50b2hsKGhkci0+aGRyX2VudHJpZXMpOworCisJLyogQ2hlY2sgcGFja2ZpbGUgaW50ZWdyaXR5ICovCisJU0hBMV9Jbml0KCZjdHgpOworCVNIQTFfVXBkYXRlKCZjdHgsIHBhY2tfYmFzZSwgcGFja19zaXplIC0gMjApOworCVNIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJaWYgKG1lbWNtcChzaGExLCBwYWNrX2Jhc2UgKyBwYWNrX3NpemUgLSAyMCwgMjApKQorCQlkaWUoInBhY2tmaWxlICclcycgU0hBMSBtaXNtYXRjaCIsIHBhY2tfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhZF9vYmplY3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJICAgICAgIC4uLikgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKK3N0YXRpYyB2b2lkIGJhZF9vYmplY3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCWNoYXIgYnVmWzEwMjRdOworCisJdmFfc3RhcnQocGFyYW1zLCBmb3JtYXQpOworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZGllKCJwYWNrZmlsZSAnJXMnOiBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIiwKKwkgICAgcGFja19uYW1lLCBvZmZzZXQsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfZW50cnlfZGF0YSh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpjdXJyZW50X3BvcywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcGFja19saW1pdCA9IHBhY2tfc2l6ZSAtIDIwOworCXVuc2lnbmVkIGxvbmcgcG9zID0gKmN1cnJlbnRfcG9zOworCXpfc3RyZWFtIHN0cmVhbTsKKwl2b2lkICpidWYgPSB4bWFsbG9jKHNpemUpOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBidWY7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemU7CisJc3RyZWFtLm5leHRfaW4gPSBwYWNrX2Jhc2UgKyBwb3M7CisJc3RyZWFtLmF2YWlsX2luID0gcGFja19saW1pdCAtIHBvczsKKwlpbmZsYXRlSW5pdCgmc3RyZWFtKTsKKworCWZvciAoOzspIHsKKwkJaW50IHJldCA9IGluZmxhdGUoJnN0cmVhbSwgMCk7CisJCWlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorCQkJYnJlYWs7CisJCWlmIChyZXQgIT0gWl9PSykKKwkJCWJhZF9vYmplY3Qob2Zmc2V0LCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIsIHJldCk7CisJfQorCWluZmxhdGVFbmQoJnN0cmVhbSk7CisJaWYgKHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZSkKKwkJYmFkX29iamVjdChvZmZzZXQsICJzaXplIG1pc21hdGNoIChleHBlY3RlZCAlbHUsIGdvdCAlbHUpIiwKKwkJCSAgIHNpemUsIHN0cmVhbS50b3RhbF9vdXQpOworCSpjdXJyZW50X3BvcyA9IHBhY2tfbGltaXQgLSBzdHJlYW0uYXZhaWxfaW47CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19yYXdfZW50cnkodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgICBlbnVtIG9iamVjdF90eXBlICpvYmpfdHlwZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm9ial9zaXplLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGVsdGFfYmFzZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm5leHRfb2JqX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhY2tfbGltaXQgPSBwYWNrX3NpemUgLSAyMDsKKwl1bnNpZ25lZCBsb25nIHBvcyA9IG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIHNoaWZ0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCisJYyA9IHBhY2tfYmFzZVtwb3MrK107CisJdHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gKGMgJiAxNSk7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlpZiAocG9zID49IHBhY2tfbGltaXQpCisJCQliYWRfb2JqZWN0KG9mZnNldCwgIm9iamVjdCBleHRlbmRzIHBhc3QgZW5kIG9mIHBhY2siKTsKKwkJYyA9IHBhY2tfYmFzZVtwb3MrK107CisJCXNpemUgKz0gKGMgJiAweDdmVUwpIDw8IHNoaWZ0OworCQlzaGlmdCArPSA3OworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX0RFTFRBOgorCQlpZiAocG9zICsgMjAgPj0gcGFja19saW1pdCkKKwkJCWJhZF9vYmplY3Qob2Zmc2V0LCAib2JqZWN0IGV4dGVuZHMgcGFzdCBlbmQgb2YgcGFjayIpOworCQltZW1jcHkoZGVsdGFfYmFzZSwgcGFja19iYXNlICsgcG9zLCAyMCk7CisJCXBvcyArPSAyMDsKKwkJLyogZmFsbHRocnUgKi8KKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJZGF0YSA9IHVucGFja19lbnRyeV9kYXRhKG9mZnNldCwgJnBvcywgc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJhZF9vYmplY3Qob2Zmc2V0LCAiYmFkIG9iamVjdCB0eXBlICVkIiwgdHlwZSk7CisJfQorCisJKm9ial90eXBlID0gdHlwZTsKKwkqb2JqX3NpemUgPSBzaXplOworCSpuZXh0X29ial9vZmZzZXQgPSBwb3M7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9kZWx0YShjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX3NoYTEpCit7CisJaW50IGZpcnN0ID0gMCwgbGFzdCA9IG5yX2RlbHRhczsKKworICAgICAgICB3aGlsZSAoZmlyc3QgPCBsYXN0KSB7CisgICAgICAgICAgICAgICAgaW50IG5leHQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgICAgICAgICAgICAgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSA9ICZkZWx0YXNbbmV4dF07CisgICAgICAgICAgICAgICAgaW50IGNtcDsKKworICAgICAgICAgICAgICAgIGNtcCA9IG1lbWNtcChiYXNlX3NoYTEsIGRlbHRhLT5iYXNlX3NoYTEsIDIwKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNtcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0OworICAgICAgICAgICAgICAgIGlmIChjbXAgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaXJzdCA9IG5leHQrMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLWZpcnN0LTE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9kZWx0YXNfYmFzZWRfb25fc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX3NoYTEsCisJCQkJICAgICBpbnQgKmZpcnN0X2luZGV4LCBpbnQgKmxhc3RfaW5kZXgpCit7CisJaW50IGZpcnN0ID0gZmluZF9kZWx0YShiYXNlX3NoYTEpOworCWludCBsYXN0ID0gZmlyc3Q7CisJaW50IGVuZCA9IG5yX2RlbHRhcyAtIDE7CisKKwlpZiAoZmlyc3QgPCAwKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGZpcnN0ID4gMCAmJiAhbWVtY21wKGRlbHRhc1tmaXJzdC0xXS5iYXNlX3NoYTEsIGJhc2Vfc2hhMSwgMjApKQorCQktLWZpcnN0OworCXdoaWxlIChsYXN0IDwgZW5kICYmICFtZW1jbXAoZGVsdGFzW2xhc3QrMV0uYmFzZV9zaGExLCBiYXNlX3NoYTEsIDIwKSkKKwkJKytsYXN0OworCSpmaXJzdF9pbmRleCA9IGZpcnN0OworCSpsYXN0X2luZGV4ID0gbGFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hhMV9vYmplY3QoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCVNIQV9DVFggY3R4OworCWNoYXIgaGVhZGVyWzUwXTsKKwlpbnQgaGVhZGVyX3NpemU7CisJY29uc3QgY2hhciAqdHlwZV9zdHI7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9DT01NSVQ6IHR5cGVfc3RyID0gImNvbW1pdCI7IGJyZWFrOworCWNhc2UgT0JKX1RSRUU6ICAgdHlwZV9zdHIgPSAidHJlZSI7IGJyZWFrOworCWNhc2UgT0JKX0JMT0I6ICAgdHlwZV9zdHIgPSAiYmxvYiI7IGJyZWFrOworCWNhc2UgT0JKX1RBRzogICAgdHlwZV9zdHIgPSAidGFnIjsgYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJiYWQgdHlwZSAlZCIsIHR5cGUpOworCX0KKworCWhlYWRlcl9zaXplID0gc3ByaW50ZihoZWFkZXIsICIlcyAlbHUiLCB0eXBlX3N0ciwgc2l6ZSkgKyAxOworCisJU0hBMV9Jbml0KCZjdHgpOworCVNIQTFfVXBkYXRlKCZjdHgsIGhlYWRlciwgaGVhZGVyX3NpemUpOworCVNIQTFfVXBkYXRlKCZjdHgsIGRhdGEsIHNpemUpOworCVNIQTFfRmluYWwoc2hhMSwgJmN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEoc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSwgdm9pZCAqYmFzZV9kYXRhLAorCQkJICB1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9IGRlbHRhLT5vYmo7CisJdm9pZCAqZGVsdGFfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemU7CisJdm9pZCAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemU7CisJZW51bSBvYmplY3RfdHlwZSBkZWx0YV90eXBlOworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKKwl1bnNpZ25lZCBsb25nIG5leHRfb2JqX29mZnNldDsKKwlpbnQgaiwgZmlyc3QsIGxhc3Q7CisKKwlvYmotPnJlYWxfdHlwZSA9IHR5cGU7CisJZGVsdGFfZGF0YSA9IHVucGFja19yYXdfZW50cnkob2JqLT5vZmZzZXQsICZkZWx0YV90eXBlLAorCQkJCSAgICAgICZkZWx0YV9zaXplLCBiYXNlX3NoYTEsCisJCQkJICAgICAgJm5leHRfb2JqX29mZnNldCk7CisJcmVzdWx0ID0gcGF0Y2hfZGVsdGEoYmFzZV9kYXRhLCBiYXNlX3NpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUsCisJCQkgICAgICZyZXN1bHRfc2l6ZSk7CisJZnJlZShkZWx0YV9kYXRhKTsKKwlpZiAoIXJlc3VsdCkKKwkJYmFkX29iamVjdChvYmotPm9mZnNldCwgImZhaWxlZCB0byBhcHBseSBkZWx0YSIpOworCXNoYTFfb2JqZWN0KHJlc3VsdCwgcmVzdWx0X3NpemUsIHR5cGUsIG9iai0+c2hhMSk7CisJaWYgKCFmaW5kX2RlbHRhc19iYXNlZF9vbl9zaGExKG9iai0+c2hhMSwgJmZpcnN0LCAmbGFzdCkpIHsKKwkJZm9yIChqID0gZmlyc3Q7IGogPD0gbGFzdDsgaisrKQorCQkJcmVzb2x2ZV9kZWx0YSgmZGVsdGFzW2pdLCByZXN1bHQsIHJlc3VsdF9zaXplLCB0eXBlKTsKKwl9CisJZnJlZShyZXN1bHQpOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZGVsdGFfZW50cnkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZGVsdGFfZW50cnkgKmRlbHRhX2EgPSBhOworCWNvbnN0IHN0cnVjdCBkZWx0YV9lbnRyeSAqZGVsdGFfYiA9IGI7CisJcmV0dXJuIG1lbWNtcChkZWx0YV9hLT5iYXNlX3NoYTEsIGRlbHRhX2ItPmJhc2Vfc2hhMSwgMjApOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wYWNrX29iamVjdHModm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpOworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZGF0YV9zaXplOworCisJLyoKKwkgKiBGaXJzdCBwYXNzOgorCSAqIC0gZmluZCBsb2NhdGlvbnMgb2YgYWxsIG9iamVjdHM7CisJICogLSBjYWxjdWxhdGUgU0hBMSBvZiBhbGwgbm9uLWRlbHRhIG9iamVjdHM7CisJICogLSByZW1lbWJlciBiYXNlIFNIQTEgZm9yIGFsbCBkZWx0YXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKwkJb2JqLT5vZmZzZXQgPSBvZmZzZXQ7CisJCWRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9mZnNldCwgJm9iai0+dHlwZSwgJmRhdGFfc2l6ZSwKKwkJCQkJYmFzZV9zaGExLCAmb2Zmc2V0KTsKKwkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0RFTFRBKSB7CisJCQlzdHJ1Y3QgZGVsdGFfZW50cnkgKmRlbHRhID0gJmRlbHRhc1tucl9kZWx0YXMrK107CisJCQlkZWx0YS0+b2JqID0gb2JqOworCQkJbWVtY3B5KGRlbHRhLT5iYXNlX3NoYTEsIGJhc2Vfc2hhMSwgMjApOworCQl9IGVsc2UKKwkJCXNoYTFfb2JqZWN0KGRhdGEsIGRhdGFfc2l6ZSwgb2JqLT50eXBlLCBvYmotPnNoYTEpOworCQlmcmVlKGRhdGEpOworCX0KKwlpZiAob2Zmc2V0ICE9IHBhY2tfc2l6ZSAtIDIwKQorCQlkaWUoInBhY2tmaWxlICclcycgaGFzIGp1bmsgYXQgdGhlIGVuZCIsIHBhY2tfbmFtZSk7CisKKwkvKiBTb3J0IGRlbHRhcyBieSBiYXNlIFNIQTEgZm9yIGZhc3Qgc2VhcmNoaW5nICovCisJcXNvcnQoZGVsdGFzLCBucl9kZWx0YXMsIHNpemVvZihzdHJ1Y3QgZGVsdGFfZW50cnkpLAorCSAgICAgIGNvbXBhcmVfZGVsdGFfZW50cnkpOworCisJLyoKKwkgKiBTZWNvbmQgcGFzczoKKwkgKiAtIGZvciBhbGwgbm9uLWRlbHRhIG9iamVjdHMsIGxvb2sgaWYgaXQgaXMgdXNlZCBhcyBhIGJhc2UgZm9yCisJICogICBkZWx0YXM7CisJICogLSBpZiB1c2VkIGFzIGEgYmFzZSwgdW5jb21wcmVzcyB0aGUgb2JqZWN0IGFuZCBhcHBseSBhbGwgZGVsdGFzLAorCSAqICAgcmVjdXJzaXZlbHkgY2hlY2tpbmcgaWYgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgdXNlZCBhcyBhIGJhc2UKKwkgKiAgIGZvciBzb21lIG1vcmUgZGVsdGFzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CisJCWludCBqLCBmaXJzdCwgbGFzdDsKKworCQlpZiAob2JqLT50eXBlID09IE9CSl9ERUxUQSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZmluZF9kZWx0YXNfYmFzZWRfb25fc2hhMShvYmotPnNoYTEsICZmaXJzdCwgJmxhc3QpKQorCQkJY29udGludWU7CisJCWRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iai0+b2Zmc2V0LCAmb2JqLT50eXBlLCAmZGF0YV9zaXplLAorCQkJCQliYXNlX3NoYTEsICZvZmZzZXQpOworCQlmb3IgKGogPSBmaXJzdDsgaiA8PSBsYXN0OyBqKyspCisJCQlyZXNvbHZlX2RlbHRhKCZkZWx0YXNbal0sIGRhdGEsIGRhdGFfc2l6ZSwgb2JqLT50eXBlKTsKKwkJZnJlZShkYXRhKTsKKwl9CisKKwkvKiBDaGVjayBmb3IgdW5yZXNvbHZlZCBkZWx0YXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfZGVsdGFzOyBpKyspIHsKKwkJaWYgKGRlbHRhc1tpXS5vYmotPnJlYWxfdHlwZSA9PSBPQkpfREVMVEEpCisJCQlkaWUoInBhY2tmaWxlICclcycgaGFzIHVucmVzb2x2ZWQgZGVsdGFzIiwgIHBhY2tfbmFtZSk7CisJfQorfQorCitzdGF0aWMgaW50IHNoYTFfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqYSA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9iOworCXJldHVybiBtZW1jbXAoYS0+c2hhMSwgYi0+c2hhMSwgMjApOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9pbmRleF9maWxlKGNvbnN0IGNoYXIgKmluZGV4X25hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHNoYTFmaWxlICpmOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipzb3J0ZWRfYnlfc2hhID0KKwkJeGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSAqKSk7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipsYXN0ID0gc29ydGVkX2J5X3NoYSArIG5yX29iamVjdHM7CisJdW5zaWduZWQgaW50IGFycmF5WzI1Nl07CisJaW50IGk7CisJU0hBX0NUWCBjdHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgKytpKQorCQlzb3J0ZWRfYnlfc2hhW2ldID0gJm9iamVjdHNbaV07CisJcXNvcnQoc29ydGVkX2J5X3NoYSwgbnJfb2JqZWN0cywgc2l6ZW9mKHNvcnRlZF9ieV9zaGFbMF0pLAorCSAgICAgIHNoYTFfY29tcGFyZSk7CisKKwl1bmxpbmsoaW5kZXhfbmFtZSk7CisJZiA9IHNoYTFjcmVhdGUoIiVzIiwgaW5kZXhfbmFtZSk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBmaXJzdC1sZXZlbCB0YWJsZSAodGhlIGxpc3QgaXMgc29ydGVkLAorCSAqIGJ1dCB3ZSB1c2UgYSAyNTYtZW50cnkgbG9va3VwIHRvIGJlIGFibGUgdG8gYXZvaWQKKwkgKiBoYXZpbmcgdG8gZG8gZWlnaHQgZXh0cmEgYmluYXJ5IHNlYXJjaCBpdGVyYXRpb25zKS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqKm5leHQgPSBsaXN0OworCQl3aGlsZSAobmV4dCA8IGxhc3QpIHsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICpuZXh0OworCQkJaWYgKG9iai0+c2hhMVswXSAhPSBpKQorCQkJCWJyZWFrOworCQkJbmV4dCsrOworCQl9CisJCWFycmF5W2ldID0gaHRvbmwobmV4dCAtIHNvcnRlZF9ieV9zaGEpOworCQlsaXN0ID0gbmV4dDsKKwl9CisJc2hhMXdyaXRlKGYsIGFycmF5LCAyNTYgKiBzaXplb2YoaW50KSk7CisKKwkvKiByZWNvbXB1dGUgdGhlIFNIQTEgaGFzaCBvZiBzb3J0ZWQgb2JqZWN0IG5hbWVzLgorCSAqIGN1cnJlbnRseSBwYWNrLW9iamVjdHMgZG9lcyBub3QgZG8gdGhpcywgYnV0IHRoYXQKKwkgKiBjYW4gYmUgZml4ZWQuCisJICovCisJU0hBMV9Jbml0KCZjdHgpOworCS8qCisJICogV3JpdGUgdGhlIGFjdHVhbCBTSEExIGVudHJpZXMuLgorCSAqLworCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IGh0b25sKG9iai0+b2Zmc2V0KTsKKwkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQlzaGExd3JpdGUoZiwgb2JqLT5zaGExLCAyMCk7CisJCVNIQTFfVXBkYXRlKCZjdHgsIG9iai0+c2hhMSwgMjApOworCX0KKwlzaGExd3JpdGUoZiwgcGFja19iYXNlICsgcGFja19zaXplIC0gMjAsIDIwKTsKKwlzaGExY2xvc2UoZiwgTlVMTCwgMSk7CisJZnJlZShzb3J0ZWRfYnlfc2hhKTsKKwlTSEExX0ZpbmFsKHNoYTEsICZjdHgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJY2hhciAqaW5kZXhfbmFtZSA9IE5VTEw7CisJY2hhciAqaW5kZXhfbmFtZV9idWYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItbyIpKSB7CisJCQkJaWYgKGluZGV4X25hbWUgfHwgKGkrMSkgPj0gYXJnYykKKwkJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJCQkJaW5kZXhfbmFtZSA9IGFyZ3ZbKytpXTsKKwkJCX0gZWxzZQorCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGFja19uYW1lKQorCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJCXBhY2tfbmFtZSA9IGFyZzsKKwl9CisKKwlpZiAoIXBhY2tfbmFtZSkKKwkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJaWYgKCFpbmRleF9uYW1lKSB7CisJCWludCBsZW4gPSBzdHJsZW4ocGFja19uYW1lKTsKKwkJaWYgKGxlbiA8IDUgfHwgc3RyY21wKHBhY2tfbmFtZSArIGxlbiAtIDUsICIucGFjayIpKQorCQkJZGllKCJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIsCisJCQkgICAgcGFja19uYW1lKTsKKwkJaW5kZXhfbmFtZV9idWYgPSB4bWFsbG9jKGxlbiAtIDEpOworCQltZW1jcHkoaW5kZXhfbmFtZV9idWYsIHBhY2tfbmFtZSwgbGVuIC0gNSk7CisJCXN0cmNweShpbmRleF9uYW1lX2J1ZiArIGxlbiAtIDUsICIuaWR4Iik7CisJCWluZGV4X25hbWUgPSBpbmRleF9uYW1lX2J1ZjsKKwl9CisKKwlvcGVuX3BhY2tfZmlsZSgpOworCXBhcnNlX3BhY2tfaGVhZGVyKCk7CisJb2JqZWN0cyA9IHhjYWxsb2MobnJfb2JqZWN0cywgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKKwlkZWx0YXMgPSB4Y2FsbG9jKG5yX29iamVjdHMsIHNpemVvZihzdHJ1Y3QgZGVsdGFfZW50cnkpKTsKKwlwYXJzZV9wYWNrX29iamVjdHMoKTsKKwlmcmVlKGRlbHRhcyk7CisJd3JpdGVfaW5kZXhfZmlsZShpbmRleF9uYW1lLCBzaGExKTsKKwlmcmVlKG9iamVjdHMpOworCWZyZWUoaW5kZXhfbmFtZV9idWYpOworCisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9pbml0LWRiLmMgYi9pbml0LWRiLmMKaW5kZXggYWFiYzA5Zi4uY2E2ZmE0ZCAxMDA2NDQKLS0tIGEvaW5pdC1kYi5jCisrKyBiL2luaXQtZGIuYwpAQCAtMTk2LDYgKzE5Niw0MyBAQAogCX0KIAlwYXRoW2xlbl0gPSAwOwogCWNvcHlfdGVtcGxhdGVzKHBhdGgsIGxlbiwgdGVtcGxhdGVfcGF0aCk7CisKKwkvKgorCSAqIEZpbmQgb3V0IGlmIHdlIGNhbiB0cnVzdCB0aGUgZXhlY3V0YWJsZSBiaXQuCisJICovCisJc2FmZV9jcmVhdGVfZGlyKHBhdGgpOworCXN0cmNweShwYXRoICsgbGVuLCAiY29uZmlnIik7CisJaWYgKGFjY2VzcyhwYXRoLCBSX09LKSA8IDApIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgY29udGVudHNbXSA9CisJCQkiI1xuIgorCQkJIiMgVGhpcyBpcyB0aGUgY29uZmlnIGZpbGVcbiIKKwkJCSIjXG4iCisJCQkiXG4iCisJCQkiOyBjb3JlIHZhcmlhYmxlc1xuIgorCQkJIltjb3JlXVxuIgorCQkJIgk7IERvbid0IHRydXN0IGZpbGUgbW9kZXNcbiIKKwkJCSIJZmlsZW1vZGUgPSBmYWxzZVxuIgorCQkJIlxuIjsKKwkJRklMRSAqY29uZmlnID0gZm9wZW4ocGF0aCwgInciKTsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKCFjb25maWcpCisJCQlkaWUoIkNhbiBub3Qgd3JpdGUgdG8gJXM/IiwgcGF0aCk7CisKKwkJZndyaXRlKGNvbnRlbnRzLCBzaXplb2YoY29udGVudHMpLTEsIDEsIGNvbmZpZyk7CisKKwkJZmNsb3NlKGNvbmZpZyk7CisKKwkJaWYgKCFsc3RhdChwYXRoLCAmc3QpKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDI7CisJCQlpZiAoIWNobW9kKHBhdGgsIHN0LnN0X21vZGUgXiBTX0lYVVNSKSAmJgorCQkJCQkhbHN0YXQocGF0aCwgJnN0MikgJiYKKwkJCQkJc3Quc3RfbW9kZSAhPSBzdDIuc3RfbW9kZSkKKwkJCQl1bmxpbmsocGF0aCk7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsICJJZ25vcmluZyBmaWxlIG1vZGVzXG4iKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgaW5pdF9kYl91c2FnZVtdID0KQEAgLTI0NCwxMCArMjgxLDYgQEAKIAltZW1jcHkocGF0aCwgc2hhMV9kaXIsIGxlbik7CiAKIAlzYWZlX2NyZWF0ZV9kaXIoc2hhMV9kaXIpOwotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQlzcHJpbnRmKHBhdGgrbGVuLCAiLyUwMngiLCBpKTsKLQkJc2FmZV9jcmVhdGVfZGlyKHBhdGgpOwotCX0KIAlzdHJjcHkocGF0aCtsZW4sICIvcGFjayIpOwogCXNhZmVfY3JlYXRlX2RpcihwYXRoKTsKIAlzdHJjcHkocGF0aCtsZW4sICIvaW5mbyIpOwpkaWZmIC0tZ2l0IGEvbG9jYWwtZmV0Y2guYyBiL2xvY2FsLWZldGNoLmMKaW5kZXggYTU3Mzg2Yy4uMDkzMTEwOSAxMDA2NDQKLS0tIGEvbG9jYWwtZmV0Y2guYworKysgYi9sb2NhbC1mZXRjaC5jCkBAIC01Miw5ICs1MiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcHlfZmlsZShjb25zdCBjaGFyICpzb3VyY2UsIGNvbnN0IGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKmhleCwKK3N0YXRpYyBpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKnNvdXJjZSwgY2hhciAqZGVzdCwgY29uc3QgY2hhciAqaGV4LAogCQkgICAgIGludCB3YXJuX2lmX25vdF9leGlzdHMpCiB7CisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhkZXN0KTsKIAlpZiAodXNlX2xpbmspIHsKIAkJaWYgKCFsaW5rKHNvdXJjZSwgZGVzdCkpIHsKIAkJCXB1bGxfc2F5KCJsaW5rICVzXG4iLCBoZXgpOwpAQCAtODIsMzEgKzgzLDIzIEBACiAJCX0KIAl9CiAJaWYgKHVzZV9maWxlY29weSkgewotCQlpbnQgaWZkLCBvZmQsIHN0YXR1czsKLQkJc3RydWN0IHN0YXQgc3Q7Ci0JCXZvaWQgKm1hcDsKKwkJaW50IGlmZCwgb2ZkLCBzdGF0dXMgPSAwOworCiAJCWlmZCA9IG9wZW4oc291cmNlLCBPX1JET05MWSk7Ci0JCWlmIChpZmQgPCAwIHx8IGZzdGF0KGlmZCwgJnN0KSA8IDApIHsKLQkJCWludCBlcnIgPSBlcnJubzsKLQkJCWlmIChpZmQgPj0gMCkKLQkJCQljbG9zZShpZmQpOwotCQkJaWYgKCF3YXJuX2lmX25vdF9leGlzdHMgJiYgZXJyID09IEVOT0VOVCkKKwkJaWYgKGlmZCA8IDApIHsKKwkJCWlmICghd2Fybl9pZl9ub3RfZXhpc3RzICYmIGVycm5vID09IEVOT0VOVCkKIAkJCQlyZXR1cm4gLTE7CiAJCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBvcGVuICVzXG4iLCBzb3VyY2UpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCW1hcCA9IG1tYXAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgaWZkLCAwKTsKLQkJY2xvc2UoaWZkKTsKLQkJaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBtbWFwICVzXG4iLCBzb3VyY2UpOworCQlvZmQgPSBvcGVuKGRlc3QsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJCWlmIChvZmQgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBvcGVuICVzXG4iLCBkZXN0KTsKKwkJCWNsb3NlKGlmZCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJb2ZkID0gb3BlbihkZXN0LCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOwotCQlzdGF0dXMgPSAoKG9mZCA8IDApIHx8Ci0JCQkgICh3cml0ZShvZmQsIG1hcCwgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkpOwotCQltdW5tYXAobWFwLCBzdC5zdF9zaXplKTsKLQkJaWYgKG9mZCA+PSAwKQotCQkJY2xvc2Uob2ZkKTsKKwkJc3RhdHVzID0gY29weV9mZChpZmQsIG9mZCk7CisJCWNsb3NlKG9mZCk7CiAJCWlmIChzdGF0dXMpCiAJCQlmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCB3cml0ZSAlc1xuIiwgZGVzdCk7CiAJCWVsc2UKQEAgLTE1MCw3ICsxNDMsNyBAQAogCXN0YXRpYyBpbnQgb2JqZWN0X25hbWVfc3RhcnQgPSAtMTsKIAlzdGF0aWMgY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CiAJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7Ci0JY29uc3QgY2hhciAqZGVzdF9maWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOworCWNoYXIgKmRlc3RfZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKIAogIAlpZiAob2JqZWN0X25hbWVfc3RhcnQgPCAwKSB7CiAJCXN0cmNweShmaWxlbmFtZSwgcGF0aCk7IC8qIGUuZy4gZ2l0LmdpdCAqLwpAQCAtMTY2LDcgKzE1OSwxMCBAQAogCiBpbnQgZmV0Y2godW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlyZXR1cm4gZmV0Y2hfZmlsZShzaGExKSAmJiBmZXRjaF9wYWNrKHNoYTEpOworCWlmIChoYXNfc2hhMV9maWxlKHNoYTEpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBmZXRjaF9maWxlKHNoYTEpICYmIGZldGNoX3BhY2soc2hhMSk7CiB9CiAKIGludCBmZXRjaF9yZWYoY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKQpkaWZmIC0tZ2l0IGEvbHMtZmlsZXMuYyBiL2xzLWZpbGVzLmMKaW5kZXggZjQ3MTE0YS4uMzA4NWIyZiAxMDA2NDQKLS0tIGEvbHMtZmlsZXMuYworKysgYi9scy1maWxlcy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGZubWF0Y2guaD4KIAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogc3RhdGljIGludCBzaG93X2RlbGV0ZWQgPSAwOwogc3RhdGljIGludCBzaG93X2NhY2hlZCA9IDA7CkBAIC0zNDIsNyArMzQzLDkgQEAKIAlpZiAocGF0aHNwZWMgJiYgIW1hdGNoKHBhdGhzcGVjLCBlbnQtPm5hbWUsIGxlbikpCiAJCXJldHVybjsKIAotCXByaW50ZigiJXMlcyVjIiwgdGFnLCBlbnQtPm5hbWUgKyBvZmZzZXQsIGxpbmVfdGVybWluYXRvcik7CisJZnB1dHModGFnLCBzdGRvdXQpOworCXdyaXRlX25hbWVfcXVvdGVkKCIiLCBlbnQtPm5hbWUgKyBvZmZzZXQsIGxpbmVfdGVybWluYXRvciwgc3Rkb3V0KTsKKwlwdXRjaGFyKGxpbmVfdGVybWluYXRvcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3dfa2lsbGVkX2ZpbGVzKHZvaWQpCkBAIC00MDUsMTUgKzQwOCwyMCBAQAogCWlmIChwYXRoc3BlYyAmJiAhbWF0Y2gocGF0aHNwZWMsIGNlLT5uYW1lLCBsZW4pKQogCQlyZXR1cm47CiAKLQlpZiAoIXNob3dfc3RhZ2UpCi0JCXByaW50ZigiJXMlcyVjIiwgdGFnLCBjZS0+bmFtZSArIG9mZnNldCwgbGluZV90ZXJtaW5hdG9yKTsKLQllbHNlCi0JCXByaW50ZigiJXMlMDZvICVzICVkXHQlcyVjIiwKKwlpZiAoIXNob3dfc3RhZ2UpIHsKKwkJZnB1dHModGFnLCBzdGRvdXQpOworCQl3cml0ZV9uYW1lX3F1b3RlZCgiIiwgY2UtPm5hbWUgKyBvZmZzZXQsIGxpbmVfdGVybWluYXRvciwgc3Rkb3V0KTsKKwkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0b3IpOworCX0KKwllbHNlIHsKKwkJcHJpbnRmKCIlcyUwNm8gJXMgJWRcdCIsCiAJCSAgICAgICB0YWcsCiAJCSAgICAgICBudG9obChjZS0+Y2VfbW9kZSksCiAJCSAgICAgICBzaGExX3RvX2hleChjZS0+c2hhMSksCi0JCSAgICAgICBjZV9zdGFnZShjZSksCi0JCSAgICAgICBjZS0+bmFtZSArIG9mZnNldCwgbGluZV90ZXJtaW5hdG9yKTsgCisJCSAgICAgICBjZV9zdGFnZShjZSkpOworCQl3cml0ZV9uYW1lX3F1b3RlZCgiIiwgY2UtPm5hbWUgKyBvZmZzZXQsIGxpbmVfdGVybWluYXRvciwgc3Rkb3V0KTsKKwkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0b3IpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2hvd19maWxlcyh2b2lkKQpkaWZmIC0tZ2l0IGEvbHMtdHJlZS5jIGIvbHMtdHJlZS5jCmluZGV4IGRkNjQyZTAuLmQ5ZjE1ZTMgMTAwNjQ0Ci0tLSBhL2xzLXRyZWUuYworKysgYi9scy10cmVlLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJibG9iLmgiCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAKIHN0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CiAjZGVmaW5lIExTX1JFQ1VSU0lWRSAxCkBAIC0xNTYsOCArMTU3LDkgQEAKIAlpbnQgZXJyID0gMDsgCiAKIAlpZiAoZSAhPSAmcm9vdF9lbnRyeSkgewotCQlwcmludGYoIiUwNm8gJXMgJXMJJXMlcyIsIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksCi0JCSAgICAgICBlbnRyeV9oZXgoZSksIHBhdGhidWYsIGUtPm5hbWUpOworCQlwcmludGYoIiUwNm8gJXMgJXMJIiwKKwkJICAgICAgIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksIGVudHJ5X2hleChlKSk7CisJCXdyaXRlX25hbWVfcXVvdGVkKHBhdGhidWYsIGUtPm5hbWUsIGxpbmVfdGVybWluYXRpb24sIHN0ZG91dCk7CiAJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CiAJfQogCmRpZmYgLS1naXQgYS9tYWlsc3BsaXQuYyBiL21haWxzcGxpdC5jCmluZGV4IDdhZmVhMWEuLjE4OWY0ZWQgMTAwNjQ0Ci0tLSBhL21haWxzcGxpdC5jCisrKyBiL21haWxzcGxpdC5jCkBAIC05LDMwICs5LDEzIEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImNhY2hlLmgiCiAKLXN0YXRpYyBpbnQgdXNhZ2Uodm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIm1haWxzcGxpdCA8bWJveD4gPGRpcmVjdG9yeT5cbiIpOwotCWV4aXQoMSk7Ci19Ci0KLXN0YXRpYyBpbnQgbGluZWxlbihjb25zdCBjaGFyICptYXAsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlpbnQgbGVuID0gMCwgYzsKLQotCWRvIHsKLQkJYyA9ICptYXA7Ci0JCW1hcCsrOwotCQlzaXplLS07Ci0JCWxlbisrOwotCX0gd2hpbGUgKHNpemUgJiYgYyAhPSAnXG4nKTsKLQlyZXR1cm4gbGVuOwotfQorc3RhdGljIGNvbnN0IGNoYXIgZ2l0X21haWxzcGxpdF91c2FnZVtdID0KKyJnaXQtbWFpbHNwbGl0IFstZDxwcmVjPl0gWzxtYm94Pl0gPGRpcmVjdG9yeT4iOwogCiBzdGF0aWMgaW50IGlzX2Zyb21fbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQogewpAQCAtNjUsODEgKzQ4LDExMCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2VtYWlsKGNvbnN0IHZvaWQgKm1hcCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworLyogQ291bGQgYmUgYXMgc21hbGwgYXMgNjQsIGVub3VnaCB0byBob2xkIGEgVW5peCAiRnJvbSAiIGxpbmUuICovCitzdGF0aWMgY2hhciBidWZbNDA5Nl07CiAKLQlpZiAoc2l6ZSA8IDYgfHwgbWVtY21wKCJGcm9tICIsIG1hcCwgNSkpCisvKiBDYWxsZWQgd2l0aCB0aGUgZmlyc3QgbGluZSAocG90ZW50aWFsbHkgcGFydGlhbCkKKyAqIGFscmVhZHkgaW4gYnVmW10gLS0gbm9ybWFsbHkgdGhhdCBzaG91bGQgYmVnaW4gd2l0aAorICogdGhlIFVuaXggIkZyb20gIiBsaW5lLiAgV3JpdGUgaXQgaW50byB0aGUgc3BlY2lmaWVkCisgKiBmaWxlLgorICovCitzdGF0aWMgaW50IHNwbGl0X29uZShGSUxFICptYm94LCBjb25zdCBjaGFyICpuYW1lKQoreworCUZJTEUgKm91dHB1dCA9IE5VTEw7CisJaW50IGxlbiA9IHN0cmxlbihidWYpOworCWludCBmZDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghaXNfZnJvbV9saW5lKGJ1ZiwgbGVuKSkKIAkJZ290byBjb3JydXB0OwogCi0JLyogTWFrZSBzdXJlIHdlIGRvbid0IHRyaWdnZXIgb24gdGhpcyBmaXJzdCBsaW5lICovCi0JbWFwKys7IHNpemUtLTsgb2Zmc2V0PTE7CisJZmQgPSBvcGVuKG5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAlcyIsIG5hbWUpOworCW91dHB1dCA9IGZkb3BlbihmZCwgInciKTsKIAotCS8qCi0JICogU2VhcmNoIGZvciBhIGxpbmUgYmVnaW5uaW5nIHdpdGggIkZyb20gIiwgYW5kIAotCSAqIGhhdmluZyBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgZGF0ZSBmb3JtYXQuCisJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKKwkgKiAiRnJvbSAiIGFuZCBoYXZpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGRhdGUgZm9ybWF0LgogCSAqLwotCWRvIHsKLQkJaW50IGxlbiA9IGxpbmVsZW4obWFwLCBzaXplKTsKLQkJaWYgKGlzX2Zyb21fbGluZShtYXAsIGxlbikpCi0JCQlyZXR1cm4gb2Zmc2V0OwotCQltYXAgKz0gbGVuOwotCQlzaXplIC09IGxlbjsKLQkJb2Zmc2V0ICs9IGxlbjsKLQl9IHdoaWxlIChzaXplKTsKLQlyZXR1cm4gb2Zmc2V0OworCWZvciAoOzspIHsKKwkJaW50IGlzX3BhcnRpYWwgPSAoYnVmW2xlbi0xXSAhPSAnXG4nKTsKIAotY29ycnVwdDoKKwkJaWYgKGZwdXRzKGJ1Ziwgb3V0cHV0KSA9PSBFT0YpCisJCQlkaWUoImNhbm5vdCB3cml0ZSBvdXRwdXQiKTsKKworCQlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgbWJveCkgPT0gTlVMTCkgeworCQkJaWYgKGZlb2YobWJveCkpIHsKKwkJCQlzdGF0dXMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJZGllKCJjYW5ub3QgcmVhZCBtYm94Iik7CisJCX0KKwkJbGVuID0gc3RybGVuKGJ1Zik7CisJCWlmICghaXNfcGFydGlhbCAmJiBpc19mcm9tX2xpbmUoYnVmLCBsZW4pKQorCQkJYnJlYWs7IC8qIGRvbmUgd2l0aCBvbmUgbWVzc2FnZSAqLworCX0KKwlmY2xvc2Uob3V0cHV0KTsKKwlyZXR1cm4gc3RhdHVzOworCisgY29ycnVwdDoKKwlpZiAob3V0cHV0KQorCQlmY2xvc2Uob3V0cHV0KTsKKwl1bmxpbmsobmFtZSk7CiAJZnByaW50ZihzdGRlcnIsICJjb3JydXB0IG1haWxib3hcbiIpOwogCWV4aXQoMSk7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlpbnQgZmQsIG5yOwotCXN0cnVjdCBzdGF0IHN0OwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl2b2lkICptYXA7CisJaW50IGksIG5yLCBucl9wcmVjID0gNDsKKwlGSUxFICptYm94ID0gTlVMTDsKIAotCWlmIChhcmdjICE9IDMpCi0JCXVzYWdlKCk7Ci0JZmQgPSBvcGVuKGFyZ3ZbMV0sIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKSB7Ci0JCXBlcnJvcihhcmd2WzFdKTsKLQkJZXhpdCgxKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJLyogZG8gZmxhZ3MgaGVyZSAqLworCQlpZiAoIXN0cm5jbXAoYXJnLCAiLWQiLCAyKSkgeworCQkJbnJfcHJlYyA9IHN0cnRvbChhcmcgKyAyLCBOVUxMLCAxMCk7CisJCQlpZiAobnJfcHJlYyA8IDMgfHwgMTAgPD0gbnJfcHJlYykKKwkJCQl1c2FnZShnaXRfbWFpbHNwbGl0X3VzYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CiAJfQotCWlmIChjaGRpcihhcmd2WzJdKSA8IDApCi0JCXVzYWdlKCk7Ci0JaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgewotCQlwZXJyb3IoInN0YXQiKTsKLQkJZXhpdCgxKTsKKworCS8qIEVpdGhlciBvbmUgcmVtYWluaW5nIGFyZyAoZGlyKSwgb3IgdHdvIChtYm94IGFuZCBkaXIpICovCisJc3dpdGNoIChhcmdjIC0gaSkgeworCWNhc2UgMToKKwkJbWJveCA9IHN0ZGluOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmICgobWJveCA9IGZvcGVuKGFyZ3ZbaV0sICJyIikpID09IE5VTEwpCisJCQlkaWUoImNhbm5vdCBvcGVuIG1ib3ggJXMgZm9yIHJlYWRpbmciLCBhcmd2W2ldKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXNhZ2UoZ2l0X21haWxzcGxpdF91c2FnZSk7CiAJfQotCXNpemUgPSBzdC5zdF9zaXplOwotCW1hcCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOwotCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotCQlwZXJyb3IoIm1tYXAiKTsKLQkJY2xvc2UoZmQpOwotCQlleGl0KDEpOwotCX0KLQljbG9zZShmZCk7CisJaWYgKGNoZGlyKGFyZ3ZbYXJnYyAtIDFdKSA8IDApCisJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOworCiAJbnIgPSAwOwotCWRvIHsKKwlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgbWJveCkgPT0gTlVMTCkKKwkJZGllKCJjYW5ub3QgcmVhZCBtYm94Iik7CisKKwlmb3IgKDs7KSB7CiAJCWNoYXIgbmFtZVsxMF07Ci0JCXVuc2lnbmVkIGxvbmcgbGVuID0gcGFyc2VfZW1haWwobWFwLCBzaXplKTsKLQkJYXNzZXJ0KGxlbiA8PSBzaXplKTsKLQkJc3ByaW50ZihuYW1lLCAiJTA0ZCIsICsrbnIpOwotCQlmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQkJaWYgKGZkIDwgMCkgewotCQkJcGVycm9yKG5hbWUpOworCisJCXNwcmludGYobmFtZSwgIiUwKmQiLCBucl9wcmVjLCArK25yKTsKKwkJc3dpdGNoIChzcGxpdF9vbmUobWJveCwgbmFtZSkpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXByaW50ZigiJWRcbiIsIG5yKTsKKwkJCXJldHVybiAwOworCQlkZWZhdWx0OgogCQkJZXhpdCgxKTsKIAkJfQotCQlpZiAod3JpdGUoZmQsIG1hcCwgbGVuKSAhPSBsZW4pIHsKLQkJCXBlcnJvcigid3JpdGUiKTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQkJY2xvc2UoZmQpOwotCQltYXAgKz0gbGVuOwotCQlzaXplIC09IGxlbjsKLQl9IHdoaWxlIChzaXplID4gMCk7Ci0JcmV0dXJuIDA7CisJfQogfQpkaWZmIC0tZ2l0IGEvbmFtZS1yZXYuYyBiL25hbWUtcmV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmZWNkZgotLS0gL2Rldi9udWxsCisrKyBiL25hbWUtcmV2LmMKQEAgLTAsMCArMSwyNDYgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9yZXZfdXNhZ2VbXSA9CisJImdpdC1uYW1lLXJldiBbLS10YWdzXSAoIC0tYWxsIHwgLS1zdGRpbiB8IGNvbW1pdGlzaCBbY29tbWl0aXNoLi4uXSApXG4iOworCit0eXBlZGVmIHN0cnVjdCByZXZfbmFtZSB7CisJY29uc3QgY2hhciAqdGlwX25hbWU7CisJaW50IG1lcmdlX3RyYXZlcnNhbHM7CisJaW50IGdlbmVyYXRpb247Cit9IHJldl9uYW1lOworCitzdGF0aWMgbG9uZyBjdXRvZmYgPSBMT05HX01BWDsKKworc3RhdGljIHZvaWQgbmFtZV9yZXYoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQljb25zdCBjaGFyICp0aXBfbmFtZSwgaW50IG1lcmdlX3RyYXZlcnNhbHMsIGludCBnZW5lcmF0aW9uLAorCQlpbnQgZGVyZWYpCit7CisJc3RydWN0IHJldl9uYW1lICpuYW1lID0gKHN0cnVjdCByZXZfbmFtZSAqKWNvbW1pdC0+b2JqZWN0LnV0aWw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCBwYXJlbnRfbnVtYmVyID0gMDsKKworCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKworCWlmIChjb21taXQtPmRhdGUgPCBjdXRvZmYpCisJCXJldHVybjsKKworCWlmIChkZXJlZikgeworCQljaGFyICpuZXdfbmFtZSA9IHhtYWxsb2Moc3RybGVuKHRpcF9uYW1lKSszKTsKKwkJc3RyY3B5KG5ld19uYW1lLCB0aXBfbmFtZSk7CisJCXN0cmNhdChuZXdfbmFtZSwgIl4wIik7CisJCXRpcF9uYW1lID0gbmV3X25hbWU7CisKKwkJaWYgKGdlbmVyYXRpb24pCisJCQlkaWUoImdlbmVyYXRpb246ICVkLCBidXQgZGVyZWY/IiwgZ2VuZXJhdGlvbik7CisJfQorCisJaWYgKG5hbWUgPT0gTlVMTCkgeworCQluYW1lID0geG1hbGxvYyhzaXplb2YocmV2X25hbWUpKTsKKwkJY29tbWl0LT5vYmplY3QudXRpbCA9IG5hbWU7CisJCWdvdG8gY29weV9kYXRhOworCX0gZWxzZSBpZiAobmFtZS0+bWVyZ2VfdHJhdmVyc2FscyA+IG1lcmdlX3RyYXZlcnNhbHMgfHwKKwkJCShuYW1lLT5tZXJnZV90cmF2ZXJzYWxzID09IG1lcmdlX3RyYXZlcnNhbHMgJiYKKwkJCSBuYW1lLT5nZW5lcmF0aW9uID4gZ2VuZXJhdGlvbikpIHsKK2NvcHlfZGF0YToKKwkJbmFtZS0+dGlwX25hbWUgPSB0aXBfbmFtZTsKKwkJbmFtZS0+bWVyZ2VfdHJhdmVyc2FscyA9IG1lcmdlX3RyYXZlcnNhbHM7CisJCW5hbWUtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCQlwYXJlbnRzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQsIHBhcmVudF9udW1iZXIrKykgeworCQlpZiAocGFyZW50X251bWJlciA+IDApIHsKKwkJCWNoYXIgKm5ld19uYW1lID0geG1hbGxvYyhzdHJsZW4odGlwX25hbWUpKzgpOworCisJCQlpZiAoZ2VuZXJhdGlvbiA+IDApCisJCQkJc3ByaW50ZihuZXdfbmFtZSwgIiVzfiVkXiVkIiwgdGlwX25hbWUsCisJCQkJCQlnZW5lcmF0aW9uLCBwYXJlbnRfbnVtYmVyKTsKKwkJCWVsc2UKKwkJCQlzcHJpbnRmKG5ld19uYW1lLCAiJXNeJWQiLCB0aXBfbmFtZSwgcGFyZW50X251bWJlcik7CisKKwkJCW5hbWVfcmV2KHBhcmVudHMtPml0ZW0sIG5ld19uYW1lLAorCQkJCW1lcmdlX3RyYXZlcnNhbHMgKyAxICwgMCwgMCk7CisJCX0gZWxzZSB7CisJCQluYW1lX3JldihwYXJlbnRzLT5pdGVtLCB0aXBfbmFtZSwgbWVyZ2VfdHJhdmVyc2FscywKKwkJCQlnZW5lcmF0aW9uICsgMSwgMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgdGFnc19vbmx5ID0gMDsKKworc3RhdGljIGludCBuYW1lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJaW50IGRlcmVmID0gMDsKKworCWlmICh0YWdzX29ubHkgJiYgc3RybmNtcChwYXRoLCAicmVmcy90YWdzLyIsIDEwKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAobyAmJiBvLT50eXBlID09IHRhZ190eXBlKSB7CisJCXN0cnVjdCB0YWcgKnQgPSAoc3RydWN0IHRhZyAqKSBvOworCQlpZiAoIXQtPnRhZ2dlZCkKKwkJCWJyZWFrOyAvKiBicm9rZW4gcmVwb3NpdG9yeSAqLworCQlvID0gcGFyc2Vfb2JqZWN0KHQtPnRhZ2dlZC0+c2hhMSk7CisJCWRlcmVmID0gMTsKKwl9CisJaWYgKG8gJiYgby0+dHlwZSA9PSBjb21taXRfdHlwZSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJd2hpbGUgKChwID0gc3RyY2hyKHBhdGgsICcvJykpKQorCQkJcGF0aCA9IHArMTsKKworCQluYW1lX3Jldihjb21taXQsIHN0cmR1cChwYXRoKSwgMCwgMCwgZGVyZWYpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJucyBhIHN0YXRpYyBidWZmZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyKiBnZXRfcmV2X25hbWUoc3RydWN0IG9iamVjdCAqbykKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CisJc3RydWN0IHJldl9uYW1lICpuID0gKHN0cnVjdCByZXZfbmFtZSAqKW8tPnV0aWw7CisJaWYgKCFuKQorCQlyZXR1cm4gInVuZGVmaW5lZCI7CisKKwlpZiAoIW4tPmdlbmVyYXRpb24pCisJCXJldHVybiBuLT50aXBfbmFtZTsKKworCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlc34lZCIsIG4tPnRpcF9uYW1lLCBuLT5nZW5lcmF0aW9uKTsKKworCXJldHVybiBidWZmZXI7Cit9CisJCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IG9iamVjdF9saXN0ICpyZXZzID0gTlVMTDsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKip3YWxrZXIgPSAmcmV2czsKKwlpbnQgYXNfaXMgPSAwLCBhbGwgPSAwLCB0cmFuc2Zvcm1fc3RkaW4gPSAwOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJaWYgKGFyZ2MgPCAyKQorCQl1c2FnZShuYW1lX3Jldl91c2FnZSk7CisKKwlmb3IgKC0tYXJnYywgKythcmd2OyBhcmdjOyAtLWFyZ2MsICsrYXJndikgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJaWYgKCFhc19pcyAmJiAoKmFyZ3YpWzBdID09ICctJykgeworCQkJaWYgKCFzdHJjbXAoKmFyZ3YsICItLSIpKSB7CisJCQkJYXNfaXMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICghc3RyY21wKCphcmd2LCAiLS10YWdzIikpIHsKKwkJCQl0YWdzX29ubHkgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICghc3RyY21wKCphcmd2LCAiLS1hbGwiKSkgeworCQkJCWlmIChhcmdjID4gMSkKKwkJCQkJZGllKCJTcGVjaWZ5IGVpdGhlciBhIGxpc3QsIG9yIC0tYWxsLCBub3QgYm90aCEiKTsKKwkJCQlhbGwgPSAxOworCQkJCWN1dG9mZiA9IDA7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsICItLXN0ZGluIikpIHsKKwkJCQlpZiAoYXJnYyA+IDEpCisJCQkJCWRpZSgiU3BlY2lmeSBlaXRoZXIgYSBsaXN0LCBvciAtLXN0ZGluLCBub3QgYm90aCEiKTsKKwkJCQl0cmFuc2Zvcm1fc3RkaW4gPSAxOworCQkJCWN1dG9mZiA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQl1c2FnZShuYW1lX3Jldl91c2FnZSk7CisJCX0KKworCQlpZiAoZ2V0X3NoYTEoKmFyZ3YsIHNoYTEpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgc2hhMSBmb3IgJXMuIFNraXBwaW5nLlxuIiwKKwkJCQkJKmFyZ3YpOworCQkJY29udGludWU7CisJCX0KKworCQlvID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSk7CisJCWlmICghbyB8fCBvLT50eXBlICE9IGNvbW1pdF90eXBlKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgY29tbWl0IGZvciAlcy4gU2tpcHBpbmcuXG4iLAorCQkJCQkqYXJndik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopbzsKKworCQlpZiAoY3V0b2ZmID4gY29tbWl0LT5kYXRlKQorCQkJY3V0b2ZmID0gY29tbWl0LT5kYXRlOworCisJCW9iamVjdF9saXN0X2FwcGVuZCgoc3RydWN0IG9iamVjdCAqKWNvbW1pdCwgd2Fsa2VyKTsKKwkJKCp3YWxrZXIpLT5uYW1lID0gKmFyZ3Y7CisJCXdhbGtlciA9ICYoKCp3YWxrZXIpLT5uZXh0KTsKKwl9CisKKwlmb3JfZWFjaF9yZWYobmFtZV9yZWYpOworCisJaWYgKHRyYW5zZm9ybV9zdGRpbikgeworCQljaGFyIGJ1ZmZlclsyMDQ4XTsKKwkJY2hhciAqcCwgKnBfc3RhcnQ7CisKKwkJd2hpbGUgKCFmZW9mKHN0ZGluKSkgeworCQkJaW50IGZvcnR5ID0gMDsKKwkJCXAgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbik7CisJCQlpZiAoIXApCisJCQkJYnJlYWs7CisKKwkJCWZvciAocF9zdGFydCA9IHA7ICpwOyBwKyspIHsKKyNkZWZpbmUgaXNoZXgoeCkgKGlzZGlnaXQoKHgpKSB8fCAoKHgpID49ICdhJyAmJiAoeCkgPD0gJ2YnKSkKKwkJCQlpZiAoIWlzaGV4KCpwKSkKKwkJCQkJZm9ydHkgPSAwOworCQkJCWVsc2UgaWYgKCsrZm9ydHkgPT0gNDAgJiYKKwkJCQkJCSFpc2hleCgqKHArMSkpKSB7CisJCQkJCXVuc2lnbmVkIGNoYXIgc2hhMVs0MF07CisJCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSAidW5kZWZpbmVkIjsKKwkJCQkJY2hhciBjID0gKihwKzEpOworCisJCQkJCWZvcnR5ID0gMDsKKworCQkJCQkqKHArMSkgPSAwOworCQkJCQlpZiAoIWdldF9zaGExKHAgLSAzOSwgc2hhMSkpIHsKKwkJCQkJCXN0cnVjdCBvYmplY3QgKm8gPQorCQkJCQkJCWxvb2t1cF9vYmplY3Qoc2hhMSk7CisJCQkJCQlpZiAobykKKwkJCQkJCQluYW1lID0gZ2V0X3Jldl9uYW1lKG8pOworCQkJCQl9CisJCQkJCSoocCsxKSA9IGM7CisKKwkJCQkJaWYgKCFzdHJjbXAobmFtZSwgInVuZGVmaW5lZCIpKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJZndyaXRlKHBfc3RhcnQsIHAgLSBwX3N0YXJ0LCAxLCBzdGRvdXQpOworCQkJCQlmcHV0YygnKCcsIHN0ZG91dCk7CisJCQkJCWZwdXRzKG5hbWUsIHN0ZG91dCk7CisJCQkJCWZwdXRjKCcpJywgc3Rkb3V0KTsKKwkJCQkJcF9zdGFydCA9IHAgKyAxOworCQkJCX0KKwkJCX0KKworCQkJLyogZmx1c2ggKi8KKwkJCWlmIChwX3N0YXJ0ICE9IHApCisJCQkJZndyaXRlKHBfc3RhcnQsIHAgLSBwX3N0YXJ0LCAxLCBzdGRvdXQpOworCQl9CisJfSBlbHNlIGlmIChhbGwpIHsKKwkJZXh0ZXJuIHN0cnVjdCBvYmplY3QgKipvYmpzOworCQlleHRlcm4gaW50IG5yX29ianM7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBucl9vYmpzOyBpKyspCisJCQlwcmludGYoIiVzICVzXG4iLCBzaGExX3RvX2hleChvYmpzW2ldLT5zaGExKSwKKwkJCQkJZ2V0X3Jldl9uYW1lKG9ianNbaV0pKTsKKwl9IGVsc2UKKwkJZm9yICggOyByZXZzOyByZXZzID0gcmV2cy0+bmV4dCkKKwkJCXByaW50ZigiJXMgJXNcbiIsIHJldnMtPm5hbWUsIGdldF9yZXZfbmFtZShyZXZzLT5pdGVtKSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmMgYi9wYWNrLW9iamVjdHMuYwppbmRleCAzZDYyMjc4Li40ZTk0MWU3IDEwMDY0NAotLS0gYS9wYWNrLW9iamVjdHMuYworKysgYi9wYWNrLW9iamVjdHMuYwpAQCAtMSwxMSArMSwxMCBAQAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJkZWx0YS5oIgogI2luY2x1ZGUgInBhY2suaCIKICNpbmNsdWRlICJjc3VtLWZpbGUuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgcGFja191c2FnZVtdID0gImdpdC1wYWNrLW9iamVjdHMgWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSB7LS1zdGRvdXQgfCBiYXNlLW5hbWV9IDwgb2JqZWN0LWxpc3QiOworc3RhdGljIGNvbnN0IGNoYXIgcGFja191c2FnZVtdID0gImdpdC1wYWNrLW9iamVjdHMgWy0tbG9jYWxdIFstLWluY3JlbWVudGFsXSBbLS13aW5kb3c9Tl0gWy0tZGVwdGg9Tl0gey0tc3Rkb3V0IHwgYmFzZS1uYW1lfSA8IG9iamVjdC1saXN0IjsKIAogc3RydWN0IG9iamVjdF9lbnRyeSB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTIwLDYgKzE5LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgb2JqZWN0X2xpc3Rfc2hhMVsyMF07CiBzdGF0aWMgaW50IG5vbl9lbXB0eSA9IDA7CitzdGF0aWMgaW50IGxvY2FsID0gMDsKIHN0YXRpYyBpbnQgaW5jcmVtZW50YWwgPSAwOwogc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKipzb3J0ZWRfYnlfc2hhLCAqKnNvcnRlZF9ieV90eXBlOwogc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHMgPSBOVUxMOwpAQCAtMTk1LDggKzE5NSwyMCBAQAogCXVuc2lnbmVkIGludCBpZHggPSBucl9vYmplY3RzOwogCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OwogCi0JaWYgKGluY3JlbWVudGFsICYmIGhhc19zaGExX3BhY2soc2hhMSkpCi0JCXJldHVybiAwOworCWlmIChpbmNyZW1lbnRhbCB8fCBsb2NhbCkgeworCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IHBhY2tfZW50cnkgZTsKKworCQkJaWYgKGZpbmRfcGFja19lbnRyeV9vbmUoc2hhMSwgJmUsIHApKSB7CisJCQkJaWYgKGluY3JlbWVudGFsKQorCQkJCQlyZXR1cm4gMDsKKwkJCQlpZiAobG9jYWwgJiYgIXAtPnBhY2tfbG9jYWwpCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQogCiAJaWYgKGlkeCA+PSBucl9hbGxvYykgewogCQl1bnNpZ25lZCBpbnQgbmVlZGVkID0gKGlkeCArIDEwMjQpICogMyAvIDI7CkBAIC0zODgsMTEgKzQwMCw3NyBAQAogCWZyZWUoYXJyYXkpOwogfQogCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2soaW50IHdpbmRvdywgaW50IGRlcHRoKQoreworCWdldF9vYmplY3RfZGV0YWlscygpOworCisJZnByaW50ZihzdGRlcnIsICJQYWNraW5nICVkIG9iamVjdHNcbiIsIG5yX29iamVjdHMpOworCisJc29ydGVkX2J5X3R5cGUgPSBjcmVhdGVfc29ydGVkX2xpc3QodHlwZV9zaXplX3NvcnQpOworCWlmICh3aW5kb3cgJiYgZGVwdGgpCisJCWZpbmRfZGVsdGFzKHNvcnRlZF9ieV90eXBlLCB3aW5kb3crMSwgZGVwdGgpOworCXdyaXRlX3BhY2tfZmlsZSgpOworfQorCitzdGF0aWMgaW50IHJldXNlX2NhY2hlZF9wYWNrKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBwYWNrX3RvX3N0ZG91dCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBjYWNoZVtdID0gInBhY2stY2FjaGUvcGFjay0lcy4lcyI7CisJY2hhciAqY2FjaGVkX3BhY2ssICpjYWNoZWRfaWR4OworCWludCBpZmQsIG9mZCwgaWZkX2l4ID0gLTE7CisKKwljYWNoZWRfcGFjayA9IGdpdF9wYXRoKGNhY2hlLCBzaGExX3RvX2hleChzaGExKSwgInBhY2siKTsKKwlpZmQgPSBvcGVuKGNhY2hlZF9wYWNrLCBPX1JET05MWSk7CisJaWYgKGlmZCA8IDApCisJCXJldHVybiAwOworCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkgeworCQljYWNoZWRfaWR4ID0gZ2l0X3BhdGgoY2FjaGUsIHNoYTFfdG9faGV4KHNoYTEpLCAiaWR4Iik7CisJCWlmZF9peCA9IG9wZW4oY2FjaGVkX2lkeCwgT19SRE9OTFkpOworCQlpZiAoaWZkX2l4IDwgMCkgeworCQkJY2xvc2UoaWZkKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZnByaW50ZihzdGRlcnIsICJSZXVzaW5nICVkIG9iamVjdHMgcGFjayAlc1xuIiwgbnJfb2JqZWN0cywKKwkJc2hhMV90b19oZXgoc2hhMSkpOworCisJaWYgKHBhY2tfdG9fc3Rkb3V0KSB7CisJCWlmIChjb3B5X2ZkKGlmZCwgMSkpCisJCQlleGl0KDEpOworCQljbG9zZShpZmQpOworCX0KKwllbHNlIHsKKwkJY2hhciBuYW1lW1BBVEhfTUFYXTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAorCQkJICIlcy0lcy4lcyIsIGJhc2VfbmFtZSwgc2hhMV90b19oZXgoc2hhMSksICJwYWNrIik7CisJCW9mZCA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKKwkJaWYgKG9mZCA8IDApCisJCQlkaWUoInVuYWJsZSB0byBvcGVuICVzICglcykiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlpZiAoY29weV9mZChpZmQsIG9mZCkpCisJCQlleGl0KDEpOworCQljbG9zZShpZmQpOworCisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKKwkJCSAiJXMtJXMuJXMiLCBiYXNlX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpLCAiaWR4Iik7CisJCW9mZCA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKKwkJaWYgKG9mZCA8IDApCisJCQlkaWUoInVuYWJsZSB0byBvcGVuICVzICglcykiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlpZiAoY29weV9mZChpZmRfaXgsIG9mZCkpCisJCQlleGl0KDEpOworCQljbG9zZShpZmRfaXgpOworCQlwdXRzKHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVNIQV9DVFggY3R4OwogCWNoYXIgbGluZVtQQVRIX01BWCArIDIwXTsKIAlpbnQgd2luZG93ID0gMTAsIGRlcHRoID0gMTAsIHBhY2tfdG9fc3Rkb3V0ID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqbGlzdDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKQEAgLTQwMyw2ICs0ODEsMTAgQEAKIAkJCQlub25fZW1wdHkgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoIi0tbG9jYWwiLCBhcmcpKSB7CisJCQkJbG9jYWwgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAoIi0taW5jcmVtZW50YWwiLCBhcmcpKSB7CiAJCQkJaW5jcmVtZW50YWwgPSAxOwogCQkJCWNvbnRpbnVlOwpAQCAtNDM1LDcgKzUxNyw3IEBACiAJaWYgKHBhY2tfdG9fc3Rkb3V0ICE9ICFiYXNlX25hbWUpCiAJCXVzYWdlKHBhY2tfdXNhZ2UpOwogCi0JU0hBMV9Jbml0KCZjdHgpOworCXByZXBhcmVfcGFja2VkX2dpdCgpOwogCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSAhPSBOVUxMKSB7CiAJCXVuc2lnbmVkIGludCBoYXNoOwogCQljaGFyICpwOwpAQCAtNDUxLDI1ICs1MzMsMjggQEAKIAkJCQljb250aW51ZTsKIAkJCWhhc2ggPSBoYXNoICogMTEgKyBjOwogCQl9Ci0JCWlmIChhZGRfb2JqZWN0X2VudHJ5KHNoYTEsIGhhc2gpKQotCQkJU0hBMV9VcGRhdGUoJmN0eCwgc2hhMSwgMjApOworCQlhZGRfb2JqZWN0X2VudHJ5KHNoYTEsIGhhc2gpOwogCX0KLQlTSEExX0ZpbmFsKG9iamVjdF9saXN0X3NoYTEsICZjdHgpOwogCWlmIChub25fZW1wdHkgJiYgIW5yX29iamVjdHMpCiAJCXJldHVybiAwOwotCWdldF9vYmplY3RfZGV0YWlscygpOwotCi0JZnByaW50ZihzdGRlcnIsICJQYWNraW5nICVkIG9iamVjdHNcbiIsIG5yX29iamVjdHMpOwogCiAJc29ydGVkX2J5X3NoYSA9IGNyZWF0ZV9zb3J0ZWRfbGlzdChzaGExX3NvcnQpOwotCXNvcnRlZF9ieV90eXBlID0gY3JlYXRlX3NvcnRlZF9saXN0KHR5cGVfc2l6ZV9zb3J0KTsKLQlpZiAod2luZG93ICYmIGRlcHRoKQotCQlmaW5kX2RlbHRhcyhzb3J0ZWRfYnlfdHlwZSwgd2luZG93KzEsIGRlcHRoKTsKKwlTSEExX0luaXQoJmN0eCk7CisJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9ICpsaXN0Kys7CisJCVNIQTFfVXBkYXRlKCZjdHgsIGVudHJ5LT5zaGExLCAyMCk7CisJfQorCVNIQTFfRmluYWwob2JqZWN0X2xpc3Rfc2hhMSwgJmN0eCk7CiAKLQl3cml0ZV9wYWNrX2ZpbGUoKTsKLQlpZiAoIXBhY2tfdG9fc3Rkb3V0KSB7Ci0JCXdyaXRlX2luZGV4X2ZpbGUoKTsKLQkJcHV0cyhzaGExX3RvX2hleChvYmplY3RfbGlzdF9zaGExKSk7CisJaWYgKHJldXNlX2NhY2hlZF9wYWNrKG9iamVjdF9saXN0X3NoYTEsIHBhY2tfdG9fc3Rkb3V0KSkKKwkJOworCWVsc2UgeworCQlwcmVwYXJlX3BhY2sod2luZG93LCBkZXB0aCk7CisJCWlmICghcGFja190b19zdGRvdXQpIHsKKwkJCXdyaXRlX2luZGV4X2ZpbGUoKTsKKwkJCXB1dHMoc2hhMV90b19oZXgob2JqZWN0X2xpc3Rfc2hhMSkpOworCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvcGF0Y2gtaWQuYyBiL3BhdGNoLWlkLmMKaW5kZXggOTYwZTdjZS4uZWRiYzRhYSAxMDA2NDQKLS0tIGEvcGF0Y2gtaWQuYworKysgYi9wYXRjaC1pZC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSAiY2FjaGUuaCIKIAogc3RhdGljIHZvaWQgZmx1c2hfY3VycmVudF9pZChpbnQgcGF0Y2hsZW4sIHVuc2lnbmVkIGNoYXIgKmlkLCBTSEFfQ1RYICpjKQpkaWZmIC0tZ2l0IGEvcHJ1bmUtcGFja2VkLmMgYi9wcnVuZS1wYWNrZWQuYwppbmRleCA1MzA2ZThlLi4yNjEyM2Y3IDEwMDY0NAotLS0gYS9wcnVuZS1wYWNrZWQuYworKysgYi9wcnVuZS1wYWNrZWQuYwpAQCAtMjYsNiArMjYsOCBAQAogCQllbHNlIGlmICh1bmxpbmsocGF0aG5hbWUpIDwgMCkKIAkJCWVycm9yKCJ1bmFibGUgdG8gdW5saW5rICVzIiwgcGF0aG5hbWUpOwogCX0KKwlwYXRobmFtZVtsZW5dID0gMDsKKwlybWRpcihwYXRobmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKHZvaWQpCkBAIC00Niw3ICs0OCw3IEBACiAJCXNwcmludGYocGF0aG5hbWUgKyBsZW4sICIlMDJ4LyIsIGkpOwogCQlkID0gb3BlbmRpcihwYXRobmFtZSk7CiAJCWlmICghZCkKLQkJCWRpZSgidW5hYmxlIHRvIG9wZW4gJXMiLCBwYXRobmFtZSk7CisJCQljb250aW51ZTsKIAkJcHJ1bmVfZGlyKGksIGQsIHBhdGhuYW1lLCBsZW4gKyAzKTsKIAkJY2xvc2VkaXIoZCk7CiAJfQpAQCAtNjksNiArNzEsNyBAQAogCQkvKiBIYW5kbGUgYXJndW1lbnRzIGhlcmUgLi4gKi8KIAkJdXNhZ2UocHJ1bmVfcGFja2VkX3VzYWdlKTsKIAl9CisJc3luYygpOwogCXBydW5lX3BhY2tlZF9vYmplY3RzKCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9xdW90ZS5jIGIvcXVvdGUuYwppbmRleCA5MmUwN2YwLi5lNjYyYTdkIDEwMDY0NAotLS0gYS9xdW90ZS5jCisrKyBiL3F1b3RlLmMKQEAgLTIsNDMgKzIsOTUgQEAKICNpbmNsdWRlICJxdW90ZS5oIgogCiAvKiBIZWxwIHRvIGNvcHkgdGhlIHRoaW5nIHByb3Blcmx5IHF1b3RlZCBmb3IgdGhlIHNoZWxsIHNhZmV0eS4KLSAqIGFueSBzaW5nbGUgcXVvdGUgaXMgcmVwbGFjZWQgd2l0aCAnXCcnLCBhbmQgdGhlIGNhbGxlciBpcwotICogZXhwZWN0ZWQgdG8gZW5jbG9zZSB0aGUgcmVzdWx0IHdpdGhpbiBhIHNpbmdsZSBxdW90ZSBwYWlyLgorICogYW55IHNpbmdsZSBxdW90ZSBpcyByZXBsYWNlZCB3aXRoICdcJycsIGFueSBleGNsYW1hdGlvbiBwb2ludAorICogaXMgcmVwbGFjZWQgd2l0aCAnXCEnLCBhbmQgdGhlIHdob2xlIHRoaW5nIGlzIGVuY2xvc2VkIGluIGEKICAqCiAgKiBFLmcuCiAgKiAgb3JpZ2luYWwgICAgIHNxX3F1b3RlICAgICByZXN1bHQKICAqICBuYW1lICAgICA9PT4gbmFtZSAgICAgID09PiAnbmFtZScKICAqICBhIGIgICAgICA9PT4gYSBiICAgICAgID09PiAnYSBiJwogICogIGEnYiAgICAgID09PiBhJ1wnJ2IgICAgPT0+ICdhJ1wnJ2InCisgKiAgYSFiICAgICAgPT0+IGEnXCEnYiAgICA9PT4gJ2EnXCEnYicKICAqLwotY2hhciAqc3FfcXVvdGUoY29uc3QgY2hhciAqc3JjKQorI3VuZGVmIEVNSVQKKyNkZWZpbmUgRU1JVCh4KSAoICgrK2xlbiA8IG4pICYmICgqYnArKyA9ICh4KSkgKQorCitzdGF0aWMgaW5saW5lIGludCBuZWVkX2JzX3F1b3RlKGNoYXIgYykKIHsKLQlzdGF0aWMgY2hhciAqYnVmID0gTlVMTDsKLQlpbnQgY250LCBjOwotCWNvbnN0IGNoYXIgKmNwOwotCWNoYXIgKmJwOworCXJldHVybiAoYyA9PSAnXCcnIHx8IGMgPT0gJyEnKTsKK30KIAotCS8qIGNvdW50IGJ5dGVzIG5lZWRlZCB0byBzdG9yZSB0aGUgcXVvdGVkIHN0cmluZy4gKi8KLQlmb3IgKGNudCA9IDMsIGNwID0gc3JjOyAqY3A7IGNudCsrLCBjcCsrKQotCQlpZiAoKmNwID09ICdcJycpCi0JCQljbnQgKz0gMzsKK3NpemVfdCBzcV9xdW90ZV9idWYoY2hhciAqZHN0LCBzaXplX3QgbiwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgYzsKKwljaGFyICpicCA9IGRzdDsKKwlzaXplX3QgbGVuID0gMDsKIAotCWJ1ZiA9IHhtYWxsb2MoY250KTsKLQlicCA9IGJ1ZjsKLQkqYnArKyA9ICdcJyc7CisJRU1JVCgnXCcnKTsKIAl3aGlsZSAoKGMgPSAqc3JjKyspKSB7Ci0JCWlmIChjICE9ICdcJycpCi0JCQkqYnArKyA9IGM7Ci0JCWVsc2UgewotCQkJYnAgPSBzdHJjcHkoYnAsICInXFwnJyIpOwotCQkJYnAgKz0gNDsKKwkJaWYgKG5lZWRfYnNfcXVvdGUoYykpIHsKKwkJCUVNSVQoJ1wnJyk7CisJCQlFTUlUKCdcXCcpOworCQkJRU1JVChjKTsKKwkJCUVNSVQoJ1wnJyk7CisJCX0gZWxzZSB7CisJCQlFTUlUKGMpOwogCQl9CiAJfQotCSpicCsrID0gJ1wnJzsKLQkqYnAgPSAwOworCUVNSVQoJ1wnJyk7CisKKwlpZiAoIG4gKQorCQkqYnAgPSAwOworCisJcmV0dXJuIGxlbjsKK30KKworY2hhciAqc3FfcXVvdGUoY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgY250OworCisJY250ID0gc3FfcXVvdGVfYnVmKE5VTEwsIDAsIHNyYykgKyAxOworCWJ1ZiA9IHhtYWxsb2MoY250KTsKKwlzcV9xdW90ZV9idWYoYnVmLCBjbnQsIHNyYyk7CisKIAlyZXR1cm4gYnVmOwogfQogCitjaGFyICpzcV9kZXF1b3RlKGNoYXIgKmFyZykKK3sKKwljaGFyICpkc3QgPSBhcmc7CisJY2hhciAqc3JjID0gYXJnOworCWNoYXIgYzsKKworCWlmICgqc3JjICE9ICdcJycpCisJCXJldHVybiBOVUxMOworCWZvciAoOzspIHsKKwkJYyA9ICorK3NyYzsKKwkJaWYgKCFjKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChjICE9ICdcJycpIHsKKwkJCSpkc3QrKyA9IGM7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBXZSBzdGVwcGVkIG91dCBvZiBzcSAqLworCQlzd2l0Y2ggKCorK3NyYykgeworCQljYXNlICdcMCc6CisJCQkqZHN0ID0gMDsKKwkJCXJldHVybiBhcmc7CisJCWNhc2UgJ1xcJzoKKwkJCWMgPSAqKytzcmM7CisJCQlpZiAobmVlZF9ic19xdW90ZShjKSAmJiAqKytzcmMgPT0gJ1wnJykgeworCQkJCSpkc3QrKyA9IGM7CisJCQkJY29udGludWU7CisJCQl9CisJCS8qIEZhbGx0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KK30KKwogLyoKICAqIEMtc3R5bGUgbmFtZSBxdW90aW5nLgogICoKZGlmZiAtLWdpdCBhL3F1b3RlLmggYi9xdW90ZS5oCmluZGV4IGVhMjI3YmIuLjI0ODZlNmUgMTAwNjQ0Ci0tLSBhL3F1b3RlLmgKKysrIGIvcXVvdGUuaApAQCAtMSwxMSArMSwxMyBAQAogI2lmbmRlZiBRVU9URV9ICiAjZGVmaW5lIFFVT1RFX0gKIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIC8qIEhlbHAgdG8gY29weSB0aGUgdGhpbmcgcHJvcGVybHkgcXVvdGVkIGZvciB0aGUgc2hlbGwgc2FmZXR5LgotICogYW55IHNpbmdsZSBxdW90ZSBpcyByZXBsYWNlZCB3aXRoICdcJycsIGFuZCB0aGUgd2hvbGUgdGhpbmcKLSAqIGlzIGVuY2xvc2VkIGluIGEgc2luZ2xlIHF1b3RlIHBhaXIuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQorICogc2luZ2xlIHF1b3RlIHBhaXIuCiAgKgogICogRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHN5c3RlbSgpIGFzIGFuCiAgKiBhcmd1bWVudDoKQEAgLTIwLDkgKzIyLDIwIEBACiAgKgogICogTm90ZSB0aGF0IHRoZSBhYm92ZSBleGFtcGxlcyBsZWFrIG1lbW9yeSEgIFJlbWVtYmVyIHRvIGZyZWUgcmVzdWx0IGZyb20KICAqIHNxX3F1b3RlKCkgaW4gYSByZWFsIGFwcGxpY2F0aW9uLgorICoKKyAqIHNxX3F1b3RlX2J1ZigpIHdyaXRlcyB0byBhbiBleGlzdGluZyBidWZmZXIgb2Ygc3BlY2lmaWVkIHNpemU7IGl0CisgKiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbgorICogZXhjbHVkaW5nIHRoZSBmaW5hbCBudWxsIHJlZ2FyZGxlc3Mgb2YgdGhlIGJ1ZmZlciBzaXplLgogICovCiAKIGV4dGVybiBjaGFyICpzcV9xdW90ZShjb25zdCBjaGFyICpzcmMpOworZXh0ZXJuIHNpemVfdCBzcV9xdW90ZV9idWYoY2hhciAqZHN0LCBzaXplX3QgbiwgY29uc3QgY2hhciAqc3JjKTsKKworLyogVGhpcyB1bndyYXBzIHdoYXQgc3FfcXVvdGUoKSBwcm9kdWNlcyBpbiBwbGFjZSwgYnV0IHJldHVybnMKKyAqIE5VTEwgaWYgdGhlIGlucHV0IGRvZXMgbm90IGxvb2sgbGlrZSB3aGF0IHNxX3F1b3RlIHdvdWxkIGhhdmUKKyAqIHByb2R1Y2VkLgorICovCitleHRlcm4gY2hhciAqc3FfZGVxdW90ZShjaGFyICopOwogCiBleHRlcm4gaW50IHF1b3RlX2Nfc3R5bGUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqb3V0YnVmLCBGSUxFICpvdXRmcCwKIAkJCSBpbnQgbm9kcSk7CkBAIC0zMCw0ICs0Myw1IEBACiAKIGV4dGVybiB2b2lkIHdyaXRlX25hbWVfcXVvdGVkKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgIGludCBxdW90ZSwgRklMRSAqb3V0KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggZDJhZWJkZC4uNjkzMjczNiAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtMzUsOCArMzUsMTEgQEAKIAlzd2l0Y2ggKG50b2hsKGNlLT5jZV9tb2RlKSAmIFNfSUZNVCkgewogCWNhc2UgU19JRlJFRzoKIAkJY2hhbmdlZCB8PSAhU19JU1JFRyhzdC0+c3RfbW9kZSkgPyBUWVBFX0NIQU5HRUQgOiAwOwotCQkvKiBXZSBjb25zaWRlciBvbmx5IHRoZSBvd25lciB4IGJpdCB0byBiZSByZWxldmFudCBmb3IgIm1vZGUgY2hhbmdlcyIgKi8KLQkJaWYgKDAxMDAgJiAobnRvaGwoY2UtPmNlX21vZGUpIF4gc3QtPnN0X21vZGUpKQorCQkvKiBXZSBjb25zaWRlciBvbmx5IHRoZSBvd25lciB4IGJpdCB0byBiZSByZWxldmFudCBmb3IKKwkJICogIm1vZGUgY2hhbmdlcyIKKwkJICovCisJCWlmICh0cnVzdF9leGVjdXRhYmxlX2JpdCAmJgorCQkgICAgKDAxMDAgJiAobnRvaGwoY2UtPmNlX21vZGUpIF4gc3QtPnN0X21vZGUpKSkKIAkJCWNoYW5nZWQgfD0gTU9ERV9DSEFOR0VEOwogCQlicmVhazsKIAljYXNlIFNfSUZMTks6CkBAIC0zOTIsNyArMzk1LDcgQEAKIAlpbnQgc2tpcF9kZl9jaGVjayA9IG9wdGlvbiAmIEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0s7CiAJcG9zID0gY2FjaGVfbmFtZV9wb3MoY2UtPm5hbWUsIG50b2hzKGNlLT5jZV9mbGFncykpOwogCi0JLyogZXhpc3RpbmcgbWF0Y2g/IEp1c3QgcmVwbGFjZSBpdCAqLworCS8qIGV4aXN0aW5nIG1hdGNoPyBKdXN0IHJlcGxhY2UgaXQuICovCiAJaWYgKHBvcyA+PSAwKSB7CiAJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMTsKIAkJYWN0aXZlX2NhY2hlW3Bvc10gPSBjZTsKQEAgLTQxNSw3ICs0MTgsOCBAQAogCWlmICghb2tfdG9fYWRkKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoIXNraXBfZGZfY2hlY2sgJiYgY2hlY2tfZmlsZV9kaXJlY3RvcnlfY29uZmxpY3QoY2UsIHBvcywgb2tfdG9fcmVwbGFjZSkpIHsKKwlpZiAoIXNraXBfZGZfY2hlY2sgJiYKKwkgICAgY2hlY2tfZmlsZV9kaXJlY3RvcnlfY29uZmxpY3QoY2UsIHBvcywgb2tfdG9fcmVwbGFjZSkpIHsKIAkJaWYgKCFva190b19yZXBsYWNlKQogCQkJcmV0dXJuIC0xOwogCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhjZS0+bmFtZSwgbnRvaHMoY2UtPmNlX2ZsYWdzKSk7CmRpZmYgLS1naXQgYS9yZWFkLXRyZWUuYyBiL3JlYWQtdHJlZS5jCmluZGV4IDVmZGY1OGQuLjZhNDU2YWUgMTAwNjQ0Ci0tLSBhL3JlYWQtdHJlZS5jCisrKyBiL3JlYWQtdHJlZS5jCkBAIC0yMzcsNiArMjM3LDM1IEBACiAJICAgIGNlLT5uYW1lKTsKIH0KIAorLyogVW5saW5rIHRoZSBsYXN0IGNvbXBvbmVudCBhbmQgYXR0ZW1wdCB0byByZW1vdmUgbGVhZGluZworICogZGlyZWN0b3JpZXMsIGluIGNhc2UgdGhpcyB1bmxpbmsgaXMgdGhlIHJlbW92YWwgb2YgdGhlCisgKiBsYXN0IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgLS0gZW1wdHkgZGlyZWN0b3JpZXMgYXJlIHJlbW92ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVubGlua19lbnRyeShjaGFyICpuYW1lKQoreworCWNoYXIgKmNwLCAqcHJldjsKKworCWlmICh1bmxpbmsobmFtZSkpCisJCXJldHVybjsKKwlwcmV2ID0gTlVMTDsKKwl3aGlsZSAoMSkgeworCQlpbnQgc3RhdHVzOworCQljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKwkJaWYgKHByZXYpCisJCQkqcHJldiA9ICcvJzsKKwkJaWYgKCFjcCkKKwkJCWJyZWFrOworCisJCSpjcCA9IDA7CisJCXN0YXR1cyA9IHJtZGlyKG5hbWUpOworCQlpZiAoc3RhdHVzKSB7CisJCQkqY3AgPSAnLyc7CisJCQlicmVhazsKKwkJfQorCQlwcmV2ID0gY3A7CisJfQorfQorCiBzdGF0aWMgdm9pZCBjaGVja191cGRhdGVzKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgaW50IG5yKQogewogCXN0YXRpYyBzdHJ1Y3QgY2hlY2tvdXQgc3RhdGUgPSB7CkBAIC0yNTAsNyArMjc5LDcgQEAKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpzcmMrKzsKIAkJaWYgKCFjZS0+Y2VfbW9kZSkgewogCQkJaWYgKHVwZGF0ZSkKLQkJCQl1bmxpbmsoY2UtPm5hbWUpOworCQkJCXVubGlua19lbnRyeShjZS0+bmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoY2UtPmNlX2ZsYWdzICYgbWFzaykgewpkaWZmIC0tZ2l0IGEvcmVmcy5jIGIvcmVmcy5jCmluZGV4IGQ3ZjhkZmQuLmE1MmIwMzggMTAwNjQ0Ci0tLSBhL3JlZnMuYworKysgYi9yZWZzLmMKQEAgLTIsNyArMiw2IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAogI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KIAogLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgcmVmcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KICNkZWZpbmUgTUFYREVQVEggNQpAQCAtMTE3LDE0ICsxMTYsMTcgQEAKIAogaW50IGNyZWF0ZV9zeW1yZWYoY29uc3QgY2hhciAqZ2l0X0hFQUQsIGNvbnN0IGNoYXIgKnJlZnNfaGVhZHNfbWFzdGVyKQogewotI2lmIFVTRV9TWU1MSU5LX0hFQUQKLQl1bmxpbmsoZ2l0X0hFQUQpOwotCXJldHVybiBzeW1saW5rKHJlZnNfaGVhZHNfbWFzdGVyLCBnaXRfSEVBRCk7Ci0jZWxzZQogCWNvbnN0IGNoYXIgKmxvY2twYXRoOwogCWNoYXIgcmVmWzEwMDBdOwogCWludCBmZCwgbGVuLCB3cml0dGVuOwogCisjaWYgVVNFX1NZTUxJTktfSEVBRAorCXVubGluayhnaXRfSEVBRCk7CisJaWYgKCFzeW1saW5rKHJlZnNfaGVhZHNfbWFzdGVyLCBnaXRfSEVBRCkpCisJCXJldHVybiAwOworCWZwcmludGYoc3RkZXJyLCAibm8gc3ltbGluayAtIGZhbGxpbmcgYmFjayB0byBzeW1ib2xpYyByZWZcbiIpOworI2VuZGlmCisKIAlsZW4gPSBzbnByaW50ZihyZWYsIHNpemVvZihyZWYpLCAicmVmOiAlc1xuIiwgcmVmc19oZWFkc19tYXN0ZXIpOwogCWlmIChzaXplb2YocmVmKSA8PSBsZW4pIHsKIAkJZXJyb3IoInJlZm5hbWUgdG9vIGxvbmc6ICVzIiwgcmVmc19oZWFkc19tYXN0ZXIpOwpAQCAtMTQ1LDcgKzE0Nyw2IEBACiAJCXJldHVybiAtMzsKIAl9CiAJcmV0dXJuIDA7Ci0jZW5kaWYKIH0KIAogaW50IHJlYWRfcmVmKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQpkaWZmIC0tZ2l0IGEvcmV2LWxpc3QuYyBiL3Jldi1saXN0LmMKaW5kZXggM2EzMmU0MC4uNmU2ZmZkZSAxMDA2NDQKLS0tIGEvcmV2LWxpc3QuYworKysgYi9yZXYtbGlzdC5jCkBAIC01LDI3ICs1LDM2IEBACiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgImJsb2IuaCIKICNpbmNsdWRlICJlcG9jaC5oIgorI2luY2x1ZGUgImRpZmYuaCIKIAogI2RlZmluZSBTRUVOCQkoMXUgPDwgMCkKICNkZWZpbmUgSU5URVJFU1RJTkcJKDF1IDw8IDEpCiAjZGVmaW5lIENPVU5URUQJCSgxdSA8PCAyKQogI2RlZmluZSBTSE9XTgkJKDF1IDw8IDMpCisjZGVmaW5lIFRSRUVDSEFOR0UJKDF1IDw8IDQpCiAKIHN0YXRpYyBjb25zdCBjaGFyIHJldl9saXN0X3VzYWdlW10gPQotCSJnaXQtcmV2LWxpc3QgW09QVElPTl0gY29tbWl0LWlkIDxjb21taXQtaWQ+XG4iCi0JCSAgICAgICIgIC0tbWF4LWNvdW50PW5yXG4iCi0JCSAgICAgICIgIC0tbWF4LWFnZT1lcG9jaFxuIgotCQkgICAgICAiICAtLW1pbi1hZ2U9ZXBvY2hcbiIKLQkJICAgICAgIiAgLS1wYXJlbnRzXG4iCi0JCSAgICAgICIgIC0tYmlzZWN0XG4iCi0JCSAgICAgICIgIC0tb2JqZWN0c1xuIgotCQkgICAgICAiICAtLXVucGFja2VkXG4iCi0JCSAgICAgICIgIC0taGVhZGVyXG4iCi0JCSAgICAgICIgIC0tcHJldHR5XG4iCi0JCSAgICAgICIgIC0tbm8tbWVyZ2VzXG4iCi0JCSAgICAgICIgIC0tbWVyZ2Utb3JkZXIgWyAtLXNob3ctYnJlYWtzIF1cbiIKLQkJICAgICAgIiAgLS10b3BvLW9yZGVyIjsKKyJnaXQtcmV2LWxpc3QgW09QVElPTl0gPGNvbW1pdC1pZD4uLi4gWyAtLSBwYXRocy4uLiBdXG4iCisiICBsaW1pdGluZyBvdXRwdXQ6XG4iCisiICAgIC0tbWF4LWNvdW50PW5yXG4iCisiICAgIC0tbWF4LWFnZT1lcG9jaFxuIgorIiAgICAtLW1pbi1hZ2U9ZXBvY2hcbiIKKyIgICAgLS1zcGFyc2VcbiIKKyIgICAgLS1uby1tZXJnZXNcbiIKKyIgICAgLS1hbGxcbiIKKyIgIG9yZGVyaW5nIG91dHB1dDpcbiIKKyIgICAgLS1tZXJnZS1vcmRlciBbIC0tc2hvdy1icmVha3MgXVxuIgorIiAgICAtLXRvcG8tb3JkZXJcbiIKKyIgIGZvcm1hdHRpbmcgb3V0cHV0OlxuIgorIiAgICAtLXBhcmVudHNcbiIKKyIgICAgLS1vYmplY3RzXG4iCisiICAgIC0tdW5wYWNrZWRcbiIKKyIgICAgLS1oZWFkZXIgfCAtLXByZXR0eVxuIgorIiAgc3BlY2lhbCBwdXJwb3NlOlxuIgorIiAgICAtLWJpc2VjdCIKKzsKIAorc3RhdGljIGludCBkZW5zZSA9IDE7CiBzdGF0aWMgaW50IHVucGFja2VkID0gMDsKIHN0YXRpYyBpbnQgYmlzZWN0X2xpc3QgPSAwOwogc3RhdGljIGludCB0YWdfb2JqZWN0cyA9IDA7CkBAIC00NCw2ICs1Myw3IEBACiBzdGF0aWMgaW50IHN0b3BfdHJhdmVyc2FsID0gMDsKIHN0YXRpYyBpbnQgdG9wb19vcmRlciA9IDA7CiBzdGF0aWMgaW50IG5vX21lcmdlcyA9IDA7CitzdGF0aWMgY29uc3QgY2hhciAqKnBhdGhzID0gTlVMTDsKIAogc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogewpAQCAtNzcsNiArODcsMzEgQEAKIAlmZmx1c2goc3Rkb3V0KTsKIH0KIAorc3RhdGljIGludCByZXdyaXRlX29uZShzdHJ1Y3QgY29tbWl0ICoqcHApCit7CisJZm9yICg7OykgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gKnBwOworCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgKFRSRUVDSEFOR0UgfCBVTklOVEVSRVNUSU5HKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXAtPnBhcmVudHMpCisJCQlyZXR1cm4gLTE7CisJCSpwcCA9IHAtPnBhcmVudHMtPml0ZW07CisJfQorfQorCitzdGF0aWMgdm9pZCByZXdyaXRlX3BhcmVudHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwID0gJmNvbW1pdC0+cGFyZW50czsKKwl3aGlsZSAoKnBwKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gKnBwOworCQlpZiAocmV3cml0ZV9vbmUoJnBhcmVudC0+aXRlbSkgPCAwKSB7CisJCQkqcHAgPSBwYXJlbnQtPm5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlwcCA9ICZwYXJlbnQtPm5leHQ7CisJfQorfQorCiBzdGF0aWMgaW50IGZpbHRlcl9jb21taXQoc3RydWN0IGNvbW1pdCAqIGNvbW1pdCkKIHsKIAlpZiAoc3RvcF90cmF2ZXJzYWwgJiYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpKQpAQCAtOTMsNiArMTI4LDExIEBACiAJCXJldHVybiBTVE9QOwogCWlmIChub19tZXJnZXMgJiYgKGNvbW1pdC0+cGFyZW50cyAmJiBjb21taXQtPnBhcmVudHMtPm5leHQpKQogCQlyZXR1cm4gQ09OVElOVUU7CisJaWYgKHBhdGhzICYmIGRlbnNlKSB7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRUNIQU5HRSkpCisJCQlyZXR1cm4gQ09OVElOVUU7CisJCXJld3JpdGVfcGFyZW50cyhjb21taXQpOworCX0KIAlyZXR1cm4gRE87CiB9CiAKQEAgLTM3NywxOCArNDE3LDE4NCBAQAogCX0KIH0KIAorc3RhdGljIGludCBpc19kaWZmZXJlbnQgPSAwOworCitzdGF0aWMgdm9pZCBmaWxlX2FkZF9yZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpc19kaWZmZXJlbnQgPSAxOworfQorCitzdGF0aWMgdm9pZCBmaWxlX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaXNfZGlmZmVyZW50ID0gMTsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHQgPSB7CisJLnJlY3Vyc2l2ZSA9IDEsCisJLmFkZF9yZW1vdmUgPSBmaWxlX2FkZF9yZW1vdmUsCisJLmNoYW5nZSA9IGZpbGVfY2hhbmdlLAorfTsKKworc3RhdGljIGludCBzYW1lX3RyZWUoc3RydWN0IHRyZWUgKnQxLCBzdHJ1Y3QgdHJlZSAqdDIpCit7CisJaXNfZGlmZmVyZW50ID0gMDsKKwlpZiAoZGlmZl90cmVlX3NoYTEodDEtPm9iamVjdC5zaGExLCB0Mi0+b2JqZWN0LnNoYTEsICIiLCAmZGlmZl9vcHQpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFpc19kaWZmZXJlbnQ7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV90cmVlX2FzX2VtcHR5KHN0cnVjdCB0cmVlICp0MSkKK3sKKwlpbnQgcmV0dmFsOworCXZvaWQgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyBlbXB0eSwgcmVhbDsKKworCWlmICghdDEpCisJCXJldHVybiAwOworCisJdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHQxLT5vYmplY3Quc2hhMSwgInRyZWUiLCAmcmVhbC5zaXplLCBOVUxMKTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiAwOworCXJlYWwuYnVmID0gdHJlZTsKKworCWVtcHR5LmJ1ZiA9ICIiOworCWVtcHR5LnNpemUgPSAwOworCisJaXNfZGlmZmVyZW50ID0gMDsKKwlyZXR2YWwgPSBkaWZmX3RyZWUoJmVtcHR5LCAmcmVhbCwgIiIsICZkaWZmX29wdCk7CisJZnJlZSh0cmVlKTsKKworCXJldHVybiByZXR2YWwgPj0gMCAmJiAhaXNfZGlmZmVyZW50OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqdHJ5X3RvX3NpbXBsaWZ5X21lcmdlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQpCit7CisJaWYgKCFjb21taXQtPnRyZWUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKHBhcmVudCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCXBhcnNlX2NvbW1pdChwKTsKKwkJaWYgKCFwLT50cmVlKQorCQkJY29udGludWU7CisJCWlmIChzYW1lX3RyZWUoY29tbWl0LT50cmVlLCBwLT50cmVlKSkKKwkJCXJldHVybiBwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWRkX3BhcmVudHNfdG9fbGlzdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgdW5pbnRlcmVzdGluZywgZG9uJ3QgdHJ5IHRvCisJICogcHJ1bmUgcGFyZW50cyAtIHdlIHdhbnQgdGhlIG1heGltYWwgdW5pbnRlcmVzdGluZworCSAqIHNldC4KKwkgKgorCSAqIE5vcm1hbGx5IHdlIGhhdmVuJ3QgcGFyc2VkIHRoZSBwYXJlbnQKKwkgKiB5ZXQsIHNvIHdlIHdvbid0IGhhdmUgYSBwYXJlbnQgb2YgYSBwYXJlbnQKKwkgKiBoZXJlLiBIb3dldmVyLCBpdCBtYXkgdHVybiBvdXQgdGhhdCB3ZSd2ZQorCSAqIHJlYWNoZWQgdGhpcyBjb21taXQgc29tZSBvdGhlciB3YXkgKHdoZXJlIGl0CisJICogd2Fzbid0IHVuaW50ZXJlc3RpbmcpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKKwkgKiB0byBtYXJrIGl0cyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IHRvby4uCisJICovCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQl3aGlsZSAocGFyZW50KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCQkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCQkJcGFyc2VfY29tbWl0KHApOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlpZiAocC0+cGFyZW50cykKKwkJCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhwKTsKKwkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJCWNvbnRpbnVlOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQlpbnNlcnRfYnlfZGF0ZShwLCBsaXN0KTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPaywgdGhlIGNvbW1pdCB3YXNuJ3QgdW5pbnRlcmVzdGluZy4gSWYgaXQKKwkgKiBpcyBhIG1lcmdlLCB0cnkgdG8gZmluZCB0aGUgcGFyZW50IHRoYXQgaGFzCisJICogbm8gZGlmZmVyZW5jZXMgaW4gdGhlIHBhdGggc2V0IGlmIG9uZSBleGlzdHMuCisJICovCisJaWYgKHBhdGhzICYmIHBhcmVudCAmJiBwYXJlbnQtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcHJlZmVycmVkOworCisJCXByZWZlcnJlZCA9IHRyeV90b19zaW1wbGlmeV9tZXJnZShjb21taXQsIHBhcmVudCk7CisJCWlmIChwcmVmZXJyZWQpIHsKKwkJCXBhcmVudC0+aXRlbSA9IHByZWZlcnJlZDsKKwkJCXBhcmVudC0+bmV4dCA9IE5VTEw7CisJCX0KKwl9CisKKwl3aGlsZSAocGFyZW50KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisKKwkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCisJCXBhcnNlX2NvbW1pdChwKTsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQljb250aW51ZTsKKwkJcC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCWluc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgY29tcHJlc3NfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCisJCWlmICghcGFyZW50KSB7CisJCQlpZiAoIXNhbWVfdHJlZV9hc19lbXB0eShjb21taXQtPnRyZWUpKQorCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVDSEFOR0U7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIEV4YWN0bHkgb25lIHBhcmVudD8gQ2hlY2sgaWYgaXQgbGVhdmVzIHRoZSB0cmVlCisJCSAqIHVuY2hhbmdlZAorCQkgKi8KKwkJaWYgKCFwYXJlbnQtPm5leHQpIHsKKwkJCXN0cnVjdCB0cmVlICp0MSA9IGNvbW1pdC0+dHJlZTsKKwkJCXN0cnVjdCB0cmVlICp0MiA9IHBhcmVudC0+aXRlbS0+dHJlZTsKKwkJCWlmICghdDEgfHwgIXQyIHx8IHNhbWVfdHJlZSh0MSwgdDIpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVDSEFOR0U7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpsaW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5ld2xpc3QgPSBOVUxMOwogCXN0cnVjdCBjb21taXRfbGlzdCAqKnAgPSAmbmV3bGlzdDsKIAl3aGlsZSAobGlzdCkgewotCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3BfbW9zdF9yZWNlbnRfY29tbWl0KCZsaXN0LCBTRUVOKTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICplbnRyeSA9IGxpc3Q7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CiAJCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZjb21taXQtPm9iamVjdDsKIAorCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJZnJlZShlbnRyeSk7CisKIAkJaWYgKG1heF9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA8IG1heF9hZ2UpKQogCQkJb2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOwogCQlpZiAodW5wYWNrZWQgJiYgaGFzX3NoYTFfcGFjayhvYmotPnNoYTEpKQogCQkJb2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQlhZGRfcGFyZW50c190b19saXN0KGNvbW1pdCwgJmxpc3QpOwogCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKIAkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CiAJCQlpZiAoZXZlcnlib2R5X3VuaW50ZXJlc3RpbmcobGlzdCkpCkBAIC00MDEsNiArNjA3LDggQEAKIAl9CiAJaWYgKHRyZWVfb2JqZWN0cykKIAkJbWFya19lZGdlc191bmludGVyZXN0aW5nKG5ld2xpc3QpOworCWlmIChwYXRocyAmJiBkZW5zZSkKKwkJY29tcHJlc3NfbGlzdChuZXdsaXN0KTsKIAlpZiAoYmlzZWN0X2xpc3QpCiAJCW5ld2xpc3QgPSBmaW5kX2Jpc2VjdGlvbihuZXdsaXN0KTsKIAlyZXR1cm4gbmV3bGlzdDsKQEAgLTQxMSwxMyArNjE5LDEwIEBACiAJYWRkX29iamVjdChvYmosICZwZW5kaW5nX29iamVjdHMsIG5hbWUpOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXRfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKIAotCWlmIChnZXRfc2hhMShuYW1lLCBzaGExKSkKLQkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOwogCW9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKIAlpZiAoIW9iamVjdCkKIAkJZGllKCJiYWQgb2JqZWN0ICVzIiwgbmFtZSk7CkBAIC00OTUsNyArNzAwLDcgQEAKIAogc3RhdGljIGludCBpbmNsdWRlX29uZV9jb21taXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlzdHJ1Y3QgY29tbWl0ICpjb20gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShwYXRoLCAwKTsKKwlzdHJ1Y3QgY29tbWl0ICpjb20gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShwYXRoLCBzaGExLCAwKTsKIAloYW5kbGVfb25lX2NvbW1pdChjb20sIGdsb2JhbF9sc3QpOwogCXJldHVybiAwOwogfQpAQCAtNTA3LDE3ICs3MTIsMTggQEAKIAlnbG9iYWxfbHN0ID0gTlVMTDsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogeworCWNvbnN0IGNoYXIgKnByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOwogCWludCBpLCBsaW1pdGVkID0gMDsKIAotCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlmb3IgKGkgPSAxIDsgaSA8IGFyZ2M7IGkrKykgewogCQlpbnQgZmxhZ3M7Ci0JCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAJCWNoYXIgKmRvdGRvdDsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCiAJCWlmICghc3RybmNtcChhcmcsICItLW1heC1jb3VudD0iLCAxMikpIHsKIAkJCW1heF9jb3VudCA9IGF0b2koYXJnICsgMTIpOwpAQCAtNTg3LDYgKzc5MywxOCBAQAogCQkgICAgICAgIGxpbWl0ZWQgPSAxOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZW5zZSIpKSB7CisJCQlkZW5zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXNwYXJzZSIpKSB7CisJCQlkZW5zZSA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQogCiAJCWlmIChzaG93X2JyZWFrcyAmJiAhbWVyZ2Vfb3JkZXIpCiAJCQl1c2FnZShyZXZfbGlzdF91c2FnZSk7CkBAIC01OTQsMTUgKzgxMiwxOSBAQAogCQlmbGFncyA9IDA7CiAJCWRvdGRvdCA9IHN0cnN0cihhcmcsICIuLiIpOwogCQlpZiAoZG90ZG90KSB7CisJCQl1bnNpZ25lZCBjaGFyIGZyb21fc2hhMVsyMF07CiAJCQljaGFyICpuZXh0ID0gZG90ZG90ICsgMjsKLQkJCXN0cnVjdCBjb21taXQgKmV4Y2x1ZGUgPSBOVUxMOwotCQkJc3RydWN0IGNvbW1pdCAqaW5jbHVkZSA9IE5VTEw7CiAJCQkqZG90ZG90ID0gMDsKIAkJCWlmICghKm5leHQpCiAJCQkJbmV4dCA9ICJIRUFEIjsKLQkJCWV4Y2x1ZGUgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmcsIFVOSU5URVJFU1RJTkcpOwotCQkJaW5jbHVkZSA9IGdldF9jb21taXRfcmVmZXJlbmNlKG5leHQsIDApOwotCQkJaWYgKGV4Y2x1ZGUgJiYgaW5jbHVkZSkgeworCQkJaWYgKCFnZXRfc2hhMShhcmcsIGZyb21fc2hhMSkgJiYgIWdldF9zaGExKG5leHQsIHNoYTEpKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqZXhjbHVkZTsKKwkJCQlzdHJ1Y3QgY29tbWl0ICppbmNsdWRlOworCQkJCQorCQkJCWV4Y2x1ZGUgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmcsIGZyb21fc2hhMSwgVU5JTlRFUkVTVElORyk7CisJCQkJaW5jbHVkZSA9IGdldF9jb21taXRfcmVmZXJlbmNlKG5leHQsIHNoYTEsIDApOworCQkJCWlmICghZXhjbHVkZSB8fCAhaW5jbHVkZSkKKwkJCQkJZGllKCJJbnZhbGlkIHJldmlzaW9uIHJhbmdlICVzLi4lcyIsIGFyZywgbmV4dCk7CiAJCQkJbGltaXRlZCA9IDE7CiAJCQkJaGFuZGxlX29uZV9jb21taXQoZXhjbHVkZSwgJmxpc3QpOwogCQkJCWhhbmRsZV9vbmVfY29tbWl0KGluY2x1ZGUsICZsaXN0KTsKQEAgLTYxNSwxMCArODM3LDIxIEBACiAJCQlhcmcrKzsKIAkJCWxpbWl0ZWQgPSAxOwogCQl9Ci0JCWNvbW1pdCA9IGdldF9jb21taXRfcmVmZXJlbmNlKGFyZywgZmxhZ3MpOworCQlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSA8IDApCisJCQlicmVhazsKKwkJY29tbWl0ID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnLCBzaGExLCBmbGFncyk7CiAJCWhhbmRsZV9vbmVfY29tbWl0KGNvbW1pdCwgJmxpc3QpOwogCX0KIAorCWlmICghbGlzdCkKKwkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOworCisJcGF0aHMgPSBnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgaSk7CisJaWYgKHBhdGhzKSB7CisJCWxpbWl0ZWQgPSAxOworCQlkaWZmX3RyZWVfc2V0dXBfcGF0aHMocGF0aHMpOworCX0KKwogCXNhdmVfY29tbWl0X2J1ZmZlciA9IHZlcmJvc2VfaGVhZGVyOwogCXRyYWNrX29iamVjdF9yZWZzID0gMDsKIApkaWZmIC0tZ2l0IGEvcmV2LXBhcnNlLmMgYi9yZXYtcGFyc2UuYwppbmRleCA0MWI5ZGFlLi41YTk4OTgyIDEwMDY0NAotLS0gYS9yZXYtcGFyc2UuYworKysgYi9yZXYtcGFyc2UuYwpAQCAtMzQsNiArMzQsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyICpyZXZfYXJnc1tdID0gewogCQkiLS1hbGwiLAogCQkiLS1iaXNlY3QiLAorCQkiLS1kZW5zZSIsCiAJCSItLWhlYWRlciIsCiAJCSItLW1heC1hZ2U9IiwKIAkJIi0tbWF4LWNvdW50PSIsCkBAIC00NCw2ICs0NSw3IEBACiAJCSItLXBhcmVudHMiLAogCQkiLS1wcmV0dHkiLAogCQkiLS1zaG93LWJyZWFrcyIsCisJCSItLXNwYXJzZSIsCiAJCSItLXRvcG8tb3JkZXIiLAogCQkiLS11bnBhY2tlZCIsCiAJCU5VTEwKQEAgLTE1MSw2ICsxNTMsMTMgQEAKIAlzaG93KGJ1ZmZlcik7CiB9CiAKK3N0YXRpYyB2b2lkIHNob3dfZmlsZShjb25zdCBjaGFyICphcmcpCit7CisJc2hvd19kZWZhdWx0KCk7CisJaWYgKChmaWx0ZXIgJiAoRE9fTk9ORkxBR1N8RE9fTk9SRVYpKSA9PSAoRE9fTk9ORkxBR1N8RE9fTk9SRVYpKQorCQlzaG93KGFyZyk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlpbnQgaSwgYXNfaXMgPSAwLCB2ZXJpZnkgPSAwOwpAQCAtMTYyLDEyICsxNzEsMTUgQEAKIAkJY2hhciAqZG90ZG90OwogCQogCQlpZiAoYXNfaXMpIHsKLQkJCXNob3coYXJnKTsKKwkJCXNob3dfZmlsZShhcmcpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCphcmcgPT0gJy0nKSB7CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CiAJCQkJYXNfaXMgPSAxOworCQkJCS8qIFBhc3Mgb24gdGhlICItLSIgaWYgd2Ugc2hvdyBhbnl0aGluZyBidXQgZmlsZXMuLiAqLworCQkJCWlmIChmaWx0ZXIgJiAoRE9fRkxBR1MgfCBET19SRVZTKSkKKwkJCQkJc2hvd19maWxlKGFyZyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLWRlZmF1bHQiKSkgewpAQCAtMjgyLDkgKzI5NCw4IEBACiAJCX0KIAkJaWYgKHZlcmlmeSkKIAkJCWRpZSgiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIik7Ci0JCWlmICgoZmlsdGVyICYgKERPX05PTkZMQUdTfERPX05PUkVWKSkgPT0KLQkJICAgIChET19OT05GTEFHU3xET19OT1JFVikpCi0JCQlzaG93KGFyZyk7CisJCWFzX2lzID0gMTsKKwkJc2hvd19maWxlKGFyZyk7CiAJfQogCXNob3dfZGVmYXVsdCgpOwogCWlmICh2ZXJpZnkgJiYgcmV2c19jb3VudCAhPSAxKQpkaWZmIC0tZ2l0IGEvcnNoLmMgYi9yc2guYwppbmRleCAxZmVmNmRhLi5kNjY1MjY5IDEwMDY0NAotLS0gYS9yc2guYworKysgYi9yc2guYwpAQCAtMSw1MiArMSwxNiBAQAotI2luY2x1ZGUgInJzaC5oIgotCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogCisjaW5jbHVkZSAicnNoLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogCiAjZGVmaW5lIENPTU1BTkRfU0laRSA0MDk2CiAKIC8qCi0gKiBXcml0ZSBhIHNoZWxsLXF1b3RlZCB2ZXJzaW9uIG9mIGEgc3RyaW5nIGludG8gYSBidWZmZXIsIGFuZAotICogcmV0dXJuIGJ5dGVzIHRoYXQgb3VnaHQgdG8gYmUgb3V0cHV0IGV4Y2x1ZGluZyBmaW5hbCBudWxsLgotICovCi1zdGF0aWMgaW50IHNoZWxsX3F1b3RlKGNoYXIgKmJ1ZiwgaW50IG5tYXgsIGNvbnN0IGNoYXIgKnN0cikKLXsKLQljaGFyIGNoOwotCWludCBucTsKLQlpbnQgb2MgPSAwOwotCi0Jd2hpbGUgKCAoY2ggPSAqc3RyKyspICkgewotCQlucSA9IDA7Ci0JCWlmICggc3RyY2hyKCIgIVwiIyQlJlwnKCkqOzw9Pj9bXFxdXmB7fH0iLCBjaCkgKQotCQkJbnEgPSAxOwotCi0JCWlmICggbnEgKSB7Ci0JCQlpZiAoIG5tYXggPiAxICkgewotCQkJCSpidWYrKyA9ICdcXCc7Ci0JCQkJbm1heC0tOwotCQkJfQotCQkJb2MrKzsKLQkJfQotCi0JCWlmICggbm1heCA+IDEgKSB7Ci0JCQkqYnVmKysgPSBjaDsKLQkJCW5tYXgtLTsKLQkJfQotCQlvYysrOwotCX0KLQotCWlmICggbm1heCApCi0JCSpidWYgPSAnXDAnOwotCi0JcmV0dXJuIG9jOwotfQotCQkJCi0vKgotICogQXBwZW5kIGEgc3RyaW5nIHRvIGEgc3RyaW5nIGJ1ZmZlciwgd2l0aCBvciB3aXRob3V0IHF1b3RpbmcuICBSZXR1cm4gdHJ1ZQotICogaWYgdGhlIGJ1ZmZlciBvdmVyZmxvd2VkLgorICogQXBwZW5kIGEgc3RyaW5nIHRvIGEgc3RyaW5nIGJ1ZmZlciwgd2l0aCBvciB3aXRob3V0IHNoZWxsIHF1b3RpbmcuCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYnVmZmVyIG92ZXJmbG93ZWQuCiAgKi8KIHN0YXRpYyBpbnQgYWRkX3RvX3N0cmluZyhjaGFyICoqcHRycCwgaW50ICpzaXplcCwgY29uc3QgY2hhciAqc3RyLCBpbnQgcXVvdGUpCiB7CkBAIC01Niw3ICsyMCw3IEBACiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIHF1b3RlICkgewotCQlvYyA9IHNoZWxsX3F1b3RlKHAsIHNpemUsIHN0cik7CisJCW9jID0gc3FfcXVvdGVfYnVmKHAsIHNpemUsIHN0cik7CiAJfSBlbHNlIHsKIAkJb2MgPSBzdHJsZW4oc3RyKTsKIAkJbWVtY3B5KHAsIHN0ciwgKG9jID49IHNpemUpID8gc2l6ZS0xIDogb2MpOwpAQCAtMTA5LDggKzczLDcgQEAKIAlwb3NuID0gY29tbWFuZDsKIAlvZiA9IDA7CiAJb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCAiZW52ICIsIDApOwotCW9mIHw9IGFkZF90b19zdHJpbmcoJnBvc24sICZzaXplbiwgR0lUX0RJUl9FTlZJUk9OTUVOVCwgMCk7Ci0Jb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCAiPSIsIDApOworCW9mIHw9IGFkZF90b19zdHJpbmcoJnBvc24sICZzaXplbiwgR0lUX0RJUl9FTlZJUk9OTUVOVCAiPSIsIDApOwogCW9mIHw9IGFkZF90b19zdHJpbmcoJnBvc24sICZzaXplbiwgcGF0aCwgMSk7CiAJb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCAiICIsIDApOwogCW9mIHw9IGFkZF90b19zdHJpbmcoJnBvc24sICZzaXplbiwgcmVtb3RlX3Byb2csIDEpOwpkaWZmIC0tZ2l0IGEvc2VydmVyLWluZm8uYyBiL3NlcnZlci1pbmZvLmMKaW5kZXggYTllNTYwNy4uYmE1MzU5MSAxMDA2NDQKLS0tIGEvc2VydmVyLWluZm8uYworKysgYi9zZXJ2ZXItaW5mby5jCkBAIC05LDcgKzksMTQgQEAKIAogc3RhdGljIGludCBhZGRfaW5mb19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCiAJZnByaW50ZihpbmZvX3JlZl9mcCwgIiVzCSVzXG4iLCBzaGExX3RvX2hleChzaGExKSwgcGF0aCk7CisJaWYgKG8tPnR5cGUgPT0gdGFnX3R5cGUpIHsKKwkJbyA9IGRlcmVmX3RhZyhvKTsKKwkJZnByaW50ZihpbmZvX3JlZl9mcCwgIiVzCSVzXnt9XG4iLAorCQkJc2hhMV90b19oZXgoby0+c2hhMSksIHBhdGgpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNTksNiArNjYsMTYgQEAKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOwogCQlmcmVlKGNvbW1pdC0+YnVmZmVyKTsKIAkJY29tbWl0LT5idWZmZXIgPSBOVUxMOworCX0gZWxzZSBpZiAoby0+dHlwZSA9PSB0cmVlX3R5cGUpIHsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSAoc3RydWN0IHRyZWUgKilvOworCQlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCAqbjsKKwkJZm9yIChlID0gdHJlZS0+ZW50cmllczsgZTsgZSA9IG4pIHsKKwkJCWZyZWUoZS0+bmFtZSk7CisJCQllLT5uYW1lID0gTlVMTDsKKwkJCW4gPSBlLT5uZXh0OworCQkJZnJlZShlKTsKKwkJfQorCQl0cmVlLT5lbnRyaWVzID0gTlVMTDsKIAl9CiAJcmV0dXJuIG87CiB9CmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDg5NWMxZmEuLjY0MmYwMGQgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC00OCw2NSArNDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY2hhciAqZ2l0X2RpciwgKmdpdF9vYmplY3RfZGlyLCAqZ2l0X2luZGV4X2ZpbGUsICpnaXRfcmVmc19kaXIsCi0JKmdpdF9ncmFmdF9maWxlOwotc3RhdGljIHZvaWQgc2V0dXBfZ2l0X2Vudih2b2lkKQotewotCWdpdF9kaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7Ci0JaWYgKCFnaXRfZGlyKQotCQlnaXRfZGlyID0gREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UOwotCWdpdF9vYmplY3RfZGlyID0gZ2V0ZW52KERCX0VOVklST05NRU5UKTsKLQlpZiAoIWdpdF9vYmplY3RfZGlyKSB7Ci0JCWdpdF9vYmplY3RfZGlyID0geG1hbGxvYyhzdHJsZW4oZ2l0X2RpcikgKyA5KTsKLQkJc3ByaW50ZihnaXRfb2JqZWN0X2RpciwgIiVzL29iamVjdHMiLCBnaXRfZGlyKTsKLQl9Ci0JZ2l0X3JlZnNfZGlyID0geG1hbGxvYyhzdHJsZW4oZ2l0X2RpcikgKyA2KTsKLQlzcHJpbnRmKGdpdF9yZWZzX2RpciwgIiVzL3JlZnMiLCBnaXRfZGlyKTsKLQlnaXRfaW5kZXhfZmlsZSA9IGdldGVudihJTkRFWF9FTlZJUk9OTUVOVCk7Ci0JaWYgKCFnaXRfaW5kZXhfZmlsZSkgewotCQlnaXRfaW5kZXhfZmlsZSA9IHhtYWxsb2Moc3RybGVuKGdpdF9kaXIpICsgNyk7Ci0JCXNwcmludGYoZ2l0X2luZGV4X2ZpbGUsICIlcy9pbmRleCIsIGdpdF9kaXIpOwotCX0KLQlnaXRfZ3JhZnRfZmlsZSA9IGdldGVudihHUkFGVF9FTlZJUk9OTUVOVCk7Ci0JaWYgKCFnaXRfZ3JhZnRfZmlsZSkKLQkJZ2l0X2dyYWZ0X2ZpbGUgPSBzdHJkdXAoZ2l0X3BhdGgoImluZm8vZ3JhZnRzIikpOwotfQotCi1jaGFyICpnZXRfZ2l0X2Rpcih2b2lkKQotewotCWlmICghZ2l0X2RpcikKLQkJc2V0dXBfZ2l0X2VudigpOwotCXJldHVybiBnaXRfZGlyOwotfQotCi1jaGFyICpnZXRfb2JqZWN0X2RpcmVjdG9yeSh2b2lkKQotewotCWlmICghZ2l0X29iamVjdF9kaXIpCi0JCXNldHVwX2dpdF9lbnYoKTsKLQlyZXR1cm4gZ2l0X29iamVjdF9kaXI7Ci19Ci0KLWNoYXIgKmdldF9yZWZzX2RpcmVjdG9yeSh2b2lkKQotewotCWlmICghZ2l0X3JlZnNfZGlyKQotCQlzZXR1cF9naXRfZW52KCk7Ci0JcmV0dXJuIGdpdF9yZWZzX2RpcjsKLX0KLQotY2hhciAqZ2V0X2luZGV4X2ZpbGUodm9pZCkKLXsKLQlpZiAoIWdpdF9pbmRleF9maWxlKQotCQlzZXR1cF9naXRfZW52KCk7Ci0JcmV0dXJuIGdpdF9pbmRleF9maWxlOwotfQotCi1jaGFyICpnZXRfZ3JhZnRfZmlsZSh2b2lkKQotewotCWlmICghZ2l0X2dyYWZ0X2ZpbGUpCi0JCXNldHVwX2dpdF9lbnYoKTsKLQlyZXR1cm4gZ2l0X2dyYWZ0X2ZpbGU7Ci19Ci0KIGludCBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGNoYXIgKnBhdGgpCiB7CiAJY2hhciAqcG9zID0gcGF0aDsKQEAgLTQ3NSw3ICs0MTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY2hhciAqcGF0aCwgaW50IHBhdGhfbGVuKQorc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNoYXIgKnBhdGgsIGludCBwYXRoX2xlbiwgaW50IGxvY2FsKQogewogCXN0cnVjdCBzdGF0IHN0OwogCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOwpAQCAtNTAzLDYgKzQ0NCw3IEBACiAJcC0+cGFja19iYXNlID0gTlVMTDsKIAlwLT5wYWNrX2xhc3RfdXNlZCA9IDA7CiAJcC0+cGFja191c2VfY250ID0gMDsKKwlwLT5wYWNrX2xvY2FsID0gbG9jYWw7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTU0Myw3ICs0ODUsNyBAQAogCXBhY2tlZF9naXQgPSBwYWNrOwogfQogCi1zdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXRfb25lKGNoYXIgKm9iamRpcikKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFja2VkX2dpdF9vbmUoY2hhciAqb2JqZGlyLCBpbnQgbG9jYWwpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKIAlpbnQgbGVuOwpAQCAtNTY1LDcgKzUwNyw3IEBACiAKIAkJLyogd2UgaGF2ZSAuaWR4LiAgSXMgaXQgYSBmaWxlIHdlIGNhbiBtYXA/ICovCiAJCXN0cmNweShwYXRoICsgbGVuLCBkZS0+ZF9uYW1lKTsKLQkJcCA9IGFkZF9wYWNrZWRfZ2l0KHBhdGgsIGxlbiArIG5hbWVsZW4pOworCQlwID0gYWRkX3BhY2tlZF9naXQocGF0aCwgbGVuICsgbmFtZWxlbiwgbG9jYWwpOwogCQlpZiAoIXApCiAJCQljb250aW51ZTsKIAkJcC0+bmV4dCA9IHBhY2tlZF9naXQ7CkBAIC01ODEsMTEgKzUyMywxMSBAQAogCiAJaWYgKHJ1bl9vbmNlKQogCQlyZXR1cm47Ci0JcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlwcmVwYXJlX3BhY2tlZF9naXRfb25lKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDEpOwogCXByZXBhcmVfYWx0X29kYigpOwogCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgewogCQlhbHQtPm5hbWVbMF0gPSAwOwotCQlwcmVwYXJlX3BhY2tlZF9naXRfb25lKGFsdC0+YmFzZSk7CisJCXByZXBhcmVfcGFja2VkX2dpdF9vbmUoYWx0LT5iYXNlLCAwKTsKIAl9CiAJcnVuX29uY2UgPSAxOwogfQpAQCAtMTI0OCw2ICsxMTkwLDc3IEBACiAJcmV0dXJuIHNoYTFfZmlsZV9uYW1lKHNoYTEpOwogfQogCisvKgorICogTGluayB0aGUgdGVtcGZpbGUgdG8gdGhlIGZpbmFsIHBsYWNlLCBwb3NzaWJseSBjcmVhdGluZyB0aGUKKyAqIGxhc3QgZGlyZWN0b3J5IGxldmVsIGFzIHlvdSBkbyBzby4KKyAqCisgKiBSZXR1cm5zIHRoZSBlcnJubyBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgbGlua190ZW1wX3RvX2ZpbGUoY29uc3QgY2hhciAqdG1wZmlsZSwgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IHJldDsKKworCWlmICghbGluayh0bXBmaWxlLCBmaWxlbmFtZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUcnkgdG8gbWtkaXIgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgaWYgdGhhdCBmYWlsZWQKKwkgKiB3aXRoIGFuIEVOT0VOVC4KKwkgKgorCSAqIFJlLXRyeSB0aGUgImxpbmsoKSIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBta2RpcgorCSAqIHN1Y2NlZWRzLCBzaW5jZSBhIHJhY2UgbWlnaHQgbWVhbiB0aGF0IHNvbWVib2R5CisJICogZWxzZSBzdWNjZWVkZWQuCisJICovCisJcmV0ID0gZXJybm87CisJaWYgKHJldCA9PSBFTk9FTlQpIHsKKwkJY2hhciAqZGlyID0gc3RycmNocihmaWxlbmFtZSwgJy8nKTsKKwkJaWYgKGRpcikgeworCQkJKmRpciA9IDA7CisJCQlta2RpcihmaWxlbmFtZSwgMDc3Nyk7CisJCQkqZGlyID0gJy8nOworCQkJaWYgKCFsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXJldCA9IGVycm5vOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBNb3ZlIHRoZSBqdXN0IHdyaXR0ZW4gb2JqZWN0IGludG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UKKyAqLworaW50IG1vdmVfdGVtcF90b19maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNoYXIgKmZpbGVuYW1lKQoreworCWludCByZXQgPSBsaW5rX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7CisKKwkvKgorCSAqIENvZGEgaGFjayAtIGNvZGEgZG9lc24ndCBsaWtlIGNyb3NzLWRpcmVjdG9yeSBsaW5rcywKKwkgKiBzbyB3ZSBmYWxsIGJhY2sgdG8gYSByZW5hbWUsIHdoaWNoIHdpbGwgbWVhbiB0aGF0IGl0CisJICogd29uJ3QgYmUgYWJsZSB0byBjaGVjayBjb2xsaXNpb25zLCBidXQgdGhhdCdzIG5vdCBhCisJICogYmlnIGRlYWwuCisJICoKKwkgKiBUaGUgc2FtZSBob2xkcyBmb3IgRkFUIGZvcm1hdHRlZCBtZWRpYS4KKwkgKgorCSAqIFdoZW4gdGhpcyBzdWNjZWVkcywgd2UganVzdCByZXR1cm4gMC4gV2UgaGF2ZSBub3RoaW5nCisJICogbGVmdCB0byB1bmxpbmsuCisJICovCisJaWYgKHJldCAmJiByZXQgIT0gRUVYSVNUKSB7CisJCWlmICghcmVuYW1lKHRtcGZpbGUsIGZpbGVuYW1lKSkKKwkJCXJldHVybiAwOworCQlyZXQgPSBlcnJubzsKKwl9CisJdW5saW5rKHRtcGZpbGUpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSBFRVhJU1QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXM6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKHJldCkpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIEZJWE1FISEhIENvbGxpc2lvbiBjaGVjayBoZXJlID8gKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHdyaXRlX3NoYTFfZmlsZSh2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpyZXR1cm5zaGExKQogewogCWludCBzaXplOwpAQCAtMTI1Nyw3ICsxMjcwLDcgQEAKIAljaGFyICpmaWxlbmFtZTsKIAlzdGF0aWMgY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKIAl1bnNpZ25lZCBjaGFyIGhkcls1MF07Ci0JaW50IGZkLCBoZHJsZW4sIHJldDsKKwlpbnQgZmQsIGhkcmxlbjsKIAogCS8qIE5vcm1hbGx5IGlmIHdlIGhhdmUgaXQgaW4gdGhlIHBhY2sgdGhlbiB3ZSBkbyBub3QgYm90aGVyIHdyaXRpbmcKIAkgKiBpdCBvdXQgaW50byAuZ2l0L29iamVjdHMvPz8vP3szOH0gZmlsZS4KQEAgLTEzMjAsMzIgKzEzMzMsNyBAQAogCWNsb3NlKGZkKTsKIAlmcmVlKGNvbXByZXNzZWQpOwogCi0JcmV0ID0gbGluayh0bXBmaWxlLCBmaWxlbmFtZSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcmV0ID0gZXJybm87Ci0KLQkJLyoKLQkJICogQ29kYSBoYWNrIC0gY29kYSBkb2Vzbid0IGxpa2UgY3Jvc3MtZGlyZWN0b3J5IGxpbmtzLAotCQkgKiBzbyB3ZSBmYWxsIGJhY2sgdG8gYSByZW5hbWUsIHdoaWNoIHdpbGwgbWVhbiB0aGF0IGl0Ci0JCSAqIHdvbid0IGJlIGFibGUgdG8gY2hlY2sgY29sbGlzaW9ucywgYnV0IHRoYXQncyBub3QgYQotCQkgKiBiaWcgZGVhbC4KLQkJICoKLQkJICogV2hlbiB0aGlzIHN1Y2NlZWRzLCB3ZSBqdXN0IHJldHVybiAwLiBXZSBoYXZlIG5vdGhpbmcKLQkJICogbGVmdCB0byB1bmxpbmsuCi0JCSAqLwotCQlpZiAocmV0ID09IEVYREVWICYmICFyZW5hbWUodG1wZmlsZSwgZmlsZW5hbWUpKQotCQkJcmV0dXJuIDA7Ci0JfQotCXVubGluayh0bXBmaWxlKTsKLQlpZiAocmV0KSB7Ci0JCWlmIChyZXQgIT0gRUVYSVNUKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihyZXQpKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQkvKiBGSVhNRSEhISBDb2xsaXNpb24gY2hlY2sgaGVyZSA/ICovCi0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKIH0KIAogaW50IHdyaXRlX3NoYTFfdG9fZmQoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQpAQCAtMTQyMCw4ICsxNDA4LDcgQEAKIGludCB3cml0ZV9zaGExX2Zyb21fZmQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBjaGFyICpidWZmZXIsCiAJCSAgICAgICBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpidWZwb3NuKQogewotCWNoYXIgKmZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7Ci0KKwljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwogCWludCBsb2NhbDsKIAl6X3N0cmVhbSBzdHJlYW07CiAJdW5zaWduZWQgY2hhciByZWFsX3NoYTFbMjBdOwpAQCAtMTQyOSwxMCArMTQxNiwxMSBAQAogCWludCByZXQ7CiAJU0hBX0NUWCBjOwogCi0JbG9jYWwgPSBvcGVuKGZpbGVuYW1lLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzL29ial9YWFhYWFgiLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKIAorCWxvY2FsID0gbWtzdGVtcCh0bXBmaWxlKTsKIAlpZiAobG9jYWwgPCAwKQotCQlyZXR1cm4gZXJyb3IoIkNvdWxkbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBvcGVuICVzIGZvciAlc1xuIiwgdG1wZmlsZSwgc2hhMV90b19oZXgoc2hhMSkpOwogCiAJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKIApAQCAtMTQ2Miw3ICsxNDUwLDcgQEAKIAkJc2l6ZSA9IHJlYWQoZmQsIGJ1ZmZlciArICpidWZwb3NuLCBidWZzaXplIC0gKmJ1ZnBvc24pOwogCQlpZiAoc2l6ZSA8PSAwKSB7CiAJCQljbG9zZShsb2NhbCk7Ci0JCQl1bmxpbmsoZmlsZW5hbWUpOworCQkJdW5saW5rKHRtcGZpbGUpOwogCQkJaWYgKCFzaXplKQogCQkJCXJldHVybiBlcnJvcigiQ29ubmVjdGlvbiBjbG9zZWQ/Iik7CiAJCQlwZXJyb3IoIlJlYWRpbmcgZnJvbSBjb25uZWN0aW9uIik7CkBAIC0xNDc1LDE1ICsxNDYzLDE1IEBACiAJY2xvc2UobG9jYWwpOwogCVNIQTFfRmluYWwocmVhbF9zaGExLCAmYyk7CiAJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKLQkJdW5saW5rKGZpbGVuYW1lKTsKKwkJdW5saW5rKHRtcGZpbGUpOwogCQlyZXR1cm4gZXJyb3IoIkZpbGUgJXMgY29ycnVwdGVkIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCX0KIAlpZiAobWVtY21wKHNoYTEsIHJlYWxfc2hhMSwgMjApKSB7Ci0JCXVubGluayhmaWxlbmFtZSk7CisJCXVubGluayh0bXBmaWxlKTsKIAkJcmV0dXJuIGVycm9yKCJGaWxlICVzIGhhcyBiYWQgaGFzaFxuIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCX0KLQkKLQlyZXR1cm4gMDsKKworCXJldHVybiBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBzaGExX2ZpbGVfbmFtZShzaGExKSk7CiB9CiAKIGludCBoYXNfcGFja19pbmRleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQpAQCAtMTU0NSwzICsxNTMzLDQyIEBACiAJCW11bm1hcChidWYsIHNpemUpOwogCXJldHVybiByZXQ7CiB9CisKK2ludCBpbmRleF9wYXRoKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgaW50IHdyaXRlX29iamVjdCkKK3sKKwlpbnQgZmQ7CisJY2hhciAqdGFyZ2V0OworCisJc3dpdGNoIChzdC0+c3RfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlJFRzoKKwkJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCXJldHVybiBlcnJvcigib3BlbihcIiVzXCIpOiAlcyIsIHBhdGgsCisJCQkJICAgICBzdHJlcnJvcihlcnJubykpOworCQlpZiAoaW5kZXhfZmQoc2hhMSwgZmQsIHN0LCB3cml0ZV9vYmplY3QsIE5VTEwpIDwgMCkKKwkJCXJldHVybiBlcnJvcigiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIsCisJCQkJICAgICBwYXRoKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGTE5LOgorCQl0YXJnZXQgPSB4bWFsbG9jKHN0LT5zdF9zaXplKzEpOworCQlpZiAocmVhZGxpbmsocGF0aCwgdGFyZ2V0LCBzdC0+c3Rfc2l6ZSsxKSAhPSBzdC0+c3Rfc2l6ZSkgeworCQkJY2hhciAqZXJyc3RyID0gc3RyZXJyb3IoZXJybm8pOworCQkJZnJlZSh0YXJnZXQpOworCQkJcmV0dXJuIGVycm9yKCJyZWFkbGluayhcIiVzXCIpOiAlcyIsIHBhdGgsCisJCQkgICAgICAgICAgICAgZXJyc3RyKTsKKwkJfQorCQlpZiAoIXdyaXRlX29iamVjdCkgeworCQkJdW5zaWduZWQgY2hhciBoZHJbNTBdOworCQkJaW50IGhkcmxlbjsKKwkJCXdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKHRhcmdldCwgc3QtPnN0X3NpemUsICJibG9iIiwKKwkJCQkJCXNoYTEsIGhkciwgJmhkcmxlbik7CisJCX0gZWxzZSBpZiAod3JpdGVfc2hhMV9maWxlKHRhcmdldCwgc3QtPnN0X3NpemUsICJibG9iIiwgc2hhMSkpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiLAorCQkJCSAgICAgcGF0aCk7CisJCWZyZWUodGFyZ2V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCIlczogdW5zdXBwb3J0ZWQgZmlsZSB0eXBlIiwgcGF0aCk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc2hhMV9uYW1lLmMgYi9zaGExX25hbWUuYwppbmRleCBkMDg5NmY4Li5mZTQwOWZiIDEwMDY0NAotLS0gYS9zaGExX25hbWUuYworKysgYi9zaGExX25hbWUuYwpAQCAtMTIyLDYgKzEyMiw5IEBACiAJcmV0dXJuIGZvdW5kOwogfQogCisjZGVmaW5lIFNIT1JUX05BTUVfTk9UX0ZPVU5EICgtMSkKKyNkZWZpbmUgU0hPUlRfTkFNRV9BTUJJR1VPVVMgKC0yKQorCiBzdGF0aWMgaW50IGZpbmRfdW5pcXVlX3Nob3J0X29iamVjdChpbnQgbGVuLCBjaGFyICpjYW5vbmljYWwsCiAJCQkJICAgIHVuc2lnbmVkIGNoYXIgKnJlcywgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKQEAgLTEzMSwyMyArMTM0LDI0IEBACiAJaGFzX3VucGFja2VkID0gZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUobGVuLCBjYW5vbmljYWwsIHVucGFja2VkX3NoYTEpOwogCWhhc19wYWNrZWQgPSBmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QobGVuLCByZXMsIHBhY2tlZF9zaGExKTsKIAlpZiAoIWhhc191bnBhY2tlZCAmJiAhaGFzX3BhY2tlZCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gU0hPUlRfTkFNRV9OT1RfRk9VTkQ7CiAJaWYgKDEgPCBoYXNfdW5wYWNrZWQgfHwgMSA8IGhhc19wYWNrZWQpCi0JCXJldHVybiBlcnJvcigic2hvcnQgU0hBMSAlLipzIGlzIGFtYmlndW91cy4iLCBsZW4sIGNhbm9uaWNhbCk7CisJCXJldHVybiBTSE9SVF9OQU1FX0FNQklHVU9VUzsKIAlpZiAoaGFzX3VucGFja2VkICE9IGhhc19wYWNrZWQpIHsKIAkJbWVtY3B5KHNoYTEsIChoYXNfcGFja2VkID8gcGFja2VkX3NoYTEgOiB1bnBhY2tlZF9zaGExKSwgMjApOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogQm90aCBoYXZlIHVuaXF1ZSBvbmVzIC0tIGRvIHRoZXkgbWF0Y2g/ICovCiAJaWYgKG1lbWNtcChwYWNrZWRfc2hhMSwgdW5wYWNrZWRfc2hhMSwgMjApKQotCQlyZXR1cm4gZXJyb3IoInNob3J0IFNIQTEgJS4qcyBpcyBhbWJpZ3VvdXMuIiwgbGVuLCBjYW5vbmljYWwpOworCQlyZXR1cm4gLTI7CiAJbWVtY3B5KHNoYTEsIHBhY2tlZF9zaGExLCAyMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3Nob3J0X3NoYTEoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbnQgZ2V0X3Nob3J0X3NoYTEoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgaW50IHF1aWV0bHkpCiB7Ci0JaW50IGk7CisJaW50IGksIHN0YXR1czsKIAljaGFyIGNhbm9uaWNhbFs0MF07CiAJdW5zaWduZWQgY2hhciByZXNbMjBdOwogCkBAIC0xNzQsNyArMTc4LDUyIEBACiAJCXJlc1tpID4+IDFdIHw9IHZhbDsKIAl9CiAKLQlyZXR1cm4gZmluZF91bmlxdWVfc2hvcnRfb2JqZWN0KGksIGNhbm9uaWNhbCwgcmVzLCBzaGExKTsKKwlzdGF0dXMgPSBmaW5kX3VuaXF1ZV9zaG9ydF9vYmplY3QoaSwgY2Fub25pY2FsLCByZXMsIHNoYTEpOworCWlmICghcXVpZXRseSAmJiAoc3RhdHVzID09IFNIT1JUX05BTUVfQU1CSUdVT1VTKSkKKwkJcmV0dXJuIGVycm9yKCJzaG9ydCBTSEExICUuKnMgaXMgYW1iaWd1b3VzLiIsIGxlbiwgY2Fub25pY2FsKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitjb25zdCBjaGFyICpmaW5kX3VuaXF1ZV9hYmJyZXYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGxlbikKK3sKKwlpbnQgc3RhdHVzOworCXN0YXRpYyBjaGFyIGhleFs0MV07CisJbWVtY3B5KGhleCwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwl3aGlsZSAobGVuIDwgNDApIHsKKwkJdW5zaWduZWQgY2hhciBzaGExX3JldFsyMF07CisJCXN0YXR1cyA9IGdldF9zaG9ydF9zaGExKGhleCwgbGVuLCBzaGExX3JldCwgMSk7CisJCWlmICghc3RhdHVzKSB7CisJCQloZXhbbGVuXSA9IDA7CisJCQlyZXR1cm4gaGV4OworCQl9CisJCWlmIChzdGF0dXMgIT0gU0hPUlRfTkFNRV9BTUJJR1VPVVMpCisJCQlyZXR1cm4gTlVMTDsKKwkJbGVuKys7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGFtYmlndW91c19wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHNsYXNoID0gMTsKKworCWZvciAoOzspIHsKKwkJc3dpdGNoICgqcGF0aCsrKSB7CisJCWNhc2UgJ1wwJzoKKwkJCWJyZWFrOworCQljYXNlICcvJzoKKwkJCWlmIChzbGFzaCkKKwkJCQlicmVhazsKKwkJCXNsYXNoID0gMTsKKwkJCWNvbnRpbnVlOworCQljYXNlICcuJzoKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJc2xhc2ggPSAwOworCQkJY29udGludWU7CisJCX0KKwkJcmV0dXJuIHNsYXNoOworCX0KIH0KIAogc3RhdGljIGludCBnZXRfc2hhMV9iYXNpYyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC0xOTEsNiArMjQwLDEwIEBACiAJaWYgKGxlbiA9PSA0MCAmJiAhZ2V0X3NoYTFfaGV4KHN0ciwgc2hhMSkpCiAJCXJldHVybiAwOwogCisJLyogQWNjZXB0IG9ubHkgdW5hbWJpZ3VvdXMgcmVmIHBhdGhzLiAqLworCWlmIChhbWJpZ3VvdXNfcGF0aChzdHIpKQorCQlyZXR1cm4gLTE7CisKIAlmb3IgKHAgPSBwcmVmaXg7ICpwOyBwKyspIHsKIAkJY2hhciAqcGF0aG5hbWUgPSBnaXRfcGF0aCgiJXMvJS4qcyIsICpwLCBsZW4sIHN0cik7CiAJCWlmICghcmVhZF9yZWYocGF0aG5hbWUsIHNoYTEpKQpAQCAtMjk3LDYgKzM1MCw4IEBACiAJCXJldHVybiAtMTsKIAlpZiAoIXR5cGVfc3RyaW5nKSB7CiAJCW8gPSBkZXJlZl90YWcobyk7CisJCWlmICghbyB8fCAoIW8tPnBhcnNlZCAmJiAhcGFyc2Vfb2JqZWN0KG8tPnNoYTEpKSkKKwkJCXJldHVybiAtMTsKIAkJbWVtY3B5KHNoYTEsIG8tPnNoYTEsIDIwKTsKIAl9CiAJZWxzZSB7CkBAIC0zMDYsNyArMzYxLDcgQEAKIAkJICovCiAKIAkJd2hpbGUgKDEpIHsKLQkJCWlmICghbykKKwkJCWlmICghbyB8fCAoIW8tPnBhcnNlZCAmJiAhcGFyc2Vfb2JqZWN0KG8tPnNoYTEpKSkKIAkJCQlyZXR1cm4gLTE7CiAJCQlpZiAoby0+dHlwZSA9PSB0eXBlX3N0cmluZykgewogCQkJCW1lbWNweShzaGExLCBvLT5zaGExLCAyMCk7CkBAIC0zNzUsNyArNDMwLDcgQEAKIAlyZXQgPSBnZXRfc2hhMV9iYXNpYyhuYW1lLCBsZW4sIHNoYTEpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gZ2V0X3Nob3J0X3NoYTEobmFtZSwgbGVuLCBzaGExKTsKKwlyZXR1cm4gZ2V0X3Nob3J0X3NoYTEobmFtZSwgbGVuLCBzaGExLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NoZWxsLmMgYi9zaGVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDc4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGVsbC5jCkBAIC0wLDAgKzEsNTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0YXRpYyBpbnQgZG9fZ2VuZXJpY19jbWQoY29uc3QgY2hhciAqbWUsIGNoYXIgKmFyZykKK3sKKwljb25zdCBjaGFyICpteV9hcmd2WzRdOworCisJYXJnID0gc3FfZGVxdW90ZShhcmcpOworCWlmICghYXJnKQorCQlkaWUoImJhZCBhcmd1bWVudCIpOworCisJbXlfYXJndlswXSA9IG1lOworCW15X2FyZ3ZbMV0gPSBhcmc7CisJbXlfYXJndlsyXSA9IE5VTEw7CisKKwlyZXR1cm4gZXhlY3ZwKG1lLCAoY2hhcioqKSBteV9hcmd2KTsKK30KKworc3RhdGljIHN0cnVjdCBjb21tYW5kcyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpleGVjKShjb25zdCBjaGFyICptZSwgY2hhciAqYXJnKTsKK30gY21kX2xpc3RbXSA9IHsKKwl7ICJnaXQtcmVjZWl2ZS1wYWNrIiwgZG9fZ2VuZXJpY19jbWQgfSwKKwl7ICJnaXQtdXBsb2FkLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAorCXsgTlVMTCB9LAorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgKnByb2c7CisJc3RydWN0IGNvbW1hbmRzICpjbWQ7CisKKwkvKiBXZSB3YW50IHRvIHNlZSAiLWMgY21kIGFyZ3MiLCBhbmQgbm90aGluZyBlbHNlICovCisJaWYgKGFyZ2MgIT0gMyB8fCBzdHJjbXAoYXJndlsxXSwgIi1jIikpCisJCWRpZSgiV2hhdCBkbyB5b3UgdGhpbmsgSSBhbT8gQSBzaGVsbD8iKTsKKworCXByb2cgPSBhcmd2WzJdOworCWFyZ3YgKz0gMjsKKwlhcmdjIC09IDI7CisJZm9yIChjbWQgPSBjbWRfbGlzdCA7IGNtZC0+bmFtZSA7IGNtZCsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4oY21kLT5uYW1lKTsKKwkJY2hhciAqYXJnOworCQlpZiAoc3RybmNtcChjbWQtPm5hbWUsIHByb2csIGxlbikpCisJCQljb250aW51ZTsKKwkJYXJnID0gTlVMTDsKKwkJc3dpdGNoIChwcm9nW2xlbl0pIHsKKwkJY2FzZSAnXDAnOgorCQkJYXJnID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlICcgJzoKKwkJCWFyZyA9IHByb2cgKyBsZW4gKyAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlleGl0KGNtZC0+ZXhlYyhjbWQtPm5hbWUsIGFyZykpOworCX0KKwlkaWUoInVucmVjb2duaXplZCBjb21tYW5kICclcyciLCBwcm9nKTsKK30KZGlmZiAtLWdpdCBhL3Nob3ctYnJhbmNoLmMgYi9zaG93LWJyYW5jaC5jCmluZGV4IGVkODM2NDUuLjcwMTIwMDAgMTAwNjQ0Ci0tLSBhL3Nob3ctYnJhbmNoLmMKKysrIGIvc2hvdy1icmFuY2guYwpAQCAtMTMzLDI1ICsxMzMsMjggQEAKIAkJCW50aCA9IDA7CiAJCQl3aGlsZSAocGFyZW50cykgewogCQkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOwotCQkJCWNoYXIgbmV3bmFtZVsxMDAwXTsKKwkJCQljaGFyIG5ld25hbWVbMTAwMF0sICplbjsKIAkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKIAkJCQludGgrKzsKIAkJCQlpZiAocC0+b2JqZWN0LnV0aWwpCiAJCQkJCWNvbnRpbnVlOworCQkJCWVuID0gbmV3bmFtZTsKIAkJCQlzd2l0Y2ggKG4tPmdlbmVyYXRpb24pIHsKIAkJCQljYXNlIDA6Ci0JCQkJCXNwcmludGYobmV3bmFtZSwgIiVzXiVkIiwKLQkJCQkJCW4tPmhlYWRfbmFtZSwgbnRoKTsKKwkJCQkJZW4gKz0gc3ByaW50ZihlbiwgIiVzIiwgbi0+aGVhZF9uYW1lKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSAxOgotCQkJCQlzcHJpbnRmKG5ld25hbWUsICIlc15eJWQiLAotCQkJCQkJbi0+aGVhZF9uYW1lLCBudGgpOworCQkJCQllbiArPSBzcHJpbnRmKGVuLCAiJXNeIiwgbi0+aGVhZF9uYW1lKTsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc3ByaW50ZihuZXduYW1lLCAiJXN+JWReJWQiLAotCQkJCQkJbi0+aGVhZF9uYW1lLCBuLT5nZW5lcmF0aW9uLAotCQkJCQkJbnRoKTsKKwkJCQkJZW4gKz0gc3ByaW50ZihlbiwgIiVzfiVkIiwKKwkJCQkJCW4tPmhlYWRfbmFtZSwgbi0+Z2VuZXJhdGlvbik7CisJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQlpZiAobnRoID09IDEpCisJCQkJCWVuICs9IHNwcmludGYoZW4sICJeIik7CisJCQkJZWxzZQorCQkJCQllbiArPSBzcHJpbnRmKGVuLCAiXiVkIiwgbnRoKTsKIAkJCQluYW1lX2NvbW1pdChwLCBzdHJkdXAobmV3bmFtZSksIDApOwogCQkJCWkrKzsKIAkJCQluYW1lX2ZpcnN0X3BhcmVudF9jaGFpbihwKTsKQEAgLTIwNSw3ICsyMDgsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2hvd19vbmVfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3N0YXRpYyB2b2lkIHNob3dfb25lX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBub19uYW1lKQogewogCWNoYXIgcHJldHR5WzEyOF0sICpjcDsKIAlzdHJ1Y3QgY29tbWl0X25hbWUgKm5hbWUgPSBjb21taXQtPm9iamVjdC51dGlsOwpAQCAtMjE4LDExICsyMjEsMjEgQEAKIAkJY3AgPSBwcmV0dHkgKyA4OwogCWVsc2UKIAkJY3AgPSBwcmV0dHk7Ci0JaWYgKG5hbWUgJiYgbmFtZS0+aGVhZF9uYW1lKSB7Ci0JCXByaW50ZigiWyVzIiwgbmFtZS0+aGVhZF9uYW1lKTsKLQkJaWYgKG5hbWUtPmdlbmVyYXRpb24pCi0JCQlwcmludGYoIn4lZCIsIG5hbWUtPmdlbmVyYXRpb24pOwotCQlwcmludGYoIl0gIik7CisKKwlpZiAoIW5vX25hbWUpIHsKKwkJaWYgKG5hbWUgJiYgbmFtZS0+aGVhZF9uYW1lKSB7CisJCQlwcmludGYoIlslcyIsIG5hbWUtPmhlYWRfbmFtZSk7CisJCQlpZiAobmFtZS0+Z2VuZXJhdGlvbikgeworCQkJCWlmIChuYW1lLT5nZW5lcmF0aW9uID09IDEpCisJCQkJCXByaW50ZigiXiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCJ+JWQiLCBuYW1lLT5nZW5lcmF0aW9uKTsKKwkJCX0KKwkJCXByaW50ZigiXSAiKTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIlslc10gIiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgNykpOwogCX0KIAlwdXRzKGNwKTsKIH0KQEAgLTM1NCw3ICszNjcsOCBAQAogCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKIAlpbnQgbWVyZ2VfYmFzZSA9IDA7CiAJaW50IGluZGVwZW5kZW50ID0gMDsKLQljaGFyICoqbGFiZWw7CisJaW50IG5vX25hbWUgPSAwOworCWludCBzaGExX25hbWUgPSAwOwogCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCkBAIC0zNzAsNiArMzg0LDEwIEBACiAJCQlleHRyYSA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1saXN0IikpCiAJCQlleHRyYSA9IC0xOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tbmFtZSIpKQorCQkJbm9fbmFtZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaGExLW5hbWUiKSkKKwkJCXNoYTFfbmFtZSA9IDE7CiAJCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi0tbW9yZT0iLCA3KSkKIAkJCWV4dHJhID0gYXRvaShhcmcgKyA3KTsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1lcmdlLWJhc2UiKSkKQEAgLTQ2NSw3ICs0ODMsOCBAQAogCQkJCXByaW50ZigiJWMgWyVzXSAiLAogCQkJCSAgICAgICBpc19oZWFkID8gJyonIDogJyEnLCByZWZfbmFtZVtpXSk7CiAJCQl9Ci0JCQlzaG93X29uZV9jb21taXQocmV2W2ldKTsKKwkJCS8qIGhlYWRlciBsaW5lcyBuZXZlciBuZWVkIG5hbWUgKi8KKwkJCXNob3dfb25lX2NvbW1pdChyZXZbaV0sIDEpOwogCQl9CiAJCWlmICgwIDw9IGV4dHJhKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKQpAQCAtNDgwLDcgKzQ5OSw4IEBACiAJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmc2Vlbik7CiAKIAkvKiBHaXZlIG5hbWVzIHRvIGNvbW1pdHMgKi8KLQluYW1lX2NvbW1pdHMoc2VlbiwgcmV2LCByZWZfbmFtZSwgbnVtX3Jldik7CisJaWYgKCFzaGExX25hbWUgJiYgIW5vX25hbWUpCisJCW5hbWVfY29tbWl0cyhzZWVuLCByZXYsIHJlZl9uYW1lLCBudW1fcmV2KTsKIAogCWFsbF9tYXNrID0gKCgxdSA8PCAoUkVWX1NISUZUICsgbnVtX3JldikpIC0gMSk7CiAJYWxsX3JldnMgPSBhbGxfbWFzayAmIH4oKDF1IDw8IFJFVl9TSElGVCkgLSAxKTsKQEAgLTQ5MCw3ICs1MTAsNiBAQAogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3Bfb25lX2NvbW1pdCgmc2Vlbik7CiAJCWludCB0aGlzX2ZsYWcgPSBjb21taXQtPm9iamVjdC5mbGFnczsKIAkJaW50IGlzX21lcmdlX3BvaW50ID0gKHRoaXNfZmxhZyAmIGFsbF9yZXZzKSA9PSBhbGxfcmV2czsKLQkJc3RhdGljIGNoYXIgKm9idmlvdXNbXSA9IHsgIiIgfTsKIAogCQlpZiAoaXNfbWVyZ2VfcG9pbnQpCiAJCQlzaG93bl9tZXJnZV9wb2ludCA9IDE7CkBAIC01MDEsOSArNTIwLDcgQEAKIAkJCQkJPyAnKycgOiAnICcpOwogCQkJcHV0Y2hhcignICcpOwogCQl9Ci0JCXNob3dfb25lX2NvbW1pdChjb21taXQpOwotCQlpZiAobnVtX3JldiA9PSAxKQotCQkJbGFiZWwgPSBvYnZpb3VzOworCQlzaG93X29uZV9jb21taXQoY29tbWl0LCBub19uYW1lKTsKIAkJaWYgKHNob3duX21lcmdlX3BvaW50ICYmIGlzX21lcmdlX3BvaW50KQogCQkJaWYgKC0tZXh0cmEgPCAwKQogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvdC9NYWtlZmlsZSBiL3QvTWFrZWZpbGUKaW5kZXggZTcxZGE3Ny4uNWM3NmFmZiAxMDA2NDQKLS0tIGEvdC9NYWtlZmlsZQorKysgYi90L01ha2VmaWxlCkBAIC03LDEwICs3LDE2IEBACiBTSEVMTF9QQVRIID89ICQoU0hFTEwpCiBUQVIgPz0gJChUQVIpCiAKKyMgU2hlbGwgcXVvdGU7CisjIFJlc3VsdCBvZiB0aGlzIG5lZWRzIHRvIGJlIHBsYWNlZCBpbnNpZGUgJycKK3NocSA9ICQoc3Vic3QgJywnXCcnLCQoMSkpCisjIFRoaXMgaGFzIHN1cnJvdW5kaW5nICcnCitzaGVsbHF1b3RlID0gJyQoY2FsbCBzaHEsJCgxKSknCisKIFQgPSAkKHdpbGRjYXJkIHRbMC05XVswLTldWzAtOV1bMC05XS0qLnNoKQogCiBhbGw6Ci0JQCQoZm9yZWFjaCB0LCRULGVjaG8gIioqKiAkdCAqKioiOyAkKFNIRUxMX1BBVEgpICR0ICQoR0lUX1RFU1RfT1BUUykgfHwgZXhpdDsgKQorCUAkKGZvcmVhY2ggdCwkVCxlY2hvICIqKiogJHQgKioqIjsgJChjYWxsIHNoZWxscXVvdGUsJChTSEVMTF9QQVRIKSkgJHQgJChHSVRfVEVTVF9PUFRTKSB8fCBleGl0OyApCiAJQHJtIC1mciB0cmFzaAogCiBjbGVhbjoKZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIuc2ggYi90L2RpZmYtbGliLnNoCmluZGV4IGE5MTJmNDMuLjc0NWExYjAgMTAwNzU1Ci0tLSBhL3QvZGlmZi1saWIuc2gKKysrIGIvdC9kaWZmLWxpYi5zaApAQCAtMjksNyArMjksMTMgQEAKIGNvbXBhcmVfZGlmZl9wYXRjaCAoKSB7CiAgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCiAgICAgIyBJZ25vcmUgdGhlbSB3aGlsZSBjb21wYXJpbmcuCi0gICAgc2VkIC1lICcvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kJyA8IiQxIiA+LnRtcC0xCi0gICAgc2VkIC1lICcvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kJyA8IiQyIiA+LnRtcC0yCisgICAgc2VkIC1lICcKKwkvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kCisJL15pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0vZAorICAgICcgPCIkMSIgPi50bXAtMQorICAgIHNlZCAtZSAnCisJL15bZGlzXSppbWlsYXJpdHkgaW5kZXggWzAtOV0qJSQvZAorCS9eaW5kZXggWzAtOWEtZl0qXC5cLlswLTlhLWZdL2QKKyAgICAnIDwiJDIiID4udG1wLTIKICAgICBkaWZmIC11IC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgogfQpkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggYmQ5NDBiZC4uZGZmN2Q2OSAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC0yOCwxMiArMjgsMTIgQEAKICAgICAnLmdpdC9vYmplY3RzIHNob3VsZCBiZSBlbXB0eSBhZnRlciBnaXQtaW5pdC1kYiBpbiBhbiBlbXB0eSByZXBvLicgXAogICAgICdjbXAgLXMgL2Rldi9udWxsIHNob3VsZC1iZS1lbXB0eScgCiAKLSMgYWxzbyBpdCBzaG91bGQgaGF2ZSAyNTggc3ViZGlyZWN0b3JpZXM7IDI1NiBmYW4tb3V0LCBwYWNrLCBhbmQgaW5mby4KLSMgMjU5IGlzIGNvdW50aW5nICJvYmplY3RzIiBpdHNlbGYKKyMgYWxzbyBpdCBzaG91bGQgaGF2ZSAyIHN1YmRpcmVjdG9yaWVzOyBubyBmYW4tb3V0IGFueW1vcmUsIHBhY2ssIGFuZCBpbmZvLgorIyAzIGlzIGNvdW50aW5nICJvYmplY3RzIiBpdHNlbGYKIGZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGQgLXByaW50ID5mdWxsLW9mLWRpcmVjdG9yaWVzCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDI1OCBzdWJkaXJlY3Rvcmllcy4nIFwKLSAgICAndGVzdCAkKHdjIC1sIDwgZnVsbC1vZi1kaXJlY3RvcmllcykgPSAyNTknCisgICAgJy5naXQvb2JqZWN0cyBzaG91bGQgaGF2ZSAzIHN1YmRpcmVjdG9yaWVzLicgXAorICAgICd0ZXN0ICQod2MgLWwgPCBmdWxsLW9mLWRpcmVjdG9yaWVzKSA9IDMnCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQmFzaWNzIG9mIHRoZSBiYXNpY3MKZGlmZiAtLWdpdCBhL3QvdDEyMDAtdHV0b3JpYWwuc2ggYi90L3QxMjAwLXR1dG9yaWFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGI3OTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMjAwLXR1dG9yaWFsLnNoCkBAIC0wLDAgKzEsMTYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQtcmV2LXBhcnNlIHdpdGggZGlmZmVyZW50IHBhcmVudCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKworZWNobyAiSGVsbG8gV29ybGQiID4gaGVsbG8KK2VjaG8gIlNpbGx5IGV4YW1wbGUiID4gZXhhbXBsZQorCitnaXQtdXBkYXRlLWluZGV4IC0tYWRkIGhlbGxvIGV4YW1wbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYicgInRlc3QgYmxvYiA9IFwiJChnaXQtY2F0LWZpbGUgLXQgNTU3ZGIwMylcIiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiA1NTdkYjAzJyAidGVzdCBcIkhlbGxvIFdvcmxkXCIgPSBcIiQoZ2l0LWNhdC1maWxlIGJsb2IgNTU3ZGIwMylcIiIKKworZWNobyAiSXQncyBhIG5ldyBkYXkgZm9yIGdpdCIgPj5oZWxsbworY2F0ID4gZGlmZi5leHBlY3QgPDwgRU9GCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworaW5kZXggNTU3ZGIwMy4uMjYzNDE0ZiAxMDA2NDQKKy0tLSBhL2hlbGxvCisrKysgYi9oZWxsbworQEAgLTEgKzEsMiBAQAorIEhlbGxvIFdvcmxkCisrSXQncyBhIG5ldyBkYXkgZm9yIGdpdAorRU9GCitnaXQtZGlmZi1maWxlcyAtcCA+IGRpZmYub3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi1maWxlcyAtcCcgJ2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dCcKK2dpdCBkaWZmID4gZGlmZi5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmJyAnY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0JworCit0cmVlPSQoZ2l0LXdyaXRlLXRyZWUgMj4vZGV2L251bGwpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUnICJ0ZXN0IDg5ODhkYTE1ZDA3N2Q0ODI5ZmM1MWQ4NTQ0YzA5N2RlZjY2NDRkYmIgPSAkdHJlZSIKKworb3V0cHV0PSIkKGVjaG8gIkluaXRpYWwgY29tbWl0IiB8IGdpdC1jb21taXQtdHJlZSAkKGdpdC13cml0ZS10cmVlKSAyPiYxID4gLmdpdC9yZWZzL2hlYWRzL21hc3RlcikiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCcgInRlc3QgJ0NvbW1pdHRpbmcgaW5pdGlhbCB0cmVlIDg5ODhkYTE1ZDA3N2Q0ODI5ZmM1MWQ4NTQ0YzA5N2RlZjY2NDRkYmInID0gXCIkb3V0cHV0XCIiCisKK2dpdC1kaWZmLWluZGV4IC1wIEhFQUQgPiBkaWZmLm91dHB1dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWRpZmYtaW5kZXggLXAgSEVBRCcgJ2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dCcKKworZ2l0IGRpZmYgSEVBRCA+IGRpZmYub3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEJyAnY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0JworCisjcm0gaGVsbG8KKyN0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtcmVhZC10cmVlIC0tcmVzZXQgSEVBRCcgImdpdC1yZWFkLXRyZWUgLS1yZXNldCBIRUFEIDsgdGVzdCBcImhlbGxvOiBuZWVkcyB1cGRhdGVcIiA9IFwiJChnaXQtdXBkYXRlLWluZGV4IC0tcmVmcmVzaClcIiIKKworY2F0ID4gd2hhdGNoYW5nZWQuZXhwZWN0IDw8IEVPRgorZGlmZi10cmVlIFZBUklBQkxFIChmcm9tIHJvb3QpCitBdXRob3I6IFZBUklBQkxFCitEYXRlOiAgIFZBUklBQkxFCisKKyAgICBJbml0aWFsIGNvbW1pdAorCitkaWZmIC0tZ2l0IGEvZXhhbXBsZSBiL2V4YW1wbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMjRjNzRhCistLS0gL2Rldi9udWxsCisrKysgYi9leGFtcGxlCitAQCAtMCwwICsxIEBACisrU2lsbHkgZXhhbXBsZQorZGlmZiAtLWdpdCBhL2hlbGxvIGIvaGVsbG8KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41NTdkYjAzCistLS0gL2Rldi9udWxsCisrKysgYi9oZWxsbworQEAgLTAsMCArMSBAQAorK0hlbGxvIFdvcmxkCitFT0YKKworZ2l0LXdoYXRjaGFuZ2VkIC1wIC0tcm9vdCB8IFwKKwlzZWQgLWUgIjFzL15cKC5cezEwXH1cKS5cezQwXH0vXDFWQVJJQUJMRS8iIFwKKwkJLWUgIjIsM3MvXlwoLlx7OFx9XCkuKiQvXDFWQVJJQUJMRS8iIFwKKz4gd2hhdGNoYW5nZWQub3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtd2hhdGNoYW5nZWQgLXAgLS1yb290JyAnY21wIHdoYXRjaGFuZ2VkLmV4cGVjdCB3aGF0Y2hhbmdlZC5vdXRwdXQnCisKK2dpdCB0YWcgbXktZmlyc3QtdGFnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdGFnIG15LWZpcnN0LXRhZycgJ2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy90YWdzL215LWZpcnN0LXRhZycKKworIyBUT0RPOiB0ZXN0IGdpdC1jbG9uZQorCitnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtYiBteWJyYW5jaCcgJ2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9teWJyYW5jaCcKKworY2F0ID4gYnJhbmNoLmV4cGVjdCA8PEVPRgorICBtYXN0ZXIKKyogbXlicmFuY2gKK0VPRgorCitnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCcgJ2NtcCBicmFuY2guZXhwZWN0IGJyYW5jaC5vdXRwdXQnCisKK2dpdCBjaGVja291dCBteWJyYW5jaAorZWNobyAiV29yaywgd29yaywgd29yayIgPj5oZWxsbworZ2l0IGNvbW1pdCAtbSAnU29tZSB3b3JrLicgaGVsbG8KKworZ2l0IGNoZWNrb3V0IG1hc3RlcgorCitlY2hvICJQbGF5LCBwbGF5LCBwbGF5IiA+PmhlbGxvCitlY2hvICJMb3RzIG9mIGZ1biIgPj5leGFtcGxlCitnaXQgY29tbWl0IC1tICdTb21lIGZ1bi4nIGhlbGxvIGV4YW1wbGUKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IHJlc29sdmUgbm93IGZhaWxzJyAnZ2l0IHJlc29sdmUgSEVBRCBteWJyYW5jaCAiTWVyZ2Ugd29yayBpbiBteWJyYW5jaCInCisKK2NhdCA+IGhlbGxvIDw8IEVPRgorSGVsbG8gV29ybGQKK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKK1BsYXksIHBsYXksIHBsYXkKK1dvcmssIHdvcmssIHdvcmsKK0VPRgorCitnaXQgY29tbWl0IC1tICdNZXJnZWQgIm15YnJhbmNoIiBjaGFuZ2VzLicgaGVsbG8KKworY2F0ID4gc2hvdy1icmFuY2guZXhwZWN0IDw8IEVPRgorKiBbbWFzdGVyXSBNZXJnZWQgIm15YnJhbmNoIiBjaGFuZ2VzLgorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorKyAgW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KKysrIFtteWJyYW5jaF0gU29tZSB3b3JrLgorRU9GCisKK2dpdCBzaG93LWJyYW5jaCBtYXN0ZXIgbXlicmFuY2ggPiBzaG93LWJyYW5jaC5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCcgJ2NtcCBzaG93LWJyYW5jaC5leHBlY3Qgc2hvdy1icmFuY2gub3V0cHV0JworCitnaXQgY2hlY2tvdXQgbXlicmFuY2gKKworY2F0ID4gcmVzb2x2ZS5leHBlY3QgPDwgRU9GCitVcGRhdGluZyBmcm9tIFZBUklBQkxFIHRvIFZBUklBQkxFLgorIGV4YW1wbGUgfCAgICAxICsKKyBoZWxsbyAgIHwgICAgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCitFT0YKKworZ2l0IHJlc29sdmUgSEVBRCBtYXN0ZXIgIk1lcmdlIHVwc3RyZWFtIGNoYW5nZXMuIiB8IFwKKwlzZWQgLWUgIjFzL1swLTlhLWZdXHs0MFx9L1ZBUklBQkxFL2ciID4gcmVzb2x2ZS5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNvbHZlJyAnY21wIHJlc29sdmUuZXhwZWN0IHJlc29sdmUub3V0cHV0JworCitjYXQgPiBzaG93LWJyYW5jaDIuZXhwZWN0IDw8IEVPRgorISBbbWFzdGVyXSBNZXJnZWQgIm15YnJhbmNoIiBjaGFuZ2VzLgorICogW215YnJhbmNoXSBNZXJnZWQgIm15YnJhbmNoIiBjaGFuZ2VzLgorLS0KKysrIFttYXN0ZXJdIE1lcmdlZCAibXlicmFuY2giIGNoYW5nZXMuCitFT0YKKworZ2l0IHNob3ctYnJhbmNoIG1hc3RlciBteWJyYW5jaCA+IHNob3ctYnJhbmNoMi5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCcgJ2NtcCBzaG93LWJyYW5jaDIuZXhwZWN0IHNob3ctYnJhbmNoMi5vdXRwdXQnCisKKyMgVE9ETzogdGVzdCBnaXQgZmV0Y2gKKworIyBUT0RPOiB0ZXN0IGdpdCBwdXNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXBhY2snICdnaXQgcmVwYWNrJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHBydW5lLXBhY2tlZCcgJ2dpdCBwcnVuZS1wYWNrZWQnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICctPiBvbmx5IHBhY2tlZCBvYmplY3RzJyAnZmluZCAtdHlwZSBmIC5naXQvb2JqZWN0cy9bMC05YS1mXVswLTlhLWZdJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MzMwMC1mdW5ueS1uYW1lcy5zaCBiL3QvdDMzMDAtZnVubnktbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk3YzM3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDAtZnVubnktbmFtZXMuc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nUGF0aG5hbWVzIHdpdGggZnVubnkgY2hhcmFjdGVycy4KKworVGhpcyB0ZXN0IHRyaWVzIHBhdGhuYW1lcyB3aXRoIGZ1bm55IGNoYXJhY3RlcnMgaW4gdGhlIHdvcmtpbmcKK3RyZWUsIGluZGV4LCBhbmQgdHJlZSBvYmplY3RzLgorJworCisjIHNpbmNlIEZBVC9OVEZTIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzLCBza2lwIHRoaXMgdGVzdAordGVzdCAiJCh1bmFtZSAtbyAyPi9kZXYvbnVsbCkiID0gQ3lnd2luICYmIGV4aXQgMAorCisuIC4vdGVzdC1saWIuc2gKKworcDA9J25vLWZ1bm55JworcDE9J3RhYnMJYW5kIHNwYWNlcycKK3AyPSdqdXN0IHNwYWNlJworCitjYXQgPiIkcDAiIDw8XEVPRgorMS4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorMi4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorMy4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorRU9GCisKK2NhdCA+IiRwMSIgIiRwMCIKK2VjaG8gJ0ZvbyBCYXIgQmF6JyA+IiRwMiIKKworZWNobyAnanVzdCBzcGFjZQorbm8tZnVubnknID5leHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWxzLWZpbGVzIG5vLWZ1bm55JyBcCisJJ2dpdC11cGRhdGUtaW5kZXggLS1hZGQgIiRwMCIgIiRwMiIgJiYKKwlnaXQtbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK3QwPWBnaXQtd3JpdGUtdHJlZWAKK2VjaG8gIiR0MCIgPnQwCisKK2VjaG8gJ2p1c3Qgc3BhY2UKK25vLWZ1bm55CisidGFic1x0YW5kIHNwYWNlcyInID5leHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWxzLWZpbGVzIHdpdGgtZnVubnknIFwKKwknZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCAiJHAxIiAmJgorCWdpdC1scy1maWxlcyA+Y3VycmVudCAmJgorCWRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworZWNobyAnanVzdCBzcGFjZQorbm8tZnVubnkKK3RhYnMJYW5kIHNwYWNlcycgPmV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtbHMtZmlsZXMgLXogd2l0aC1mdW5ueScgXAorCSdnaXQtbHMtZmlsZXMgLXogfCB0ciBcXDAgXFwwMTIgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK3QxPWBnaXQtd3JpdGUtdHJlZWAKK2VjaG8gIiR0MSIgPnQxCisKK2VjaG8gJ2p1c3Qgc3BhY2UKK25vLWZ1bm55CisidGFic1x0YW5kIHNwYWNlcyInID5leHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWxzLXRyZWUgd2l0aCBmdW5ueScgXAorCSdnaXQtbHMtdHJlZSAtciAkdDEgfCBzZWQgLWUgInMvXlteCV0qCS8vIiA+Y3VycmVudCAmJgorCSBkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gJ0EJInRhYnNcdGFuZCBzcGFjZXMiJyA+ZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLWluZGV4IHdpdGgtZnVubnknIFwKKwknZ2l0LWRpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyAkdDAgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLXRyZWUgd2l0aC1mdW5ueScgXAorCSdnaXQtZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgJHQwICR0MSA+Y3VycmVudCAmJgorCWRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworZWNobyAnQQordGFicwlhbmQgc3BhY2VzJyA+ZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLWluZGV4IC16IHdpdGgtZnVubnknIFwKKwknZ2l0LWRpZmYtaW5kZXggLXogLS1uYW1lLXN0YXR1cyAkdDAgfCB0ciBcXDAgXFwwMTIgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLXRyZWUgLXogd2l0aC1mdW5ueScgXAorCSdnaXQtZGlmZi10cmVlIC16IC0tbmFtZS1zdGF0dXMgJHQwICR0MSB8IHRyIFxcMCBcXDAxMiA+Y3VycmVudCAmJgorCWRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworZWNobyAnQ05VTQluby1mdW5ueQkidGFic1x0YW5kIHNwYWNlcyInID5leHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWRpZmYtdHJlZSAtQyB3aXRoLWZ1bm55JyBcCisJJ2dpdC1kaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1uYW1lLXN0YXR1cyBcCisJCSR0MCAkdDEgfCBzZWQgLWUgJ3MvXkNbMC05XSovQ05VTS8nID5jdXJyZW50ICYmCisJZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCitlY2hvICdSTlVNCW5vLWZ1bm55CSJ0YWJzXHRhbmQgc3BhY2VzIicgPmV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi10cmVlIGRlbGV0ZSB3aXRoLWZ1bm55JyBcCisJJ2dpdC11cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgIiRwMCIgJiYKKwlnaXQtZGlmZi1pbmRleCAtTSAtLW5hbWUtc3RhdHVzIFwKKwkJJHQwIHwgc2VkIC1lICdzL15SWzAtOV0qL1JOVU0vJyA+Y3VycmVudCAmJgorCWRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworZWNobyAnZGlmZiAtLWdpdCBhL25vLWZ1bm55ICJiL3RhYnNcdGFuZCBzcGFjZXMiCitzaW1pbGFyaXR5IGluZGV4IE5VTSUKK3JlbmFtZSBmcm9tIG5vLWZ1bm55CityZW5hbWUgdG8gInRhYnNcdGFuZCBzcGFjZXMiJyA+ZXhwZWN0ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWRpZmYtdHJlZSBkZWxldGUgd2l0aC1mdW5ueScgXAorCSdnaXQtZGlmZi1pbmRleCAtTSAtcCAkdDAgfAorCSBzZWQgLWUgInMvaW5kZXggWzAtOV0qJS9pbmRleCBOVU0lLyIgPmN1cnJlbnQgJiYKKwkgZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCitjaG1vZCAreCAiJHAxIgorZWNobyAnZGlmZiAtLWdpdCBhL25vLWZ1bm55ICJiL3RhYnNcdGFuZCBzcGFjZXMiCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQorc2ltaWxhcml0eSBpbmRleCBOVU0lCityZW5hbWUgZnJvbSBuby1mdW5ueQorcmVuYW1lIHRvICJ0YWJzXHRhbmQgc3BhY2VzIicgPmV4cGVjdGVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLXRyZWUgZGVsZXRlIHdpdGgtZnVubnknIFwKKwknZ2l0LWRpZmYtaW5kZXggLU0gLXAgJHQwIHwKKwkgc2VkIC1lICJzL2luZGV4IFswLTldKiUvaW5kZXggTlVNJS8iID5jdXJyZW50ICYmCisJIGRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworZWNobyA+ZXhwZWN0ZWQgJyAidGFic1x0YW5kIHNwYWNlcyIKKyAxIGZpbGVzIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi10cmVlIHJlbmFtZSB3aXRoLWZ1bm55IGFwcGxpZWQnIFwKKwknZ2l0LWRpZmYtaW5kZXggLU0gLXAgJHQwIHwKKwkgZ2l0LWFwcGx5IC0tc3RhdCB8IHNlZCAtZSAicy98LiovLyIgLWUgInMvICpcJC8vIiA+Y3VycmVudCAmJgorCSBkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gPmV4cGVjdGVkICcgbm8tZnVubnkKKyAidGFic1x0YW5kIHNwYWNlcyIKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLXRyZWUgZGVsZXRlIHdpdGgtZnVubnkgYXBwbGllZCcgXAorCSdnaXQtZGlmZi1pbmRleCAtcCAkdDAgfAorCSBnaXQtYXBwbHkgLS1zdGF0IHwgc2VkIC1lICJzL3wuKi8vIiAtZSAicy8gKlwkLy8iID5jdXJyZW50ICYmCisJIGRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFwcGx5IG5vbi1naXQgZGlmZicgXAorCSdnaXQtZGlmZi1pbmRleCAtcCAkdDAgfAorCSBzZWQgLW5lICIvXlstK0BdL3AiIHwKKwkgZ2l0LWFwcGx5IC0tc3RhdCB8IHNlZCAtZSAicy98LiovLyIgLWUgInMvICpcJC8vIiA+Y3VycmVudCAmJgorCSBkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMC1kaWZmLWZvcm1hdC5zaCBiL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKaW5kZXggZjNiNjMzMC4uYmViNmQ4ZiAxMDA3NTUKLS0tIGEvdC90NDAwMC1kaWZmLWZvcm1hdC5zaAorKysgYi90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoCkBAIC03LDYgKzcsNyBAQAogCiAnCiAuIC4vdGVzdC1saWIuc2gKKy4gLi4vZGlmZi1saWIuc2gKIAogZWNobyA+cGF0aDAgJ0xpbmUgMQogTGluZSAyCkBAIC00OCw2ICs0OSw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBnaXQtZGlmZi1maWxlcyAtcCBvdXRwdXQuJyBcCi0gICAgJ2NtcCAtcyBjdXJyZW50IGV4cGVjdGVkJworICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDAxLWRpZmYtcmVuYW1lLnNoIGIvdC90NDAwMS1kaWZmLXJlbmFtZS5zaAppbmRleCBiZTQ3NDg1Li4yZTNjMjBkIDEwMDc1NQotLS0gYS90L3Q0MDAxLWRpZmYtcmVuYW1lLnNoCisrKyBiL3QvdDQwMDEtZGlmZi1yZW5hbWUuc2gKQEAgLTcsNiArNyw3IEBACiAKICcKIC4gLi90ZXN0LWxpYi5zaAorLiAuLi9kaWZmLWxpYi5zaAogCiBlY2hvID5wYXRoMCAnTGluZSAxCiBMaW5lIDIKQEAgLTYxLDYgKzYyLDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIHRoZSBvdXRwdXQuJyBcCi0gICAgJ2RpZmYgLUkgInNpbWlsYXJpdHkuKiIgPi9kZXYvbnVsbCBjdXJyZW50IGV4cGVjdGVkJworICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2ggYi90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2gKaW5kZXggZjU5NjE0YS4uYTIzYWFhMCAxMDA3NTUKLS0tIGEvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoCisrKyBiL3QvdDQwMDQtZGlmZi1yZW5hbWUtc3ltbGluay5zaApAQCAtMTAsNiArMTAsNyBAQAogYnkgYW4gZWRpdCBmb3IgdGhlbS4KICcKIC4gLi90ZXN0LWxpYi5zaAorLiAuLi9kaWZmLWxpYi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXApAQCAtNjEsNiArNjIsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgZGlmZiBvdXRwdXQnIFwKLSAgICAnZGlmZiAtdSBjdXJyZW50IGV4cGVjdGVkJworICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAwLXRhci10cmVlLnNoIGIvdC90NTAwMC10YXItdHJlZS5zaAppbmRleCA1ZGZmYjhlLi40ZGIxYmIxIDEwMDc1NQotLS0gYS90L3Q1MDAwLXRhci10cmVlLnNoCisrKyBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKQEAgLTQxLDggKzQxLDggQEAKICAgICAgZmluZCBhIC10eXBlIGwgfCB4YXJncyBnaXQtdXBkYXRlLWluZGV4IC0tYWRkICYmCiAgICAgIHRyZWVpZD1gZ2l0LXdyaXRlLXRyZWVgICYmCiAgICAgIGVjaG8gJHRyZWVpZCA+dHJlZWlkICYmCi0gICAgIFRaPUdNVCBHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjcgMjI6MDA6MDAiIFwKLSAgICAgZ2l0LWNvbW1pdC10cmVlICR0cmVlaWQgPC9kZXYvbnVsbCA+LmdpdC9IRUFEJworICAgICBnaXQtdXBkYXRlLXJlZiBIRUFEICQoVFo9R01UIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNyAyMjowMDowMCIgXAorICAgICBnaXQtY29tbWl0LXRyZWUgJHRyZWVpZCA8L2Rldi9udWxsKScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdC10YXItdHJlZScgXApAQCAtNTksNyArNTksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdC1nZXQtdGFyLWNvbW1pdC1pZCcgXAogICAgICdnaXQtZ2V0LXRhci1jb21taXQtaWQgPGIudGFyID5iLmNvbW1pdGlkICYmCi0gICAgIGRpZmYgLmdpdC9IRUFEIGIuY29tbWl0aWQnCisgICAgIGRpZmYgLmdpdC8kKGdpdC1zeW1ib2xpYy1yZWYgSEVBRCkgYi5jb21taXRpZCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2V4dHJhY3QgdGFyIGFyY2hpdmUnIFwKZGlmZiAtLWdpdCBhL3QvdDUzMDAtcGFjay1vYmplY3Quc2ggYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCmluZGV4IGJiNjIzMzYuLjViNTA1MzYgMTAwNzU1Ci0tLSBhL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKKysrIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaApAQCAtNDksNyArNDksNyBAQAogICAgICBnaXQtdW5wYWNrLW9iamVjdHMgPHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2siCiAKIHVuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCi1jZCAkVFJBU0gvLmdpdDIKK2NkICIkVFJBU0gvLmdpdDIiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjaGVjayB1bnBhY2sgd2l0aG91dCBkZWx0YScgXApAQCAtNjEsNyArNjEsNyBAQAogCSAgICAgcmV0dXJuIDEKIAkgfQogICAgICBkb25lJwotY2QgJFRSQVNICitjZCAiJFRSQVNIIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAncGFjayB3aXRoIGRlbHRhJyBcCkBAIC04MCw3ICs4MCw3IEBACiAgICAgIGdpdC11bnBhY2stb2JqZWN0cyA8dGVzdC0yLSR7cGFja25hbWVfMn0ucGFjaycKIAogdW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKLWNkICRUUkFTSC8uZ2l0MgorY2QgIiRUUkFTSC8uZ2l0MiIKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjaGVjayB1bnBhY2sgd2l0aCBkZWx0YScgXAogICAgICcoY2QgLi4vLmdpdCAmJiBmaW5kIG9iamVjdHMgLXR5cGUgZiAtcHJpbnQpIHwKQEAgLTkxLDcgKzkxLDcgQEAKIAkgICAgIHJldHVybiAxCiAJIH0KICAgICAgZG9uZScKLWNkICRUUkFTSAorY2QgIiRUUkFTSCIKIAogcm0gLWZyIC5naXQyCiBta2RpciAuZ2l0MgpAQCAtMTY1LDQgKzE2NSwyMiBAQAogCiAgICAgIDonCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdidWlsZCBwYWNrIGluZGV4IGZvciBhbiBleGlzdGluZyBwYWNrJyBcCisgICAgJ2NwIHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgZ2l0LWluZGV4LXBhY2sgLW8gdG1wLmlkeCB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdG1wLmlkeCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggJiYKKworICAgICBnaXQtaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5pZHggJiYKKworICAgICBjcCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGdpdC1pbmRleC1wYWNrIC1vIHRtcC5pZHggdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayAmJgorICAgICBjbXAgdG1wLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggJiYKKworICAgICBnaXQtaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggJiYKKworICAgICA6JworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzgxYmQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC0wLDAgKzEsMTM2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdGluZyBtdWx0aV9hY2sgcGFjayBmZXRjaGluZworCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGFpci4KKworIyBTb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworCitmdW5jdGlvbiBzaG93X2NvdW50ICgpIHsKKwljb21taXRfY291bnQ9JCgoJGNvbW1pdF9jb3VudCsxKSkKKwlwcmludGYgIiAgICAgICVkXHIiICRjb21taXRfY291bnQKK30KKworZnVuY3Rpb24gYWRkICgpIHsKKwlsb2NhbCBuYW1lPSQxCisJbG9jYWwgdGV4dD0iJEAiCisJbG9jYWwgYnJhbmNoPSR7bmFtZTowOjF9CisJbG9jYWwgcGFyZW50cz0iIgorCisJc2hpZnQKKwl3aGlsZSB0ZXN0ICQxOyBkbworCQlwYXJlbnRzPSIkcGFyZW50cyAtcCAkMSIKKwkJc2hpZnQKKwlkb25lCisKKwllY2hvICIkdGV4dCIgPiB0ZXN0LnR4dAorCWdpdC11cGRhdGUtaW5kZXggLS1hZGQgdGVzdC50eHQKKwl0cmVlPSQoZ2l0LXdyaXRlLXRyZWUpCisJIyBtYWtlIHN1cmUgdGltZXN0YW1wcyBhcmUgaW4gY29ycmVjdCBvcmRlcgorCXNlYz0kKCgkc2VjKzEpKQorCWNvbW1pdD0kKGVjaG8gIiR0ZXh0IiB8IEdJVF9BVVRIT1JfREFURT0kc2VjIFwKKwkJZ2l0LWNvbW1pdC10cmVlICR0cmVlICRwYXJlbnRzIDI+PmxvZzIudHh0KQorCWV4cG9ydCAkbmFtZT0kY29tbWl0CisJZWNobyAkY29tbWl0ID4gLmdpdC9yZWZzL2hlYWRzLyRicmFuY2gKKwlldmFsICR7YnJhbmNofVRJUD0kY29tbWl0Cit9CisKK2Z1bmN0aW9uIGNvdW50X29iamVjdHMgKCkgeworCWxzIC5naXQvb2JqZWN0cy8/Py8qIDI+PmxvZzIudHh0IHwgd2MgLWwgfCB0ciAtZCAiICIKK30KKworZnVuY3Rpb24gdGVzdF9leHBlY3Rfb2JqZWN0X2NvdW50ICgpIHsKKwlsb2NhbCBtZXNzYWdlPSQxCisJbG9jYWwgY291bnQ9JDIKKworCW91dHB1dD0iJChjb3VudF9vYmplY3RzKSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkJIm5ldyBvYmplY3QgY291bnQgJG1lc3NhZ2UiIFwKKwkJInRlc3QgJGNvdW50ID0gJG91dHB1dCIKK30KKworZnVuY3Rpb24gdGVzdF9yZXBhY2sgKCkgeworCWxvY2FsIHJlcD0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVwYWNrICYmIHBydW5lLXBhY2tlZCBpbiAkcmVwIiBcCisJCScoZ2l0LXJlcGFjayAmJiBnaXQtcHJ1bmUtcGFja2VkKTI+PmxvZy50eHQnCit9CisKK2Z1bmN0aW9uIHB1bGxfdG9fY2xpZW50ICgpIHsKKwlsb2NhbCBudW1iZXI9JDEKKwlsb2NhbCBoZWFkcz0kMgorCWxvY2FsIGNvdW50PSQzCisJbG9jYWwgbm9fc3RyaWN0X2NvdW50X2NoZWNrPSQ0CisKKwljZCBjbGllbnQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbnVtYmVyIHB1bGwiIFwKKwkJImdpdC1mZXRjaC1wYWNrIC12IC4uICRoZWFkcyA+IGxvZy50eHQgMj4mMSIKKwljYXNlICIkaGVhZHMiIGluICpBKikgZWNobyAkQVRJUCA+IC5naXQvcmVmcy9oZWFkcy9BOzsgZXNhYworCWNhc2UgIiRoZWFkcyIgaW4gKkIqKSBlY2hvICRCVElQID4gLmdpdC9yZWZzL2hlYWRzL0I7OyBlc2FjCisJZ2l0LXN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvJHtoZWFkczowOjF9CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZnNjayIgJ2dpdC1mc2NrLW9iamVjdHMgLS1mdWxsID4gZnNjay50eHQgMj4mMScKKwl0ZXN0X2V4cGVjdF9vYmplY3RfY291bnQgImFmdGVyICRudW1iZXIgcHVsbCIgJGNvdW50CisJcGFja19jb3VudD0kKGdyZXAgUGFja2luZyBsb2cudHh0fHRyIC1kYyAiMC05IikKKwl0ZXN0IC16ICIkcGFja19jb3VudCIgJiYgcGFja19jb3VudD0wCisJaWYgWyAteiAiJG5vX3N0cmljdF9jb3VudF9jaGVjayIgXTsgdGhlbgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtaW5pbWFsIGNvdW50IiAidGVzdCAkY291bnQgPSAkcGFja19jb3VudCIKKwllbHNlCisJCXRlc3QgJGNvdW50ICE9ICRwYWNrX2NvdW50ICYmIFwKKwkJCWVjaG8gIldBUk5JTkc6ICRwYWNrX2NvdW50IG9iamVjdHMgdHJhbnNtaXR0ZWQsIG9ubHkgJGNvdW50IG9mIHdoaWNoIHdlcmUgbmVlZGVkIgorCWZpCisJY2QgLi4KK30KKworIyBIZXJlIGJlZ2lucyB0aGUgYWN0dWFsIHRlc3RpbmcKKworIyBBMSAtIC4uLiAtIEEyMCAtIEEyMQorIyAgICBcCisjICAgICAgQjEgIC0gICBCMiAtIC4uIC0gQjcwCisKKyMgY2xpZW50IHB1bGxzIEEyMCwgQjEuIFRoZW4gdHJhY2tzIG9ubHkgQi4gVGhlbiBwdWxscyBBLgorCisoCisJbWtkaXIgY2xpZW50ICYmCisJY2QgY2xpZW50ICYmCisJZ2l0LWluaXQtZGIgMj4+IGxvZzIudHh0CispCisKK2FkZCBBMQorCitwcmV2PTE7IGN1cj0yOyB3aGlsZSBbICRjdXIgLWxlIDEwIF07IGRvCisJYWRkIEEkY3VyICQoZXZhbCBlY2hvIFwkQSRwcmV2KQorCXByZXY9JGN1cgorCWN1cj0kKCgkY3VyKzEpKQorZG9uZQorCithZGQgQjEgJEExCisKK2VjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQQorZWNobyAkQlRJUCA+IC5naXQvcmVmcy9oZWFkcy9CCitnaXQtc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9CCisKK3B1bGxfdG9fY2xpZW50IDFzdCAiQiBBIiAkKCgxMSozKSkKKworKGNkIGNsaWVudDsgdGVzdF9yZXBhY2sgY2xpZW50KQorCithZGQgQTExICRBMTAKKworcHJldj0xOyBjdXI9Mjsgd2hpbGUgWyAkY3VyIC1sZSA2NSBdOyBkbworCWFkZCBCJGN1ciAkKGV2YWwgZWNobyBcJEIkcHJldikKKwlwcmV2PSRjdXIKKwljdXI9JCgoJGN1cisxKSkKK2RvbmUKKworcHVsbF90b19jbGllbnQgMm5kICJCIiAkKCg2NCozKSkKKworKGNkIGNsaWVudDsgdGVzdF9yZXBhY2sgY2xpZW50KQorCitwdWxsX3RvX2NsaWVudCAzcmQgIkEiICQoKDEqMykpICMgb2xkIGZhaWxzCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMS1vbGQtZmV0Y2gtYW5kLXVwbG9hZC5zaCBiL3QvdDU1MDEtb2xkLWZldGNoLWFuZC11cGxvYWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWRhNTEzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDEtb2xkLWZldGNoLWFuZC11cGxvYWQuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKKyMgVGVzdCB0aGF0IHRoZSBjdXJyZW50IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGxheXMgbmljZWx5IHdpdGgKKyMgYW4gb2xkIGNvdW50ZXJwYXJ0CisKK2NkICQoZGlybmFtZSAkMCkgfHwgZXhpdCAxCisKK3RtcD0kKG1rdGVtcCAvdG1wL3RtcC1YWFhYWFhYWCkKKworcmV0dmFsPTAKKworaWYgWyAteiAiJDEiIF07IHRoZW4KKwlsaXN0PSJmZXRjaCB1cGxvYWQiCitlbHNlCisJbGlzdD0iJEAiCitmaQorCitmb3IgaSBpbiAkbGlzdDsgZG8KKwljYXNlICIkaSIgaW4KKwlmZXRjaCkgcGdtPSJvbGQtZ2l0LWZldGNoLXBhY2siOyByZXBsYWNlPSIkcGdtIjs7CisJdXBsb2FkKSBwZ209Im9sZC1naXQtdXBsb2FkLXBhY2siOyByZXBsYWNlPSJnaXQtZmV0Y2gtcGFjayAtLWV4ZWM9JHBnbSI7OworCWJvdGgpIHBnbT0ib2xkLWdpdC11cGxvYWQtcGFjayI7IHJlcGxhY2U9Im9sZC1naXQtZmV0Y2gtcGFjayAtLWV4ZWM9JHBnbSI7OworCWVzYWMKKworCWlmIHdoaWNoICRwZ20gMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAiVGVzdGluZyB3aXRoICRwZ20iCisJCXNlZCAtZSAicy9naXQtZmV0Y2gtcGFjay8kcmVwbGFjZS9nIiBcCisJCQktZSAicy8jIG9sZCBmYWlscy93YXJuLyIgPCB0NTUwMC1mZXRjaC1wYWNrLnNoID4gJHRtcAorCisJCXNoICR0bXAgfHwgcmV0dmFsPSQ/CisJCXJtICR0bXAKKworCQl0ZXN0ICRyZXR2YWwgIT0gMCAmJiBleGl0ICRyZXR2YWwKKwllbHNlCisJCWVjaG8gIlNraXBwaW5nIHRlc3QgZm9yICRpLCBzaW5jZSBJIGNhbm5vdCBmaW5kICRwZ20iCisJZmkKK2RvbmUKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL3QvdDYwMDEtcmV2LWxpc3QtbWVyZ2Utb3JkZXIuc2ggYi90L3Q2MDAxLXJldi1saXN0LW1lcmdlLW9yZGVyLnNoCmluZGV4IDAxMDEyNDIuLjhlYzllYmIgMTAwNzU1Ci0tLSBhL3QvdDYwMDEtcmV2LWxpc3QtbWVyZ2Utb3JkZXIuc2gKKysrIGIvdC90NjAwMS1yZXYtbGlzdC1tZXJnZS1vcmRlci5zaApAQCAtMTA4LDcgKzEwOCw3IEBACiBzYXZlX3RhZyBnMyB1bmlxdWVfY29tbWl0IGc1IHRyZWUgLXAgZzIKIHNhdmVfdGFnIGc0IHVuaXF1ZV9jb21taXQgZzYgdHJlZSAtcCBnMyAtcCBoMgogCi10YWcgbDUgPiAuZ2l0L0hFQUQKK2dpdC11cGRhdGUtcmVmIEhFQUQgJCh0YWcgbDUpCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IGhhcyBjb3JyZWN0IG51bWJlciBvZiBlbnRyaWVzJyAnZ2l0LXJldi1saXN0IEhFQUQgfCB3YyAtbCB8IHRyIC1zICIgIicgPDxFT0YKIDE5CmRpZmYgLS1naXQgYS90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaCBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCmluZGV4IDQyZmNiYzYuLjY5M2RlOWIgMTAwNzU1Ci0tLSBhL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCisrKyBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCkBAIC01OCw3ICs1OCw3IEBACiBvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxNiIgc2F2ZV90YWcgbDMgdW5pcXVlX2NvbW1pdCBsMyB0cmVlIC1wIGE0CiBvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxNyIgc2F2ZV90YWcgbDQgdW5pcXVlX2NvbW1pdCBsNCB0cmVlIC1wIGwzCiBvbl9jb21taXR0ZXJfZGF0ZSAiMTk3MS0wOC0xNiAwMDowMDoxOCIgc2F2ZV90YWcgbDUgdW5pcXVlX2NvbW1pdCBsNSB0cmVlIC1wIGw0Ci10YWcgbDUgPiAuZ2l0L0hFQUQKK2dpdC11cGRhdGUtcmVmIEhFQUQgJCh0YWcgbDUpCiAKIAogIyAgICAgRQpkaWZmIC0tZ2l0IGEvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoIGIvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoCmluZGV4IDg4ZDE0ZWUuLjNjNGM0NGMgMTAwNzU1Ci0tLSBhL3QvdDYwMDMtcmV2LWxpc3QtdG9wby1vcmRlci5zaAorKysgYi90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2gKQEAgLTc3LDcgKzc3LDcgQEAKIHNhdmVfdGFnIGczIHVuaXF1ZV9jb21taXQgZzUgdHJlZSAtcCBnMgogc2F2ZV90YWcgZzQgdW5pcXVlX2NvbW1pdCBnNiB0cmVlIC1wIGczIC1wIGgyCiAKLXRhZyBsNSA+IC5naXQvSEVBRAorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgaGFzIGNvcnJlY3QgbnVtYmVyIG9mIGVudHJpZXMnICdnaXQtcmV2LWxpc3QgSEVBRCB8IHdjIC1sIHwgdHIgLXMgIiAiJyA8PEVPRgogMTkKZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCmluZGV4IDNmOGE2ZmUuLmE4ZjIzOWQgMTAwNzU1Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMTY0LDQgKzE2NCw4IEBACiBybSAtZnIgIiR0ZXN0IgogbWtkaXIgIiR0ZXN0IgogY2QgIiR0ZXN0IgotZ2l0LWluaXQtZGIgMj4vZGV2L251bGwgfHwgZXJyb3IgImNhbm5vdCBydW4gZ2l0LWluaXQtZGIiCitnaXQtaW5pdC1kYiAtLXRlbXBsYXRlPS4uLy4uL3RlbXBsYXRlcy9ibHQvIDI+L2Rldi9udWxsIHx8CitlcnJvciAiY2Fubm90IHJ1biBnaXQtaW5pdC1kYiIKKworbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCisKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy8uZ2l0aWdub3JlIGIvdGVtcGxhdGVzLy5naXRpZ25vcmUKaW5kZXggY2E2ODBjNS4uNjc1OWVjYiAxMDA2NDQKLS0tIGEvdGVtcGxhdGVzLy5naXRpZ25vcmUKKysrIGIvdGVtcGxhdGVzLy5naXRpZ25vcmUKQEAgLTEgKzEsMiBAQAogYmx0Citib2lsZXJwbGF0ZXMubWFkZQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL01ha2VmaWxlIGIvdGVtcGxhdGVzL01ha2VmaWxlCmluZGV4IGMyM2FlZTguLjA3ZTkyOGUgMTAwNjQ0Ci0tLSBhL3RlbXBsYXRlcy9NYWtlZmlsZQorKysgYi90ZW1wbGF0ZXMvTWFrZWZpbGUKQEAgLTYsNiArNiwxMiBAQAogdGVtcGxhdGVfZGlyID89ICQocHJlZml4KS9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMvCiAjIERFU1RESVI9CiAKKyMgU2hlbGwgcXVvdGU7CisjIFJlc3VsdCBvZiB0aGlzIG5lZWRzIHRvIGJlIHBsYWNlZCBpbnNpZGUgJycKK3NocSA9ICQoc3Vic3QgJywnXCcnLCQoMSkpCisjIFRoaXMgaGFzIHN1cnJvdW5kaW5nICcnCitzaGVsbHF1b3RlID0gJyQoY2FsbCBzaHEsJCgxKSknCisKIGFsbDogYm9pbGVycGxhdGVzLm1hZGUgY3VzdG9tCiAJZmluZCBibHQKIApAQCAtMzgsNiArNDQsNiBAQAogCXJtIC1yZiBibHQgYm9pbGVycGxhdGVzLm1hZGUKIAogaW5zdGFsbDogYWxsCi0JJChJTlNUQUxMKSAtZCAtbTc1NSAkKERFU1RESVIpJCh0ZW1wbGF0ZV9kaXIpCisJJChJTlNUQUxMKSAtZCAtbTc1NSAkKGNhbGwgc2hlbGxxdW90ZSwkKERFU1RESVIpJCh0ZW1wbGF0ZV9kaXIpKQogCShjZCBibHQgJiYgJChUQVIpIGNmIC0gLikgfCBcCi0JKGNkICQoREVTVERJUikkKHRlbXBsYXRlX2RpcikgJiYgJChUQVIpIHhmIC0pCisJKGNkICQoY2FsbCBzaGVsbHF1b3RlLCQoREVTVERJUikkKHRlbXBsYXRlX2RpcikpICYmICQoVEFSKSB4ZiAtKQpkaWZmIC0tZ2l0IGEvdHJlZS1kaWZmLmMgYi90cmVlLWRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWYwNmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJlZS1kaWZmLmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciB0cmVlIGRpZmYgZ2VuZXJhdGlvbgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisKKy8vIFdoYXQgcGF0aHMgYXJlIHdlIGludGVyZXN0ZWQgaW4/CitzdGF0aWMgaW50IG5yX3BhdGhzID0gMDsKK3N0YXRpYyBjb25zdCBjaGFyICoqcGF0aHMgPSBOVUxMOworc3RhdGljIGludCAqcGF0aGxlbnMgPSBOVUxMOworCitzdGF0aWMgdm9pZCB1cGRhdGVfdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjKQoreworCXZvaWQgKmJ1ZiA9IGRlc2MtPmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBkZXNjLT5zaXplOworCWludCBsZW4gPSBzdHJsZW4oYnVmKSArIDEgKyAyMDsKKworCWlmIChzaXplIDwgbGVuKQorCQlkaWUoImNvcnJ1cHQgdHJlZSBmaWxlIik7CisJZGVzYy0+YnVmID0gYnVmICsgbGVuOworCWRlc2MtPnNpemUgPSBzaXplIC0gbGVuOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICoqcGF0aHAsIHVuc2lnbmVkIGludCAqbW9kZXApCit7CisJdm9pZCAqdHJlZSA9IGRlc2MtPmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBkZXNjLT5zaXplOworCWludCBsZW4gPSBzdHJsZW4odHJlZSkrMTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gdHJlZSArIGxlbjsKKwljb25zdCBjaGFyICpwYXRoID0gc3RyY2hyKHRyZWUsICcgJyk7CisJdW5zaWduZWQgaW50IG1vZGU7CisKKwlpZiAoIXBhdGggfHwgc2l6ZSA8IGxlbiArIDIwIHx8IHNzY2FuZih0cmVlLCAiJW8iLCAmbW9kZSkgIT0gMSkKKwkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOworCSpwYXRocCA9IHBhdGgrMTsKKwkqbW9kZXAgPSBESUZGX0ZJTEVfQ0FOT05fTU9ERShtb2RlKTsKKwlyZXR1cm4gc2hhMTsKK30KKworc3RhdGljIGNoYXIgKm1hbGxvY19iYXNlKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuKQoreworCWludCBiYXNlbGVuID0gc3RybGVuKGJhc2UpOworCWNoYXIgKm5ld2Jhc2UgPSB4bWFsbG9jKGJhc2VsZW4gKyBwYXRobGVuICsgMik7CisJbWVtY3B5KG5ld2Jhc2UsIGJhc2UsIGJhc2VsZW4pOworCW1lbWNweShuZXdiYXNlICsgYmFzZWxlbiwgcGF0aCwgcGF0aGxlbik7CisJbWVtY3B5KG5ld2Jhc2UgKyBiYXNlbGVuICsgcGF0aGxlbiwgIi8iLCAyKTsKKwlyZXR1cm4gbmV3YmFzZTsKK30KKworc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpiYXNlKTsKKworc3RhdGljIGludCBjb21wYXJlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyLCBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJdW5zaWduZWQgbW9kZTEsIG1vZGUyOworCWNvbnN0IGNoYXIgKnBhdGgxLCAqcGF0aDI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgKnNoYTI7CisJaW50IGNtcCwgcGF0aGxlbjEsIHBhdGhsZW4yOworCisJc2hhMSA9IGV4dHJhY3QodDEsICZwYXRoMSwgJm1vZGUxKTsKKwlzaGEyID0gZXh0cmFjdCh0MiwgJnBhdGgyLCAmbW9kZTIpOworCisJcGF0aGxlbjEgPSBzdHJsZW4ocGF0aDEpOworCXBhdGhsZW4yID0gc3RybGVuKHBhdGgyKTsKKwljbXAgPSBiYXNlX25hbWVfY29tcGFyZShwYXRoMSwgcGF0aGxlbjEsIG1vZGUxLCBwYXRoMiwgcGF0aGxlbjIsIG1vZGUyKTsKKwlpZiAoY21wIDwgMCkgeworCQlzaG93X2VudHJ5KG9wdCwgIi0iLCB0MSwgYmFzZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNtcCA+IDApIHsKKwkJc2hvd19lbnRyeShvcHQsICIrIiwgdDIsIGJhc2UpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCFvcHQtPmZpbmRfY29waWVzX2hhcmRlciAmJgorCSAgICAhbWVtY21wKHNoYTEsIHNoYTIsIDIwKSAmJiBtb2RlMSA9PSBtb2RlMikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHRoZSBmaWxlbW9kZSBoYXMgY2hhbmdlZCB0by9mcm9tIGEgZGlyZWN0b3J5IGZyb20vdG8gYSByZWd1bGFyCisJICogZmlsZSwgd2UgbmVlZCB0byBjb25zaWRlciBpdCBhIHJlbW92ZSBhbmQgYW4gYWRkLgorCSAqLworCWlmIChTX0lTRElSKG1vZGUxKSAhPSBTX0lTRElSKG1vZGUyKSkgeworCQlzaG93X2VudHJ5KG9wdCwgIi0iLCB0MSwgYmFzZSk7CisJCXNob3dfZW50cnkob3B0LCAiKyIsIHQyLCBiYXNlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9wdC0+cmVjdXJzaXZlICYmIFNfSVNESVIobW9kZTEpKSB7CisJCWludCByZXR2YWw7CisJCWNoYXIgKm5ld2Jhc2UgPSBtYWxsb2NfYmFzZShiYXNlLCBwYXRoMSwgcGF0aGxlbjEpOworCQlpZiAob3B0LT50cmVlX2luX3JlY3Vyc2l2ZSkKKwkJCW9wdC0+Y2hhbmdlKG9wdCwgbW9kZTEsIG1vZGUyLAorCQkJCSAgICBzaGExLCBzaGEyLCBiYXNlLCBwYXRoMSk7CisJCXJldHZhbCA9IGRpZmZfdHJlZV9zaGExKHNoYTEsIHNoYTIsIG5ld2Jhc2UsIG9wdCk7CisJCWZyZWUobmV3YmFzZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJb3B0LT5jaGFuZ2Uob3B0LCBtb2RlMSwgbW9kZTIsIHNoYTEsIHNoYTIsIGJhc2UsIHBhdGgxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlcmVzdGluZyhzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpiYXNlKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJdW5zaWduZWQgbW9kZTsKKwlpbnQgaTsKKwlpbnQgYmFzZWxlbiwgcGF0aGxlbjsKKworCWlmICghbnJfcGF0aHMpCisJCXJldHVybiAxOworCisJKHZvaWQpZXh0cmFjdChkZXNjLCAmcGF0aCwgJm1vZGUpOworCisJcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKwliYXNlbGVuID0gc3RybGVuKGJhc2UpOworCisJZm9yIChpPTA7IGkgPCBucl9wYXRoczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gcGF0aHNbaV07CisJCWludCBtYXRjaGxlbiA9IHBhdGhsZW5zW2ldOworCisJCWlmIChiYXNlbGVuID49IG1hdGNobGVuKSB7CisJCQkvKiBJZiBpdCBkb2Vzbid0IG1hdGNoLCBtb3ZlIGFsb25nLi4uICovCisJCQlpZiAoc3RybmNtcChiYXNlLCBtYXRjaCwgbWF0Y2hsZW4pKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBUaGUgYmFzZSBpcyBhIHN1YmRpcmVjdG9yeSBvZiBhIHBhdGggd2hpY2ggd2FzIHNwZWNpZmllZC4gKi8KKwkJCXJldHVybiAxOworCQl9CisKKwkJLyogRG9lcyB0aGUgYmFzZSBtYXRjaD8gKi8KKwkJaWYgKHN0cm5jbXAoYmFzZSwgbWF0Y2gsIGJhc2VsZW4pKQorCQkJY29udGludWU7CisKKwkJbWF0Y2ggKz0gYmFzZWxlbjsKKwkJbWF0Y2hsZW4gLT0gYmFzZWxlbjsKKworCQlpZiAocGF0aGxlbiA+IG1hdGNobGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKG1hdGNobGVuID4gcGF0aGxlbikgeworCQkJaWYgKG1hdGNoW3BhdGhsZW5dICE9ICcvJykKKwkJCQljb250aW51ZTsKKwkJCWlmICghU19JU0RJUihtb2RlKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdHJuY21wKHBhdGgsIG1hdGNoLCBwYXRobGVuKSkKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsgLyogTm8gbWF0Y2hlcyAqLworfQorCisvKiBBIHdob2xlIHN1Yi10cmVlIHdlbnQgYXdheSBvciBhcHBlYXJlZCAqLworc3RhdGljIHZvaWQgc2hvd190cmVlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpiYXNlKQoreworCXdoaWxlIChkZXNjLT5zaXplKSB7CisJCWlmIChpbnRlcmVzdGluZyhkZXNjLCBiYXNlKSkKKwkJCXNob3dfZW50cnkob3B0LCBwcmVmaXgsIGRlc2MsIGJhc2UpOworCQl1cGRhdGVfdHJlZV9lbnRyeShkZXNjKTsKKwl9Cit9CisKKy8qIEEgZmlsZSBlbnRyeSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqYmFzZSkKK3sKKwl1bnNpZ25lZCBtb2RlOworCWNvbnN0IGNoYXIgKnBhdGg7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IGV4dHJhY3QoZGVzYywgJnBhdGgsICZtb2RlKTsKKworCWlmIChvcHQtPnJlY3Vyc2l2ZSAmJiBTX0lTRElSKG1vZGUpKSB7CisJCWNoYXIgdHlwZVsyMF07CisJCWNoYXIgKm5ld2Jhc2UgPSBtYWxsb2NfYmFzZShiYXNlLCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCQlzdHJ1Y3QgdHJlZV9kZXNjIGlubmVyOworCQl2b2lkICp0cmVlOworCisJCXRyZWUgPSByZWFkX3NoYTFfZmlsZShzaGExLCB0eXBlLCAmaW5uZXIuc2l6ZSk7CisJCWlmICghdHJlZSB8fCBzdHJjbXAodHlwZSwgInRyZWUiKSkKKwkJCWRpZSgiY29ycnVwdCB0cmVlIHNoYSAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCQlpbm5lci5idWYgPSB0cmVlOworCQlzaG93X3RyZWUob3B0LCBwcmVmaXgsICZpbm5lciwgbmV3YmFzZSk7CisKKwkJZnJlZSh0cmVlKTsKKwkJZnJlZShuZXdiYXNlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgcHJlZml4WzBdLCBtb2RlLCBzaGExLCBiYXNlLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRpZmZfdHJlZShzdHJ1Y3QgdHJlZV9kZXNjICp0MSwgc3RydWN0IHRyZWVfZGVzYyAqdDIsIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwl3aGlsZSAodDEtPnNpemUgfCB0Mi0+c2l6ZSkgeworCQlpZiAobnJfcGF0aHMgJiYgdDEtPnNpemUgJiYgIWludGVyZXN0aW5nKHQxLCBiYXNlKSkgeworCQkJdXBkYXRlX3RyZWVfZW50cnkodDEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5yX3BhdGhzICYmIHQyLT5zaXplICYmICFpbnRlcmVzdGluZyh0MiwgYmFzZSkpIHsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghdDEtPnNpemUpIHsKKwkJCXNob3dfZW50cnkob3B0LCAiKyIsIHQyLCBiYXNlKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghdDItPnNpemUpIHsKKwkJCXNob3dfZW50cnkob3B0LCAiLSIsIHQxLCBiYXNlKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN3aXRjaCAoY29tcGFyZV90cmVlX2VudHJ5KHQxLCB0MiwgYmFzZSwgb3B0KSkgeworCQljYXNlIC0xOgorCQkJdXBkYXRlX3RyZWVfZW50cnkodDEpOworCQkJY29udGludWU7CisJCWNhc2UgMDoKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQxKTsKKwkJCS8qIEZhbGx0aHJvdWdoICovCisJCWNhc2UgMToKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KHQyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRpZSgiZ2l0LWRpZmYtdHJlZTogaW50ZXJuYWwgZXJyb3IiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBkaWZmX3RyZWVfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpvbGQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXZvaWQgKnRyZWUxLCAqdHJlZTI7CisJc3RydWN0IHRyZWVfZGVzYyB0MSwgdDI7CisJaW50IHJldHZhbDsKKworCXRyZWUxID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uob2xkLCAidHJlZSIsICZ0MS5zaXplLCBOVUxMKTsKKwlpZiAoIXRyZWUxKQorCQlkaWUoInVuYWJsZSB0byByZWFkIHNvdXJjZSB0cmVlICglcykiLCBzaGExX3RvX2hleChvbGQpKTsKKwl0cmVlMiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKG5ldywgInRyZWUiLCAmdDIuc2l6ZSwgTlVMTCk7CisJaWYgKCF0cmVlMikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBkZXN0aW5hdGlvbiB0cmVlICglcykiLCBzaGExX3RvX2hleChuZXcpKTsKKwl0MS5idWYgPSB0cmVlMTsKKwl0Mi5idWYgPSB0cmVlMjsKKwlyZXR2YWwgPSBkaWZmX3RyZWUoJnQxLCAmdDIsIGJhc2UsIG9wdCk7CisJZnJlZSh0cmVlMSk7CisJZnJlZSh0cmVlMik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBjb3VudF9wYXRocyhjb25zdCBjaGFyICoqcGF0aHMpCit7CisJaW50IGkgPSAwOworCXdoaWxlICgqcGF0aHMrKykKKwkJaSsrOworCXJldHVybiBpOworfQorCit2b2lkIGRpZmZfdHJlZV9zZXR1cF9wYXRocyhjb25zdCBjaGFyICoqcCkKK3sKKwlpZiAocCkgeworCQlpbnQgaTsKKworCQlwYXRocyA9IHA7CisJCW5yX3BhdGhzID0gY291bnRfcGF0aHMocGF0aHMpOworCQlwYXRobGVucyA9IHhtYWxsb2MobnJfcGF0aHMgKiBzaXplb2YoaW50KSk7CisJCWZvciAoaT0wOyBpPG5yX3BhdGhzOyBpKyspCisJCQlwYXRobGVuc1tpXSA9IHN0cmxlbihwYXRoc1tpXSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdXBkYXRlLWluZGV4LmMgYi91cGRhdGUtaW5kZXguYwppbmRleCBiODI1YTExLi41YmJjM2RlIDEwMDY0NAotLS0gYS91cGRhdGUtaW5kZXguYworKysgYi91cGRhdGUtaW5kZXguYwpAQCAtNSw2ICs1LDcgQEAKICAqLwogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogLyoKICAqIERlZmF1bHQgdG8gbm90IGFsbG93aW5nIGNoYW5nZXMgdG8gdGhlIGxpc3Qgb2YgZmlsZXMuIFRoZQpAQCAtMTMsOCArMTQsMTUgQEAKICAqIGxpa2UgImdpdC11cGRhdGUtaW5kZXggKiIgYW5kIHN1ZGRlbmx5IGhhdmluZyBhbGwgdGhlIG9iamVjdAogICogZmlsZXMgYmUgcmV2aXNpb24gY29udHJvbGxlZC4KICAqLwotc3RhdGljIGludCBhbGxvd19hZGQgPSAwLCBhbGxvd19yZW1vdmUgPSAwLCBhbGxvd19yZXBsYWNlID0gMCwgYWxsb3dfdW5tZXJnZWQgPSAwLCBub3RfbmV3ID0gMCwgcXVpZXQgPSAwLCBpbmZvX29ubHkgPSAwOworc3RhdGljIGludCBhbGxvd19hZGQ7CitzdGF0aWMgaW50IGFsbG93X3JlbW92ZTsKK3N0YXRpYyBpbnQgYWxsb3dfcmVwbGFjZTsKK3N0YXRpYyBpbnQgYWxsb3dfdW5tZXJnZWQ7IC8qIC0tcmVmcmVzaCBuZWVkaW5nIG1lcmdlIGlzIG5vdCBlcnJvciAqLworc3RhdGljIGludCBub3RfbmV3OyAvKiAtLXJlZnJlc2ggbm90IGhhdmluZyB3b3JraW5nIHRyZWUgZmlsZXMgaXMgbm90IGVycm9yICovCitzdGF0aWMgaW50IHF1aWV0OyAvKiAtLXJlZnJlc2ggbmVlZGluZyB1cGRhdGUgaXMgbm90IGVycm9yICovCitzdGF0aWMgaW50IGluZm9fb25seTsKIHN0YXRpYyBpbnQgZm9yY2VfcmVtb3ZlOworc3RhdGljIGludCB2ZXJib3NlOwogCiAvKiBUaHJlZSBmdW5jdGlvbnMgdG8gYWxsb3cgb3ZlcmxvYWRlZCBwb2ludGVyIHJldHVybjsgc2VlIGxpbnV4L2Vyci5oICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKQEAgLTMyLDEzICs0MCwyNCBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZylwdHIgPiAodW5zaWduZWQgbG9uZyktMTAwMEw7CiB9CiAKK3N0YXRpYyB2b2lkIHJlcG9ydChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHZwOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwl2YV9zdGFydCh2cCwgZm10KTsKKwl2cHJpbnRmKGZtdCwgdnApOworCXB1dGNoYXIoJ1xuJyk7CisJdmFfZW5kKHZwKTsKK30KKwogc3RhdGljIGludCBhZGRfZmlsZV90b19jYWNoZShjb25zdCBjaGFyICpwYXRoKQogewogCWludCBzaXplLCBuYW1lbGVuLCBvcHRpb24sIHN0YXR1czsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCXN0cnVjdCBzdGF0IHN0OwotCWludCBmZDsKLQljaGFyICp0YXJnZXQ7CiAKIAlzdGF0dXMgPSBsc3RhdChwYXRoLCAmc3QpOwogCWlmIChzdGF0dXMgPCAwIHx8IFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKQEAgLTY5LDQyICs4OCwyNyBAQAogCQkJcmV0dXJuIGVycm9yKCJsc3RhdChcIiVzXCIpOiAlcyIsIHBhdGgsCiAJCQkJICAgICBzdHJlcnJvcihlcnJubykpOwogCX0KKwogCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CiAJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CiAJY2UgPSB4bWFsbG9jKHNpemUpOwogCW1lbXNldChjZSwgMCwgc2l6ZSk7CiAJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKTsKIAlmaWxsX3N0YXRfY2FjaGVfaW5mbyhjZSwgJnN0KTsKKwogCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUoc3Quc3RfbW9kZSk7Ci0JY2UtPmNlX2ZsYWdzID0gaHRvbnMobmFtZWxlbik7Ci0Jc3dpdGNoIChzdC5zdF9tb2RlICYgU19JRk1UKSB7Ci0JY2FzZSBTX0lGUkVHOgotCQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCQlpZiAoZmQgPCAwKQotCQkJcmV0dXJuIGVycm9yKCJvcGVuKFwiJXNcIik6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJaWYgKGluZGV4X2ZkKGNlLT5zaGExLCBmZCwgJnN0LCAhaW5mb19vbmx5LCBOVUxMKSA8IDApCi0JCQlyZXR1cm4gZXJyb3IoIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiLCBwYXRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lGTE5LOgotCQl0YXJnZXQgPSB4bWFsbG9jKHN0LnN0X3NpemUrMSk7Ci0JCWlmIChyZWFkbGluayhwYXRoLCB0YXJnZXQsIHN0LnN0X3NpemUrMSkgIT0gc3Quc3Rfc2l6ZSkgewotCQkJY2hhciAqZXJyc3RyID0gc3RyZXJyb3IoZXJybm8pOwotCQkJZnJlZSh0YXJnZXQpOwotCQkJcmV0dXJuIGVycm9yKCJyZWFkbGluayhcIiVzXCIpOiAlcyIsIHBhdGgsCi0JCQkgICAgICAgICAgICAgZXJyc3RyKTsKLQkJfQotCQlpZiAoaW5mb19vbmx5KSB7Ci0JCQl1bnNpZ25lZCBjaGFyIGhkcls1MF07Ci0JCQlpbnQgaGRybGVuOwotCQkJd3JpdGVfc2hhMV9maWxlX3ByZXBhcmUodGFyZ2V0LCBzdC5zdF9zaXplLCAiYmxvYiIsCi0JCQkJCQljZS0+c2hhMSwgaGRyLCAmaGRybGVuKTsKLQkJfSBlbHNlIGlmICh3cml0ZV9zaGExX2ZpbGUodGFyZ2V0LCBzdC5zdF9zaXplLCAiYmxvYiIsIGNlLT5zaGExKSkKLQkJCXJldHVybiBlcnJvcigiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIsIHBhdGgpOwotCQlmcmVlKHRhcmdldCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBlcnJvcigiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIsIHBhdGgpOworCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQpIHsKKwkJLyogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgZW50cnksIHBpY2sgdGhlIG1vZGUgYml0cworCQkgKiBmcm9tIGl0LgorCQkgKi8KKwkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIG5hbWVsZW4pOworCQlpZiAoMCA8PSBwb3MpCisJCQljZS0+Y2VfbW9kZSA9IGFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9tb2RlOwogCX0KKwljZS0+Y2VfZmxhZ3MgPSBodG9ucyhuYW1lbGVuKTsKKworCWlmIChpbmRleF9wYXRoKGNlLT5zaGExLCBwYXRoLCAmc3QsICFpbmZvX29ubHkpKQorCQlyZXR1cm4gLTE7CiAJb3B0aW9uID0gYWxsb3dfYWRkID8gQUREX0NBQ0hFX09LX1RPX0FERCA6IDA7CiAJb3B0aW9uIHw9IGFsbG93X3JlcGxhY2UgPyBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSA6IDA7CiAJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSkKQEAgLTI3NywxMiArMjgxLDQwIEBACiAJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKIAlvcHRpb24gPSBhbGxvd19hZGQgPyBBRERfQ0FDSEVfT0tfVE9fQUREIDogMDsKIAlvcHRpb24gfD0gYWxsb3dfcmVwbGFjZSA/IEFERF9DQUNIRV9PS19UT19SRVBMQUNFIDogMDsKLQlyZXR1cm4gYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pOworCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBhZGQgdG8gdGhlIGluZGV4IC0gbWlzc2luZyAtLWFkZCBvcHRpb24/IiwKKwkJCSAgICAgYXJnMyk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIGFyZzMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNobW9kX3BhdGgoaW50IGZsaXAsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXVuc2lnbmVkIGludCBtb2RlOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC0xOworCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKKwlpZiAoIVNfSVNSRUcobW9kZSkpCisJCXJldHVybiAtMTsKKwlzd2l0Y2ggKGZsaXApIHsKKwljYXNlICcrJzoKKwkJY2UtPmNlX21vZGUgfD0gaHRvbmwoMDExMSk7IGJyZWFrOworCWNhc2UgJy0nOgorCQljZS0+Y2VfbW9kZSAmPSBodG9ubCh+MDExMSk7IGJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGNhY2hlX2ZpbGUgY2FjaGVfZmlsZTsKIAotCiBzdGF0aWMgdm9pZCB1cGRhdGVfb25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeF9sZW5ndGgpCiB7CiAJY29uc3QgY2hhciAqcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgcGF0aCk7CkBAIC0yOTMsMTIgKzMyNSw3NiBAQAogCWlmIChmb3JjZV9yZW1vdmUpIHsKIAkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocCkpCiAJCQlkaWUoImdpdC11cGRhdGUtaW5kZXg6IHVuYWJsZSB0byByZW1vdmUgJXMiLCBwYXRoKTsKKwkJcmVwb3J0KCJyZW1vdmUgJyVzJyIsIHBhdGgpOwogCQlyZXR1cm47CiAJfQogCWlmIChhZGRfZmlsZV90b19jYWNoZShwKSkKIAkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBmaWxlICVzIiwgcGF0aCk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIHBhdGgpOwogfQogCitzdGF0aWMgdm9pZCByZWFkX2luZGV4X2luZm8oaW50IGxpbmVfdGVybWluYXRpb24pCit7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJc3RyYnVmX2luaXQoJmJ1Zik7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqcHRyOworCQljaGFyICpwYXRoX25hbWU7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXVuc2lnbmVkIGludCBtb2RlOworCisJCXJlYWRfbGluZSgmYnVmLCBzdGRpbiwgbGluZV90ZXJtaW5hdGlvbik7CisJCWlmIChidWYuZW9mKQorCQkJYnJlYWs7CisKKwkJbW9kZSA9IHN0cnRvdWwoYnVmLmJ1ZiwgJnB0ciwgOCk7CisJCWlmIChwdHIgPT0gYnVmLmJ1ZiB8fCAqcHRyICE9ICcgJyB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KHB0ciArIDEsIHNoYTEpIHx8CisJCSAgICBwdHJbNDFdICE9ICdcdCcpCisJCQlnb3RvIGJhZF9saW5lOworCisJCXB0ciArPSA0MjsKKworCQlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBwdHJbMF0gPT0gJyInKQorCQkJcGF0aF9uYW1lID0gdW5xdW90ZV9jX3N0eWxlKHB0ciwgTlVMTCk7CisJCWVsc2UKKwkJCXBhdGhfbmFtZSA9IHB0cjsKKworCQlpZiAoIXZlcmlmeV9wYXRoKHBhdGhfbmFtZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSWdub3JpbmcgcGF0aCAlc1xuIiwgcGF0aF9uYW1lKTsKKwkJCWlmIChwYXRoX25hbWUgIT0gcHRyKQorCQkJCWZyZWUocGF0aF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFtb2RlKSB7CisJCQkvKiBtb2RlID09IDAgbWVhbnMgdGhlcmUgaXMgbm8gc3VjaCBwYXRoIC0tIHJlbW92ZSAqLworCQkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aF9uYW1lKSkKKwkJCQlkaWUoImdpdC11cGRhdGUtaW5kZXg6IHVuYWJsZSB0byByZW1vdmUgJXMiLAorCQkJCSAgICBwdHIpOworCQl9CisJCWVsc2UgeworCQkJLyogbW9kZSAnICcgc2hhMSAnXHQnIG5hbWUKKwkJCSAqIHB0clstMV0gcG9pbnRzIGF0IHRhYiwKKwkJCSAqIHB0clstNDFdIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2hhMQorCQkJICovCisJCQlwdHJbLTQyXSA9IHB0clstMV0gPSAwOworCQkJaWYgKGFkZF9jYWNoZWluZm8oYnVmLmJ1ZiwgcHRyLTQxLCBwYXRoX25hbWUpKQorCQkJCWRpZSgiZ2l0LXVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHVwZGF0ZSAlcyIsCisJCQkJICAgIHBhdGhfbmFtZSk7CisJCX0KKwkJaWYgKHBhdGhfbmFtZSAhPSBwdHIpCisJCQlmcmVlKHBhdGhfbmFtZSk7CisJCWNvbnRpbnVlOworCisJYmFkX2xpbmU6CisJCWRpZSgibWFsZm9ybWVkIGluZGV4IGluZm8gJXMiLCBidWYuYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHVwZGF0ZV9pbmRleF91c2FnZVtdID0KKyJnaXQtdXBkYXRlLWluZGV4IFstcV0gWy0tYWRkXSBbLS1yZXBsYWNlXSBbLS1yZW1vdmVdIFstLXVubWVyZ2VkXSBbLS1yZWZyZXNoXSBbLS1jYWNoZWluZm9dIFstLWNobW9kPSgrfC0peF0gWy0taW5mby1vbmx5XSBbLS1mb3JjZS1yZW1vdmVdIFstLXN0ZGluXSBbLS1pbmRleC1pbmZvXSBbLS1pZ25vcmUtbWlzc2luZ10gWy16XSBbLS12ZXJib3NlXSBbLS1dIDxmaWxlPi4uLiI7CisKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgaSwgbmV3ZmQsIGVudHJpZXMsIGhhc19lcnJvcnMgPSAwLCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKQEAgLTMwNyw2ICs0MDMsOCBAQAogCWNvbnN0IGNoYXIgKnByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlpbnQgcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKIAorCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwogCW5ld2ZkID0gaG9sZF9pbmRleF9maWxlX2Zvcl91cGRhdGUoJmNhY2hlX2ZpbGUsIGdldF9pbmRleF9maWxlKCkpOwogCWlmIChuZXdmZCA8IDApCiAJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSBuZXcgY2FjaGVmaWxlIik7CkBAIC0zNTUsNiArNDUzLDE0IEBACiAJCQkJaSArPSAzOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0tY2htb2Q9LXgiKSB8fAorCQkJICAgICFzdHJjbXAocGF0aCwgIi0tY2htb2Q9K3giKSkgeworCQkJCWlmIChhcmdjIDw9IGkrMSkKKwkJCQkJZGllKCJnaXQtdXBkYXRlLWluZGV4OiAlcyA8cGF0aD4iLCBwYXRoKTsKKwkJCQlpZiAoY2htb2RfcGF0aChwYXRoWzhdLCBhcmd2WysraV0pKQorCQkJCQlkaWUoImdpdC11cGRhdGUtaW5kZXg6ICVzIGNhbm5vdCBjaG1vZCAlcyIsIHBhdGgsIGFyZ3ZbaV0pOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0taW5mby1vbmx5IikpIHsKIAkJCQlpbmZvX29ubHkgPSAxOwogCQkJCWNvbnRpbnVlOwpAQCAtMzczLDEwICs0NzksMjEgQEAKIAkJCQlyZWFkX2Zyb21fc3RkaW4gPSAxOwogCQkJCWJyZWFrOwogCQkJfQorCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0taW5kZXgtaW5mbyIpKSB7CisJCQkJYWxsb3dfYWRkID0gYWxsb3dfcmVwbGFjZSA9IGFsbG93X3JlbW92ZSA9IDE7CisJCQkJcmVhZF9pbmRleF9pbmZvKGxpbmVfdGVybWluYXRpb24pOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0taWdub3JlLW1pc3NpbmciKSkgewogCQkJCW5vdF9uZXcgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0tdmVyYm9zZSIpKSB7CisJCQkJdmVyYm9zZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChwYXRoLCAiLWgiKSB8fCAhc3RyY21wKHBhdGgsICItLWhlbHAiKSkKKwkJCQl1c2FnZSh1cGRhdGVfaW5kZXhfdXNhZ2UpOwogCQkJZGllKCJ1bmtub3duIG9wdGlvbiAlcyIsIHBhdGgpOwogCQl9CiAJCXVwZGF0ZV9vbmUocGF0aCwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL3VwZGF0ZS1yZWYuYyBiL3VwZGF0ZS1yZWYuYwppbmRleCA0YTE3MDRjLi42NWRjM2Q2IDEwMDY0NAotLS0gYS91cGRhdGUtcmVmLmMKKysrIGIvdXBkYXRlLXJlZi5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicmVmcy5oIgotI2luY2x1ZGUgPGN0eXBlLmg+CiAKIHN0YXRpYyBjb25zdCBjaGFyIGdpdF91cGRhdGVfcmVmX3VzYWdlW10gPSAiZ2l0LXVwZGF0ZS1yZWYgPHJlZm5hbWU+IDx2YWx1ZT4gWzxvbGR2YWw+XSI7CiAKZGlmZiAtLWdpdCBhL3VwbG9hZC1wYWNrLmMgYi91cGxvYWQtcGFjay5jCmluZGV4IDgwYTVkMDkuLmM1ZWZmMjEgMTAwNjQ0Ci0tLSBhL3VwbG9hZC1wYWNrLmMKKysrIGIvdXBsb2FkLXBhY2suYwpAQCAtMSwxMiArMSwxOCBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHVwbG9hZF9wYWNrX3VzYWdlW10gPSAiZ2l0LXVwbG9hZC1wYWNrIFstLXN0cmljdF0gWy0tdGltZW91dD1ubl0gPGRpcj4iOwogCi0jZGVmaW5lIE1BWF9IQVMgKDE2KQotI2RlZmluZSBNQVhfTkVFRFMgKDI1NikKLXN0YXRpYyBpbnQgbnJfaGFzID0gMCwgbnJfbmVlZHMgPSAwOworI2RlZmluZSBUSEVZX0hBVkUgKDFVIDw8IDApCisjZGVmaW5lIE9VUl9SRUYgKDFVIDw8IDEpCisjZGVmaW5lIFdBTlRFRCAoMVUgPDwgMikKKyNkZWZpbmUgTUFYX0hBUyAyNTYKKyNkZWZpbmUgTUFYX05FRURTIDI1Ngorc3RhdGljIGludCBucl9oYXMgPSAwLCBucl9uZWVkcyA9IDAsIG11bHRpX2FjayA9IDAsIG5yX291cl9yZWZzID0gMDsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhc19zaGExW01BWF9IQVNdWzIwXTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG5lZWRzX3NoYTFbTUFYX05FRURTXVsyMF07CiBzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQgPSAwOwpAQCAtMjcsNiArMzMsNyBAQAogewogCWludCBmZFsyXTsKIAlwaWRfdCBwaWQ7CisJaW50IGNyZWF0ZV9mdWxsX3BhY2sgPSAobnJfb3VyX3JlZnMgPT0gbnJfbmVlZHMgJiYgIW5yX2hhcyk7CiAKIAlpZiAocGlwZShmZCkgPCAwKQogCQlkaWUoImdpdC11cGxvYWQtcGFjazogdW5hYmxlIHRvIGNyZWF0ZSBwaXBlIik7CkBAIC00MSw4ICs0OCw4IEBACiAJCWNoYXIgKmJ1ZjsKIAkJY2hhciAqKnA7CiAKLQkJaWYgKE1BWF9ORUVEUyA8PSBucl9uZWVkcykKLQkJCWFyZ3MgPSBucl9oYXMgKyAxMDsKKwkJaWYgKGNyZWF0ZV9mdWxsX3BhY2spCisJCQlhcmdzID0gMTA7CiAJCWVsc2UKIAkJCWFyZ3MgPSBucl9oYXMgKyBucl9uZWVkcyArIDU7CiAJCWFyZ3YgPSB4bWFsbG9jKGFyZ3MgKiBzaXplb2YoY2hhciAqKSk7CkBAIC01NSw3ICs2Miw3IEBACiAJCWNsb3NlKGZkWzFdKTsKIAkJKnArKyA9ICJnaXQtcmV2LWxpc3QiOwogCQkqcCsrID0gIi0tb2JqZWN0cyI7Ci0JCWlmIChNQVhfTkVFRFMgPD0gbnJfbmVlZHMpCisJCWlmIChjcmVhdGVfZnVsbF9wYWNrIHx8IE1BWF9ORUVEUyA8PSBucl9uZWVkcykKIAkJCSpwKysgPSAiLS1hbGwiOwogCQllbHNlIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBucl9uZWVkczsgaSsrKSB7CkBAIC02NCwxMiArNzEsMTMgQEAKIAkJCQlidWYgKz0gNDE7CiAJCQl9CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IG5yX2hhczsgaSsrKSB7Ci0JCQkqcCsrID0gYnVmOwotCQkJKmJ1ZisrID0gJ14nOwotCQkJbWVtY3B5KGJ1Ziwgc2hhMV90b19oZXgoaGFzX3NoYTFbaV0pLCA0MSk7Ci0JCQlidWYgKz0gNDE7Ci0JCX0KKwkJaWYgKCFjcmVhdGVfZnVsbF9wYWNrKQorCQkJZm9yIChpID0gMDsgaSA8IG5yX2hhczsgaSsrKSB7CisJCQkJKnArKyA9IGJ1ZjsKKwkJCQkqYnVmKysgPSAnXic7CisJCQkJbWVtY3B5KGJ1Ziwgc2hhMV90b19oZXgoaGFzX3NoYTFbaV0pLCA0MSk7CisJCQkJYnVmICs9IDQxOworCQkJfQogCQkqcCsrID0gTlVMTDsKIAkJZXhlY3ZwKCJnaXQtcmV2LWxpc3QiLCBhcmd2KTsKIAkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IHVuYWJsZSB0byBleGVjIGdpdC1yZXYtbGlzdCIpOwpAQCAtODMsMTUgKzkxLDI3IEBACiAKIHN0YXRpYyBpbnQgZ290X3NoYTEoY2hhciAqaGV4LCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWludCBucjsKIAlpZiAoZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSkpCiAJCWRpZSgiZ2l0LXVwbG9hZC1wYWNrOiBleHBlY3RlZCBTSEExIG9iamVjdCwgZ290ICclcyciLCBoZXgpOwogCWlmICghaGFzX3NoYTFfZmlsZShzaGExKSkKIAkJcmV0dXJuIDA7Ci0JbnIgPSBucl9oYXM7Ci0JaWYgKG5yIDwgTUFYX0hBUykgewotCQltZW1jcHkoaGFzX3NoYTFbbnJdLCBzaGExLCAyMCk7Ci0JCW5yX2hhcyA9IG5yKzE7CisJaWYgKG5yX2hhcyA8IE1BWF9IQVMpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGxvb2t1cF9vYmplY3Qoc2hhMSk7CisJCWlmICghKG8gJiYgby0+cGFyc2VkKSkKKwkJCW8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJCWlmICghbykKKwkJCWRpZSgib29wcyAoJXMpIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQlpZiAoby0+dHlwZSA9PSBjb21taXRfdHlwZSkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJaWYgKG8tPmZsYWdzICYgVEhFWV9IQVZFKQorCQkJCXJldHVybiAwOworCQkJby0+ZmxhZ3MgfD0gVEhFWV9IQVZFOworCQkJZm9yIChwYXJlbnRzID0gKChzdHJ1Y3QgY29tbWl0KilvKS0+cGFyZW50czsKKwkJCSAgICAgcGFyZW50czsKKwkJCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQkJcGFyZW50cy0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRIRVlfSEFWRTsKKwkJfQorCQltZW1jcHkoaGFzX3NoYTFbbnJfaGFzKytdLCBzaGExLCAyMCk7CiAJfQogCXJldHVybiAxOwogfQpAQCAtOTksNDcgKzExOSw0NyBAQAogc3RhdGljIGludCBnZXRfY29tbW9uX2NvbW1pdHModm9pZCkKIHsKIAlzdGF0aWMgY2hhciBsaW5lWzEwMDBdOwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgbGFzdF9zaGExWzIwXTsKIAlpbnQgbGVuOwogCisJdHJhY2tfb2JqZWN0X3JlZnMgPSAwOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKIAlmb3IoOzspIHsKIAkJbGVuID0gcGFja2V0X3JlYWRfbGluZSgwLCBsaW5lLCBzaXplb2YobGluZSkpOwogCQlyZXNldF90aW1lb3V0KCk7CiAKIAkJaWYgKCFsZW4pIHsKLQkJCXBhY2tldF93cml0ZSgxLCAiTkFLXG4iKTsKKwkJCWlmIChucl9oYXMgPT0gMCB8fCBtdWx0aV9hY2spCisJCQkJcGFja2V0X3dyaXRlKDEsICJOQUtcbiIpOwogCQkJY29udGludWU7CiAJCX0KIAkJbGVuID0gc3RyaXAobGluZSwgbGVuKTsKIAkJaWYgKCFzdHJuY21wKGxpbmUsICJoYXZlICIsIDUpKSB7Ci0JCQlpZiAoZ290X3NoYTEobGluZSs1LCBzaGExKSkgewotCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7Ci0JCQkJYnJlYWs7CisJCQlpZiAoZ290X3NoYTEobGluZSs1LCBzaGExKSAmJgorCQkJCQkobXVsdGlfYWNrIHx8IG5yX2hhcyA9PSAxKSkgeworCQkJCWlmIChucl9oYXMgPj0gTUFYX0hBUykKKwkJCQkJbXVsdGlfYWNrID0gMDsKKwkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlcyVzXG4iLAorCQkJCQlzaGExX3RvX2hleChzaGExKSwKKwkJCQkJbXVsdGlfYWNrID8gICIgY29udGludWUiIDogIiIpOworCQkJCWlmIChtdWx0aV9hY2spCisJCQkJCW1lbWNweShsYXN0X3NoYTEsIHNoYTEsIDIwKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKGxpbmUsICJkb25lIikpIHsKKwkJCWlmIChucl9oYXMgPiAwKSB7CisJCQkJaWYgKG11bHRpX2FjaykKKwkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXNcbiIsCisJCQkJCQkJc2hhMV90b19oZXgobGFzdF9zaGExKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCQlwYWNrZXRfd3JpdGUoMSwgIk5BS1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IGV4cGVjdGVkIFNIQTEgbGlzdCwgZ290ICclcyciLCBsaW5lKTsKIAl9Ci0KLQlmb3IgKDs7KSB7Ci0JCWxlbiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKLQkJcmVzZXRfdGltZW91dCgpOwotCQlpZiAoIWxlbikKLQkJCWNvbnRpbnVlOwotCQlsZW4gPSBzdHJpcChsaW5lLCBsZW4pOwotCQlpZiAoIXN0cm5jbXAobGluZSwgImhhdmUgIiwgNSkpIHsKLQkJCWdvdF9zaGExKGxpbmUrNSwgc2hhMSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChsaW5lLCAiZG9uZSIpKQotCQkJYnJlYWs7Ci0JCWRpZSgiZ2l0LXVwbG9hZC1wYWNrOiBleHBlY3RlZCBTSEExIGxpc3QsIGdvdCAnJXMnIiwgbGluZSk7Ci0JfQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJlY2VpdmVfbmVlZHModm9pZCkKQEAgLTE0OSw2ICsxNjksNyBAQAogCiAJbmVlZHMgPSAwOwogCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdCAqbzsKIAkJdW5zaWduZWQgY2hhciBkdW1teVsyMF0sICpzaGExX2J1ZjsKIAkJbGVuID0gcGFja2V0X3JlYWRfbGluZSgwLCBsaW5lLCBzaXplb2YobGluZSkpOwogCQlyZXNldF90aW1lb3V0KCk7CkBAIC0xNjgsMTMgKzE4OSw0NiBAQAogCQlpZiAoc3RybmNtcCgid2FudCAiLCBsaW5lLCA1KSB8fCBnZXRfc2hhMV9oZXgobGluZSs1LCBzaGExX2J1ZikpCiAJCQlkaWUoImdpdC11cGxvYWQtcGFjazogcHJvdG9jb2wgZXJyb3IsICIKIAkJCSAgICAiZXhwZWN0ZWQgdG8gZ2V0IHNoYSwgbm90ICclcyciLCBsaW5lKTsKLQkJbmVlZHMrKzsKKwkJaWYgKHN0cnN0cihsaW5lKzQ1LCAibXVsdGlfYWNrIikpCisJCQltdWx0aV9hY2sgPSAxOworCisJCS8qIFdlIGhhdmUgc2VudCBhbGwgb3VyIHJlZnMgYWxyZWFkeSwgYW5kIHRoZSBvdGhlciBlbmQKKwkJICogc2hvdWxkIGhhdmUgY2hvc2VuIG91dCBvZiB0aGVtOyBvdGhlcndpc2UgdGhleSBhcmUKKwkJICogYXNraW5nIGZvciBub25zZW5zZS4KKwkJICoKKwkJICogSG1waC4gIFdlIG1heSBsYXRlciB3YW50IHRvIGFsbG93ICJ3YW50IiBsaW5lIHRoYXQKKwkJICogYXNrcyBmb3Igc29tZXRoaW5nIGxpa2UgIm1hc3Rlcn4xMCIgKHN5bWJvbGljKS4uLgorCQkgKiB3b3VsZCBpdCBtYWtlIHNlbnNlPyAgSSBkb24ndCBrbm93LgorCQkgKi8KKwkJbyA9IGxvb2t1cF9vYmplY3Qoc2hhMV9idWYpOworCQlpZiAoIW8gfHwgIShvLT5mbGFncyAmIE9VUl9SRUYpKQorCQkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwgbGluZSs1KTsKKwkJaWYgKCEoby0+ZmxhZ3MgJiBXQU5URUQpKSB7CisJCQlvLT5mbGFncyB8PSBXQU5URUQ7CisJCQluZWVkcysrOworCQl9CiAJfQogfQogCiBzdGF0aWMgaW50IHNlbmRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0JcGFja2V0X3dyaXRlKDEsICIlcyAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIHJlZm5hbWUpOworCXN0YXRpYyBjaGFyICpjYXBhYmlsaXRpZXMgPSAibXVsdGlfYWNrIjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCisJaWYgKGNhcGFiaWxpdGllcykKKwkJcGFja2V0X3dyaXRlKDEsICIlcyAlcyVjJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCByZWZuYW1lLAorCQkJMCwgY2FwYWJpbGl0aWVzKTsKKwllbHNlCisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCByZWZuYW1lKTsKKwljYXBhYmlsaXRpZXMgPSBOVUxMOworCWlmICghKG8tPmZsYWdzICYgT1VSX1JFRikpIHsKKwkJby0+ZmxhZ3MgfD0gT1VSX1JFRjsKKwkJbnJfb3VyX3JlZnMrKzsKKwl9CisJaWYgKG8tPnR5cGUgPT0gdGFnX3R5cGUpIHsKKwkJbyA9IGRlcmVmX3RhZyhvKTsKKwkJcGFja2V0X3dyaXRlKDEsICIlcyAlc157fVxuIiwgc2hhMV90b19oZXgoby0+c2hhMSksIHJlZm5hbWUpOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdmFyLmMgYi92YXIuYwppbmRleCAzZjEzMTI2Li41MWNmODZhIDEwMDY0NAotLS0gYS92YXIuYworKysgYi92YXIuYwpAQCAtNDIsNiArNDIsMTUgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW50IHNob3dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlwcmludGYoIiVzPSVzXG4iLCB2YXIsIHZhbHVlKTsKKwllbHNlCisJCXByaW50ZigiJXNcbiIsIHZhcik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWNvbnN0IGNoYXIgKnZhbDsKQEAgLTUyLDkgKzYxLDExIEBACiAJdmFsID0gTlVMTDsKIAogCWlmIChzdHJjbXAoYXJndlsxXSwgIi1sIikgPT0gMCkgeworCQlnaXRfY29uZmlnKHNob3dfY29uZmlnKTsKIAkJbGlzdF92YXJzKCk7CiAJCXJldHVybiAwOwogCX0KKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CiAJdmFsID0gcmVhZF92YXIoYXJndlsxXSk7CiAJaWYgKCF2YWwpCiAJCXVzYWdlKHZhcl91c2FnZSk7CmRpZmYgLS1naXQgYS92ZXJpZnktcGFjay5jIGIvdmVyaWZ5LXBhY2suYwppbmRleCA4MGI2MGE2Li5jOTlkYjlkZCAxMDA2NDQKLS0tIGEvdmVyaWZ5LXBhY2suYworKysgYi92ZXJpZnktcGFjay5jCkBAIC0xNSwxMiArMTUsMTIgQEAKIAkJCWxlbi0tOwogCQl9CiAJCS8qIFNob3VsZCBuYW1lIGZvby5pZHggbm93ICovCi0JCWlmICgoZyA9IGFkZF9wYWNrZWRfZ2l0KGFyZywgbGVuKSkpCisJCWlmICgoZyA9IGFkZF9wYWNrZWRfZ2l0KGFyZywgbGVuLCAxKSkpCiAJCQlicmVhazsKIAkJLyogTm8/ICBkaWQgeW91IG5hbWUganVzdCBmb28/ICovCiAJCXN0cmNweShhcmcgKyBsZW4sICIuaWR4Iik7CiAJCWxlbiArPSA0OwotCQlpZiAoKGcgPSBhZGRfcGFja2VkX2dpdChhcmcsIGxlbikpKQorCQlpZiAoKGcgPSBhZGRfcGFja2VkX2dpdChhcmcsIGxlbiwgMSkpKQogCQkJYnJlYWs7CiAJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgbm90IGZvdW5kLiIsIGFyZyk7CiAJfQo=