ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggOTBmZjA5ZC4uYTkwZTBkYiAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTQgKzEsMTQgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NjA0Mjggb2YgV2luZSB0aGUgTVMgV2luZG93cyBlbXVsYXRvci4gIFRoaXMgaXMgc3RpbGwgYQorVGhpcyBpcyByZWxlYXNlIDk2MDUwNiBvZiBXaW5lIHRoZSBNUyBXaW5kb3dzIGVtdWxhdG9yLiAgVGhpcyBpcyBzdGlsbCBhCiBkZXZlbG9wZXIncyBvbmx5IHJlbGVhc2UuICBUaGVyZSBhcmUgbWFueSBidWdzIGFuZCBtYW55IHVuaW1wbGVtZW50ZWQgQVBJCiBmZWF0dXJlcy4gIE1vc3QgYXBwbGljYXRpb25zIHN0aWxsIGRvIG5vdCB3b3JrLgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk2MDQyODogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBWRVIuRExMLgotCS0gU3V1cG9ydCBmb3IgS29yZWFuIFtLb10gbGFuZ3VhZ2UuCi0JLSBNb3JlIFdpbjMyIGZ1bmN0aW9ucy4KK1dIQVQnUyBORVcgd2l0aCBXaW5lLTk2MDUwNjogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCisJLSBNb3ZlYWJsZSBhbmQgZGlzY2FyZGFibGUgYmxvY2tzIGluIGxvY2FsIGhlYXAuCisJLSBDb21ib2JveGVzIGltcHJvdmVtZW50cy4KKwktIFdpbmhlbHAgY2xvbmUgdXNpbmcgV2luZWxpYi4KIAktIExvdHMgb2YgYnVnIGZpeGVzLgogCiBTZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCkBAIC0xNywxMCArMTcsMTAgQEAKIHRoZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBhdCB0aGUgZnRwIHNpdGVzLiAgVGhlIHNvdXJjZXMgd2lsbCBiZSBhdmFpbGFibGUKIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CiAKLSAgICBzdW5zaXRlLnVuYy5lZHU6L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTYwNDI4LnRhci5negotICAgIHRzeC0xMS5taXQuZWR1Oi9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDQyOC50YXIuZ3oKLSAgICBmdHAuaW5mb21hZ2ljLmNvbTovcHViL21pcnJvcnMvbGludXgvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDQyOC50YXIuZ3oKLSAgICBhcmlzLmNvbTovcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA0MjgudGFyLmd6CisgICAgc3Vuc2l0ZS51bmMuZWR1Oi9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDUwNi50YXIuZ3oKKyAgICB0c3gtMTEubWl0LmVkdTovcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA1MDYudGFyLmd6CisgICAgZnRwLmluZm9tYWdpYy5jb206L3B1Yi9taXJyb3JzL2xpbnV4L3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA1MDYudGFyLmd6CisgICAgYXJpcy5jb206L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTYwNTA2LnRhci5negogCiBJdCBzaG91bGQgYWxzbyBiZSBhdmFpbGFibGUgZnJvbSBhbnkgc2l0ZSB0aGF0IG1pcnJvcnMgdHN4LTExIG9yIHN1bnNpdGUuCiAKQEAgLTMwLDggKzMwLDYgQEAKIElmIHlvdSB3YW50IHRvIGdldCB0aGUgbmV3IHJlbGVhc2VzIGZhc3RlciwgeW91IGNhbiBzdWJzY3JpYmUgdG8gdGhlCiB3aW5lLXBhdGNoZXMgbWFpbGluZyBsaXN0IGJ5IHNlbmRpbmcgYSBtYWlsIGNvbnRhaW5pbmcgJ3N1YnNjcmliZQogd2luZS1wYXRjaGVzIHlvdXJfYWRkcmVzcycgdG8gbWFqb3Jkb21vQHRpZ2VyLmluZm9ybWF0aWsuaHUtYmVybGluLmRlLgotVG8gYXZvaWQgb3ZlcmxvYWRpbmcgdGhlIG1haWwgaG9zdCwgcGxlYXNlIHN1YnNjcmliZSBvbmx5IGlmIHlvdQotcmVhbGx5IGludGVuZCB0byB0ZXN0IHRoZSBuZXcgcmVsZWFzZXMgYXMgc29vbiBhcyB0aGV5J3JlIG91dC4KIAogV2luZSBpcyBhdmFpbGFibGUgdGhhbmtzIHRvIHRoZSB3b3JrIG9mIEJvYiBBbXN0YWR0LCBEYWcgQXNoZWltLAogTWFydGluIEF5b3R0ZSwgUm9zcyBCaXJvLCBVd2UgQm9ubmVzLCBFcmlrIEJvcywgRm9ucyBCb3RtYW4sIEpvaG4gQnJlemFrLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGRlMTc0NjYuLmU4YjA2ZWEgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsNCArMSwxMDIgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01vbiBNYXkgIDYgMTI6NTY6MjYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CisKKwkqIFtERVZFTE9QRVJTLUhJTlRTXQorCUFkZGVkIHBhcmFncmFwaCBvbiBuYW1pbmcgY29udmVudGlvbnMgZm9yIFdpbjE2L1dpbjMyL1dpbmVsaWIuCisKKwkqIFtjb250cm9scy9tZW51LmNdCisJQ3JlYXRlIGEgZGVmYXVsdCBzeXN0ZW0gbWVudSB0aGF0IGlzIHRoZSBzYW1lIGZvciBhbGwgd2luZG93cworCWluc3RlYWQgb2YgbWFraW5nIGEgY29weSBldmVyeSB0aW1lLgorCisJKiBbaW5jbHVkZS93aW50eXBlcy5oXQorCUFkZGVkIFdJTkVMSUJfTkFNRSBhbmQgREVDTF9XSU5FTElCX1RZUEUgbWFjcm9zLgorCUFkZGVkIHh4MTYgYW5kIHh4MzIgZGVmaW5pdGlvbnMgZm9yIG1vc3QgdHlwZXMuIEdlbmVyYWwgY2xlYW4tdXAuCisKKwkqIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvbG9jYWwuY10gWyovKl0KKwlSZW5hbWVkIEdsb2JhbCBhbmQgTG9jYWwgaGVhcCBmdW5jdGlvbnMgdG8geHh4MTYuIEFkZGVkIGFsbCB4eHgzMgorCXZlcnNpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9ucy4KKworCSogW21lbW9yeS9zZWxlY3Rvci5jXQorCU1hc2sgb3V0IGxvd2VyIGJpdHMgb2Ygc2VsZWN0b3IgaW4gRnJlZVNlbGVjdG9yKCkuCisKKwkqIFttaXNjL2xzdHIuY10KKwlGaXhlZCB3dnNwcmludGYoKS4KKworCSogW3dpbmRvd3MvY2xhc3MuY10KKwlDaGFuZ2VkIHRoZSBjbGFzcyBzdHJ1Y3R1cmUgdG8gbWFrZSBXaW4zMiBzdXBwb3J0IGVhc2llci4KKworCSogW3dpbmRvd3MvZGVmd25kLmNdCisJQWRkZWQgaGFuZGxpbmcgb2YgV01fSU5JVE1FTlVQT1BVUCBmb3Igc3lzdGVtIG1lbnUgdG8gZ3JheSBvdXQKKwlpbnZhbGlkIG9wdGlvbnMuCisKKwkqIFt3aW5kb3dzL3dpbnBvcy5jXQorCUJ1ZyBmaXg6IHRoZSBXSU5ET1NQT1Mgc3RydWN0dXJlIHBvaW50ZXIgaW4gV01fTkNDQUxDU0laRSBtdXN0IGJlCisJYSBTRUdQVFIuCisKK1N1biBNYXkgIDUgMDM6NTE6MjYgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgorCisJKiBbbWVtb3J5L2xvY2FsLmNdCisJSW1wbGVtZW50YXRpb24gb2YgbW92ZWFibGUgYW5kIChydWRpbWVudGFyeSkgc3VwcG9ydCBmb3IKKyAJZGlzY2FyZGFibGUgbG9jYWwgbWVtb3J5LCBwbHVzIHNldmVyYWwgYnVnIGZpeGVzLgorCitTYXQgTWF5ICA0IDE4OjMzOjM1IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCisJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3dpbi5jXSBbaWYxNjMyL3VzZXIuc3BlY10gCisJRmluZFdpbmRvd0V4KCkgaW1wbGVtZW50ZWQgKHNvbWVvbmUgcmVwb3J0ZWQgaXQgd2FzIG1pc3NpbmcKKwlmb3IgRnJhbWVNYWtlciA0LjEpLgorCisJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFt3aW4zMi9tZW1vcnkuY10KKwkgIFt3aW4zMi9yZXNvdXJjZS5jXQorCU1pc2Mgc21hbGwgc3R1YnMvc21hbGwgZnVuY3Rpb25zIHdoaWNoIGJyaW5nIHdpbjk1IGJpbmFyaWVzCisJZnVydGhlciBkb3duIHRoZSByb2FkLiAoSXNCYWRDb2RlUHRyLCBMb2NhbFJlQWxsb2MsR2V0Q3Vyc29yUG9zKQorCVNtYWxsIGZpeCBpbiBXSU4zMl9Mb2FkQWNjZWxlcmF0b3JzQS4KKworRnJpIE1heSAgMyAxOTo0MzoxMiAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEuTGVpZGVuVW5pdi5ubD4KKworCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KKwlDaGFuZ2VkIC8gZml4ZWQgc29tZSB0eXBlcyBhbmQgdHlwZWNhc3RzLgorCUZpeGVkIHRoZSBzY3JvbGxiYXIgcmVzZXQgYWZ0ZXIgV01fU0VUSEFORExFIC8gV01fU0VUVEVYVC4KKwlBZGRlZCBoZWFwIGluaXRpYWxpemF0aW9uIGluIFdNX0NSRUFURS4KKworRnJpIE1heSAgMyAxOTozMDowMiAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgorCisJKiBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2xpc3Rib3guY10KKwlQYXNzIFdNX1tIVl1TQ1JPTEwgdG8gbGlzdGJveCwgYnV0IG5vdCBjb21iby4KKwlEb24ndCB0cnkgdG8gcmVkcmF3IG5vbi1leGlzdGFudCBzY3JvbGwgYmFycyAoY2hhbmdlcyBkd1N0eWxlIGZsYWdzKS4KKwlDb21ibyBib3ggZ2V0cyBib3JkZXIuCisJQ29tYm8gYm94IGluY2x1ZGVzIGJ1dHRvbiAob3RoZXJ3aXNlIGJ1dHRvbiB3b24ndCB0cmlnZ2VyIGRyb3Bkb3duKS4KKwlQcm9wZXIgYm9yZGVyIGFyb3VuZCBSZWN0QnV0dG9uLgorCUNoZWNrIHNpemUgY29uc2lzdGFuY3kgb2YgY29tYm8sIGxpc3Rib3gsIGFuZCBidXR0b24gYWZ0ZXIgcmVzaXppbmcgCisJb3IgYmVmb3JlIHBhaW50aW5nLiAgVGhlc2Ugcm91dGluZXMgc3RpbGwgYXJlbid0IGNvbXBsZXRlbHkgY29ycmVjdC4KKwlMb2NhbGl6ZSBzaXplIGNoZWNrcyBpbiBzZXBhcmF0ZSByb3V0aW5lcy4KKwlMaXN0Ym94ZXMgYXJlIHdoaXRlLgorCitUaHUgTWF5ICAyIDE5OjIxOjIzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CisKKwkqIFtjb250cm9scy9jb21iby5jXVtpbmNsdWRlL2NvbW1kbGcuaF1baW5jbHVkZS9jb21tZGxnLmNdCisJICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY11bcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10KKwlJbnRyb2R1Y2VkIENob29zZUZvbnQgZGlhbG9nLCBidXQgbmVlZGVkIHNvbWUgcGF0Y2hlcyBpbiAKKwloYW5kbGluZyBvZiBjb21ib2JveGVzIHdpdGggZWRpdCBjb250cm9scy4KKworVHVlIEFwciAzMCAwMDozMzoyNyAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgorCisJKiBbcHJvZ3JhbXMvd2luaGVscC8qXQorCUFkZGVkIGEgaGVscCB2aWV3ZXIgYW5kIGEgc2ltcGxlIGAuaGxwJyB0byBgLnNnbWwnIGNvbnZlcnRlci4KKworTW9uIEFwciAyOSAxNDoxNzo1NyAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBzdGhpbmMuZGVtb24uY28udWs+CisKKwkqIFtyZXNvdXJjZXMvc3lzcmVzXyoucmNdIFttaXNjL3NoZWxsLmNdCisJTW9kaWZpZWQgc2l6ZSBvZiAiQWJvdXQiIGRpYWxvZyBib3hlcy4KKworU2F0IEFwciAyNyAxODoxMDoxMSBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgorCisJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtsb2FkZXIvYnVpbHRpbi5jXQorCWNydGRsbC5zcGVjLCBudGRsbC5zcGVjLCB3c29jazMyLnNwZWM6IG5ldyBmaWxlcy4KKworCSogW2xvYWRlci9wZV9pbWFnZS5jXQorCUZpeCBlcnJvciBtZXNzYWdlIGlmIGltcG9ydCBieSBvcmRpbmFsIGZhaWxlZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3VuIEFwciAyOCAxNDozMjo0MyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KIAogCSogW01ha2VmaWxlLmluXQpkaWZmIC0tZ2l0IGEvREVWRUxPUEVSUy1ISU5UUyBiL0RFVkVMT1BFUlMtSElOVFMKaW5kZXggYTY2MTI3Ni4uODAyNWU2ZiAxMDA2NDQKLS0tIGEvREVWRUxPUEVSUy1ISU5UUworKysgYi9ERVZFTE9QRVJTLUhJTlRTCkBAIC0xLDcgKzEsOCBAQAogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBhIGRvY3VtZW50IHRvIGhlbHAgbmV3IGRldmVsb3BlcnMgZ2V0IHN0YXJ0ZWQuCiBFeGlzdGluZyBkZXZlbG9wZXJzIHNob3VsZCBmZWVsIGZyZWUgdG8gYWRkIHRoZWlyIGNvbW1lbnRzLgogCi1NRU1PUlkgQU5EIFNFR01FTlRTOgorTUVNT1JZIEFORCBTRUdNRU5UUworPT09PT09PT09PT09PT09PT09PQogCiBORSAoV2luMTYpIGV4ZWN1dGFibGVzIGNvbnNpc3Qgb2YgbXVsdGlwbGUgc2VnbWVudHMuICBUaGUgV2luZSBsb2FkZXIKIGxvYWRzIGVhY2ggc2VnbWVudCBpbnRvIGEgdW5pcXVlIGxvY2F0aW9uIGluIHRoZSBXaW5lIHByb2Nlc3NlcyBtZW1vcnkKQEAgLTQxLDcgKzQyLDU5IEBACiBkZWZpbmVkIGFzIGEgRFdPUkQsIHlvdSdsbCBnZXQgYSBjb21waWxhdGlvbiB3YXJuaW5nIGlmIHlvdSBtaXN0YWtlbmx5CiB1c2UgaXQgYXMgYSByZWd1bGFyIDMyLWJpdCBwb2ludGVyLgogCi1BUEkgRU5UUlkgUE9JTlRTOgorCitOQU1JTkcgQ09OVkVOVElPTlMgRk9SIEFQSSBGVU5DVElPTlMgQU5EIFRZUEVTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG9yZGVyIHRvIHN1cHBvcnQgYm90aCBXaW4xNiBhbmQgV2luMzIgQVBJcyB3aXRoaW4gdGhlIHNhbWUgc291cmNlCitjb2RlLCBhcyB3ZWxsIGFzIHNoYXJlIHRoZSBpbmNsdWRlIGZpbGVzIGJldHdlZW4gdGhlIGVtdWxhdG9yIGFuZCB0aGUKK2xpYnJhcnksIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbiBtdXN0IGJlIHVzZWQgaW4gbmFtaW5nIGFsbCBBUEkKK2Z1bmN0aW9ucyBhbmQgdHlwZXMuIElmIHRoZSBXaW5kb3dzIEFQSSB1c2VzIHRoZSBuYW1lICd4eHgnLCB0aGUgV2luZQorY29kZSBtdXN0IHVzZToKKworIC0gJ3h4eDE2JyBmb3IgdGhlIDE2LWJpdCB2ZXJzaW9uLAorIC0gJ3h4eDMyJyBmb3IgdGhlIDMyLWJpdCB2ZXJzaW9uIHdoZW4gbm8gQVNDSUkvVW5pY29kZSBzdHJpbmdzIGFyZQorICAgaW52b2x2ZWQsCisgLSAneHh4MzJBJyBmb3IgdGhlIDMyLWJpdCB2ZXJzaW9uIHdpdGggQVNDSUkgc3RyaW5ncywKKyAtICd4eHgzMlcnIGZvciB0aGUgMzItYml0IHZlcnNpb24gd2l0aCBVbmljb2RlIHN0cmluZ3MuCisKK1lvdSBzaG91bGQgdGhlbiB1c2UgdGhlIG1hY3JvcyBXSU5FTElCX05BTUVbX0FXXSh4eHgpIG9yCitERUNMX1dJTkVMSUJfVFlQRVtfQVddKHh4eCkgKGRlZmluZWQgaW4gaW5jbHVkZS93aW50eXBlcy5oKSB0byBkZWZpbmUKK3RoZSBjb3JyZWN0ICd4eHgnIGZ1bmN0aW9uIG9yIHR5cGUgZm9yIFdpbmVsaWIuIFdoZW4gY29tcGlsaW5nIHRoZQorZW11bGF0b3IsICd4eHgnIGlzIF9ub3RfIGRlZmluZWQsIG1lYW5pbmcgdGhhdCB5b3UgbXVzdCBhbHdheXMgc3BlY2lmeQorZXhwbGljaXRseSB3aGV0aGVyIHlvdSB3YW50IHRoZSAxNi1iaXQgb3IgMzItYml0IHZlcnNpb24uCisKK05vdGU6IGlmICd4eHgnIGlzIHRoZSBzYW1lIGluIFdpbjE2IGFuZCBXaW4zMiwgeW91IGNhbiBzaW1wbHkgdXNlIHRoZQorc2FtZSBuYW1lIGFzIFdpbmRvd3MuCisKK0V4YW1wbGVzOgorCit0eXBlZGVmIHNob3J0IElOVDE2OwordHlwZWRlZiBpbnQgSU5UMzI7CitERUNMX1dJTkVMSUJfVFlQRShJTlQpOworCit0eXBlZGVmIHN0cnVjdCB7IC8qIFdpbjMyIEFTQ0lJIGRhdGEgc3RydWN0dXJlICovIH0gV05EQ0xBU1MzMkE7Cit0eXBlZGVmIHN0cnVjdCB7IC8qIFdpbjMyIFVuaWNvZGUgZGF0YSBzdHJ1Y3R1cmUgKi8gfSBXTkRDTEFTUzMyVzsKK3R5cGVkZWYgc3RydWN0IHsgLyogV2luMTYgZGF0YSBzdHJ1Y3R1cmUgKi8gfSBXTkRDTEFTUzE2OworREVDTF9XSU5FTElCX1RZUEVfQVcoV05EQ0xBU1MpOworCitBVE9NIFJlZ2lzdGVyQ2xhc3MxNiggV05EQ0xBU1MxNiAqICk7CitBVE9NIFJlZ2lzdGVyQ2xhc3MzMkEoIFdORENMQVNTMzJBICogKTsKK0FUT00gUmVnaXN0ZXJDbGFzczMyVyggV05EQ0xBU1MzMlcgKiApOworI2RlZmluZSBSZWdpc3RlckNsYXNzIFdJTkVMSUJfTkFNRV9BVyhSZWdpc3RlckNsYXNzKQorCitUaGUgV2luZWxpYiB1c2VyIGNhbiB0aGVuIHNheToKKworICAgIElOVCBpOworICAgIFdORENMQVNTIHdjID0geyAuLi4gfTsKKyAgICBSZWdpc3RlckNsYXNzKCAmd2MgKTsKKworYW5kIHRoaXMgd2lsbCB1c2UgdGhlIGNvcnJlY3QgZGVjbGFyYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBkZWZpbml0aW9uCitvZiB0aGUgc3ltYm9scyBXSU5FTElCMTYsIFdJTkVMSUIzMiBhbmQgVU5JQ09ERS4KKworCitBUEkgRU5UUlkgUE9JTlRTCis9PT09PT09PT09PT09PT09CiAKIEJlY2F1c2UgV2luMTYgcHJvZ3JhbXMgdXNlIGEgMTYtYml0IHN0YWNrIGFuZCBiZWNhdXNlIHRoZXkgY2FuIG9ubHkKIGNhbGwgMTY6MTYgYWRkcmVzc2VkIGZ1bmN0aW9ucywgYWxsIEFQSSBlbnRyeSBwb2ludHMgbXVzdCBiZSBhdCBsb3cKQEAgLTU3LDcgKzExMCw5IEBACiBjb250cm9sIHRvIHRoZSBwcm9wZXIgaGFuZGxlci4gIFRoZSBmb3JtYXQgb2YgdGhlICouc3BlYyBmaWxlcyBpcwogZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSAidG9vbHMvYnVpbGQtc3BlYy50eHQiLgogCi1ERUJVRyBNRVNTQUdFUzoKKworREVCVUcgTUVTU0FHRVMKKz09PT09PT09PT09PT09CiAKIFRvIGRpc3BsYXkgYSBtZXNzYWdlIG9ubHkgZHVyaW5nIGRlYnVnZ2luZywgeW91IG5vcm1hbGx5IHdyaXRlIHNvbWV0aGluZwogbGlrZSB0aGlzOgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCBjMzMzODYxLi5mOGY2MjA1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtMTI1LDYgKzEyNSw5IEBACiAkKEFMTFNVQkRJUlMpOiBkdW1teQogCUBjZCAkQDsgJChTVUJNQUtFKQogCitpbnN0YWxsX3Byb2dyYW1zOiBkdW1teQorCUBjZCBwcm9ncmFtczsgJChTVUJNQUtFKSBpbnN0YWxsCisKIGRlcGVuZDoKIAlmb3IgaSBpbiAkKEFMTFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGRlcGVuZCk7IGRvbmUKIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDM2MTU2NWIuLjY5NjcwOTMgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTIwNDksNiArMjA0OSw3IEBACiBvYmplY3RzL01ha2VmaWxlCiBwcm9ncmFtcy9NYWtlZmlsZQogcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZQorcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZQogcmMvTWFrZWZpbGUKIHJlc291cmNlcy9NYWtlZmlsZQogdG9vbHMvTWFrZWZpbGUKQEAgLTIxMjMsNiArMjEyNCw3IEBACiBvYmplY3RzL01ha2VmaWxlCiBwcm9ncmFtcy9NYWtlZmlsZQogcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZQorcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZQogcmMvTWFrZWZpbGUKIHJlc291cmNlcy9NYWtlZmlsZQogdG9vbHMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCBhZDc0YzczLi41NWE0MTdjIDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC05OSw2ICs5OSw3IEBACiBvYmplY3RzL01ha2VmaWxlCiBwcm9ncmFtcy9NYWtlZmlsZQogcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZQorcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZQogcmMvTWFrZWZpbGUKIHJlc291cmNlcy9NYWtlZmlsZQogdG9vbHMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL0VESVQuVE9ETyBiL2NvbnRyb2xzL0VESVQuVE9ETwppbmRleCA5OWI0MjcwLi43YmFjYWRmIDEwMDY0NAotLS0gYS9jb250cm9scy9FRElULlRPRE8KKysrIGIvY29udHJvbHMvRURJVC5UT0RPCkBAIC05OCw2ICs5OCw4IEBACiAtCVRoZSBjbGlwYm9hcmQgaXMgYnJva2VuLiAgV2hlbmV2ZXIgdGhpbmdzIGdvIHdyb25nIHdpdGgKIAljdXQvY29weS9wYXN0ZSwgaXQgaXMgcHJvYmFibHkgdGhlIGNsaXBib2FyZCB0aGF0IG1lc3NlcyB1cCB0aGluZ3MsCiAJbm90IGVkaXQuYy4KKy0JVHVybmluZyBvbiBXb3JkV3JhcCB3aXRoIE5vdGVwYWQgbGVhdmVzIHBhcnQgb2YgdGhlIGhvcml6b250YWwKKwlzY3JvbGxiYXIgdmlzaWJsZSAocHJvYmxlbSB3aXRoIFdNX0VSQVNFQktHTkQgPz8/KS4KIAogCiBJIGFtIHN0aWxsIHZlcnkgYWN0aXZlbHkgY2hhbmdpbmcgdGhpbmdzLiAgRXNwZWNpYWxseSBJIGFtIHdvcmtpbmcKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2NvbWJvLmMgYi9jb250cm9scy9jb21iby5jCmluZGV4IDVhNjE2Y2UuLmQyZGM4MTkgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2NvbWJvLmMKKysrIGIvY29udHJvbHMvY29tYm8uYwpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIApAQCAtMzIsOSArMzMsMjQgQEAKICAgKiBJIGhvcGUgbm8gcHJvZ3JhbXMgcmVseSBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgY29tYm9zLgogICAqLwogCisgLyoKKyAgKiBNYXkgMm5kOiAgSSBhZGRlZCAzICJ3b3JrIGFyb3VuZHMiICAoIzEsIzIsIzMpICAgdG8gbWFrZSBjb21ib3MgCisgICogICAgICAgICAgIHdpdGggRURJVCB3b3JrLiAoV2UgbmVlZCB0aGF0IGZvciBDaG9vc2VGb250IGRpYWxvZy4pCisgICogICAgICAgICAgIFBlcmhhcHMgd2UgaGF2ZSB0byByZXdyaXRlIHNvbWV0aGluZyBtb3JlLgorICAqICAgICAgICAgICBJIGhhdmUgcHJlcGFyZWQgc29tZSBtb3JlIHN0dWZmLCBidXQgaXQgZG9lc24ndCAKKyAgKiAgICAgICAgICAgY29udGFpbiBoZXJlLCAgYmVjYXVzZSBpdCdzIG5vdCByZWFkeSA7LSkKKyAgKgorICAqICAgICAgICAgICBJZiB5b3UncmUgd3JpdGluZyBvbiBjb21iby5jLCBwbGVhc2UgbWFpbCB0byBtZS4KKyAgKgorICAqICAgICAgICAgICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgorICAqLworCiAjZGVmaW5lIENCTE1NX0VER0UgICA0ICAgIC8qIGRpc3RhbmNlIGluc2lkZSBib3ggd2hpY2ggaXMgc2FtZSBhcyBtb3ZpbmcgbW91c2UKIAkJCSAgICAgb3V0c2lkZSBib3gsIHRvIHRyaWdnZXIgc2Nyb2xsaW5nIG9mIENCTCAqLwogCitzdGF0aWMgQk9PTCBDQkNoZWNrU2l6ZShIV05EIGh3bmQpOworc3RhdGljIEJPT0wgQ0JMQ2hlY2tTaXplKEhXTkQgaHduZCk7CisKIHN0YXRpYyBIQklUTUFQIGhDb21ib0JpdCA9IDA7CiBzdGF0aWMgV09SRCBDQml0SGVpZ2h0LCBDQml0V2lkdGg7CiAKQEAgLTcwLDE0ICs4NiwxNyBAQAogICBscGhjLT5oV25kTEJveCA9IDA7CiAgIGxwaGMtPmR3U3RhdGUgPSAwOwogICBscGhjLT5MYXN0U2VsID0gLTE7Ci0gIGxwaGMtPmR3U3R5bGUgPSBzdHlsZTsKKyAgbHBoYy0+ZHdTdHlsZSA9IHN0eWxlOyAKICAgbHBoYy0+RHJvcERvd25WaXNpYmxlID0gRkFMU0U7CiAgIHJldHVybiBUUlVFOwogfQogCiB2b2lkIENvbWJvVXBkYXRlV2luZG93KEhXTkQgaHduZCwgTFBIRUFETElTVCBscGhsLCBMUEhFQURDT01CTyBscGhjLCBCT09MIHJlcGFpbnQpCiB7Ci0gIFNldFNjcm9sbFJhbmdlKGxwaGMtPmhXbmRMQm94LCBTQl9WRVJULCAwLCBMaXN0TWF4Rmlyc3RWaXNpYmxlKGxwaGwpLCBUUlVFKTsKKyAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0cihod25kKTsKKworICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkgCisgICAgU2V0U2Nyb2xsUmFuZ2UobHBoYy0+aFduZExCb3gsU0JfVkVSVCwwLExpc3RNYXhGaXJzdFZpc2libGUobHBobCksVFJVRSk7CiAgIGlmIChyZXBhaW50ICYmIGxwaGwtPmJSZWRyYXdGbGFnKSB7CiAgICAgSW52YWxpZGF0ZVJlY3QoaHduZCwgTlVMTCwgVFJVRSk7CiAgIH0KQEAgLTkzLDcgKzExMiw3IEBACiAgIGlmICghaENvbWJvQml0KSBDT01CT19Jbml0KCk7CiAKICAgY3JlYXRlU3RydWN0ID0gKENSRUFURVNUUlVDVCAqKVBUUl9TRUdfVE9fTElOKGxQYXJhbSk7Ci0gIGNyZWF0ZVN0cnVjdC0+c3R5bGUgJj0gfihXU19WU0NST0xMIHwgV1NfSFNDUk9MTCk7CisgIGNyZWF0ZVN0cnVjdC0+c3R5bGUgfD0gV1NfQk9SREVSOwogICBTZXRXaW5kb3dMb25nKGh3bmQsIEdXTF9TVFlMRSwgY3JlYXRlU3RydWN0LT5zdHlsZSk7CiAKICAgZHByaW50Zl9jb21ibyhzdGRkZWIsIkNvbWJvQm94IFdNX05DQ1JFQVRFIVxuIik7CkBAIC0xMTEsMTAgKzEzMCwxMiBAQAogICBMT05HICAgICAgICAgc3R5bGUgPSAwOwogICBMT05HICAgICAgICAgY3N0eWxlID0gR2V0V2luZG93TG9uZyhod25kLEdXTF9TVFlMRSk7CiAgIFJFQ1QgICAgICAgICByZWN0LGxib3hyZWN0OworICBXTkQqICAgICAgICAgd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAgIGNoYXIgY2xhc3NOYW1lW10gPSAiQ09NQk9MQk9YIjsgIC8qIEhhY2sgc28gdGhhdCBjbGFzcyBuYW1lcyBhcmUgPiAweDEwMDAwICovCiAgIGNoYXIgZWRpdE5hbWVbXSA9ICJFRElUIjsKIAogICAvKiB0cmFuc2xhdGUgY29tYm8gaW50byBsaXN0Ym94IHN0eWxlcyAqLworICBjc3R5bGUgfD0gV1NfQk9SREVSOwogICBpZiAoY3N0eWxlICYgQ0JTX09XTkVSRFJBV0ZJWEVEKSBzdHlsZSB8PSBMQlNfT1dORVJEUkFXRklYRUQ7CiAgIGlmIChjc3R5bGUgJiBDQlNfT1dORVJEUkFXVkFSSUFCTEUpIHN0eWxlIHw9IExCU19PV05FUkRSQVdWQVJJQUJMRTsKICAgaWYgKGNzdHlsZSAmIENCU19TT1JUKSBzdHlsZSB8PSBMQlNfU09SVDsKQEAgLTEyMiwxOSArMTQzLDIyIEBACiAgIHN0eWxlIHw9IExCU19OT1RJRlk7CiAgIENyZWF0ZUxpc3RCb3hTdHJ1Y3QoaHduZCwgT0RUX0NPTUJPQk9YLCBzdHlsZSwgR2V0UGFyZW50KGh3bmQpKTsKICAgQ3JlYXRlQ29tYm9TdHJ1Y3QoaHduZCxjc3R5bGUpOworCiAgIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CiAgIGxwaGMgPSBDb21ib0dldFN0b3JhZ2VIZWFkZXIoaHduZCk7CiAKICAgR2V0Q2xpZW50UmVjdChod25kLCZyZWN0KTsKICAgR2V0V2luZG93UmVjdChod25kLCZsYm94cmVjdCk7CisKICAgLyogRklYTUU6IGNvbWJvcyB3aXRoIGVkaXQgY29udHJvbHMgYXJlIGJyb2tlbi4gKi8KICAgc3dpdGNoKGNzdHlsZSAmIDMpIHsKICAgIGNhc2UgQ0JTX1NJTVBMRTogICAgICAgICAgICAvKiBlZGl0IGNvbnRyb2wsIGxpc3QgYWx3YXlzIHZpc2libGUgICovCiAgICAgZHByaW50Zl9jb21ibyhzdGRkZWIsIkNCU19TSU1QTEVcbiIpOwogICAgIFNldFJlY3RFbXB0eSgmbHBoYy0+UmVjdEJ1dHRvbik7CisgICAgbGJveHJlY3Q9cmVjdDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmsgYXJvdW5kICMxICovICAgCiAgICAgbHBoYy0+TEJveFRvcCA9IGxwaGwtPlN0ZEl0ZW1IZWlnaHQ7Ci0gICAgbHBoYy0+aFduZEVkaXQgPSBDcmVhdGVXaW5kb3coTUFLRV9TRUdQVFIoZWRpdE5hbWUpLCAoU0VHUFRSKTAsIAotCQkJCSAgV1NfQ0hJTEQgfCBXU19DTElQQ0hJTERSRU4gfCBXU19WSVNJQkxFIHwgU1NfTEVGVCwKKyAgICBscGhjLT5oV25kRWRpdCA9IENyZWF0ZVdpbmRvdzE2KE1BS0VfU0VHUFRSKGVkaXROYW1lKSwgKFNFR1BUUikwLCAKKwkJCQkgIFdTX0NISUxEIHwgV1NfQ0xJUENISUxEUkVOIHwgV1NfVklTSUJMRSB8IFNTX0xFRlQgfCBXU19CT1JERVIsCiAJCQkJICAwLCAwLCByZWN0LnJpZ2h0LCBscGhsLT5TdGRJdGVtSGVpZ2h0LAogCQkJCSAgaHduZCwgKEhNRU5VKTEsIFdJTl9HZXRXaW5kb3dJbnN0YW5jZShod25kKSwgMEwpOwogICAgIGJyZWFrOwpAQCAtMTQ3LDcgKzE3MSw3IEBACiAgICAgU2V0V2luZG93UG9zKGh3bmQsIDAsIDAsIDAsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQgKyAyKlNZU01FVFJJQ1NfQ1hCT1JERVIsCiAJCSBscGhsLT5TdGRJdGVtSGVpZ2h0ICsgMipTWVNNRVRSSUNTX0NZQk9SREVSLAogCQkgU1dQX05PTU9WRSB8IFNXUF9OT1pPUkRFUik7Ci0gICAgbHBoYy0+aFduZEVkaXQgPSBDcmVhdGVXaW5kb3coTUFLRV9TRUdQVFIoZWRpdE5hbWUpLCAoU0VHUFRSKTAsCisgICAgbHBoYy0+aFduZEVkaXQgPSBDcmVhdGVXaW5kb3cxNihNQUtFX1NFR1BUUihlZGl0TmFtZSksIChTRUdQVFIpMCwKIAkJCQkgIFdTX0NISUxEIHwgV1NfQ0xJUENISUxEUkVOIHwgV1NfVklTSUJMRSB8IFNTX0xFRlQsCiAJCQkJICAwLCAwLCBscGhjLT5SZWN0QnV0dG9uLmxlZnQsIGxwaGwtPlN0ZEl0ZW1IZWlnaHQsCiAJCQkJICBod25kLCAoSE1FTlUpMSwgV0lOX0dldFdpbmRvd0luc3RhbmNlKGh3bmQpLCAwTCk7CkBAIC0xNTgsOCArMTgyLDkgQEAKICAgICBscGhjLT5SZWN0QnV0dG9uLmxlZnQgPSBscGhjLT5SZWN0QnV0dG9uLnJpZ2h0IC0gNiAtIENCaXRXaWR0aDsKICAgICBscGhjLT5SZWN0QnV0dG9uLmJvdHRvbSA9IGxwaGMtPlJlY3RCdXR0b24udG9wICsgbHBobC0+U3RkSXRlbUhlaWdodDsKICAgICBscGhjLT5MQm94VG9wID0gbHBobC0+U3RkSXRlbUhlaWdodDsKLSAgICBTZXRXaW5kb3dQb3MoaHduZCwgMCwgMCwgMCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCArIDIqU1lTTUVUUklDU19DWEJPUkRFUiwKLQkJIGxwaGwtPlN0ZEl0ZW1IZWlnaHQgKyAyKlNZU01FVFJJQ1NfQ1lCT1JERVIsCisKKyAgICBTZXRXaW5kb3dQb3MoaHduZCwgMCwgMCwgMCwgcmVjdC5yaWdodCwgCisJCSBscGhsLT5TdGRJdGVtSGVpZ2h0ICsgMipTWVNNRVRSSUNTX0NZQk9SREVSLCAKIAkJIFNXUF9OT01PVkUgfCBTV1BfTk9aT1JERVIpOwogICAgIGJyZWFrOwogICB9CkBAIC0xNjcsMTYgKzE5Miw0NSBAQAogICAvKiBGSVhNRTogV2luU2lnaHQgc2F5cyB0aGVzZSBzaG91bGQgYmUgQ0hJTEQgd2luZG93cyB3aXRoIHRoZSBUT1BNT1NUIGZsYWcKICAgICogc2V0LiBXaW5lIGRvZXNuJ3Qgc3VwcG9ydCBUT1BNT1NULCBhbmQgc2ltcGx5IHNldHRpbmcgdGhlIFdTX0NISUxECiAgICAqIGZsYWcgZG9lc24ndCB3b3JrLiAqLwotICBscGhjLT5oV25kTEJveCA9IENyZWF0ZVdpbmRvdyhNQUtFX1NFR1BUUihjbGFzc05hbWUpLCAoU0VHUFRSKTAsIAotCQkJCVdTX1BPUFVQIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCwKKyAgIGlmICgoY3N0eWxlICYgMyk9PUNCU19TSU1QTEUpICAgICAgICAgICAgICAgICAgICAgLyogd29yayBhcm91bmQgIzIgKi8KKyAgIHsKKyAgICBscGhjLT5oV25kTEJveCA9IENyZWF0ZVdpbmRvdzE2KE1BS0VfU0VHUFRSKGNsYXNzTmFtZSksIChTRUdQVFIpMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfQk9SREVSIHwgIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8CisgCQkJCSgoY3N0eWxlICYgV1NfSFNDUk9MTCk/IFdTX0hTQ1JPTEwgOiAwKSB8CisgCQkJCSgoY3N0eWxlICYgV1NfVlNDUk9MTCk/IFdTX1ZTQ1JPTEwgOiAwKSwKKwkJCQlsYm94cmVjdC5sZWZ0ICs4ICwgbGJveHJlY3QudG9wLAorCQkJCWxib3hyZWN0LnJpZ2h0IC0gbGJveHJlY3QubGVmdCAtIDgsIAorCQkJCWxib3hyZWN0LmJvdHRvbSAtIGxib3hyZWN0LnRvcCwKKwkJCQkgIGh3bmQsMCwgV0lOX0dldFdpbmRvd0luc3RhbmNlKGh3bmQpLAorCQkJCShTRUdQVFIpaHduZCApOworICAgfQorICAgZWxzZQorICAgeworICAgIGxwaGMtPmhXbmRMQm94ID0gQ3JlYXRlV2luZG93MTYoTUFLRV9TRUdQVFIoY2xhc3NOYW1lKSwgKFNFR1BUUikwLCAKKwkJCQlXU19QT1BVUCB8IFdTX0JPUkRFUiB8CisgCQkJCSgoY3N0eWxlICYgV1NfSFNDUk9MTCk/IFdTX0hTQ1JPTEwgOiAwKSB8CisgCQkJCSgoY3N0eWxlICYgV1NfVlNDUk9MTCk/IFdTX1ZTQ1JPTEwgOiAwKSwKIAkJCQlsYm94cmVjdC5sZWZ0LCBsYm94cmVjdC50b3AsCiAJCQkJbGJveHJlY3QucmlnaHQgLSBsYm94cmVjdC5sZWZ0LCAKIAkJCQlsYm94cmVjdC5ib3R0b20gLSBsYm94cmVjdC50b3AsCiAJCQkJMCwgMCwgV0lOX0dldFdpbmRvd0luc3RhbmNlKGh3bmQpLAogCQkJCShTRUdQVFIpaHduZCApOwotICBTaG93V2luZG93KGxwaGMtPmhXbmRMQm94LCBTV19ISURFKTsKLSAgZHByaW50Zl9jb21ibyhzdGRkZWIsIkNvbWJvIENyZWF0aW9uIExCb3g9JTA0eFxuIiwgbHBoYy0+aFduZExCb3gpOwotICByZXR1cm4gMDsKKyAgICBTaG93V2luZG93KGxwaGMtPmhXbmRMQm94LCBTV19ISURFKTsKKyAgIH0gIAorICAgd25kUHRyLT5kd1N0eWxlICY9IH4oV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwpOworICAgCisgICBkcHJpbnRmX2NvbWJvKCBzdGRkZWIsICJDb21ibyBDcmVhdGlvbiBod25kPSUwNHggIExCb3g9JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgIGh3bmQsIGxwaGMtPmhXbmRMQm94KTsKKyAgIGRwcmludGZfY29tYm8oIHN0ZGRlYiwgIiAgbGJveCAlZCwlZC0lZCwlZCAgICAgYnV0dG9uICVkLCVkLSVkLCVkXG4iLAorICAgICAgICAgICAgICAgICAgbGJveHJlY3QubGVmdCwgbGJveHJlY3QudG9wLCBsYm94cmVjdC5yaWdodCwgbGJveHJlY3QuYm90dG9tLAorICAgICAgICAgICAgICAgICAgbHBoYy0+UmVjdEJ1dHRvbi5sZWZ0LCBscGhjLT5SZWN0QnV0dG9uLnRvcCwKKyAgICAgICAgICAgICAgICAgIGxwaGMtPlJlY3RCdXR0b24ucmlnaHQsIGxwaGMtPlJlY3RCdXR0b24uYm90dG9tICk7CisgICBkcHJpbnRmX2NvbWJvKCBzdGRkZWIsICIgICBjbGllbnQgJWQsJWQtJWQsJWQgICAgIHdpbmRvdyAlZCwlZC0lZCwlZFxuIiwKKyAgICAgICAgICAgICAgICAgIHduZFB0ci0+cmVjdENsaWVudC5sZWZ0LCB3bmRQdHItPnJlY3RDbGllbnQudG9wLAorICAgICAgICAgICAgICAgICAgd25kUHRyLT5yZWN0Q2xpZW50LnJpZ2h0LCB3bmRQdHItPnJlY3RDbGllbnQuYm90dG9tLAorICAgICAgICAgICAgICAgICAgd25kUHRyLT5yZWN0V2luZG93LmxlZnQsIHduZFB0ci0+cmVjdFdpbmRvdy50b3AsCisgICAgICAgICAgICAgICAgICB3bmRQdHItPnJlY3RXaW5kb3cucmlnaHQsIHduZFB0ci0+cmVjdFdpbmRvdy5ib3R0b20gKTsKKyAgIHJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIwNSwxNCArMjU5LDEyIEBACiAgIEhGT05UICBoT2xkRm9udDsKICAgSERDICBoZGM7CiAgIFJFQ1QgcmVjdDsKLSAgaW50IGhlaWdodDsKICAgCiAgIGhkYyA9IEJlZ2luUGFpbnQoaHduZCwgJnBzKTsKLQotICBpZiAoaENvbWJvQml0ICE9IDApIHsKKyAgaWYgKGhDb21ib0JpdCAhPSAwICYmICFJc1JlY3RFbXB0eSgmbHBoYy0+UmVjdEJ1dHRvbikpIHsgICAgICAgICAgIC8qIHdvcmsgYXJvdW5kICMzICovCiAgICAgR1JBUEhfRHJhd1JlbGllZlJlY3QoaGRjLCAmbHBoYy0+UmVjdEJ1dHRvbiwgMiwgMiwgRkFMU0UpOwogICAgIEdSQVBIX0RyYXdCaXRtYXAoaGRjLCBoQ29tYm9CaXQsCi0JCSAgICAgbHBoYy0+UmVjdEJ1dHRvbi5sZWZ0ICsgMyxscGhjLT5SZWN0QnV0dG9uLnRvcCArIDIsCisJCSAgICAgbHBoYy0+UmVjdEJ1dHRvbi5sZWZ0ICsgMixscGhjLT5SZWN0QnV0dG9uLnRvcCArIDIsCiAJCSAgICAgMCwgMCwgQ0JpdFdpZHRoLCBDQml0SGVpZ2h0ICk7CiAgIH0KICAgaWYgKCFJc1dpbmRvd1Zpc2libGUoaHduZCkgfHwgIWxwaGwtPmJSZWRyYXdGbGFnIApAQCAtMjM0LDEyICsyODYsMTIgQEAKICAgaWYgKGhCcnVzaCA9PSAwKSBoQnJ1c2ggPSBHZXRTdG9ja09iamVjdChXSElURV9CUlVTSCk7CiAKICAgR2V0Q2xpZW50UmVjdChod25kLCAmcmVjdCk7CisKKyAgQ0JDaGVja1NpemUoaHduZCk7CiAgIHJlY3QucmlnaHQgLT0gKGxwaGMtPlJlY3RCdXR0b24ucmlnaHQgLSBscGhjLT5SZWN0QnV0dG9uLmxlZnQpOwogCiAgIGxwbHMgPSBMaXN0Qm94R2V0SXRlbShscGhsLGxwaGwtPkl0ZW1Gb2N1c2VkKTsKICAgaWYgKGxwbHMgIT0gTlVMTCkgeyAgCi0gICAgaGVpZ2h0ID0gbHBscy0+bWlzLml0ZW1IZWlnaHQ7Ci0gICAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGhlaWdodDsKICAgICBGaWxsUmVjdChoZGMsICZyZWN0LCBoQnJ1c2gpOwogICAgIExpc3RCb3hEcmF3SXRlbSAoaHduZCwgbHBobCwgaGRjLCBscGxzLCAmcmVjdCwgT0RBX0RSQVdFTlRJUkUsIDApOwogICAgIGlmIChHZXRGb2N1cygpID09IGh3bmQpCkBAIC0zODksNyArNDQxLDYgQEAKICAgICB3UmV0ID0gTGlzdEJveEluc2VydFN0cmluZyhscGhsLCB3UGFyYW0sIChMUFNUUilQVFJfU0VHX1RPX0xJTihsUGFyYW0pKTsKICAgZWxzZQogICAgIHdSZXQgPSBMaXN0Qm94SW5zZXJ0U3RyaW5nKGxwaGwsIHdQYXJhbSwgKExQU1RSKWxQYXJhbSk7Ci0KICAgQ29tYm9VcGRhdGVXaW5kb3coaHduZCwgbHBobCwgbHBoYywgVFJVRSk7CiAgIHJldHVybiB3UmV0OwogfQpAQCAtNTkzLDYgKzY0NCw1OSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgQ0JDaGVja1NpemUKKyAqLworc3RhdGljIEJPT0wgQ0JDaGVja1NpemUoSFdORCBod25kKQoreworICBMUEhFQURDT01CTyAgbHBoYyA9IENvbWJvR2V0U3RvcmFnZUhlYWRlcihod25kKTsKKyAgTFBIRUFETElTVCAgIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CisgIExPTkcgICAgICAgICBjc3R5bGUgPSBHZXRXaW5kb3dMb25nKGh3bmQsR1dMX1NUWUxFKTsKKyAgUkVDVCAgICAgICAgIGNSZWN0LHdSZWN0OworCisgIC8qIFRPRE8gLSBUaGUgc2l6ZSBvZiBjb21ibydzIGFuZCB0aGVpciBsaXN0Ym94ZXMgaXMgc3RpbGwgYnJva2VuICovCisKKyAgaWYgKGxwaGMtPmhXbmRMQm94ID09IDApIHJldHVybiBGQUxTRTsKKworICBHZXRDbGllbnRSZWN0KGh3bmQsJmNSZWN0KTsKKyAgR2V0V2luZG93UmVjdChod25kLCZ3UmVjdCk7CisKKyAgZHByaW50Zl92eGQoc3RkZGViLCJDQkNoZWNrU2l6ZTogY1JlY3QgJWQsJWQtJWQsJWQgIHdSZWN0ICVkLCVkLSVkLCVkXG4iLAorCQljUmVjdC5sZWZ0LGNSZWN0LnRvcCxjUmVjdC5yaWdodCxjUmVjdC5ib3R0b20sCisJCXdSZWN0LmxlZnQsd1JlY3QudG9wLHdSZWN0LnJpZ2h0LHdSZWN0LmJvdHRvbSk7CisKKyAgaWYgKChjUmVjdC5ib3R0b20gLSBjUmVjdC50b3ApID4gCisgICAgICAobHBobC0+U3RkSXRlbUhlaWdodCArIDIqU1lTTUVUUklDU19DWUJPUkRFUikpIHsKKyAgICBTZXRXaW5kb3dQb3MoaHduZCwgMCwgMCwgMCwgCisJCSBjUmVjdC5yaWdodC1jUmVjdC5sZWZ0LAorCQkgbHBobC0+U3RkSXRlbUhlaWdodCsyKlNZU01FVFJJQ1NfQ1lCT1JERVIsIAorCQkgU1dQX05PTU9WRSB8IFNXUF9OT1pPUkRFUiB8IFNXUF9OT1JFRFJBVyB8IFNXUF9OT0FDVElWQVRFICk7CisgICAgR2V0Q2xpZW50UmVjdChod25kLCZjUmVjdCk7CisgICAgR2V0V2luZG93UmVjdChod25kLCZ3UmVjdCk7CisgIH0KKworICBzd2l0Y2ggKGNzdHlsZSAmIDMpIHsKKyAgICBjYXNlIENCU19TSU1QTEU6CisgICAgICBicmVhazsKKyAgICBjYXNlIENCU19EUk9QRE9XTjoKKyAgICBjYXNlIENCU19EUk9QRE9XTkxJU1Q6CisgICAgICBscGhjLT5SZWN0QnV0dG9uLnJpZ2h0ID0gY1JlY3QucmlnaHQ7CisgICAgICBscGhjLT5SZWN0QnV0dG9uLmxlZnQgPSBjUmVjdC5yaWdodCAtIDIqU1lTTUVUUklDU19DWEJPUkRFUiAtIDQgCisJICAgICAgICAgICAgICAgICAgICAgICAtIENCaXRXaWR0aDsKKyAgICAgIGxwaGMtPlJlY3RCdXR0b24udG9wID0gY1JlY3QudG9wOworICAgICAgbHBoYy0+UmVjdEJ1dHRvbi5ib3R0b20gPSBjUmVjdC5ib3R0b207CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZnByaW50ZihzdGRlcnIsIkNCQ2hlY2tTaXplOiBzdHlsZSAlbHggbm90IHJlY29nbml6ZWQhXG4iLGNzdHlsZSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIENCTENoZWNrU2l6ZShod25kKTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDb21ib1duZFByb2MKICAqLwogTFJFU1VMVCBDb21ib0JveFduZFByb2MoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCkBAIC02MTAsNiArNzE0LDcgQEAKICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjogcmV0dXJuIENCTEJ1dHRvbkRvd24oaHduZCwgd1BhcmFtLCBsUGFyYW0pOwogICAgICBjYXNlIFdNX1NFVEZPQ1VTOiByZXR1cm4gQ0JTZXRGb2N1cyhod25kLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgIGNhc2UgV01fS0lMTEZPQ1VTOiByZXR1cm4gQ0JLaWxsRm9jdXMoaHduZCwgd1BhcmFtLCBsUGFyYW0pOworICAgICBjYXNlIFdNX1NJWkU6IHJldHVybiBDQkNoZWNrU2l6ZShod25kKTsKICAgICAgY2FzZSBDQl9SRVNFVENPTlRFTlQ6IHJldHVybiBDQlJlc2V0Q29udGVudChod25kLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgIGNhc2UgQ0JfRElSOiByZXR1cm4gQ0JEaXIoaHduZCwgd1BhcmFtLCBsUGFyYW0pOwogICAgICBjYXNlIENCX0FERFNUUklORzogcmV0dXJuIENCQWRkU3RyaW5nKGh3bmQsIHdQYXJhbSwgbFBhcmFtKTsKQEAgLTczNiw2ICs4NDEsNyBAQAogICBQQUlOVFNUUlVDVCAgcHM7CiAgIEhCUlVTSCAgICAgICBoQnJ1c2g7CiAgIEhGT05UICAgICAgICBoT2xkRm9udDsKKyAgV05EICogd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CiAgIEhXTkQgIGNvbWJvaHduZCA9IENMQm94R2V0Q29tYm8oaHduZCk7CiAgIEhEQyAJaGRjOwogICBSRUNUIAlyZWN0OwpAQCAtNzUwLDE3ICs4NTYsMTIgQEAKICAgfQogCiAgIGhPbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbHBobC0+aEZvbnQpOwotI2lmZGVmIFdJTkVMSUIzMgotICBoQnJ1c2ggPSBTZW5kTWVzc2FnZShscGhsLT5oUGFyZW50LCBXTV9DVExDT0xPUkxJU1RCT1gsIGhkYywgaHduZCk7Ci0jZWxzZQotICBoQnJ1c2ggPSBTZW5kTWVzc2FnZShscGhsLT5oUGFyZW50LCBXTV9DVExDT0xPUiwgaGRjLAotCQkgICAgICAgTUFLRUxPTkcoaHduZCwgQ1RMQ09MT1JfTElTVEJPWCkpOwotI2VuZGlmCi0KLSAgaWYgKGhCcnVzaCA9PSAwKSBoQnJ1c2ggPSBHZXRTdG9ja09iamVjdChXSElURV9CUlVTSCk7CisgIC8qIGxpc3Rib3hlcyBzaG91bGQgYmUgd2hpdGUgKi8KKyAgaEJydXNoID0gR2V0U3RvY2tPYmplY3QoV0hJVEVfQlJVU0gpOwogCiAgIEdldENsaWVudFJlY3QoaHduZCwgJnJlY3QpOwogICBGaWxsUmVjdChoZGMsICZyZWN0LCBoQnJ1c2gpOworICBDQkxDaGVja1NpemUoaHduZCk7CiAKICAgbHBscyA9IGxwaGwtPmxwRmlyc3Q7CiAKQEAgLTc5Nyw3ICs4OTgsMTAgQEAKIAogICAgIGxwbHMgPSBscGxzLT5scE5leHQ7CiAgIH0KLSAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMCwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7CisKKyAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpIAorICAgICAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMCwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7CisKICAgU2VsZWN0T2JqZWN0KGhkYyxoT2xkRm9udCk7CiAgIEVuZFBhaW50KCBod25kLCAmcHMgKTsKICAgcmV0dXJuIDA7CkBAIC05NjcsNiArMTA3MSw1NyBAQAogICByZXR1cm4gMDsKIH0KIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgIENCTENoZWNrU2l6ZQorICovCitzdGF0aWMgQk9PTCBDQkxDaGVja1NpemUoSFdORCBod25kKQoreworICBMUEhFQURDT01CTyAgbHBoYyA9IENvbWJvR2V0U3RvcmFnZUhlYWRlcihod25kKTsKKyAgTFBIRUFETElTVCAgIGxwaGwgPSBDb21ib0dldExpc3RIZWFkZXIoaHduZCk7CisgIExQTElTVFNUUlVDVCBscGxzOworICBIV05EICAgICAgICAgaFduZExCb3g7CisgIFJFQ1QgY1JlY3Qsd1JlY3QsbFJlY3QsbHdSZWN0OworICBpbnQgdG90aGVpZ2h0OworICBjaGFyIGNsYXNzTmFtZVs4MF07CisKKyAgR2V0Q2xhc3NOYW1lKGh3bmQsY2xhc3NOYW1lLDgwKTsKKyAgZmZsdXNoKHN0ZGRlYik7CisgIGlmIChzdHJuY21wKGNsYXNzTmFtZSwiQ09NQk9CT1giLDgpKSByZXR1cm4gRkFMU0U7CisgIGlmICgoaFduZExCb3ggPSBscGhjLT5oV25kTEJveCkgPT0gMCkgcmV0dXJuIEZBTFNFOworICBkcHJpbnRmX3Z4ZChzdGRkZWIsIkNCTENoZWNrU2l6ZSBoZWFkZXJzIGh3ICUwNHggIGxiICUwNHggIG5hbWUgJXNcbiIsCisJCWh3bmQsaFduZExCb3gsY2xhc3NOYW1lKTsKKworICBHZXRDbGllbnRSZWN0KGh3bmQsJmNSZWN0KTsKKyAgR2V0V2luZG93UmVjdChod25kLCZ3UmVjdCk7CisgIEdldENsaWVudFJlY3QoaFduZExCb3gsJmxSZWN0KTsKKyAgR2V0V2luZG93UmVjdChoV25kTEJveCwmbHdSZWN0KTsKKworICBkcHJpbnRmX3Z4ZChzdGRkZWIsIkNCTENoZWNrU2l6ZTogaW5pdCBjUmVjdCAlZCwlZC0lZCwlZCAgd1JlY3QgJWQsJWQtJWQsJWRcbiIsCisJCWNSZWN0LmxlZnQsY1JlY3QudG9wLGNSZWN0LnJpZ2h0LGNSZWN0LmJvdHRvbSwKKwkJd1JlY3QubGVmdCx3UmVjdC50b3Asd1JlY3QucmlnaHQsd1JlY3QuYm90dG9tKTsKKyAgZHByaW50Zl92eGQoc3RkZGViLCIgICAgICAgICAgICAgICAgICAgbFJlY3QgJWQsJWQtJWQsJWQgIGx3UmVjdCAlZCwlZC0lZCwlZFxuIiwKKwkgICAgICBsUmVjdC5sZWZ0LGxSZWN0LnRvcCxsUmVjdC5yaWdodCxsUmVjdC5ib3R0b20sCisJICAgICAgbHdSZWN0LmxlZnQsbHdSZWN0LnRvcCxsd1JlY3QucmlnaHQsbHdSZWN0LmJvdHRvbSk7CisgIGZmbHVzaChzdGRkZWIpOworICAKKyAgdG90aGVpZ2h0ID0gMDsKKyAgZm9yIChscGxzPWxwaGwtPmxwRmlyc3Q7IGxwbHMgIT0gTlVMTDsgbHBscz1scGxzLT5scE5leHQpCisgICAgdG90aGVpZ2h0ICs9IGxwbHMtPm1pcy5pdGVtSGVpZ2h0OworCisgIC8qIFRPRE86IFRoaXMgaXNuJ3QgcmVhbGx5IHdoYXQgd2luZG93cyBkb2VzICovCisgIGlmIChsUmVjdC5ib3R0b20tbFJlY3QudG9wIDwgMypscGhsLT5TdGRJdGVtSGVpZ2h0KSB7CisgICAgZHByaW50Zl92eGQoc3RkZGViLCIgICAgQ2hhbmdpbmc7IHRvdEhlaWdodCAlZCAgU3RkSXRlbUhnaHQgJWRcbiIsCisJCXRvdGhlaWdodCxscGhsLT5TdGRJdGVtSGVpZ2h0KTsKKyAgICBTZXRXaW5kb3dQb3MoaFduZExCb3gsIDAsIGxSZWN0LmxlZnQsIGxSZWN0LnRvcCwgCisJCSBsd1JlY3QucmlnaHQtbHdSZWN0LmxlZnQsIHRvdGhlaWdodCsyKlNZU01FVFJJQ1NfQ1lCT1JERVIsIAorCQkgU1dQX05PTU9WRSB8IFNXUF9OT1pPUkRFUiB8IFNXUF9OT1JFRFJBVyB8IFNXUF9OT0FDVElWQVRFICk7CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDb21ib0xCb3hXbmRQcm9jCiAgKi8KQEAgLTk4NCw2ICsxMTM5LDcgQEAKICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6IHJldHVybiBDQkxMQnV0dG9uVXAoaHduZCwgd1BhcmFtLCBsUGFyYW0pOwogICAgICBjYXNlIFdNX01PVVNFTU9WRTogcmV0dXJuIENCTE1vdXNlTW92ZShod25kLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgIGNhc2UgV01fVlNDUk9MTDogcmV0dXJuIENCTFZTY3JvbGwoaHduZCwgd1BhcmFtLCBsUGFyYW0pOworICAgICBjYXNlIFdNX1NJWkU6IHJldHVybiBDQkxDaGVja1NpemUoaHduZCk7CiAgICAgfQogICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGh3bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2VkaXQuYyBiL2NvbnRyb2xzL2VkaXQuYwppbmRleCAyOTYzNjVjLi5kNTVjOTU0IDEwMDY0NAotLS0gYS9jb250cm9scy9lZGl0LmMKKysrIGIvY29udHJvbHMvZWRpdC5jCkBAIC00OCw3ICs0OCw3IEBACiB0eXBlZGVmIHN0cnVjdAogewogCVVJTlQgVGV4dFdpZHRoOwkJLyogd2lkdGggb2YgdGhlIHdpZGVzdCBsaW5lIGluIHBpeGVscyAqLwotCUhMT0NBTCBoQnVmOworCUhMT0NBTDE2IGhCdWY7CiAJY2hhciAqdGV4dDsKIAlIRk9OVCBoRm9udDsKIAlMSU5FREVGICpMaW5lRGVmczsKQEAgLTY0LDcgKzY0LDcgQEAKIAlVSU5UIFNlbFN0YXJ0OwkJLyogb2Zmc2V0IG9mIHNlbGVjdGlvbiBzdGFydCwgPT0gU2VsRW5kIGlmIG5vIHNlbGVjdGlvbiAqLwogCVVJTlQgU2VsRW5kOwkJLyogb2Zmc2V0IG9mIHNlbGVjdGlvbiBlbmQgPT0gY3VycmVudCBjYXJldCBwb3NpdGlvbiAqLwogCVVJTlQgTnVtVGFiU3RvcHM7Ci0JTFBJTlQgVGFiU3RvcHM7CisJTFBJTlQxNiBUYWJTdG9wczsKIAlFRElUV09SREJSRUFLUFJPQyBXb3JkQnJlYWtQcm9jOwogCWNoYXIgUGFzc3dvcmRDaGFyOwogfSBFRElUU1RBVEU7CkBAIC04NTgsNyArODU4LDcgQEAKIAlSRUNUIHJjV25kOwogCVJFQ1QgcmNMaW5lOwogCVJFQ1QgcmNVcGRhdGU7Ci0JVUlOVCBsaW5lOworCVVJTlQgbDsKIAogCWlmIChlbmQgPT0gc3RhcnQgKQogCQlyZXR1cm47CkBAIC04OTQsMTAgKzg5NCwxMCBAQAogCQkJCSZyY0xpbmUpOwogCQlpZiAoSW50ZXJzZWN0UmVjdCgmcmNVcGRhdGUsICZyY1duZCwgJnJjTGluZSkpCiAJCQlJbnZhbGlkYXRlUmVjdCh3bmRQdHItPmh3bmRTZWxmLCAmcmNVcGRhdGUsIEZBTFNFKTsKLQkJZm9yIChsaW5lID0gc2wgKyAxIDsgbGluZSA8IGVsIDsgbGluZSsrKSB7Ci0JCQlFRElUX0dldExpbmVSZWN0KHduZFB0ciwgbGluZSwgMCwKKwkJZm9yIChsID0gc2wgKyAxIDsgbCA8IGVsIDsgbCsrKSB7CisJCQlFRElUX0dldExpbmVSZWN0KHduZFB0ciwgbCwgMCwKIAkJCQkoVUlOVClFRElUX0VNX0xpbmVMZW5ndGgod25kUHRyLAotCQkJCQkoVUlOVClFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGxpbmUsIDBMKSwgMEwpLAorCQkJCQkoVUlOVClFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGwsIDBMKSwgMEwpLAogCQkJCSZyY0xpbmUpOwogCQkJaWYgKEludGVyc2VjdFJlY3QoJnJjVXBkYXRlLCAmcmNXbmQsICZyY0xpbmUpKQogCQkJCUludmFsaWRhdGVSZWN0KHduZFB0ci0+aHduZFNlbGYsICZyY1VwZGF0ZSwgRkFMU0UpOwpAQCAtMTI2Miw3ICsxMjYyLDcgQEAKIAlVSU5UIHJldDsKIAljaGFyICp0ZXh0OwogCVVJTlQgbGk7Ci0JSU5UIHhvZmY7CisJVUlOVCB4b2ZmOwogCiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIDA7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogewogCWNvbnN0IGNoYXIgKnN0ciA9IChjaGFyICopbFBhcmFtOwogCWludCBzdHJsID0gc3RybGVuKHN0cik7Ci0JaW50IHRsID0gRURJVF9XTV9HZXRUZXh0TGVuZ3RoKHduZFB0ciwgMCwgMEwpOworCVVJTlQgdGwgPSAoVUlOVClFRElUX1dNX0dldFRleHRMZW5ndGgod25kUHRyLCAwLCAwTCk7CiAJVUlOVCBzID0gTE9XT1JEKEVESVRfRU1fR2V0U2VsKHduZFB0ciwgMCwgMEwpKTsKIAlVSU5UIGUgPSBISVdPUkQoRURJVF9FTV9HZXRTZWwod25kUHRyLCAwLCAwTCkpOwogCWludCBpOwpAQCAtMTM2NSwyNCArMTM2NSwyNCBAQAogc3RhdGljIHZvaWQgRURJVF9TY3JvbGxJbnRvVmlldyhXTkQgKnduZFB0cikKIHsKIAlVSU5UIGUgPSBISVdPUkQoRURJVF9FTV9HZXRTZWwod25kUHRyLCAwLCAwTCkpOwotCWludCBsID0gRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBlLCAwTCk7Ci0JaW50IGxpbmVpbmRleCA9IEVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbCwgMEwpOwotCWludCBmaXJzdHZpcyA9IChpbnQpRURJVF9FTV9HZXRGaXJzdFZpc2libGVMaW5lKHduZFB0ciwgMCwgMEwpOwotCWludCB2aXNsaW5lY291bnQgPSBFRElUX0dldFZpc2libGVMaW5lQ291bnQod25kUHRyKTsKLQlpbnQgd25kd2lkdGggPSBFRElUX0dldFduZFdpZHRoKHduZFB0cik7Ci0JaW50IGNoYXJ3aWR0aCA9IEVESVRfR2V0QXZlQ2hhcldpZHRoKHduZFB0cik7Ci0JaW50IHggPSBFRElUX1duZFhGcm9tQ29sKHduZFB0ciwgbCwgZSAtIGxpbmVpbmRleCk7CisJVUlOVCBsID0gKFVJTlQpRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBlLCAwTCk7CisJVUlOVCBsaSA9IChVSU5UKUVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbCwgMEwpOworCVVJTlQgZnYgPSAoVUlOVClFRElUX0VNX0dldEZpcnN0VmlzaWJsZUxpbmUod25kUHRyLCAwLCAwTCk7CisJVUlOVCB2bGMgPSBFRElUX0dldFZpc2libGVMaW5lQ291bnQod25kUHRyKTsKKwlVSU5UIHd3ID0gRURJVF9HZXRXbmRXaWR0aCh3bmRQdHIpOworCVVJTlQgY3cgPSBFRElUX0dldEF2ZUNoYXJXaWR0aCh3bmRQdHIpOworCUlOVCB4ID0gRURJVF9XbmRYRnJvbUNvbCh3bmRQdHIsIGwsIGUgLSBsaSk7CiAJaW50IGR5ID0gMDsKIAlpbnQgZHggPSAwOwogCi0JaWYgKGwgPj0gZmlyc3R2aXMgKyB2aXNsaW5lY291bnQpCi0JCWR5ID0gbCAtIHZpc2xpbmVjb3VudCArIDEgLSBmaXJzdHZpczsKLQlpZiAobCA8IGZpcnN0dmlzKQotCQlkeSA9IGwgLSBmaXJzdHZpczsKKwlpZiAobCA+PSBmdiArIHZsYykKKwkJZHkgPSBsIC0gdmxjICsgMSAtIGZ2OworCWlmIChsIDwgZnYpCisJCWR5ID0gbCAtIGZ2OwogCWlmICh4IDwgMCkKLQkJZHggPSB4IC0gd25kd2lkdGggLyBIU0NST0xMX0ZSQUNUSU9OIC8gY2hhcndpZHRoICogY2hhcndpZHRoOwotCWlmICh4ID4gd25kd2lkdGgpCi0JCWR4ID0geCAtIChIU0NST0xMX0ZSQUNUSU9OIC0gMSkgKiB3bmR3aWR0aCAvIEhTQ1JPTExfRlJBQ1RJT04gLyBjaGFyd2lkdGggKiBjaGFyd2lkdGg7CisJCWR4ID0geCAtIHd3IC8gSFNDUk9MTF9GUkFDVElPTiAvIGN3ICogY3c7CisJaWYgKHggPiB3dykKKwkJZHggPSB4IC0gKEhTQ1JPTExfRlJBQ1RJT04gLSAxKSAqIHd3IC8gSFNDUk9MTF9GUkFDVElPTiAvIGN3ICogY3c7CiAJaWYgKGR5IHx8IGR4KSB7CiAJCUVESVRfRU1fTGluZVNjcm9sbCh3bmRQdHIsIDAsIE1BS0VMUEFSQU0oZHksIGR4KSk7CiAJCWlmIChkeSkgCkBAIC0xNDA0LDI0ICsxNDA0LDI0IEBACiB7CQogCUVESVRTVEFURSAqZXMgPSBFRElUU1RBVEVQVFIod25kUHRyKTsKIAljaGFyICp0ZXh0ID0gRURJVF9HZXRQb2ludGVyKHduZFB0cik7Ci0JaW50IHJldDsKKwlJTlQgcmV0OwogCUhEQyBoZGM7CiAJSEZPTlQgaEZvbnQ7CiAJSEZPTlQgb2xkRm9udCA9IDA7Ci0JaW50IGxpbmVjb3VudCA9IChpbnQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCk7Ci0JaW50IGxpbmVpbmRleCA9IEVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbGluZSwgMEwpOwotCWludCBsaW5lbGVuZ3RoID0gRURJVF9FTV9MaW5lTGVuZ3RoKHduZFB0ciwgbGluZWluZGV4LCAwTCk7Ci0JaW50IHhvZmZzZXQgPSBFRElUX0dldFhPZmZzZXQod25kUHRyKTsKKwlVSU5UIGxjID0gKFVJTlQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCk7CisJVUlOVCBsaSA9IChVSU5UKUVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbGluZSwgMEwpOworCVVJTlQgbGwgPSAoVUlOVClFRElUX0VNX0xpbmVMZW5ndGgod25kUHRyLCBsaSwgMEwpOworCVVJTlQgeG9mZiA9IEVESVRfR2V0WE9mZnNldCh3bmRQdHIpOwogCiAJaGRjID0gR2V0REMod25kUHRyLT5od25kU2VsZik7CiAJaEZvbnQgPSAoSEZPTlQpRURJVF9XTV9HZXRGb250KHduZFB0ciwgMCwgMEwpOwogCWlmIChoRm9udCkKIAkJb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIGhGb250KTsKLQlsaW5lID0gTUFYKDAsIE1JTihsaW5lLCBsaW5lY291bnQgLSAxKSk7Ci0JY29sID0gTUFYKDAsIE1JTihjb2wsIGxpbmVsZW5ndGgpKTsKKwlsaW5lID0gTUFYKDAsIE1JTihsaW5lLCBsYyAtIDEpKTsKKwljb2wgPSBNSU4oY29sLCBsbCk7CiAJcmV0ID0gTE9XT1JEKEdldFRhYmJlZFRleHRFeHRlbnQoaGRjLAotCQkJdGV4dCArIGxpbmVpbmRleCwgY29sLAotCQkJZXMtPk51bVRhYlN0b3BzLCBlcy0+VGFiU3RvcHMpKSAtIHhvZmZzZXQ7CisJCQl0ZXh0ICsgbGksIGNvbCwKKwkJCWVzLT5OdW1UYWJTdG9wcywgZXMtPlRhYlN0b3BzKSkgLSB4b2ZmOwogCWlmIChoRm9udCkKIAkJU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CiAJUmVsZWFzZURDKHduZFB0ci0+aHduZFNlbGYsIGhkYyk7CkBAIC0xNDM4LDEwICsxNDM4LDEwIEBACiAgKi8KIHN0YXRpYyBJTlQgRURJVF9XbmRZRnJvbUxpbmUoV05EICp3bmRQdHIsIFVJTlQgbGluZSkKIHsKLQlpbnQgZmlyc3R2aXMgPSAoaW50KUVESVRfRU1fR2V0Rmlyc3RWaXNpYmxlTGluZSh3bmRQdHIsIDAsIDBMKTsKLQlpbnQgbGluZWhlaWdodCA9IEVESVRfR2V0TGluZUhlaWdodCh3bmRQdHIpOworCVVJTlQgZnYgPSAoVUlOVClFRElUX0VNX0dldEZpcnN0VmlzaWJsZUxpbmUod25kUHRyLCAwLCAwTCk7CisJVUlOVCBsaCA9IEVESVRfR2V0TGluZUhlaWdodCh3bmRQdHIpOwogCi0JcmV0dXJuIChsaW5lIC0gZmlyc3R2aXMpICogbGluZWhlaWdodDsKKwlyZXR1cm4gKGxpbmUgLSBmdikgKiBsaDsKIH0KIAogCkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogICovCiBzdGF0aWMgSU5UIEVESVRfV29yZEJyZWFrUHJvYyhjaGFyICpzLCBJTlQgaW5kZXgsIElOVCBjb3VudCwgSU5UIGFjdGlvbikKIHsKLQlpbnQgcmV0ID0gMDsKKwlJTlQgcmV0ID0gMDsKIAogCWRwcmludGZfZWRpdChzdGRkZWIsICJlZGl0OiBFRElUX1dvcmRCcmVha1Byb2M6IHM9JXAsIGluZGV4PSVkIgogCQkJIiwgY291bnQ9JWQsIGFjdGlvbj0lZFxuIiwgcywgaW5kZXgsIGNvdW50LCBhY3Rpb24pOwpAQCAtMTU4MiwxNyArMTU4MiwxNyBAQAogCWNoYXIgKnNyYzsKIAljaGFyICpkc3Q7CiAJVUlOVCBsZW47Ci0JaW50IGk7Ci0JaW50IGxpbmVjb3VudCA9IChpbnQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCk7CisJVUlOVCBpOworCVVJTlQgbGMgPSAoVUlOVClFRElUX0VNX0dldExpbmVDb3VudCh3bmRQdHIsIDAsIDBMKTsKIAogCWlmICghSXNNdWx0aUxpbmUod25kUHRyKSkKIAkJd1BhcmFtID0gMDsKLQlpZiAoKFVJTlQpd1BhcmFtID49IGxpbmVjb3VudCkKKwlpZiAoKFVJTlQpd1BhcmFtID49IGxjKQogCQlyZXR1cm4gMEw7CiAJdGV4dCA9IEVESVRfR2V0UG9pbnRlcih3bmRQdHIpOwotCXNyYyA9IHRleHQgKyBFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIHdQYXJhbSwgMEwpOworCXNyYyA9IHRleHQgKyAoVUlOVClFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIHdQYXJhbSwgMEwpOwogCWRzdCA9IChjaGFyICopUFRSX1NFR19UT19MSU4obFBhcmFtKTsKLQlsZW4gPSBNSU4oKihXT1JEICopZHN0LCBFRElUX0VNX0xpbmVMZW5ndGgod25kUHRyLCB3UGFyYW0sIDBMKSk7CisJbGVuID0gTUlOKCooV09SRCAqKWRzdCwgKFVJTlQpRURJVF9FTV9MaW5lTGVuZ3RoKHduZFB0ciwgd1BhcmFtLCAwTCkpOwogCWZvciAoaSA9IDAgOyBpIDwgbGVuIDsgaSsrKSB7CiAJCSpkc3QgPSAqc3JjOwogCQlzcmMrKzsKQEAgLTE2NjksNyArMTY2OSw3IEBACiAgKgogICoJRU1fR0VUVEhVTUIKICAqCi0gKgl1bmRvY3VtZW50ZWQ6IGlzIHRoaXMgcmlnaHQgPworICoJRklYTUU6IHVuZG9jdW1lbnRlZDogaXMgdGhpcyByaWdodCA/CiAgKgogICovCiBzdGF0aWMgTFJFU1VMVCBFRElUX0VNX0dldFRodW1iKFdORCAqd25kUHRyLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpAQCAtMTcyMywxNCArMTcyMywxNCBAQAogICovCiBzdGF0aWMgTFJFU1VMVCBFRElUX0VNX0xpbmVGcm9tQ2hhcihXTkQgKnduZFB0ciwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLQlpbnQgbDsKKwlVSU5UIGw7CiAKIAlpZiAoIUlzTXVsdGlMaW5lKHduZFB0cikpCiAJCXJldHVybiAwTDsKIAlpZiAoKElOVCl3UGFyYW0gPT0gLTEpCiAJCXdQYXJhbSA9IEhJV09SRChFRElUX0VNX0dldFNlbCh3bmRQdHIsIDAsIDBMKSk7Ci0JbCA9IChpbnQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCkgLSAxOwotCXdoaWxlIChFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGwsIDBMKSA+IChVSU5UKXdQYXJhbSkKKwlsID0gKFVJTlQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCkgLSAxOworCXdoaWxlICgoVUlOVClFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGwsIDBMKSA+IChVSU5UKXdQYXJhbSkKIAkJbC0tOwogCXJldHVybiAoTFJFU1VMVClsOwogfQpAQCAtMTc0NSwxNiArMTc0NSwxNyBAQAogewogCUVESVRTVEFURSAqZXMgPSBFRElUU1RBVEVQVFIod25kUHRyKTsKIAlVSU5UIGU7Ci0JaW50IGw7CisJVUlOVCBsOworCVVJTlQgbGMgPSAoVUlOVClFRElUX0VNX0dldExpbmVDb3VudCh3bmRQdHIsIDAsIDBMKTsKIAogCWlmICgoSU5UKXdQYXJhbSA9PSAtMSkgewogCQllID0gSElXT1JEKEVESVRfRU1fR2V0U2VsKHduZFB0ciwgMCwgMEwpKTsKLQkJbCA9IChpbnQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCkgLSAxOworCQlsID0gbGMgLSAxOwogCQl3aGlsZSAoZXMtPkxpbmVEZWZzW2xdLm9mZnNldCA+IGUpCiAJCQlsLS07CiAJCXJldHVybiAoTFJFU1VMVCllcy0+TGluZURlZnNbbF0ub2Zmc2V0OwogCX0KLQlpZiAoKFVJTlQpd1BhcmFtID49IGVzLT5MaW5lQ291bnQpCisJaWYgKChVSU5UKXdQYXJhbSA+PSBsYykKIAkJcmV0dXJuIC0xTDsKIAlyZXR1cm4gKExSRVNVTFQpZXMtPkxpbmVEZWZzWyhVSU5UKXdQYXJhbV0ub2Zmc2V0OwogfQpAQCAtMTc2OCwyMSArMTc2OSwyMSBAQAogc3RhdGljIExSRVNVTFQgRURJVF9FTV9MaW5lTGVuZ3RoKFdORCAqd25kUHRyLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogCUVESVRTVEFURSAqZXMgPSBFRElUU1RBVEVQVFIod25kUHRyKTsKLQlVSU5UIHNlbHN0YXJ0OwotCVVJTlQgc2VsZW5kOwotCWludCBzdGFydGxpbmU7Ci0JaW50IGVuZGxpbmU7CisJVUlOVCBzOworCVVJTlQgZTsKKwlVSU5UIHNsOworCVVJTlQgZWw7CiAKIAlpZiAoIUlzTXVsdGlMaW5lKHduZFB0cikpCiAJCXJldHVybiAoTFJFU1VMVCllcy0+TGluZURlZnNbMF0ubGVuZ3RoOwogCWlmICgoSU5UKXdQYXJhbSA9PSAtMSkgewotCQlzZWxzdGFydCA9IExPV09SRChFRElUX0VNX0dldFNlbCh3bmRQdHIsIDAsIDBMKSk7Ci0JCXNlbGVuZCA9IEhJV09SRChFRElUX0VNX0dldFNlbCh3bmRQdHIsIDAsIDBMKSk7Ci0JCXN0YXJ0bGluZSA9IEVESVRfRU1fTGluZUZyb21DaGFyKHduZFB0ciwgc2Vsc3RhcnQsIDBMKTsKLQkJZW5kbGluZSA9IEVESVRfRU1fTGluZUZyb21DaGFyKHduZFB0ciwgc2VsZW5kLCAwTCk7Ci0JCXJldHVybiAoTFJFU1VMVCkoc2Vsc3RhcnQgLSBlcy0+TGluZURlZnNbc3RhcnRsaW5lXS5vZmZzZXQgKwotCQkJCWVzLT5MaW5lRGVmc1tlbmRsaW5lXS5vZmZzZXQgKwotCQkJCWVzLT5MaW5lRGVmc1tlbmRsaW5lXS5sZW5ndGggLSBzZWxlbmQpOworCQlzID0gTE9XT1JEKEVESVRfRU1fR2V0U2VsKHduZFB0ciwgMCwgMEwpKTsKKwkJZSA9IEhJV09SRChFRElUX0VNX0dldFNlbCh3bmRQdHIsIDAsIDBMKSk7CisJCXNsID0gKFVJTlQpRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBzLCAwTCk7CisJCWVsID0gKFVJTlQpRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBlLCAwTCk7CisJCXJldHVybiAoTFJFU1VMVCkocyAtIGVzLT5MaW5lRGVmc1tzbF0ub2Zmc2V0ICsKKwkJCQllcy0+TGluZURlZnNbZWxdLm9mZnNldCArCisJCQkJZXMtPkxpbmVEZWZzW2VsXS5sZW5ndGggLSBlKTsKIAl9CiAJcmV0dXJuIChMUkVTVUxUKWVzLT5MaW5lRGVmc1soVUlOVClFRElUX0VNX0xpbmVGcm9tQ2hhcih3bmRQdHIsIHdQYXJhbSwgMEwpXS5sZW5ndGg7CiB9CkBAIC0xNzk2LDI4ICsxNzk3LDI0IEBACiBzdGF0aWMgTFJFU1VMVCBFRElUX0VNX0xpbmVTY3JvbGwoV05EICp3bmRQdHIsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAJRURJVFNUQVRFICplcyA9IEVESVRTVEFURVBUUih3bmRQdHIpOwotCWludCBsaW5lY291bnQgPSAoaW50KUVESVRfRU1fR2V0TGluZUNvdW50KHduZFB0ciwgMCwgMEwpOwotCWludCBmaXJzdHZpcyA9IChpbnQpRURJVF9FTV9HZXRGaXJzdFZpc2libGVMaW5lKHduZFB0ciwgMCwgMEwpOwotCWludCBuZXdmaXJzdHZpcyA9IGZpcnN0dmlzICsgKElOVClMT1dPUkQobFBhcmFtKTsKLQlpbnQgeG9mZnNldCA9IEVESVRfR2V0WE9mZnNldCh3bmRQdHIpOwotCWludCBuZXd4b2Zmc2V0ID0geG9mZnNldCArIChJTlQpSElXT1JEKGxQYXJhbSk7Ci0JaW50IHRleHR3aWR0aCA9IEVESVRfR2V0VGV4dFdpZHRoKHduZFB0cik7Ci0JaW50IGR4OwotCWludCBkeTsKKwlVSU5UIGxjID0gKFVJTlQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCk7CisJVUlOVCBmdiA9IChVSU5UKUVESVRfRU1fR2V0Rmlyc3RWaXNpYmxlTGluZSh3bmRQdHIsIDAsIDBMKTsKKwlVSU5UIG5mdiA9IE1BWCgwLCBmdiArIChJTlQpTE9XT1JEKGxQYXJhbSkpOworCVVJTlQgeG9mZiA9IEVESVRfR2V0WE9mZnNldCh3bmRQdHIpOworCVVJTlQgbnhvZmYgPSBNQVgoMCwgeG9mZiArIChJTlQpSElXT1JEKGxQYXJhbSkpOworCVVJTlQgdHcgPSBFRElUX0dldFRleHRXaWR0aCh3bmRQdHIpOworCUlOVCBkeDsKKwlJTlQgZHk7CiAJUE9JTlQgcG9zOwogCUhSR04gaFJnbjsKIAotCWlmIChuZXdmaXJzdHZpcyA8IDApCi0JCW5ld2ZpcnN0dmlzID0gMDsKLQlpZiAobmV3Zmlyc3R2aXMgPj0gbGluZWNvdW50KQotCQluZXdmaXJzdHZpcyA9IGxpbmVjb3VudCAtIDE7CisJaWYgKG5mdiA+PSBsYykKKwkJbmZ2ID0gbGMgLSAxOwogCi0JaWYgKG5ld3hvZmZzZXQgPCAwKQotCQluZXd4b2Zmc2V0ID0gMDsKLQlpZiAobmV3eG9mZnNldCA+PSB0ZXh0d2lkdGgpCi0JCW5ld3hvZmZzZXQgPSB0ZXh0d2lkdGg7Ci0JZHggPSB4b2Zmc2V0IC0gbmV3eG9mZnNldDsKLQlkeSA9IEVESVRfV25kWUZyb21MaW5lKHduZFB0ciwgZmlyc3R2aXMpIC0gRURJVF9XbmRZRnJvbUxpbmUod25kUHRyLCBuZXdmaXJzdHZpcyk7CisJaWYgKG54b2ZmID49IHR3KQorCQlueG9mZiA9IHR3OworCWR4ID0geG9mZiAtIG54b2ZmOworCWR5ID0gRURJVF9XbmRZRnJvbUxpbmUod25kUHRyLCBmdikgLSBFRElUX1duZFlGcm9tTGluZSh3bmRQdHIsIG5mdik7CiAJaWYgKGR4IHx8IGR5KSB7CiAJCWlmICh3bmRQdHItPmh3bmRTZWxmID09IEdldEZvY3VzKCkpCiAJCQlIaWRlQ2FyZXQod25kUHRyLT5od25kU2VsZik7CkBAIC0xODMwLDggKzE4MjcsOCBAQAogCQkJRGVsZXRlT2JqZWN0KGhSZ24pOwogCQkJU2Nyb2xsV2luZG93KHduZFB0ci0+aHduZFNlbGYsIGR4LCBkeSwgTlVMTCwgTlVMTCk7CiAJCX0KLQkJZXMtPkZpcnN0VmlzaWJsZUxpbmUgPSBuZXdmaXJzdHZpczsKLQkJZXMtPlhPZmZzZXQgPSBuZXd4b2Zmc2V0OworCQllcy0+Rmlyc3RWaXNpYmxlTGluZSA9IG5mdjsKKwkJZXMtPlhPZmZzZXQgPSBueG9mZjsKIAkJaWYgKElzVlNjcm9sbEJhcih3bmRQdHIpKQogCQkJU2V0U2Nyb2xsUG9zKHduZFB0ci0+aHduZFNlbGYsIFNCX1ZFUlQsCiAJCQkJRURJVF9XTV9WU2Nyb2xsKHduZFB0ciwgRU1fR0VUVEhVTUIsIDBMKSwgVFJVRSk7CkBAIC0xODg4LDcgKzE4ODUsNyBAQAogCQkvKgogCQkgKglvbGQgYnVmZmVyIGlzIGZyZWVkIGJ5IGNhbGxlcgogCQkgKi8KLQkJZXMtPmhCdWYgPSAoSExPQ0FMKXdQYXJhbTsKKwkJZXMtPmhCdWYgPSAoSExPQ0FMMTYpd1BhcmFtOwogCQllcy0+QnVmU2l6ZSA9IExPQ0FMX1NpemUod25kUHRyLT5oSW5zdGFuY2UsIGVzLT5oQnVmKSAtIDE7CiAJCWVzLT5MaW5lQ291bnQgPSAwOwogCQllcy0+Rmlyc3RWaXNpYmxlTGluZSA9IDA7CkBAIC0xODk4LDYgKzE4OTUsNyBAQAogCQlFRElUX0J1aWxkTGluZURlZnMod25kUHRyKTsKIAkJaWYgKEVESVRfR2V0UmVkcmF3KHduZFB0cikpCiAJCQlJbnZhbGlkYXRlUmVjdCh3bmRQdHItPmh3bmRTZWxmLCBOVUxMLCBUUlVFKTsKKwkJRURJVF9TY3JvbGxJbnRvVmlldyh3bmRQdHIpOwogCX0KIAlyZXR1cm4gMEw7CiB9CkBAIC0xOTgyLDkgKzE5ODAsOSBAQAogCVVJTlQgbmUgPSBISVdPUkQobFBhcmFtKTsKIAlVSU5UIHMgPSBMT1dPUkQoRURJVF9FTV9HZXRTZWwod25kUHRyLCAwLCAwTCkpOwogCVVJTlQgZSA9IEhJV09SRChFRElUX0VNX0dldFNlbCh3bmRQdHIsIDAsIDBMKSk7Ci0JaW50IGVsOwotCWludCBlbGluZWluZGV4OwotCWludCB0bCA9IEVESVRfV01fR2V0VGV4dExlbmd0aCh3bmRQdHIsIDAsIDBMKTsKKwlVSU5UIGVsOworCVVJTlQgZWxpOworCVVJTlQgdGwgPSAoVUlOVClFRElUX1dNX0dldFRleHRMZW5ndGgod25kUHRyLCAwLCAwTCk7CiAKIAlpZiAoKElOVClucyA9PSAtMSkgewogCQlucyA9IGU7CkBAIC0xOTk3LDkgKzE5OTUsOSBAQAogCWVzLT5TZWxTdGFydCA9IG5zOwogCWVzLT5TZWxFbmQgPSBuZTsKIAlpZiAod25kUHRyLT5od25kU2VsZiA9PSBHZXRGb2N1cygpKSB7Ci0JCWVsID0gRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBuZSwgMEwpOwotCQllbGluZWluZGV4ID0gRURJVF9FTV9MaW5lSW5kZXgod25kUHRyLCBlbCwgMEwpOwotCQlTZXRDYXJldFBvcyhFRElUX1duZFhGcm9tQ29sKHduZFB0ciwgZWwsIG5lIC0gZWxpbmVpbmRleCksCisJCWVsID0gKFVJTlQpRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBuZSwgMEwpOworCQllbGkgPSAoVUlOVClFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGVsLCAwTCk7CisJCVNldENhcmV0UG9zKEVESVRfV25kWEZyb21Db2wod25kUHRyLCBlbCwgbmUgLSBlbGkpLAogCQkJCUVESVRfV25kWUZyb21MaW5lKHduZFB0ciwgZWwpKTsKIAl9CiAJaWYgKCF3UGFyYW0pCkBAIC0yMDM4LDkgKzIwMzYsOSBAQAogCWlmICghd1BhcmFtKQogCQllcy0+VGFiU3RvcHMgPSBOVUxMOwogCWVsc2UgewotCQllcy0+VGFiU3RvcHMgPSAoTFBJTlQpeG1hbGxvYyh3UGFyYW0gKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKLQkJbWVtY3B5KGVzLT5UYWJTdG9wcywgKExQSU5UKVBUUl9TRUdfVE9fTElOKGxQYXJhbSksCi0JCQkJKFVJTlQpd1BhcmFtICogc2l6ZW9mKElOVCkpOworCQllcy0+VGFiU3RvcHMgPSAoTFBJTlQxNil4bWFsbG9jKHdQYXJhbSAqIHNpemVvZihJTlQxNikpOworCQltZW1jcHkoZXMtPlRhYlN0b3BzLCAoTFBJTlQxNilQVFJfU0VHX1RPX0xJTihsUGFyYW0pLAorCQkJCShVSU5UKXdQYXJhbSAqIHNpemVvZihJTlQxNikpOwogCX0KIAlyZXR1cm4gMUw7CiB9CkBAIC0yMTU4LDE0ICsyMTU2LDE0IEBACiAJaWYgKGUgPT0gcykKIAkJcmV0dXJuIC0xTDsKIAlPUkRFUl9VSU5UKHMsIGUpOwotCWhkc3QgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCAoRFdPUkQpKGUgLSBzICsgMSkpOwotCWRzdCA9IEdsb2JhbExvY2soaGRzdCk7CisJaGRzdCA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgKERXT1JEKShlIC0gcyArIDEpKTsKKwlkc3QgPSBHbG9iYWxMb2NrMTYoaGRzdCk7CiAJdGV4dCA9IEVESVRfR2V0UG9pbnRlcih3bmRQdHIpOwogCXNyYyA9IHRleHQgKyBzOwogCWZvciAoaSA9IDAgOyBpIDwgZSAtIHMgOyBpKyspCiAJCSpkc3QrKyA9ICpzcmMrKzsKIAkqZHN0ID0gJ1wwJzsKLQlHbG9iYWxVbmxvY2soaGRzdCk7CisJR2xvYmFsVW5sb2NrMTYoaGRzdCk7CiAJT3BlbkNsaXBib2FyZCh3bmRQdHItPmh3bmRTZWxmKTsKIAlFbXB0eUNsaXBib2FyZCgpOwogCVNldENsaXBib2FyZERhdGEoQ0ZfVEVYVCwgaGRzdCk7CkBAIC0yMjA4LDggKzIyMDYsMTUgQEAKIAkJZXMtPkJ1ZkxpbWl0ID0gQlVGTElNSVRfU0lOR0xFOwogCQllcy0+UGFzc3dvcmRDaGFyID0gKGNzLT5zdHlsZSAmIEVTX1BBU1NXT1JEKSA/ICcqJyA6ICdcMCc7CiAJfQorCWlmICghTE9DQUxfSGVhcFNpemUod25kUHRyLT5oSW5zdGFuY2UpKSB7CisJCWlmICghTG9jYWxJbml0KHduZFB0ci0+aEluc3RhbmNlLCAwLCBHbG9iYWxTaXplKHduZFB0ci0+aEluc3RhbmNlKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZWRpdDogV01fQ1JFQVRFOiBjb3VsZCBub3QgaW5pdGlhbGl6ZSBsb2NhbCBoZWFwXG4iKTsKKwkJCXJldHVybiAtMUw7CisJCX0KKwkJZHByaW50Zl9lZGl0KHN0ZGRlYiwgImVkaXQ6IFdNX0NSRUFURTogbG9jYWwgaGVhcCBpbml0aWFsaXplZFxuIik7CisJfQogCWlmICghKGVzLT5oQnVmID0gTE9DQUxfQWxsb2Mod25kUHRyLT5oSW5zdGFuY2UsIExNRU1fTU9WRUFCTEUsIGVzLT5CdWZTaXplICsgMSkpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiZWRpdDogV01fQ1JFQVRFOiB1bmFibGUgdG8gaGVhcCBidWZmZXIsIHBsZWFzZSByZXBvcnQgIVxuIik7CisJCWZwcmludGYoc3RkZXJyLCAiZWRpdDogV01fQ1JFQVRFOiB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyXG4iKTsKIAkJcmV0dXJuIC0xTDsKIAl9CiAJZXMtPkJ1ZlNpemUgPSBMT0NBTF9TaXplKHduZFB0ci0+aEluc3RhbmNlLCBlcy0+aEJ1ZikgLSAxOwpAQCAtMjM0OCwxMSArMjM1Myw5IEBACiAgKi8KIHN0YXRpYyBMUkVTVUxUIEVESVRfV01fR2V0VGV4dExlbmd0aChXTkQgKnduZFB0ciwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLQlMUkVTVUxUIHJldDsKIAljaGFyICp0ZXh0ID0gRURJVF9HZXRQb2ludGVyKHduZFB0cik7CiAKLQlyZXQgPSAoTFJFU1VMVClzdHJsZW4odGV4dCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gKExSRVNVTFQpc3RybGVuKHRleHQpOwogfQogIAogCkBAIC0yMzY1LDQzICsyMzY4LDQzIEBACiAgKi8KIHN0YXRpYyBMUkVTVUxUIEVESVRfV01fSFNjcm9sbChXTkQgKnduZFB0ciwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLQlpbnQgd25kd2lkdGggPSBFRElUX0dldFduZFdpZHRoKHduZFB0cik7Ci0JaW50IHRleHR3aWR0aCA9IEVESVRfR2V0VGV4dFdpZHRoKHduZFB0cik7Ci0JaW50IGNoYXJ3aWR0aCA9IEVESVRfR2V0QXZlQ2hhcldpZHRoKHduZFB0cik7Ci0JaW50IHhvZmZzZXQgPSBFRElUX0dldFhPZmZzZXQod25kUHRyKTsKLQlpbnQgZHggPSAwOworCVVJTlQgd3cgPSBFRElUX0dldFduZFdpZHRoKHduZFB0cik7CisJVUlOVCB0dyA9IEVESVRfR2V0VGV4dFdpZHRoKHduZFB0cik7CisJVUlOVCBjdyA9IEVESVRfR2V0QXZlQ2hhcldpZHRoKHduZFB0cik7CisJVUlOVCB4b2ZmID0gRURJVF9HZXRYT2Zmc2V0KHduZFB0cik7CisJSU5UIGR4ID0gMDsKIAlCT09MIG5vdCA9IFRSVUU7CiAJTFJFU1VMVCByZXQgPSAwTDsKIAogCXN3aXRjaCAod1BhcmFtKSB7CiAJY2FzZSBTQl9MSU5FTEVGVDoKLQkJZHggPSAtY2hhcndpZHRoOworCQlkeCA9IC1jdzsKIAkJYnJlYWs7CiAJY2FzZSBTQl9MSU5FUklHSFQ6Ci0JCWR4ID0gY2hhcndpZHRoOworCQlkeCA9IGN3OwogCQlicmVhazsKIAljYXNlIFNCX1BBR0VMRUZUOgotCQlkeCA9IC13bmR3aWR0aCAvIEhTQ1JPTExfRlJBQ1RJT04gLyBjaGFyd2lkdGggKiBjaGFyd2lkdGg7CisJCWR4ID0gLXd3IC8gSFNDUk9MTF9GUkFDVElPTiAvIGN3ICogY3c7CiAJCWJyZWFrOwogCWNhc2UgU0JfUEFHRVJJR0hUOgotCQlkeCA9IHduZHdpZHRoIC8gSFNDUk9MTF9GUkFDVElPTiAvIGNoYXJ3aWR0aCAqIGNoYXJ3aWR0aDsKKwkJZHggPSB3dyAvIEhTQ1JPTExfRlJBQ1RJT04gLyBjdyAqIGN3OwogCQlicmVhazsKIAljYXNlIFNCX0xFRlQ6Ci0JCWR4ID0gLXhvZmZzZXQ7CisJCWR4ID0gLXhvZmY7CiAJCWJyZWFrOwogCWNhc2UgU0JfUklHSFQ6Ci0JCWR4ID0gdGV4dHdpZHRoIC0geG9mZnNldDsKKwkJZHggPSB0dyAtIHhvZmY7CiAJCWJyZWFrOwogCWNhc2UgU0JfVEhVTUJUUkFDSzoKIC8qCiAgKgkJbm90ID0gRkFMU0U7CiAgKi8KIAljYXNlIFNCX1RIVU1CUE9TSVRJT046Ci0JCWR4ID0gTE9XT1JEKGxQYXJhbSkgKiB0ZXh0d2lkdGggLyAxMDAgLSB4b2Zmc2V0OworCQlkeCA9IExPV09SRChsUGFyYW0pICogdHcgLyAxMDAgLSB4b2ZmOwogCQlicmVhazsKIAkvKiBUaGUgbmV4dCB0d28gYXJlIHVuZG9jdW1lbnRlZCAhICovCiAJY2FzZSBFTV9HRVRUSFVNQjoKLQkJcmV0ID0gdGV4dHdpZHRoID8gTUFLRUxPTkcoeG9mZnNldCAqIDEwMCAvIHRleHR3aWR0aCwgMCkgOiAwOworCQlyZXQgPSB0dyA/IE1BS0VMT05HKHhvZmYgKiAxMDAgLyB0dywgMCkgOiAwOwogCQlicmVhazsKIAljYXNlIEVNX0xJTkVTQ1JPTEw6CiAJCWR4ID0gTE9XT1JEKGxQYXJhbSk7CkBAIC0yNTM5LDExICsyNTQyLDExIEBACiAgKi8KIHN0YXRpYyBMUkVTVUxUIEVESVRfV01fTEJ1dHRvbkRibENsayhXTkQgKnduZFB0ciwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLQlpbnQgczsKKwlVSU5UIHM7CiAJVUlOVCBlID0gSElXT1JEKEVESVRfRU1fR2V0U2VsKHduZFB0ciwgMCwgMEwpKTsKLQlVSU5UIGwgPSBFRElUX0VNX0xpbmVGcm9tQ2hhcih3bmRQdHIsIGUsIDBMKTsKLQlpbnQgbGkgPSBFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGwsIDBMKTsKLQlpbnQgbGwgPSBFRElUX0VNX0xpbmVMZW5ndGgod25kUHRyLCBlLCAwTCk7CisJVUlOVCBsID0gKFVJTlQpRURJVF9FTV9MaW5lRnJvbUNoYXIod25kUHRyLCBlLCAwTCk7CisJVUlOVCBsaSA9IChVSU5UKUVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbCwgMEwpOworCVVJTlQgbGwgPSAoVUlOVClFRElUX0VNX0xpbmVMZW5ndGgod25kUHRyLCBlLCAwTCk7CiAJY2hhciAqdGV4dCA9IEVESVRfR2V0UG9pbnRlcih3bmRQdHIpOwogCiAJcyA9IGxpICsgRURJVF9DYWxsV29yZEJyZWFrUHJvYyh3bmRQdHIsIHRleHQgKyBsaSwgZSAtIGxpLCBsbCwgV0JfTEVGVCk7CkBAIC0yNTc1LDcgKzI1NzgsNyBAQAogCWwgPSBNSU4oZnYgKyB2bGMgLSAxLCBNQVgoZnYsIGwpKTsKIAl4ID0gTUlOKEVESVRfR2V0V25kV2lkdGgod25kUHRyKSwgTUFYKDAsIHgpKTsKIAljID0gRURJVF9Db2xGcm9tV25kWCh3bmRQdHIsIGwsIHgpOwotCWxpID0gRURJVF9FTV9MaW5lSW5kZXgod25kUHRyLCBsLCAwTCk7CisJbGkgPSAoVUlOVClFRElUX0VNX0xpbmVJbmRleCh3bmRQdHIsIGwsIDBMKTsKIAllID0gbGkgKyBjOwogCWlmIChHZXRLZXlTdGF0ZShWS19TSElGVCkgJiAweDgwMDApCiAJCXMgPSBMT1dPUkQoRURJVF9FTV9HZXRTZWwod25kUHRyLCAwLCAwTCkpOwpAQCAtMjYyNSw3ICsyNjI4LDcgQEAKIAkJeCA9IE1JTihFRElUX0dldFduZFdpZHRoKHduZFB0ciksIE1BWCgwLCB4KSk7CiAJCWMgPSBFRElUX0NvbEZyb21XbmRYKHduZFB0ciwgbCwgeCk7CiAJCXMgPSBMT1dPUkQoRURJVF9FTV9HZXRTZWwod25kUHRyLCAwLCAwTCkpOwotCQlsaSA9IEVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbCwgMEwpOworCQlsaSA9IChVSU5UKUVESVRfRU1fTGluZUluZGV4KHduZFB0ciwgbCwgMEwpOwogCQlFRElUX0VNX1NldFNlbCh3bmRQdHIsIDEsIE1BS0VMUEFSQU0ocywgbGkgKyBjKSk7CiAJfQogCXJldHVybiAwTDsKQEAgLTI2MzksMTAgKzI2NDIsMTEgQEAKICAqLwogc3RhdGljIExSRVNVTFQgRURJVF9XTV9QYWludChXTkQgKnduZFB0ciwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLQlFRElUU1RBVEUgKmVzID0gRURJVFNUQVRFUFRSKHduZFB0cik7CiAJUEFJTlRTVFJVQ1QgcHM7Ci0JaW50IGk7Ci0JaW50IGZpcnN0dmlzID0gKGludClFRElUX0VNX0dldEZpcnN0VmlzaWJsZUxpbmUod25kUHRyLCAwLCAwTCk7CisJVUlOVCBpOworCVVJTlQgZnYgPSAoVUlOVClFRElUX0VNX0dldEZpcnN0VmlzaWJsZUxpbmUod25kUHRyLCAwLCAwTCk7CisJVUlOVCB2bGMgPSBFRElUX0dldFZpc2libGVMaW5lQ291bnQod25kUHRyKTsKKwlVSU5UIGxjID0gKFVJTlQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCk7CiAJSERDIGhkYzsKIAlIRk9OVCBoRm9udDsKIAlIRk9OVCBvbGRGb250ID0gMDsKQEAgLTI2NjMsNyArMjY2Nyw3IEBACiAJaWYgKCFJc1dpbmRvd0VuYWJsZWQod25kUHRyLT5od25kU2VsZikpCiAJCVNldFRleHRDb2xvcihoZGMsIEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhUKSk7CiAJR2V0Q2xpcEJveChoZGMsICZyY1Jnbik7Ci0JZm9yIChpID0gZmlyc3R2aXMgOyBpIDw9IE1JTihmaXJzdHZpcyArIEVESVRfR2V0VmlzaWJsZUxpbmVDb3VudCh3bmRQdHIpLCBmaXJzdHZpcyArIGVzLT5MaW5lQ291bnQgLSAxKSA7IGkrKyApIHsKKwlmb3IgKGkgPSBmdiA7IGkgPD0gTUlOKGZ2ICsgdmxjLCBmdiArIGxjIC0gMSkgOyBpKysgKSB7CiAJCUVESVRfR2V0TGluZVJlY3Qod25kUHRyLCBpLCAwLCAtMSwgJnJjTGluZSk7CiAJCWlmIChJbnRlcnNlY3RSZWN0KCZyYywgJnJjUmduLCAmcmNMaW5lKSkKIAkJCUVESVRfUGFpbnRMaW5lKHduZFB0ciwgaGRjLCBpLCByZXYpOwpAQCAtMjY4Nyw5ICsyNjkxLDkgQEAKIAogCU9wZW5DbGlwYm9hcmQod25kUHRyLT5od25kU2VsZik7CiAJaWYgKChoc3JjID0gR2V0Q2xpcGJvYXJkRGF0YShDRl9URVhUKSkpIHsKLQkJc3JjID0gKGNoYXIgKilHbG9iYWxMb2NrKGhzcmMpOworCQlzcmMgPSAoY2hhciAqKUdsb2JhbExvY2sxNihoc3JjKTsKIAkJRURJVF9SZXBsYWNlU2VsKHduZFB0ciwgMCwgKExQQVJBTSlzcmMpOwotCQlHbG9iYWxVbmxvY2soaHNyYyk7CisJCUdsb2JhbFVubG9jazE2KGhzcmMpOwogCX0KIAlDbG9zZUNsaXBib2FyZCgpOwogCXJldHVybiAtMUw7CkBAIC0yNzQ5LDcgKzI3NTMsNyBAQAogCWlmIChlcy0+aEZvbnQpCiAJCW9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBlcy0+aEZvbnQpOwogCUdldFRleHRNZXRyaWNzKGhkYywgJnRtKTsKLQllcy0+TGluZUhlaWdodCA9IEhJV09SRChHZXRUZXh0RXh0ZW50KGhkYywgIiIsIDApKTsKKwllcy0+TGluZUhlaWdodCA9IEhJV09SRChHZXRUZXh0RXh0ZW50KGhkYywgIlgiLCAxKSk7CiAJZXMtPkF2ZUNoYXJXaWR0aCA9IHRtLnRtQXZlQ2hhcldpZHRoOwogCWlmIChlcy0+aEZvbnQpCiAJCVNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwpAQCAtMjc5NCw2ICsyNzk4LDcgQEAKIAkJRURJVF9FTV9SZXBsYWNlU2VsKHduZFB0ciwgMCwgbFBhcmFtKTsKIAlFRElUX0VNX0VtcHR5VW5kb0J1ZmZlcih3bmRQdHIsIDAsIDBMKTsKIAlFRElUX0VNX1NldE1vZGlmeSh3bmRQdHIsIFRSVUUsIDBMKTsKKwlFRElUX1Njcm9sbEludG9WaWV3KHduZFB0cik7CiAJcmV0dXJuIDBMOwogfQogCkBAIC0yODI1LDEwICsyODMwLDEwIEBACiAgKi8KIHN0YXRpYyBMUkVTVUxUIEVESVRfV01fVlNjcm9sbChXTkQgKnduZFB0ciwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLQlpbnQgbGluZWNvdW50ID0gKGludClFRElUX0VNX0dldExpbmVDb3VudCh3bmRQdHIsIDAsIDBMKTsKLQlpbnQgZmlyc3R2aXMgPSAoaW50KUVESVRfRU1fR2V0Rmlyc3RWaXNpYmxlTGluZSh3bmRQdHIsIDAsIDBMKTsKLQlpbnQgdmlzbGluZWNvdW50ID0gRURJVF9HZXRWaXNpYmxlTGluZUNvdW50KHduZFB0cik7Ci0JaW50IGR5ID0gMDsKKwlVSU5UIGxjID0gKFVJTlQpRURJVF9FTV9HZXRMaW5lQ291bnQod25kUHRyLCAwLCAwTCk7CisJVUlOVCBmdiA9IChVSU5UKUVESVRfRU1fR2V0Rmlyc3RWaXNpYmxlTGluZSh3bmRQdHIsIDAsIDBMKTsKKwlVSU5UIHZsYyA9IEVESVRfR2V0VmlzaWJsZUxpbmVDb3VudCh3bmRQdHIpOworCUlOVCBkeSA9IDA7CiAJQk9PTCBub3QgPSBUUlVFOwogCUxSRVNVTFQgcmV0ID0gMEw7CiAKQEAgLTI4NDAsMjcgKzI4NDUsMjcgQEAKIAkJZHkgPSAxOwogCQlicmVhazsKIAljYXNlIFNCX1BBR0VVUDoKLQkJZHkgPSAtdmlzbGluZWNvdW50OworCQlkeSA9IC12bGM7CiAJCWJyZWFrOwogCWNhc2UgU0JfUEFHRURPV046Ci0JCWR5ID0gdmlzbGluZWNvdW50OworCQlkeSA9IHZsYzsKIAkJYnJlYWs7CiAJY2FzZSBTQl9UT1A6Ci0JCWR5ID0gLWZpcnN0dmlzOworCQlkeSA9IC1mdjsKIAkJYnJlYWs7CiAJY2FzZSBTQl9CT1RUT006Ci0JCWR5ID0gbGluZWNvdW50IC0gMSAtIGZpcnN0dmlzOworCQlkeSA9IGxjIC0gMSAtIGZ2OwogCQlicmVhazsKIAljYXNlIFNCX1RIVU1CVFJBQ0s6CiAvKgogICoJCW5vdCA9IEZBTFNFOwogICovCiAJY2FzZSBTQl9USFVNQlBPU0lUSU9OOgotCQlkeSA9IExPV09SRChsUGFyYW0pICogKGxpbmVjb3VudCAtIDEpIC8gMTAwIC0gZmlyc3R2aXM7CisJCWR5ID0gTE9XT1JEKGxQYXJhbSkgKiAobGMgLSAxKSAvIDEwMCAtIGZ2OwogCQlicmVhazsKIAkvKiBUaGUgbmV4dCB0d28gYXJlIHVuZG9jdW1lbnRlZCAhICovCiAJY2FzZSBFTV9HRVRUSFVNQjoKLQkJcmV0ID0gKGxpbmVjb3VudCA+IDEpID8gTUFLRUxPTkcoZmlyc3R2aXMgKiAxMDAgLyAobGluZWNvdW50IC0gMSksIDApIDogMEw7CisJCXJldCA9IChsYyA+IDEpID8gTUFLRUxPTkcoZnYgKiAxMDAgLyAobGMgLSAxKSwgMCkgOiAwTDsKIAkJYnJlYWs7CiAJY2FzZSBFTV9MSU5FU0NST0xMOgogCQlkeSA9IExPV09SRChsUGFyYW0pOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvbGlzdGJveC5jIGIvY29udHJvbHMvbGlzdGJveC5jCmluZGV4IGRiZWM5NDcuLmI2ZDMxYzAgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2xpc3Rib3guYworKysgYi9jb250cm9scy9saXN0Ym94LmMKQEAgLTEzMCwxNCArMTMwLDkgQEAKICAgICBscGhsLT5oRHJhd0l0ZW1TdHJ1Y3QgPSAwOwogICB9CiAKLSNpZiAwCi0gIEhlYXBIYW5kbGUgPSBHbG9iYWxBbGxvYyhHTUVNX0ZJWEVELCBMSVNUX0hFQVBfU0laRSk7Ci0gIEhlYXBCYXNlID0gR2xvYmFsTG9jayhIZWFwSGFuZGxlKTsKLSAgSEVBUF9Jbml0KCZscGhsLT5IZWFwLCBIZWFwQmFzZSwgTElTVF9IRUFQX1NJWkUpOwotI2VuZGlmCiAvKiBXSU5FTElCUyBsaXN0IGJveGVzIGRvIG5vdCBvcGVyYXRlIG9uIGxvY2FsIGhlYXBzICovCiAjaWZuZGVmIFdJTkVMSUIKLSAgbHBobC0+SGVhcFNlbCA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsTElTVF9IRUFQX1NJWkUpOworICBscGhsLT5IZWFwU2VsID0gR2xvYmFsQWxsb2MxNihHTUVNX0ZJWEVELExJU1RfSEVBUF9TSVpFKTsKICAgTG9jYWxJbml0KCBscGhsLT5IZWFwU2VsLCAwLCBMSVNUX0hFQVBfU0laRS0xKTsKICNlbHNlCiAgIGxwaGwtPkhlYXBTZWwgPSAwOwpAQCAtMTUwLDcgKzE0NSw3IEBACiAgICAgVVNFUl9IRUFQX0ZSRUUobHBobC0+aERyYXdJdGVtU3RydWN0KTsKIAogICAvKiBYWFggbmVlZCB0byBmcmVlIGxwaGwtPkhlYXAgKi8KLSAgR2xvYmFsRnJlZShscGhsLT5IZWFwU2VsKTsKKyAgR2xvYmFsRnJlZTE2KGxwaGwtPkhlYXBTZWwpOwogICBmcmVlKGxwaGwpOwogfQogCkBAIC0xODQsMTEgKzE3OSwxNCBAQAogCiB2b2lkIExpc3RCb3hVcGRhdGVXaW5kb3coSFdORCBod25kLCBMUEhFQURMSVNUIGxwaGwsIEJPT0wgcmVwYWludCkKIHsKLSAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMCwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7Ci0gIGlmIChscGhsLT5JdGVtc1BlckNvbHVtbiAhPSAwKSB7CisgIFdORCAqd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7CisKKyAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpCisgICAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMCwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7CisgIGlmICgod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkgJiYgKGxwaGwtPkl0ZW1zUGVyQ29sdW1uICE9IDApKQogICAgIFNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX0hPUlosIDEsIGxwaGwtPkl0ZW1zVmlzaWJsZSAvCiAJCSAgIGxwaGwtPkl0ZW1zUGVyQ29sdW1uICsgMSwgVFJVRSk7Ci0gIH0KKwogICBpZiAocmVwYWludCAmJiBscGhsLT5iUmVkcmF3RmxhZykgewogICAgIEludmFsaWRhdGVSZWN0KGh3bmQsIE5VTEwsIFRSVUUpOwogICB9CkBAIC0zMjgsNyArMzI2LDggQEAKICAgU2VuZE1lc3NhZ2UobHBobC0+aFBhcmVudCwgV01fTUVBU1VSRUlURU0sIDAsIChMUEFSQU0pVVNFUl9IRUFQX1NFR19BRERSKGhUZW1wKSk7CiAKICAgaWYgKGxwaGwtPmR3U3R5bGUgJiBMQlNfT1dORVJEUkFXRklYRUQpIHsKLSAgICBscGhsLT5TdGRJdGVtSGVpZ2h0ID0gbHBtZWFzdXJlLT5pdGVtSGVpZ2h0OworICAgIGlmIChscG1lYXN1cmUtPml0ZW1IZWlnaHQgPiBscGhsLT5TdGRJdGVtSGVpZ2h0KQorICAgICAgbHBobC0+U3RkSXRlbUhlaWdodCA9IGxwbWVhc3VyZS0+aXRlbUhlaWdodDsKICAgICBscGxzLT5taXMuaXRlbUhlaWdodCA9IGxwbWVhc3VyZS0+aXRlbUhlaWdodDsKICAgfQogCkBAIC0zNTYsNiArMzU1LDcgQEAKIH0KIAogCisKIGludCBMaXN0Qm94SW5zZXJ0U3RyaW5nKExQSEVBRExJU1QgbHBobCwgVUlOVCB1SW5kZXgsIExQQ1NUUiBuZXdzdHIpCiB7CiAgIExQTElTVFNUUlVDVCAqbHBwbHMsIGxwbHNuZXcsIGxwbHM7CkBAIC0zOTMsNyArMzkzLDcgQEAKICAgICBoU3RyID0gTElTVF9IRUFQX0FMTE9DKGxwaGwsIExNRU1fTU9WRUFCTEUsIHN0cmxlbihuZXdzdHIpICsgMSk7CiAgICAgc3RyID0gKExQU1RSKUxJU1RfSEVBUF9BRERSKGxwaGwsIGhTdHIpOwogICAgIGlmIChzdHIgPT0gTlVMTCkgcmV0dXJuIExCX0VSUlNQQUNFOwotICAgIHN0cmNweShzdHIsIG5ld3N0cik7CisgICAgc3RyY3B5KHN0ciwgbmV3c3RyKTsgCiAgICAgbHBsc25ldy0+aXRlbVRleHQgPSBzdHI7CiAgICAgLyogSSdtIG5vdCBzbyBzdXJlIGFib3V0IHRoZSBuZXh0IG9uZSAqLwogICAgIGxwbHNuZXctPm1pcy5pdGVtRGF0YSA9IDA7CkBAIC03ODMsOCArNzgzLDEwIEBACiAgIEdldENsaWVudFJlY3QoaHduZCwmcmVjdCk7CiAgIGxwaGwtPkNvbHVtbnNXaWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7CiAKLSAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMCwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7Ci0gIFNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX0hPUlosIDEsIDEsIFRSVUUpOworICBpZiAoZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpIAorICAgIFNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX1ZFUlQsIDAsIExpc3RNYXhGaXJzdFZpc2libGUobHBobCksIFRSVUUpOworICBpZiAoZHdTdHlsZSAmIFdTX0hTQ1JPTEwpIAorICAgIFNldFNjcm9sbFJhbmdlKGh3bmQsIFNCX0hPUlosIDEsIDEsIFRSVUUpOwogCiAgIHJldHVybiAwOwogfQpAQCAtMTMwNyw3ICsxMzA5LDYgQEAKICAgUkVDVCAgcmVjdCwgcGFpbnRSZWN0LCBzY3JhdGNoUmVjdDsKICAgaW50ICAgaSwgdG9wLCBoZWlnaHQsIG1heHdpZHRoLCBpcGM7CiAKLQogICB0b3AgPSAwOwogCiAgIGlmICghSXNXaW5kb3dWaXNpYmxlKGh3bmQpIHx8ICFscGhsLT5iUmVkcmF3RmxhZykgewpkaWZmIC0tZ2l0IGEvY29udHJvbHMvbWVudS5jIGIvY29udHJvbHMvbWVudS5jCmluZGV4IGVlY2I1NzUuLjIwZjRlMDYgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL21lbnUuYworKysgYi9jb250cm9scy9tZW51LmMKQEAgLTYyLDkgKzYyLDEyIEBACiAgICgoRFdPUkQpTUFLRUxPTkcoIChXT1JEKShpdGVtKS0+aFRleHQsIChpdGVtKS0+eFRhYiApKQogCiBleHRlcm4gdm9pZCBOQ19EcmF3U3lzQnV0dG9uKEhXTkQgaHduZCwgSERDIGhkYywgQk9PTCBkb3duKTsgIC8qIG5vbmNsaWVudC5jICovCitzdGF0aWMgSE1FTlUgTUVOVV9Db3B5U3lzTWVudSh2b2lkKTsKIAogc3RhdGljIEhCSVRNQVAgaFN0ZENoZWNrID0gMDsKIHN0YXRpYyBIQklUTUFQIGhTdGRNbkFycm93ID0gMDsKK3N0YXRpYyBITUVOVSBNRU5VX0RlZlN5c01lbnUgPSAwOyAgLyogRGVmYXVsdCBzeXN0ZW0gbWVudSAqLworCiAKIC8qIHdlIF9jYW5fIHVzZSBnbG9iYWwgcG9wdXAgd2luZG93IGJlY2F1c2UgdGhlcmUncyBubyB3YXkgMiBtZW51ZXMgY2FuCiAgKiBiZSB0cmFja2VkIGF0IHRoZSBzYW1lIHRpbWUuCkBAIC05NSwxMSArOTgsMjcgQEAKICAgICBhcnJvd19iaXRtYXBfd2lkdGggPSBibS5ibVdpZHRoOwogICAgIGFycm93X2JpdG1hcF9oZWlnaHQgPSBibS5ibUhlaWdodDsKIAorICAgIGlmICghKE1FTlVfRGVmU3lzTWVudSA9IE1FTlVfQ29weVN5c01lbnUoKSkpCisgICAgeworICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJVbmFibGUgdG8gY3JlYXRlIGRlZmF1bHQgc3lzdGVtIG1lbnVcbiIgKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBNRU5VX0dldERlZlN5c01lbnUKKyAqCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgc3lzdGVtIG1lbnUuCisgKi8KK0hNRU5VIE1FTlVfR2V0RGVmU3lzTWVudSh2b2lkKQoreworICAgIHJldHVybiBNRU5VX0RlZlN5c01lbnU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTUVOVV9IYXNTeXNNZW51CiAgKgogICogQ2hlY2sgd2hldGhlciB0aGUgd2luZG93IG93bmluZyB0aGUgbWVudSBiYXIgaGFzIGEgc3lzdGVtIG1lbnUuCkBAIC0xMjQsNyArMTQzLDcgQEAKICAgICBQT1BVUE1FTlUgKm1lbnU7CiAKICAgICBpZiAoIShoYW5kbGUgPSBTWVNSRVNfTG9hZFJlc291cmNlKCBTWVNSRVNfTUVOVV9TWVNNRU5VICkpKSByZXR1cm4gMDsKLSAgICBoTWVudSA9IExvYWRNZW51SW5kaXJlY3QoIFdJTjE2X0dsb2JhbExvY2soIGhhbmRsZSApICk7CisgICAgaE1lbnUgPSBMb2FkTWVudUluZGlyZWN0KCBXSU4xNl9HbG9iYWxMb2NrMTYoIGhhbmRsZSApICk7CiAgICAgU1lTUkVTX0ZyZWVSZXNvdXJjZSggaGFuZGxlICk7CiAgICAgaWYgKCFoTWVudSkKICAgICB7CkBAIC0yNDYsNyArMjY1LDcgQEAKICAgICBpbnQgaTsKICAgICBMT05HIG1lbnVjaGFyOwogCi0gICAgaWYgKCFJc01lbnUoIGhtZW51ICkpIGhtZW51ID0gR2V0U3lzdGVtTWVudSggaHduZE93bmVyLCBGQUxTRSk7CisgICAgaWYgKCFJc01lbnUoIGhtZW51ICkpIGhtZW51ID0gV0lOX0ZpbmRXbmRQdHIoaHduZE93bmVyKS0+aFN5c01lbnU7CiAgICAgaWYgKCFobWVudSkgcmV0dXJuIC0xOwogCiAgICAgbWVudSA9IChQT1BVUE1FTlUgKikgVVNFUl9IRUFQX0xJTl9BRERSKCBobWVudSApOwpAQCAtNjkyLDcgKzcxMSw3IEBACiB7CiAgIC8qIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIHdoZW4gcG9wdXAgaXMgaGlkZGVuICovCiAKLSAgVERCKiB0YXNrID0gKFREQiopR2xvYmFsTG9jayhoVGFzayk7CisgIFREQiogdGFzayA9IChUREIqKUdsb2JhbExvY2sxNihoVGFzayk7CiAKICAgaWYoICF0YXNrICkgcmV0dXJuIDA7CiAKQEAgLTczMCw3ICs3NDksNyBAQAogCiAgICAgaWYgKCFwVG9wUFduZCkKICAgICB7Ci0JcFRvcFBXbmQgPSBXSU5fRmluZFduZFB0cihDcmVhdGVXaW5kb3coIFBPUFVQTUVOVV9DTEFTU19BVE9NLCAoU0VHUFRSKTAsCisJcFRvcFBXbmQgPSBXSU5fRmluZFduZFB0cihDcmVhdGVXaW5kb3cxNiggUE9QVVBNRU5VX0NMQVNTX0FUT00sIChTRUdQVFIpMCwKIAkJCQkgICAJCVdTX1BPUFVQIHwgV1NfQk9SREVSLCB4LCB5LCAKIAkJCQkgICAJCW1lbnUtPldpZHRoICsgMipTWVNNRVRSSUNTX0NYQk9SREVSLAogCQkJCSAgIAkJbWVudS0+SGVpZ2h0ICsgMipTWVNNRVRSSUNTX0NZQk9SREVSLApAQCAtNzQyLDcgKzc2MSw3IEBACiAgICAgaWYoIHVTdWJQV25kTGV2ZWwgKQogICAgIHsKIAkvKiBjcmVhdGUgbmV3IHdpbmRvdyBmb3IgdGhlIHN1Ym1lbnUgKi8KLQlIV05EICBoV25kID0gQ3JlYXRlV2luZG93KCBQT1BVUE1FTlVfQ0xBU1NfQVRPTSwgKFNFR1BUUikwLAorCUhXTkQgIGhXbmQgPSBDcmVhdGVXaW5kb3cxNiggUE9QVVBNRU5VX0NMQVNTX0FUT00sIChTRUdQVFIpMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NfUE9QVVAgfCBXU19CT1JERVIsIHgsIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUtPldpZHRoICsgMipTWVNNRVRSSUNTX0NYQk9SREVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51LT5IZWlnaHQgKyAyKlNZU01FVFJJQ1NfQ1lCT1JERVIsCkBAIC04MTgsMTIgKzgzNywxMiBAQAogI2lmZGVmIFdJTkVMSUIzMgogLyogRklYOiBMb3N0SW5mbyAqLwogICAgICAgICAgICAgU2VuZE1lc3NhZ2UoIGh3bmRPd25lciwgV01fTUVOVVNFTEVDVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFV1BBUkFNKCAoRFdPUkQpR2V0U3lzdGVtTWVudSggbHBwb3AtPmhXbmQsIEZBTFNFICksCisgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRVdQQVJBTSggV0lOX0ZpbmRXbmRQdHIobHBwb3AtPmhXbmQpLT5oU3lzTWVudSwKIAkJCQkgICAgIGxwcG9wLT53RmxhZ3MgfCBNRl9NT1VTRVNFTEVDVCApLAogCQkJIChMUEFSQU0paG1lbnUgKTsKICNlbHNlCiAgICAgICAgICAgICBTZW5kTWVzc2FnZSggaHduZE93bmVyLCBXTV9NRU5VU0VMRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN5c3RlbU1lbnUoIGxwcG9wLT5oV25kLCBGQUxTRSApLAorICAgICAgICAgICAgICAgICAgICAgICAgIFdJTl9GaW5kV25kUHRyKGxwcG9wLT5oV25kKS0+aFN5c01lbnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoIGxwcG9wLT53RmxhZ3MgfCBNRl9NT1VTRVNFTEVDVCwgaG1lbnUgKSApOwogI2VuZGlmCiAgICAgICAgIH0KQEAgLTExMTEsNyArMTEzMCw3IEBACiAgICAgbWVudSA9IChQT1BVUE1FTlUgKikgVVNFUl9IRUFQX0xJTl9BRERSKCBobWVudSApOwogICAgIGlmIChtZW51LT5Gb2N1c2VkSXRlbSA9PSBOT19TRUxFQ1RFRF9JVEVNKSByZXR1cm4gMDsKICAgICBlbHNlIGlmIChtZW51LT5Gb2N1c2VkSXRlbSA9PSBTWVNNRU5VX1NFTEVDVEVEKQotCXJldHVybiBHZXRTeXN0ZW1NZW51KCBtZW51LT5oV25kLCBGQUxTRSApOworCXJldHVybiBXSU5fRmluZFduZFB0cihtZW51LT5oV25kKS0+aFN5c01lbnU7CiAKICAgICBpdGVtID0gKChNRU5VSVRFTSAqKVVTRVJfSEVBUF9MSU5fQUREUihtZW51LT5oSXRlbXMpKSArIG1lbnUtPkZvY3VzZWRJdGVtOwogICAgIGlmICghKGl0ZW0tPml0ZW1fZmxhZ3MgJiBNRl9QT1BVUCkgfHwgIShpdGVtLT5pdGVtX2ZsYWdzICYgTUZfTU9VU0VTRUxFQ1QpKQpAQCAtMTEzNSw3ICsxMTU0LDcgQEAKICAgICBpZiAobWVudS0+Rm9jdXNlZEl0ZW0gPT0gTk9fU0VMRUNURURfSVRFTSkgcmV0dXJuOwogICAgIGlmIChtZW51LT5Gb2N1c2VkSXRlbSA9PSBTWVNNRU5VX1NFTEVDVEVEKQogICAgIHsKLQloc3VibWVudSA9IEdldFN5c3RlbU1lbnUoIG1lbnUtPmhXbmQsIEZBTFNFICk7CisJaHN1Ym1lbnUgPSBXSU5fRmluZFduZFB0cihtZW51LT5oV25kKS0+aFN5c01lbnU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xMzQ1LDcgKzEzNjQsNyBAQAogICAgIHsKIAlpZiAoIU1FTlVfSXNJblN5c01lbnUoIG1lbnUsIHB0ICkpIHJldHVybiBGQUxTRTsKIAlpZCA9IFNZU01FTlVfU0VMRUNURUQ7Ci0JaHN1Ym1lbnUgPSBHZXRTeXN0ZW1NZW51KCBtZW51LT5oV25kLCBGQUxTRSApOworCWhzdWJtZW51ID0gV0lOX0ZpbmRXbmRQdHIobWVudS0+aFduZCktPmhTeXNNZW51OwogICAgIH0JCiAKICAgICBpZiAobWVudS0+Rm9jdXNlZEl0ZW0gIT0gaWQpIHJldHVybiBGQUxTRTsKQEAgLTE0OTgsNyArMTUxNyw3IEBACiAJCQkgICAgSFdORCBod25kLCBMUFJFQ1QgbHByZWN0ICkKIHsKICAgICBNU0cgKm1zZzsKLSAgICBITE9DQUwgaE1zZzsKKyAgICBITE9DQUwxNiBoTXNnOwogICAgIFBPUFVQTUVOVSAqbWVudTsKICAgICBITUVOVSBobWVudUN1cnJlbnQgPSBobWVudTsKICAgICBCT09MIGZDbG9zZWQgPSBGQUxTRSwgZlJlbW92ZTsKQEAgLTIyMTksNyArMjIzOCwxMCBAQAogewogICAgIExQUE9QVVBNRU5VIGxwcG9wOwogICAgIGRwcmludGZfbWVudShzdGRkZWIsIkRlc3Ryb3lNZW51ICglMDR4KSAhXG4iLCBoTWVudSk7CisKICAgICBpZiAoaE1lbnUgPT0gMCkgcmV0dXJuIEZBTFNFOworICAgIC8qIFNpbGVudGx5IGlnbm9yZSBhdHRlbXB0cyB0byBkZXN0cm95IGRlZmF1bHQgc3lzdGVtIG1lbnUgKi8KKyAgICBpZiAoaE1lbnUgPT0gTUVOVV9EZWZTeXNNZW51KSByZXR1cm4gVFJVRTsKICAgICBscHBvcCA9IChMUFBPUFVQTUVOVSkgVVNFUl9IRUFQX0xJTl9BRERSKGhNZW51KTsKICAgICBpZiAoIWxwcG9wIHx8IChscHBvcC0+d01hZ2ljICE9IE1FTlVfTUFHSUMpKSByZXR1cm4gRkFMU0U7CiAgICAgbHBwb3AtPndNYWdpYyA9IDA7ICAvKiBNYXJrIGl0IGFzIGRlc3Ryb3llZCAqLwpAQCAtMjI1Miw2ICsyMjc0LDExIEBACiAgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaFduZCApOwogICAgIGlmICghd25kUHRyKSByZXR1cm4gMDsKIAorICAgIGlmICghd25kUHRyLT5oU3lzTWVudSB8fCAod25kUHRyLT5oU3lzTWVudSA9PSBNRU5VX0RlZlN5c01lbnUpKQorICAgIHsKKyAgICAgICAgd25kUHRyLT5oU3lzTWVudSA9IE1FTlVfQ29weVN5c01lbnUoKTsKKyAgICAgICAgcmV0dXJuIHduZFB0ci0+aFN5c01lbnU7CisgICAgfQogICAgIGlmICghYlJldmVydCkgcmV0dXJuIHduZFB0ci0+aFN5c01lbnU7CiAgICAgaWYgKHduZFB0ci0+aFN5c01lbnUpIERlc3Ryb3lNZW51KHduZFB0ci0+aFN5c01lbnUpOwogICAgIHduZFB0ci0+aFN5c01lbnUgPSBNRU5VX0NvcHlTeXNNZW51KCk7CkBAIC0yMjY3LDcgKzIyOTQsOCBAQAogICAgIFdORCAqd25kUHRyOwogCiAgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoaHduZCkpKSByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKHduZFB0ci0+aFN5c01lbnUpIERlc3Ryb3lNZW51KCB3bmRQdHItPmhTeXNNZW51ICk7CisgICAgaWYgKHduZFB0ci0+aFN5c01lbnUgJiYgKHduZFB0ci0+aFN5c01lbnUgIT0gTUVOVV9EZWZTeXNNZW51KSkKKyAgICAgICAgRGVzdHJveU1lbnUoIHduZFB0ci0+aFN5c01lbnUgKTsKICAgICB3bmRQdHItPmhTeXNNZW51ID0gaE1lbnU7CiAgICAgcmV0dXJuIFRSVUU7CiB9CmRpZmYgLS1naXQgYS9jb250cm9scy9zY3JvbGwuYyBiL2NvbnRyb2xzL3Njcm9sbC5jCmluZGV4IDI3MzIzYTYuLmUwZTc2MTcgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3Njcm9sbC5jCisrKyBiL2NvbnRyb2xzL3Njcm9sbC5jCkBAIC05NTYsNyArOTU2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0U2Nyb2xsUmFuZ2UgICAoVVNFUi42NSkKICAqLwotdm9pZCBHZXRTY3JvbGxSYW5nZShIV05EIGh3bmQsIGludCBuQmFyLCBMUElOVCBscE1pbiwgTFBJTlQgbHBNYXgpCit2b2lkIEdldFNjcm9sbFJhbmdlKEhXTkQgaHduZCwgaW50IG5CYXIsIExQSU5UMTYgbHBNaW4sIExQSU5UMTYgbHBNYXgpCiB7CiAgICAgU0NST0xMSU5GTyAqaW5mb1B0cjsKIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvc3RhdGljLmMgYi9jb250cm9scy9zdGF0aWMuYwppbmRleCA5ZjQ3MGI1Li45Yjg4MTE2IDEwMDY0NAotLS0gYS9jb250cm9scy9zdGF0aWMuYworKysgYi9jb250cm9scy9zdGF0aWMuYwpAQCAtNTgsMTAgKzU4LDEwIEBACiAgICAgaW5mb1B0ci0+aEljb24gPSBoaWNvbjsKICAgICBpZiAoaGljb24pCiAgICAgewotICAgICAgICBDVVJTT1JJQ09OSU5GTyAqaW5mbyA9IChDVVJTT1JJQ09OSU5GTyAqKSBHbG9iYWxMb2NrKCBoaWNvbiApOworICAgICAgICBDVVJTT1JJQ09OSU5GTyAqaW5mbyA9IChDVVJTT1JJQ09OSU5GTyAqKSBHbG9iYWxMb2NrMTYoIGhpY29uICk7CiAgICAgICAgIFNldFdpbmRvd1Bvcyggd25kUHRyLT5od25kU2VsZiwgMCwgMCwgMCwgaW5mby0+bldpZHRoLCBpbmZvLT5uSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9NT1ZFIHwgU1dQX05PWk9SREVSICk7Ci0gICAgICAgIEdsb2JhbFVubG9jayggaGljb24gKTsKKyAgICAgICAgR2xvYmFsVW5sb2NrMTYoIGhpY29uICk7CiAgICAgfQogICAgIHJldHVybiBwcmV2SWNvbjsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3dpZGdldHMuYyBiL2NvbnRyb2xzL3dpZGdldHMuYwppbmRleCBlNTQxODM1Li4xZjczN2JjIDEwMDY0NAotLS0gYS9jb250cm9scy93aWRnZXRzLmMKKysrIGIvY29udHJvbHMvd2lkZ2V0cy5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSAibW9kdWxlLmgiCiAjaW5jbHVkZSAic3RhY2tmcmFtZS5oIgogCi1zdGF0aWMgV05EQ0xBU1MgV0lER0VUU19CdWlsdGluQ2xhc3Nlc1tdID0KK3N0YXRpYyBXTkRDTEFTUzE2IFdJREdFVFNfQnVpbHRpbkNsYXNzZXNbXSA9CiB7CiAgICAgeyBDU19HTE9CQUxDTEFTUyB8IENTX0RCTENMS1MgfCBDU19WUkVEUkFXIHwgQ1NfSFJFRFJBVyB8IENTX1BBUkVOVERDLAogICAgICAgICAgIChXTkRQUk9DKSJCdXR0b25XbmRQcm9jIiwgMCwgc2l6ZW9mKEJVVFRPTklORk8pLApAQCAtNjEsNyArNjEsNyBAQAogewogICAgIGludCBpOwogICAgIGNoYXIgbmFtZVsyMF07Ci0gICAgV05EQ0xBU1MgKmNsYXNzID0gV0lER0VUU19CdWlsdGluQ2xhc3NlczsKKyAgICBXTkRDTEFTUzE2ICpjbGFzcyA9IFdJREdFVFNfQnVpbHRpbkNsYXNzZXM7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgTkJfQlVJTFRJTl9DTEFTU0VTOyBpKyssIGNsYXNzKyspCiAgICAgewpAQCAtNjksNyArNjksNyBAQAogICAgICAgICBjbGFzcy0+bHBzekNsYXNzTmFtZSA9IE1BS0VfU0VHUFRSKG5hbWUpOwogICAgICAgICBjbGFzcy0+aEN1cnNvciA9IExvYWRDdXJzb3IoIDAsIElEQ19BUlJPVyApOwogICAgICAgICBjbGFzcy0+bHBmblduZFByb2MgPSBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoIChjaGFyICopY2xhc3MtPmxwZm5XbmRQcm9jICk7Ci0gICAgICAgIGlmICghUmVnaXN0ZXJDbGFzcyggY2xhc3MgKSkgcmV0dXJuIEZBTFNFOworICAgICAgICBpZiAoIVJlZ2lzdGVyQ2xhc3MxNiggY2xhc3MgKSkgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL2hhc2guYyBiL2RlYnVnZ2VyL2hhc2guYwppbmRleCBkYWVkYTRhLi5jMGU2ZTI4IDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9oYXNoLmMKKysrIGIvZGVidWdnZXIvaGFzaC5jCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgICAgLyogTm93IHNlYXJjaCB0aGUgbm9uLXJlc2lkZW50IG5hbWVzIHRhYmxlICovCiAKICAgICAgICAgaWYgKCFwTW9kdWxlLT5ucm5hbWVfaGFuZGxlKSBjb250aW51ZTsgIC8qIE5vIG5vbi1yZXNpZGVudCB0YWJsZSAqLwotICAgICAgICBjcG50ID0gKGNoYXIgKilHbG9iYWxMb2NrKCBwTW9kdWxlLT5ucm5hbWVfaGFuZGxlICk7CisgICAgICAgIGNwbnQgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSApOwogICAgICAgICB3aGlsZSAoKmNwbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNwbnQgKz0gKmNwbnQgKyAxICsgc2l6ZW9mKFdPUkQpOwpkaWZmIC0tZ2l0IGEvZXRjL2NvbW1kbGctb3JkaW5hbHMgYi9ldGMvY29tbWRsZy1vcmRpbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjOWUyYS4uMDAwMDAwMAotLS0gYS9ldGMvY29tbWRsZy1vcmRpbmFscworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSAgMSAgIDIgIDBjMTcgIEdFVE9QRU5GSUxFTkFNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgMiAgIDIgIDBjNDggIEdFVFNBVkVGSUxFTkFNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNSAgIDEgIDBlYTEgIENIT09TRUNPTE9SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA2ICAgMiAgNDJhMyAgRklMRU9QRU5ETEdQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA3ICAgMiAgNDQ2YSAgRklMRVNBVkVETEdQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA4ICAgMSAgMDE5NyAgQ09MT1JETEdQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA5ICAgNiAgMDAwMCAgTE9BREFMVEVSQklUTUFQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDExICAgNSAgMDAwMCAgRklORFRFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTIgICA1ICAwMTljICBSRVBMQUNFVEVYVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMyAgIDUgIDAzNmQgIEZJTkRURVhURExHUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNCAgIDUgIDA1ODIgIFJFUExBQ0VURVhURExHUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNSAgIDQgIDAwMDAgIENIT09TRUZPTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTYgICA0ICAwMmIwICBGT1JNQVRDSEFSRExHUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxOCAgIDQgIDE4NGUgIEZPTlRTVFlMRUVOVU1QUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE5ICAgNCAgMTA5NiAgRk9OVEZBTUlMWUVOVU1QUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIwICAgMyAgMGM5NCAgUFJJTlRETEcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjEgICAzICAzNzFmICBQUklOVERMR1BST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjIgICAzICAzMDdhICBQUklOVFNFVFVQRExHUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMyAgIDMgIDAwMDAgIEVESVRJTlRFR0VST05MWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNSAgIDEgIDFiNDYgIFdBTlRBUlJPV1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjYgICA2ICAwMWU3ICBDT01NRExHRVhURU5ERURFUlJPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNyAgIDIgIDBjNzkgIEdFVEZJTEVUSVRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyOCAgIDYgIDAxYWQgIFdFUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyOSAgIDIgIDEwYTUgIERXTEJTVUJDTEFTUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMCAgIDMgIDAwNTYgIERXVVBBUlJPV0hBQ0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzEgICAyICAxMDBmICBEV09LU1VCQ0xBU1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCmRpZmYgLS1naXQgYS9ldGMvZGRlbWwtb3JkaW5hbHMgYi9ldGMvZGRlbWwtb3JkaW5hbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NTg4YzUuLjAwMDAwMDAKLS0tIGEvZXRjL2RkZW1sLW9yZGluYWxzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotICAxICAgMiAgMDAyYyAgV0VQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAyICAgMSAgMDAxMCAgRERFSU5JVElBTElaRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgMyAgIDEgIDAzYWUgIERERVVOSU5JVElBTElaRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNCAgIDEgIDA2OGEgIERERUNPTk5FQ1RMSVNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA1ICAgMSAgMDk0OCAgRERFUVVFUllORVhUU0VSVkVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA2ICAgMSAgMGE0NiAgRERFRElTQ09OTkVDVExJU1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDcgICAxICAwYWFjICBEREVDT05ORUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA4ICAgMSAgMGI0YSAgRERFRElTQ09OTkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgOSAgIDEgIDBkYWMgIERERVFVRVJZQ09OVklORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTAgICAxICAxMDIwICBEREVTRVRVU0VSSEFORExFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDExICAgMSAgMTIwNCAgRERFQ0xJRU5UVFJBTlNBQ1RJT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTIgICAxICAxYmYwICBEREVBQkFORE9OVFJBTlNBQ1RJT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTMgICAxICAxMTE4ICBEREVQT1NUQURWSVNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE0ICAgMSAgMTRlOCAgRERFQ1JFQVRFREFUQUhBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNSAgIDEgIDE1OTggIERERUFERERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTYgICAxICAxN2E4ICBEREVHRVREQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE3ICAgMSAgMTg4YSAgRERFQUNDRVNTREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxOCAgIDEgIDE5MTYgIERERVVOQUNDRVNTREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxOSAgIDEgIDE5NDYgIERERUZSRUVEQVRBSEFORExFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIwICAgMSAgMTRhOCAgRERFR0VUTEFTVEVSUk9SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIxICAgMSAgMTlhNCAgRERFQ1JFQVRFU1RSSU5HSEFORExFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIyICAgMSAgMWE0MCAgRERFRlJFRVNUUklOR0hBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMyAgIDEgIDFiMTQgIERERVFVRVJZU1RSSU5HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI0ICAgMSAgMWFhYyAgRERFS0VFUFNUUklOR0hBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNiAgIDEgIDFkOTggIERERUVOQUJMRUNBTExCQUNLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI3ICAgMSAgMWVkNCAgRERFTkFNRVNFUlZJQ0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjggICAxICA0NjE0ICBDTElFTlRXTkRQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI5ICAgMSAgNTIzYSAgU0VSVkVSV05EUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMCAgIDEgIDU0ODAgIFNVQkZSQU1FV05EUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMSAgIDEgIDU1NTggIERNR1dORFBST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzIgICAxICA1NzU4ICBDT05WTElTVFdORFBST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzMgICAxICAzNWYyICBNT05JVE9SV05EUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNCAgIDEgIDJmYjAgIERERVNFTkRIT09LUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNSAgIDEgIDMwOWUgIERERVBPU1RIT09LUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNiAgIDEgIDFiYjAgIERERUNNUFNUUklOR0hBTkRMRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzcgICAxICAwYmUwICBEREVSRUNPTk5FQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzggICAxICA2YjhhICBJTklURU5VTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzOSAgIDEgIDAzNmEgIFRFUk1ETEdQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQpkaWZmIC0tZ2l0IGEvZXRjL2dkaS1vcmRpbmFscyBiL2V0Yy9nZGktb3JkaW5hbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZmNmNDkuLjAwMDAwMDAKLS0tIGEvZXRjL2dkaS1vcmRpbmFscworKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0gIDEgICAxICA0ZTBjICBTRVRCS0NPTE9SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAyICAgMSAgNGUyMiAgU0VUQktNT0RFIGV4cG9ydGVkCi0gIDMgICAxICA0YjQ2ICBTRVRNQVBNT0RFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA0ICAgMSAgNGU2YiAgU0VUUk9QMiBleHBvcnRlZAotICA1ICAgMSAgNTIxOCAgU0VUUkVMQUJTIGV4cG9ydGVkCi0gIDYgICAxICA0ZWI5ICBTRVRQT0xZRklMTE1PREUgZXhwb3J0ZWQKLSAgNyAgIDEgIDRlOTIgIFNFVFNUUkVUQ0hCTFRNT0RFIGV4cG9ydGVkCi0gIDggICAxICA0YTAwICBTRVRURVhUQ0hBUkFDVEVSRVhUUkEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDkgICAxICA0ZGY4ICBTRVRURVhUQ09MT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTAgICAxICA0OWVjICBTRVRURVhUSlVTVElGSUNBVElPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMSAgIDEgIDRlZTAgIFNFVFdJTkRPV09SRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMiAgIDQgIDA2YzggIFNFVFdJTkRPV0VYVCBleHBvcnRlZAotIDEzICAgMSAgNGYxNCAgU0VUVklFV1BPUlRPUkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTQgICA0ICAwNmZjICBTRVRWSUVXUE9SVEVYVCBleHBvcnRlZAotIDE1ICAgMSAgNGIxMiAgT0ZGU0VUV0lORE9XT1JHIGV4cG9ydGVkCi0gMTYgICA0ICAwNzY0ICBTQ0FMRVdJTkRPV0VYVCBleHBvcnRlZAotIDE3ICAgMSAgNGFkZSAgT0ZGU0VUVklFV1BPUlRPUkcgZXhwb3J0ZWQKLSAxOCAgIDQgIDA3MzAgIFNDQUxFVklFV1BPUlRFWFQgZXhwb3J0ZWQKLSAxOSAgMjEgIDBlOTYgIExJTkVUTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMCAgMjEgIDBlYWEgIE1PVkVUTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMSAgIDEgIDRjNTAgIEVYQ0xVREVDTElQUkVDVCBleHBvcnRlZAotIDIyICAgMSAgNGM4NCAgSU5URVJTRUNUQ0xJUFJFQ1QgZXhwb3J0ZWQKLSAyMyAgIDkgIDEwMzAgIEFSQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNCAgIDkgIDEwMWMgIEVMTElQU0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjUgIDE1ICAwOGZjICBGTE9PREZJTEwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjYgICA5ICAxMDQ0ICBQSUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjcgIDI1ICAwMDAwICBSRUNUQU5HTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjggICA5ICAxMDZjICBST1VORFJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjkgICAxICA0YzE0ICBQQVRCTFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzAgICAxICA0OGNiICBTQVZFREMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzEgIDIzICAwMzgzICBTRVRQSVhFTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMiAgIDEgIDRkM2EgIE9GRlNFVENMSVBSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzMgICAxICA0Zjk1ICBURVhUT1VUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM0ICAgMSAgNGJmYSAgQklUQkxUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM1ICAgMSAgNGJlMCAgU1RSRVRDSEJMVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNiAgMjQgIDAwMDAgIFBPTFlHT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzcgIDIxICAwZWRlICBQT0xZTElORSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzOCAgIDcgIDA2ZDEgIEVTQ0FQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzOSAgIDEgIDQ4YjcgIFJFU1RPUkVEQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0MCAgMjYgIDAwMDAgIEZJTExSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDEgIDI2ICAwMDNhICBGUkFNRVJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0MiAgIDEgIDRkYmQgIElOVkVSVFJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0MyAgMjYgIDAwMjAgIFBBSU5UUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQ0ICAgMSAgNGM5OCAgU0VMRUNUQ0xJUFJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0NSAgIDEgIDRkZDcgIFNFTEVDVE9CSkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0NiAgIDEgIDc5ZjQgIF9fR1AgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDcgICAxICA0ZDRlICBDT01CSU5FUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQ4ICAgMSAgNDkyOSAgQ1JFQVRFQklUTUFQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQ5ICAgMSAgNDk0MyAgQ1JFQVRFQklUTUFQSU5ESVJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTAgICA0ICAwNWQ3ICBDUkVBVEVCUlVTSElORElSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUxICAgNCAgMDVmMSAgQ1JFQVRFQ09NUEFUSUJMRUJJVE1BUCBleHBvcnRlZAotIDUyICAgMSAgNDdjNCAgQ1JFQVRFQ09NUEFUSUJMRURDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUzICAgMSAgNDgwYSAgQ1JFQVRFREMgZXhwb3J0ZWQKLSA1NCAgIDkgIDAyMGUgIENSRUFURUVMTElQVElDUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU1ICAgOSAgMGY5OSAgQ1JFQVRFRUxMSVBUSUNSR05JTkRJUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1NiAgIDMgIDE1ODkgIENSRUFURUZPTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTcgICAzICAxNWIxICBDUkVBVEVGT05USU5ESVJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTggICA0ICAwNWE3ICBDUkVBVEVIQVRDSEJSVVNIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU5ICAgMSAgMWVjMCAgV0VQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYwICAgNCAgMDVjMyAgQ1JFQVRFUEFUVEVSTkJSVVNIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYxICAgMSAgNDhmMyAgQ1JFQVRFUEVOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYyICAgMSAgNDkwZiAgQ1JFQVRFUEVOSU5ESVJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjMgICA5ICAwZmIzICBDUkVBVEVQT0xZR09OUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY0ICAgMSAgNTljZCAgQ1JFQVRFUkVDVFJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2NSAgIDEgIDRjYjIgIENSRUFURVJFQ1RSR05JTkRJUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2NiAgIDQgIDAxN2EgIENSRUFURVNPTElEQlJVU0ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjcgICAxICA0YTE0ICBEUFRPTFAgZXhwb3J0ZWQKLSA2OCAgIDEgIDQ4OTcgIERFTEVURURDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY5ICAgMSAgNDhkZiAgREVMRVRFT0JKRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDcwICAgNSAgMDVhNyAgRU5VTUZPTlRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDcxICAgNCAgMDY3OCAgRU5VTU9CSkVDVFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzIgICAxICA0Y2NjICBFUVVBTFJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3MyAgIDEgIDE2YTUgIEVYQ0xVREVWSVNSRUNUIGV4cG9ydGVkCi0gNzQgICAxICA0YTc2ICBHRVRCSVRNQVBCSVRTIGV4cG9ydGVkCi0gNzUgICAxICA1MTVkICBHRVRCS0NPTE9SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc2ICAgMSAgNTE0MiAgR0VUQktNT0RFIGV4cG9ydGVkCi0gNzcgICAxICA0YzY0ICBHRVRDTElQQk9YIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc4ICAgMSAgNTE1NyAgR0VUQ1VSUkVOVFBPU0lUSU9OIGV4cG9ydGVkCi0gNzkgICAxICA1MTU0ICBHRVREQ09SRyBleHBvcnRlZAotIDgwICAgMSAgNGE5NiAgR0VUREVWSUNFQ0FQUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MSAgIDEgIDUxM2YgIEdFVE1BUE1PREUgZXhwb3J0ZWQKLSA4MiAgIDQgIDA2YTggIEdFVE9CSkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MyAgMjMgIDAzNmYgIEdFVFBJWEVMIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDg0ICAgMSAgNTEzOSAgR0VUUE9MWUZJTExNT0RFIGV4cG9ydGVkCi0gODUgICAxICA1MTMzICBHRVRST1AyIGV4cG9ydGVkCi0gODYgICAxICA1MTQ1ICBHRVRSRUxBQlMgZXhwb3J0ZWQKLSA4NyAgIDEgIDRhNWEgIEdFVFNUT0NLT0JKRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDg4ICAgMSAgNTEzYyAgR0VUU1RSRVRDSEJMVE1PREUgZXhwb3J0ZWQKLSA4OSAgMTYgIDBjNjMgIEdFVFRFWFRDSEFSQUNURVJFWFRSQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA5MCAgIDEgIDUxNjAgIEdFVFRFWFRDT0xPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA5MSAgIDEgIDRiOGQgIEdFVFRFWFRFWFRFTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gOTIgICAzICAxNjZhICBHRVRURVhURkFDRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA5MyAgIDMgIDE2OWEgIEdFVFRFWFRNRVRSSUNTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDk0ICAgMSAgNTE1MSAgR0VUVklFV1BPUlRFWFQgZXhwb3J0ZWQKLSA5NSAgIDEgIDUxNGIgIEdFVFZJRVdQT1JUT1JHIGV4cG9ydGVkCi0gOTYgICAxICA1MTRlICBHRVRXSU5ET1dFWFQgZXhwb3J0ZWQKLSA5NyAgIDEgIDUxNDggIEdFVFdJTkRPV09SRyBleHBvcnRlZAotIDk4ICAgMSAgMTZhMiAgSU5URVJTRUNUVklTUkVDVCBleHBvcnRlZAotIDk5ICAgMSAgNGEzNyAgTFBUT0RQIGV4cG9ydGVkCi0xMDAgIDIzICAwMzliICBMSU5FRERBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAxICAgMSAgNGQyNiAgT0ZGU0VUUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAyICAgMSAgMjkyOSAgT0ZGU0VUVklTUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAzICAgMSAgNGRhOSAgUFRWSVNJQkxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTA0ICAgMSAgNGQwNiAgUkVDVFZJU0lCTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDUgICAxICAxNjM1ICBTRUxFQ1RWSVNSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDYgICAxICA0YWFhICBTRVRCSVRNQVBCSVRTIGV4cG9ydGVkCi0xMTcgICAxICAxMTE4ICBTRVREQ09SRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExOSAgIDIgIDBlMjUgIEFEREZPTlRSRVNPVVJDRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMSAgIDEgIDIwNjcgIERFQVRIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIyICAgMSAgMjA4ZSAgUkVTVVJSRUNUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIzICAxOSAgMTYwMyAgUExBWU1FVEFGSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTI0ICAxOSAgMTYyNCAgR0VUTUVUQUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjUgIDIwICAyNDhiICBDUkVBVEVNRVRBRklMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyNiAgMjAgIDI0YTUgIENMT1NFTUVUQUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjcgIDE5ICAxNWVmICBERUxFVEVNRVRBRklMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyOCAgIDEgIDQxYjAgIE1VTERJViBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyOSAgIDEgIDA3NmMgIFNBVkVWSVNSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzAgICAxICAwN2IyICBSRVNUT1JFVklTUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTMxICAgMSAgMjAwYSAgSU5RVUlSRVZJU1JHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEzMiAgIDcgIDA3M2QgIFNFVEVOVklST05NRU5UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTMzICAgNyAgMDcwNyAgR0VURU5WSVJPTk1FTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzQgICAxICA0YjZkICBHRVRSR05CT1ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzUgIDE1ICAwODdmICBTQ0FOTFIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzYgICA2ICAwNTA3ICBSRU1PVkVGT05UUkVTT1VSQ0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDggICAxICA0YzI4ICBTRVRCUlVTSE9SRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE0OSAgIDEgIDUxNWEgIEdFVEJSVVNIT1JHIGV4cG9ydGVkCi0xNTAgICAxICA0YzNjICBVTlJFQUxJWkVPQkpFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNTEgIDIwICAyNDZiICBDT1BZTUVUQUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNTMgICAxICA0N2Q4ICBDUkVBVEVJQyBleHBvcnRlZAotMTU0ICAgMSAgNGFjYSAgR0VUTkVBUkVTVENPTE9SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTU1ICAgNyAgMDUyZCAgUVVFUllBQk9SVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE1NiAgIDQgIDA2MDUgIENSRUFURURJU0NBUkRBQkxFQklUTUFQIGV4cG9ydGVkCi0xNTkgIDIwICAyNGI5ICBHRVRNRVRBRklMRUJJVFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjAgIDIwICAyNGNkICBTRVRNRVRBRklMRUJJVFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjEgICAxICA0ZDk1ICBQVElOUkVHSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTYyICAgMSAgNDliOCAgR0VUQklUTUFQRElNRU5TSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTYzICAgMSAgNDk4NCAgU0VUQklUTUFQRElNRU5TSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTY5ICAgMSAgNDM1MiAgSVNEQ0RJUlRZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTcwICAgMSAgNDM5YiAgU0VURENTVEFUVVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNzIgICAxICA0ZDgxICBTRVRSRUNUUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTczICAgMSAgNTEzMCAgR0VUQ0xJUFJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE3NSAgMTkgIDE2NmEgIEVOVU1NRVRBRklMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE3NiAgMTkgIDE2M2UgIFBMQVlNRVRBRklMRVJFQ09SRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE3OSAgIDEgIDA2MDEgIEdFVERDU1RBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xODAgICAxICAwNjE1ICBTRVREQ1NUQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTgxICAgMSAgNGNlNiAgUkVDVElOUkVHSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTkwICAzMSAgMDRlYyAgU0VURENIT09LIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTkxICAzMSAgMDRiNSAgR0VURENIT09LIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTkyICAgMSAgNzZiMCAgU0VUSE9PS0ZMQUdTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTkzICAzMSAgMDUyNiAgU0VUQk9VTkRTUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE5NCAgIDEgIDc2ZTQgIEdFVEJPVU5EU1JFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTUgICAxICAxYWM2ICBTRUxFQ1RCSVRNQVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTYgIDIwICAyNGUxICBTRVRNRVRBRklMRUJJVFNCRVRURVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDEgIDEzICAwMTRhICBETUJJVEJMVCBleHBvcnRlZAotMjAyICAxMyAgMDE0ZiAgRE1DT0xPUklORk8gZXhwb3J0ZWQKLTIwNiAgMTMgIDAxNjMgIERNRU5VTURGT05UUyBleHBvcnRlZAotMjA3ICAxMyAgMDE2OSAgRE1FTlVNT0JKIGV4cG9ydGVkCi0yMDggIDEzICAwMTU5ICBETU9VVFBVVCBleHBvcnRlZAotMjA5ICAxMyAgMDE1NCAgRE1QSVhFTCBleHBvcnRlZAotMjEwICAxMyAgMDE1ZSAgRE1SRUFMSVpFT0JKRUNUIGV4cG9ydGVkCi0yMTEgIDEzICAwMGRmICBETVNUUkJMVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxMiAgMTMgIDAxNmUgIERNU0NBTkxSIGV4cG9ydGVkCi0yMTMgIDEzICAwMTcxICBCUlVURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxNCAgMTMgIDAwMDAgIERNRVhUVEVYVE9VVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxNSAgMTMgIDAxMzAgIERNR0VUQ0hBUldJRFRIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE2ICAxMyAgMDEzNiAgRE1TVFJFVENIQkxUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE3ICAxMyAgMDEzYiAgRE1ESUJCSVRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE4ICAxMyAgMDE0MCAgRE1TVFJFVENIRElCSVRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE5ICAxMyAgMDE0NSAgRE1TRVRESUJUT0RFViBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyMCAgMTMgIDAyNGQgIERNVFJBTlNQT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjMwICAyNyAgMDAwMCAgQ1JFQVRFUFEgZXhwb3J0ZWQKLTIzMSAgMjcgIDAwZmIgIE1JTlBRIGV4cG9ydGVkCi0yMzIgIDI3ICAwMGZlICBFWFRSQUNUUFEgZXhwb3J0ZWQKLTIzMyAgMjcgIDAwNDUgIElOU0VSVFBRIGV4cG9ydGVkCi0yMzQgIDI3ICAwMWRjICBTSVpFUFEgZXhwb3J0ZWQKLTIzNSAgMjcgIDAxY2IgIERFTEVURVBRIGV4cG9ydGVkCi0yNDAgIDI4ICAwMWMzICBPUEVOSk9CIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQxICAyOCAgMDhlYiAgV1JJVEVTUE9PTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI0MiAgMjggIDBlODIgIFdSSVRFRElBTE9HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQzICAyOCAgMTI5MiAgQ0xPU0VKT0IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNDQgIDI4ICAxM2UwICBERUxFVEVKT0IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNDUgIDI4ICAxODAyICBHRVRTUE9PTEpPQiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI0NiAgMjggIDA2YTEgIFNUQVJUU1BPT0xQQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQ3ICAyOCAgMTExMiAgRU5EU1BPT0xQQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQ4ICAyOCAgMThlNCAgUVVFUllKT0IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNTAgIDI4ICAwMDAwICBDT1BZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjUzICAyOCAgMGZmMyAgREVMRVRFU1BPT0xQQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjU0ICAyOCAgMTU2ZiAgU1BPT0xGSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzAwICAgNSAgMDkzYyAgRU5HSU5FRU5VTUVSQVRFRk9OVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMSAgIDYgIDA1NjAgIEVOR0lORURFTEVURUZPTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDIgICAzICAyYjJkICBFTkdJTkVSRUFMSVpFRk9OVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMyAgIDMgIDJjOGEgIEVOR0lORUdFVENIQVJXSURUSCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNCAgIDUgIDA5OTMgIEVOR0lORVNFVEZPTlRDT05URVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA1ICAgNyAgMDllOSAgRU5HSU5FR0VUR0xZUEhCTVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDYgICA3ICAxMTg0ICBFTkdJTkVNQUtFRk9OVERJUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNyAgIDcgIDA4M2QgIEdFVENIQVJBQkNXSURUSFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDggICA3ICAwODc2ICBHRVRPVVRMSU5FVEVYVE1FVFJJQ1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDkgICA3ICAwNzk1ICBHRVRHTFlQSE9VVExJTkUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMTAgICA3ICAwNzYzICBDUkVBVEVTQ0FMQUJMRUZPTlRSRVNPVVJDRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMxMSAgIDcgIDA3ZmMgIEdFVEZPTlREQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzEyICAgNyAgMGQ4YSAgQ09OVkVSVE9VVExJTkVGT05URklMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMxMyAgIDcgIDBkMzYgIEdFVFJBU1RFUklaRVJDQVBTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzE0ICAgMSAgNjY5YSAgRU5HSU5FRVhUVEVYVE9VVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMzMCAgIDUgIDA1ZDcgIEVOVU1GT05URkFNSUxJRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMzIgICA3ICAwODk2ICBHRVRLRVJOSU5HUEFJUlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNDUgICAxICA1MTM2ICBHRVRURVhUQUxJR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNDYgICAxICA0ZTQ5ICBTRVRURVhUQUxJR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNDggICA5ICAxMDU4ICBDSE9SRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM0OSAgIDMgIDE2M2YgIFNFVE1BUFBFUkZMQUdTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzUwICAgMyAgMTVjYiAgR0VUQ0hBUldJRFRIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzUxICAgMSAgNGY0OCAgRVhUVEVYVE9VVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1MiAgIDEgIDBhMmUgIEdFVFBIWVNJQ0FMRk9OVEhBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1MyAgIDMgIDE2MGIgIEdFVEFTUEVDVFJBVElPRklMVEVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzU0ICAgMSAgMWZkZiAgU0hSSU5LR0RJSEVBUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1NSAgNDggIDAyZWYgIEZUUkFQUElORzAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNjAgIDIyICAwMDIzICBDUkVBVEVQQUxFVFRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzYxICAyMiAgMDI3MSAgR0RJU0VMRUNUUEFMRVRURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM2MiAgMjIgIDEwODggIEdESVJFQUxJWkVQQUxFVFRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzYzICAyMiAgMDA1MCAgR0VUUEFMRVRURUVOVFJJRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNjQgIDIyICAwMGQyICBTRVRQQUxFVFRFRU5UUklFUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM2NSAgMjIgIDEwMWQgIFJFQUxJWkVERUZBVUxUUEFMRVRURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM2NiAgMjIgIDAxMDkgIFVQREFURUNPTE9SUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM2NyAgMjIgIDAwMDAgIEFOSU1BVEVQQUxFVFRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzY4ICAyMiAgMDBiZSAgUkVTSVpFUEFMRVRURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM3MCAgMjIgIDAwNzMgIEdFVE5FQVJFU1RQQUxFVFRFSU5ERVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNzIgIDE1ICAwOTEwICBFWFRGTE9PREZJTEwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNzMgIDIyICAwMGY1ICBTRVRTWVNURU1QQUxFVFRFVVNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzc0ICAyMiAgMDBhYSAgR0VUU1lTVEVNUEFMRVRURVVTRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM3NSAgMjIgIDAwODcgIEdFVFNZU1RFTVBBTEVUVEVFTlRSSUVTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzc2ICAzMSAgMDA5YyAgUkVTRVREQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM3NyAgMzEgIDAwNDUgIFNUQVJURE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzc4ICAzMSAgMDAyZSAgRU5ERE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzc5ICAzMSAgMDA2OCAgU1RBUlRQQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzgwICAzMSAgMDAxNyAgRU5EUEFHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM4MSAgMzEgIDAwN2MgIFNFVEFCT1JUUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM4MiAgMzEgIDAwMDAgIEFCT1JURE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAwICAgMSAgNDIwZSAgRkFTVFdJTkRPV0ZSQU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAxICAgMiAgMDQwMyAgR0RJTU9WRUJJVE1BUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwMyAgIDIgIDA0MmEgIEdESUlOSVQyIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDA1ICAgMiAgMDEyZSAgRklOQUxHRElJTklUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDA3ICAgMSAgMGVjMSAgQ1JFQVRFVVNFUkJJVE1BUCBleHBvcnRlZAotNDA5ICAgNCAgMDIwMCAgQ1JFQVRFVVNFUkRJU0NBUkRBQkxFQklUTUFQIGV4cG9ydGVkCi00MTAgIDE5ICAxNDkwICBJU1ZBTElETUVUQUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MTEgICAxICA1MTFhICBHRVRDVVJMT0dGT05UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDEyICAyMiAgMGIwYyAgSVNEQ0NVUlJFTlRQQUxFVFRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDM5ICAxMSAgMDIwMiAgU1RSRVRDSERJQklUUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ0MCAgMTEgIDAwMDAgIFNFVERJQklUUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ0MSAgMTEgIDAxOTYgIEdFVERJQklUUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ0MiAgMTEgIDAwNmMgIENSRUFURURJQklUTUFQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDQzICAxMSAgMDEwYSAgU0VURElCSVRTVE9ERVZJQ0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NDQgICA5ICAwMWJlICBDUkVBVEVST1VORFJFQ1RSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NDUgICA0ICAwNjE5ICBDUkVBVEVESUJQQVRURVJOQlJVU0ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NDkgIDExICAxMDE1ICBERVZJQ0VDT0xPUk1BVENIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDUwICAyNCAgMDAyMyAgUE9MWVBPTFlHT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NTEgICA5ICAwZmUzICBDUkVBVEVQT0xZUE9MWUdPTlJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ1MiAgMjEgIDE5YTAgIEdESVNFRUdESURPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDYwICAgMSAgNzY5MCAgR0RJVEFTS1RFUk1JTkFUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDYxICAgMSAgNzZhMiAgU0VUT0JKRUNUT1dORVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NjIgICAxICAxZWM2ICBJU0dESU9CSkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ2MyAgIDEgIDBlNjggIE1BS0VPQkpFQ1RQUklWQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDY0ICAxOSAgMTg2MiAgRklYVVBCT0dVU1BVQkxJU0hFUk1FVEFGSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDY1ICAgMSAgMjliNyAgUkVDVFZJU0lCTEVfRUhIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDY2ICAgMSAgMmFhYiAgUkVDVElOUkVHSU9OX0VISCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ2NyAgIDEgIDU2YTMgIFVOSUNPREVUT0FOU0kgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NjggICAxICA0OWNjICBHRVRCSVRNQVBESU1FTlNJT05FWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ2OSAgIDEgIDVlYjUgIEdFVEJSVVNIT1JHRVggZXhwb3J0ZWQKLTQ3MCAgIDEgIDVlZDggIEdFVENVUlJFTlRQT1NJVElPTkVYIGV4cG9ydGVkCi00NzEgICAxICA0YmI0ICBHRVRURVhURVhURU5UUE9JTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NzIgICAxICA1ZjI3ICBHRVRWSUVXUE9SVEVYVEVYIGV4cG9ydGVkCi00NzMgICAxICA1ZjRhICBHRVRWSUVXUE9SVE9SR0VYIGV4cG9ydGVkCi00NzQgICAxICA1ZjZkICBHRVRXSU5ET1dFWFRFWCBleHBvcnRlZAotNDc1ICAgMSAgNWY5MCAgR0VUV0lORE9XT1JHRVggZXhwb3J0ZWQKLTQ3NiAgIDEgIDRhZjIgIE9GRlNFVFZJRVdQT1JUT1JHRVggZXhwb3J0ZWQKLTQ3NyAgIDEgIDRiMjYgIE9GRlNFVFdJTkRPV09SR0VYIGV4cG9ydGVkCi00NzggICAxICA0OTk4ICBTRVRCSVRNQVBESU1FTlNJT05FWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ3OSAgIDQgIDA3MTAgIFNFVFZJRVdQT1JURVhURVggZXhwb3J0ZWQKLTQ4MCAgIDEgIDRmMjggIFNFVFZJRVdQT1JUT1JHRVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00ODEgICA0ICAwNmRjICBTRVRXSU5ET1dFWFRFWCBleHBvcnRlZAotNDgyICAgMSAgNGVmNCAgU0VUV0lORE9XT1JHRVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00ODMgIDIxICAwZWJlICBNT1ZFVE9FWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ4NCAgIDQgIDA3NDQgIFNDQUxFVklFV1BPUlRFWFRFWCBleHBvcnRlZAotNDg1ICAgNCAgMDc3OCAgU0NBTEVXSU5ET1dFWFRFWCBleHBvcnRlZAotNDg2ICAgMyAgMTYxZiAgR0VUQVNQRUNUUkFUSU9GSUxURVJFWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKZGlmZiAtLWdpdCBhL2V0Yy9rZXJuZWwtb3JkaW5hbHMgYi9ldGMva2VybmVsLW9yZGluYWxzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2FkOTFkLi4wMDAwMDAwCi0tLSBhL2V0Yy9rZXJuZWwtb3JkaW5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotICAxICAgMSAgOTNjZSAgRkFUQUxFWElUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAyICAgMSAgOWQ2ZiAgRVhJVEtFUk5FTCBleHBvcnRlZAotICAzICAgMyAgMDdjNiAgR0VUVkVSU0lPTiBleHBvcnRlZAotICA0ICAgMiAgMjhiNyAgTE9DQUxJTklUIGV4cG9ydGVkCi0gIDUgICAxICAwNTQzICBMT0NBTEFMTE9DIGV4cG9ydGVkCi0gIDYgICAxICAwNTg3ICBMT0NBTFJFQUxMT0MgZXhwb3J0ZWQKLSAgNyAgIDEgIDA1NWYgIExPQ0FMRlJFRSBleHBvcnRlZAotICA4ICAgMSAgMDU3MyAgTE9DQUxMT0NLIGV4cG9ydGVkCi0gIDkgICAxICAwNWJkICBMT0NBTFVOTE9DSyBleHBvcnRlZAotIDEwICAgMSAgMDVhOSAgTE9DQUxTSVpFIGV4cG9ydGVkCi0gMTEgICAxICA4ZDZhICBMT0NBTEhBTkRMRSBleHBvcnRlZAotIDEyICAgMSAgMDVkMSAgTE9DQUxGTEFHUyBleHBvcnRlZAotIDEzICAgMSAgOGQ4NSAgTE9DQUxDT01QQUNUIGV4cG9ydGVkCi0gMTQgICAyICAwMjc4ICBMT0NBTE5PVElGWSBleHBvcnRlZAotIDE1ICAgMSAgMDIyYiAgR0xPQkFMQUxMT0MgZXhwb3J0ZWQKLSAxNiAgIDEgIDAyOGMgIEdMT0JBTFJFQUxMT0MgZXhwb3J0ZWQKLSAxNyAgIDEgIDAyNDcgIEdMT0JBTEZSRUUgZXhwb3J0ZWQKLSAxOCAgIDEgIDAyNzggIEdMT0JBTExPQ0sgZXhwb3J0ZWQKLSAxOSAgIDEgIDAyY2IgIEdMT0JBTFVOTE9DSyBleHBvcnRlZAotIDIwICAgMSAgMDJiNyAgR0xPQkFMU0laRSBleHBvcnRlZAotIDIxICAgMSAgMDI2NCAgR0xPQkFMSEFORExFIGV4cG9ydGVkCi0gMjIgICAxICAwMmU4ICBHTE9CQUxGTEFHUyBleHBvcnRlZAotIDIzICAgMSAgMDNiMyAgTE9DS1NFR01FTlQgZXhwb3J0ZWQKLSAyNCAgIDEgIDAzYzcgIFVOTE9DS1NFR01FTlQgZXhwb3J0ZWQKLSAyNSAgIDEgIDExMDUgIEdMT0JBTENPTVBBQ1QgZXhwb3J0ZWQKLSAyNiAgIDEgIDBlMzkgIEdMT0JBTEZSRUVBTEwgZXhwb3J0ZWQKLSAyOCAgIDEgIDExOTAgIEdMT0JBTE1BU1RFUkhBTkRMRSBleHBvcnRlZAotIDI5ICAgMSAgN2QyMSAgWUlFTEQgZXhwb3J0ZWQKLSAzMCAgIDEgIDdjYTggIFdBSVRFVkVOVCBleHBvcnRlZAotIDMxICAgMSAgN2Q5MiAgUE9TVEVWRU5UIGV4cG9ydGVkCi0gMzIgICAxICA3ZGYwICBTRVRQUklPUklUWSBleHBvcnRlZAotIDMzICAgMSAgODFlNSAgTE9DS0NVUlJFTlRUQVNLIGV4cG9ydGVkCi0gMzQgICAxICA3ZGUzICBTRVRUQVNLUVVFVUUgZXhwb3J0ZWQKLSAzNSAgIDEgIDdkOWQgIEdFVFRBU0tRVUVVRSBleHBvcnRlZAotIDM2ICAgMSAgODQyYyAgR0VUQ1VSUkVOVFRBU0sgZXhwb3J0ZWQKLSAzNyAgIDMgIDAyNGUgIEdFVENVUlJFTlRQREIgZXhwb3J0ZWQKLSAzOCAgIDEgIDdkYzUgIFNFVFRBU0tTSUdOQUxQUk9DIGV4cG9ydGVkCi0gNDEgICAxICA5YzhlICBFTkFCTEVET1MgZXhwb3J0ZWQKLSA0MiAgIDEgIDljOGYgIERJU0FCTEVET1MgZXhwb3J0ZWQKLSA0NSAgIDIgIDAyNDQgIExPQURNT0RVTEUgZXhwb3J0ZWQKLSA0NiAgIDIgIDAxNzYgIEZSRUVNT0RVTEUgZXhwb3J0ZWQKLSA0NyAgIDIgIDAxYmIgIEdFVE1PRFVMRUhBTkRMRSBleHBvcnRlZAotIDQ4ICAgMiAgMDFkMiAgR0VUTU9EVUxFVVNBR0UgZXhwb3J0ZWQKLSA0OSAgIDIgIDAxZTYgIEdFVE1PRFVMRUZJTEVOQU1FIGV4cG9ydGVkCi0gNTAgICAyICAwMTllICBHRVRQUk9DQUREUkVTUyBleHBvcnRlZAotIDUxICAgMyAgMDBhOCAgTUFLRVBST0NJTlNUQU5DRSBleHBvcnRlZAotIDUyICAgMyAgMDBjNSAgRlJFRVBST0NJTlNUQU5DRSBleHBvcnRlZAotIDUzICAgMSAgNDkyNyAgQ0FMTFBST0NJTlNUQU5DRSBleHBvcnRlZAotIDU0ICAgMiAgMDIxOSAgR0VUSU5TVEFOQ0VEQVRBIGV4cG9ydGVkCi0gNTUgICAzICAwOGVlICBDQVRDSCBleHBvcnRlZAotIDU2ICAgMyAgMDkyOCAgVEhST1cgZXhwb3J0ZWQKLSA1NyAgIDEgIDA2NjMgIEdFVFBST0ZJTEVJTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTggICAxICAwNjg5ICBHRVRQUk9GSUxFU1RSSU5HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU5ICAgMSAgMDc2MyAgV1JJVEVQUk9GSUxFU1RSSU5HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYwICAgMyAgMDAwOCAgRklORFJFU09VUkNFIGV4cG9ydGVkCi0gNjEgICAxICAwMTI2ICBMT0FEUkVTT1VSQ0UgZXhwb3J0ZWQKLSA2MiAgIDEgIDAxOGIgIExPQ0tSRVNPVVJDRSBleHBvcnRlZAotIDYzICAgMSAgMDE3NyAgRlJFRVJFU09VUkNFIGV4cG9ydGVkCi0gNjQgICAxICAwMTQwICBBQ0NFU1NSRVNPVVJDRSBleHBvcnRlZAotIDY1ICAgMSAgMDE5ZiAgU0laRU9GUkVTT1VSQ0UgZXhwb3J0ZWQKLSA2NiAgIDEgIDAxNWQgIEFMTE9DUkVTT1VSQ0UgZXhwb3J0ZWQKLSA2NyAgIDMgIDAwMmUgIFNFVFJFU09VUkNFSEFORExFUiBleHBvcnRlZAotIDY4ICAgMyAgMDQxYSAgSU5JVEFUT01UQUJMRSBleHBvcnRlZAotIDY5ICAgMSAgNDk0MiAgRklOREFUT00gZXhwb3J0ZWQKLSA3MCAgIDEgIDQ5M2YgIEFEREFUT00gZXhwb3J0ZWQKLSA3MSAgIDEgIDAxYjkgIERFTEVURUFUT00gZXhwb3J0ZWQKLSA3MiAgIDEgIDAxY2QgIEdFVEFUT01OQU1FIGV4cG9ydGVkCi0gNzMgICAxICAwMWZkICBHRVRBVE9NSEFORExFIGV4cG9ydGVkCi0gNzQgICAxICAwNWU1ICBPUEVORklMRSBleHBvcnRlZAotIDc1ICAgMyAgMDRiZSAgT1BFTlBBVEhOQU1FIGV4cG9ydGVkCi0gNzYgICAzICAwNGI2ICBERUxFVEVQQVRITkFNRSBleHBvcnRlZAotIDc3ICAgMSAgODNjZCAgUkVTRVJWRUQxIGV4cG9ydGVkCi0gNzggICAxICA4M2NhICBSRVNFUlZFRDIgZXhwb3J0ZWQKLSA3OSAgIDEgIDgzYzQgIFJFU0VSVkVEMyBleHBvcnRlZAotIDgwICAgMSAgODNjNyAgUkVTRVJWRUQ0IGV4cG9ydGVkCi0gODEgICAxICAwNDZlICBfTENMT1NFIGV4cG9ydGVkCi0gODIgICAxICAwNGU2ICBfTFJFQUQgZXhwb3J0ZWQKLSA4MyAgIDEgIDA0OGQgIF9MQ1JFQVQgZXhwb3J0ZWQKLSA4NCAgIDEgIDA0YjggIF9MTFNFRUsgZXhwb3J0ZWQKLSA4NSAgIDEgIDA0NDMgIF9MT1BFTiBleHBvcnRlZAotIDg2ICAgMSAgMDUxNiAgX0xXUklURSBleHBvcnRlZAotIDg3ICAgMSAgODM4ZSAgUkVTRVJWRUQ1IGV4cG9ydGVkCi0gODggICAxICA4MzZmICBMU1RSQ1BZIGV4cG9ydGVkCi0gODkgICAxICA4MzdmICBMU1RSQ0FUIGV4cG9ydGVkCi0gOTAgICAxICA4MmY2ICBMU1RSTEVOIGV4cG9ydGVkCi0gOTEgICAyICAyNjhkICBJTklUVEFTSyBleHBvcnRlZAotIDkyICAgMyAgMDUwOCAgR0VUVEVNUERSSVZFIGV4cG9ydGVkCi0gOTMgICAxICA0OGZhICBHRVRDT0RFSEFORExFIGV4cG9ydGVkCi0gOTQgICAzICAwM2NlICBERUZJTkVIQU5ETEVUQUJMRSBleHBvcnRlZAotIDk1ICAgMiAgMDIyZCAgTE9BRExJQlJBUlkgZXhwb3J0ZWQKLSA5NiAgIDIgIDAxOGEgIEZSRUVMSUJSQVJZIGV4cG9ydGVkCi0gOTcgICAzICAwMGRjICBHRVRURU1QRklMRU5BTUUgZXhwb3J0ZWQKLSA5OCAgIDEgIDVjMTcgIEdFVExBU1RESVNLQ0hBTkdFIGV4cG9ydGVkCi0gOTkgICAxICAwYmM1ICBHRVRMUEVSUk1PREUgZXhwb3J0ZWQKLTEwMCAgIDIgIDJhYjcgIFZBTElEQVRFQ09ERVNFR01FTlRTIGV4cG9ydGVkCi0xMDEgICAxICAxZDkyICBOT0hPT0tET1NDQUxMIGV4cG9ydGVkCi0xMDIgICAxICAxZDk4ICBET1MzQ0FMTCBleHBvcnRlZAotMTAzICAgMSAgOWUxOSAgTkVUQklPU0NBTEwgZXhwb3J0ZWQKLTEwNCAgIDEgIDAzZGIgIEdFVENPREVJTkZPIGV4cG9ydGVkCi0xMDUgICAzICAwN2Q5ICBHRVRFWEVWRVJTSU9OIGV4cG9ydGVkCi0xMDYgICAxICAyZWRlICBTRVRTV0FQQVJFQVNJWkUgZXhwb3J0ZWQKLTEwNyAgIDMgIDAxMzIgIFNFVEVSUk9STU9ERSBleHBvcnRlZAotMTA4ICAgMSAgMTFjNiAgU1dJVENIU1RBQ0tUTyBleHBvcnRlZAotMTA5ICAgMSAgMTIzYyAgU1dJVENIU1RBQ0tCQUNLIGV4cG9ydGVkCi0xMTAgICAxICA3YmFjICBQQVRDSENPREVIQU5ETEUgZXhwb3J0ZWQKLTExMSAgIDEgIDAyZmMgIEdMT0JBTFdJUkUgZXhwb3J0ZWQKLTExMiAgIDEgIDAzMTAgIEdMT0JBTFVOV0lSRSBleHBvcnRlZAotMTEzIDI1NCAgMDAwMyAgX19BSFNISUZUIGV4cG9ydGVkCi0xMTQgMjU0ICAwMDA4ICBfX0FISU5DUiBleHBvcnRlZAotMTE1ICAgMSAgOTk5YiAgT1VUUFVUREVCVUdTVFJJTkcgZXhwb3J0ZWQKLTExNiAgIDIgIDI3OTcgIElOSVRMSUIgZXhwb3J0ZWQKLTExNyAgIDEgIDdkM2UgIE9MRFlJRUxEIGV4cG9ydGVkCi0xMTggICAxICA3ZGE3ICBHRVRUQVNLUVVFVUVEUyBleHBvcnRlZAotMTE5ICAgMSAgN2RiNSAgR0VUVEFTS1FVRVVFRVMgZXhwb3J0ZWQKLTEyMCAgIDEgIDcyZDQgIFVOREVGRFlOTElOSyBleHBvcnRlZAotMTIxICAgMSAgOGRiMCAgTE9DQUxTSFJJTksgZXhwb3J0ZWQKLTEyMiAgIDEgIDgxZmYgIElTVEFTS0xPQ0tFRCBleHBvcnRlZAotMTIzICAgMSAgNDYzOCAgS0JEUlNUIGV4cG9ydGVkCi0xMjQgICAxICA5YzkwICBFTkFCTEVLRVJORUwgZXhwb3J0ZWQKLTEyNSAgIDEgIDljOTEgIERJU0FCTEVLRVJORUwgZXhwb3J0ZWQKLTEyNiAgIDEgIDJlYTcgIE1FTU9SWUZSRUVEIGV4cG9ydGVkCi0xMjcgICAxICAwNmQ3ICBHRVRQUklWQVRFUFJPRklMRUlOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyOCAgIDEgIDA3MDkgIEdFVFBSSVZBVEVQUk9GSUxFU1RSSU5HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTI5ICAgMSAgMDc5NSAgV1JJVEVQUklWQVRFUFJPRklMRVNUUklORyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEzMCAgIDMgIDA4ODggIEZJTEVDRFIgZXhwb3J0ZWQKLTEzMSAgIDMgIDA4Y2UgIEdFVERPU0VOVklST05NRU5UIGV4cG9ydGVkCi0xMzIgICAzICAwN2FiICBHRVRXSU5GTEFHUyBleHBvcnRlZAotMTMzICAgMSAgNGU3OCAgR0VURVhFUFRSIGV4cG9ydGVkCi0xMzQgICAzICAwMDU0ICBHRVRXSU5ET1dTRElSRUNUT1JZIGV4cG9ydGVkCi0xMzUgICAzICAwMDdlICBHRVRTWVNURU1ESVJFQ1RPUlkgZXhwb3J0ZWQKLTEzNiAgIDMgIDA2NzUgIEdFVERSSVZFVFlQRSBleHBvcnRlZAotMTM3ICAgMSAgMDIxMSAgRkFUQUxBUFBFWElUIGV4cG9ydGVkCi0xMzggICAyICAxZTRkICBHRVRIRUFQU1BBQ0VTIGV4cG9ydGVkCi0xMzkgICAxICA2MTJjICBET1NJR05BTCBleHBvcnRlZAotMTQwICAgMyAgMDY4YyAgU0VUU0lHSEFORExFUiBleHBvcnRlZAotMTQxICAgMSAgODAxNCAgSU5JVFRBU0sxIGV4cG9ydGVkCi0xNTAgICAxICA3Y2ZmICBESVJFQ1RFRFlJRUxEIGV4cG9ydGVkCi0xNTEgICAzICAwN2U2ICBXSU5PTERBUENBTEwgZXhwb3J0ZWQKLTE1MiAgIDMgIDA4ZTIgIEdFVE5VTVRBU0tTIGV4cG9ydGVkCi0xNTQgICAxICAwMzRjICBHTE9CQUxOT1RJRlkgZXhwb3J0ZWQKLTE1NSAgIDEgIDExOWYgIEdFVFRBU0tEUyBleHBvcnRlZAotMTU2ICAgMSAgNDYzMiAgTElNSVRFTVNQQUdFUyBleHBvcnRlZAotMTU3ICAgMSAgNDYzOSAgR0VUQ1VSUElEIGV4cG9ydGVkCi0xNTggICAxICA3ZTNlICBJU1dJTk9MREFQVEFTSyBleHBvcnRlZAotMTU5ICAgMSAgMGVjNSAgR0xPQkFMSEFORExFTk9SSVAgZXhwb3J0ZWQKLTE2MCAgIDEgIGE5NDAgIEVNU0NPUFkgZXhwb3J0ZWQKLTE2MSAgIDIgIDI5YzkgIExPQ0FMQ09VTlRGUkVFIGV4cG9ydGVkCi0xNjIgICAyICAyYTAxICBMT0NBTEhFQVBTSVpFIGV4cG9ydGVkCi0xNjMgICAxICAwMzM4ICBHTE9CQUxMUlVPTERFU1QgZXhwb3J0ZWQKLTE2NCAgIDEgIDAzMjQgIEdMT0JBTExSVU5FV0VTVCBleHBvcnRlZAotMTY1ICAgMSAgOWUwYyAgQTIwUFJPQyBleHBvcnRlZAotMTY2ICAgMiAgMDI4ZiAgV0lORVhFQyBleHBvcnRlZAotMTY3ICAgMSAgNGYwMiAgR0VURVhQV0lOVkVSIGV4cG9ydGVkCi0xNjggICAxICA4NGI4ICBESVJFQ1RSRVNBTExPQyBleHBvcnRlZAotMTY5ICAgMSAgMDQwNCAgR0VURlJFRVNQQUNFIGV4cG9ydGVkCi0xNzAgICAxICAwMGQwICBBTExPQ0NTVE9EU0FMSUFTIGV4cG9ydGVkCi0xNzEgICAxICAwMGU0ICBBTExPQ0RTVE9DU0FMSUFTIGV4cG9ydGVkCi0xNzIgICAxICAyMWZiICBBTExPQ0FMSUFTIGV4cG9ydGVkCi0xNzMgMjU0ICBmMDAwICBfX1JPTUJJT1MgZXhwb3J0ZWQKLTE3NCAyNTQgIGEwMDAgIF9fQTAwMEggZXhwb3J0ZWQKLTE3NSAgIDEgIDFkOWUgIEFMTE9DU0VMRUNUT1IgZXhwb3J0ZWQKLTE3NiAgIDEgIDAwZjggIEZSRUVTRUxFQ1RPUiBleHBvcnRlZAotMTc3ICAgMSAgMDEwYyAgUFJFU1RPQ0hBTkdPU0VMRUNUT1IgZXhwb3J0ZWQKLTE3OCAyNTQgIDAwMDEgIF9fV0lORkxBR1MgZXhwb3J0ZWQKLTE3OSAyNTQgIGQwMDAgIF9fRDAwMEggZXhwb3J0ZWQKLTE4MCAgIDEgIDI2YjkgIExPTkdQVFJBREQgZXhwb3J0ZWQKLTE4MSAyNTQgIGIwMDAgIF9fQjAwMEggZXhwb3J0ZWQKLTE4MiAyNTQgIGI4MDAgIF9fQjgwMEggZXhwb3J0ZWQKLTE4MyAyNTQgIDAwMDAgIF9fMDAwMEggZXhwb3J0ZWQKLTE4NCAgIDEgIDEzOWEgIEdMT0JBTERPU0FMTE9DIGV4cG9ydGVkCi0xODUgICAxICAxM2Q0ICBHTE9CQUxET1NGUkVFIGV4cG9ydGVkCi0xODYgICAxICAyMjUyICBHRVRTRUxFQ1RPUkJBU0UgZXhwb3J0ZWQKLTE4NyAgIDEgIDI3MjUgIFNFVFNFTEVDVE9SQkFTRSBleHBvcnRlZAotMTg4ICAgMSAgMjc1NSAgR0VUU0VMRUNUT1JMSU1JVCBleHBvcnRlZAotMTg5ICAgMSAgMjc2ZCAgU0VUU0VMRUNUT1JMSU1JVCBleHBvcnRlZAotMTkwIDI1NCAgZTAwMCAgX19FMDAwSCBleHBvcnRlZAotMTkxICAgMSAgMDM2MyAgR0xPQkFMUEFHRUxPQ0sgZXhwb3J0ZWQKLTE5MiAgIDEgIDAzNzcgIEdMT0JBTFBBR0VVTkxPQ0sgZXhwb3J0ZWQKLTE5MyAyNTQgIDAwNDAgIF9fMDA0MEggZXhwb3J0ZWQKLTE5NCAyNTQgIGYwMDAgIF9fRjAwMEggZXhwb3J0ZWQKLTE5NSAyNTQgIGMwMDAgIF9fQzAwMEggZXhwb3J0ZWQKLTE5NiAgIDEgIDI3OWIgIFNFTEVDVE9SQUNDRVNTUklHSFRTIGV4cG9ydGVkCi0xOTcgICAxICAwMzhiICBHTE9CQUxGSVggZXhwb3J0ZWQKLTE5OCAgIDEgIDAzOWYgIEdMT0JBTFVORklYIGV4cG9ydGVkCi0xOTkgICAxICAwNjQ3ICBTRVRIQU5ETEVDT1VOVCBleHBvcnRlZAotMjAwICAgMSAgM2U0ZSAgVkFMSURBVEVGUkVFU1BBQ0VTIGV4cG9ydGVkCi0yMDEgICAxICA5YWRhICBSRVBMQUNFSU5TVCBleHBvcnRlZAotMjAyICAgMyAgMDgxZCAgUkVHSVNURVJQVFJBQ0UgZXhwb3J0ZWQKLTIwMyAgIDEgIDk0NmUgIERFQlVHQlJFQUsgZXhwb3J0ZWQKLTIwNCAgIDMgIDAxNGUgIFNXQVBSRUNPUkRJTkcgZXhwb3J0ZWQKLTIwNSAgIDEgIDk3ZTAgIENWV0JSRUFLIGV4cG9ydGVkCi0yMDYgICAxICAxZGY1ICBBTExPQ1NFTEVDVE9SQVJSQVkgZXhwb3J0ZWQKLTIwNyAgIDEgIDg0MjUgIElTREJDU0xFQURCWVRFIGV4cG9ydGVkCi0zMTAgICAyICAyYTBjICBMT0NBTEhBTkRMRURFTFRBIGV4cG9ydGVkCi0zMTEgICAxICA5ZWFmICBHRVRTRVRLRVJORUxET1NQUk9DIGV4cG9ydGVkCi0zMTQgICAxICA5ODM1ICBERUJVR0RFRklORVNFR01FTlQgZXhwb3J0ZWQKLTMxNSAgIDEgIDcwOGIgIFdSSVRFT1VUUFJPRklMRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMTYgICAxICAxMjdlICBHRVRGUkVFTUVNSU5GTyBleHBvcnRlZAotMzE4ICAgMSAgOWVjZiAgRkFUQUxFWElUSE9PSyBleHBvcnRlZAotMzE5ICAgMSAgNTJmYyAgRkxVU0hDQUNIRURGSUxFSEFORExFIGV4cG9ydGVkCi0zMjAgICAxICA3ZTUwICBJU1RBU0sgZXhwb3J0ZWQKLTMyMyAgIDIgIDFlOWIgIElTUk9NTU9EVUxFIGV4cG9ydGVkCi0zMjQgICAxICA5NGNmICBMT0dFUlJPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMyNSAgIDEgIDk0ZjIgIExPR1BBUkFNRVJST1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMjYgICAyICAxZWEwICBJU1JPTUZJTEUgZXhwb3J0ZWQKLTMyNyAgIDEgIDk0OWIgIEszMjcgZXhwb3J0ZWQKLTMyOCAgIDEgIDk0Y2UgIF9ERUJVR09VVFBVVCBleHBvcnRlZAotMzI5ICAgMSAgOTRjNSAgSzMyOSBleHBvcnRlZAotMzMyICAgNCAgMDIxOCAgVEhIT09LIGV4cG9ydGVkCi0zMzQgICAxICA0YjYyICBJU0JBRFJFQURQVFIgZXhwb3J0ZWQKLTMzNSAgIDEgIDRiODMgIElTQkFEV1JJVEVQVFIgZXhwb3J0ZWQKLTMzNiAgIDEgIDRjMjggIElTQkFEQ09ERVBUUiBleHBvcnRlZAotMzM3ICAgMSAgNGM0ZSAgSVNCQURTVFJJTkdQVFIgZXhwb3J0ZWQKLTMzOCAgIDEgIDRjNzIgIEhBU0dQSEFORExFUiBleHBvcnRlZAotMzM5ICAgMSAgYTcwZSAgRElBR1FVRVJZIGV4cG9ydGVkCi0zNDAgICAxICBhNzFkICBESUFHT1VUUFVUIGV4cG9ydGVkCi0zNDEgICAzICAwODRjICBUT09MSEVMUEhPT0sgZXhwb3J0ZWQKLTM0MiAgIDEgIGE4MjAgIF9fR1AgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNDMgICAyICAwNjg5ICBSRUdJU1RFUldJTk9MREFQSE9PSyBleHBvcnRlZAotMzQ0ICAgMiAgMDZmMyAgR0VUV0lOT0xEQVBIT09LUyBleHBvcnRlZAotMzQ1ICAgMSAgNGQzOSAgSVNTSEFSRURTRUxFQ1RPUiBleHBvcnRlZAotMzQ2ICAgMSAgNGJhNSAgSVNCQURIVUdFUkVBRFBUUiBleHBvcnRlZAotMzQ3ICAgMSAgNGJlNSAgSVNCQURIVUdFV1JJVEVQVFIgZXhwb3J0ZWQKLTM0OCAgIDEgIDRkNWMgIEhNRU1DUFkgZXhwb3J0ZWQKLTM0OSAgIDEgIDRkZWMgIF9IUkVBRCBleHBvcnRlZAotMzUwICAgMSAgNGRmMSAgX0hXUklURSBleHBvcnRlZAotMzUxICAgMSAgNWU5MiAgQlVOTllfMzUxIGV4cG9ydGVkCi0zNTMgICAxICA4MzFmICBMU1RSQ1BZTiBleHBvcnRlZAotMzU0ICAgMSAgOWVlYiAgR0VUQVBQQ09NUEFURkxBR1MgZXhwb3J0ZWQKLTM1NSAgIDEgIDlmMmEgIEdFVFdJTkRFQlVHSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1NiAgIDEgIDlmMzYgIFNFVFdJTkRFQlVHSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwMyAgIDEgIDI5ZjEgIEs0MDMgZXhwb3J0ZWQKLTQwNCAgIDEgIDI5YWUgIEs0MDQgZXhwb3J0ZWQKZGlmZiAtLWdpdCBhL2V0Yy9semV4cGFuZC1vcmRpbmFscyBiL2V0Yy9semV4cGFuZC1vcmRpbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzZGE5NS4uMDAwMDAwMAotLS0gYS9ldGMvbHpleHBhbmQtb3JkaW5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0gIDEgICA0ICAwMTVjICBMWkNPUFkgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDIgICAyICAwMjYyICBMWk9QRU5GSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAzICAgMiAgMDAwMCAgTFpJTklUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA0ICAgMiAgMDJlZSAgTFpTRUVLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA1ICAgMiAgMDNkNiAgTFpSRUFEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA2ICAgMiAgMDZmMCAgTFpDTE9TRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNyAgIDQgIDAwMDAgIExaU1RBUlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDggICA0ICAwMTNhICBDT1BZTFpGSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA5ICAgNCAgMDBhNiAgTFpET05FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEwICAgMiAgMDFiYyAgR0VURVhQQU5ERUROQU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDExICAgMyAgMDAwMCAgV0VQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEyICAxMSAgMDM1ZSAgX19fRVhQT1JURURTVFVCIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQpkaWZmIC0tZ2l0IGEvZXRjL21tc3lzdGVtLW9yZGluYWxzIGIvZXRjL21tc3lzdGVtLW9yZGluYWxzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjBhMjY4Li4wMDAwMDAwCi0tLSBhL2V0Yy9tbXN5c3RlbS1vcmRpbmFscworKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0gIDEgICAyICAwMDE0ICBXRVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDIgICA0ICAwMDAwICBTTkRQTEFZU09VTkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDUgICAyICAwMmIwICBNTVNZU1RFTUdFVFZFUlNJT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDYgICA0ICAwMDI4ICBEUklWRVJQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDMwICAgMSAgMDMwYSAgT1VUUFVUREVCVUdTVFIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzEgICAxICAwM2FiICBEUklWRVJDQUxMQkFDSyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMiAgIDEgIDAzMTIgIFNUQUNLRU5URVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzMgICAxICAwMzcwICBTVEFDS0xFQVZFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM0ICAgMiAgMDQ4NCAgTU1EUlZJTlNUQUxMIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAxICAgOCAgMDA1ZCAgSk9ZR0VUTlVNREVWUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwMiAgIDggIDAwMWEgIEpPWUdFVERFVkNBUFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDMgICA4ICAwMDczICBKT1lHRVRQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDQgICA4ICAwMGI1ICBKT1lHRVRUSFJFU0hPTEQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDUgICA4ICAwMGVjICBKT1lSRUxFQVNFQ0FQVFVSRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwNiAgIDggIDAxM2UgIEpPWVNFVENBUFRVUkUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDcgICA4ICAwMjFkICBKT1lTRVRUSFJFU0hPTEQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDkgICA4ICAwMjUxICBKT1lTRVRDQUxJQlJBVElPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExMDAgICA0ICAwNTdlICBEUlZPUEVOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTEwMSAgIDQgIDA1ODMgIERSVkNMT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTEwMiAgIDQgIDA1OGQgIERSVlNFTkRNRVNTQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTEwMyAgIDQgIDA1ODggIERSVkdFVE1PRFVMRUhBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExMDQgICA0ICAwNTkyICBEUlZERUZEUklWRVJQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIxMCAgIDcgIDAyYTUgIE1NSU9PUEVOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIxMSAgIDcgIDA0NTcgIE1NSU9DTE9TRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMTIgICA3ICAwNGI0ICBNTUlPUkVBRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMTMgICA3ICAwNjJiICBNTUlPV1JJVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjE0ICAgNyAgMDdlOSAgTU1JT1NFRUsgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjE1ICAgNyAgMDkyOSAgTU1JT0dFVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjE2ICAgNyAgMDk5NiAgTU1JT1NFVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjE3ICAgNyAgMGE2OCAgTU1JT1NFVEJVRkZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMTggICA3ICAwY2Q4ICBNTUlPRkxVU0ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjE5ICAgNyAgMGRhNyAgTU1JT0FEVkFOQ0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjIwICAgNyAgMGVkMyAgTU1JT1NUUklOR1RPRk9VUkNDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIyMSAgIDcgIDBmNmUgIE1NSU9JTlNUQUxMSU9QUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIyMiAgIDcgIDEwNzMgIE1NSU9TRU5ETUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMjMgICA3ICAxMzYwICBNTUlPREVTQ0VORCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMjQgICA3ICAxNTYyICBNTUlPQVNDRU5EIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIyNSAgIDcgIDE2YTUgIE1NSU9DUkVBVEVDSFVOSyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMjYgICA3ICAwMWQyICBNTUlPUkVOQU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjAxICAgNiAgMDE1ZiAgTUlESU9VVEdFVE5VTURFVlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDIgICA2ICAwMTZhICBNSURJT1VUR0VUREVWQ0FQUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwMyAgIDYgIDAyNjYgIE1JRElPVVRHRVRFUlJPUlRFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDQgICA2ICAwMmE3ICBNSURJT1VUT1BFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwNSAgIDYgIDAzYzQgIE1JRElPVVRDTE9TRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwNiAgIDYgIDA0MTAgIE1JRElPVVRQUkVQQVJFSEVBREVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjA3ICAgNiAgMDQ4NSAgTUlESU9VVFVOUFJFUEFSRUhFQURFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwOCAgIDEgIDAxMjEgIE1JRElPVVRTSE9SVE1TRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwOSAgIDEgIDAxNTYgIE1JRElPVVRMT05HTVNHIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjEwICAgMSAgMDFiNCAgTUlESU9VVFJFU0VUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjExICAgNiAgMDFiNiAgTUlESU9VVEdFVFZPTFVNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxMiAgIDYgIDAxZjcgIE1JRElPVVRTRVRWT0xVTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTMgICA2ICAwNGZmICBNSURJT1VUQ0FDSEVQQVRDSEVTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE0ICAgNiAgMDU3MSAgTUlESU9VVENBQ0hFRFJVTVBBVENIRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTUgICA2ICAwYTVjICBNSURJT1VUR0VUSUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTYgICAxICAwMGViICBNSURJT1VUTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMSAgIDYgIDA1ZTMgIE1JRElJTkdFVE5VTURFVlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDIgICA2ICAwNjI1ICBNSURJSU5HRVRERVZDQVBTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzAzICAgNiAgMDY3MSAgTUlESUlOR0VURVJST1JURVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA0ICAgNiAgMDZiMiAgTUlESUlOT1BFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNSAgIDYgIDA3Y2YgIE1JRElJTkNMT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA2ICAgNiAgMDgxYiAgTUlESUlOUFJFUEFSRUhFQURFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNyAgIDYgIDA4OTAgIE1JRElJTlVOUFJFUEFSRUhFQURFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwOCAgIDYgIDA5MGEgIE1JRElJTkFEREJVRkZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwOSAgIDYgIDA5NzYgIE1JRElJTlNUQVJUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzEwICAgNiAgMDlhYSAgTUlESUlOU1RPUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMxMSAgIDYgIDA5ZGUgIE1JRElJTlJFU0VUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzEyICAgNiAgMGExMiAgTUlESUlOR0VUSUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMTMgICA2ICAwNWVlICBNSURJSU5NRVNTQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzUwICAgOCAgMDUzMSAgQVVYR0VUTlVNREVWUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1MSAgIDggIDA1M2MgIEFVWEdFVERFVkNBUFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNTIgICA4ICAwNTgyICBBVVhHRVRWT0xVTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNTMgICA4ICAwNWJkICBBVVhTRVRWT0xVTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNTQgICA4ICAwNGRmICBBVVhPVVRNRVNTQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAxICAgMyAgMDg2NiAgV0FWRU9VVEdFVE5VTURFVlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDIgICAzICAwOGE2ICBXQVZFT1VUR0VUREVWQ0FQUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwMyAgIDMgIDA5YTIgIFdBVkVPVVRHRVRFUlJPUlRFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDQgICAzICAwOWUzICBXQVZFT1VUT1BFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwNSAgIDMgIDBiODEgIFdBVkVPVVRDTE9TRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwNiAgIDMgIDBiYzggIFdBVkVPVVRQUkVQQVJFSEVBREVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDA3ICAgMyAgMGM1NCAgV0FWRU9VVFVOUFJFUEFSRUhFQURFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwOCAgIDMgIDBjZGQgIFdBVkVPVVRXUklURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwOSAgIDMgIDBkNGEgIFdBVkVPVVRQQVVTRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQxMCAgIDMgIDBkN2MgIFdBVkVPVVRSRVNUQVJUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDExICAgMyAgMGRhZSAgV0FWRU9VVFJFU0VUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDEyICAgMyAgMGUxMiAgV0FWRU9VVEdFVFBPU0lUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDEzICAgMyAgMGU2MiAgV0FWRU9VVEdFVFBJVENIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDE0ICAgMyAgMGViMCAgV0FWRU9VVFNFVFBJVENIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDE1ICAgMyAgMDhmMiAgV0FWRU9VVEdFVFZPTFVNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQxNiAgIDMgIDA5MzMgIFdBVkVPVVRTRVRWT0xVTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MTcgICAzICAwZWU0ICBXQVZFT1VUR0VUUExBWUJBQ0tSQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDE4ICAgMyAgMGYzMiAgV0FWRU9VVFNFVFBMQVlCQUNLUkFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQxOSAgIDMgIDBkZTAgIFdBVkVPVVRCUkVBS0xPT1AgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MjAgICAzICAxNGJmICBXQVZFT1VUR0VUSUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MjEgICAzICAwODcxICBXQVZFT1VUTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwMSAgIDMgIDBmNjYgIFdBVkVJTkdFVE5VTURFVlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDIgICAzICAwZmE2ICBXQVZFSU5HRVRERVZDQVBTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTAzICAgMyAgMGZmMiAgV0FWRUlOR0VURVJST1JURVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA0ICAgMyAgMTAzMyAgV0FWRUlOT1BFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwNSAgIDMgIDExZDEgIFdBVkVJTkNMT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA2ICAgMyAgMTIxOCAgV0FWRUlOUFJFUEFSRUhFQURFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwNyAgIDMgIDEyOWMgIFdBVkVJTlVOUFJFUEFSRUhFQURFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwOCAgIDMgIDEzMjUgIFdBVkVJTkFEREJVRkZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwOSAgIDMgIDEzOGYgIFdBVkVJTlNUQVJUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTEwICAgMyAgMTNjMSAgV0FWRUlOU1RPUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxMSAgIDMgIDEzZjMgIFdBVkVJTlJFU0VUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTEyICAgMyAgMTQyNSAgV0FWRUlOR0VUUE9TSVRJT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MTMgICAzICAxNDc1ICBXQVZFSU5HRVRJRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxNCAgIDMgIDBmNzEgIFdBVkVJTk1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MDEgICAxICAwMDAwICBUSU1FR0VUU1lTVEVNVElNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwMiAgIDEgIDAwMjkgIFRJTUVTRVRFVkVOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwMyAgIDEgIDAyOTIgIFRJTUVLSUxMRVZFTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MDQgICA4ICAwMDAwICBUSU1FR0VUREVWQ0FQUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwNSAgIDEgIDAyODggIFRJTUVCRUdJTlBFUklPRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwNiAgIDEgIDAyOGQgIFRJTUVFTkRQRVJJT0QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MDcgICAxICAwMjlhICBUSU1FR0VUVElNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcwMSAgIDUgIDA0YWYgIE1DSVNFTkRDT01NQU5EIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzAyICAgNSAgMTI1OCAgTUNJU0VORFNUUklORyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcwMyAgIDUgIDE1ODggIE1DSUdFVERFVklDRUlEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzA0ICAgNSAgMzk5NCAgTUNJUEFSU0VDT01NQU5EIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzA1ICAgNSAgMmQ0YyAgTUNJTE9BRENPTU1BTkRSRVNPVVJDRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcwNiAgIDUgIDEzNmYgIE1DSUdFVEVSUk9SU1RSSU5HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzA3ICAgNSAgMmExZCAgTUNJU0VURFJJVkVSREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcwOCAgIDUgIDI5ZDMgIE1DSUdFVERSSVZFUkRBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MTAgICA1ICAyYTZmICBNQ0lEUklWRVJZSUVMRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcxMSAgIDEgIDAyNzUgIE1DSURSSVZFUk5PVElGWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcxMiAgIDUgIDEyOTMgIE1DSUVYRUNVVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MTMgICA1ICAyZmI5ICBNQ0lGUkVFQ09NTUFORFJFU09VUkNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzE0ICAgNSAgMmFjZCAgTUNJU0VUWUlFTERQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzE1ICAgNSAgMTQ1NCAgTUNJR0VUREVWSUNFSURGUk9NRUxFTUVOVElEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzE2ICAgNSAgMmIzYyAgTUNJR0VUWUlFTERQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzE3ICAgNSAgMTVhNSAgTUNJR0VUQ1JFQVRPUlRBU0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi05MDAgICA0ICAwNWZhICBNTVRBU0tDUkVBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi05MDIgICA0ICAwNWJlICBNTVRBU0tCTE9DSyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTkwMyAgIDEgIDAyNjQgIE1NVEFTS1NJR05BTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTkwNCAgIDQgIDA1YjkgIE1NR0VUQ1VSUkVOVFRBU0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi05MDUgICA0ICAwNTk4ICBNTVRBU0tZSUVMRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKZGlmZiAtLWdpdCBhL2V0Yy9uZXRhcGkyMC1vcmRpbmFscyBiL2V0Yy9uZXRhcGkyMC1vcmRpbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2NjUxMS4uMDAwMDAwMAotLS0gYS9ldGMvbmV0YXBpMjAtb3JkaW5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotICAxICAgMyAgMDAwMCAgTkVUQUNDRVNTQUREIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAyICAgMyAgMDEyOCAgTkVUQUNDRVNTREVMIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAzICAgMyAgMDFlYSAgTkVUQUNDRVNTRU5VTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNCAgIDMgIDAzMTggIE5FVEFDQ0VTU0dFVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDUgICAzICAwNDJhICBORVRBQ0NFU1NTRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA2ICAgNCAgMDAzMCAgTkVUQUxFUlRSQUlTRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNyAgIDQgIDAwMDAgIE5FVEFMRVJUU1RBUlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDggICA0ICAwMDE4ICBORVRBTEVSVFNUT1AgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDkgIDEwICAwMGY0ICBORVRBVURJVENMRUFSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEwICAxMCAgMDI0YSAgTkVUQVVESVRPUEVOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDExICAxMCAgMDAwMCAgTkVUQVVESVRXUklURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMiAgIDMgIDAxMTAgIE5FVEFDQ0VTU0NIRUNLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEzICAxMiAgMDAwMCAgTkVUQklPU0NMT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE0ICAxMiAgMDAxOCAgTkVUQklPU0VOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTUgIDEyICAwMDMwICBORVRCSU9TR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNiAgMTIgIDAwNDggIE5FVEJJT1NPUEVOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE3ICAxMiAgMDA2MCAgTkVUQklPU1NVQk1JVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxOCAgIDcgIDAwMDAgIE5FVENIQVJERVZDT05UUk9MIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE5ICAgNyAgMDA1NiAgTkVUQ0hBUkRFVkVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjAgICA3ICAwMGYyICBORVRDSEFSREVWR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMSAgIDcgIDAxNmUgIE5FVENIQVJERVZRRU5VTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMiAgIDcgIDA0M2MgIE5FVENIQVJERVZRR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMyAgIDcgIDA0YjIgIE5FVENIQVJERVZRUFVSR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjQgICA3ICAwNTYyICBORVRDSEFSREVWUVNFVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjUgICA2ICAwMzMwICBORVRDT05GSUdHRVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjYgICA2ICAwMTUwICBORVRDT05GSUdHRVRBTEwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjcgIDE4ICAwMDAwICBORVRDT05ORUNUSU9ORU5VTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyOCAgIDEgIDAwYTggIFdFUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyOSAgMTAgIDAwMzAgIE5FVEVSUk9STE9HQ0xFQVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzAgIDEwICAwMWMwICBORVRFUlJPUkxPR09QRU4gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzEgIDEwICAwMDE4ICBORVRFUlJPUkxPR1dSSVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDMyICAxOCAgMDI1NiAgTkVURklMRUNMT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDMzICAxOCAgMDQ0YSAgTkVURklMRUVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzQgIDE4ICAwNTE2ICBORVRGSUxFR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNSAgIDMgIDA1ZjggIE5FVEdST1VQQUREIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM2ICAgMyAgMDY3ZSAgTkVUR1JPVVBBRERVU0VSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM3ICAgMyAgMDZkYyAgTkVUR1JPVVBERUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzggICAzICAwNzNhICBORVRHUk9VUERFTFVTRVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzkgICAzICAwNzk4ICBORVRHUk9VUEVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDAgICAzICAwODk0ICBORVRHUk9VUEdFVFVTRVJTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQzICAxMSAgMDFjYyAgTkVUTUVTU0FHRUxPR0ZJTEVHRVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDQgIDExICAwMzM4ICBORVRNRVNTQUdFTE9HRklMRVNFVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0NSAgMTEgIDA3MTggIE5FVE1FU1NBR0VOQU1FQUREIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQ2ICAxMSAgMDg0NCAgTkVUTUVTU0FHRU5BTUVERUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDcgIDExICAwOTZjICBORVRNRVNTQUdFTkFNRUVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDggIDExICAwZDJhICBORVRNRVNTQUdFTkFNRUZXRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0OSAgMTEgIDBiMDAgIE5FVE1FU1NBR0VOQU1FR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1MCAgMTEgIDBkN2EgIE5FVE1FU1NBR0VOQU1FVU5GV0QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTEgIDEzICAwMDAwICBORVRQUk9GSUxFTE9BRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1MiAgMTMgIDAzN2UgIE5FVFBST0ZJTEVTQVZFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUzICAxOCAgMGI5OCAgTkVUU0VSVkVSQURNSU5DT01NQU5EIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU0ICAxOCAgMDBiOCAgTkVUU0VSVkVSRElTS0VOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTUgIDE4ICAwYzYyICBORVRTRVJWRVJHRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU2ICAxOCAgMGNmMiAgTkVUU0VSVkVSU0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1NyAgMTkgIDAxMzQgIE5FVFNFUlZJQ0VDT05UUk9MIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU4ICAxOSAgMDJmMCAgTkVUU0VSVklDRUVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTkgIDE5ICAwNDRhICBORVRTRVJWSUNFSU5TVEFMTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2MCAgMTkgIDAxMWMgIE5FVFNFUlZJQ0VTVEFUVVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjEgIDE4ICAwNjc2ICBORVRTRVNTSU9OREVMIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYyICAxOCAgMDVjNCAgTkVUU0VTU0lPTkVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjMgIDE4ICAwNmRjICBORVRTRVNTSU9OR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2NCAgMTggIDA3OTggIE5FVFNIQVJFQUREIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY1ICAxOCAgMDk2OCAgTkVUU0hBUkVDSEVDSyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2NiAgMTggIDA4MmEgIE5FVFNIQVJFREVMIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY3ICAxOCAgMDlkNiAgTkVUU0hBUkVFTlVNIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY4ICAxOCAgMGFiNiAgTkVUU0hBUkVHRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY5ICAxOCAgMDhhMiAgTkVUU0hBUkVTRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDcwICAxOCAgMGQ4OCAgTkVUU1RBVElTVElDU0NMRUFSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDcxICAxOCAgMGRlMCAgTkVUU1RBVElTVElDU0dFVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3MiAgMTYgIDA2ZjIgIE5FVFJFTU9URVRPRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3MyAgMjEgIDAwMDAgIE5FVFVTRUFERCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3NCAgMjEgIDAzMmEgIE5FVFVTRURFTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3NSAgMjEgIDA1MDIgIE5FVFVTRUVOVU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzYgIDIxICAwNjY0ICBORVRVU0VHRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc3ICAgMyAgMGFiOCAgTkVUVVNFUkFERCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3OCAgIDMgIDBjMjYgIE5FVFVTRVJERUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzkgICAzICAwYzg0ICBORVRVU0VSRU5VTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MCAgIDMgIDBmOWEgIE5FVFVTRVJHRVRHUk9VUFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gODEgICAzICAwZWY0ICBORVRVU0VSR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MiAgIDMgIDExMzIgIE5FVFVTRVJQQVNTV09SRFNFVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MyAgIDMgIDBkMmMgIE5FVFVTRVJTRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDg0ICAgOSAgMDg1OCAgTkVUV0tTVEFHRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDg1ICAgOSAgMGEyMiAgTkVUV0tTVEFTRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDg2ICAgOSAgMDAwMCAgTkVUV0tTVEFTRVRVSUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gOTEgIDE2ICAwMzgwICBORVRSRU1PVEVNT1ZFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDkyICAxNiAgMDAwMCAgTkVUUkVNT1RFQ09QWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA5MyAgMTYgIDAzNjggIE5FVFJFTU9URUVYRUMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDUgICAzICAxNTcwICBORVRVU0VSVkFMSURBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTYgIDE5ICAwMDAwICBORVRTRVJWSUNFR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExNyAgIDcgIDA1MGEgIE5FVENIQVJERVZRUFVSR0VTRUxGIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTcyICAgMyAgMDUwNiAgTkVUQUNDRVNTR0VUVVNFUlBFUk1TIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTc0ICAgNyAgMDIyNiAgTkVUSEFORExFR0VUSU5GTyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE3NSAgIDcgIDAzMjYgIE5FVEhBTkRMRVNFVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNzYgICAzICAwOTc0ICBORVRHUk9VUFNFVFVTRVJTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTc3ICAgMyAgMDgxNiAgTkVUR1JPVVBHRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTc4ICAgMyAgMDhmZSAgTkVUR1JPVVBTRVRJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTc5ICAgMyAgMTQwNCAgTkVUVVNFUlNFVEdST1VQUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE4MiAgIDMgIDE1ODggIE5FVFVTRVJWQUxJREFURTIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xODQgICAzICAxMDA0ICBORVRVU0VSTU9EQUxTR0VUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTg1ICAgMyAgMTBhMiAgTkVUVVNFUk1PREFMU1NFVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE4NiAgIDMgIDBkMTQgIE5FVFVTRVJJTklUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTg5ICAyNiAgMDAwMCAgTkVUR0VURENOQU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTk2ICAgNiAgMDFlMCAgTkVUQ09ORklHR0VUMiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE5NyAgIDYgIDAwMDAgIE5FVENPTkZJR0dFVEFMTDIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTggIDE4ICAwZTVlICBORVRTVEFUSVNUSUNTR0VUMiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE5OSAgMTAgIDAyZjQgIE5FVEVSUk9STE9HUkVBRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwMCAgMTAgIDA0YjIgIE5FVEFVRElUUkVBRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwMSAgMTggIDAyYWUgIE5FVEZJTEVFTlVNMiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI1OSAgMTcgIDAwMDAgIE5FVFVTRVJSRVNUUklDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI2NiAgMjYgIDA2ZGMgIE5FVExPR09ORU5VTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI3NyAgIDkgIDAyN2MgIE5FVFdLU1RBU0VUVUlEMiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI4MCAgMTggIDBmOWUgIE5FVEZJTEVHRVRJTkZPMiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI4MiAgMTggIDBmNDAgIE5FVEZJTEVDTE9TRTIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yOTkgIDI1ICAwYjM0ICBJX05FVFBBVEhUWVBFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzAwICAyNSAgMDAwMCAgSV9ORVRQQVRIQ0FOT05JQ0FMSVpFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzAxICAyNSAgMDkzMiAgSV9ORVRQQVRIQ09NUEFSRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMiAgMjUgIDFhZmUgIElfTkVUTkFNRVZBTElEQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzAzICAyNSAgMTczZSAgSV9ORVROQU1FQ0FOT05JQ0FMSVpFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA0ICAyNSAgMTk2ZSAgSV9ORVROQU1FQ09NUEFSRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNSAgMjUgIDFjZWUgIElfTkVUTElTVENBTk9OSUNBTElaRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNiAgMjUgIDIyYzIgIElfTkVUTElTVFRSQVZFUlNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTAxICAgOCAgMDAwMCAgRE9TREVMRVRFTUFJTFNMT1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDIgICA4ICAwMDcyICBET1NNQUlMU0xPVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDMgICA4ICAwMGVjICBET1NNQUtFTUFJTFNMT1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDQgICA4ICAwMzIwICBET1NQRUVLTUFJTFNMT1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjMgICA4ICAwNDU0ICBET1NSRUFETUFJTFNMT1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjQgICA4ICAwNThhICBET1NXUklURU1BSUxTTE9UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTI1ICAxMSAgMDAwMCAgTkVUTUVTU0FHRUJVRkZFUlNFTkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjYgIDExICAwZTFlICBORVRNRVNTQUdFRklMRVNFTkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjcgICA1ICAwMDAwICBORVRTRVJWRVJFTlVNIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTI4ICAgNSAgMDEzYSAgTkVUU0VSVkVSRU5VTTIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjkgIDIwICAwMDAwICBORVRTUEVDSUFMU01CIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTMwICAgMiAgMDAxMCAgRE9TTUFLRU5NUElQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUzMSAgIDIgIDAwNGMgIERPU0NPTk5FQ1ROTVBJUEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MzIgICAyICAwMDJlICBET1NESVNDT05ORUNUTk1QSVBFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTMzICAgMiAgMDA2YSAgRE9TU0VUTk1QSEFORFNUQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTM0ICAgMiAgMDEwYSAgRE9TV0FJVE5NUElQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUzNSAgIDIgIDAxZDIgIERPU1RSQU5TQUNUTk1QSVBFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTM2ICAgMiAgMDJlNSAgRE9TUU5NUEhBTkRTVEFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUzNyAgIDIgIDAzODggIERPU1FOTVBJUEVJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTM4ICAgMiAgMDQ0ZCAgRE9TUEVFS05NUElQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUzOSAgIDIgIDA1N2QgIERPU0NBTExOTVBJUEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01NDAgICAyICAwNmNmICBET1NSQVdSRUFETk1QSVBFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTQxICAgMiAgMDdiNiAgRE9TUkFXV1JJVEVOTVBJUEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01NDIgICAyICAwYjRmICBET1NSRUFEQVNZTkNOTVBJUEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01NDMgICAyICAwZDczICBET1NXUklURUFTWU5DTk1QSVBFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQpkaWZmIC0tZ2l0IGEvZXRjL29sZWNsaS1vcmRpbmFscyBiL2V0Yy9vbGVjbGktb3JkaW5hbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MzhmYTEuLjAwMDAwMDAKLS0tIGEvZXRjL29sZWNsaS1vcmRpbmFscworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0gIDEgICAxICAwMDAwICBXRVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDIgICAzICAwMDRlICBPTEVERUxFVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDMgICAzICAwMGM2ICBPTEVTQVZFVE9TVFJFQU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDQgICAzICAwMTIyICBPTEVMT0FERlJPTVNUUkVBTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNiAgIDMgIDA0MDAgIE9MRUNMT05FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA3ICAgMyAgMDRlYyAgT0xFQ09QWUZST01MSU5LIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA4ICAgMyAgMDYwNiAgT0xFRVFVQUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDkgICAzICAwNjc0ICBPTEVRVUVSWUxJTktGUk9NQ0xJUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMCAgIDMgIDA2YTAgIE9MRVFVRVJZQ1JFQVRFRlJPTUNMSVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTEgICAzICAwNmNjICBPTEVDUkVBVEVMSU5LRlJPTUNMSVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTIgICAzICAwOGEyICBPTEVDUkVBVEVGUk9NQ0xJUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMyAgIDMgIDBiNTIgIE9MRUNPUFlUT0NMSVBCT0FSRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNCAgIDMgIDFkNDggIE9MRVFVRVJZVFlQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNSAgIDMgIDBiOGUgIE9MRVNFVEhPU1ROQU1FUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNiAgIDMgIDBjMDQgIE9MRVNFVFRBUkdFVERFVklDRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNyAgIDMgIDBjODQgIE9MRVNFVEJPVU5EUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxOCAgIDMgIDBjZTAgIE9MRVFVRVJZQk9VTkRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE5ICAgMyAgMGRhMCAgT0xFRFJBVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMCAgIDMgIDBlMjQgIE9MRVFVRVJZT1BFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMSAgIDMgIDBlNjAgIE9MRUFDVElWQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIyICAgMyAgMGVlYSAgT0xFVVBEQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIzICAgMyAgMGYyNiAgT0xFUkVDT05ORUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI0ICAgMyAgMGY2MiAgT0xFR0VUTElOS1VQREFURU9QVElPTlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjUgICAzICAwZmJlICBPTEVTRVRMSU5LVVBEQVRFT1BUSU9OUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNiAgIDMgIDBmZmMgIE9MRUVOVU1GT1JNQVRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI3ICAgMyAgMGVhZSAgT0xFQ0xPU0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjggICAzICAxMDdlICBPTEVHRVREQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI5ICAgMyAgMTBkYyAgT0xFU0VUREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMCAgIDMgIDAwMTAgIE9MRVFVRVJZUFJPVE9DT0wgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzEgICAzICAxMTFlICBPTEVRVUVSWU9VVE9GREFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMiAgIDMgIDExNWEgIE9MRU9CSkVDVENPTlZFUlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzMgICAzICAxMjFhICBPTEVDUkVBVEVGUk9NVEVNUExBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzQgICAzICAxM2I0ICBPTEVDUkVBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzUgICAzICAxYmE2ICBPTEVRVUVSWVJFTEVBU0VTVEFUVVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzYgICAzICAxYzA0ICBPTEVRVUVSWVJFTEVBU0VFUlJPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNyAgIDMgIDFjNDAgIE9MRVFVRVJZUkVMRUFTRU1FVEhPRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzOCAgIDMgIDE2ZmEgIE9MRUNSRUFURUZST01GSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM5ICAgMyAgMTkwYSAgT0xFQ1JFQVRFTElOS0ZST01GSUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQwICAgMyAgMDA4YSAgT0xFUkVMRUFTRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0MSAgIDIgIDA5M2UgIE9MRVJFR0lTVEVSQ0xJRU5URE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQyICAgMiAgMGE5ZSAgT0xFUkVWT0tFQ0xJRU5URE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQzICAgMiAgMGJiNiAgT0xFUkVOQU1FQ0xJRU5URE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQ0ICAgMiAgMGM4ZSAgT0xFUkVWRVJUQ0xJRU5URE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQ1ICAgMiAgMGNjOCAgT0xFU0FWRURDTElFTlRET0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDYgICAzICAxYzdjICBPTEVSRU5BTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDcgICAyICAwY2Y2ICBPTEVFTlVNT0JKRUNUUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0OCAgIDMgIDFkMDAgIE9MRVFVRVJZTkFNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0OSAgIDMgIDBjNDIgIE9MRVNFVENPTE9SU0NIRU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUwICAgMyAgMTAzNCAgT0xFUkVRVUVTVERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTQgICA0ICAwMDAwICBPTEVMT0NLU0VSVkVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU1ICAgNCAgMDI1YSAgT0xFVU5MT0NLU0VSVkVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU2ICAgMyAgMGQzYyAgT0xFUVVFUllTSVpFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU3ICAgMyAgMWNiZSAgT0xFRVhFQ1VURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1OCAgIDMgIDE1MmUgIE9MRUNSRUFURUlOVklTSUJMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1OSAgIDMgIDFkYTQgIE9MRVFVRVJZQ0xJRU5UVkVSU0lPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2MCAgIDMgIDQ2ZDQgIE9MRUlTRENNRVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAwICAgNCAgMGMyOCAgRE9DV05EUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwMSAgIDQgIDBkMmMgIFNSVlJXTkRQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAyICAxNCAgMDgzOCAgTUZDQUxMQkFDS0ZVTkMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTAgICA1ICAwMDAwICBERUZMT0FERlJPTVNUUkVBTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExMSAgIDUgIDAwZmUgIERFRkNSRUFURUZST01DTElQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTEyICAgNSAgMDE4MCAgREVGQ1JFQVRFTElOS0ZST01DTElQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTEzICAgNSAgMDFiZSAgREVGQ1JFQVRFRlJPTVRFTVBMQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTE0ICAgNSAgMDFmZSAgREVGQ1JFQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTE1ICAgNSAgMDIzZSAgREVGQ1JFQVRFRlJPTUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTYgICA1ICAwMjhlICBERUZDUkVBVEVMSU5LRlJPTUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTcgICA1ICAwMmUwICBERUZDUkVBVEVJTlZJU0lCTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDAgICA0ICAwNGUwICBMRVJFTEVBU0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDEgICA0ICAxZTUyICBMRVNIT1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDIgICAzICAyNTA4ICBMRUdFVERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDMgICA0ICAzYTU0ICBMRVNFVERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDQgICA0ICAzN2VlICBMRVNFVEhPU1ROQU1FUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwNSAgIDQgIDM4NmUgIExFU0VUVEFSR0VUREVWSUNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjA2ICAgNCAgMzkyMiAgTEVTRVRCT1VORFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDcgICAzICAyN2JlICBMRVNBVkVUT1NUUkVBTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwOCAgIDMgIDFmZGUgIExFQ0xPTkUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDkgICA0ICAwNTJhICBMRUNPUFlGUk9NTElOSyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxMCAgIDYgIDAxMzQgIExFRVFVQUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTEgICAzICAyMjdhICBMRUNPUFkgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTIgICAzICAyZTAwICBMRVFVRVJZVFlQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxMyAgIDMgIDIzNzAgIExFUVVFUllCT1VORFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTQgICAzICAyM2ZjICBMRURSQVcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTUgICA0ICAyMTA4ICBMRVFVRVJZT1BFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxNiAgIDQgIDIxOWEgIExFQUNUSVZBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTggICA0ICAyMjAwICBMRVVQREFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxOSAgIDQgIDJjYjQgIExFUkVDT05ORUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjIwICAgMyAgMjQ1NCAgTEVFTlVNRk9STUFUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjIxICAgNiAgMDBjOCAgTEVRVUVSWVBST1RPQ09MIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjIyICAgMyAgMjYzOCAgTEVRVUVSWU9VVE9GREFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyMyAgIDYgIDAxYzIgIExFT0JKRUNUQ09OVkVSVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyNCAgIDQgIDA3ZmEgIExFQ0hBTkdFREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyNSAgIDQgIDJjMTYgIExFQ0xPU0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMjYgICAzICAyZTcyICBMRUdFVFVQREFURU9QVElPTlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMjcgICA0ICAzMzdhICBMRVNFVFVQREFURU9QVElPTlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMjggICA0ICA0YTQ0ICBMRUVYRUNVVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMjkgICA2ICAwMDAwICBMRU9CSkVDVExPTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMzAgICA0ICAzMjJjICBMRUNSRUFURUlOVklTSUJMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMCAgIDkgIDAwMDAgIE1GUkVMRUFTRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMSAgIDkgIDAyNTggIE1GR0VUREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwMiAgIDMgIDQyZjIgIE1GU0FWRVRPU1RSRUFNIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzAzICAgOSAgMDA4MiAgTUZDTE9ORSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwNCAgIDkgIDAxNzQgIE1GRVFVQUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDUgICA5ICAwMWYwICBNRkNPUFkgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDcgICAzICA0NDZhICBNRlFVRVJZQk9VTkRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA4ICAxNCAgMDVjYyAgTUZEUkFXIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA5ICAgOSAgMDIzNCAgTUZFTlVNRk9STUFUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzEwICAgOSAgMDMwMiAgTUZDSEFOR0VEQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAwICAxMSAgMDAwMCAgQk1SRUxFQVNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAxICAxMSAgMDI1NCAgQk1HRVREQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAyICAgMyAgNGI5MiAgQk1TQVZFVE9TVFJFQU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDMgIDExICAwMDZlICBCTUNMT05FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDA0ICAxMSAgMDBlNCAgQk1FUVVBTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwNSAgIDMgIDRjOGMgIEJNQ09QWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQwNyAgIDMgIDRjZTAgIEJNUVVFUllCT1VORFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDggIDE0ICAwMDAwICBCTURSQVcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDkgIDExICAwMjMwICBCTUVOVU1GT1JNQVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MTAgICAzICA1MDA0ICBCTUNIQU5HRURBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDAgIDEyICAwMDAwICBESUJSRUxFQVNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTAxICAxMiAgMDFlYSAgRElCR0VUREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwMiAgIDMgIDUzNmMgIERJQlNBVkVUT1NUUkVBTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwMyAgMTIgIDAwNmUgIERJQkNMT05FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA0ICAxMiAgMDBlNCAgRElCRVFVQUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDUgIDEyICAwMTFjICBESUJDT1BZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA3ICAxMiAgMDE2YyAgRElCUVVFUllCT1VORFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDggIDE0ICAwMmYyICBESUJEUkFXIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA5ICAxMiAgMDFjNiAgRElCRU5VTUZPUk1BVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxMCAgMTIgIDAyOGEgIERJQkNIQU5HRURBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MDAgIDEwICAwMDAwICBHRU5SRUxFQVNFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNjAxICAxMCAgMDQ5ZSAgR0VOR0VUREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwMiAgMTAgIDA0MzggIEdFTlNFVERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MDMgICAzICA0NzUwICBHRU5TQVZFVE9TVFJFQU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MDQgIDEwICAwMDgyICBHRU5DTE9ORSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwNSAgMTAgIDAxMmUgIEdFTkVRVUFMIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNjA2ICAxMCAgMDE2NCAgR0VOQ09QWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYwOCAgIDMgIDRiNjAgIEdFTlFVRVJZQk9VTkRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNjA5ICAxNCAgMDViMiAgR0VORFJBVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTYxMCAgMTAgIDA0ZTAgIEdFTkVOVU1GT1JNQVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi02MTEgIDEwICAwMjIyICBHRU5DSEFOR0VEQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzAxICAxMyAgMDAzNCAgRVJSU0hPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcwMiAgMTMgIDAxODYgIEVSUlNFVERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MDMgIDEzICAwMDgyICBFUlJTRVRIT1NUTkFNRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MDQgIDEzICAwMDljICBFUlJTRVRUQVJHRVRERVZJQ0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MDUgIDEzICAwMGQwICBFUlJTRVRCT1VORFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MDYgIDEzICAwMDY4ICBFUlJDT1BZRlJPTUxJTksgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MDcgIDEzICAwMGVhICBFUlJRVUVSWU9QRU4gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MDggIDEzICAwMTA0ICBFUlJBQ1RJVkFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcwOSAgMTMgIDAxMzggIEVSUkNMT1NFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzEwICAxMyAgMDE1MiAgRVJSVVBEQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzExICAxMyAgMDE2YyAgRVJSUkVDT05ORUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzEyICAxMyAgMDIyMiAgRVJSUVVFUllQUk9UT0NPTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcxMyAgMTMgIDAxYmEgIEVSUlFVRVJZT1VUT0ZEQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzE0ICAxMyAgMDFkNCAgRVJST0JKRUNUQ09OVkVSVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcxNSAgMTMgIDAxZWUgIEVSUkdFVFVQREFURU9QVElPTlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi03MTYgIDEzICAwMjA4ICBFUlJTRVRVUERBVEVPUFRJT05TIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNzE3ICAxMyAgMDI1NiAgRVJSRVhFQ1VURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTcxOCAgMTMgIDAyNzAgIEVSUk9CSkVDVExPTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi04MDAgICA3ICAwMDAwICBQQkxPQURGUk9NU1RSRUFNIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotODAxICAgNyAgMDBhYyAgUEJDUkVBVEVGUk9NQ0xJUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTgwMiAgIDcgIDAxN2EgIFBCQ1JFQVRFTElOS0ZST01DTElQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotODAzICAgNyAgMDIxMiAgUEJDUkVBVEVGUk9NVEVNUExBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi04MDQgICA3ICAwMmE4ICBQQkNSRUFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTgwNSAgIDcgIDA2ZjQgIFBCRFJBVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTgwNiAgIDcgIDA2MjYgIFBCUVVFUllCT1VORFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi04MDcgICA3ICAwODE4ICBQQkNPUFlUT0NMSVBCT0FSRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTgwOCAgIDcgIDAzM2UgIFBCQ1JFQVRFRlJPTUZJTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi04MDkgICA3ICAwM2UwICBQQkNSRUFURUxJTktGUk9NRklMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTgxMCAgIDcgIDA3NjggIFBCRU5VTUZPUk1BVFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi04MTEgICA3ICAwN2E4ICBQQkdFVERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi04MTIgICA3ICAwNDkyICBQQkNSRUFURUlOVklTSUJMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTkxMCAgIDMgIDNlNTAgIE9CSlFVRVJZTkFNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTkxMSAgIDMgIDNmMDYgIE9CSlJFTkFNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTkxMiAgIDMgIDQxMGUgIE9CSlFVRVJZVFlQRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTkxMyAgIDMgIDQxNTQgIE9CSlFVRVJZU0laRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTk1MCAgIDggIDA0NTYgIENPTk5FQ1RETEdQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotOTUxICAgOCAgMDAwMCAgU0VUTkVUTkFNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTk1MiAgIDggIDAxMWEgIENIRUNLTkVURFJJVkUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi05NTMgICA4ICAwMjVjICBTRVRORVhUTkVURFJJVkUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi05NTQgICA4ICAwNjk2ICBHRVRUQVNLVklTSUJMRVdJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKZGlmZiAtLWdpdCBhL2V0Yy9vbGVzdnItb3JkaW5hbHMgYi9ldGMvb2xlc3ZyLW9yZGluYWxzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmRlYjZiLi4wMDAwMDAwCi0tLSBhL2V0Yy9vbGVzdnItb3JkaW5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0gIDEgICAxICAwMDAwICBXRVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDIgICAzICAwMzZlICBPTEVSRUdJU1RFUlNFUlZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgMyAgIDMgIDA1ZjAgIE9MRVJFVk9LRVNFUlZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNCAgIDMgIDNkNDYgIE9MRUJMT0NLU0VSVkVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA1ICAgMyAgM2Q5MiAgT0xFVU5CTE9DS1NFUlZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNiAgIDMgIDExMDggIE9MRVJFR0lTVEVSU0VSVkVSRE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA3ICAgMyAgMTJkYyAgT0xFUkVWT0tFU0VSVkVSRE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA4ICAgMyAgMTNhMiAgT0xFUkVOQU1FU0VSVkVSRE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA5ICAgMyAgMTUyOCAgT0xFUkVWRVJUU0VSVkVSRE9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEwICAgMyAgMTRiYSAgT0xFU0FWRURTRVJWRVJET0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTEgICAzICAyMTQwICBPTEVSRVZPS0VPQkpFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTIgICAzICAwMzU0ICBPTEVRVUVSWVNFUlZFUlZFUlNJT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjEgICAzICAwN2EyICBTUlZSV05EUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMiAgIDMgIDE3MjggIERPQ1dORFBST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjMgICAzICAyM2IyICBJVEVNV05EUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNCAgIDMgIDJkM2MgIFNFTkREQVRBTVNHIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI1ICAgMyAgMjJhYyAgRklORElURU1XTkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjYgICAzICAyYTVjICBJVEVNQ0FMTEJBQ0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjcgICAzICAwNzUyICBURVJNSU5BVEVDTElFTlRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI4ICAgMyAgMTU1NCAgVEVSTUlOQVRFRE9DQ0xJRU5UUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyOSAgIDMgIDIyMmUgIERFTEVURUNMSUVOVElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzAgICAzICAyY2JjICBTRU5EUkVOQU1FTVNHIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDMxICAgMyAgMmM1ZSAgRU5VTUZPUlRFUk1JTkFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKZGlmZiAtLWdpdCBhL2V0Yy9zaGVsbC1vcmRpbmFscyBiL2V0Yy9zaGVsbC1vcmRpbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyNjEzOC4uMDAwMDAwMAotLS0gYS9ldGMvc2hlbGwtb3JkaW5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0gIDEgICAyICAxNWNjICBSRUdPUEVOS0VZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAyICAgMiAgMTVmYSAgUkVHQ1JFQVRFS0VZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAzICAgMiAgMTY3MCAgUkVHQ0xPU0VLRVkgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDQgICAyICAxNjI4ICBSRUdERUxFVEVLRVkgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDUgICAyICAxNmY0ICBSRUdTRVRWQUxVRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNiAgIDIgIDE2OGUgIFJFR1FVRVJZVkFMVUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDcgICAyICAxNGRjICBSRUdFTlVNS0VZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA4ICAgNyAgMDAwMCAgV0VQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICA5ICAgNiAgMDA1MiAgRFJBR0FDQ0VQVEZJTEVTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDExICAgNiAgMDA5NCAgRFJBR1FVRVJZRklMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMiAgIDYgIDAxNDIgIERSQUdGSU5JU0ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTMgICA2ICAwMDAwICBEUkFHUVVFUllQT0lOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMCAgIDQgIDExMGEgIFNIRUxMRVhFQ1VURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMSAgIDQgIDExNTQgIEZJTkRFWEVDVVRBQkxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDIyICAgOSAgMDAwMCAgU0hFTExBQk9VVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMiAgIDkgIDA4MjkgIFdDSSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMyAgIDkgIDAxMzYgIEFCT1VURExHUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzNCAgMTAgIDAyMWEgIEVYVFJBQ1RJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM2ICAxMCAgMDhkYyAgRVhUUkFDVEFTU09DSUFURURJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM3ICAgNSAgMDBhZSAgRE9FTlZJUk9OTUVOVFNVQlNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM4ICAgNSAgMDAwMCAgRklOREVOVklST05NRU5UU1RSSU5HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM5ICAxMCAgMDI2ZSAgSU5URVJOQUxFWFRSQUNUSUNPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwMCAgIDQgIDA1NTAgIEhFUkVUSEFSQkVUWUdBUlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDEgICA4ICAwMTBlICBGSU5ERVhFRExHUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwMiAgIDQgIDEyOGMgIFJFR0lTVEVSU0hFTExIT09LIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAzICAgNCAgMTFjYSAgU0hFTExIT09LUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKZGlmZiAtLWdpdCBhL2V0Yy90b29saGVscC1vcmRpbmFscyBiL2V0Yy90b29saGVscC1vcmRpbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjExODUxOS4uMDAwMDAwMAotLS0gYS9ldGMvdG9vbGhlbHAtb3JkaW5hbHMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0gIDEgICAxICAwMThhICBXRVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTAgICAxICAwNTdiICBHTE9CQUxIQU5ETEVUT1NFTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1MSAgIDEgIDAzMTggIEdMT0JBTEZJUlNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUyICAgMSAgMDM5OSAgR0xPQkFMTkVYVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1MyAgIDEgIDAyYTIgIEdMT0JBTElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTQgICAxICAwNDE3ICBHTE9CQUxFTlRSWUhBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1NSAgIDEgIDA0YTkgIEdMT0JBTEVOVFJZTU9EVUxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU2ICAgMSAgMDkwZSAgTE9DQUxJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU3ICAgMSAgMDk1ZSAgTE9DQUxGSVJTVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1OCAgIDEgIDA5ZTkgIExPQ0FMTkVYVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1OSAgIDEgIDBhOTAgIE1PRFVMRUZJUlNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYwICAgMSAgMGFkOSAgTU9EVUxFTkVYVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2MSAgIDEgIDBiMTUgIE1PRFVMRUZJTkROQU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDYyICAgMSAgMGI4YyAgTU9EVUxFRklOREhBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2MyAgIDEgIDBjYWEgIFRBU0tGSVJTVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2NCAgIDEgIDBjZWQgIFRBU0tORVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY1ICAgMSAgMGQyZSAgVEFTS0ZJTkRIQU5ETEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjYgICAxICAwZjFjICBTVEFDS1RSQUNFRklSU1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjcgICAxICAwZjY3ICBTVEFDS1RSQUNFQ1NJUEZJUlNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY4ICAgMSAgMGZjYSAgU1RBQ0tUUkFDRU5FWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjkgICAxICAyOGIwICBDTEFTU0ZJUlNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDcwICAgMSAgMjkyNSAgQ0xBU1NORVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDcxICAgMSAgMTFjZSAgU1lTVEVNSEVBUElORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzIgICAxICAxM2Y0ICBNRU1NQU5JTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDczICAgMSAgMWI3MiAgTk9USUZZUkVHSVNURVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzQgICAxICAxYzI5ICBOT1RJRllVTlJFR0lTVEVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc1ICAgMSAgMjA2MCAgSU5URVJSVVBUUkVHSVNURVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzYgICAxICAyMTExICBJTlRFUlJVUFRVTlJFR0lTVEVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc3ICAgMSAgMjZlYSAgVEVSTUlOQVRFQVBQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc4ICAgMSAgMjljNCAgTUVNT1JZUkVBRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3OSAgIDEgIDJiNmMgIE1FTU9SWVdSSVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDgwICAgMSAgMmRhZSAgVElNRVJDT1VOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MSAgIDEgIDBkNjggIFRBU0tTRVRDU0lQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDgyICAgMSAgMGQ5NyAgVEFTS0dFVENTSVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gODMgICAxICAwZGMwICBUQVNLU1dJVENIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQpkaWZmIC0tZ2l0IGEvZXRjL3VzZXItb3JkaW5hbHMgYi9ldGMvdXNlci1vcmRpbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmODFiYS4uMDAwMDAwMAotLS0gYS9ldGMvdXNlci1vcmRpbmFscworKysgL2Rldi9udWxsCkBAIC0xLDQxMyArMCwwIEBACi0gIDEgICAxICBhYjVkICBNRVNTQUdFQk9YIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotICAyICAgMyAgMDA1OSAgT0xERVhJVFdJTkRPV1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDMgICA1ICAwMTY1ICBFTkFCTEVPRU1MQVlFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNCAgIDUgIDAxYTIgIERJU0FCTEVPRU1MQVlFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgNSAgIDUgIDAzYTIgIElOSVRBUFAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDYgICAxICA4MWQ0ICBQT1NUUVVJVE1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gIDcgICA1ICAwMzAzICBFWElUV0lORE9XUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAgOCAgIDMgIDAyMzIgIFdFUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxMCAgIDEgIGE4ZTggIFNFVFRJTUVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDExICAgMSAgNzQ0YyAgQkVBUjExIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEyICAgMSAgYTkwNSAgS0lMTFRJTUVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDEzICAgMSAgNzI5ZiAgR0VUVElDS0NPVU5UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE0ICAgMSAgNzQzOSAgR0VUVElNRVJSRVNPTFVUSU9OIGV4cG9ydGVkCi0gMTUgICAxICA3MjlmICBHRVRDVVJSRU5UVElNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAxNiAgIDEgIGFiYzUgIENMSVBDVVJTT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTcgICAxICBhYmFiICBHRVRDVVJTT1JQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMTggICAxICBhOGQ0ICBTRVRDQVBUVVJFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDE5ICAgMSAgMjhiZCAgUkVMRUFTRUNBUFRVUkUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjAgICAxICA4MTYxICBTRVRET1VCTEVDTElDS1RJTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjEgICAxICA4MTcxICBHRVRET1VCTEVDTElDS1RJTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjIgICAxICBhODc1ICBTRVRGT0NVUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyMyAgIDEgIDgxODMgIEdFVEZPQ1VTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI0ICAxMyAgMjRlNyAgUkVNT1ZFUFJPUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAyNSAgIDEgIDFjOTUgIEdFVFBST1AgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjYgIDEzICAyNGNhICBTRVRQUk9QIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI3ICAxMyAgMjUwNCAgRU5VTVBST1BTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDI4ICAgMSAgMTg3NCAgQ0xJRU5UVE9TQ1JFRU4gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMjkgICAxICAxODllICBTQ1JFRU5UT0NMSUVOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMCAgIDEgIDcxM2MgIFdJTkRPV0ZST01QT0lOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMSAgIDEgIDE5MmQgIElTSUNPTklDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDMyICAgMSAgMTgyNSAgR0VUV0lORE9XUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzMyAgIDEgIDE4MjggIEdFVENMSUVOVFJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzQgICAxICBhOTE5ICBFTkFCTEVXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzUgICAxICAxOTEyICBJU1dJTkRPV0VOQUJMRUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzYgICAxICBhYjI1ICBHRVRXSU5ET1dURVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDM3ICAgMSAgYWIwNSAgU0VUV0lORE9XVEVYVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSAzOCAgIDEgIGFiNDkgIEdFVFdJTkRPV1RFWFRMRU5HVEggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gMzkgICAxICBhOTcxICBCRUdJTlBBSU5UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQwICAgMSAgYTk5MSAgRU5EUEFJTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDEgICA4ICAwZjFiICBDUkVBVEVXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDIgIDE0ICAxMDNlICBTSE9XV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDQzICAxNCAgMTA4OCAgQ0xPU0VXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDQgIDE0ICAxMDc0ICBPUEVOSUNPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0NSAgIDcgIDE4MzYgIEJSSU5HV0lORE9XVE9UT1AgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDYgICAyICAwZGRlICBHRVRQQVJFTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDcgICAxICAxODAyICBJU1dJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA0OCAgIDEgIDFiZDMgIElTQ0hJTEQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNDkgICAxICAxYzI4ICBJU1dJTkRPV1ZJU0lCTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTAgICA2ICAxZjcyICBGSU5EV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUxICAgMSAgMWE2YyAgQkVBUjUxIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDUyICAxNCAgMDNmMCAgQU5ZUE9QVVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTMgICA4ICAwZmFhICBERVNUUk9ZV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU0ICAgMSAgYWQyMCAgRU5VTVdJTkRPV1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTUgICAxICBhZDAzICBFTlVNQ0hJTERXSU5ET1dTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDU2ICAgNyAgMTdhNiAgTU9WRVdJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA1NyAgIDggIDBlN2MgIFJFR0lTVEVSQ0xBU1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTggICA4ICAwZWViICBHRVRDTEFTU05BTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNTkgICAxICBhOTQ5ICBTRVRBQ1RJVkVXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjAgICAxICA4MThkICBHRVRBQ1RJVkVXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjEgIDEzICAyM2RkICBTQ1JPTExXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjIgIDE4ICAxYTAwICBTRVRTQ1JPTExQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjMgIDE4ICAxYTIyICBHRVRTQ1JPTExQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjQgIDE4ICAxYTQ0ICBTRVRTQ1JPTExSQU5HRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2NSAgMTggIDFhNjYgIEdFVFNDUk9MTFJBTkdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDY2ICAgMSAgYTYwYiAgR0VUREMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNjcgICAxICBhNWY3ICBHRVRXSU5ET1dEQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2OCAgIDEgIGE2MWYgIFJFTEVBU0VEQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA2OSAgIDEgIGFiOTcgIFNFVENVUlNPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3MCAgIDEgIDgyMmMgIFNFVENVUlNPUlBPUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3MSAgIDEgIDE1MGMgIFNIT1dDVVJTT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzIgICAxICAxZDNkICBTRVRSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDczICAgMSAgMWQ2NCAgU0VUUkVDVEVNUFRZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc0ICAgMSAgMWQ3ZCAgQ09QWVJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gNzUgICAxICAxZDlhICBJU1JFQ1RFTVBUWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3NiAgIDEgIDFkYzAgIFBUSU5SRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc3ICAgMSAgMWRmNCAgT0ZGU0VUUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA3OCAgIDEgIDFlMTkgIElORkxBVEVSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDc5ICAgMSAgMWUzZSAgSU5URVJTRUNUUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MCAgIDEgIDFlYTYgIFVOSU9OUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MSAgIDEgIGFjNDAgIEZJTExSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDgyICAgMSAgYWNkMCAgSU5WRVJUUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4MyAgIDEgIGFjODggIEZSQU1FUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA4NCAgMTMgIDIzOWMgIERSQVdJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDg1ICAgNiAgMWU5MSAgRFJBV1RFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gODYgIDEzICAwMjI5ICBCRUFSODYgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gODcgIDI1ICAyNjNiICBESUFMT0dCT1ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gODggIDI1ICAyNmU1ICBFTkRESUFMT0cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gODkgIDI0ICAwOWNlICBDUkVBVEVESUFMT0cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gOTAgIDI1ICAyODA0ICBJU0RJQUxPR01FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gOTEgIDI1ICAyNmY5ICBHRVRETEdJVEVNIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDkyICAyNSAgMjc0MSAgU0VURExHSVRFTVRFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gOTMgIDI1ICAyNzYxICBHRVRETEdJVEVNVEVYVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA5NCAgMjUgIDI3MGQgIFNFVERMR0lURU1JTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0gOTUgIDI1ICAyNzIxICBHRVRETEdJVEVNSU5UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDk2ICAyNSAgMjc4OSAgQ0hFQ0tSQURJT0JVVFRPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLSA5NyAgMjUgIDI3NzUgIENIRUNLRExHQlVUVE9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDk4ICAyNSAgMjc5ZCAgSVNETEdCVVRUT05DSEVDS0VEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotIDk5ICAzNyAgMGZkZiAgRExHRElSU0VMRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTAwICAzNyAgMGZiMSAgRExHRElSTElTVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwMSAgMjUgIDI3YjEgIFNFTkRETEdJVEVNTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwMiAgIDIgIDBjZDIgIEFESlVTVFdJTkRPV1JFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDMgIDI1ICAyODUzICBNQVBESUFMT0dSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTA0ICAgMSAgMWJhYiAgTUVTU0FHRUJFRVAgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDUgICA2ICAxZjVlICBGTEFTSFdJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwNiAgIDEgIDRmNDYgIEdFVEtFWVNUQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTA3ICAgMSAgYTdmYyAgREVGV0lORE9XUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEwOCAgIDEgIGE2OGYgIEdFVE1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMDkgICAxICBhNzQ0ICBQRUVLTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExMCAgIDEgIGE3YjcgIFBPU1RNRVNTQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTExICAgMSAgYTc4NiAgU0VORE1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTIgICAxICAzZGM0ICBXQUlUTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExMyAgIDEgIGE2YjIgIFRSQU5TTEFURU1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTQgICAxICBhNmZiICBESVNQQVRDSE1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTUgICAxICAzYzM3ICBSRVBMWU1FU1NBR0UgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMTYgICAxICBhN2U4ICBQT1NUQVBQTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExOCAgIDEgIDgyMTQgIFJFR0lTVEVSV0lORE9XTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTExOSAgIDEgIDgxYWUgIEdFVE1FU1NBR0VQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjAgICAxICA4MWExICBHRVRNRVNTQUdFVElNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEyMSAgIDEgIGFkNjggIFNFVFdJTkRPV1NIT09LIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTIyICAgMSAgYTgyNyAgQ0FMTFdJTkRPV1BST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjMgICAxICBhODViICBDQUxMTVNHRklMVEVSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTI0ICAgMSAgYTk1ZCAgVVBEQVRFV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTI1ICAgMSAgYWEyNyAgSU5WQUxJREFURVJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjYgICAxICBhYTY3ICBJTlZBTElEQVRFUkdOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTI3ICAgMSAgYWE0NyAgVkFMSURBVEVSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTI4ICAgMSAgYWE5MyAgVkFMSURBVEVSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMjkgICAyICAwZDhlICBHRVRDTEFTU1dPUkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzAgICAyICAwZGEyICBTRVRDTEFTU1dPUkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzEgICAyICAwZGI2ICBHRVRDTEFTU0xPTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzIgICAyICAwZGNhICBTRVRDTEFTU0xPTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzMgICAyICAwZDA2ICBHRVRXSU5ET1dXT1JEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTM0ICAgMiAgMGQxYSAgU0VUV0lORE9XV09SRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEzNSAgIDIgIDBkM2EgIEdFVFdJTkRPV0xPTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xMzYgICAyICAwZDRlICBTRVRXSU5ET1dMT05HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTM3ICAzOSAgMDcxMCAgT1BFTkNMSVBCT0FSRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTEzOCAgMzkgIDA2NDMgIENMT1NFQ0xJUEJPQVJEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTM5ICAzOSAgMDI2MSAgRU1QVFlDTElQQk9BUkQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDAgIDM5ICAwMGVlICBHRVRDTElQQk9BUkRPV05FUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE0MSAgMzkgIDAyZjQgIFNFVENMSVBCT0FSRERBVEEgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDIgIDM5ICAwNDI1ICBHRVRDTElQQk9BUkREQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTQzICAzOSAgMDA3NSAgQ09VTlRDTElQQk9BUkRGT1JNQVRTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTQ0ICAzOSAgMDZiYiAgRU5VTUNMSVBCT0FSREZPUk1BVFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDUgICAxICA4MjE0ICBSRUdJU1RFUkNMSVBCT0FSREZPUk1BVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE0NiAgMzkgIDA3NTIgIEdFVENMSVBCT0FSREZPUk1BVE5BTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDcgIDM5ICAwNzI0ICBTRVRDTElQQk9BUkRWSUVXRVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDggIDM5ICAwMGY5ICBHRVRDTElQQk9BUkRWSUVXRVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNDkgIDM5ICAwNzM4ICBDSEFOR0VDTElQQk9BUkRDSEFJTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE1MCAgIDkgIDEwNzYgIExPQURNRU5VIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTUxICAgOSAgMDgwNiAgQ1JFQVRFTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE1MiAgIDkgIDExOGUgIERFU1RST1lNRU5VIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTUzICAgOSAgMTBkYiAgQ0hBTkdFTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE1NCAgIDkgIDExYTIgIENIRUNLTUVOVUlURU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNTUgICA5ICAxMWM3ICBFTkFCTEVNRU5VSVRFTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE1NiAgIDkgIDExNjAgIEdFVFNZU1RFTU1FTlUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNTcgICA5ICAxMGFkICBHRVRNRU5VIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTU4ICAgOSAgMTBjMSAgU0VUTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE1OSAgIDkgIDExZWMgIEdFVFNVQk1FTlUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjAgIDEwICAzMGMzICBEUkFXTUVOVUJBUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE2MSAgIDkgIDEwZmQgIEdFVE1FTlVTVFJJTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjIgIDE5ICAwYjQ5ICBISUxJVEVNRU5VSVRFTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE2MyAgMTMgIDI1MjEgIENSRUFURUNBUkVUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTY0ICAxMyAgMGJmYSAgREVTVFJPWUNBUkVUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTY1ICAxMyAgMGRiOCAgU0VUQ0FSRVRQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjYgIDEzICAyNTRmICBISURFQ0FSRVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjcgIDEzICAyNTYzICBTSE9XQ0FSRVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNjggICAzICAyNGZkICBTRVRDQVJFVEJMSU5LVElNRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE2OSAgMTMgIDBkOGYgIEdFVENBUkVUQkxJTktUSU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTcwICAgNCAgMDRjMCAgQVJSQU5HRUlDT05JQ1dJTkRPV1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNzEgICAyICAwZTNjICBXSU5IRUxQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTcyICAyMyAgMGNlYiAgU1dJVENIVE9USElTV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTczICAxMiAgMTY5YiAgTE9BRENVUlNPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE3NCAgMTIgIDE3MTIgIExPQURJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTc1ICAxMiAgMTY3ZSAgTE9BREJJVE1BUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE3NiAgMTIgIDE3YWYgIExPQURTVFJJTkcgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNzcgIDEyICAxNjYxICBMT0FEQUNDRUxFUkFUT1JTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTc4ICAxOSAgMGFmNCAgVFJBTlNMQVRFQUNDRUxFUkFUT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xNzkgICAxICBhOTJkICBHRVRTWVNURU1NRVRSSUNTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTgwICAgMSAgODEzNSAgR0VUU1lTQ09MT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xODEgIDQxICAxODZmICBTRVRTWVNDT0xPUlMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xODIgICAxICA3NGY0ICBCRUFSMTgyIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTgzICAxMyAgMGQ5YSAgR0VUQ0FSRVRQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xODQgICAxICA0OTBlICBRVUVSWVNFTkRNRVNTQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTg1ICAxMCAgMzBkNyAgR1JBWVNUUklORyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE4NiAgIDEgIDFjZWUgIFNXQVBNT1VTRUJVVFRPTiBleHBvcnRlZAotMTg3ICAgOSAgMDBmZSAgRU5ETUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE4OCAgIDEgIGE3NzIgIFNFVFNZU01PREFMV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTg5ICAgMSAgMTlkNCAgR0VUU1lTTU9EQUxXSU5ET1cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTAgICAxICBhOWIxICBHRVRVUERBVEVSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTkxICAgMSAgYWJmOSAgQ0hJTERXSU5ET1dGUk9NUE9JTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTIgICAxICAzZGJhICBJTlNFTkRNRVNTQUdFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTkzICAzOSAgMDAzMCAgSVNDTElQQk9BUkRGT1JNQVRBVkFJTEFCTEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTQgIDM3ICAxMDRkICBETEdESVJTRUxFQ1RDT01CT0JPWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE5NSAgMzcgIDEwMWYgIERMR0RJUkxJU1RDT01CT0JPWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE5NiAgIDYgIDFmMWQgIFRBQkJFRFRFWFRPVVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0xOTcgICA2ICAxZWRjICBHRVRUQUJCRURURVhURVhURU5UIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMTk4ICAxNSAgMDg3NSAgQ0FTQ0FERUNISUxEV0lORE9XUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTE5OSAgMTUgIDA5NTYgIFRJTEVDSElMRFdJTkRPV1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDAgIDQwICAwOWQ5ICBPUEVOQ09NTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwMSAgNDAgIDA5ZjYgIFNFVENPTU1TVEFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwMiAgNDAgIDBhMTMgIEdFVENPTU1TVEFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwMyAgNDAgIDBhY2QgIEdFVENPTU1FUlJPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwNCAgNDAgIDBhM2QgIFJFQURDT01NIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjA1ICA0MCAgMGE4NSAgV1JJVEVDT01NIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjA2ICA0MCAgMGIxZCAgVFJBTlNNSVRDT01NQ0hBUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwNyAgNDAgIDBhYWYgIENMT1NFQ09NTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIwOCAgNDAgIDBiM2IgIFNFVENPTU1FVkVOVE1BU0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMDkgIDQwICAwYjY0ICBHRVRDT01NRVZFTlRNQVNLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjEwICA0MCAgMGI4ZCAgU0VUQ09NTUJSRUFLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjExICA0MCAgMGJhYiAgQ0xFQVJDT01NQlJFQUsgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTIgIDQwICAwYTY3ICBVTkdFVENPTU1DSEFSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjEzICA0MCAgMGFmNCAgQlVJTERDT01NRENCIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE0ICA0MCAgMGJlNyAgRVNDQVBFQ09NTUZVTkNUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE1ICA0MCAgMGJjOSAgRkxVU0hDT01NIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjE2ICA0MSAgMTgxZSAgVVNFUlNFRVVTRVJETyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxNyAgIDkgIDAxNjMgIExPT0tVUE1FTlVIQU5ETEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMTggIDI1ICAyNjY3ICBESUFMT0dCT1hJTkRJUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIxOSAgMjQgIDA5ZmEgIENSRUFURURJQUxPR0lORElSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjIwICAgOSAgMTA5MyAgTE9BRE1FTlVJTkRJUkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyMSAgMTMgIDI0MDkgIFNDUk9MTERDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjIyICAgMSAgYTg4OSAgR0VUS0VZQk9BUkRTVEFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyMyAgIDEgIGE4YTMgIFNFVEtFWUJPQVJEU1RBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMjQgICAxICBhZDU0ICBHRVRXSU5ET1dUQVNLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjI1ICAgMSAgYWQzNyAgRU5VTVRBU0tXSU5ET1dTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjI2ICAgMSAgNDk4MyAgTE9DS0lOUFVUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjI3ICAxOSAgMGFjMCAgR0VUTkVYVERMR0dST1VQSVRFTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIyOCAgMTkgIDBhZGEgIEdFVE5FWFRETEdUQUJJVEVNIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjI5ICAgMiAgMGRmMiAgR0VUVE9QV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjMwICAgMiAgMDhmMiAgR0VUTkVYVFdJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIzMSAgIDEgIDRhZmIgIEdFVFNZU1RFTURFQlVHU1RBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMzIgICA3ICAxN2JhICBTRVRXSU5ET1dQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMzMgIDE0ICAxMDljICBTRVRQQVJFTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMzQgICAxICBhZDlhICBVTkhPT0tXSU5ET1dTSE9PSyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIzNSAgIDEgIGFkYzQgIERFRkhPT0tQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjM2ICAgMSAgODE5NyAgR0VUQ0FQVFVSRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIzNyAgIDEgIGE5ZDEgIEdFVFVQREFURVJHTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTIzOCAgIDEgIGE5ZmEgIEVYQ0xVREVVUERBVEVSR04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yMzkgIDI1ICAyNjkwICBESUFMT0dCT1hQQVJBTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI0MCAgMjUgIDI2YmMgIERJQUxPR0JPWElORElSRUNUUEFSQU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNDEgIDI0ICAwYTI5ICBDUkVBVEVESUFMT0dQQVJBTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI0MiAgMjQgIDBhNTUgIENSRUFURURJQUxPR0lORElSRUNUUEFSQU0gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNDMgIDI1ICAwYWEzICBHRVRESUFMT0dCQVNFVU5JVFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNDQgICAxICAyMDk0ICBFUVVBTFJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNDUgIDQwICAwYzA2ICBFTkFCTEVDT01NTk9USUZJQ0FUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQ2ICAgNSAgMDVkZSAgRVhJVFdJTkRPV1NFWEVDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQ3ICAgMSAgMTRjYSAgR0VUQ1VSU09SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjQ4ICAzOSAgMDYwMCAgR0VUT1BFTkNMSVBCT0FSRFdJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI0OSAgIDEgIDRmNTkgIEdFVEFTWU5DS0VZU1RBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNTAgICA5ICAxMTNiICBHRVRNRU5VU1RBVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNTEgICAyICAwZTVjICBTRU5ERFJJVkVSTUVTU0FHRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI1MiAgNDEgIDE4Y2IgIE9QRU5EUklWRVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNTMgIDQxICAxOGYxICBDTE9TRURSSVZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI1NCAgNDEgIDE5MDUgIEdFVERSSVZFUk1PRFVMRUhBTkRMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI1NSAgIDIgIDBlNzAgIERFRkRSSVZFUlBST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNTYgICAyICAwZWFmICBHRVREUklWRVJJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjU3ICAgMiAgMGU4NCAgR0VUTkVYVERSSVZFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI1OCAgIDEgIDE4YzggIE1BUFdJTkRPV1BPSU5UUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI1OSAgIDcgIDAwYjUgIEJFR0lOREVGRVJXSU5ET1dQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNjAgICA3ICAxN2ViICBERUZFUldJTkRPV1BPUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI2MSAgIDcgIDE4MjIgIEVORERFRkVSV0lORE9XUE9TIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjYyICAgMiAgMGUxYSAgR0VUV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjYzICAgOSAgMTIxNyAgR0VUTUVOVUlURU1DT1VOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI2NCAgIDkgIDEyMDAgIEdFVE1FTlVJVEVNSUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNjUgIDE0ICAxMDYwICBTSE9XT1dORURQT1BVUFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNjYgICAxICA1NmIwICBTRVRNRVNTQUdFUVVFVUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNjcgIDE4ICAxYWEwICBTSE9XU0NST0xMQkFSIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjY4ICAgMSAgMjFjZCAgR0xPQkFMQUREQVRPTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI2OSAgIDEgIDIyMzYgIEdMT0JBTERFTEVURUFUT00gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNzAgICAxICAyMjUxICBHTE9CQUxGSU5EQVRPTSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI3MSAgIDEgIDIyNmYgIEdMT0JBTEdFVEFUT01OQU1FIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjcyICAgMSAgMTkzMCAgSVNaT09NRUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNzMgIDQxICAxNzE2ICBDT05UUk9MUEFORUxJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjc0ICAyMyAgMGQ4ZSAgR0VUTkVYVFFVRVVFV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjc1ICAgMSAgNzdhNyAgUkVQQUlOVFNDUkVFTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI3NiAgIDEgIDZlZWEgIExPQ0tNWVRBU0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNzcgIDI1ICAyN2M1ICBHRVRETEdDVFJMSUQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yNzggICAxICAxOWNhICBHRVRERVNLVE9QSFdORCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI3OSAgNDEgIDBhNTEgIE9MRFNFVERFU0tQQVRURVJOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjgwICAgOSAgMTE3NCAgU0VUU1lTVEVNTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI4MiAgIDYgIDFmOTUgIFNFTEVDVFBBTEVUVEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yODMgICA2ICAxZmQxICBSRUFMSVpFUEFMRVRURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI4NCAgNDEgIDE3NDAgIEdFVEZSRUVTWVNURU1SRVNPVVJDRVMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yODUgIDQxICAxNzM2ICBCRUFSMjg1IGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjg2ICAgMSAgMTljYSAgR0VUREVTS1RPUFdJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI4NyAgIDIgIDBlMDYgIEdFVExBU1RBQ1RJVkVQT1BVUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI4OCAgIDEgIDgxYmIgIEdFVE1FU1NBR0VFWFRSQUlORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yODkgICAxICA0YjU5ICBLRVlCRF9FVkVOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI5MCAgIDEgIGFhYmYgIFJFRFJBV1dJTkRPVyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTI5MSAgIDEgIGFkZGUgIFNFVFdJTkRPV1NIT09LRVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yOTIgICAxICBhZTE0ICBVTkhPT0tXSU5ET1dTSE9PS0VYIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjkzICAgMSAgYWUzNSAgQ0FMTE5FWFRIT09LRVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0yOTQgIDEzICAyM2M5ICBMT0NLV0lORE9XVVBEQVRFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMjk5ICAgMSAgNTA3YSAgTU9VU0VfRVZFTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDEgIDI2ICAwMDAwICBCT1pPU0xJVkVIRVJFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzA2ICAxMCAgMTU4NyAgQkVBUjMwNiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMwOCAgMjUgIDI3ZDkgIERFRkRMR1BST0MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMDkgICAxICBhYmRmICBHRVRDTElQQ1VSU09SIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzE0ICAgMSAgMDliYyAgU0lHTkFMUFJPQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMxOSAgMTMgIDI0NmMgIFNDUk9MTFdJTkRPV0VYIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzIwICAgMSAgOTMyNSAgU1lTRVJST1JCT1ggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMjEgICAxICBhOGJkICBTRVRFVkVOVEhPT0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMjIgIDQxICAwZTZlICBXSU5PTERBUFBIQUNLT01BVElDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzIzICAgMSAgMjQ0ZiAgR0VUTUVTU0FHRTIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zMjQgICAxICA3NzY2ICBGSUxMV0lORE9XIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzI1ICAgMSAgNzZlYiAgUEFJTlRSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzI2ICAgNiAgMDJkMiAgR0VUQ09OVFJPTEJSVVNIIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzMxICAgMSAgNGYzNiAgRU5BQkxFSEFSRFdBUkVJTlBVVCBleHBvcnRlZAotMzMyICAgMSAgM2RmMiAgVVNFUllJRUxEIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzMzICAgMSAgMzM0ZSAgSVNVU0VSSURMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMzNCAgIDEgIDRmZWQgIEdFVFFVRVVFU1RBVFVTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzM1ICAgMSAgNTAxYyAgR0VUSU5QVVRTVEFURSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMzNiAgMTIgIDBkZWIgIExPQURDVVJTT1JJQ09OSEFORExFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTMzNyAgIDEgIDUzMGEgIEdFVE1PVVNFRVZFTlRQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotMzQxICAgMSAgMTc5OCAgX0ZGRkVfRkFSRlJBTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNDMgICAxICA5YzdjICBHRVRGSUxFUE9SVE5BTUUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNTYgIDEyICAwZmYxICBMT0FERElCQ1VSU09SSEFORExFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1NyAgMTIgIDEwMGQgIExPQURESUJJQ09OSEFORExFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1OCAgIDkgIDBmYTAgIElTTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM1OSAgIDEgIGE2NGMgIEdFVERDRVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNjIgICAxICA4YTAwICBEQ0hPT0sgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNjggIDEyICAxNzZmICBDT1BZSUNPTiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTM2OSAgMTIgIDE2ZjggIENPUFlDVVJTT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNzAgIDE0ICAwZmRlICBHRVRXSU5ET1dQTEFDRU1FTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNzEgIDE0ICAxMDBlICBTRVRXSU5ET1dQTEFDRU1FTlQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNzIgIDEyICAxNzg5ICBHRVRJTlRFUk5BTElDT05IRUFERVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi0zNzMgICAxICAyMGI4ICBTVUJUUkFDVFJFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDAgICAzICAyNTcwICBGSU5BTFVTRVJJTklUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDAyICAzOSAgMDc3YyAgR0VUUFJJT1JJVFlDTElQQk9BUkRGT1JNQVQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDMgICA4ICAwZWE1ICBVTlJFR0lTVEVSQ0xBU1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDQgICA4ICAwZWMyICBHRVRDTEFTU0lORk8gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDYgIDEyICAxNmI4ICBDUkVBVEVDVVJTT1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MDcgIDEyICAxNzJmICBDUkVBVEVJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDA4ICAxMiAgMDAwMCAgQ1JFQVRFQ1VSU09SSUNPTklORElSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDEwICAgOSAgMTIyZSAgSU5TRVJUTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQxMSAgIDkgIDEyNTAgIEFQUEVORE1FTlUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MTIgICA5ICAxMjk0ICBSRU1PVkVNRU5VIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDEzICAgOSAgMTJiNiAgREVMRVRFTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQxNCAgIDkgIDEyNzIgIE1PRElGWU1FTlUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MTUgICA5ICAwODEzICBDUkVBVEVQT1BVUE1FTlUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MTYgICA5ICAxMzJhICBUUkFDS1BPUFVQTUVOVSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQxNyAgIDkgIDA3YWIgIEdFVE1FTlVDSEVDS01BUktESU1FTlNJT05TIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDE4ICAgOSAgMTJkOCAgU0VUTUVOVUlURU1CSVRNQVBTIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDIwICAxNiAgMDU1YSAgX1dTUFJJTlRGIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDIxICAxNiAgMDUxOCAgV1ZTUFJJTlRGIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDIyICAzNyAgMGZmZiAgRExHRElSU0VMRUNURVggZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MjMgIDM3ICAxMDZkICBETEdESVJTRUxFQ1RDT01CT0JPWEVYIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDMwICAxMSAgMDM1OSAgTFNUUkNNUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQzMSAgMTEgIDAzNjUgIEFOU0lVUFBFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQzMiAgMTEgIDAzODEgIEFOU0lMT1dFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQzMyAgMTEgIDAyMDMgIElTQ0hBUkFMUEhBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDM0ICAxMSAgMDIwOCAgSVNDSEFSQUxQSEFOVU1FUklDIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDM1ICAxMSAgMDIwZCAgSVNDSEFSVVBQRVIgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MzYgIDExICAwMjEyICBJU0NIQVJMT1dFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQzNyAgMTEgIDAzOWQgIEFOU0lVUFBFUkJVRkYgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00MzggIDExICAwM2I3ICBBTlNJTE9XRVJCVUZGIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDQ1ICAxNSAgMWE2ZSAgREVGRlJBTUVQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDQ3ICAxNSAgMWE4MiAgREVGTURJQ0hJTERQUk9DIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDUxICAxNSAgMWFhZCAgVFJBTlNMQVRFTURJU1lTQUNDRUwgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NTIgICA4ICAwZjU3ICBDUkVBVEVXSU5ET1dFWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ1NCAgIDIgIDBjZWMgIEFESlVTVFdJTkRPV1JFQ1RFWCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ1NSAgMTIgIDA1MmIgIEdFVElDT05JRCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ1NiAgMTIgIDAzMjggIExPQURJQ09OSEFORExFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ1NyAgMTIgIDE3NWIgIERFU1RST1lJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDU4ICAxMiAgMTZlNCAgREVTVFJPWUNVUlNPUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ1OSAgMTIgIDAxYmIgIERVTVBJQ09OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDYwICAxNCAgMGE4NSAgR0VUSU5URVJOQUxXSU5ET1dQT1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NjEgIDE0ICAwYWVmICBTRVRJTlRFUk5BTFdJTkRPV1BPUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ2MiAgMTUgIDAyNzYgIENBTENDSElMRFNDUk9MTCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ2MyAgMTUgIDA1M2YgIFNDUk9MTENISUxEUkVOIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDY0ICAxNCAgMGZiZSAgRFJBR09CSkVDVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ2NSAgMTQgIDAzNWUgIERSQUdERVRFQ1QgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NjYgICAxICBhYzBkICBEUkFXRk9DVVNSRUNUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDcwICAxMSAgMDJlNyAgU1RSSU5HRlVOQyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ3MSAgMTEgIDAzNWYgIExTVFJDTVBJIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDcyICAxMSAgMDNkMSAgQU5TSU5FWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00NzMgIDExICAwM2ViICBBTlNJUFJFViBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ4MCAgIDEgIDFkMzggIEdFVFVTRVJMT0NBTE9CSlRZUEUgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi00ODEgICAxICA0ZDZjICBIQVJEV0FSRV9FVkVOVCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ4MiAgMTggIDFhYzIgIEVOQUJMRVNDUk9MTEJBUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ4MyAgNDEgIDE4OTUgIFNZU1RFTVBBUkFNRVRFUlNJTkZPIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNDg0ICAgMSAgYjY2NCAgX19HUCBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTQ5OSAgMjIgIDAwNWMgIFdORVRFUlJPUlRFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDEgIDIyICAwYTY4ICBXTkVUT1BFTkpPQiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwMiAgMjIgIDBhOWQgIFdORVRDTE9TRUpPQiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwMyAgMjIgIDBiNDAgIFdORVRBQk9SVEpPQiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwNCAgMjIgIDBhY2MgIFdORVRIT0xESk9CIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA1ICAyMiAgMGFlOSAgV05FVFJFTEVBU0VKT0IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MDYgIDIyICAwYjA2ICBXTkVUQ0FOQ0VMSk9CIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA3ICAyMiAgMGIyMyAgV05FVFNFVEpPQkNPUElFUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUwOCAgMjIgIDA5Y2EgIFdORVRXQVRDSFFVRVVFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTA5ICAyMiAgMDlmOSAgV05FVFVOV0FUQ0hRVUVVRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxMCAgMjIgIDBhMTYgIFdORVRMT0NLUVVFVUVEQVRBIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTExICAyMiAgMGE0YiAgV05FVFVOTE9DS1FVRVVFREFUQSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxMiAgMjIgIDA5OTIgIFdORVRHRVRDT05ORUNUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTEzICAyMiAgMDhhNiAgV05FVEdFVENBUFMgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MTQgIDIyICAwOGM3ICBXTkVUREVWSUNFTU9ERSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxNSAgMjIgIDA4ZGUgIFdORVRCUk9XU0VESUFMT0cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MTYgIDIyICAwOTE0ICBXTkVUR0VUVVNFUiBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUxNyAgMjIgIDA5NDAgIFdORVRBRERDT05ORUNUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTE4ICAyMiAgMDk3NSAgV05FVENBTkNFTENPTk5FQ1RJT04gZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MTkgIDIyICAwYjYzICBXTkVUR0VURVJST1IgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjAgIDIyICAwYjgwICBXTkVUR0VURVJST1JURVhUIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTIxICAyMiAgMDg0NyAgV05FVEVOQUJMRSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUyMiAgMjIgIDA4NGUgIFdORVRESVNBQkxFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTIzICAyMiAgMDQ3OCAgV05FVFJFU1RPUkVDT05ORUNUSU9OIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTI0ICAyMiAgMDg1NSAgV05FVFdSSVRFSk9CIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTI1ICAyMiAgMDg1ZSAgV05FVENPTk5FQ1RESUFMT0cgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCi01MjYgIDIyICAwODY3ICBXTkVURElTQ09OTkVDVERJQUxPRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUyNyAgMjIgIDA4NzAgIFdORVRDT05ORUNUSU9ORElBTE9HIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTI4ICAyMiAgMDg3OSAgV05FVFZJRVdRVUVVRURJQUxPRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUyOSAgMjIgIDA4OGIgIFdORVRQUk9QRVJUWURJQUxPRyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUzMCAgMjIgIDA4OTQgIFdORVRHRVRESVJFQ1RPUllUWVBFIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQotNTMxICAyMiAgMDg5ZCAgV05FVERJUkVDVE9SWU5PVElGWSBleHBvcnRlZCwgc2hhcmVkIGRhdGEKLTUzMiAgMjIgIDA4ODIgIFdORVRHRVRQUk9QRVJUWVRFWFQgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCmRpZmYgLS1naXQgYS9ldGMvd2luODdlbS1vcmRpbmFscyBiL2V0Yy93aW44N2VtLW9yZGluYWxzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGVlMmFiLi4wMDAwMDAwCi0tLSBhL2V0Yy93aW44N2VtLW9yZGluYWxzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0gIDEgICAxICAwMDJhICBfX0ZQTUFUSCBleHBvcnRlZAotICAyICAgMSAgMDA4OSAgV0VQIGV4cG9ydGVkCi0gIDMgICAxICAwMWFiICBfX1dJTjg3RU1JTkZPIGV4cG9ydGVkCi0gIDQgICAxICAwMjIwICBfX1dJTjg3RU1SRVNUT1JFIGV4cG9ydGVkCi0gIDUgICAxICAwMWUzICBfX1dJTjg3RU1TQVZFIGV4cG9ydGVkCmRpZmYgLS1naXQgYS9maWxlcy9kcml2ZS5jIGIvZmlsZXMvZHJpdmUuYwppbmRleCA5NDhmOWI2Li45MmMyYzI2IDEwMDY0NAotLS0gYS9maWxlcy9kcml2ZS5jCisrKyBiL2ZpbGVzL2RyaXZlLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogICovCiBpbnQgRFJJVkVfR2V0Q3VycmVudERyaXZlKHZvaWQpCiB7Ci0gICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBHZXRDdXJyZW50VGFzaygpICk7CisgICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIEdldEN1cnJlbnRUYXNrKCkgKTsKICAgICBpZiAocFRhc2sgJiYgKHBUYXNrLT5jdXJkcml2ZSAmIDB4ODApKSByZXR1cm4gcFRhc2stPmN1cmRyaXZlICYgfjB4ODA7CiAgICAgcmV0dXJuIERSSVZFX0N1ckRyaXZlOwogfQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgKi8KIGludCBEUklWRV9TZXRDdXJyZW50RHJpdmUoIGludCBkcml2ZSApCiB7Ci0gICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBHZXRDdXJyZW50VGFzaygpICk7CisgICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIEdldEN1cnJlbnRUYXNrKCkgKTsKICAgICBpZiAoIURSSVZFX0lzVmFsaWQoIGRyaXZlICkpCiAgICAgewogICAgICAgICBET1NfRVJST1IoIEVSX0ludmFsaWREcml2ZSwgRUNfTWVkaWFFcnJvciwgU0FfQWJvcnQsIEVMX0Rpc2sgKTsKQEAgLTI3MCw3ICsyNzAsNyBAQAogICovCiBjb25zdCBjaGFyICogRFJJVkVfR2V0RG9zQ3dkKCBpbnQgZHJpdmUgKQogewotICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggR2V0Q3VycmVudFRhc2soKSApOworICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBHZXRDdXJyZW50VGFzaygpICk7CiAgICAgaWYgKCFEUklWRV9Jc1ZhbGlkKCBkcml2ZSApKSByZXR1cm4gTlVMTDsKIAogICAgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBkaXJlY3RvcnkgdG8gdGhlIG5ldyB0YXNrLiAqLwpAQCAtMjkxLDcgKzI5MSw3IEBACiAgKi8KIGNvbnN0IGNoYXIgKiBEUklWRV9HZXRVbml4Q3dkKCBpbnQgZHJpdmUgKQogewotICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggR2V0Q3VycmVudFRhc2soKSApOworICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBHZXRDdXJyZW50VGFzaygpICk7CiAgICAgaWYgKCFEUklWRV9Jc1ZhbGlkKCBkcml2ZSApKSByZXR1cm4gTlVMTDsKIAogICAgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBkaXJlY3RvcnkgdG8gdGhlIG5ldyB0YXNrLiAqLwpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgY2hhciBidWZmZXJbTUFYX1BBVEhOQU1FX0xFTl07CiAgICAgY29uc3QgY2hhciAqdW5peF9jd2QsICpkb3NfY3dkOwogICAgIEJZVEUgYXR0cjsKLSAgICBUREIgKnBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIEdldEN1cnJlbnRUYXNrKCkgKTsKKyAgICBUREIgKnBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggR2V0Q3VycmVudFRhc2soKSApOwogCiAgICAgZHByaW50Zl9kb3Nmcyggc3RkZGViLCAiRFJJVkVfQ2hkaXIoJWM6LCVzKVxuIiwgJ0EnICsgZHJpdmUsIHBhdGggKTsKICAgICBzdHJjcHkoIGJ1ZmZlciwgIkE6IiApOwpkaWZmIC0tZ2l0IGEvZmlsZXMvZmlsZS5jIGIvZmlsZXMvZmlsZS5jCmluZGV4IDc1OGFhNjQuLmU5ODgxYTAgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2ZpbGUuYworKysgYi9maWxlcy9maWxlLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogewogICAgIFBEQiAqcGRiOwogCi0gICAgaWYgKChwZGIgPSAoUERCICopR2xvYmFsTG9jayggR2V0Q3VycmVudFBEQigpICkpICE9IE5VTEwpCisgICAgaWYgKChwZGIgPSAoUERCICopR2xvYmFsTG9jazE2KCBHZXRDdXJyZW50UERCKCkgKSkgIT0gTlVMTCkKICAgICB7CiAgICAgICAgICpmaWxlcyA9IFBUUl9TRUdfVE9fTElOKCBwZGItPmZpbGVIYW5kbGVzUHRyICk7CiAgICAgICAgICpuYkZpbGVzID0gcGRiLT5uYkZpbGVzOwpAQCAtMjE5LDcgKzIxOSw3IEBACiB7CiAgICAgQllURSAqZmlsZXM7CiAgICAgV09SRCBjb3VudDsKLSAgICBQREIgKnBkYiA9IChQREIgKilHbG9iYWxMb2NrKCBoUERCICk7CisgICAgUERCICpwZGIgPSAoUERCICopR2xvYmFsTG9jazE2KCBoUERCICk7CiAKICAgICBpZiAoIXBkYikgcmV0dXJuOwogICAgIGZpbGVzID0gUFRSX1NFR19UT19MSU4oIHBkYi0+ZmlsZUhhbmRsZXNQdHIgKTsKQEAgLTU3Miw3ICs1NzIsNyBAQAogSEZJTEUgRklMRV9EdXAyKCBIRklMRSBoRmlsZTEsIEhGSUxFIGhGaWxlMiApCiB7CiAgICAgRE9TX0ZJTEUgKmZpbGU7Ci0gICAgUERCICpwZGIgPSAoUERCICopR2xvYmFsTG9jayggR2V0Q3VycmVudFBEQigpICk7CisgICAgUERCICpwZGIgPSAoUERCICopR2xvYmFsTG9jazE2KCBHZXRDdXJyZW50UERCKCkgKTsKICAgICBCWVRFICpmaWxlcyA9IFBUUl9TRUdfVE9fTElOKCBwZGItPmZpbGVIYW5kbGVzUHRyICk7CiAKICAgICBkcHJpbnRmX2ZpbGUoIHN0ZGRlYiwgIkZJTEVfRHVwMiBmb3IgaGFuZGxlICVkXG4iLCBoRmlsZTEgKTsKQEAgLTcwMiw3ICs3MDIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG9mcy0+c3pQYXRoTmFtZSwgaEZpbGVSZXQgKTsKICAgICAgICAgLyogUmV0dXJuIHRoZSBoYW5kbGUsIGJ1dCBjbG9zZSBpdCBmaXJzdCAqLwogICAgICAgICBGSUxFX0ZyZWVUYXNrSGFuZGxlKCBoRmlsZVJldCApOwotICAgICAgICByZXR1cm4gaEZpbGVSZXQ7CisvKiAgICAgICAgcmV0dXJuIGhGaWxlUmV0OyAqLworICAgICAgICByZXR1cm4gMDsgIC8qIFByb2dtYW4gc2VlbXMgdG8gbGlrZSB0aGlzIGJldHRlciAqLwogICAgIH0KIAogICAgIC8qIE9GX0NSRUFURSBpcyBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIGFsbCBvdGhlciBvcHRpb25zLCBzbwpAQCAtODc1LDcgKzg3Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBfbGNyZWF0ICAgKEtFUk5FTC44MykKICAqLwotSU5UIF9sY3JlYXQoIExQQ1NUUiBwYXRoLCBJTlQgYXR0ciApCitIRklMRSBfbGNyZWF0KCBMUENTVFIgcGF0aCwgSU5UIGF0dHIgKQogewogICAgIERPU19GSUxFICpmaWxlOwogICAgIEhGSUxFIGhhbmRsZTsKQEAgLTg5Myw3ICs4OTQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgX2xjcmVhdF91bmlxICAgKE5vdCBhIFdpbmRvd3MgQVBJKQogICovCi1JTlQgX2xjcmVhdF91bmlxKCBMUENTVFIgcGF0aCwgSU5UIGF0dHIgKQorSEZJTEUgX2xjcmVhdF91bmlxKCBMUENTVFIgcGF0aCwgSU5UIGF0dHIgKQogewogICAgIERPU19GSUxFICpmaWxlOwogICAgIEhGSUxFIGhhbmRsZTsKQEAgLTEwMjEsNyArMTAyMiw3IEBACiBXT1JEIFNldEhhbmRsZUNvdW50KCBXT1JEIGNvdW50ICkKIHsKICAgICBIQU5ETEUgaFBEQiA9IEdldEN1cnJlbnRQREIoKTsKLSAgICBQREIgKnBkYiA9IChQREIgKilHbG9iYWxMb2NrKCBoUERCICk7CisgICAgUERCICpwZGIgPSAoUERCICopR2xvYmFsTG9jazE2KCBoUERCICk7CiAgICAgQllURSAqZmlsZXMgPSBQVFJfU0VHX1RPX0xJTiggcGRiLT5maWxlSGFuZGxlc1B0ciApOwogICAgIFdPUkQgaTsKIApAQCAtMTA0OCwxMCArMTA0OSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBtZW1jcHkoIHBkYi0+ZmlsZUhhbmRsZXMsIGZpbGVzLCAyMCApOwogI2lmZGVmIFdJTkVMSUIKLSAgICAgICAgICAgIEdsb2JhbEZyZWUoIChIR0xPQkFMKXBkYi0+ZmlsZUhhbmRsZXNQdHIgKTsKKyAgICAgICAgICAgIEdsb2JhbEZyZWUzMiggKEhHTE9CQUwzMilwZGItPmZpbGVIYW5kbGVzUHRyICk7CiAgICAgICAgICAgICBwZGItPmZpbGVIYW5kbGVzUHRyID0gKFNFR1BUUilwZGItPmZpbGVIYW5kbGVzOwogI2Vsc2UKLSAgICAgICAgICAgIEdsb2JhbEZyZWUoIEdsb2JhbEhhbmRsZSggU0VMRUNUT1JPRihwZGItPmZpbGVIYW5kbGVzUHRyKSApKTsKKyAgICAgICAgICAgIEdsb2JhbEZyZWUxNiggR2xvYmFsSGFuZGxlMTYoIFNFTEVDVE9ST0YocGRiLT5maWxlSGFuZGxlc1B0cikgKSk7CiAgICAgICAgICAgICBwZGItPmZpbGVIYW5kbGVzUHRyID0gKFNFR1BUUilNQUtFTE9ORyggMHgxOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbEhhbmRsZVRvU2VsKCBoUERCICkgKTsKICNlbmRpZgpAQCAtMTA2MSwxMyArMTA2MiwxNyBAQAogICAgIGVsc2UgIC8qIE1vcmUgdGhhbiAyMCwgbmVlZCBhIG5ldyBmaWxlIGhhbmRsZXMgdGFibGUgKi8KICAgICB7CiAgICAgICAgIEJZVEUgKm5ld2ZpbGVzOwotICAgICAgICBIQU5ETEUgbmV3aGFuZGxlID0gR2xvYmFsQWxsb2MoIEdNRU1fTU9WRUFCTEUsIGNvdW50ICk7CisjaWZkZWYgV0lORUxJQgorICAgICAgICBuZXdmaWxlcyA9IChCWVRFICopR2xvYmFsQWxsb2MzMiggR01FTV9GSVhFRCwgY291bnQgKTsKKyNlbHNlCisgICAgICAgIEhBTkRMRSBuZXdoYW5kbGUgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX01PVkVBQkxFLCBjb3VudCApOwogICAgICAgICBpZiAoIW5ld2hhbmRsZSkKICAgICAgICAgewogICAgICAgICAgICAgRE9TX0VSUk9SKCBFUl9PdXRPZk1lbW9yeSwgRUNfT3V0T2ZSZXNvdXJjZSwgU0FfQWJvcnQsIEVMX01lbW9yeSApOwogICAgICAgICAgICAgcmV0dXJuIHBkYi0+bmJGaWxlczsKICAgICAgICAgfQotICAgICAgICBuZXdmaWxlcyA9IChCWVRFICopR2xvYmFsTG9jayggbmV3aGFuZGxlICk7CisgICAgICAgIG5ld2ZpbGVzID0gKEJZVEUgKilHbG9iYWxMb2NrMTYoIG5ld2hhbmRsZSApOworI2VuZGlmICAvKiBXSU5FTElCICovCiAgICAgICAgIGlmIChjb3VudCA+IHBkYi0+bmJGaWxlcykKICAgICAgICAgewogICAgICAgICAgICAgbWVtY3B5KCBuZXdmaWxlcywgZmlsZXMsIHBkYi0+bmJGaWxlcyApOwpAQCAtMTA3NSwxMiArMTA4MCwxMyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgbWVtY3B5KCBuZXdmaWxlcywgZmlsZXMsIGNvdW50ICk7CiAjaWZkZWYgV0lORUxJQgotICAgICAgICBpZiAocGRiLT5uYkZpbGVzID4gMjApIEdsb2JhbEZyZWUoIChIR0xPQkFMKXBkYi0+ZmlsZUhhbmRsZXNQdHIgKTsKKyAgICAgICAgaWYgKHBkYi0+bmJGaWxlcyA+IDIwKSBHbG9iYWxGcmVlMzIoIChIR0xPQkFMMzIpcGRiLT5maWxlSGFuZGxlc1B0ciApOworICAgICAgICBwZGItPmZpbGVIYW5kbGVzUHRyID0gKFNFR1BUUiluZXdmaWxlczsKICNlbHNlCiAgICAgICAgIGlmIChwZGItPm5iRmlsZXMgPiAyMCkKLSAgICAgICAgICAgIEdsb2JhbEZyZWUoIEdsb2JhbEhhbmRsZSggU0VMRUNUT1JPRihwZGItPmZpbGVIYW5kbGVzUHRyKSApKTsKLSNlbmRpZgotICAgICAgICBwZGItPmZpbGVIYW5kbGVzUHRyID0gV0lOMTZfR2xvYmFsTG9jayggbmV3aGFuZGxlICk7CisgICAgICAgICAgICBHbG9iYWxGcmVlMTYoIEdsb2JhbEhhbmRsZTE2KCBTRUxFQ1RPUk9GKHBkYi0+ZmlsZUhhbmRsZXNQdHIpICkpOworICAgICAgICBwZGItPmZpbGVIYW5kbGVzUHRyID0gV0lOMTZfR2xvYmFsTG9jazE2KCBuZXdoYW5kbGUgKTsKKyNlbmRpZiAgLyogV0lORUxJQiAqLwogICAgICAgICBwZGItPm5iRmlsZXMgPSBjb3VudDsKICAgICB9CiAgICAgcmV0dXJuIHBkYi0+bmJGaWxlczsKZGlmZiAtLWdpdCBhL2lmMTYzMi9NYWtlZmlsZS5pbiBiL2lmMTYzMi9NYWtlZmlsZS5pbgppbmRleCA2ODQ5NDhhLi5jMzNiZjUyIDEwMDY0NAotLS0gYS9pZjE2MzIvTWFrZWZpbGUuaW4KKysrIGIvaWYxNjMyL01ha2VmaWxlLmluCkBAIC04LDYgKzgsNyBAQAogCWNvbWRsZzMyLnNwZWMgXAogCWNvbW1kbGcuc3BlYyBcCiAJY29tcG9iai5zcGVjIFwKKwljcnRkbGwuc3BlYwlcCiAJZGRlbWwuc3BlYyBcCiAJZ2RpLnNwZWMgXAogCWdkaTMyLnNwZWMgXApAQCAtMTcsNiArMTgsNyBAQAogCWx6ZXhwYW5kLnNwZWMgXAogCW1tc3lzdGVtLnNwZWMgXAogCW1vdXNlLnNwZWMgXAorCW50ZGxsLnNwZWMJXAogCW9sZTIuc3BlYyBcCiAJb2xlMmNvbnYuc3BlYyBcCiAJb2xlMmRpc3Auc3BlYyBcCkBAIC00MCw3ICs0Miw4IEBACiAJd2luc29jay5zcGVjIFwKIAl3aW5zcG9vbC5zcGVjIFwKIAl3cHJvY3Muc3BlYyBcCi0Jd3Byb2NzMzIuc3BlYworCXdwcm9jczMyLnNwZWMgXAorCXdzb2NrMzIuc3BlYwogCiBTUEVDX0ZJTEVTID0gJChETExTOi5zcGVjPS5TKQogCmRpZmYgLS1naXQgYS9pZjE2MzIvY3J0ZGxsLnNwZWMgYi9pZjE2MzIvY3J0ZGxsLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkYjJjYQotLS0gL2Rldi9udWxsCisrKyBiL2lmMTYzMi9jcnRkbGwuc3BlYwpAQCAtMCwwICsxLDUzMCBAQAorbmFtZQljcnRkbGwKK3R5cGUJd2luMzIKK2Jhc2UJMQorCiswMDEgc3R1YiA/PzJAWUFQQVhJQFoKKzAwMiBzdHViID8/M0BZQVhQQVhAWgorMDAzIHN0dWIgP19zZXRfbmV3X2hhbmRsZXJAQFlBUDZBSElAWlA2QUhJQFpAWgorMDA0IHN0dWIgX0NJYWNvcworMDA1IHN0dWIgX0NJYXNpbgorMDA2IHN0dWIgX0NJYXRhbgorMDA3IHN0dWIgX0NJYXRhbjIKKzAwOCBzdHViIF9DSWNvcworMDA5IHN0dWIgX0NJY29zaAorMDEwIHN0dWIgX0NJZXhwCiswMTEgc3R1YiBfQ0lmbW9kCiswMTIgc3R1YiBfQ0lsb2cKKzAxMyBzdHViIF9DSWxvZzEwCiswMTQgc3R1YiBfQ0lwb3cKKzAxNSBzdHViIF9DSXNpbgorMDE2IHN0dWIgX0NJc2luaAorMDE3IHN0dWIgX0NJc3FydAorMDE4IHN0dWIgX0NJdGFuCiswMTkgc3R1YiBfQ0l0YW5oCiswMjAgc3R1YiBfSFVHRV9kbGwKKzAyMSBzdHViIF9YY3B0RmlsdGVyCiswMjIgc3R1YiBfX0dldE1haW5BcmdzCiswMjMgc3R1YiBfX2FyZ2NfZGxsCiswMjQgc3R1YiBfX2FyZ3ZfZGxsCiswMjUgc3R1YiBfX2RsbG9uZXhpdAorMDI2IHN0dWIgX19kb3NlcnJubworMDI3IHN0dWIgX19mcGVjb2RlCiswMjggc3R1YiBfX2lzYXNjaWkKKzAyOSBzdHViIF9faXNjc3ltCiswMzAgc3R1YiBfX2lzY3N5bWYKKzAzMSBzdHViIF9fbWJfY3VyX21heF9kbGwKKzAzMiBzdHViIF9fcHhjcHRpbmZvcHRycworMDMzIHN0dWIgX190aHJlYWRoYW5kbGUKKzAzNCBzdHViIF9fdGhyZWFkaWQKKzAzNSBzdHViIF9fdG9hc2NpaQorMDM2IHN0dWIgX2Fibm9ybWFsX3Rlcm1pbmF0aW9uCiswMzcgc3R1YiBfYWNjZXNzCiswMzggc3R1YiBfYWNtZGxuX2RsbAorMDM5IHN0dWIgX2FleGl0X3J0bl9kbGwKKzA0MCBzdHViIF9hbXNnX2V4aXQKKzA0MSBzdHViIF9hc3NlcnQKKzA0MiBzdHViIF9iYXNlbWFqb3JfZGxsCiswNDMgc3R1YiBfYmFzZW1pbm9yX2RsbAorMDQ0IHN0dWIgX2Jhc2V2ZXJzaW9uX2RsbAorMDQ1IHN0dWIgX2JlZXAKKzA0NiBzdHViIF9iZWdpbnRocmVhZAorMDQ3IHN0dWIgX2NfZXhpdAorMDQ4IHN0dWIgX2NhYnMKKzA0OSBzdHViIF9jZXhpdAorMDUwIHN0dWIgX2NnZXRzCiswNTEgc3R1YiBfY2hkaXIKKzA1MiBzdHViIF9jaGRyaXZlCiswNTMgc3R1YiBfY2hnc2lnbgorMDU0IHN0dWIgX2NobW9kCiswNTUgc3R1YiBfY2hzaXplCiswNTYgc3R1YiBfY2xlYXJmcAorMDU3IHN0dWIgX2Nsb3NlCiswNTggc3R1YiBfY29tbWl0CiswNTkgc3R1YiBfY29tbW9kZV9kbGwKKzA2MCBzdHViIF9jb250cm9sODcKKzA2MSBzdHViIF9jb250cm9sZnAKKzA2MiBzdHViIF9jb3B5c2lnbgorMDYzIHN0dWIgX2NwcmludGYKKzA2NCBzdHViIF9jcHVtb2RlX2RsbAorMDY1IHN0dWIgX2NwdXRzCiswNjYgc3R1YiBfY3JlYXQKKzA2NyBzdHViIF9jc2NhbmYKKzA2OCBzdHViIF9jdHlwZQorMDY5IHN0dWIgX2N3YWl0CiswNzAgc3R1YiBfZGF5bGlnaHRfZGxsCiswNzEgc3R1YiBfZHVwCiswNzIgc3R1YiBfZHVwMgorMDczIHN0dWIgX2VjdnQKKzA3NCBzdHViIF9lbmR0aHJlYWQKKzA3NSBzdHViIF9lbnZpcm9uX2RsbAorMDc2IHN0dWIgX2VvZgorMDc3IHN0dWIgX2Vycm5vCiswNzggc3R1YiBfZXhjZXB0X2hhbmRsZXIyCiswNzkgc3R1YiBfZXhlY2wKKzA4MCBzdHViIF9leGVjbGUKKzA4MSBzdHViIF9leGVjbHAKKzA4MiBzdHViIF9leGVjbHBlCiswODMgc3R1YiBfZXhlY3YKKzA4NCBzdHViIF9leGVjdmUKKzA4NSBzdHViIF9leGVjdnAKKzA4NiBzdHViIF9leGVjdnBlCiswODcgc3R1YiBfZXhpdAorMDg4IHN0dWIgX2V4cGFuZAorMDg5IHN0dWIgX2ZjbG9zZWFsbAorMDkwIHN0dWIgX2ZjdnQKKzA5MSBzdHViIF9mZG9wZW4KKzA5MiBzdHViIF9mZ2V0Y2hhcgorMDkzIHN0dWIgX2ZnZXR3Y2hhcgorMDk0IHN0dWIgX2ZpbGJ1ZgorMDk1IHN0dWIgX2ZpbGVpbmZvX2RsbAorMDk2IHN0dWIgX2ZpbGVsZW5ndGgKKzA5NyBzdHViIF9maWxlbm8KKzA5OCBzdHViIF9maW5kY2xvc2UKKzA5OSBzdHViIF9maW5kZmlyc3QKKzEwMCBzdHViIF9maW5kbmV4dAorMTAxIHN0dWIgX2Zpbml0ZQorMTAyIHN0dWIgX2Zsc2J1ZgorMTAzIHN0dWIgX2ZsdXNoYWxsCisxMDQgc3R1YiBfZm1vZGVfZGxsCisxMDUgc3R1YiBfZnBjbGFzcworMTA2IHN0dWIgX2ZwaWVlZV9mbHQKKzEwNyBzdHViIF9mcHJlc2V0CisxMDggc3R1YiBfZnB1dGNoYXIKKzEwOSBzdHViIF9mcHV0d2NoYXIKKzExMCBzdHViIF9mc29wZW4KKzExMSBzdHViIF9mc3RhdAorMTEyIHN0dWIgX2Z0aW1lCisxMTMgc3R1YiBfZnRvbAorMTE0IHN0dWIgX2Z1bGxwYXRoCisxMTUgc3R1YiBfZnV0aW1lCisxMTYgc3R1YiBfZ2N2dAorMTE3IHN0dWIgX2dldF9vc2ZoYW5kbGUKKzExOCBzdHViIF9nZXRjaAorMTE5IHN0dWIgX2dldGNoZQorMTIwIHN0dWIgX2dldGN3ZAorMTIxIHN0dWIgX2dldGRjd2QKKzEyMiBzdHViIF9nZXRkaXNrZnJlZQorMTIzIHN0dWIgX2dldGRsbHByb2NhZGRyCisxMjQgc3R1YiBfZ2V0ZHJpdmUKKzEyNSBzdHViIF9nZXRkcml2ZXMKKzEyNiBzdHViIF9nZXRwaWQKKzEyNyBzdHViIF9nZXRzeXN0aW1lCisxMjggc3R1YiBfZ2V0dworMTI5IHN0dWIgX2dsb2JhbF91bndpbmQyCisxMzAgc3R1YiBfaGVhcGNoaworMTMxIHN0dWIgX2hlYXBtaW4KKzEzMiBzdHViIF9oZWFwc2V0CisxMzMgc3R1YiBfaGVhcHdhbGsKKzEzNCBzdHViIF9oeXBvdAorMTM1IHN0dWIgX2luaXR0ZXJtCisxMzYgc3R1YiBfaW9iCisxMzcgc3R1YiBfaXNhdHR5CisxMzggc3R1YiBfaXNjdHlwZQorMTM5IHN0dWIgX2lzbWJiYWxudW0KKzE0MCBzdHViIF9pc21iYmFscGhhCisxNDEgc3R1YiBfaXNtYmJncmFwaAorMTQyIHN0dWIgX2lzbWJia2FsbnVtCisxNDMgc3R1YiBfaXNtYmJrYW5hCisxNDQgc3R1YiBfaXNtYmJrcHVuY3QKKzE0NSBzdHViIF9pc21iYmxlYWQKKzE0NiBzdHViIF9pc21iYnByaW50CisxNDcgc3R1YiBfaXNtYmJwdW5jdAorMTQ4IHN0dWIgX2lzbWJidHJhaWwKKzE0OSBzdHViIF9pc21iY2FscGhhCisxNTAgc3R1YiBfaXNtYmNkaWdpdAorMTUxIHN0dWIgX2lzbWJjaGlyYQorMTUyIHN0dWIgX2lzbWJja2F0YQorMTUzIHN0dWIgX2lzbWJjbDAKKzE1NCBzdHViIF9pc21iY2wxCisxNTUgc3R1YiBfaXNtYmNsMgorMTU2IHN0dWIgX2lzbWJjbGVnYWwKKzE1NyBzdHViIF9pc21iY2xvd2VyCisxNTggc3R1YiBfaXNtYmNwcmludAorMTU5IHN0dWIgX2lzbWJjc3BhY2UKKzE2MCBzdHViIF9pc21iY3N5bWJvbAorMTYxIHN0dWIgX2lzbWJjdXBwZXIKKzE2MiBzdHViIF9pc21ic2xlYWQKKzE2MyBzdHViIF9pc21ic3RyYWlsCisxNjQgc3R1YiBfaXNuYW4KKzE2NSBzdHViIF9pdG9hCisxNjYgc3R1YiBfaXRvdworMTY3IHN0dWIgX2owCisxNjggc3R1YiBfajEKKzE2OSBzdHViIF9qbgorMTcwIHN0dWIgX2tiaGl0CisxNzEgc3R1YiBfbGZpbmQKKzE3MiBzdHViIF9sb2FkZGxsCisxNzMgc3R1YiBfbG9jYWxfdW53aW5kMgorMTc0IHN0dWIgX2xvY2tpbmcKKzE3NSBzdHViIF9sb2diCisxNzYgc3R1YiBfbHJvdGwKKzE3NyBzdHViIF9scm90cgorMTc4IHN0dWIgX2xzZWFyY2gKKzE3OSBzdHViIF9sc2VlaworMTgwIHN0dWIgX2x0b2EKKzE4MSBzdHViIF9sdG93CisxODIgc3R1YiBfbWFrZXBhdGgKKzE4MyBzdHViIF9tYXRoZXJyCisxODQgc3R1YiBfbWJidG9tYmMKKzE4NSBzdHViIF9tYmJ0eXBlCisxODYgc3R1YiBfbWJjY3B5CisxODcgc3R1YiBfbWJjamlzdG9qbXMKKzE4OCBzdHViIF9tYmNqbXN0b2ppcworMTg5IHN0dWIgX21iY2xlbgorMTkwIHN0dWIgX21iY3RvaGlyYQorMTkxIHN0dWIgX21iY3Rva2F0YQorMTkyIHN0dWIgX21iY3RvbG93ZXIKKzE5MyBzdHViIF9tYmN0b21iYgorMTk0IHN0dWIgX21iY3RvdXBwZXIKKzE5NSBzdHViIF9tYmN0eXBlCisxOTYgc3R1YiBfbWJzYnR5cGUKKzE5NyBzdHViIF9tYnNjYXQKKzE5OCBzdHViIF9tYnNjaHIKKzE5OSBzdHViIF9tYnNjbXAKKzIwMCBzdHViIF9tYnNjcHkKKzIwMSBzdHViIF9tYnNjc3BuCisyMDIgc3R1YiBfbWJzZGVjCisyMDMgc3R1YiBfbWJzZHVwCisyMDQgc3R1YiBfbWJzaWNtcAorMjA1IHN0dWIgX21ic2luYworMjA2IHN0dWIgX21ic2xlbgorMjA3IHN0dWIgX21ic2x3cgorMjA4IHN0dWIgX21ic25iY2F0CisyMDkgc3R1YiBfbWJzbmJjbXAKKzIxMCBzdHViIF9tYnNuYmNudAorMjExIHN0dWIgX21ic25iY3B5CisyMTIgc3R1YiBfbWJzbmJpY21wCisyMTMgc3R1YiBfbWJzbmJzZXQKKzIxNCBzdHViIF9tYnNuY2F0CisyMTUgc3R1YiBfbWJzbmNjbnQKKzIxNiBzdHViIF9tYnNuY21wCisyMTcgc3R1YiBfbWJzbmNweQorMjE4IHN0dWIgX21ic25leHRjCisyMTkgc3R1YiBfbWJzbmljbXAKKzIyMCBzdHViIF9tYnNuaW5jCisyMjEgc3R1YiBfbWJzbnNldAorMjIyIHN0dWIgX21ic3BicmsKKzIyMyBzdHViIF9tYnNyY2hyCisyMjQgc3R1YiBfbWJzcmV2CisyMjUgc3R1YiBfbWJzc2V0CisyMjYgc3R1YiBfbWJzc3BuCisyMjcgc3R1YiBfbWJzc3BucAorMjI4IHN0dWIgX21ic3N0cgorMjI5IHN0dWIgX21ic3RvaworMjMwIHN0dWIgX21ic3RybGVuCisyMzEgc3R1YiBfbWJzdXByCisyMzIgc3R1YiBfbWVtY2NweQorMjMzIHN0dWIgX21lbWljbXAKKzIzNCBzdHViIF9ta2RpcgorMjM1IHN0dWIgX21rdGVtcAorMjM2IHN0dWIgX21zaXplCisyMzcgc3R1YiBfbmV4dGFmdGVyCisyMzggc3R1YiBfb25leGl0CisyMzkgc3R1YiBfb3BlbgorMjQwIHN0dWIgX29wZW5fb3NmaGFuZGxlCisyNDEgc3R1YiBfb3NtYWpvcl9kbGwKKzI0MiBzdHViIF9vc21pbm9yX2RsbAorMjQzIHN0dWIgX29zbW9kZV9kbGwKKzI0NCBzdHViIF9vc3Zlcl9kbGwKKzI0NSBzdHViIF9vc3ZlcnNpb25fZGxsCisyNDYgc3R1YiBfcGNsb3NlCisyNDcgc3R1YiBfcGN0eXBlX2RsbAorMjQ4IHN0dWIgX3BnbXB0cl9kbGwKKzI0OSBzdHViIF9waXBlCisyNTAgc3R1YiBfcG9wZW4KKzI1MSBzdHViIF9wdXJlY2FsbAorMjUyIHN0dWIgX3B1dGNoCisyNTMgc3R1YiBfcHV0ZW52CisyNTQgc3R1YiBfcHV0dworMjU1IHN0dWIgX3B3Y3R5cGVfZGxsCisyNTYgc3R1YiBfcmVhZAorMjU3IHN0dWIgX3JtZGlyCisyNTggc3R1YiBfcm10bXAKKzI1OSBzdHViIF9yb3RsCisyNjAgc3R1YiBfcm90cgorMjYxIHN0dWIgX3NjYWxiCisyNjIgc3R1YiBfc2VhcmNoZW52CisyNjMgc3R1YiBfc2V0ZXJyb3Jtb2RlCisyNjQgc3R1YiBfc2V0am1wCisyNjUgc3R1YiBfc2V0bW9kZQorMjY2IHN0dWIgX3NldHN5c3RpbWUKKzI2NyBzdHViIF9zbGVlcAorMjY4IHN0dWIgX3NucHJpbnRmCisyNjkgc3R1YiBfc253cHJpbnRmCisyNzAgc3R1YiBfc29wZW4KKzI3MSBzdHViIF9zcGF3bmwKKzI3MiBzdHViIF9zcGF3bmxlCisyNzMgc3R1YiBfc3Bhd25scAorMjc0IHN0dWIgX3NwYXdubHBlCisyNzUgc3R1YiBfc3Bhd252CisyNzYgc3R1YiBfc3Bhd252ZQorMjc3IHN0dWIgX3NwYXdudnAKKzI3OCBzdHViIF9zcGF3bnZwZQorMjc5IHN0dWIgX3NwbGl0cGF0aAorMjgwIHN0dWIgX3N0YXQKKzI4MSBzdHViIF9zdGF0dXNmcAorMjgyIHN0dWIgX3N0cmNtcGkKKzI4MyBzdHViIF9zdHJkYXRlCisyODQgc3R1YiBfc3RyZGVjCisyODUgc3R1YiBfc3RyZHVwCisyODYgc3R1YiBfc3RyZXJyb3IKKzI4NyBzdHViIF9zdHJpY21wCisyODggc3R1YiBfc3RyaWNvbGwKKzI4OSBzdHViIF9zdHJpbmMKKzI5MCBzdHViIF9zdHJsd3IKKzI5MSBzdHViIF9zdHJuY250CisyOTIgc3R1YiBfc3RybmV4dGMKKzI5MyBzdHViIF9zdHJuaWNtcAorMjk0IHN0dWIgX3N0cm5pbmMKKzI5NSBzdHViIF9zdHJuc2V0CisyOTYgc3R1YiBfc3RycmV2CisyOTcgc3R1YiBfc3Ryc2V0CisyOTggc3R1YiBfc3Ryc3BucAorMjk5IHN0dWIgX3N0cnRpbWUKKzMwMCBzdHViIF9zdHJ1cHIKKzMwMSBzdHViIF9zd2FiCiszMDIgc3R1YiBfc3lzX2Vycmxpc3QKKzMwMyBzdHViIF9zeXNfbmVycl9kbGwKKzMwNCBzdHViIF90ZWxsCiszMDUgc3R1YiBfdGVtcG5hbQorMzA2IHN0dWIgX3RpbWV6b25lX2RsbAorMzA3IHN0dWIgX3RvbG93ZXIKKzMwOCBzdHViIF90b3VwcGVyCiszMDkgc3R1YiBfdHpuYW1lCiszMTAgc3R1YiBfdHpzZXQKKzMxMSBzdHViIF91bHRvYQorMzEyIHN0dWIgX3VsdG93CiszMTMgc3R1YiBfdW1hc2sKKzMxNCBzdHViIF91bmdldGNoCiszMTUgc3R1YiBfdW5saW5rCiszMTYgc3R1YiBfdW5sb2FkZGxsCiszMTcgc3R1YiBfdXRpbWUKKzMxOCBzdHViIF92c25wcmludGYKKzMxOSBzdHViIF92c253cHJpbnRmCiszMjAgc3R1YiBfd2NzZHVwCiszMjEgc3R1YiBfd2NzaWNtcAorMzIyIHN0dWIgX3djc2ljb2xsCiszMjMgc3R1YiBfd2NzbHdyCiszMjQgc3R1YiBfd2NzbmljbXAKKzMyNSBzdHViIF93Y3Nuc2V0CiszMjYgc3R1YiBfd2NzcmV2CiszMjcgc3R1YiBfd2Nzc2V0CiszMjggc3R1YiBfd2NzdXByCiszMjkgc3R1YiBfd2lubWFqb3JfZGxsCiszMzAgc3R1YiBfd2lubWlub3JfZGxsCiszMzEgc3R1YiBfd2ludmVyX2RsbAorMzMyIHN0dWIgX3dyaXRlCiszMzMgc3R1YiBfd3RvaQorMzM0IHN0dWIgX3d0b2wKKzMzNSBzdHViIF95MAorMzM2IHN0dWIgX3kxCiszMzcgc3R1YiBfeW4KKzMzOCBzdHViIGFib3J0CiszMzkgc3R1YiBhYnMKKzM0MCBzdHViIGFjb3MKKzM0MSBzdHViIGFzY3RpbWUKKzM0MiBzdHViIGFzaW4KKzM0MyBzdHViIGF0YW4KKzM0NCBzdHViIGF0YW4yCiszNDUgc3R1YiBhdGV4aXQKKzM0NiBzdHViIGF0b2YKKzM0NyBzdHViIGF0b2kKKzM0OCBzdHViIGF0b2wKKzM0OSBzdHViIGJzZWFyY2gKKzM1MCBzdHViIGNhbGxvYworMzUxIHN0dWIgY2VpbAorMzUyIHN0dWIgY2xlYXJlcnIKKzM1MyBzdHViIGNsb2NrCiszNTQgc3R1YiBjb3MKKzM1NSBzdHViIGNvc2gKKzM1NiBzdHViIGN0aW1lCiszNTcgc3R1YiBkaWZmdGltZQorMzU4IHN0dWIgZGl2CiszNTkgc3R1YiBleGl0CiszNjAgc3R1YiBleHAKKzM2MSBzdHViIGZhYnMKKzM2MiBzdHViIGZjbG9zZQorMzYzIHN0dWIgZmVvZgorMzY0IHN0dWIgZmVycm9yCiszNjUgc3R1YiBmZmx1c2gKKzM2NiBzdHViIGZnZXRjCiszNjcgc3R1YiBmZ2V0cG9zCiszNjggc3R1YiBmZ2V0cworMzY5IHN0dWIgZmdldHdjCiszNzAgc3R1YiBmbG9vcgorMzcxIHN0dWIgZm1vZAorMzcyIHN0dWIgZm9wZW4KKzM3MyBzdHViIGZwcmludGYKKzM3NCBzdHViIGZwdXRjCiszNzUgc3R1YiBmcHV0cworMzc2IHN0dWIgZnB1dHdjCiszNzcgc3R1YiBmcmVhZAorMzc4IHN0dWIgZnJlZQorMzc5IHN0dWIgZnJlb3BlbgorMzgwIHN0dWIgZnJleHAKKzM4MSBzdHViIGZzY2FuZgorMzgyIHN0dWIgZnNlZWsKKzM4MyBzdHViIGZzZXRwb3MKKzM4NCBzdHViIGZ0ZWxsCiszODUgc3R1YiBmd3ByaW50ZgorMzg2IHN0dWIgZndyaXRlCiszODcgc3R1YiBmd3NjYW5mCiszODggc3R1YiBnZXRjCiszODkgc3R1YiBnZXRjaGFyCiszOTAgc3R1YiBnZXRlbnYKKzM5MSBzdHViIGdldHMKKzM5MiBzdHViIGdtdGltZQorMzkzIHN0dWIgaXNfd2N0eXBlCiszOTQgc3R1YiBpc2FsbnVtCiszOTUgc3R1YiBpc2FscGhhCiszOTYgc3R1YiBpc2NudHJsCiszOTcgc3R1YiBpc2RpZ2l0CiszOTggc3R1YiBpc2dyYXBoCiszOTkgc3R1YiBpc2xlYWRieXRlCis0MDAgc3R1YiBpc2xvd2VyCis0MDEgc3R1YiBpc3ByaW50Cis0MDIgc3R1YiBpc3B1bmN0Cis0MDMgc3R1YiBpc3NwYWNlCis0MDQgc3R1YiBpc3VwcGVyCis0MDUgc3R1YiBpc3dhbG51bQorNDA2IHN0dWIgaXN3YWxwaGEKKzQwNyBzdHViIGlzd2FzY2lpCis0MDggc3R1YiBpc3djbnRybAorNDA5IHN0dWIgaXN3Y3R5cGUKKzQxMCBzdHViIGlzd2RpZ2l0Cis0MTEgc3R1YiBpc3dncmFwaAorNDEyIHN0dWIgaXN3bG93ZXIKKzQxMyBzdHViIGlzd3ByaW50Cis0MTQgc3R1YiBpc3dwdW5jdAorNDE1IHN0dWIgaXN3c3BhY2UKKzQxNiBzdHViIGlzd3VwcGVyCis0MTcgc3R1YiBpc3d4ZGlnaXQKKzQxOCBzdHViIGlzeGRpZ2l0Cis0MTkgc3R1YiBsYWJzCis0MjAgc3R1YiBsZGV4cAorNDIxIHN0dWIgbGRpdgorNDIyIHN0dWIgbG9jYWxlY29udgorNDIzIHN0dWIgbG9jYWx0aW1lCis0MjQgc3R1YiBsb2cKKzQyNSBzdHViIGxvZzEwCis0MjYgc3R1YiBsb25nam1wCis0Mjcgc3R1YiBtYWxsb2MKKzQyOCBzdHViIG1ibGVuCis0Mjkgc3R1YiBtYnN0b3djcworNDMwIHN0dWIgbWJ0b3djCis0MzEgc3R1YiBtZW1jaHIKKzQzMiBzdHViIG1lbWNtcAorNDMzIHN0dWIgbWVtY3B5Cis0MzQgc3R1YiBtZW1tb3ZlCis0MzUgc3R1YiBtZW1zZXQKKzQzNiBzdHViIG1rdGltZQorNDM3IHN0dWIgbW9kZgorNDM4IHN0dWIgcGVycm9yCis0Mzkgc3R1YiBwb3cKKzQ0MCBzdHViIHByaW50ZgorNDQxIHN0dWIgcHV0YworNDQyIHN0dWIgcHV0Y2hhcgorNDQzIHN0dWIgcHV0cworNDQ0IHN0dWIgcXNvcnQKKzQ0NSBzdHViIHJhaXNlCis0NDYgc3R1YiByYW5kCis0NDcgc3R1YiByZWFsbG9jCis0NDggc3R1YiByZW1vdmUKKzQ0OSBzdHViIHJlbmFtZQorNDUwIHN0dWIgcmV3aW5kCis0NTEgc3R1YiBzY2FuZgorNDUyIHN0dWIgc2V0YnVmCis0NTMgc3R1YiBzZXRsb2NhbGUKKzQ1NCBzdHViIHNldHZidWYKKzQ1NSBzdHViIHNpZ25hbAorNDU2IHN0dWIgc2luCis0NTcgc3R1YiBzaW5oCis0NTggc3R1YiBzcHJpbnRmCis0NTkgc3R1YiBzcXJ0Cis0NjAgc3R1YiBzcmFuZAorNDYxIHN0dWIgc3NjYW5mCis0NjIgc3R1YiBzdHJjYXQKKzQ2MyBzdHViIHN0cmNocgorNDY0IHN0dWIgc3RyY21wCis0NjUgc3R1YiBzdHJjb2xsCis0NjYgc3R1YiBzdHJjcHkKKzQ2NyBzdHViIHN0cmNzcG4KKzQ2OCBzdHViIHN0cmVycm9yCis0Njkgc3R1YiBzdHJmdGltZQorNDcwIHN0dWIgc3RybGVuCis0NzEgc3R1YiBzdHJuY2F0Cis0NzIgc3R1YiBzdHJuY21wCis0NzMgc3R1YiBzdHJuY3B5Cis0NzQgc3R1YiBzdHJwYnJrCis0NzUgc3R1YiBzdHJyY2hyCis0NzYgc3R1YiBzdHJzcG4KKzQ3NyBzdHViIHN0cnN0cgorNDc4IHN0dWIgc3RydG9kCis0Nzkgc3R1YiBzdHJ0b2sKKzQ4MCBzdHViIHN0cnRvbAorNDgxIHN0dWIgc3RydG91bAorNDgyIHN0dWIgc3RyeGZybQorNDgzIHN0dWIgc3dwcmludGYKKzQ4NCBzdHViIHN3c2NhbmYKKzQ4NSBzdHViIHN5c3RlbQorNDg2IHN0dWIgdGFuCis0ODcgc3R1YiB0YW5oCis0ODggc3R1YiB0aW1lCis0ODkgc3R1YiB0bXBmaWxlCis0OTAgc3R1YiB0bXBuYW0KKzQ5MSBzdHViIHRvbG93ZXIKKzQ5MiBzdHViIHRvdXBwZXIKKzQ5MyBzdHViIHRvd2xvd2VyCis0OTQgc3R1YiB0b3d1cHBlcgorNDk1IHN0dWIgdW5nZXRjCis0OTYgc3R1YiB1bmdldHdjCis0OTcgc3R1YiB2ZnByaW50ZgorNDk4IHN0dWIgdmZ3cHJpbnRmCis0OTkgc3R1YiB2cHJpbnRmCis1MDAgc3R1YiB2c3ByaW50ZgorNTAxIHN0dWIgdnN3cHJpbnRmCis1MDIgc3R1YiB2d3ByaW50ZgorNTAzIHN0dWIgd2NzY2F0Cis1MDQgc3R1YiB3Y3NjaHIKKzUwNSBzdHViIHdjc2NtcAorNTA2IHN0dWIgd2NzY29sbAorNTA3IHN0dWIgd2NzY3B5Cis1MDggc3R1YiB3Y3Njc3BuCis1MDkgc3R1YiB3Y3NmdGltZQorNTEwIHN0dWIgd2NzbGVuCis1MTEgc3R1YiB3Y3NuY2F0Cis1MTIgc3R1YiB3Y3NuY21wCis1MTMgc3R1YiB3Y3NuY3B5Cis1MTQgc3R1YiB3Y3NwYnJrCis1MTUgc3R1YiB3Y3NyY2hyCis1MTYgc3R1YiB3Y3NzcG4KKzUxNyBzdHViIHdjc3N0cgorNTE4IHN0dWIgd2NzdG9kCis1MTkgc3R1YiB3Y3N0b2sKKzUyMCBzdHViIHdjc3RvbAorNTIxIHN0dWIgd2NzdG9tYnMKKzUyMiBzdHViIHdjc3RvdWwKKzUyMyBzdHViIHdjc3hmcm0KKzUyNCBzdHViIHdjdG9tYgorNTI1IHN0dWIgd3ByaW50ZgorNTI2IHN0dWIgd3NjYW5mCmRpZmYgLS1naXQgYS9pZjE2MzIvZ2RpLnNwZWMgYi9pZjE2MzIvZ2RpLnNwZWMKaW5kZXggMGUyMzk0Ni4uOWIxOTU2NCAxMDA2NDQKLS0tIGEvaWYxNjMyL2dkaS5zcGVjCisrKyBiL2lmMTYzMi9nZGkuc3BlYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAxMjUgcGFzY2FsMTYgQ3JlYXRlTWV0YUZpbGUocHRyKSBDcmVhdGVNZXRhRmlsZQogMTI2IHBhc2NhbDE2IENsb3NlTWV0YUZpbGUod29yZCkgQ2xvc2VNZXRhRmlsZQogMTI3IHBhc2NhbDE2IERlbGV0ZU1ldGFGaWxlKHdvcmQpIERlbGV0ZU1ldGFGaWxlCi0xMjggcGFzY2FsMTYgTXVsRGl2KHNfd29yZCBzX3dvcmQgc193b3JkKSBNdWxEaXYKKzEyOCBwYXNjYWwxNiBNdWxEaXYoc193b3JkIHNfd29yZCBzX3dvcmQpIE11bERpdjE2CiAxMjkgcGFzY2FsMTYgU2F2ZVZpc1Jnbih3b3JkKSBTYXZlVmlzUmduCiAxMzAgcGFzY2FsMTYgUmVzdG9yZVZpc1Jnbih3b3JkKSBSZXN0b3JlVmlzUmduCiAxMzEgcGFzY2FsMTYgSW5xdWlyZVZpc1Jnbih3b3JkKSBJbnF1aXJlVmlzUmduCmRpZmYgLS1naXQgYS9pZjE2MzIva2VybmVsLnNwZWMgYi9pZjE2MzIva2VybmVsLnNwZWMKaW5kZXggNjRlOWM1NC4uZDhiNGYzMSAxMDA2NDQKLS0tIGEvaWYxNjMyL2tlcm5lbC5zcGVjCisrKyBiL2lmMTYzMi9rZXJuZWwuc3BlYwpAQCAtNSwyNyArNSwyNyBAQAogMiAgIHN0dWIgRXhpdEtlcm5lbAogMyAgIHBhc2NhbCBHZXRWZXJzaW9uKCkgR2V0VmVyc2lvbgogNCAgIHBhc2NhbDE2IExvY2FsSW5pdCh3b3JkIHdvcmQgd29yZCkgTG9jYWxJbml0Ci01ICAgcGFzY2FsMTYgTG9jYWxBbGxvYyh3b3JkIHdvcmQpIExvY2FsQWxsb2MKLTYgICBwYXNjYWwxNiBMb2NhbFJlQWxsb2Mod29yZCB3b3JkIHdvcmQpIExvY2FsUmVBbGxvYwotNyAgIHBhc2NhbDE2IExvY2FsRnJlZSh3b3JkKSBMb2NhbEZyZWUKLTggICBwYXNjYWwxNiBMb2NhbExvY2sod29yZCkgTG9jYWxMb2NrCi05ICAgcGFzY2FsMTYgTG9jYWxVbmxvY2sod29yZCkgTG9jYWxVbmxvY2sKLTEwICBwYXNjYWwxNiBMb2NhbFNpemUod29yZCkgTG9jYWxTaXplCi0xMSAgcGFzY2FsMTYgTG9jYWxIYW5kbGUod29yZCkgTG9jYWxIYW5kbGUKLTEyICBwYXNjYWwxNiBMb2NhbEZsYWdzKHdvcmQpIExvY2FsRmxhZ3MKLTEzICBwYXNjYWwxNiBMb2NhbENvbXBhY3Qod29yZCkgTG9jYWxDb21wYWN0Cis1ICAgcGFzY2FsMTYgTG9jYWxBbGxvYyh3b3JkIHdvcmQpIExvY2FsQWxsb2MxNgorNiAgIHBhc2NhbDE2IExvY2FsUmVBbGxvYyh3b3JkIHdvcmQgd29yZCkgTG9jYWxSZUFsbG9jMTYKKzcgICBwYXNjYWwxNiBMb2NhbEZyZWUod29yZCkgTG9jYWxGcmVlMTYKKzggICBwYXNjYWwxNiBMb2NhbExvY2sod29yZCkgTG9jYWxMb2NrMTYKKzkgICBwYXNjYWwxNiBMb2NhbFVubG9jayh3b3JkKSBMb2NhbFVubG9jazE2CisxMCAgcGFzY2FsMTYgTG9jYWxTaXplKHdvcmQpIExvY2FsU2l6ZTE2CisxMSAgcGFzY2FsMTYgTG9jYWxIYW5kbGUod29yZCkgTG9jYWxIYW5kbGUxNgorMTIgIHBhc2NhbDE2IExvY2FsRmxhZ3Mod29yZCkgTG9jYWxGbGFnczE2CisxMyAgcGFzY2FsMTYgTG9jYWxDb21wYWN0KHdvcmQpIExvY2FsQ29tcGFjdDE2CiAxNCAgcGFzY2FsMTYgTG9jYWxOb3RpZnkobG9uZykgTG9jYWxOb3RpZnkKLTE1ICBwYXNjYWwxNiBHbG9iYWxBbGxvYyh3b3JkIGxvbmcpIEdsb2JhbEFsbG9jCi0xNiAgcGFzY2FsMTYgR2xvYmFsUmVBbGxvYyh3b3JkIGxvbmcgd29yZCkgR2xvYmFsUmVBbGxvYwotMTcgIHBhc2NhbDE2IEdsb2JhbEZyZWUod29yZCkgR2xvYmFsRnJlZQotMTggIHBhc2NhbCBHbG9iYWxMb2NrKHdvcmQpIFdJTjE2X0dsb2JhbExvY2sKLTE5ICBwYXNjYWwxNiBHbG9iYWxVbmxvY2sod29yZCkgR2xvYmFsVW5sb2NrCi0yMCAgcGFzY2FsIEdsb2JhbFNpemUod29yZCkgR2xvYmFsU2l6ZQotMjEgIHBhc2NhbCBHbG9iYWxIYW5kbGUod29yZCkgR2xvYmFsSGFuZGxlCi0yMiAgcGFzY2FsMTYgR2xvYmFsRmxhZ3Mod29yZCkgR2xvYmFsRmxhZ3MKKzE1ICBwYXNjYWwxNiBHbG9iYWxBbGxvYyh3b3JkIGxvbmcpIEdsb2JhbEFsbG9jMTYKKzE2ICBwYXNjYWwxNiBHbG9iYWxSZUFsbG9jKHdvcmQgbG9uZyB3b3JkKSBHbG9iYWxSZUFsbG9jMTYKKzE3ICBwYXNjYWwxNiBHbG9iYWxGcmVlKHdvcmQpIEdsb2JhbEZyZWUxNgorMTggIHBhc2NhbCBHbG9iYWxMb2NrKHdvcmQpIFdJTjE2X0dsb2JhbExvY2sxNgorMTkgIHBhc2NhbDE2IEdsb2JhbFVubG9jayh3b3JkKSBHbG9iYWxVbmxvY2sxNgorMjAgIHBhc2NhbCBHbG9iYWxTaXplKHdvcmQpIEdsb2JhbFNpemUxNgorMjEgIHBhc2NhbCBHbG9iYWxIYW5kbGUod29yZCkgR2xvYmFsSGFuZGxlMTYKKzIyICBwYXNjYWwxNiBHbG9iYWxGbGFncyh3b3JkKSBHbG9iYWxGbGFnczE2CiAyMyAgcGFzY2FsMTYgTG9ja1NlZ21lbnQod29yZCkgTG9ja1NlZ21lbnQKIDI0ICBwYXNjYWwxNiBVbmxvY2tTZWdtZW50KHdvcmQpIFVubG9ja1NlZ21lbnQKLTI1ICBwYXNjYWwgR2xvYmFsQ29tcGFjdChsb25nKSBHbG9iYWxDb21wYWN0CisyNSAgcGFzY2FsIEdsb2JhbENvbXBhY3QobG9uZykgR2xvYmFsQ29tcGFjdDE2CiAyNiAgcGFzY2FsMTYgR2xvYmFsRnJlZUFsbCh3b3JkKSBHbG9iYWxGcmVlQWxsCiAyNyAgc3R1YiBHZXRNb2R1bGVOYW1lCiAyOCAgc3R1YiBHbG9iYWxNYXN0ZXJIYW5kbGUKQEAgLTExMSwxMyArMTExLDEzIEBACiAxMTIgcGFzY2FsMTYgR2xvYmFsVW5XaXJlKHdvcmQpIEdsb2JhbFVuV2lyZQogMTEzIGVxdWF0ZSBfX0FIU0hJRlQgMwogMTE0IGVxdWF0ZSBfX0FISU5DUiA4Ci0xMTUgcGFzY2FsIE91dHB1dERlYnVnU3RyaW5nKHB0cikgT3V0cHV0RGVidWdTdHJpbmcKKzExNSBwYXNjYWwxNiBPdXRwdXREZWJ1Z1N0cmluZyhwdHIpIE91dHB1dERlYnVnU3RyaW5nCiAxMTYgc3R1YiBJbml0TGliCiAxMTcgcGFzY2FsMTYgT2xkWWllbGQoKSBPbGRZaWVsZAogMTE4IHJlZ2lzdGVyIEdldFRhc2tRdWV1ZURTKCkgR2V0VGFza1F1ZXVlRFMKIDExOSByZWdpc3RlciBHZXRUYXNrUXVldWVFUygpIEdldFRhc2tRdWV1ZUVTCiAxMjAgc3R1YiBVbmRlZkR5bkxpbmsKLTEyMSBwYXNjYWwxNiBMb2NhbFNocmluayh3b3JkIHdvcmQpIExvY2FsU2hyaW5rCisxMjEgcGFzY2FsMTYgTG9jYWxTaHJpbmsod29yZCB3b3JkKSBMb2NhbFNocmluazE2CiAxMjIgcGFzY2FsMTYgSXNUYXNrTG9ja2VkKCkgSXNUYXNrTG9ja2VkCiAxMjMgc3R1YiBLYmRSc3QKIDEyNCByZXR1cm4gRW5hYmxlS2VybmVsIDAgMApkaWZmIC0tZ2l0IGEvaWYxNjMyL2tlcm5lbDMyLnNwZWMgYi9pZjE2MzIva2VybmVsMzIuc3BlYwppbmRleCA3N2MwOTVmLi5mZTk5MTcwIDEwMDY0NAotLS0gYS9pZjE2MzIva2VybmVsMzIuc3BlYworKysgYi9pZjE2MzIva2VybmVsMzIuc3BlYwpAQCAtMzE4LDI0ICszMTgsMjQgQEAKIDAzMTIgc3R1YiBHZXRXaW5kb3dzRGlyZWN0b3J5VwogMDMxMyBzdGRjYWxsIEdsb2JhbEFkZEF0b21BKGxvbmcpIFdJTjMyX0dsb2JhbEFkZEF0b21BCiAwMzE0IHN0dWIgR2xvYmFsQWRkQXRvbVcKLTAzMTUJc3RkY2FsbCBHbG9iYWxBbGxvYyhsb25nIGxvbmcpCUdsb2JhbEFsbG9jMzIKLTAzMTYgc3R1YiBHbG9iYWxDb21wYWN0CiswMzE1IHN0ZGNhbGwgR2xvYmFsQWxsb2MobG9uZyBsb25nKSBHbG9iYWxBbGxvYzMyCiswMzE2IHN0ZGNhbGwgR2xvYmFsQ29tcGFjdChsb25nKSBHbG9iYWxDb21wYWN0MzIKIDAzMTcgc3R1YiBHbG9iYWxEZWxldGVBdG9tCiAwMzE4IHN0dWIgR2xvYmFsRmluZEF0b21BCiAwMzE5IHN0dWIgR2xvYmFsRmluZEF0b21XCiAwMzIwIHN0dWIgR2xvYmFsRml4Ci0wMzIxIHN0dWIgR2xvYmFsRmxhZ3MKLTAzMjIgc3R1YiBHbG9iYWxGcmVlCiswMzIxIHN0ZGNhbGwgR2xvYmFsRmxhZ3MobG9uZykgR2xvYmFsRmxhZ3MzMgorMDMyMiBzdGRjYWxsIEdsb2JhbEZyZWUobG9uZykgR2xvYmFsRnJlZTMyCiAwMzIzIHN0dWIgR2xvYmFsR2V0QXRvbU5hbWVBCiAwMzI0IHN0dWIgR2xvYmFsR2V0QXRvbU5hbWVXCi0wMzI1IHN0dWIgR2xvYmFsSGFuZGxlCi0wMzI2IHN0ZGNhbGwgR2xvYmFsTG9jayhsb25nKQlHbG9iYWxMb2NrMzIKKzAzMjUgc3RkY2FsbCBHbG9iYWxIYW5kbGUocHRyKSBHbG9iYWxIYW5kbGUzMgorMDMyNiBzdGRjYWxsIEdsb2JhbExvY2sobG9uZykgR2xvYmFsTG9jazMyCiAwMzI3IHN0dWIgR2xvYmFsTWVtb3J5U3RhdHVzCi0wMzI4IHN0dWIgR2xvYmFsUmVBbGxvYwotMDMyOSBzdHViIEdsb2JhbFNpemUKKzAzMjggc3RkY2FsbCBHbG9iYWxSZUFsbG9jKGxvbmcgbG9uZyBsb25nKSBHbG9iYWxSZUFsbG9jMzIKKzAzMjkgc3RkY2FsbCBHbG9iYWxTaXplKGxvbmcpIEdsb2JhbFNpemUzMgogMDMzMCBzdHViIEdsb2JhbFVuV2lyZQogMDMzMSBzdHViIEdsb2JhbFVuZml4Ci0wMzMyIHN0dWIgR2xvYmFsVW5sb2NrCiswMzMyIHN0ZGNhbGwgR2xvYmFsVW5sb2NrKGxvbmcpIEdsb2JhbFVubG9jazMyCiAwMzMzIHN0dWIgR2xvYmFsV2lyZQogMDMzNCBzdGRjYWxsIEhlYXBBbGxvYyhsb25nIGxvbmcgbG9uZykgSGVhcEFsbG9jCiAwMzM1IHN0ZGNhbGwgSGVhcENvbXBhY3QobG9uZyBsb25nKSBIZWFwQ29tcGFjdApAQCAtMzU0LDcgKzM1NCw3IEBACiAwMzQ4IHN0dWIgSW50ZXJsb2NrZWRFeGNoYW5nZQogMDM0OSBzdHViIEludGVybG9ja2VkSW5jcmVtZW50CiAwMzUwIHN0dWIgSW52YWxpZGF0ZUNvbnNvbGVESUJpdHMKLTAzNTEgc3R1YiBJc0JhZENvZGVQdHIKKzAzNTEgc3RkY2FsbCBJc0JhZENvZGVQdHIocHRyIGxvbmcpCVdJTjMyX0lzQmFkQ29kZVB0cgogMDM1MiBzdHViIElzQmFkSHVnZVJlYWRQdHIKIDAzNTMgc3R1YiBJc0JhZEh1Z2VXcml0ZVB0cgogMDM1NCBzdGRjYWxsIElzQmFkUmVhZFB0cihwdHIgbG9uZykJV0lOMzJfSXNCYWRSZWFkUHRyCkBAIC0zNzQsMTcgKzM3NCwxNyBAQAogMDM2OCBzdHViIExvYWRMaWJyYXJ5VwogMDM2OSBzdHViIExvYWRNb2R1bGUKIDAzNzAgc3RkY2FsbCBMb2FkUmVzb3VyY2UobG9uZyBsb25nKSBMb2FkUmVzb3VyY2UzMgotMDM3MQlzdGRjYWxsIExvY2FsQWxsb2MobG9uZyBsb25nKQlHbG9iYWxBbGxvYzMyCi0wMzcyIHN0dWIgTG9jYWxDb21wYWN0CiswMzcxIHN0ZGNhbGwgTG9jYWxBbGxvYyhsb25nIGxvbmcpIExvY2FsQWxsb2MzMgorMDM3MiBzdGRjYWxsIExvY2FsQ29tcGFjdChsb25nKSBMb2NhbENvbXBhY3QzMgogMDM3MyBzdHViIExvY2FsRmlsZVRpbWVUb0ZpbGVUaW1lCi0wMzc0IHN0dWIgTG9jYWxGbGFncwotMDM3NSBzdHViIExvY2FsRnJlZQotMDM3NiBzdHViIExvY2FsSGFuZGxlCi0wMzc3IHN0ZGNhbGwgTG9jYWxMb2NrKGxvbmcpCUdsb2JhbExvY2szMgotMDM3OCBzdHViIExvY2FsUmVBbGxvYwotMDM3OSBzdHViIExvY2FsU2hyaW5rCi0wMzgwIHN0dWIgTG9jYWxTaXplCi0wMzgxIHN0dWIgTG9jYWxVbmxvY2sKKzAzNzQgc3RkY2FsbCBMb2NhbEZsYWdzKGxvbmcpIExvY2FsRmxhZ3MzMgorMDM3NSBzdGRjYWxsIExvY2FsRnJlZShsb25nKSBMb2NhbEZyZWUzMgorMDM3NiBzdGRjYWxsIExvY2FsSGFuZGxlKHB0cikgTG9jYWxIYW5kbGUzMgorMDM3NyBzdGRjYWxsIExvY2FsTG9jayhsb25nKSBMb2NhbExvY2szMgorMDM3OCBzdGRjYWxsIExvY2FsUmVBbGxvYyhsb25nIGxvbmcgbG9uZykgTG9jYWxSZUFsbG9jMzIKKzAzNzkgc3RkY2FsbCBMb2NhbFNocmluayhsb25nIGxvbmcpIExvY2FsU2hyaW5rMzIKKzAzODAgc3RkY2FsbCBMb2NhbFNpemUobG9uZykgTG9jYWxTaXplMzIKKzAzODEgc3RkY2FsbCBMb2NhbFVubG9jayhsb25nKSBMb2NhbFVubG9jazMyCiAwMzgyIHN0dWIgTG9ja0ZpbGUKIDAzODMgc3R1YiBMb2NrRmlsZUV4CiAwMzg0IHN0dWIgTG9ja1Jlc291cmNlCkBAIC0zOTQsNyArMzk0LDcgQEAKIDAzODggc3R1YiBNb3ZlRmlsZUV4QQogMDM4OSBzdHViIE1vdmVGaWxlRXhXCiAwMzkwIHN0dWIgTW92ZUZpbGVXCi0wMzkxIHN0dWIgTXVsRGl2CiswMzkxIHN0ZGNhbGwgTXVsRGl2KGxvbmcgbG9uZyBsb25nKSBNdWxEaXYzMgogMDM5MiBzdGRjYWxsIE11bHRpQnl0ZVRvV2lkZUNoYXIobG9uZyBsb25nIHB0ciBsb25nIHB0ciBsb25nKSBNdWx0aUJ5dGVUb1dpZGVDaGFyCiAwMzkzIHN0dWIgT3BlbkNvbnNvbGVXCiAwMzk0IHN0dWIgT3BlbkV2ZW50QQpkaWZmIC0tZ2l0IGEvaWYxNjMyL250ZGxsLnNwZWMgYi9pZjE2MzIvbnRkbGwuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQ5ZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaWYxNjMyL250ZGxsLnNwZWMKQEAgLTAsMCArMSw5NTQgQEAKK25hbWUJbnRkbGwKK3R5cGUJd2luMzIKK2Jhc2UJMAorCiswMDEgc3R1YiBDc3JBbGxvY2F0ZUNhcHR1cmVCdWZmZXIKKzAwMiBzdHViIENzckFsbG9jYXRlQ2FwdHVyZVBvaW50ZXIKKzAwMyBzdHViIENzckFsbG9jYXRlTWVzc2FnZVBvaW50ZXIKKzAwNCBzdHViIENzckNhcHR1cmVNZXNzYWdlQnVmZmVyCiswMDUgc3R1YiBDc3JDYXB0dXJlTWVzc2FnZVN0cmluZworMDA2IHN0dWIgQ3NyQ2FwdHVyZVRpbWVvdXQKKzAwNyBzdHViIENzckNsaWVudENhbGxTZXJ2ZXIKKzAwOCBzdHViIENzckNsaWVudENvbm5lY3RUb1NlcnZlcgorMDA5IHN0dWIgQ3NyQ2xpZW50TWF4TWVzc2FnZQorMDEwIHN0dWIgQ3NyQ2xpZW50U2VuZE1lc3NhZ2UKKzAxMSBzdHViIENzckNsaWVudFRocmVhZENvbm5lY3QKKzAxMiBzdHViIENzckZyZWVDYXB0dXJlQnVmZmVyCiswMTMgc3R1YiBDc3JJZGVudGlmeUFsZXJ0YWJsZVRocmVhZAorMDE0IHN0dWIgQ3NyTmV3VGhyZWFkCiswMTUgc3R1YiBDc3JQcm9iZUZvclJlYWQKKzAxNiBzdHViIENzclByb2JlRm9yV3JpdGUKKzAxNyBzdHViIENzclNldFByaW9yaXR5Q2xhc3MKKzAxOCBzdHViIENzcnBQcm9jZXNzQ2FsbGJhY2tSZXF1ZXN0CiswMTkgc3R1YiBEYmdCcmVha1BvaW50CiswMjAgc3R1YiBEYmdQcmludAorMDIxIHN0dWIgRGJnUHJvbXB0CiswMjIgc3R1YiBEYmdTc0hhbmRsZUttQXBpTXNnCiswMjMgc3R1YiBEYmdTc0luaXRpYWxpemUKKzAyNCBzdHViIERiZ1VpQ29ubmVjdFRvRGJnCiswMjUgc3R1YiBEYmdVaUNvbnRpbnVlCiswMjYgc3R1YiBEYmdVaVdhaXRTdGF0ZUNoYW5nZQorMDI3IHN0dWIgRGJnVXNlckJyZWFrUG9pbnQKKzAyOCBzdHViIEtpVXNlckFwY0Rpc3BhdGNoZXIKKzAyOSBzdHViIEtpVXNlckNhbGxiYWNrRGlzcGF0Y2hlcgorMDMwIHN0dWIgS2lVc2VyRXhjZXB0aW9uRGlzcGF0Y2hlcgorMDMxIHN0dWIgTGRyQWNjZXNzUmVzb3VyY2UKKzAzMiBzdHViIExkckRpc2FibGVUaHJlYWRDYWxsb3V0c0ZvckRsbAorMDMzIHN0dWIgTGRyRW51bVJlc291cmNlcworMDM0IHN0dWIgTGRyRmluZEVudHJ5Rm9yQWRkcmVzcworMDM1IHN0dWIgTGRyRmluZFJlc291cmNlRGlyZWN0b3J5X1UKKzAzNiBzdHViIExkckZpbmRSZXNvdXJjZV9VCiswMzcgc3R1YiBMZHJHZXREbGxIYW5kbGUKKzAzOCBzdHViIExkckdldFByb2NlZHVyZUFkZHJlc3MKKzAzOSBzdHViIExkckluaXRpYWxpemVUaHVuaworMDQwIHN0dWIgTGRyTG9hZERsbAorMDQxIHN0dWIgTGRyUHJvY2Vzc1JlbG9jYXRpb25CbG9jaworMDQyIHN0dWIgTGRyUXVlcnlJbWFnZUZpbGVFeGVjdXRpb25PcHRpb25zCiswNDMgc3R1YiBMZHJRdWVyeVByb2Nlc3NNb2R1bGVJbmZvcm1hdGlvbgorMDQ0IHN0dWIgTGRyU2h1dGRvd25Qcm9jZXNzCiswNDUgc3R1YiBMZHJTaHV0ZG93blRocmVhZAorMDQ2IHN0dWIgTGRyVW5sb2FkRGxsCiswNDcgc3R1YiBMZHJWZXJpZnlJbWFnZU1hdGNoZXNDaGVja3N1bQorMDQ4IHN0dWIgTlBYRU1VTEFUT1JUQUJMRQorMDQ5IHN0dWIgTmxzTWJDb2RlUGFnZVRhZworMDUwIHN0dWIgTmxzTWJPZW1Db2RlUGFnZVRhZworMDUxIHN0dWIgTnRBY2NlcHRDb25uZWN0UG9ydAorMDUyIHN0dWIgTnRBY2Nlc3NDaGVjaworMDUzIHN0dWIgTnRBY2Nlc3NDaGVja0FuZEF1ZGl0QWxhcm0KKzA1NCBzdHViIE50QWRqdXN0R3JvdXBzVG9rZW4KKzA1NSBzdHViIE50QWRqdXN0UHJpdmlsZWdlc1Rva2VuCiswNTYgc3R1YiBOdEFsZXJ0UmVzdW1lVGhyZWFkCiswNTcgc3R1YiBOdEFsZXJ0VGhyZWFkCiswNTggc3R1YiBOdEFsbG9jYXRlTG9jYWxseVVuaXF1ZUlkCiswNTkgc3R1YiBOdEFsbG9jYXRlVXVpZHMKKzA2MCBzdHViIE50QWxsb2NhdGVWaXJ0dWFsTWVtb3J5CiswNjEgc3R1YiBOdENhbGxiYWNrUmV0dXJuCiswNjIgc3R1YiBOdENhbmNlbElvRmlsZQorMDYzIHN0dWIgTnRDYW5jZWxUaW1lcgorMDY0IHN0dWIgTnRDbGVhckV2ZW50CiswNjUgc3R1YiBOdENsb3NlCiswNjYgc3R1YiBOdENsb3NlT2JqZWN0QXVkaXRBbGFybQorMDY3IHN0dWIgTnRDb21wbGV0ZUNvbm5lY3RQb3J0CiswNjggc3R1YiBOdENvbm5lY3RQb3J0CiswNjkgc3R1YiBOdENvbnRpbnVlCiswNzAgc3R1YiBOdENyZWF0ZURpcmVjdG9yeU9iamVjdAorMDcxIHN0dWIgTnRDcmVhdGVFdmVudAorMDcyIHN0dWIgTnRDcmVhdGVFdmVudFBhaXIKKzA3MyBzdHViIE50Q3JlYXRlRmlsZQorMDc0IHN0dWIgTnRDcmVhdGVJb0NvbXBsZXRpb24KKzA3NSBzdHViIE50Q3JlYXRlS2V5CiswNzYgc3R1YiBOdENyZWF0ZU1haWxzbG90RmlsZQorMDc3IHN0dWIgTnRDcmVhdGVNdXRhbnQKKzA3OCBzdHViIE50Q3JlYXRlTmFtZWRQaXBlRmlsZQorMDc5IHN0dWIgTnRDcmVhdGVQYWdpbmdGaWxlCiswODAgc3R1YiBOdENyZWF0ZVBvcnQKKzA4MSBzdHViIE50Q3JlYXRlUHJvY2VzcworMDgyIHN0dWIgTnRDcmVhdGVQcm9maWxlCiswODMgc3R1YiBOdENyZWF0ZVNlY3Rpb24KKzA4NCBzdHViIE50Q3JlYXRlU2VtYXBob3JlCiswODUgc3R1YiBOdENyZWF0ZVN5bWJvbGljTGlua09iamVjdAorMDg2IHN0dWIgTnRDcmVhdGVUaHJlYWQKKzA4NyBzdHViIE50Q3JlYXRlVGltZXIKKzA4OCBzdHViIE50Q3JlYXRlVG9rZW4KKzA4OSBzdHViIE50Q3VycmVudFRlYgorMDkwIHN0dWIgTnREZWxheUV4ZWN1dGlvbgorMDkxIHN0dWIgTnREZWxldGVGaWxlCiswOTIgc3R1YiBOdERlbGV0ZUtleQorMDkzIHN0dWIgTnREZWxldGVWYWx1ZUtleQorMDk0IHN0dWIgTnREZXZpY2VJb0NvbnRyb2xGaWxlCiswOTUgc3R1YiBOdERpc3BsYXlTdHJpbmcKKzA5NiBzdHViIE50RHVwbGljYXRlT2JqZWN0CiswOTcgc3R1YiBOdER1cGxpY2F0ZVRva2VuCiswOTggc3R1YiBOdEVudW1lcmF0ZUJ1cworMDk5IHN0dWIgTnRFbnVtZXJhdGVLZXkKKzEwMCBzdHViIE50RW51bWVyYXRlVmFsdWVLZXkKKzEwMSBzdHViIE50RXh0ZW5kU2VjdGlvbgorMTAyIHN0dWIgTnRGbHVzaEJ1ZmZlcnNGaWxlCisxMDMgc3R1YiBOdEZsdXNoSW5zdHJ1Y3Rpb25DYWNoZQorMTA0IHN0dWIgTnRGbHVzaEtleQorMTA1IHN0dWIgTnRGbHVzaFZpcnR1YWxNZW1vcnkKKzEwNiBzdHViIE50Rmx1c2hXcml0ZUJ1ZmZlcgorMTA3IHN0dWIgTnRGcmVlVmlydHVhbE1lbW9yeQorMTA4IHN0dWIgTnRGc0NvbnRyb2xGaWxlCisxMDkgc3R1YiBOdEdldENvbnRleHRUaHJlYWQKKzExMCBzdHViIE50R2V0UGx1Z1BsYXlFdmVudAorMTExIHN0dWIgTnRHZXRUaWNrQ291bnQKKzExMiBzdHViIE50SW1wZXJzb25hdGVDbGllbnRPZlBvcnQKKzExMyBzdHViIE50SW1wZXJzb25hdGVUaHJlYWQKKzExNCBzdHViIE50SW5pdGlhbGl6ZVJlZ2lzdHJ5CisxMTUgc3R1YiBOdExpc3RlblBvcnQKKzExNiBzdHViIE50TG9hZERyaXZlcgorMTE3IHN0dWIgTnRMb2FkS2V5CisxMTggc3R1YiBOdExvY2tGaWxlCisxMTkgc3R1YiBOdExvY2tWaXJ0dWFsTWVtb3J5CisxMjAgc3R1YiBOdE1ha2VUZW1wb3JhcnlPYmplY3QKKzEyMSBzdHViIE50TWFwVmlld09mU2VjdGlvbgorMTIyIHN0dWIgTnROb3RpZnlDaGFuZ2VEaXJlY3RvcnlGaWxlCisxMjMgc3R1YiBOdE5vdGlmeUNoYW5nZUtleQorMTI0IHN0dWIgTnRPcGVuRGlyZWN0b3J5T2JqZWN0CisxMjUgc3R1YiBOdE9wZW5FdmVudAorMTI2IHN0dWIgTnRPcGVuRXZlbnRQYWlyCisxMjcgc3R1YiBOdE9wZW5GaWxlCisxMjggc3R1YiBOdE9wZW5Jb0NvbXBsZXRpb24KKzEyOSBzdHViIE50T3BlbktleQorMTMwIHN0dWIgTnRPcGVuTXV0YW50CisxMzEgc3R1YiBOdE9wZW5PYmplY3RBdWRpdEFsYXJtCisxMzIgc3R1YiBOdE9wZW5Qcm9jZXNzCisxMzMgc3R1YiBOdE9wZW5Qcm9jZXNzVG9rZW4KKzEzNCBzdHViIE50T3BlblNlY3Rpb24KKzEzNSBzdHViIE50T3BlblNlbWFwaG9yZQorMTM2IHN0dWIgTnRPcGVuU3ltYm9saWNMaW5rT2JqZWN0CisxMzcgc3R1YiBOdE9wZW5UaHJlYWQKKzEzOCBzdHViIE50T3BlblRocmVhZFRva2VuCisxMzkgc3R1YiBOdE9wZW5UaW1lcgorMTQwIHN0dWIgTnRQbHVnUGxheUNvbnRyb2wKKzE0MSBzdHViIE50UHJpdmlsZWdlQ2hlY2sKKzE0MiBzdHViIE50UHJpdmlsZWdlT2JqZWN0QXVkaXRBbGFybQorMTQzIHN0dWIgTnRQcml2aWxlZ2VkU2VydmljZUF1ZGl0QWxhcm0KKzE0NCBzdHViIE50UHJvdGVjdFZpcnR1YWxNZW1vcnkKKzE0NSBzdHViIE50UHVsc2VFdmVudAorMTQ2IHN0dWIgTnRRdWVyeUF0dHJpYnV0ZXNGaWxlCisxNDcgc3R1YiBOdFF1ZXJ5RGVmYXVsdExvY2FsZQorMTQ4IHN0dWIgTnRRdWVyeURpcmVjdG9yeUZpbGUKKzE0OSBzdHViIE50UXVlcnlEaXJlY3RvcnlPYmplY3QKKzE1MCBzdHViIE50UXVlcnlFYUZpbGUKKzE1MSBzdHViIE50UXVlcnlFdmVudAorMTUyIHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uRmlsZQorMTUzIHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uUG9ydAorMTU0IHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uUHJvY2VzcworMTU1IHN0dWIgTnRRdWVyeUluZm9ybWF0aW9uVGhyZWFkCisxNTYgc3R1YiBOdFF1ZXJ5SW5mb3JtYXRpb25Ub2tlbgorMTU3IHN0dWIgTnRRdWVyeUludGVydmFsUHJvZmlsZQorMTU4IHN0dWIgTnRRdWVyeUlvQ29tcGxldGlvbgorMTU5IHN0dWIgTnRRdWVyeUtleQorMTYwIHN0dWIgTnRRdWVyeU11dGFudAorMTYxIHN0dWIgTnRRdWVyeU9iamVjdAorMTYyIHN0dWIgTnRRdWVyeVBlcmZvcm1hbmNlQ291bnRlcgorMTYzIHN0dWIgTnRRdWVyeVNlY3Rpb24KKzE2NCBzdHViIE50UXVlcnlTZWN1cml0eU9iamVjdAorMTY1IHN0dWIgTnRRdWVyeVNlbWFwaG9yZQorMTY2IHN0dWIgTnRRdWVyeVN5bWJvbGljTGlua09iamVjdAorMTY3IHN0dWIgTnRRdWVyeVN5c3RlbUVudmlyb25tZW50VmFsdWUKKzE2OCBzdHViIE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbgorMTY5IHN0dWIgTnRRdWVyeVN5c3RlbVRpbWUKKzE3MCBzdHViIE50UXVlcnlUaW1lcgorMTcxIHN0dWIgTnRRdWVyeVRpbWVyUmVzb2x1dGlvbgorMTcyIHN0dWIgTnRRdWVyeVZhbHVlS2V5CisxNzMgc3R1YiBOdFF1ZXJ5VmlydHVhbE1lbW9yeQorMTc0IHN0dWIgTnRRdWVyeVZvbHVtZUluZm9ybWF0aW9uRmlsZQorMTc1IHN0dWIgTnRSYWlzZUV4Y2VwdGlvbgorMTc2IHN0dWIgTnRSYWlzZUhhcmRFcnJvcgorMTc3IHN0dWIgTnRSZWFkRmlsZQorMTc4IHN0dWIgTnRSZWFkUmVxdWVzdERhdGEKKzE3OSBzdHViIE50UmVhZFZpcnR1YWxNZW1vcnkKKzE4MCBzdHViIE50UmVnaXN0ZXJOZXdEZXZpY2UKKzE4MSBzdHViIE50UmVnaXN0ZXJUaHJlYWRUZXJtaW5hdGVQb3J0CisxODIgc3R1YiBOdFJlbGVhc2VNdXRhbnQKKzE4MyBzdHViIE50UmVsZWFzZVByb2Nlc3NNdXRhbnQKKzE4NCBzdHViIE50UmVsZWFzZVNlbWFwaG9yZQorMTg1IHN0dWIgTnRSZW1vdmVJb0NvbXBsZXRpb24KKzE4NiBzdHViIE50UmVwbGFjZUtleQorMTg3IHN0dWIgTnRSZXBseVBvcnQKKzE4OCBzdHViIE50UmVwbHlXYWl0UmVjZWl2ZVBvcnQKKzE4OSBzdHViIE50UmVwbHlXYWl0UmVwbHlQb3J0CisxOTAgc3R1YiBOdFJlcXVlc3RQb3J0CisxOTEgc3R1YiBOdFJlcXVlc3RXYWl0UmVwbHlQb3J0CisxOTIgc3R1YiBOdFJlc2V0RXZlbnQKKzE5MyBzdHViIE50UmVzdG9yZUtleQorMTk0IHN0dWIgTnRSZXN1bWVUaHJlYWQKKzE5NSBzdHViIE50U2F2ZUtleQorMTk2IHN0dWIgTnRTZXRDb250ZXh0VGhyZWFkCisxOTcgc3R1YiBOdFNldERlZmF1bHRIYXJkRXJyb3JQb3J0CisxOTggc3R1YiBOdFNldERlZmF1bHRMb2NhbGUKKzE5OSBzdHViIE50U2V0RWFGaWxlCisyMDAgc3R1YiBOdFNldEV2ZW50CisyMDEgc3R1YiBOdFNldEhpZ2hFdmVudFBhaXIKKzIwMiBzdHViIE50U2V0SGlnaFdhaXRMb3dFdmVudFBhaXIKKzIwMyBzdHViIE50U2V0SGlnaFdhaXRMb3dUaHJlYWQKKzIwNCBzdHViIE50U2V0SW5mb3JtYXRpb25GaWxlCisyMDUgc3R1YiBOdFNldEluZm9ybWF0aW9uS2V5CisyMDYgc3R1YiBOdFNldEluZm9ybWF0aW9uT2JqZWN0CisyMDcgc3R1YiBOdFNldEluZm9ybWF0aW9uUHJvY2VzcworMjA4IHN0dWIgTnRTZXRJbmZvcm1hdGlvblRocmVhZAorMjA5IHN0dWIgTnRTZXRJbmZvcm1hdGlvblRva2VuCisyMTAgc3R1YiBOdFNldEludGVydmFsUHJvZmlsZQorMjExIHN0dWIgTnRTZXRJb0NvbXBsZXRpb24KKzIxMiBzdHViIE50U2V0TGR0RW50cmllcworMjEzIHN0dWIgTnRTZXRMb3dFdmVudFBhaXIKKzIxNCBzdHViIE50U2V0TG93V2FpdEhpZ2hFdmVudFBhaXIKKzIxNSBzdHViIE50U2V0TG93V2FpdEhpZ2hUaHJlYWQKKzIxNiBzdHViIE50U2V0U2VjdXJpdHlPYmplY3QKKzIxNyBzdHViIE50U2V0U3lzdGVtRW52aXJvbm1lbnRWYWx1ZQorMjE4IHN0dWIgTnRTZXRTeXN0ZW1JbmZvcm1hdGlvbgorMjE5IHN0dWIgTnRTZXRTeXN0ZW1Qb3dlclN0YXRlCisyMjAgc3R1YiBOdFNldFN5c3RlbVRpbWUKKzIyMSBzdHViIE50U2V0VGltZXIKKzIyMiBzdHViIE50U2V0VGltZXJSZXNvbHV0aW9uCisyMjMgc3R1YiBOdFNldFZhbHVlS2V5CisyMjQgc3R1YiBOdFNldFZvbHVtZUluZm9ybWF0aW9uRmlsZQorMjI1IHN0dWIgTnRTaHV0ZG93blN5c3RlbQorMjI2IHN0dWIgTnRTdGFydFByb2ZpbGUKKzIyNyBzdHViIE50U3RvcFByb2ZpbGUKKzIyOCBzdHViIE50U3VzcGVuZFRocmVhZAorMjI5IHN0dWIgTnRTeXN0ZW1EZWJ1Z0NvbnRyb2wKKzIzMCBzdHViIE50VGVybWluYXRlUHJvY2VzcworMjMxIHN0dWIgTnRUZXJtaW5hdGVUaHJlYWQKKzIzMiBzdHViIE50VGVzdEFsZXJ0CisyMzMgc3R1YiBOdFVubG9hZERyaXZlcgorMjM0IHN0dWIgTnRVbmxvYWRLZXkKKzIzNSBzdHViIE50VW5sb2NrRmlsZQorMjM2IHN0dWIgTnRVbmxvY2tWaXJ0dWFsTWVtb3J5CisyMzcgc3R1YiBOdFVubWFwVmlld09mU2VjdGlvbgorMjM4IHN0dWIgTnRWZG1Db250cm9sCisyMzkgc3R1YiBOdFczMkNhbGwKKzI0MCBzdHViIE50V2FpdEZvck11bHRpcGxlT2JqZWN0cworMjQxIHN0dWIgTnRXYWl0Rm9yUHJvY2Vzc011dGFudAorMjQyIHN0dWIgTnRXYWl0Rm9yU2luZ2xlT2JqZWN0CisyNDMgc3R1YiBOdFdhaXRIaWdoRXZlbnRQYWlyCisyNDQgc3R1YiBOdFdhaXRMb3dFdmVudFBhaXIKKzI0NSBzdHViIE50V3JpdGVGaWxlCisyNDYgc3R1YiBOdFdyaXRlUmVxdWVzdERhdGEKKzI0NyBzdHViIE50V3JpdGVWaXJ0dWFsTWVtb3J5CisyNDggc3R1YiBQZnhGaW5kUHJlZml4CisyNDkgc3R1YiBQZnhJbml0aWFsaXplCisyNTAgc3R1YiBQZnhJbnNlcnRQcmVmaXgKKzI1MSBzdHViIFBmeFJlbW92ZVByZWZpeAorMjUyIHN0dWIgUmVzdG9yZUVtODdDb250ZXh0CisyNTMgc3R1YiBSdGxBYm9ydFJYYWN0CisyNTQgc3R1YiBSdGxBYnNvbHV0ZVRvU2VsZlJlbGF0aXZlU0QKKzI1NSBzdHViIFJ0bEFjcXVpcmVQZWJMb2NrCisyNTYgc3R1YiBSdGxBY3F1aXJlUmVzb3VyY2VFeGNsdXNpdmUKKzI1NyBzdHViIFJ0bEFjcXVpcmVSZXNvdXJjZVNoYXJlZAorMjU4IHN0dWIgUnRsQWRkQWNjZXNzQWxsb3dlZEFjZQorMjU5IHN0dWIgUnRsQWRkQWNjZXNzRGVuaWVkQWNlCisyNjAgc3R1YiBSdGxBZGRBY2UKKzI2MSBzdHViIFJ0bEFkZEFjdGlvblRvUlhhY3QKKzI2MiBzdHViIFJ0bEFkZEF0dHJpYnV0ZUFjdGlvblRvUlhhY3QKKzI2MyBzdHViIFJ0bEFkZEF1ZGl0QWNjZXNzQWNlCisyNjQgc3R1YiBSdGxBZGp1c3RQcml2aWxlZ2UKKzI2NSBzdHViIFJ0bEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZAorMjY2IHN0dWIgUnRsQWxsb2NhdGVIZWFwCisyNjcgc3R1YiBSdGxBbnNpQ2hhclRvVW5pY29kZUNoYXIKKzI2OCBzdHViIFJ0bEFuc2lTdHJpbmdUb1VuaWNvZGVTaXplCisyNjkgc3R1YiBSdGxBbnNpU3RyaW5nVG9Vbmljb2RlU3RyaW5nCisyNzAgc3R1YiBSdGxBcHBlbmRBc2NpaXpUb1N0cmluZworMjcxIHN0dWIgUnRsQXBwZW5kU3RyaW5nVG9TdHJpbmcKKzI3MiBzdHViIFJ0bEFwcGVuZFVuaWNvZGVTdHJpbmdUb1N0cmluZworMjczIHN0dWIgUnRsQXBwZW5kVW5pY29kZVRvU3RyaW5nCisyNzQgc3R1YiBSdGxBcHBseVJYYWN0CisyNzUgc3R1YiBSdGxBcHBseVJYYWN0Tm9GbHVzaAorMjc2IHN0dWIgUnRsQXJlQWxsQWNjZXNzZXNHcmFudGVkCisyNzcgc3R1YiBSdGxBcmVBbnlBY2Nlc3Nlc0dyYW50ZWQKKzI3OCBzdHViIFJ0bEFyZUJpdHNDbGVhcgorMjc5IHN0dWIgUnRsQXJlQml0c1NldAorMjgwIHN0dWIgUnRsQXNzZXJ0CisyODEgc3R1YiBSdGxDYXB0dXJlU3RhY2tCYWNrVHJhY2UKKzI4MiBzdHViIFJ0bENoYXJUb0ludGVnZXIKKzI4MyBzdHViIFJ0bENoZWNrUmVnaXN0cnlLZXkKKzI4NCBzdHViIFJ0bENsZWFyQWxsQml0cworMjg1IHN0dWIgUnRsQ2xlYXJCaXRzCisyODYgc3R1YiBSdGxDb21wYWN0SGVhcAorMjg3IHN0dWIgUnRsQ29tcGFyZU1lbW9yeQorMjg4IHN0dWIgUnRsQ29tcGFyZU1lbW9yeVVsb25nCisyODkgc3R1YiBSdGxDb21wYXJlU3RyaW5nCisyOTAgc3R1YiBSdGxDb21wYXJlVW5pY29kZVN0cmluZworMjkxIHN0dWIgUnRsQ29tcHJlc3NCdWZmZXIKKzI5MiBzdHViIFJ0bENvbnNvbGVNdWx0aUJ5dGVUb1VuaWNvZGVOCisyOTMgc3R1YiBSdGxDb252ZXJ0RXhjbHVzaXZlVG9TaGFyZWQKKzI5NCBzdHViIFJ0bENvbnZlcnRMb25nVG9MYXJnZUludGVnZXIKKzI5NSBzdHViIFJ0bENvbnZlcnRTaGFyZWRUb0V4Y2x1c2l2ZQorMjk2IHN0dWIgUnRsQ29udmVydFNpZFRvVW5pY29kZVN0cmluZworMjk3IHN0dWIgUnRsQ29udmVydFVpTGlzdFRvQXBpTGlzdAorMjk4IHN0dWIgUnRsQ29udmVydFVsb25nVG9MYXJnZUludGVnZXIKKzI5OSBzdHViIFJ0bENvcHlMdWlkCiszMDAgc3R1YiBSdGxDb3B5THVpZEFuZEF0dHJpYnV0ZXNBcnJheQorMzAxIHN0dWIgUnRsQ29weVNlY3VyaXR5RGVzY3JpcHRvcgorMzAyIHN0dWIgUnRsQ29weVNpZAorMzAzIHN0dWIgUnRsQ29weVNpZEFuZEF0dHJpYnV0ZXNBcnJheQorMzA0IHN0dWIgUnRsQ29weVN0cmluZworMzA1IHN0dWIgUnRsQ29weVVuaWNvZGVTdHJpbmcKKzMwNiBzdHViIFJ0bENyZWF0ZUFjbAorMzA3IHN0dWIgUnRsQ3JlYXRlQW5kU2V0U0QKKzMwOCBzdHViIFJ0bENyZWF0ZUVudmlyb25tZW50CiszMDkgc3R1YiBSdGxDcmVhdGVIZWFwCiszMTAgc3R1YiBSdGxDcmVhdGVQcm9jZXNzUGFyYW1ldGVycworMzExIHN0dWIgUnRsQ3JlYXRlUXVlcnlEZWJ1Z0J1ZmZlcgorMzEyIHN0dWIgUnRsQ3JlYXRlUmVnaXN0cnlLZXkKKzMxMyBzdHViIFJ0bENyZWF0ZVNlY3VyaXR5RGVzY3JpcHRvcgorMzE0IHN0dWIgUnRsQ3JlYXRlVGFnSGVhcAorMzE1IHN0dWIgUnRsQ3JlYXRlVW5pY29kZVN0cmluZworMzE2IHN0dWIgUnRsQ3JlYXRlVW5pY29kZVN0cmluZ0Zyb21Bc2NpaXoKKzMxNyBzdHViIFJ0bENyZWF0ZVVzZXJQcm9jZXNzCiszMTggc3R1YiBSdGxDcmVhdGVVc2VyU2VjdXJpdHlPYmplY3QKKzMxOSBzdHViIFJ0bENyZWF0ZVVzZXJUaHJlYWQKKzMyMCBzdHViIFJ0bEN1c3RvbUNQVG9Vbmljb2RlTgorMzIxIHN0dWIgUnRsQ3V0b3ZlclRpbWVUb1N5c3RlbVRpbWUKKzMyMiBzdHViIFJ0bERlTm9ybWFsaXplUHJvY2Vzc1BhcmFtcworMzIzIHN0dWIgUnRsRGVjb21wcmVzc0J1ZmZlcgorMzI0IHN0dWIgUnRsRGVjb21wcmVzc0ZyYWdtZW50CiszMjUgc3R1YiBSdGxEZWxldGUKKzMyNiBzdHViIFJ0bERlbGV0ZUFjZQorMzI3IHN0dWIgUnRsRGVsZXRlQ3JpdGljYWxTZWN0aW9uCiszMjggc3R1YiBSdGxEZWxldGVFbGVtZW50R2VuZXJpY1RhYmxlCiszMjkgc3R1YiBSdGxEZWxldGVSZWdpc3RyeVZhbHVlCiszMzAgc3R1YiBSdGxEZWxldGVSZXNvdXJjZQorMzMxIHN0dWIgUnRsRGVsZXRlU2VjdXJpdHlPYmplY3QKKzMzMiBzdHViIFJ0bERlc3Ryb3lFbnZpcm9ubWVudAorMzMzIHN0dWIgUnRsRGVzdHJveUhlYXAKKzMzNCBzdHViIFJ0bERlc3Ryb3lQcm9jZXNzUGFyYW1ldGVycworMzM1IHN0dWIgUnRsRGVzdHJveVF1ZXJ5RGVidWdCdWZmZXIKKzMzNiBzdHViIFJ0bERldGVybWluZURvc1BhdGhOYW1lVHlwZV9VCiszMzcgc3R1YiBSdGxEb2VzRmlsZUV4aXN0c19VCiszMzggc3R1YiBSdGxEb3NQYXRoTmFtZVRvTnRQYXRoTmFtZV9VCiszMzkgc3R1YiBSdGxEb3NTZWFyY2hQYXRoX1UKKzM0MCBzdHViIFJ0bER1bXBSZXNvdXJjZQorMzQxIHN0dWIgUnRsRW5sYXJnZWRJbnRlZ2VyTXVsdGlwbHkKKzM0MiBzdHViIFJ0bEVubGFyZ2VkVW5zaWduZWREaXZpZGUKKzM0MyBzdHViIFJ0bEVubGFyZ2VkVW5zaWduZWRNdWx0aXBseQorMzQ0IHN0dWIgUnRsRW50ZXJDcml0aWNhbFNlY3Rpb24KKzM0NSBzdHViIFJ0bEVudW1Qcm9jZXNzSGVhcHMKKzM0NiBzdHViIFJ0bEVudW1lcmF0ZUdlbmVyaWNUYWJsZQorMzQ3IHN0dWIgUnRsRW51bWVyYXRlR2VuZXJpY1RhYmxlV2l0aG91dFNwbGF5aW5nCiszNDggc3R1YiBSdGxFcXVhbENvbXB1dGVyTmFtZQorMzQ5IHN0dWIgUnRsRXF1YWxEb21haW5OYW1lCiszNTAgc3R1YiBSdGxFcXVhbEx1aWQKKzM1MSBzdHViIFJ0bEVxdWFsUHJlZml4U2lkCiszNTIgc3R1YiBSdGxFcXVhbFNpZAorMzUzIHN0dWIgUnRsRXF1YWxTdHJpbmcKKzM1NCBzdHViIFJ0bEVxdWFsVW5pY29kZVN0cmluZworMzU1IHN0dWIgUnRsRXJhc2VVbmljb2RlU3RyaW5nCiszNTYgc3R1YiBSdGxFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NfVQorMzU3IHN0dWIgUnRsRXh0ZW5kSGVhcAorMzU4IHN0dWIgUnRsRXh0ZW5kZWRJbnRlZ2VyTXVsdGlwbHkKKzM1OSBzdHViIFJ0bEV4dGVuZGVkTGFyZ2VJbnRlZ2VyRGl2aWRlCiszNjAgc3R1YiBSdGxFeHRlbmRlZE1hZ2ljRGl2aWRlCiszNjEgc3R1YiBSdGxGaWxsTWVtb3J5CiszNjIgc3R1YiBSdGxGaWxsTWVtb3J5VWxvbmcKKzM2MyBzdHViIFJ0bEZpbmRDbGVhckJpdHMKKzM2NCBzdHViIFJ0bEZpbmRDbGVhckJpdHNBbmRTZXQKKzM2NSBzdHViIFJ0bEZpbmRMb25nZXN0UnVuQ2xlYXIKKzM2NiBzdHViIFJ0bEZpbmRMb25nZXN0UnVuU2V0CiszNjcgc3R1YiBSdGxGaW5kTWVzc2FnZQorMzY4IHN0dWIgUnRsRmluZFNldEJpdHMKKzM2OSBzdHViIFJ0bEZpbmRTZXRCaXRzQW5kQ2xlYXIKKzM3MCBzdHViIFJ0bEZpcnN0RnJlZUFjZQorMzcxIHN0dWIgUnRsRm9ybWF0Q3VycmVudFVzZXJLZXlQYXRoCiszNzIgc3R1YiBSdGxGb3JtYXRNZXNzYWdlCiszNzMgc3R1YiBSdGxGcmVlQW5zaVN0cmluZworMzc0IHN0dWIgUnRsRnJlZUhlYXAKKzM3NSBzdHViIFJ0bEZyZWVPZW1TdHJpbmcKKzM3NiBzdHViIFJ0bEZyZWVTaWQKKzM3NyBzdHViIFJ0bEZyZWVVbmljb2RlU3RyaW5nCiszNzggc3R1YiBSdGxHZW5lcmF0ZThkb3QzTmFtZQorMzc5IHN0dWIgUnRsR2V0QWNlCiszODAgc3R1YiBSdGxHZXRDYWxsZXJzQWRkcmVzcworMzgxIHN0dWIgUnRsR2V0Q29tcHJlc3Npb25Xb3JrU3BhY2VTaXplCiszODIgc3R1YiBSdGxHZXRDb250cm9sU2VjdXJpdHlEZXNjcmlwdG9yCiszODMgc3R1YiBSdGxHZXRDdXJyZW50RGlyZWN0b3J5X1UKKzM4NCBzdHViIFJ0bEdldERhY2xTZWN1cml0eURlc2NyaXB0b3IKKzM4NSBzdHViIFJ0bEdldEVsZW1lbnRHZW5lcmljVGFibGUKKzM4NiBzdHViIFJ0bEdldEZ1bGxQYXRoTmFtZV9VCiszODcgc3R1YiBSdGxHZXRHcm91cFNlY3VyaXR5RGVzY3JpcHRvcgorMzg4IHN0dWIgUnRsR2V0TG9uZ2VzdE50UGF0aExlbmd0aAorMzg5IHN0dWIgUnRsR2V0TnRHbG9iYWxGbGFncworMzkwIHN0dWIgUnRsR2V0TnRQcm9kdWN0VHlwZQorMzkxIHN0dWIgUnRsR2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IKKzM5MiBzdHViIFJ0bEdldFByb2Nlc3NIZWFwcworMzkzIHN0dWIgUnRsR2V0U2FjbFNlY3VyaXR5RGVzY3JpcHRvcgorMzk0IHN0dWIgUnRsR2V0VXNlckluZm9IZWFwCiszOTUgc3R1YiBSdGxJZGVudGlmaWVyQXV0aG9yaXR5U2lkCiszOTYgc3R1YiBSdGxJbWFnZURpcmVjdG9yeUVudHJ5VG9EYXRhCiszOTcgc3R1YiBSdGxJbWFnZU50SGVhZGVyCiszOTggc3R1YiBSdGxJbXBlcnNvbmF0ZVNlbGYKKzM5OSBzdHViIFJ0bEluaXRBbnNpU3RyaW5nCis0MDAgc3R1YiBSdGxJbml0Q29kZVBhZ2VUYWJsZQorNDAxIHN0dWIgUnRsSW5pdE5sc1RhYmxlcworNDAyIHN0dWIgUnRsSW5pdFN0cmluZworNDAzIHN0dWIgUnRsSW5pdFVuaWNvZGVTdHJpbmcKKzQwNCBzdHViIFJ0bEluaXRpYWxpemVCaXRNYXAKKzQwNSBzdHViIFJ0bEluaXRpYWxpemVDb250ZXh0Cis0MDYgc3R1YiBSdGxJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uCis0MDcgc3R1YiBSdGxJbml0aWFsaXplR2VuZXJpY1RhYmxlCis0MDggc3R1YiBSdGxJbml0aWFsaXplUlhhY3QKKzQwOSBzdHViIFJ0bEluaXRpYWxpemVSZXNvdXJjZQorNDEwIHN0dWIgUnRsSW5pdGlhbGl6ZVNpZAorNDExIHN0dWIgUnRsSW5zZXJ0RWxlbWVudEdlbmVyaWNUYWJsZQorNDEyIHN0dWIgUnRsSW50ZWdlclRvQ2hhcgorNDEzIHN0dWIgUnRsSW50ZWdlclRvVW5pY29kZVN0cmluZworNDE0IHN0dWIgUnRsSXNEb3NEZXZpY2VOYW1lX1UKKzQxNSBzdHViIFJ0bElzR2VuZXJpY1RhYmxlRW1wdHkKKzQxNiBzdHViIFJ0bElzTmFtZUxlZ2FsRE9TOERvdDMKKzQxNyBzdHViIFJ0bElzVGV4dFVuaWNvZGUKKzQxOCBzdHViIFJ0bExhcmdlSW50ZWdlckFkZAorNDE5IHN0dWIgUnRsTGFyZ2VJbnRlZ2VyQXJpdGhtZXRpY1NoaWZ0Cis0MjAgc3R1YiBSdGxMYXJnZUludGVnZXJEaXZpZGUKKzQyMSBzdHViIFJ0bExhcmdlSW50ZWdlck5lZ2F0ZQorNDIyIHN0dWIgUnRsTGFyZ2VJbnRlZ2VyU2hpZnRMZWZ0Cis0MjMgc3R1YiBSdGxMYXJnZUludGVnZXJTaGlmdFJpZ2h0Cis0MjQgc3R1YiBSdGxMYXJnZUludGVnZXJTdWJ0cmFjdAorNDI1IHN0dWIgUnRsTGFyZ2VJbnRlZ2VyVG9DaGFyCis0MjYgc3R1YiBSdGxMZWF2ZUNyaXRpY2FsU2VjdGlvbgorNDI3IHN0dWIgUnRsTGVuZ3RoUmVxdWlyZWRTaWQKKzQyOCBzdHViIFJ0bExlbmd0aFNlY3VyaXR5RGVzY3JpcHRvcgorNDI5IHN0dWIgUnRsTGVuZ3RoU2lkCis0MzAgc3R1YiBSdGxMb2NhbFRpbWVUb1N5c3RlbVRpbWUKKzQzMSBzdHViIFJ0bExvY2tIZWFwCis0MzIgc3R1YiBSdGxMb29rdXBFbGVtZW50R2VuZXJpY1RhYmxlCis0MzMgc3R1YiBSdGxNYWtlU2VsZlJlbGF0aXZlU0QKKzQzNCBzdHViIFJ0bE1hcEdlbmVyaWNNYXNrCis0MzUgc3R1YiBSdGxNb3ZlTWVtb3J5Cis0MzYgc3R1YiBSdGxNdWx0aUJ5dGVUb1VuaWNvZGVOCis0Mzcgc3R1YiBSdGxNdWx0aUJ5dGVUb1VuaWNvZGVTaXplCis0Mzggc3R1YiBSdGxOZXdJbnN0YW5jZVNlY3VyaXR5T2JqZWN0Cis0Mzkgc3R1YiBSdGxOZXdTZWN1cml0eUdyYW50ZWRBY2Nlc3MKKzQ0MCBzdHViIFJ0bE5ld1NlY3VyaXR5T2JqZWN0Cis0NDEgc3R1YiBSdGxOb3JtYWxpemVQcm9jZXNzUGFyYW1zCis0NDIgc3R1YiBSdGxOdFN0YXR1c1RvRG9zRXJyb3IKKzQ0MyBzdHViIFJ0bE51bWJlckdlbmVyaWNUYWJsZUVsZW1lbnRzCis0NDQgc3R1YiBSdGxOdW1iZXJPZkNsZWFyQml0cworNDQ1IHN0dWIgUnRsTnVtYmVyT2ZTZXRCaXRzCis0NDYgc3R1YiBSdGxPZW1TdHJpbmdUb1VuaWNvZGVTaXplCis0NDcgc3R1YiBSdGxPZW1TdHJpbmdUb1VuaWNvZGVTdHJpbmcKKzQ0OCBzdHViIFJ0bE9lbVRvVW5pY29kZU4KKzQ0OSBzdHViIFJ0bE9wZW5DdXJyZW50VXNlcgorNDUwIHN0dWIgUnRsUGNUb0ZpbGVIZWFkZXIKKzQ1MSBzdHViIFJ0bFByZWZpeFN0cmluZworNDUyIHN0dWIgUnRsUHJlZml4VW5pY29kZVN0cmluZworNDUzIHN0dWIgUnRsUHJvdGVjdEhlYXAKKzQ1NCBzdHViIFJ0bFF1ZXJ5RW52aXJvbm1lbnRWYXJpYWJsZV9VCis0NTUgc3R1YiBSdGxRdWVyeUluZm9ybWF0aW9uQWNsCis0NTYgc3R1YiBSdGxRdWVyeVByb2Nlc3NCYWNrVHJhY2VJbmZvcm1hdGlvbgorNDU3IHN0dWIgUnRsUXVlcnlQcm9jZXNzRGVidWdJbmZvcm1hdGlvbgorNDU4IHN0dWIgUnRsUXVlcnlQcm9jZXNzSGVhcEluZm9ybWF0aW9uCis0NTkgc3R1YiBSdGxRdWVyeVByb2Nlc3NMb2NrSW5mb3JtYXRpb24KKzQ2MCBzdHViIFJ0bFF1ZXJ5UmVnaXN0cnlWYWx1ZXMKKzQ2MSBzdHViIFJ0bFF1ZXJ5U2VjdXJpdHlPYmplY3QKKzQ2MiBzdHViIFJ0bFF1ZXJ5VGFnSGVhcAorNDYzIHN0dWIgUnRsUXVlcnlUaW1lWm9uZUluZm9ybWF0aW9uCis0NjQgc3R1YiBSdGxSYWlzZUV4Y2VwdGlvbgorNDY1IHN0dWIgUnRsUmFpc2VTdGF0dXMKKzQ2NiBzdHViIFJ0bFJhbmRvbQorNDY3IHN0dWIgUnRsUmVBbGxvY2F0ZUhlYXAKKzQ2OCBzdHViIFJ0bFJlYWxQcmVkZWNlc3NvcgorNDY5IHN0dWIgUnRsUmVhbFN1Y2Nlc3NvcgorNDcwIHN0dWIgUnRsUmVsZWFzZVBlYkxvY2sKKzQ3MSBzdHViIFJ0bFJlbGVhc2VSZXNvdXJjZQorNDcyIHN0dWIgUnRsUmVtb3RlQ2FsbAorNDczIHN0dWIgUnRsUmVzZXRSdGxUcmFuc2xhdGlvbnMKKzQ3NCBzdHViIFJ0bFJ1bkRlY29kZVVuaWNvZGVTdHJpbmcKKzQ3NSBzdHViIFJ0bFJ1bkVuY29kZVVuaWNvZGVTdHJpbmcKKzQ3NiBzdHViIFJ0bFNlY29uZHNTaW5jZTE5NzBUb1RpbWUKKzQ3NyBzdHViIFJ0bFNlY29uZHNTaW5jZTE5ODBUb1RpbWUKKzQ3OCBzdHViIFJ0bFNlbGZSZWxhdGl2ZVRvQWJzb2x1dGVTRAorNDc5IHN0dWIgUnRsU2V0QWxsQml0cworNDgwIHN0dWIgUnRsU2V0Qml0cworNDgxIHN0dWIgUnRsU2V0Q3VycmVudERpcmVjdG9yeV9VCis0ODIgc3R1YiBSdGxTZXRDdXJyZW50RW52aXJvbm1lbnQKKzQ4MyBzdHViIFJ0bFNldERhY2xTZWN1cml0eURlc2NyaXB0b3IKKzQ4NCBzdHViIFJ0bFNldEVudmlyb25tZW50VmFyaWFibGUKKzQ4NSBzdHViIFJ0bFNldEdyb3VwU2VjdXJpdHlEZXNjcmlwdG9yCis0ODYgc3R1YiBSdGxTZXRJbmZvcm1hdGlvbkFjbAorNDg3IHN0dWIgUnRsU2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IKKzQ4OCBzdHViIFJ0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IKKzQ4OSBzdHViIFJ0bFNldFNlY3VyaXR5T2JqZWN0Cis0OTAgc3R1YiBSdGxTZXRUaW1lWm9uZUluZm9ybWF0aW9uCis0OTEgc3R1YiBSdGxTZXRVc2VyRmxhZ3NIZWFwCis0OTIgc3R1YiBSdGxTZXRVc2VyVmFsdWVIZWFwCis0OTMgc3R1YiBSdGxTaXplSGVhcAorNDk0IHN0dWIgUnRsU3BsYXkKKzQ5NSBzdHViIFJ0bFN0YXJ0UlhhY3QKKzQ5NiBzdHViIFJ0bFN1YkF1dGhvcml0eUNvdW50U2lkCis0OTcgc3R1YiBSdGxTdWJBdXRob3JpdHlTaWQKKzQ5OCBzdHViIFJ0bFN1YnRyZWVQcmVkZWNlc3NvcgorNDk5IHN0dWIgUnRsU3VidHJlZVN1Y2Nlc3NvcgorNTAwIHN0dWIgUnRsU3lzdGVtVGltZVRvTG9jYWxUaW1lCis1MDEgc3R1YiBSdGxUaW1lRmllbGRzVG9UaW1lCis1MDIgc3R1YiBSdGxUaW1lVG9FbGFwc2VkVGltZUZpZWxkcworNTAzIHN0dWIgUnRsVGltZVRvU2Vjb25kc1NpbmNlMTk3MAorNTA0IHN0dWIgUnRsVGltZVRvU2Vjb25kc1NpbmNlMTk4MAorNTA1IHN0dWIgUnRsVGltZVRvVGltZUZpZWxkcworNTA2IHN0dWIgUnRsVW5pY29kZVN0cmluZ1RvQW5zaVNpemUKKzUwNyBzdHViIFJ0bFVuaWNvZGVTdHJpbmdUb0Fuc2lTdHJpbmcKKzUwOCBzdHViIFJ0bFVuaWNvZGVTdHJpbmdUb0NvdW50ZWRPZW1TdHJpbmcKKzUwOSBzdHViIFJ0bFVuaWNvZGVTdHJpbmdUb0ludGVnZXIKKzUxMCBzdHViIFJ0bFVuaWNvZGVTdHJpbmdUb09lbVNpemUKKzUxMSBzdHViIFJ0bFVuaWNvZGVTdHJpbmdUb09lbVN0cmluZworNTEyIHN0dWIgUnRsVW5pY29kZVRvQ3VzdG9tQ1BOCis1MTMgc3R1YiBSdGxVbmljb2RlVG9NdWx0aUJ5dGVOCis1MTQgc3R1YiBSdGxVbmljb2RlVG9NdWx0aUJ5dGVTaXplCis1MTUgc3R1YiBSdGxVbmljb2RlVG9PZW1OCis1MTYgc3R1YiBSdGxVbmlmb3JtCis1MTcgc3R1YiBSdGxVbmxvY2tIZWFwCis1MTggc3R1YiBSdGxVbndpbmQKKzUxOSBzdHViIFJ0bFVwY2FzZVVuaWNvZGVDaGFyCis1MjAgc3R1YiBSdGxVcGNhc2VVbmljb2RlU3RyaW5nCis1MjEgc3R1YiBSdGxVcGNhc2VVbmljb2RlU3RyaW5nVG9BbnNpU3RyaW5nCis1MjIgc3R1YiBSdGxVcGNhc2VVbmljb2RlU3RyaW5nVG9Db3VudGVkT2VtU3RyaW5nCis1MjMgc3R1YiBSdGxVcGNhc2VVbmljb2RlU3RyaW5nVG9PZW1TdHJpbmcKKzUyNCBzdHViIFJ0bFVwY2FzZVVuaWNvZGVUb0N1c3RvbUNQTgorNTI1IHN0dWIgUnRsVXBjYXNlVW5pY29kZVRvTXVsdGlCeXRlTgorNTI2IHN0dWIgUnRsVXBjYXNlVW5pY29kZVRvT2VtTgorNTI3IHN0dWIgUnRsVXBwZXJDaGFyCis1Mjggc3R1YiBSdGxVcHBlclN0cmluZworNTI5IHN0dWIgUnRsVXNhZ2VIZWFwCis1MzAgc3R1YiBSdGxWYWxpZEFjbAorNTMxIHN0dWIgUnRsVmFsaWRTZWN1cml0eURlc2NyaXB0b3IKKzUzMiBzdHViIFJ0bFZhbGlkU2lkCis1MzMgc3R1YiBSdGxWYWxpZGF0ZUhlYXAKKzUzNCBzdHViIFJ0bFZhbGlkYXRlUHJvY2Vzc0hlYXBzCis1MzUgc3R1YiBSdGxXYWxrSGVhcAorNTM2IHN0dWIgUnRsV3JpdGVSZWdpc3RyeVZhbHVlCis1Mzcgc3R1YiBSdGxaZXJvSGVhcAorNTM4IHN0dWIgUnRsWmVyb01lbW9yeQorNTM5IHN0dWIgUnRscEluaXRpYWxpemVSdGwKKzU0MCBzdHViIFJ0bHBOdENyZWF0ZUtleQorNTQxIHN0dWIgUnRscE50RW51bWVyYXRlU3ViS2V5Cis1NDIgc3R1YiBSdGxwTnRNYWtlVGVtcG9yYXJ5S2V5Cis1NDMgc3R1YiBSdGxwTnRPcGVuS2V5Cis1NDQgc3R1YiBSdGxwTnRRdWVyeVZhbHVlS2V5Cis1NDUgc3R1YiBSdGxwTnRTZXRWYWx1ZUtleQorNTQ2IHN0dWIgUnRscFVuV2FpdENyaXRpY2FsU2VjdGlvbgorNTQ3IHN0dWIgUnRscFdhaXRGb3JDcml0aWNhbFNlY3Rpb24KKzU0OCBzdHViIFJ0bHhBbnNpU3RyaW5nVG9Vbmljb2RlU2l6ZQorNTQ5IHN0dWIgUnRseE9lbVN0cmluZ1RvVW5pY29kZVNpemUKKzU1MCBzdHViIFJ0bHhVbmljb2RlU3RyaW5nVG9BbnNpU2l6ZQorNTUxIHN0dWIgUnRseFVuaWNvZGVTdHJpbmdUb09lbVNpemUKKzU1MiBzdHViIFNhdmVFbTg3Q29udGV4dAorNTUzIHN0dWIgWndBY2NlcHRDb25uZWN0UG9ydAorNTU0IHN0dWIgWndBY2Nlc3NDaGVjaworNTU1IHN0dWIgWndBY2Nlc3NDaGVja0FuZEF1ZGl0QWxhcm0KKzU1NiBzdHViIFp3QWRqdXN0R3JvdXBzVG9rZW4KKzU1NyBzdHViIFp3QWRqdXN0UHJpdmlsZWdlc1Rva2VuCis1NTggc3R1YiBad0FsZXJ0UmVzdW1lVGhyZWFkCis1NTkgc3R1YiBad0FsZXJ0VGhyZWFkCis1NjAgc3R1YiBad0FsbG9jYXRlTG9jYWxseVVuaXF1ZUlkCis1NjEgc3R1YiBad0FsbG9jYXRlVXVpZHMKKzU2MiBzdHViIFp3QWxsb2NhdGVWaXJ0dWFsTWVtb3J5Cis1NjMgc3R1YiBad0NhbGxiYWNrUmV0dXJuCis1NjQgc3R1YiBad0NhbmNlbElvRmlsZQorNTY1IHN0dWIgWndDYW5jZWxUaW1lcgorNTY2IHN0dWIgWndDbGVhckV2ZW50Cis1Njcgc3R1YiBad0Nsb3NlCis1Njggc3R1YiBad0Nsb3NlT2JqZWN0QXVkaXRBbGFybQorNTY5IHN0dWIgWndDb21wbGV0ZUNvbm5lY3RQb3J0Cis1NzAgc3R1YiBad0Nvbm5lY3RQb3J0Cis1NzEgc3R1YiBad0NvbnRpbnVlCis1NzIgc3R1YiBad0NyZWF0ZURpcmVjdG9yeU9iamVjdAorNTczIHN0dWIgWndDcmVhdGVFdmVudAorNTc0IHN0dWIgWndDcmVhdGVFdmVudFBhaXIKKzU3NSBzdHViIFp3Q3JlYXRlRmlsZQorNTc2IHN0dWIgWndDcmVhdGVJb0NvbXBsZXRpb24KKzU3NyBzdHViIFp3Q3JlYXRlS2V5Cis1Nzggc3R1YiBad0NyZWF0ZU1haWxzbG90RmlsZQorNTc5IHN0dWIgWndDcmVhdGVNdXRhbnQKKzU4MCBzdHViIFp3Q3JlYXRlTmFtZWRQaXBlRmlsZQorNTgxIHN0dWIgWndDcmVhdGVQYWdpbmdGaWxlCis1ODIgc3R1YiBad0NyZWF0ZVBvcnQKKzU4MyBzdHViIFp3Q3JlYXRlUHJvY2VzcworNTg0IHN0dWIgWndDcmVhdGVQcm9maWxlCis1ODUgc3R1YiBad0NyZWF0ZVNlY3Rpb24KKzU4NiBzdHViIFp3Q3JlYXRlU2VtYXBob3JlCis1ODcgc3R1YiBad0NyZWF0ZVN5bWJvbGljTGlua09iamVjdAorNTg4IHN0dWIgWndDcmVhdGVUaHJlYWQKKzU4OSBzdHViIFp3Q3JlYXRlVGltZXIKKzU5MCBzdHViIFp3Q3JlYXRlVG9rZW4KKzU5MSBzdHViIFp3RGVsYXlFeGVjdXRpb24KKzU5MiBzdHViIFp3RGVsZXRlRmlsZQorNTkzIHN0dWIgWndEZWxldGVLZXkKKzU5NCBzdHViIFp3RGVsZXRlVmFsdWVLZXkKKzU5NSBzdHViIFp3RGV2aWNlSW9Db250cm9sRmlsZQorNTk2IHN0dWIgWndEaXNwbGF5U3RyaW5nCis1OTcgc3R1YiBad0R1cGxpY2F0ZU9iamVjdAorNTk4IHN0dWIgWndEdXBsaWNhdGVUb2tlbgorNTk5IHN0dWIgWndFbnVtZXJhdGVCdXMKKzYwMCBzdHViIFp3RW51bWVyYXRlS2V5Cis2MDEgc3R1YiBad0VudW1lcmF0ZVZhbHVlS2V5Cis2MDIgc3R1YiBad0V4dGVuZFNlY3Rpb24KKzYwMyBzdHViIFp3Rmx1c2hCdWZmZXJzRmlsZQorNjA0IHN0dWIgWndGbHVzaEluc3RydWN0aW9uQ2FjaGUKKzYwNSBzdHViIFp3Rmx1c2hLZXkKKzYwNiBzdHViIFp3Rmx1c2hWaXJ0dWFsTWVtb3J5Cis2MDcgc3R1YiBad0ZsdXNoV3JpdGVCdWZmZXIKKzYwOCBzdHViIFp3RnJlZVZpcnR1YWxNZW1vcnkKKzYwOSBzdHViIFp3RnNDb250cm9sRmlsZQorNjEwIHN0dWIgWndHZXRDb250ZXh0VGhyZWFkCis2MTEgc3R1YiBad0dldFBsdWdQbGF5RXZlbnQKKzYxMiBzdHViIFp3R2V0VGlja0NvdW50Cis2MTMgc3R1YiBad0ltcGVyc29uYXRlQ2xpZW50T2ZQb3J0Cis2MTQgc3R1YiBad0ltcGVyc29uYXRlVGhyZWFkCis2MTUgc3R1YiBad0luaXRpYWxpemVSZWdpc3RyeQorNjE2IHN0dWIgWndMaXN0ZW5Qb3J0Cis2MTcgc3R1YiBad0xvYWREcml2ZXIKKzYxOCBzdHViIFp3TG9hZEtleQorNjE5IHN0dWIgWndMb2NrRmlsZQorNjIwIHN0dWIgWndMb2NrVmlydHVhbE1lbW9yeQorNjIxIHN0dWIgWndNYWtlVGVtcG9yYXJ5T2JqZWN0Cis2MjIgc3R1YiBad01hcFZpZXdPZlNlY3Rpb24KKzYyMyBzdHViIFp3Tm90aWZ5Q2hhbmdlRGlyZWN0b3J5RmlsZQorNjI0IHN0dWIgWndOb3RpZnlDaGFuZ2VLZXkKKzYyNSBzdHViIFp3T3BlbkRpcmVjdG9yeU9iamVjdAorNjI2IHN0dWIgWndPcGVuRXZlbnQKKzYyNyBzdHViIFp3T3BlbkV2ZW50UGFpcgorNjI4IHN0dWIgWndPcGVuRmlsZQorNjI5IHN0dWIgWndPcGVuSW9Db21wbGV0aW9uCis2MzAgc3R1YiBad09wZW5LZXkKKzYzMSBzdHViIFp3T3Blbk11dGFudAorNjMyIHN0dWIgWndPcGVuT2JqZWN0QXVkaXRBbGFybQorNjMzIHN0dWIgWndPcGVuUHJvY2VzcworNjM0IHN0dWIgWndPcGVuUHJvY2Vzc1Rva2VuCis2MzUgc3R1YiBad09wZW5TZWN0aW9uCis2MzYgc3R1YiBad09wZW5TZW1hcGhvcmUKKzYzNyBzdHViIFp3T3BlblN5bWJvbGljTGlua09iamVjdAorNjM4IHN0dWIgWndPcGVuVGhyZWFkCis2Mzkgc3R1YiBad09wZW5UaHJlYWRUb2tlbgorNjQwIHN0dWIgWndPcGVuVGltZXIKKzY0MSBzdHViIFp3UGx1Z1BsYXlDb250cm9sCis2NDIgc3R1YiBad1ByaXZpbGVnZUNoZWNrCis2NDMgc3R1YiBad1ByaXZpbGVnZU9iamVjdEF1ZGl0QWxhcm0KKzY0NCBzdHViIFp3UHJpdmlsZWdlZFNlcnZpY2VBdWRpdEFsYXJtCis2NDUgc3R1YiBad1Byb3RlY3RWaXJ0dWFsTWVtb3J5Cis2NDYgc3R1YiBad1B1bHNlRXZlbnQKKzY0NyBzdHViIFp3UXVlcnlBdHRyaWJ1dGVzRmlsZQorNjQ4IHN0dWIgWndRdWVyeURlZmF1bHRMb2NhbGUKKzY0OSBzdHViIFp3UXVlcnlEaXJlY3RvcnlGaWxlCis2NTAgc3R1YiBad1F1ZXJ5RGlyZWN0b3J5T2JqZWN0Cis2NTEgc3R1YiBad1F1ZXJ5RWFGaWxlCis2NTIgc3R1YiBad1F1ZXJ5RXZlbnQKKzY1MyBzdHViIFp3UXVlcnlJbmZvcm1hdGlvbkZpbGUKKzY1NCBzdHViIFp3UXVlcnlJbmZvcm1hdGlvblBvcnQKKzY1NSBzdHViIFp3UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MKKzY1NiBzdHViIFp3UXVlcnlJbmZvcm1hdGlvblRocmVhZAorNjU3IHN0dWIgWndRdWVyeUluZm9ybWF0aW9uVG9rZW4KKzY1OCBzdHViIFp3UXVlcnlJbnRlcnZhbFByb2ZpbGUKKzY1OSBzdHViIFp3UXVlcnlJb0NvbXBsZXRpb24KKzY2MCBzdHViIFp3UXVlcnlLZXkKKzY2MSBzdHViIFp3UXVlcnlNdXRhbnQKKzY2MiBzdHViIFp3UXVlcnlPYmplY3QKKzY2MyBzdHViIFp3UXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIKKzY2NCBzdHViIFp3UXVlcnlTZWN0aW9uCis2NjUgc3R1YiBad1F1ZXJ5U2VjdXJpdHlPYmplY3QKKzY2NiBzdHViIFp3UXVlcnlTZW1hcGhvcmUKKzY2NyBzdHViIFp3UXVlcnlTeW1ib2xpY0xpbmtPYmplY3QKKzY2OCBzdHViIFp3UXVlcnlTeXN0ZW1FbnZpcm9ubWVudFZhbHVlCis2Njkgc3R1YiBad1F1ZXJ5U3lzdGVtSW5mb3JtYXRpb24KKzY3MCBzdHViIFp3UXVlcnlTeXN0ZW1UaW1lCis2NzEgc3R1YiBad1F1ZXJ5VGltZXIKKzY3MiBzdHViIFp3UXVlcnlUaW1lclJlc29sdXRpb24KKzY3MyBzdHViIFp3UXVlcnlWYWx1ZUtleQorNjc0IHN0dWIgWndRdWVyeVZpcnR1YWxNZW1vcnkKKzY3NSBzdHViIFp3UXVlcnlWb2x1bWVJbmZvcm1hdGlvbkZpbGUKKzY3NiBzdHViIFp3UmFpc2VFeGNlcHRpb24KKzY3NyBzdHViIFp3UmFpc2VIYXJkRXJyb3IKKzY3OCBzdHViIFp3UmVhZEZpbGUKKzY3OSBzdHViIFp3UmVhZFJlcXVlc3REYXRhCis2ODAgc3R1YiBad1JlYWRWaXJ0dWFsTWVtb3J5Cis2ODEgc3R1YiBad1JlZ2lzdGVyTmV3RGV2aWNlCis2ODIgc3R1YiBad1JlZ2lzdGVyVGhyZWFkVGVybWluYXRlUG9ydAorNjgzIHN0dWIgWndSZWxlYXNlTXV0YW50Cis2ODQgc3R1YiBad1JlbGVhc2VQcm9jZXNzTXV0YW50Cis2ODUgc3R1YiBad1JlbGVhc2VTZW1hcGhvcmUKKzY4NiBzdHViIFp3UmVtb3ZlSW9Db21wbGV0aW9uCis2ODcgc3R1YiBad1JlcGxhY2VLZXkKKzY4OCBzdHViIFp3UmVwbHlQb3J0Cis2ODkgc3R1YiBad1JlcGx5V2FpdFJlY2VpdmVQb3J0Cis2OTAgc3R1YiBad1JlcGx5V2FpdFJlcGx5UG9ydAorNjkxIHN0dWIgWndSZXF1ZXN0UG9ydAorNjkyIHN0dWIgWndSZXF1ZXN0V2FpdFJlcGx5UG9ydAorNjkzIHN0dWIgWndSZXNldEV2ZW50Cis2OTQgc3R1YiBad1Jlc3RvcmVLZXkKKzY5NSBzdHViIFp3UmVzdW1lVGhyZWFkCis2OTYgc3R1YiBad1NhdmVLZXkKKzY5NyBzdHViIFp3U2V0Q29udGV4dFRocmVhZAorNjk4IHN0dWIgWndTZXREZWZhdWx0SGFyZEVycm9yUG9ydAorNjk5IHN0dWIgWndTZXREZWZhdWx0TG9jYWxlCis3MDAgc3R1YiBad1NldEVhRmlsZQorNzAxIHN0dWIgWndTZXRFdmVudAorNzAyIHN0dWIgWndTZXRIaWdoRXZlbnRQYWlyCis3MDMgc3R1YiBad1NldEhpZ2hXYWl0TG93RXZlbnRQYWlyCis3MDQgc3R1YiBad1NldEhpZ2hXYWl0TG93VGhyZWFkCis3MDUgc3R1YiBad1NldEluZm9ybWF0aW9uRmlsZQorNzA2IHN0dWIgWndTZXRJbmZvcm1hdGlvbktleQorNzA3IHN0dWIgWndTZXRJbmZvcm1hdGlvbk9iamVjdAorNzA4IHN0dWIgWndTZXRJbmZvcm1hdGlvblByb2Nlc3MKKzcwOSBzdHViIFp3U2V0SW5mb3JtYXRpb25UaHJlYWQKKzcxMCBzdHViIFp3U2V0SW5mb3JtYXRpb25Ub2tlbgorNzExIHN0dWIgWndTZXRJbnRlcnZhbFByb2ZpbGUKKzcxMiBzdHViIFp3U2V0SW9Db21wbGV0aW9uCis3MTMgc3R1YiBad1NldExkdEVudHJpZXMKKzcxNCBzdHViIFp3U2V0TG93RXZlbnRQYWlyCis3MTUgc3R1YiBad1NldExvd1dhaXRIaWdoRXZlbnRQYWlyCis3MTYgc3R1YiBad1NldExvd1dhaXRIaWdoVGhyZWFkCis3MTcgc3R1YiBad1NldFNlY3VyaXR5T2JqZWN0Cis3MTggc3R1YiBad1NldFN5c3RlbUVudmlyb25tZW50VmFsdWUKKzcxOSBzdHViIFp3U2V0U3lzdGVtSW5mb3JtYXRpb24KKzcyMCBzdHViIFp3U2V0U3lzdGVtUG93ZXJTdGF0ZQorNzIxIHN0dWIgWndTZXRTeXN0ZW1UaW1lCis3MjIgc3R1YiBad1NldFRpbWVyCis3MjMgc3R1YiBad1NldFRpbWVyUmVzb2x1dGlvbgorNzI0IHN0dWIgWndTZXRWYWx1ZUtleQorNzI1IHN0dWIgWndTZXRWb2x1bWVJbmZvcm1hdGlvbkZpbGUKKzcyNiBzdHViIFp3U2h1dGRvd25TeXN0ZW0KKzcyNyBzdHViIFp3U3RhcnRQcm9maWxlCis3Mjggc3R1YiBad1N0b3BQcm9maWxlCis3Mjkgc3R1YiBad1N1c3BlbmRUaHJlYWQKKzczMCBzdHViIFp3U3lzdGVtRGVidWdDb250cm9sCis3MzEgc3R1YiBad1Rlcm1pbmF0ZVByb2Nlc3MKKzczMiBzdHViIFp3VGVybWluYXRlVGhyZWFkCis3MzMgc3R1YiBad1Rlc3RBbGVydAorNzM0IHN0dWIgWndVbmxvYWREcml2ZXIKKzczNSBzdHViIFp3VW5sb2FkS2V5Cis3MzYgc3R1YiBad1VubG9ja0ZpbGUKKzczNyBzdHViIFp3VW5sb2NrVmlydHVhbE1lbW9yeQorNzM4IHN0dWIgWndVbm1hcFZpZXdPZlNlY3Rpb24KKzczOSBzdHViIFp3VmRtQ29udHJvbAorNzQwIHN0dWIgWndXMzJDYWxsCis3NDEgc3R1YiBad1dhaXRGb3JNdWx0aXBsZU9iamVjdHMKKzc0MiBzdHViIFp3V2FpdEZvclByb2Nlc3NNdXRhbnQKKzc0MyBzdHViIFp3V2FpdEZvclNpbmdsZU9iamVjdAorNzQ0IHN0dWIgWndXYWl0SGlnaEV2ZW50UGFpcgorNzQ1IHN0dWIgWndXYWl0TG93RXZlbnRQYWlyCis3NDYgc3R1YiBad1dyaXRlRmlsZQorNzQ3IHN0dWIgWndXcml0ZVJlcXVlc3REYXRhCis3NDggc3R1YiBad1dyaXRlVmlydHVhbE1lbW9yeQorNzQ5IHN0dWIgX0NJcG93Cis3NTAgc3R1YiBfX2VDb21tb25FeGNlcHRpb25zCis3NTEgc3R1YiBfX2VFbXVsYXRvckluaXQKKzc1MiBzdHViIF9fZUYyWE0xCis3NTMgc3R1YiBfX2VGQUJTCis3NTQgc3R1YiBfX2VGQUREMzIKKzc1NSBzdHViIF9fZUZBREQ2NAorNzU2IHN0dWIgX19lRkFERFByZWcKKzc1NyBzdHViIF9fZUZBRERyZWcKKzc1OCBzdHViIF9fZUZBRER0b3AKKzc1OSBzdHViIF9fZUZDSFMKKzc2MCBzdHViIF9fZUZDT00KKzc2MSBzdHViIF9fZUZDT00zMgorNzYyIHN0dWIgX19lRkNPTTY0Cis3NjMgc3R1YiBfX2VGQ09NUAorNzY0IHN0dWIgX19lRkNPTVAzMgorNzY1IHN0dWIgX19lRkNPTVA2NAorNzY2IHN0dWIgX19lRkNPTVBQCis3Njcgc3R1YiBfX2VGQ09TCis3Njggc3R1YiBfX2VGREVDU1RQCis3Njkgc3R1YiBfX2VGRElWMzIKKzc3MCBzdHViIF9fZUZESVY2NAorNzcxIHN0dWIgX19lRkRJVlByZWcKKzc3MiBzdHViIF9fZUZESVZSMzIKKzc3MyBzdHViIF9fZUZESVZSNjQKKzc3NCBzdHViIF9fZUZESVZSUHJlZworNzc1IHN0dWIgX19lRkRJVlJyZWcKKzc3NiBzdHViIF9fZUZESVZSdG9wCis3Nzcgc3R1YiBfX2VGRElWcmVnCis3Nzggc3R1YiBfX2VGRElWdG9wCis3Nzkgc3R1YiBfX2VGRlJFRQorNzgwIHN0dWIgX19lRklBREQxNgorNzgxIHN0dWIgX19lRklBREQzMgorNzgyIHN0dWIgX19lRklDT00xNgorNzgzIHN0dWIgX19lRklDT00zMgorNzg0IHN0dWIgX19lRklDT01QMTYKKzc4NSBzdHViIF9fZUZJQ09NUDMyCis3ODYgc3R1YiBfX2VGSURJVjE2Cis3ODcgc3R1YiBfX2VGSURJVjMyCis3ODggc3R1YiBfX2VGSURJVlIxNgorNzg5IHN0dWIgX19lRklESVZSMzIKKzc5MCBzdHViIF9fZUZJTEQxNgorNzkxIHN0dWIgX19lRklMRDMyCis3OTIgc3R1YiBfX2VGSUxENjQKKzc5MyBzdHViIF9fZUZJTVVMMTYKKzc5NCBzdHViIF9fZUZJTVVMMzIKKzc5NSBzdHViIF9fZUZJTkNTVFAKKzc5NiBzdHViIF9fZUZJTklUCis3OTcgc3R1YiBfX2VGSVNUMTYKKzc5OCBzdHViIF9fZUZJU1QzMgorNzk5IHN0dWIgX19lRklTVFAxNgorODAwIHN0dWIgX19lRklTVFAzMgorODAxIHN0dWIgX19lRklTVFA2NAorODAyIHN0dWIgX19lRklTVUIxNgorODAzIHN0dWIgX19lRklTVUIzMgorODA0IHN0dWIgX19lRklTVUJSMTYKKzgwNSBzdHViIF9fZUZJU1VCUjMyCis4MDYgc3R1YiBfX2VGTEQxCis4MDcgc3R1YiBfX2VGTEQzMgorODA4IHN0dWIgX19lRkxENjQKKzgwOSBzdHViIF9fZUZMRDgwCis4MTAgc3R1YiBfX2VGTERDVworODExIHN0dWIgX19lRkxERU5WCis4MTIgc3R1YiBfX2VGTERMMkUKKzgxMyBzdHViIF9fZUZMRExOMgorODE0IHN0dWIgX19lRkxEUEkKKzgxNSBzdHViIF9fZUZMRFoKKzgxNiBzdHViIF9fZUZNVUwzMgorODE3IHN0dWIgX19lRk1VTDY0Cis4MTggc3R1YiBfX2VGTVVMUHJlZworODE5IHN0dWIgX19lRk1VTHJlZworODIwIHN0dWIgX19lRk1VTHRvcAorODIxIHN0dWIgX19lRlBBVEFOCis4MjIgc3R1YiBfX2VGUFJFTQorODIzIHN0dWIgX19lRlBSRU0xCis4MjQgc3R1YiBfX2VGUFRBTgorODI1IHN0dWIgX19lRlJORElOVAorODI2IHN0dWIgX19lRlJTVE9SCis4Mjcgc3R1YiBfX2VGU0FWRQorODI4IHN0dWIgX19lRlNDQUxFCis4Mjkgc3R1YiBfX2VGU0lOCis4MzAgc3R1YiBfX2VGU1FSVAorODMxIHN0dWIgX19lRlNUCis4MzIgc3R1YiBfX2VGU1QzMgorODMzIHN0dWIgX19lRlNUNjQKKzgzNCBzdHViIF9fZUZTVENXCis4MzUgc3R1YiBfX2VGU1RFTlYKKzgzNiBzdHViIF9fZUZTVFAKKzgzNyBzdHViIF9fZUZTVFAzMgorODM4IHN0dWIgX19lRlNUUDY0Cis4Mzkgc3R1YiBfX2VGU1RQODAKKzg0MCBzdHViIF9fZUZTVFNXCis4NDEgc3R1YiBfX2VGU1VCMzIKKzg0MiBzdHViIF9fZUZTVUI2NAorODQzIHN0dWIgX19lRlNVQlByZWcKKzg0NCBzdHViIF9fZUZTVUJSMzIKKzg0NSBzdHViIF9fZUZTVUJSNjQKKzg0NiBzdHViIF9fZUZTVUJSUHJlZworODQ3IHN0dWIgX19lRlNVQlJyZWcKKzg0OCBzdHViIF9fZUZTVUJSdG9wCis4NDkgc3R1YiBfX2VGU1VCcmVnCis4NTAgc3R1YiBfX2VGU1VCdG9wCis4NTEgc3R1YiBfX2VGVFNUCis4NTIgc3R1YiBfX2VGVUNPTQorODUzIHN0dWIgX19lRlVDT01QCis4NTQgc3R1YiBfX2VGVUNPTVBQCis4NTUgc3R1YiBfX2VGWEFNCis4NTYgc3R1YiBfX2VGWENICis4NTcgc3R1YiBfX2VGWFRSQUNUCis4NTggc3R1YiBfX2VGWUwyWAorODU5IHN0dWIgX19lRllMMlhQMQorODYwIHN0dWIgX19lR2V0U3RhdHVzV29yZAorODYxIHN0dWIgX2FsbG9jYV9wcm9iZQorODYyIHN0dWIgX2Noa3N0aworODYzIHN0dWIgX2ZsdHVzZWQKKzg2NCBzdHViIF9mdG9sCis4NjUgc3R1YiBfaXRvYQorODY2IHN0dWIgX2x0b2EKKzg2NyBzdHViIF9tZW1jY3B5Cis4Njggc3R1YiBfbWVtaWNtcAorODY5IHN0dWIgX3NucHJpbnRmCis4NzAgc3R1YiBfc253cHJpbnRmCis4NzEgc3R1YiBfc3BsaXRwYXRoCis4NzIgc3R1YiBfc3RyY21waQorODczIHN0dWIgX3N0cmljbXAKKzg3NCBzdHViIF9zdHJsd3IKKzg3NSBzdHViIF9zdHJuaWNtcAorODc2IHN0dWIgX3N0cnVwcgorODc3IHN0dWIgX3VsdG9hCis4Nzggc3R1YiBfdnNucHJpbnRmCis4Nzkgc3R1YiBfd2NzaWNtcAorODgwIHN0dWIgX3djc2x3cgorODgxIHN0dWIgX3djc25pY21wCis4ODIgc3R1YiBfd2NzdXByCis4ODMgc3R1YiBhYnMKKzg4NCBzdHViIGF0YW4KKzg4NSBzdHViIGF0b2kKKzg4NiBzdHViIGF0b2wKKzg4NyBzdHViIGNlaWwKKzg4OCBzdHViIGNvcworODg5IHN0dWIgZmFicworODkwIHN0dWIgZmxvb3IKKzg5MSBzdHViIGlzYWxwaGEKKzg5MiBzdHViIGlzZGlnaXQKKzg5MyBzdHViIGlzbG93ZXIKKzg5NCBzdHViIGlzcHJpbnQKKzg5NSBzdHViIGlzc3BhY2UKKzg5NiBzdHViIGlzdXBwZXIKKzg5NyBzdHViIGlzd2FscGhhCis4OTggc3R1YiBpc3djdHlwZQorODk5IHN0dWIgaXN4ZGlnaXQKKzkwMCBzdHViIGxhYnMKKzkwMSBzdHViIGxvZworOTAyIHN0dWIgbWJzdG93Y3MKKzkwMyBzdHViIG1lbWNocgorOTA0IHN0dWIgbWVtY21wCis5MDUgc3R1YiBtZW1jcHkKKzkwNiBzdHViIG1lbW1vdmUKKzkwNyBzdHViIG1lbXNldAorOTA4IHN0dWIgcG93Cis5MDkgc3R1YiBxc29ydAorOTEwIHN0dWIgc2luCis5MTEgc3R1YiBzcHJpbnRmCis5MTIgc3R1YiBzcXJ0Cis5MTMgc3R1YiBzc2NhbmYKKzkxNCBzdHViIHN0cmNhdAorOTE1IHN0dWIgc3RyY2hyCis5MTYgc3R1YiBzdHJjbXAKKzkxNyBzdHViIHN0cmNweQorOTE4IHN0dWIgc3RyY3NwbgorOTE5IHN0dWIgc3RybGVuCis5MjAgc3R1YiBzdHJuY2F0Cis5MjEgc3R1YiBzdHJuY21wCis5MjIgc3R1YiBzdHJuY3B5Cis5MjMgc3R1YiBzdHJwYnJrCis5MjQgc3R1YiBzdHJyY2hyCis5MjUgc3R1YiBzdHJzcG4KKzkyNiBzdHViIHN0cnN0cgorOTI3IHN0dWIgc3dwcmludGYKKzkyOCBzdHViIHRhbgorOTI5IHN0dWIgdG9sb3dlcgorOTMwIHN0dWIgdG91cHBlcgorOTMxIHN0dWIgdG93bG93ZXIKKzkzMiBzdHViIHRvd3VwcGVyCis5MzMgc3R1YiB2c3ByaW50ZgorOTM0IHN0dWIgd2NzY2F0Cis5MzUgc3R1YiB3Y3NjaHIKKzkzNiBzdHViIHdjc2NtcAorOTM3IHN0dWIgd2NzY3B5Cis5Mzggc3R1YiB3Y3Njc3BuCis5Mzkgc3R1YiB3Y3NsZW4KKzk0MCBzdHViIHdjc25jYXQKKzk0MSBzdHViIHdjc25jbXAKKzk0MiBzdHViIHdjc25jcHkKKzk0MyBzdHViIHdjc3BicmsKKzk0NCBzdHViIHdjc3JjaHIKKzk0NSBzdHViIHdjc3NwbgorOTQ2IHN0dWIgd2Nzc3RyCis5NDcgc3R1YiB3Y3N0b2sKKzk0OCBzdHViIHdjc3RvbAorOTQ5IHN0dWIgd2NzdG9tYnMKKzk1MCBzdHViIHdjc3RvdWwKZGlmZiAtLWdpdCBhL2lmMTYzMi9yZWxheTMyLmMgYi9pZjE2MzIvcmVsYXkzMi5jCmluZGV4IGM2N2FjNjguLjNmMGEyNGU0IDEwMDY0NAotLS0gYS9pZjE2MzIvcmVsYXkzMi5jCisrKyBiL2lmMTYzMi9yZWxheTMyLmMKQEAgLTUyLDE1ICs1MiwxNiBAQAogCQkJcmV0dXJuIHJlc3VsdDsKIAkJY2FzZSBXTV9OQ0NBTENTSVpFOgogCQkJU1RSVUNUMzJfTkNDQUxDU0laRTE2dG8zMkZsYXQobFBhcmFtLCZzdC5uY2NzKTsKLQkJCWlmKCgoTkNDQUxDU0laRV9QQVJBTVMqKWxQYXJhbSktPmxwcG9zKSB7Ci0JCQkJU1RSVUNUMzJfV0lORE9XUE9TMTZ0bzMyKCgoTkNDQUxDU0laRV9QQVJBTVMqKWxQYXJhbSktPmxwcG9zLCZ3cCk7Ci0JCQkJc3QubmNjcy5scHBvcz0md3A7Ci0JCQl9IGVsc2UKLQkJCQlzdC5uY2NzLmxwcG9zPSAwOworCQkJaWYod1BhcmFtICYmICgoTkNDQUxDU0laRV9QQVJBTVMqKWxQYXJhbSktPmxwcG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUlVDVDMyX1dJTkRPV1BPUzE2dG8zMihQVFJfU0VHX1RPX0xJTigoKE5DQ0FMQ1NJWkVfUEFSQU1TKilsUGFyYW0pLT5scHBvcyksJndwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC5uY2NzLmxwcG9zPSZ3cDsKKwkJCX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc3QubmNjcy5scHBvcz0gMDsKIAkJCXJlc3VsdD1DYWxsV25kUHJvYzMyKGZ1bmMsaHduZCxtZXNzYWdlLHdQYXJhbSwoaW50KSZzdC5uY2NzKTsKIAkJCVNUUlVDVDMyX05DQ0FMQ1NJWkUzMnRvMTZGbGF0KCZzdC5uY2NzLGxQYXJhbSk7Ci0JCQlpZigoKE5DQ0FMQ1NJWkVfUEFSQU1TKilsUGFyYW0pLT5scHBvcykKLQkJCQlTVFJVQ1QzMl9XSU5ET1dQT1MzMnRvMTYoJndwLCgoTkNDQUxDU0laRV9QQVJBTVMqKWxQYXJhbSktPmxwcG9zKTsKKwkJCWlmKHdQYXJhbSAmJiAoKE5DQ0FMQ1NJWkVfUEFSQU1TKilsUGFyYW0pLT5scHBvcykKKwkJCQlTVFJVQ1QzMl9XSU5ET1dQT1MzMnRvMTYoJndwLFBUUl9TRUdfVE9fTElOKCgoTkNDQUxDU0laRV9QQVJBTVMqKWxQYXJhbSktPmxwcG9zKSk7CiAJCQlyZXR1cm4gcmVzdWx0OwogCQljYXNlIFdNX05DQ1JFQVRFOgogCQkJbHBjcyA9IChDUkVBVEVTVFJVQ1QqKWxQYXJhbTsKZGlmZiAtLWdpdCBhL2lmMTYzMi9zaGVsbDMyLnNwZWMgYi9pZjE2MzIvc2hlbGwzMi5zcGVjCmluZGV4IGUwZDU5OGYuLjhhYmNmOTUgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9zaGVsbDMyLnNwZWMKKysrIGIvaWYxNjMyL3NoZWxsMzIuc3BlYwpAQCAtODQsNyArODQsNyBAQAogMDA3OSBzdHViIFNoZVNldEN1ckRyaXZlCiAwMDgwIHN0dWIgU2hlU2hvcnRlblBhdGhBCiAwMDgxIHN0dWIgU2hlU2hvcnRlblBhdGhXCi0wMDgyIHN0dWIgU2hlbGxBYm91dEEKKzAwODIgc3RkY2FsbCBTaGVsbEFib3V0QSh3b3JkIHB0ciBwdHIgd29yZCkgU2hlbGxBYm91dAogMDA4MyBzdHViIFNoZWxsQWJvdXRXCiAwMDg0IHN0ZGNhbGwgU2hlbGxFeGVjdXRlQSh3b3JkIHB0ciBwdHIgcHRyIHB0ciBzX3dvcmQpIFNoZWxsRXhlY3V0ZQogMDA4NSBzdHViIFNoZWxsRXhlY3V0ZUV4CmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlci5zcGVjIGIvaWYxNjMyL3VzZXIuc3BlYwppbmRleCBmNWU3ZDkxLi43MzFjMGMwIDEwMDY0NAotLS0gYS9pZjE2MzIvdXNlci5zcGVjCisrKyBiL2lmMTYzMi91c2VyLnNwZWMKQEAgLTQxLDcgKzQxLDcgQEAKIDM5ICBwYXNjYWwxNiBCZWdpblBhaW50KHdvcmQgcHRyKSBCZWdpblBhaW50CiA0MCAgcGFzY2FsMTYgRW5kUGFpbnQod29yZCBwdHIpIEVuZFBhaW50CiA0MSAgcGFzY2FsMTYgQ3JlYXRlV2luZG93KHNlZ3B0ciBzZWdwdHIgbG9uZyBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQKLQkgICAgICAgICAgICAgICAgICB3b3JkIHdvcmQgd29yZCBzZWdwdHIpIENyZWF0ZVdpbmRvdworCSAgICAgICAgICAgICAgICAgIHdvcmQgd29yZCB3b3JkIHNlZ3B0cikgQ3JlYXRlV2luZG93MTYKIDQyICBwYXNjYWwxNiBTaG93V2luZG93KHdvcmQgd29yZCkgU2hvd1dpbmRvdwogNDMgIHBhc2NhbDE2IENsb3NlV2luZG93KHdvcmQpIENsb3NlV2luZG93CiA0NCAgcGFzY2FsMTYgT3Blbkljb24od29yZCkgT3Blbkljb24KQEAgLTU3LDcgKzU3LDcgQEAKIDU0ICBwYXNjYWwxNiBFbnVtV2luZG93cyhzZWdwdHIgbG9uZykgRW51bVdpbmRvd3MKIDU1ICBwYXNjYWwxNiBFbnVtQ2hpbGRXaW5kb3dzKHdvcmQgc2VncHRyIGxvbmcpIEVudW1DaGlsZFdpbmRvd3MKIDU2ICBwYXNjYWwxNiBNb3ZlV2luZG93KHdvcmQgd29yZCB3b3JkIHdvcmQgd29yZCB3b3JkKSBNb3ZlV2luZG93Ci01NyAgcGFzY2FsMTYgUmVnaXN0ZXJDbGFzcyhwdHIpIFJlZ2lzdGVyQ2xhc3MKKzU3ICBwYXNjYWwxNiBSZWdpc3RlckNsYXNzKHB0cikgUmVnaXN0ZXJDbGFzczE2CiA1OCAgcGFzY2FsMTYgR2V0Q2xhc3NOYW1lKHdvcmQgcHRyIHdvcmQpIEdldENsYXNzTmFtZQogNTkgIHBhc2NhbDE2IFNldEFjdGl2ZVdpbmRvdyh3b3JkKSBTZXRBY3RpdmVXaW5kb3cKIDYwICBwYXNjYWwxNiBHZXRBY3RpdmVXaW5kb3coKSBHZXRBY3RpdmVXaW5kb3cKQEAgLTM1Niw3ICszNTYsNyBAQAogNDAwIHN0dWIgRmluYWxVc2VySW5pdAogNDAyIHBhc2NhbDE2IEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KHdvcmQgcHRyIHNfd29yZCkKICAgICAgICAgICAgICBHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdAotNDAzIHBhc2NhbDE2IFVucmVnaXN0ZXJDbGFzcyhzZWdwdHIgd29yZCkgVW5yZWdpc3RlckNsYXNzCis0MDMgcGFzY2FsMTYgVW5yZWdpc3RlckNsYXNzKHNlZ3B0ciB3b3JkKSBVbnJlZ2lzdGVyQ2xhc3MxNgogNDA0IHBhc2NhbDE2IEdldENsYXNzSW5mbyh3b3JkIHNlZ3B0ciBwdHIpIEdldENsYXNzSW5mbwogNDA2IHBhc2NhbDE2IENyZWF0ZUN1cnNvcih3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgcHRyIHB0cikgQ3JlYXRlQ3Vyc29yCiA0MDcgcGFzY2FsMTYgQ3JlYXRlSWNvbih3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgcHRyIHB0cikgQ3JlYXRlSWNvbgpAQCAtMzcyLDEzICszNzIsMTEgQEAKIDQxNiBwYXNjYWwxNiBUcmFja1BvcHVwTWVudSh3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgd29yZCBwdHIpIFRyYWNrUG9wdXBNZW51CiA0MTcgcGFzY2FsICAgR2V0TWVudUNoZWNrTWFya0RpbWVuc2lvbnMoKSBHZXRNZW51Q2hlY2tNYXJrRGltZW5zaW9ucwogNDE4IHBhc2NhbDE2IFNldE1lbnVJdGVtQml0bWFwcyh3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQpIFNldE1lbnVJdGVtQml0bWFwcwotNDIwIHBhc2NhbDE2IHdzcHJpbnRmKCkgd2luZG93c193c3ByaW50ZgotIyB3aW5kb3dzX3dzcHJpbnRmKCkgaGFuZGxlcyBhcmd1bWVudHMgaXRzZWxmLCBhcyBsaWJjIGNhbid0IGhhbmRsZSBhbgotIyAxNi1iaXQgc3RhY2suIERMTFJlbGF5KCkgd2lsbCBwYXNzIDE2LWJpdCBzdGFjayBwb2ludGVyIGFzIDFzdCBhcmcuCis0MjAgcGFzY2FsMTYgd3NwcmludGYoKSB3c3ByaW50ZgogNDIxIHBhc2NhbDE2IHd2c3ByaW50ZihwdHIgcHRyIHB0cikgd3ZzcHJpbnRmCiA0MjIgc3R1YiBEbGdEaXJTZWxlY3RFeAogNDIzIHN0dWIgRGxnRGlyU2VsZWN0Q29tYm9Cb3hFeAotNDI3IHN0dWIgRmluZFdpbmRvd0V4Cis0MjcgcGFzY2FsMTYgRmluZFdpbmRvd0V4KHdvcmQgd29yZCBzZWdwdHIgcHRyKSBGaW5kV2luZG93RXgKIDQyOCBzdHViIFRpbGVXaW5kb3dzCiA0Mjkgc3R1YiBDYXNjYWRlV2luZG93cwogNDMwIHBhc2NhbDE2IGxzdHJjbXAocHRyIHB0cikgbHN0cmNtcApAQCAtNDAwLDcgKzM5OCw3IEBACiA0NTAgc3R1YiBDcmVhdGVJY29uRnJvbVJlc291cmNlRXgKIDQ1MSBwYXNjYWwxNiBUcmFuc2xhdGVNRElTeXNBY2NlbCh3b3JkIHB0cikgVHJhbnNsYXRlTURJU3lzQWNjZWwKIDQ1MiBwYXNjYWwxNiBDcmVhdGVXaW5kb3dFeChsb25nIHNlZ3B0ciBzZWdwdHIgbG9uZyBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkIHdvcmQgd29yZCBzZWdwdHIpIENyZWF0ZVdpbmRvd0V4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCB3b3JkIHdvcmQgc2VncHRyKSBDcmVhdGVXaW5kb3dFeDE2CiA0NTQgcGFzY2FsMTYgQWRqdXN0V2luZG93UmVjdEV4KHB0ciBsb25nIHdvcmQgbG9uZykgQWRqdXN0V2luZG93UmVjdEV4CiA0NTUgcGFzY2FsMTYgR2V0SWNvbklEKHdvcmQgbG9uZykgR2V0SWNvbklECiA0NTYgcGFzY2FsMTYgTG9hZEljb25IYW5kbGVyKHdvcmQgd29yZCkgTG9hZEljb25IYW5kbGVyCmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlcjMyLnNwZWMgYi9pZjE2MzIvdXNlcjMyLnNwZWMKaW5kZXggNmY2ODIxNS4uZTM4ZGY4OCAxMDA2NDQKLS0tIGEvaWYxNjMyL3VzZXIzMi5zcGVjCisrKyBiL2lmMTYzMi91c2VyMzIuc3BlYwpAQCAtODksNyArODksNyBAQAogMDA4MCBzdHViIENyZWF0ZU1lbnUKIDAwODEgc3R1YiBDcmVhdGVQb3B1cE1lbnUKIDAwODIgc3RkY2FsbCBDcmVhdGVXaW5kb3dFeEEobG9uZyBwdHIgcHRyIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyAKLQkJCQkJCQlsb25nIGxvbmcgbG9uZyBwdHIpCVVTRVIzMl9DcmVhdGVXaW5kb3dFeEEKKwkJCQlsb25nIGxvbmcgbG9uZyBwdHIpIENyZWF0ZVdpbmRvd0V4MzJBCiAwMDgzIHN0dWIgQ3JlYXRlV2luZG93RXhXCiAwMDg0IHN0dWIgQ3JlYXRlV2luZG93U3RhdGlvbkEKIDAwODUgc3R1YiBDcmVhdGVXaW5kb3dTdGF0aW9uVwpAQCAtMjM3LDcgKzIzNyw3IEBACiAwMjI1IHN0dWIgR2V0Q2xpcGJvYXJkVmlld2VyCiAwMjI2IHN0dWIgR2V0Q3Vyc29yCiAwMjI3IHN0dWIgR2V0Q3Vyc29ySW5mbwotMDIyOCBzdHViIEdldEN1cnNvclBvcworMDIyOCBzdGRjYWxsIEdldEN1cnNvclBvcyhwdHIpIEdldEN1cnNvclBvcwogMDIyOSBzdGRjYWxsIEdldERDKGxvbmcpIEdldERDCiAwMjMwIHN0dWIgR2V0RENFeAogMDIzMSBzdGRjYWxsIEdldERlc2t0b3BXaW5kb3coKSBHZXREZXNrdG9wV2luZG93CkBAIC00MzUsNyArNDM1LDcgQEAKIDA0MjMgc3R1YiBQdEluUmVjdAogMDQyNCBzdHViIFF1ZXJ5U2VuZE1lc3NhZ2UKIDA0MjUgc3R1YiBSZWRyYXdXaW5kb3cKLTA0MjYgc3RkY2FsbCBSZWdpc3RlckNsYXNzQShwdHIpCVVTRVIzMl9SZWdpc3RlckNsYXNzQQorMDQyNiBzdGRjYWxsIFJlZ2lzdGVyQ2xhc3NBKHB0cikgUmVnaXN0ZXJDbGFzczMyQQogMDQyNyBzdHViIFJlZ2lzdGVyQ2xhc3NFeEEKIDA0Mjggc3R1YiBSZWdpc3RlckNsYXNzRXhXCiAwNDI5IHN0dWIgUmVnaXN0ZXJDbGFzc1cKZGlmZiAtLWdpdCBhL2lmMTYzMi93c29jazMyLnNwZWMgYi9pZjE2MzIvd3NvY2szMi5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGJlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9pZjE2MzIvd3NvY2szMi5zcGVjCkBAIC0wLDAgKzEsODAgQEAKK25hbWUJd3NvY2szMgordHlwZQl3aW4zMgorYmFzZQkwCisKKzAwMSBzdHViIGFjY2VwdAorMDAyIHN0dWIgYmluZAorMDAzIHN0dWIgY2xvc2Vzb2NrZXQKKzAwNCBzdHViIGNvbm5lY3QKKzAwNSBzdHViIGdldHBlZXJuYW1lCiswMDYgc3R1YiBnZXRzb2NrbmFtZQorMDA3IHN0dWIgZ2V0c29ja29wdAorMDA4IHN0dWIgaHRvbmwKKzAwOSBzdHViIGh0b25zCiswMTAgc3R1YiBpbmV0X2FkZHIKKzAxMSBzdHViIGluZXRfbnRvYQorMDEyIHN0dWIgaW9jdGxzb2NrZXQKKzAxMyBzdHViIGxpc3RlbgorMDE0IHN0dWIgbnRvaGwKKzAxNSBzdHViIG50b2hzCiswMTYgc3R1YiByZWN2CiswMTcgc3R1YiByZWN2ZnJvbQorMDE4IHN0dWIgc2VsZWN0CiswMTkgc3R1YiBzZW5kCiswMjAgc3R1YiBzZW5kdG8KKzAyMSBzdHViIHNldHNvY2tvcHQKKzAyMiBzdHViIHNodXRkb3duCiswMjMgc3R1YiBzb2NrZXQKKzA1MSBzdHViIGdldGhvc3RieWFkZHIKKzA1MiBzdHViIGdldGhvc3RieW5hbWUKKzA1MyBzdHViIGdldHByb3RvYnluYW1lCiswNTQgc3R1YiBnZXRwcm90b2J5bnVtYmVyCiswNTUgc3R1YiBnZXRzZXJ2YnluYW1lCiswNTYgc3R1YiBnZXRzZXJ2Ynlwb3J0CiswNTcgc3R1YiBnZXRob3N0bmFtZQorMTAxIHN0dWIgV1NBQXN5bmNTZWxlY3QKKzEwMiBzdHViIFdTQUFzeW5jR2V0SG9zdEJ5QWRkcgorMTAzIHN0dWIgV1NBQXN5bmNHZXRIb3N0QnlOYW1lCisxMDQgc3R1YiBXU0FBc3luY0dldFByb3RvQnlOdW1iZXIKKzEwNSBzdHViIFdTQUFzeW5jR2V0UHJvdG9CeU5hbWUKKzEwNiBzdHViIFdTQUFzeW5jR2V0U2VydkJ5UG9ydAorMTA3IHN0dWIgV1NBQXN5bmNHZXRTZXJ2QnlOYW1lCisxMDggc3R1YiBXU0FDYW5jZWxBc3luY1JlcXVlc3QKKzEwOSBzdHViIFdTQVNldEJsb2NraW5nSG9vaworMTEwIHN0dWIgV1NBVW5ob29rQmxvY2tpbmdIb29rCisxMTEgc3R1YiBXU0FHZXRMYXN0RXJyb3IKKzExMiBzdHViIFdTQVNldExhc3RFcnJvcgorMTEzIHN0dWIgV1NBQ2FuY2VsQmxvY2tpbmdDYWxsCisxMTQgc3R1YiBXU0FJc0Jsb2NraW5nCisxMTUgc3R1YiBXU0FTdGFydHVwCisxMTYgc3R1YiBXU0FDbGVhbnVwCisxNTEgc3R1YiBfX1dTQUZESXNTZXQKKyM1MDAgc3R1YiBXRVAKKyMgYXBwbGljYXRpb25zICpzaG91bGQqICdkZWdyYWRlIGdyYWNlZnVsbHkgaWYgdGhlc2UgYXJlIG5vdCBwcmVzZW50CisjIC4uLiBhcyBpdCBpcywgdGhleSBkb24ndAorIzEwMDAgc3R1YiBXU0FwU2V0UG9zdFJvdXRpbmUKKyMxMTAwIHN0dWIgaW5ldF9uZXR3b3JrCisjMTEwMSBzdHViIGdldG5ldGJ5bmFtZQorIzExMDIgc3R1YiByY21kCisjMTEwMyBzdHViIHJleGVjCisjMTEwNCBzdHViIHJyZXN2cG9ydAorIzExMDUgc3R1YiBzZXRob3N0bmFtZQorIzExMDYgc3R1YiBkbl9leHBhbmQKKyMxMTA3IHN0dWIgV1NBUmVjdkV4CisxMTA4IHN0dWIgc19wZXJyb3IKKzExMDkgc3R1YiBHZXRBZGRyZXNzQnlOYW1lQQorMTExMCBzdHViIEdldEFkZHJlc3NCeU5hbWVXCisjMTExMSBzdHViIEVudW1Qcm90b2NvbHNBCisjMTExMiBzdHViIEVudW1Qcm90b2NvbHNXCisjMTExMyBzdHViIEdldFR5cGVCeU5hbWVBCisjMTExNCBzdHViIEdldFR5cGVCeU5hbWVXCisjMTExNSBzdHViIEdldE5hbWVCeVR5cGVBCisjMTExNiBzdHViIEdldE5hbWVCeVR5cGVXCisjMTExNyBzdHViIFNldFNlcnZpY2VBCisjMTExOCBzdHViIFNldFNlcnZpY2VXCisjMTExOSBzdHViIEdldFNlcnZpY2VBCisjMTEyMCBzdHViIEdldFNlcnZpY2VXCisjMTEzMCBzdHViIE5QTG9hZE5hbWVTcGFjZXMKKyMxMTQwIHN0dWIgVHJhbnNtaXRGaWxlCisjMTE0MSBzdHViIEFjY2VwdEV4CisjMTE0MiBzdHViIEdldEFjY2VwdEV4U29ja2FkZHJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FkdmFwaTMyLmggYi9pbmNsdWRlL2FkdmFwaTMyLmgKaW5kZXggZDQ1MzFhZC4uNWRlMzgzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hZHZhcGkzMi5oCisrKyBiL2luY2x1ZGUvYWR2YXBpMzIuaApAQCAtMyw2ICszLDYgQEAKICNpbmNsdWRlICJzaGVsbC5oIgogI2luY2x1ZGUgImtlcm5lbDMyLmgiCiAKLUJPT0wgV0lOQVBJIEdldFVzZXJOYW1lQSAoY2hhciAqIGxwQnVmZmVyLCBEV09SRCAgKm5TaXplKTsKK0JPT0wgR2V0VXNlck5hbWVBIChjaGFyICogbHBCdWZmZXIsIERXT1JEICAqblNpemUpOwogCiAjZW5kaWYgIC8qIF9fV0lORV9BRFZBUEkzMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NhcHRpb24uaCBiL2luY2x1ZGUvY2FwdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzk1MWMzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY2FwdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqICAgQ2FwdGlvbiBCYXIgZGVmaW5pdGlvbnMKLSAqLwotCi0KLXR5cGVkZWYgc3RydWN0IHRhZ0hFQURDQVBUSU9OIHsKLSAgICBIQklUTUFQCWhDbG9zZTsKLSAgICBIQklUTUFQCWhNaW5pbTsKLSAgICBIQklUTUFQCWhNYXhpbTsKLSAgICBITUVOVQloU3lzTWVudTsKLSAgICBSRUNUCXJlY3RDbG9zZTsKLSAgICBSRUNUCXJlY3RNaW5pbTsKLSAgICBSRUNUCXJlY3RNYXhpbTsKLX0gSEVBRENBUFRJT047Ci10eXBlZGVmIEhFQURDQVBUSU9OIEZBUiogTFBIRUFEQ0FQVElPTjsKLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NsYXNzLmggYi9pbmNsdWRlL2NsYXNzLmgKaW5kZXggMDQyYzc0Ni4uZjExMDA4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jbGFzcy5oCisrKyBiL2luY2x1ZGUvY2xhc3MuaApAQCAtOSwxOCArOSwyNSBAQAogCiAjaW5jbHVkZSAid2luZG93cy5oIgogCi0jZGVmaW5lIENMQVNTX01BR0lDICAgMHg0YjRlICAgICAgLyogJ05LJyAqLworI2RlZmluZSBDTEFTU19NQUdJQyAgICgnQycgfCAoJ0wnIDw8IDgpIHwgKCdBJyA8PCAxNikgfCAoJ1MnIDw8IDI0KSkKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnQ0xBU1MKIHsKLSAgICBzdHJ1Y3QgdGFnQ0xBU1MgKm5leHQ7ICAgICAgLyogTmV4dCBjbGFzcyAqLwotICAgIEhDTEFTUyAgICAgICAgICAgc2VsZjsgICAgICAvKiBIYW5kbGUgdG8gdGhpcyBjbGFzcyAqLwotICAgIFdPUkQgICAgICAgICAgICAgd01hZ2ljOyAgICAvKiBNYWdpYyBudW1iZXIgKG11c3QgYmUgQ0xBU1NfTUFHSUMpICovCi0gICAgQVRPTSAgICAgICAgICAgICBhdG9tTmFtZTsgIC8qIE5hbWUgb2YgdGhlIGNsYXNzICovCi0gICAgSEFORExFICAgICAgICAgICBoZGNlOyAgICAgIC8qIENsYXNzIERDRSAoaWYgQ1NfQ0xBU1NEQykgKi8KLSAgICBXT1JEICAgICAgICAgICAgIGNXaW5kb3dzOyAgLyogQ291bnQgb2YgZXhpc3Rpbmcgd2luZG93cyBvZiB0aGlzIGNsYXNzICovCi0gICAgV05EQ0xBU1MgICAgICAgICB3YzsgICAgICAgIC8qIENsYXNzIGluZm9ybWF0aW9uICovCi0gICAgV09SRCAgICAgICAgICAgICB3RXh0cmFbMV07IC8qIENsYXNzIGV4dHJhIGJ5dGVzICovCisgICAgc3RydWN0IHRhZ0NMQVNTICpuZXh0OyAgICAgICAgICAvKiBOZXh0IGNsYXNzICovCisgICAgVUlOVDMyICAgICAgICAgICBtYWdpYzsgICAgICAgICAvKiBNYWdpYyBudW1iZXIgKi8KKyAgICBVSU5UMzIgICAgICAgICAgIGNXaW5kb3dzOyAgICAgIC8qIENvdW50IG9mIGV4aXN0aW5nIHdpbmRvd3MgKi8KKyAgICBVSU5UMzIgICAgICAgICAgIHN0eWxlOyAgICAgICAgIC8qIENsYXNzIHN0eWxlICovCisgICAgV05EUFJPQzE2ICAgICAgICBscGZuV25kUHJvYzsgICAvKiAxNi1iaXQgd2luZG93IHByb2NlZHVyZSAqLyAKKyAgICBJTlQzMiAgICAgICAgICAgIGNiQ2xzRXh0cmE7ICAgIC8qIENsYXNzIGV4dHJhIGJ5dGVzICovCisgICAgSU5UMzIgICAgICAgICAgICBjYlduZEV4dHJhOyAgICAvKiBXaW5kb3cgZXh0cmEgYnl0ZXMgKi8KKyAgICBTRUdQVFIgICAgICAgICAgIGxwc3pNZW51TmFtZTsgIC8qIERlZmF1bHQgbWVudSBuYW1lICovCisgICAgSEFORExFMTYgICAgICAgICBoSW5zdGFuY2U7ICAgICAvKiBNb2R1bGUgdGhhdCBjcmVhdGVkIHRoZSB0YXNrICovCisgICAgSElDT04xNiAgICAgICAgICBoSWNvbjsgICAgICAgICAvKiBEZWZhdWx0IGljb24gKi8KKyAgICBIQ1VSU09SMTYgICAgICAgIGhDdXJzb3I7ICAgICAgIC8qIERlZmF1bHQgY3Vyc29yICovCisgICAgSEJSVVNIMTYgICAgICAgICBoYnJCYWNrZ3JvdW5kOyAvKiBEZWZhdWx0IGJhY2tncm91bmQgKi8KKyAgICBBVE9NICAgICAgICAgICAgIGF0b21OYW1lOyAgICAgIC8qIE5hbWUgb2YgdGhlIGNsYXNzICovCisgICAgSEFORExFMTYgICAgICAgICBoZGNlOyAgICAgICAgICAvKiBDbGFzcyBEQ0UgKGlmIENTX0NMQVNTREMpICovCisgICAgV09SRCAgICAgICAgICAgICB3RXh0cmFbMV07ICAgICAvKiBDbGFzcyBleHRyYSBieXRlcyAqLwogfSBDTEFTUzsKIAogZXh0ZXJuIHZvaWQgQ0xBU1NfRHVtcENsYXNzKCBDTEFTUyAqY2xhc3MgKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbWRsZy5oIGIvaW5jbHVkZS9jb21tZGxnLmgKaW5kZXggMzg0YjBiNC4uODQ5NjVlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tZGxnLmgKKysrIGIvaW5jbHVkZS9jb21tZGxnLmgKQEAgLTUsNiArNSwxMiBAQAogI2lmbmRlZiBDT01NRExHX0gKICNkZWZpbmUgQ09NTURMR19ICiAKKyNpbmNsdWRlICJ3aW50eXBlcy5oIgkJLyogbmVlZGVkIGZvciBDSE9PU0VGT05UIHN0cnVjdHVyZSAqLworCisjaWZuZGVmIFdJTkVMSUIKKyNwcmFnbWEgcGFjaygxKQorI2VuZGlmCisKICNkZWZpbmUgUlRfQ1VSU09SICAgICAgICAgICBNQUtFSU5UUkVTT1VSQ0UoMSkKICNkZWZpbmUgUlRfQklUTUFQICAgICAgICAgICBNQUtFSU5UUkVTT1VSQ0UoMikKICNkZWZpbmUgUlRfSUNPTiAgICAgICAgICAgICBNQUtFSU5UUkVTT1VSQ0UoMykKQEAgLTc3LDEwICs4MywxMCBAQAogCUhXTkQJCWh3bmRPd25lcjsKIAlIV05ECQloSW5zdGFuY2U7CiAJQ09MT1JSRUYJcmdiUmVzdWx0OwotCUNPTE9SUkVGCUZBUiogbHBDdXN0Q29sb3JzOworCUNPTE9SUkVGICAgICAgICpscEN1c3RDb2xvcnM7CiAJRFdPUkQgCQlGbGFnczsKIAlMUEFSQU0JCWxDdXN0RGF0YTsKLQlVSU5UCQkoQ0FMTEJBQ0sqIGxwZm5Ib29rKShIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisJVUlOVAkJKCpscGZuSG9vaykoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogCUxQQ1NUUiAJCWxwVGVtcGxhdGVOYW1lOwogCX0gQ0hPT1NFQ09MT1I7CiB0eXBlZGVmIENIT09TRUNPTE9SICpMUENIT09TRUNPTE9SOwpAQCAtMTM1LDIyICsxNDEsMjIgQEAKIAlIREMgICAgICAgICAgICAJICAgICAgICBoREM7ICAgICAgICAgICAgICAgIC8qIHByaW50ZXIgREMvSUMgb3IgTlVMTCAgICAqLwogCVNFR1BUUiAgICAgICAgICAgICAgICAgIGxwTG9nRm9udDsgICAgICAgICAgLyogcHRyLiB0byBhIExPR0ZPTlQgc3RydWN0ICovCiAJc2hvcnQJCQlpUG9pbnRTaXplOyAgICAgICAgIC8qIDEwICogc2l6ZSBpbiBwb2ludHMgb2Ygc2VsZWN0ZWQgZm9udCAqLwotCURXT1JECQkJRmxhZ3M7ICAgICAgICAgICAgICAvKiBlbnVtLiB0eXBlIGZsYWdzICAgICAgICAgKi8KKwlEV09SRAkJCUZsYWdzIFdJTkVfUEFDS0VEOyAgLyogZW51bS4gdHlwZSBmbGFncyAgICAgICAgICovCiAJQ09MT1JSRUYJCXJnYkNvbG9yczsgICAgICAgICAgLyogcmV0dXJuZWQgdGV4dCBjb2xvciAgICAgICovCiAJTFBBUkFNCSAgICAgICAgICAgICAgICBsQ3VzdERhdGE7ICAgICAgICAgIC8qIGRhdGEgcGFzc2VkIHRvIGhvb2sgZm4uICAqLwogLyoJVUlOVCAoQ0FMTEJBQ0sqIGxwZm5Ib29rKShIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ki8KICAgICAgICAgRkFSUFJPQyAgICAgICAgICAgICAgICAgbHBmbkhvb2s7CiAJU0VHUFRSCQkJbHBUZW1wbGF0ZU5hbWU7ICAgICAvKiBjdXN0b20gdGVtcGxhdGUgbmFtZSAgICAgKi8KIAlISU5TVEFOQ0UJCWhJbnN0YW5jZTsgICAgICAgICAgLyogaW5zdGFuY2UgaGFuZGxlIG9mLkVYRSB0aGF0ICAgKi8KLQkJCQkJCQkJCQkvKiBjb250YWlucyBjdXN0LiBkbGcuIHRlbXBsYXRlICAqLwotCVNFR1BUUgkJCWxwc3pTdHlsZTsgICAgICAgICAgLyogcmV0dXJuIHRoZSBzdHlsZSBmaWVsZCBoZXJlICAgKi8KLQkJCQkJCQkJCQkvKiBtdXN0IGJlIExGX0ZBQ0VTSVpFIG9yIGJpZ2dlciAqLwotCVVJTlQJCQluRm9udFR5cGU7ICAgICAgICAgIC8qIHNhbWUgdmFsdWUgcmVwb3J0ZWQgdG8gdGhlICAgICovCi0JCQkJCQkJCQkJLyogRW51bUZvbnRzIGNhbGxiYWNrIHdpdGggdGhlICAgKi8KLQkJCQkJCQkJCQkvKiBleHRyYSBGT05UVFlQRV8gYml0cyBhZGRlZCAgICAqLwotCXNob3J0CQkJblNpemVNaW47ICAgICAgICAgICAvKiBtaW5pbXVtIHB0IHNpemUgYWxsb3dlZCAmICovCi0Jc2hvcnQJCQluU2l6ZU1heDsgICAgICAgICAgIC8qIG1heCBwdCBzaXplIGFsbG93ZWQgaWYgICAgKi8KLQkJCQkJCQkJCQkvKiBDRl9MSU1JVFNJWkUgaXMgdXNlZCAgICAgICovCisJCQkJCQkJLyogY29udGFpbnMgY3VzdC4gZGxnLiB0ZW1wbGF0ZSAgKi8KKwlTRUdQVFIJCQlscHN6U3R5bGUgV0lORV9QQUNLRUQ7ICAvKiByZXR1cm4gdGhlIHN0eWxlIGZpZWxkIGhlcmUgICAqLworCQkJCQkJCS8qIG11c3QgYmUgTEZfRkFDRVNJWkUgb3IgYmlnZ2VyICovCisJVUlOVAkJCW5Gb250VHlwZTsgICAgICAgICAgCS8qIHNhbWUgdmFsdWUgcmVwb3J0ZWQgdG8gdGhlICAgICovCisJCQkJCQkgICAgCS8qIEVudW1Gb250cyBjYWxsYmFjayB3aXRoIHRoZSAgICovCisJCQkJCQkJLyogZXh0cmEgRk9OVFRZUEVfIGJpdHMgYWRkZWQgICAgKi8KKwlzaG9ydAkJCW5TaXplTWluIFdJTkVfUEFDS0VEOyAgIC8qIG1pbmltdW0gcHQgc2l6ZSBhbGxvd2VkICYgKi8KKwlzaG9ydAkJCW5TaXplTWF4IFdJTkVfUEFDS0VEOyAgIC8qIG1heCBwdCBzaXplIGFsbG93ZWQgaWYgICAgKi8KKwkJCQkJCQkvKiBDRl9MSU1JVFNJWkUgaXMgdXNlZCAgICAgICovCiAJfSBDSE9PU0VGT05UOwogdHlwZWRlZiBDSE9PU0VGT05UICpMUENIT09TRUZPTlQ7CiAKQEAgLTMwOSw2ICszMTUsMTAgQEAKIExSRVNVTFQgUHJpbnRTZXR1cERsZ1Byb2MoSFdORCBoV25kLCBVSU5UIHdNc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOwogTFJFU1VMVCBGb3JtYXRDaGFyRGxnUHJvYyhIV05EIGhXbmQsIFVJTlQgd01zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CiAKKyNpZm5kZWYgV0lORUxJQgorI3ByYWdtYSBwYWNrKDQpCisjZW5kaWYKKwogI2VuZGlmIAkJLyogI2lmZGVmIENPTU1ETEdfSCAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJpdmVyLmggYi9pbmNsdWRlL2RyaXZlci5oCmluZGV4IGJlNjI5ODEuLjVjMmEwOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9kcml2ZXIuaApAQCAtMzUsMTggKzM1LDE0IEBACiAJRFdPUkQgICBkd0RDSVNpemU7CiAJTFBDU1RSICBscHN6RENJU2VjdGlvbk5hbWU7CiAJTFBDU1RSICBscHN6RENJQWxpYXNOYW1lOwotCX0gRFJWQ09ORklHSU5GTzsKLXR5cGVkZWYgRFJWQ09ORklHSU5GTyBGQVIqIExQRFJWQ09ORklHSU5GTzsKK30gRFJWQ09ORklHSU5GTywgKkxQRFJWQ09ORklHSU5GTzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCVVJTlQgICAgbGVuZ3RoOwogCUhEUlZSICAgaERyaXZlcjsKIAlISU5TVEFOQ0UgaE1vZHVsZTsKIAljaGFyICAgIHN6QWxpYXNOYW1lWzEyOF07Ci0JfSBEUklWRVJJTkZPU1RSVUNUOwotdHlwZWRlZiBEUklWRVJJTkZPU1RSVUNUIEZBUiogTFBEUklWRVJJTkZPU1RSVUNUOwotCi10eXBlZGVmIExPTkcgKENBTExCQUNLKiBEUklWRVJQUk9DKShEV09SRCwgSERSVlIsIFVJTlQsIExQQVJBTSwgTFBBUkFNKTsKK30gRFJJVkVSSU5GT1NUUlVDVCwgKkxQRFJJVkVSSU5GT1NUUlVDVDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURSSVZFUklORk9TVFJVQ1QgZGlzOwpAQCAtNTQsOCArNTAsNyBAQAogCXZvaWQJCSpscFByZXZJdGVtOwogCXZvaWQJCSpscE5leHRJdGVtOwogCURSSVZFUlBST0MJbHBEcnZQcm9jOwotCX0gRFJJVkVSSVRFTTsKLXR5cGVkZWYgRFJJVkVSSVRFTSBGQVIqIExQRFJJVkVSSVRFTTsKK30gRFJJVkVSSVRFTSwgKkxQRFJJVkVSSVRFTTsKIAogTFJFU1VMVCBEZWZEcml2ZXJQcm9jKERXT1JEIGR3RGV2SUQsIEhEUlZSIGhEcml2LCBXT1JEIHdNc2csIAogCQkJCQkJRFdPUkQgZHdQYXJhbTEsIERXT1JEIGR3UGFyYW0yKTsKQEAgLTY0LDcgKzU5LDcgQEAKIExSRVNVTFQgU2VuZERyaXZlck1lc3NhZ2UoSERSVlIgaERyaXZlciwgV09SRCBtZXNzYWdlLCBMUEFSQU0gbFBhcmFtMSwgTFBBUkFNIGxQYXJhbTIpOwogSElOU1RBTkNFIEdldERyaXZlck1vZHVsZUhhbmRsZShIRFJWUiBoRHJpdmVyKTsKIEhEUlZSICAgR2V0TmV4dERyaXZlcihIRFJWUiwgRFdPUkQpOwotQk9PTCAgICBHZXREcml2ZXJJbmZvKEhEUlZSLCBEUklWRVJJTkZPU1RSVUNUIEZBUiopOworQk9PTCAgICBHZXREcml2ZXJJbmZvKEhEUlZSLCBEUklWRVJJTkZPU1RSVUNUICopOwogCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9leGNlcHQuaCBiL2luY2x1ZGUvZXhjZXB0LmgKaW5kZXggYzM2NTRmYi4uMWMyZWMwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9leGNlcHQuaAorKysgYi9pbmNsdWRlL2V4Y2VwdC5oCkBAIC0yMDksNyArMjA5LDcgQEAKICAqIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYSBVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKTsKICAqLwogCi10eXBlZGVmIGxvbmcgKFdJTkFQSSAqX19QVE9QX0VYQ0ZJTFRFUikKK3R5cGVkZWYgbG9uZyAoKl9fUFRPUF9FWENGSUxURVIpCiAgICAgICAgICAgICAgICAgICAgKFBFWENFUFRJT05fUE9JTlRFUlMgRXhjZXB0aW9uSW5mbyk7CiAKIHR5cGVkZWYgX19QVE9QX0VYQ0ZJTFRFUiBQVE9QX0xFVkVSX0VYQ0VQVElPTl9GSUxURVI7CkBAIC0yNTMsOCArMjUzLDggQEAKIAogdm9pZCBFWENfSW5pdCh2b2lkKTsKIAotQk9PTCBXSU5BUEkgUmFpc2VFeGNlcHRpb24oRFdPUkQgZXhjY29kZSwgRFdPUkQgZXhjZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBuYXJncywgY29uc3QgTFBEV09SRCBwYXJncyk7CitCT09MIFJhaXNlRXhjZXB0aW9uKERXT1JEIGV4Y2NvZGUsIERXT1JEIGV4Y2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICBEV09SRCBuYXJncywgY29uc3QgTFBEV09SRCBwYXJncyk7CiAKIC8qCiAgKiAgdGhpcyB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uCkBAIC0yNzAsMTQgKzI3MCwxNCBAQAogICogIGNvbnRleHQuICAgCiAgKi8KIAotQk9PTCAgV0lOQVBJIFJ0bFVud2luZCggUEVYQ0VQVElPTl9GUkFNRSBwZXN0ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgdW51c2VkRUlQLAotICAgICAgICAgICAgICAgICAgICAgICAgUEVYQ0VQVElPTl9SRUNPUkQgcGV4Y3JlYywKLSAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGNvbnRleHRFQVggKTsKK0JPT0wgUnRsVW53aW5kKCBQRVhDRVBUSU9OX0ZSQU1FIHBlc3RmcmFtZSwKKyAgICAgICAgICAgICAgICBMUFZPSUQgdW51c2VkRUlQLAorICAgICAgICAgICAgICAgIFBFWENFUFRJT05fUkVDT1JEIHBleGNyZWMsCisgICAgICAgICAgICAgICAgRFdPUkQgY29udGV4dEVBWCApOwogCi1EV09SRCBXSU5BUEkgVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKFBFWENFUFRJT05fUE9JTlRFUlMgZXBvaW50ZXJzKTsKK0RXT1JEIFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcihQRVhDRVBUSU9OX1BPSU5URVJTIGVwb2ludGVycyk7CiAKLV9fUFRPUF9FWENGSUxURVIgV0lOQVBJIFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcigKK19fUFRPUF9FWENGSUxURVIgU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKAogICAgICAgTFBUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUiBscFRvcExldmVsRXhjZXB0aW9uRmlsdGVyKTsKICAgCiAjZW5kaWYgIC8qIF9fV0lORV9FWENFUFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9nZGkuaCBiL2luY2x1ZGUvZ2RpLmgKaW5kZXggMzlhNjVmNC4uOTU4MWJiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9nZGkuaAorKysgYi9pbmNsdWRlL2dkaS5oCkBAIC0xOTgsMTIgKzE5OCw3IEBACiAjZGVmaW5lIERDX1NBVkVEICAgICAgMiAgIC8qIEl0IGlzIGEgc2F2ZWQgREMgKi8KIAogICAvKiBMYXN0IDMyIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3Igc3RvY2sgb2JqZWN0IGhhbmRsZXMgKi8KLSNpZmRlZiBXSU5FTElCMzIKLS8qIFN0dXBpZCBvdmVybG9hZGluZyAoc2VlIERlZldpbmRvd1Byb2MsIGNhc2UgV01fRVJBU0VCS0dORCkgKi8KLSNkZWZpbmUgR0RJX0hFQVBfU0laRSAgICAgICAgICAgICAgIChDT0xPUl9CVE5ISUdITElHSFQrMSkKLSNlbHNlCi0jZGVmaW5lIEdESV9IRUFQX1NJWkUgICAgICAgICAgICAgICAweGZmZTAgIAotI2VuZGlmCisjZGVmaW5lIEdESV9IRUFQX1NJWkUgICAgICAgICAgICAgICAweGZmZTAKIAogICAvKiBGaXJzdCBoYW5kbGUgcG9zc2libGUgZm9yIHN0b2NrIG9iamVjdHMgKG11c3QgYmUgPj0gR0RJX0hFQVBfU0laRSkgKi8KICNkZWZpbmUgRklSU1RfU1RPQ0tfSEFORExFICAgICAgICAgIEdESV9IRUFQX1NJWkUKQEAgLTI0OSwxNSArMjQ0LDYgQEAKIAogICAvKiBHREkgbG9jYWwgaGVhcCAqLwogCi0jaWZkZWYgV0lORUxJQgotCi0jZGVmaW5lIEdESV9IRUFQX0FMTE9DKHNpemUpICAgICBMb2NhbEFsbG9jIChMTUVNX0ZJWEVELHNpemUpCi0jZGVmaW5lIEdESV9IRUFQX0xJTl9BRERSKGhhbmRsZSkgIExvY2FsTG9jayAoaGFuZGxlKQotI2RlZmluZSBHRElfSEVBUF9TRUdfQUREUihoYW5kbGUpICBMb2NhbExvY2sgKGhhbmRsZSkKLSNkZWZpbmUgR0RJX0hFQVBfRlJFRShoYW5kbGUpICAgICAgTG9jYWxGcmVlIChoYW5kbGUpCi0KLSNlbHNlCi0KIGV4dGVybiBXT1JEIEdESV9IZWFwU2VsOwogCiAjZGVmaW5lIEdESV9IRUFQX0FMTE9DKHNpemUpIFwKQEAgLTI2OCwxMCArMjU0LDE0IEBACiAgICAgICAgICAgICBMT0NBTF9GcmVlKCBHRElfSGVhcFNlbCwgKGhhbmRsZSkgKQogI2RlZmluZSBHRElfSEVBUF9MSU5fQUREUihoYW5kbGUpICBcCiAgICAgICAgICAgICAoKGhhbmRsZSkgPyBQVFJfU0VHX09GRl9UT19MSU4oR0RJX0hlYXBTZWwsIChoYW5kbGUpKSA6IE5VTEwpCisKKyNpZmRlZiBXSU5FTElCCisjZGVmaW5lIEdESV9IRUFQX1NFR19BRERSKGhhbmRsZSkgKChTRUdQVFIpR0RJX0hFQVBfTElOX0FERFIoaGFuZGxlKSkKKyNlbHNlCiAjZGVmaW5lIEdESV9IRUFQX1NFR19BRERSKGhhbmRsZSkgIFwKICAgICAgICAgICAgICgoaGFuZGxlKSA/IE1BS0VMT05HKChoYW5kbGUpLCBHRElfSGVhcFNlbCkgOiAwKQogCi0jZW5kaWYKKyNlbmRpZiAgLyogV0lORUxJQiAqLwogCiBleHRlcm4gQk9PTCBHRElfSW5pdCh2b2lkKTsKIGV4dGVybiBIQU5ETEUgR0RJX0FsbG9jT2JqZWN0KCBXT1JELCBXT1JEICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dsb2JhbC5oIGIvaW5jbHVkZS9nbG9iYWwuaAppbmRleCBkMTY5MmJlLi40MjAxNGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dsb2JhbC5oCisrKyBiL2luY2x1ZGUvZ2xvYmFsLmgKQEAgLTExLDE4ICsxMSwxOCBAQAogCiB0eXBlZGVmIHN0cnVjdAogewotICAgIEhHTE9CQUwgaGFuZGxlOworICAgIEhHTE9CQUwxNiBoYW5kbGU7CiAgICAgV09SRCBzZWw7CiAgICAgaW50IHNobWlkOwogfSBTSE1EQVRBOwogCi1leHRlcm4gSEdMT0JBTCBHTE9CQUxfQ3JlYXRlQmxvY2soIFdPUkQgZmxhZ3MsIGNvbnN0IHZvaWQgKnB0ciwgRFdPUkQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEdMT0JBTCBoT3duZXIsIEJPT0wgaXNDb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGlzMzJCaXQsIEJPT0wgaXNSZWFkT25seSwKLQkJCQkgICBTSE1EQVRBICpzaG1kYXRhKTsKLWV4dGVybiBCT09MIEdMT0JBTF9GcmVlQmxvY2soIEhHTE9CQUwgaGFuZGxlICk7Ci1leHRlcm4gSEdMT0JBTCBHTE9CQUxfQWxsb2MoIFdPUkQgZmxhZ3MsIERXT1JEIHNpemUsIEhHTE9CQUwgaE93bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGlzQ29kZSwgQk9PTCBpczMyQml0LCBCT09MIGlzUmVhZE9ubHkgKTsKLWV4dGVybiBXT1JEIEdsb2JhbEhhbmRsZVRvU2VsKCBIR0xPQkFMIGhhbmRsZSApOworZXh0ZXJuIEhHTE9CQUwxNiBHTE9CQUxfQ3JlYXRlQmxvY2soIFVJTlQxNiBmbGFncywgY29uc3Qgdm9pZCAqcHRyLCBEV09SRCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhHTE9CQUwxNiBoT3duZXIsIEJPT0wgaXNDb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgaXMzMkJpdCwgQk9PTCBpc1JlYWRPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNITURBVEEgKnNobWRhdGEpOworZXh0ZXJuIEJPT0wgR0xPQkFMX0ZyZWVCbG9jayggSEdMT0JBTDE2IGhhbmRsZSApOworZXh0ZXJuIEhHTE9CQUwxNiBHTE9CQUxfQWxsb2MoIFdPUkQgZmxhZ3MsIERXT1JEIHNpemUsIEhHTE9CQUwxNiBoT3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBpc0NvZGUsIEJPT0wgaXMzMkJpdCwgQk9PTCBpc1JlYWRPbmx5ICk7CitleHRlcm4gV09SRCBHbG9iYWxIYW5kbGVUb1NlbCggSEdMT0JBTDE2IGhhbmRsZSApOwogCiAjZW5kaWYgIC8qIF9fV0lORV9HTE9CQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sZHQuaCBiL2luY2x1ZGUvbGR0LmgKaW5kZXggYjAyYjJjZC4uMGRhYWFkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9sZHQuaAorKysgYi9pbmNsdWRlL2xkdC5oCkBAIC00NywzNiArNDcsMjUgQEAKICNkZWZpbmUgX19BSFNISUZUICAzICAvKiBkb24ndCBjaGFuZ2UhICovCiAjZGVmaW5lIF9fQUhJTkNSICAgKDEgPDwgX19BSFNISUZUKQogCi0jaWZuZGVmIFdJTkVMSUIKICNkZWZpbmUgU0VMRUNUT1JfVE9fRU5UUlkoc2VsKSAgKCgoaW50KShzZWwpICYgMHhmZmZmKSA+PiBfX0FIU0hJRlQpCiAjZGVmaW5lIEVOVFJZX1RPX1NFTEVDVE9SKGkpICAgICgoaSkgPyAoKChpbnQpKGkpIDw8IF9fQUhTSElGVCkgfCA3KSA6IDApCiAjZGVmaW5lIElTX0xEVF9FTlRSWV9GUkVFKGkpICAgICghKGxkdF9mbGFnc19jb3B5WyhpKV0gJiBMRFRfRkxBR1NfQUxMT0NBVEVEKSkKICNkZWZpbmUgSVNfU0VMRUNUT1JfRlJFRShzZWwpICAgKElTX0xEVF9FTlRSWV9GUkVFKFNFTEVDVE9SX1RPX0VOVFJZKHNlbCkpKQogI2RlZmluZSBHRVRfU0VMX0JBU0Uoc2VsKSAgICAgICAobGR0X2NvcHlbU0VMRUNUT1JfVE9fRU5UUlkoc2VsKV0uYmFzZSkKICNkZWZpbmUgR0VUX1NFTF9MSU1JVChzZWwpICAgICAgKGxkdF9jb3B5W1NFTEVDVE9SX1RPX0VOVFJZKHNlbCldLmxpbWl0KQotI2Vsc2UKLS8qIENvbXBsYWluIGlmIHRoZXNlIGFyZSB1c2VkIGluIFdpbmVMaWIgKi8KLSNkZWZpbmUgU0VMRUNUT1JfVE9fRU5UUlkoc2VsKSAgZXJyb3IuZXJyb3IKLSNkZWZpbmUgRU5UUllfVE9fU0VMRUNUT1IoaSkgICAgZXJyb3IuZXJyb3IKLSNkZWZpbmUgSVNfTERUX0VOVFJZX0ZSRUUoaSkgICAgZXJyb3IuZXJyb3IKLSNkZWZpbmUgSVNfU0VMRUNUT1JfRlJFRShzZWwpICAgZXJyb3IuZXJyb3IKLSNkZWZpbmUgR0VUX1NFTF9CQVNFKHNlbCkgICAgICAgZXJyb3IuZXJyb3IKLSNkZWZpbmUgR0VUX1NFTF9MSU1JVChzZWwpICAgICAgZXJyb3IuZXJyb3IKLSNlbmRpZgotCi0jaWZuZGVmIFdJTkVMSUIKLSAgLyogQ29udmVydCBhIHNlZ21lbnRlZCBwdHIgKDE2OjE2KSB0byBhIGxpbmVhciAoMzIpIHBvaW50ZXIgKi8KLSNkZWZpbmUgUFRSX1NFR19UT19MSU4ocHRyKSBcCi0gICAgICAgICAgICgodm9pZCopKEdFVF9TRUxfQkFTRSgoaW50KShwdHIpID4+IDE2KSArICgoaW50KShwdHIpICYgMHhmZmZmKSkpCiAKICNkZWZpbmUgUFRSX1NFR19PRkZfVE9fTElOKHNlZyxvZmYpIFwKICAgICAgICAgICAgKCh2b2lkKikoR0VUX1NFTF9CQVNFKHNlZykgKyAodW5zaWduZWQgaW50KShvZmYpKSkKKworI2lmbmRlZiBXSU5FTElCCisgIC8qIENvbnZlcnQgYSBzZWdtZW50ZWQgcHRyICgxNjoxNikgdG8gYSBsaW5lYXIgKDMyKSBwb2ludGVyICovCisjZGVmaW5lIFBUUl9TRUdfVE9fTElOKHB0cikgUFRSX1NFR19PRkZfVE9fTElOKFNFTEVDVE9ST0YocHRyKSxPRkZTRVRPRihwdHIpKQorI2RlZmluZSBQVFJfU0VHX09GRl9UT19TRUdQVFIoc2VnLG9mZikgKChTRUdQVFIpTUFLRUxPTkcob2ZmLHNlZykpCiAjZWxzZQogI2RlZmluZSBQVFJfU0VHX1RPX0xJTihwdHIpCSgodm9pZCopKHB0cikpCi0jZGVmaW5lIFBUUl9TRUdfT0ZGX1RPX0xJTihzZWcsb2ZmKQkoKHZvaWQqKSgoY2hhciopKHNlZykrKGludCkob2ZmKSkpCisjZGVmaW5lIFBUUl9TRUdfT0ZGX1RPX1NFR1BUUihzZWcsb2ZmKSAoKFNFR1BUUilQVFJfU0VHX09GRl9UT19MSU4oc2VnLG9mZikpCiAjZW5kaWYKIAotCiBleHRlcm4gdW5zaWduZWQgY2hhciBsZHRfZmxhZ3NfY29weVtMRFRfU0laRV07CiAKICNkZWZpbmUgTERUX0ZMQUdTX1RZUEUgICAgICAweDAzICAvKiBNYXNrIGZvciBzZWdtZW50IHR5cGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlzdGJveC5oIGIvaW5jbHVkZS9saXN0Ym94LmgKaW5kZXggNjBiZWQ3NS4uZWJkOWM5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saXN0Ym94LmgKKysrIGIvaW5jbHVkZS9saXN0Ym94LmgKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgQk9PTCAgICBIYXNTdHJpbmdzOwogICAgICAgICBCT09MICAgIE93bmVyRHJhd247CiAJV09SRCAgICBpTnVtU3RvcHM7Ci0JTFBJTlQgICBUYWJTdG9wczsKKwlMUElOVDE2IFRhYlN0b3BzOwogCUhBTkRMRSAgaERyYXdJdGVtU3RydWN0OwogICAgICAgICBCT09MICAgIG5lZWRNZWFzdXJlOwogCUhBTkRMRQlIZWFwU2VsOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sb2NhbC5oIGIvaW5jbHVkZS9sb2NhbC5oCmluZGV4IGJmYzZmMTIuLjU1NjEwNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbG9jYWwuaAorKysgYi9pbmNsdWRlL2xvY2FsLmgKQEAgLTEzLDE1ICsxMywxNiBAQAogICAvKiBleGNlcHRlZCB0aGF0IHRoZXkgbmVlZCBEUyBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBUaGlzICAgICovCiAgIC8qIGFsbG93cyBtYW5hZ2luZyBzZXZlcmFsIGhlYXBzIGZyb20gdGhlIGVtdWxhdGlvbiBsaWJyYXJ5LiAgKi8KIAotZXh0ZXJuIEhMT0NBTCBMT0NBTF9BbGxvYyggSEFORExFIGRzLCBXT1JEIGZsYWdzLCBXT1JEIHNpemUgKTsKLWV4dGVybiBITE9DQUwgTE9DQUxfUmVBbGxvYyggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlLCBXT1JEIHNpemUsIFdPUkQgZmxhZ3MgKTsKLWV4dGVybiBITE9DQUwgTE9DQUxfRnJlZSggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlICk7Ci1leHRlcm4gSExPQ0FMIExPQ0FMX0hhbmRsZSggSEFORExFIGRzLCBXT1JEIGFkZHIgKTsKLWV4dGVybiBXT1JEIExPQ0FMX1NpemUoIEhBTkRMRSBkcywgSExPQ0FMIGhhbmRsZSApOwotZXh0ZXJuIFdPUkQgTE9DQUxfRmxhZ3MoIEhBTkRMRSBkcywgSExPQ0FMIGhhbmRsZSApOwotZXh0ZXJuIFdPUkQgTE9DQUxfSGVhcFNpemUoIEhBTkRMRSBkcyApOwotZXh0ZXJuIFdPUkQgTE9DQUxfQ291bnRGcmVlKCBXT1JEIGRzICk7Ci1leHRlcm4gTFBTVFIgTE9DQUxfTG9jayggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlICk7Ci1leHRlcm4gQk9PTCBMT0NBTF9VbmxvY2soIEhBTkRMRSBkcywgSExPQ0FMIGhhbmRsZSApOworZXh0ZXJuIEhMT0NBTDE2IExPQ0FMX0FsbG9jKCBIQU5ETEUxNiBkcywgVUlOVDE2IGZsYWdzLCBXT1JEIHNpemUgKTsKK2V4dGVybiBITE9DQUwxNiBMT0NBTF9SZUFsbG9jKCBIQU5ETEUxNiBkcywgSExPQ0FMMTYgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgc2l6ZSwgVUlOVDE2IGZsYWdzICk7CitleHRlcm4gSExPQ0FMMTYgTE9DQUxfRnJlZSggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSApOworZXh0ZXJuIEhMT0NBTDE2IExPQ0FMX0hhbmRsZSggSEFORExFMTYgZHMsIFdPUkQgYWRkciApOworZXh0ZXJuIFVJTlQxNiBMT0NBTF9TaXplKCBIQU5ETEUxNiBkcywgSExPQ0FMMTYgaGFuZGxlICk7CitleHRlcm4gVUlOVDE2IExPQ0FMX0ZsYWdzKCBIQU5ETEUxNiBkcywgSExPQ0FMMTYgaGFuZGxlICk7CitleHRlcm4gVUlOVDE2IExPQ0FMX0hlYXBTaXplKCBIQU5ETEUxNiBkcyApOworZXh0ZXJuIFVJTlQxNiBMT0NBTF9Db3VudEZyZWUoIEhBTkRMRTE2IGRzICk7CitleHRlcm4gTFBTVFIgTE9DQUxfTG9jayggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSApOworZXh0ZXJuIEJPT0wgTE9DQUxfVW5sb2NrKCBIQU5ETEUxNiBkcywgSExPQ0FMMTYgaGFuZGxlICk7CiAKICNlbmRpZiAgLyogX19XSU5FX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVudS5oIGIvaW5jbHVkZS9tZW51LmgKaW5kZXggMzJjNGZmNy4uZGFiZGU0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZW51LmgKKysrIGIvaW5jbHVkZS9tZW51LmgKQEAgLTksMTIgKzksMTMgQEAKICNkZWZpbmUgTUVOVV9NQUdJQyAgIDB4NTU0ZCAgLyogJ01VJyAqLwogCiBleHRlcm4gQk9PTCBNRU5VX0luaXQodm9pZCk7CitleHRlcm4gSE1FTlUgTUVOVV9HZXREZWZTeXNNZW51KHZvaWQpOwogZXh0ZXJuIFVJTlQgTUVOVV9HZXRNZW51QmFySGVpZ2h0KCBIV05EIGh3bmQsIFVJTlQgbWVudWJhcldpZHRoLAotCQkJCSAgIGludCBvcmdYLCBpbnQgb3JnWSApOyAgICAgICAgIC8qIG1lbnUuYyAqLwotZXh0ZXJuIHZvaWQgTUVOVV9UcmFja01vdXNlTWVudUJhciggSFdORCBod25kLCBQT0lOVCBwdCApOyAgICAgICAvKiBtZW51LmMgKi8KLWV4dGVybiB2b2lkIE1FTlVfVHJhY2tLYmRNZW51QmFyKCBXTkQqLCBVSU5UIHdQYXJhbSwgSU5UIHZrZXkpOyAgLyogbWVudS5jICovCisJCQkJICAgaW50IG9yZ1gsIGludCBvcmdZICk7CitleHRlcm4gdm9pZCBNRU5VX1RyYWNrTW91c2VNZW51QmFyKCBIV05EIGh3bmQsIFBPSU5UIHB0ICk7CitleHRlcm4gdm9pZCBNRU5VX1RyYWNrS2JkTWVudUJhciggV05EKiwgVUlOVCB3UGFyYW0sIElOVCB2a2V5KTsKIGV4dGVybiBVSU5UIE1FTlVfRHJhd01lbnVCYXIoIEhEQyBoREMsIExQUkVDVCBscHJlY3QsCi0JCQkgICAgICBIV05EIGh3bmQsIEJPT0wgc3VwcHJlc3NfZHJhdyApOyAgIC8qIG1lbnUuYyAqLworCQkJICAgICAgSFdORCBod25kLCBCT09MIHN1cHByZXNzX2RyYXcgKTsKIGV4dGVybiBMUkVTVUxUIFBvcHVwTWVudVduZFByb2MoSFdORCBod25kLFVJTlQgbWVzc2FnZSxXUEFSQU0gd1BhcmFtLExQQVJBTSBsUGFyYW0gKTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnTUVOVUlURU0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbW1zeXN0ZW0uaCBiL2luY2x1ZGUvbW1zeXN0ZW0uaAppbmRleCAwMzU3MTAzLi5hMDhkMTJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21tc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9tbXN5c3RlbS5oCkBAIC0zNiw4ICszNiw3IEBACiAgICAgICAgICAgICBEV09SRCBzb25ncHRycG9zOyAgIC8qIHNvbmcgcG9pbnRlciBwb3NpdGlvbiAqLwogICAgICAgICAgICAgfSBtaWRpOwogICAgICAgICB9IHU7Ci0gICAgfSBNTVRJTUU7Ci10eXBlZGVmIE1NVElNRSBGQVIgICpMUE1NVElNRTsKK30gTU1USU1FLCAgKkxQTU1USU1FOwogCiAjZGVmaW5lIFRJTUVfTVMgICAgICAgICAweDAwMDEgIC8qIHRpbWUgaW4gbWlsbGlzZWNvbmRzICovCiAjZGVmaW5lIFRJTUVfU0FNUExFUyAgICAweDAwMDIgIC8qIG51bWJlciBvZiB3YXZlIHNhbXBsZXMgKi8KQEAgLTEwOSw5ICsxMDgsNyBAQAogI2RlZmluZSBDQUxMQkFDS19UQVNLICAgICAgIDB4MDAwMjAwMDBsICAgIC8qIGR3Q2FsbGJhY2sgaXMgYSBIVEFTSyAqLwogI2RlZmluZSBDQUxMQkFDS19GVU5DVElPTiAgIDB4MDAwMzAwMDBsICAgIC8qIGR3Q2FsbGJhY2sgaXMgYSBGQVJQUk9DICovCiAKLXR5cGVkZWYgdm9pZCAoQ0FMTEJBQ0sgRFJWQ0FMTEJBQ0spIChIRFJWUiBoLCBVSU5UIHVNZXNzYWdlLCBEV09SRCBkd1VzZXIsIERXT1JEIGR3MSwgRFdPUkQgZHcyKTsKLQotdHlwZWRlZiBEUlZDQUxMQkFDSyBGQVIgKkxQRFJWQ0FMTEJBQ0s7Cit0eXBlZGVmIHZvaWQgKCpMUERSVkNBTExCQUNLKSAoSERSVlIgaCwgVUlOVCB1TWVzc2FnZSwgRFdPUkQgZHdVc2VyLCBEV09SRCBkdzEsIERXT1JEIGR3Mik7CiAKICNkZWZpbmUgTU1fTUlDUk9TT0ZUICAgICAgICAgICAgMSAgICAgICAvKiBNaWNyb3NvZnQgQ29ycC4gKi8KIApAQCAtMTUxLDEzICsxNDgsOSBAQAogI2RlZmluZSBXQVZFUlJfU1lOQyAgICAgICAgICAgKFdBVkVSUl9CQVNFICsgMykgICAgLyogZGV2aWNlIGlzIHN5bmNocm9ub3VzICovCiAjZGVmaW5lIFdBVkVSUl9MQVNURVJST1IgICAgICAoV0FWRVJSX0JBU0UgKyAzKSAgICAvKiBsYXN0IGVycm9yIGluIHJhbmdlICovCiAKLURFQ0xBUkVfSEFORExFKEhXQVZFKTsKLURFQ0xBUkVfSEFORExFKEhXQVZFSU4pOwotREVDTEFSRV9IQU5ETEUoSFdBVkVPVVQpOwotdHlwZWRlZiBIV0FWRUlOIEZBUiAqTFBIV0FWRUlOOwotdHlwZWRlZiBIV0FWRU9VVCBGQVIgKkxQSFdBVkVPVVQ7Ci10eXBlZGVmIERSVkNBTExCQUNLIFdBVkVDQUxMQkFDSzsKLXR5cGVkZWYgV0FWRUNBTExCQUNLIEZBUiAqTFBXQVZFQ0FMTEJBQ0s7Cit0eXBlZGVmIEhXQVZFSU4gKkxQSFdBVkVJTjsKK3R5cGVkZWYgSFdBVkVPVVQgKkxQSFdBVkVPVVQ7Cit0eXBlZGVmIExQRFJWQ0FMTEJBQ0sgTFBXQVZFQ0FMTEJBQ0s7CiAKICNkZWZpbmUgV09NX09QRU4gICAgICAgIE1NX1dPTV9PUEVOCiAjZGVmaW5lIFdPTV9DTE9TRSAgICAgICBNTV9XT01fQ0xPU0UKQEAgLTE3OCwxMCArMTcxLDkgQEAKICAgICBEV09SRCAgICAgICBkd1VzZXI7ICAgICAgICAgICAgICAgICAvKiBmb3IgY2xpZW50J3MgdXNlICovCiAgICAgRFdPUkQgICAgICAgZHdGbGFnczsgICAgICAgICAgICAgICAgLyogYXNzb3J0ZWQgZmxhZ3MgKHNlZSBkZWZpbmVzKSAqLwogICAgIERXT1JEICAgICAgIGR3TG9vcHM7ICAgICAgICAgICAgICAgIC8qIGxvb3AgY29udHJvbCBjb3VudGVyICovCi0gICAgc3RydWN0IHdhdmVoZHJfdGFnIEZBUiAqbHBOZXh0OyAgICAgLyogcmVzZXJ2ZWQgZm9yIGRyaXZlciAqLworICAgIHN0cnVjdCB3YXZlaGRyX3RhZyAqbHBOZXh0OyAgICAgICAgIC8qIHJlc2VydmVkIGZvciBkcml2ZXIgKi8KICAgICBEV09SRCAgICAgICByZXNlcnZlZDsgICAgICAgICAgICAgICAvKiByZXNlcnZlZCBmb3IgZHJpdmVyICovCi19IFdBVkVIRFI7Ci10eXBlZGVmIFdBVkVIRFIgRkFSICAqTFBXQVZFSERSOworfSBXQVZFSERSLCAqTFBXQVZFSERSOwogCiAjZGVmaW5lIFdIRFJfRE9ORSAgICAgICAweDAwMDAwMDAxICAvKiBkb25lIGJpdCAqLwogI2RlZmluZSBXSERSX1BSRVBBUkVEICAgMHgwMDAwMDAwMiAgLyogc2V0IGlmIHRoaXMgaGVhZGVyIGhhcyBiZWVuIHByZXBhcmVkICovCkBAIC0xOTcsOCArMTg5LDcgQEAKICAgICBEV09SRCAgIGR3Rm9ybWF0czsgICAgICAgICAgICAgLyogZm9ybWF0cyBzdXBwb3J0ZWQgKi8KICAgICBVSU5UICAgIHdDaGFubmVsczsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNvdXJjZXMgc3VwcG9ydGVkICovCiAgICAgRFdPUkQgICBkd1N1cHBvcnQ7ICAgICAgICAgICAgIC8qIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydGVkIGJ5IGRyaXZlciAqLwotfSBXQVZFT1VUQ0FQUzsKLXR5cGVkZWYgV0FWRU9VVENBUFMgRkFSICAqTFBXQVZFT1VUQ0FQUzsKK30gV0FWRU9VVENBUFMsICpMUFdBVkVPVVRDQVBTOwogCiAjZGVmaW5lIFdBVkVDQVBTX1BJVENIICAgICAgICAgIDB4MDAwMSAgIC8qIHN1cHBvcnRzIHBpdGNoIGNvbnRyb2wgKi8KICNkZWZpbmUgV0FWRUNBUFNfUExBWUJBQ0tSQVRFICAgMHgwMDAyICAgLyogc3VwcG9ydHMgcGxheWJhY2sgcmF0ZSBjb250cm9sICovCkBAIC0yMTMsOCArMjA0LDcgQEAKICAgICBjaGFyICAgIHN6UG5hbWVbTUFYUE5BTUVMRU5dOyAgICAvKiBwcm9kdWN0IG5hbWUgKE5VTEwgdGVybWluYXRlZCBzdHJpbmcpICovCiAgICAgRFdPUkQgICBkd0Zvcm1hdHM7ICAgICAgICAgICAgICAgLyogZm9ybWF0cyBzdXBwb3J0ZWQgKi8KICAgICBVSU5UICAgIHdDaGFubmVsczsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhbm5lbHMgc3VwcG9ydGVkICovCi19IFdBVkVJTkNBUFM7Ci10eXBlZGVmIFdBVkVJTkNBUFMgRkFSICAqTFBXQVZFSU5DQVBTOworfSBXQVZFSU5DQVBTLCAqTFBXQVZFSU5DQVBTOwogCiAjZGVmaW5lIFdBVkVfSU5WQUxJREZPUk1BVCAgICAgMHgwMDAwMDAwMCAgICAgICAvKiBpbnZhbGlkIGZvcm1hdCAqLwogI2RlZmluZSBXQVZFX0ZPUk1BVF8xTTA4ICAgICAgIDB4MDAwMDAwMDEgICAgICAgLyogMTEuMDI1IGtIeiwgTW9ubywgICA4LWJpdCAgKi8KQEAgLTIzNyw2NiArMjI3LDY0IEBACiAgICAgRFdPUkQgICBuU2FtcGxlc1BlclNlYyBXSU5FX1BBQ0tFRDsJCS8qIHNhbXBsZSByYXRlICovCiAgICAgRFdPUkQgICBuQXZnQnl0ZXNQZXJTZWMgV0lORV9QQUNLRUQ7CS8qIGZvciBidWZmZXIgZXN0aW1hdGlvbiAqLwogICAgIFdPUkQgICAgbkJsb2NrQWxpZ247IAkJCQkJLyogYmxvY2sgc2l6ZSBvZiBkYXRhICovCi19IFdBVkVGT1JNQVQ7Ci10eXBlZGVmIFdBVkVGT1JNQVQgRkFSICAqTFBXQVZFRk9STUFUOworfSBXQVZFRk9STUFULCAqTFBXQVZFRk9STUFUOwogCiAjZGVmaW5lIFdBVkVfRk9STUFUX1BDTSAgICAgMQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgV0FWRUZPUk1BVCAgd2Y7CiAgICAgV09SRCAgICAgICAgd0JpdHNQZXJTYW1wbGU7Ci19IFBDTVdBVkVGT1JNQVQ7Ci10eXBlZGVmIFBDTVdBVkVGT1JNQVQgRkFSICAqTFBQQ01XQVZFRk9STUFUOworfSBQQ01XQVZFRk9STUFULCAqTFBQQ01XQVZFRk9STUFUOwogCiBVSU5UIHdhdmVPdXRHZXROdW1EZXZzKHZvaWQpOwotVUlOVCB3YXZlT3V0R2V0RGV2Q2FwcyhVSU5UIHVEZXZpY2VJRCwgV0FWRU9VVENBUFMgRkFSKiBscENhcHMsCitVSU5UIHdhdmVPdXRHZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBXQVZFT1VUQ0FQUyAqIGxwQ2FwcywKICAgICBVSU5UIHVTaXplKTsKLVVJTlQgd2F2ZU91dEdldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgRkFSKiBscGR3Vm9sdW1lKTsKK1VJTlQgd2F2ZU91dEdldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgKiBscGR3Vm9sdW1lKTsKIFVJTlQgd2F2ZU91dFNldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgZHdWb2x1bWUpOwogVUlOVCB3YXZlT3V0R2V0RXJyb3JUZXh0KFVJTlQgdUVycm9yLCBMUFNUUiBscFRleHQsIFVJTlQgdVNpemUpOwogVUlOVCB3YXZlR2V0RXJyb3JUZXh0KFVJTlQgdUVycm9yLCBMUFNUUiBscFRleHQsIFVJTlQgdVNpemUpOwotVUlOVCB3YXZlT3V0T3BlbihIV0FWRU9VVCBGQVIqIGxwaFdhdmVPdXQsIFVJTlQgdURldmljZUlELAorVUlOVCB3YXZlT3V0T3BlbihIV0FWRU9VVCAqIGxwaFdhdmVPdXQsIFVJTlQgdURldmljZUlELAogICAgIGNvbnN0IExQV0FWRUZPUk1BVCBscEZvcm1hdCwgRFdPUkQgZHdDYWxsYmFjaywgRFdPUkQgZHdJbnN0YW5jZSwgRFdPUkQgZHdGbGFncyk7CiBVSU5UIHdhdmVPdXRDbG9zZShIV0FWRU9VVCBoV2F2ZU91dCk7CiBVSU5UIHdhdmVPdXRQcmVwYXJlSGVhZGVyKEhXQVZFT1VUIGhXYXZlT3V0LAotICAgICBXQVZFSERSIEZBUiogbHBXYXZlT3V0SGRyLCBVSU5UIHVTaXplKTsKKyAgICAgV0FWRUhEUiAqIGxwV2F2ZU91dEhkciwgVUlOVCB1U2l6ZSk7CiBVSU5UIHdhdmVPdXRVbnByZXBhcmVIZWFkZXIoSFdBVkVPVVQgaFdhdmVPdXQsCi0gICAgV0FWRUhEUiBGQVIqIGxwV2F2ZU91dEhkciwgVUlOVCB1U2l6ZSk7Ci1VSU5UIHdhdmVPdXRXcml0ZShIV0FWRU9VVCBoV2F2ZU91dCwgV0FWRUhEUiBGQVIqIGxwV2F2ZU91dEhkciwKKyAgICBXQVZFSERSICogbHBXYXZlT3V0SGRyLCBVSU5UIHVTaXplKTsKK1VJTlQgd2F2ZU91dFdyaXRlKEhXQVZFT1VUIGhXYXZlT3V0LCBXQVZFSERSICogbHBXYXZlT3V0SGRyLAogICAgIFVJTlQgdVNpemUpOwogVUlOVCB3YXZlT3V0UGF1c2UoSFdBVkVPVVQgaFdhdmVPdXQpOwogVUlOVCB3YXZlT3V0UmVzdGFydChIV0FWRU9VVCBoV2F2ZU91dCk7CiBVSU5UIHdhdmVPdXRSZXNldChIV0FWRU9VVCBoV2F2ZU91dCk7CiBVSU5UIHdhdmVPdXRCcmVha0xvb3AoSFdBVkVPVVQgaFdhdmVPdXQpOwotVUlOVCB3YXZlT3V0R2V0UG9zaXRpb24oSFdBVkVPVVQgaFdhdmVPdXQsIE1NVElNRSBGQVIqIGxwSW5mbywKK1VJTlQgd2F2ZU91dEdldFBvc2l0aW9uKEhXQVZFT1VUIGhXYXZlT3V0LCBNTVRJTUUgKiBscEluZm8sCiAgICAgVUlOVCB1U2l6ZSk7Ci1VSU5UIHdhdmVPdXRHZXRQaXRjaChIV0FWRU9VVCBoV2F2ZU91dCwgRFdPUkQgRkFSKiBscGR3UGl0Y2gpOworVUlOVCB3YXZlT3V0R2V0UGl0Y2goSFdBVkVPVVQgaFdhdmVPdXQsIERXT1JEICogbHBkd1BpdGNoKTsKIFVJTlQgd2F2ZU91dFNldFBpdGNoKEhXQVZFT1VUIGhXYXZlT3V0LCBEV09SRCBkd1BpdGNoKTsKLVVJTlQgd2F2ZU91dEdldFBsYXliYWNrUmF0ZShIV0FWRU9VVCBoV2F2ZU91dCwgRFdPUkQgRkFSKiBscGR3UmF0ZSk7CitVSU5UIHdhdmVPdXRHZXRQbGF5YmFja1JhdGUoSFdBVkVPVVQgaFdhdmVPdXQsIERXT1JEICogbHBkd1JhdGUpOwogVUlOVCB3YXZlT3V0U2V0UGxheWJhY2tSYXRlKEhXQVZFT1VUIGhXYXZlT3V0LCBEV09SRCBkd1JhdGUpOwotVUlOVCB3YXZlT3V0R2V0SUQoSFdBVkVPVVQgaFdhdmVPdXQsIFVJTlQgRkFSKiBscHVEZXZpY2VJRCk7CitVSU5UIHdhdmVPdXRHZXRJRChIV0FWRU9VVCBoV2F2ZU91dCwgVUlOVCAqIGxwdURldmljZUlEKTsKIAogRFdPUkQgd2F2ZU91dE1lc3NhZ2UoSFdBVkVPVVQgaFdhdmVPdXQsIFVJTlQgdU1lc3NhZ2UsIERXT1JEIGR3MSwgRFdPUkQgZHcyKTsKIAogVUlOVCB3YXZlSW5HZXROdW1EZXZzKHZvaWQpOwotVUlOVCB3YXZlSW5HZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBXQVZFSU5DQVBTIEZBUiogbHBDYXBzLAorVUlOVCB3YXZlSW5HZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBXQVZFSU5DQVBTICogbHBDYXBzLAogICAgIFVJTlQgdVNpemUpOwogVUlOVCB3YXZlSW5HZXRFcnJvclRleHQoVUlOVCB1RXJyb3IsIExQU1RSIGxwVGV4dCwgVUlOVCB1U2l6ZSk7Ci1VSU5UIHdhdmVJbk9wZW4oSFdBVkVJTiBGQVIqIGxwaFdhdmVJbiwgVUlOVCB1RGV2aWNlSUQsCitVSU5UIHdhdmVJbk9wZW4oSFdBVkVJTiAqIGxwaFdhdmVJbiwgVUlOVCB1RGV2aWNlSUQsCiAgICAgY29uc3QgTFBXQVZFRk9STUFUIGxwRm9ybWF0LCBEV09SRCBkd0NhbGxiYWNrLCBEV09SRCBkd0luc3RhbmNlLCBEV09SRCBkd0ZsYWdzKTsKIFVJTlQgd2F2ZUluQ2xvc2UoSFdBVkVJTiBoV2F2ZUluKTsKIFVJTlQgd2F2ZUluUHJlcGFyZUhlYWRlcihIV0FWRUlOIGhXYXZlSW4sCi0gICAgV0FWRUhEUiBGQVIqIGxwV2F2ZUluSGRyLCBVSU5UIHVTaXplKTsKKyAgICBXQVZFSERSICogbHBXYXZlSW5IZHIsIFVJTlQgdVNpemUpOwogVUlOVCB3YXZlSW5VbnByZXBhcmVIZWFkZXIoSFdBVkVJTiBoV2F2ZUluLAotICAgIFdBVkVIRFIgRkFSKiBscFdhdmVJbkhkciwgVUlOVCB1U2l6ZSk7CisgICAgV0FWRUhEUiAqIGxwV2F2ZUluSGRyLCBVSU5UIHVTaXplKTsKIFVJTlQgd2F2ZUluQWRkQnVmZmVyKEhXQVZFSU4gaFdhdmVJbiwKLSAgICBXQVZFSERSIEZBUiogbHBXYXZlSW5IZHIsIFVJTlQgdVNpemUpOworICAgIFdBVkVIRFIgKiBscFdhdmVJbkhkciwgVUlOVCB1U2l6ZSk7CiBVSU5UIHdhdmVJblN0YXJ0KEhXQVZFSU4gaFdhdmVJbik7CiBVSU5UIHdhdmVJblN0b3AoSFdBVkVJTiBoV2F2ZUluKTsKIFVJTlQgd2F2ZUluUmVzZXQoSFdBVkVJTiBoV2F2ZUluKTsKLVVJTlQgd2F2ZUluR2V0UG9zaXRpb24oSFdBVkVJTiBoV2F2ZUluLCBNTVRJTUUgRkFSKiBscEluZm8sCitVSU5UIHdhdmVJbkdldFBvc2l0aW9uKEhXQVZFSU4gaFdhdmVJbiwgTU1USU1FICogbHBJbmZvLAogICAgIFVJTlQgdVNpemUpOwotVUlOVCB3YXZlSW5HZXRJRChIV0FWRUlOIGhXYXZlSW4sIFVJTlQgRkFSKiBscHVEZXZpY2VJRCk7CitVSU5UIHdhdmVJbkdldElEKEhXQVZFSU4gaFdhdmVJbiwgVUlOVCAqIGxwdURldmljZUlEKTsKIAogRFdPUkQgd2F2ZUluTWVzc2FnZShIV0FWRUlOIGhXYXZlSW4sIFVJTlQgdU1lc3NhZ2UsIERXT1JEIGR3MSwgRFdPUkQgZHcyKTsKIApAQCAtMzA4LDE4ICsyOTYsMTQgQEAKICNkZWZpbmUgTUlESUVSUl9JTlZBTElEU0VUVVAgIChNSURJRVJSX0JBU0UgKyA1KSAgIC8qIGludmFsaWQgc2V0dXAgKi8KICNkZWZpbmUgTUlESUVSUl9MQVNURVJST1IgICAgIChNSURJRVJSX0JBU0UgKyA1KSAgIC8qIGxhc3QgZXJyb3IgaW4gcmFuZ2UgKi8KIAotREVDTEFSRV9IQU5ETEUoSE1JREkpOwotREVDTEFSRV9IQU5ETEUoSE1JRElJTik7Ci1ERUNMQVJFX0hBTkRMRShITUlESU9VVCk7Ci10eXBlZGVmIEhNSURJSU4gRkFSICpMUEhNSURJSU47Ci10eXBlZGVmIEhNSURJT1VUIEZBUiAqTFBITUlESU9VVDsKLXR5cGVkZWYgRFJWQ0FMTEJBQ0sgTUlESUNBTExCQUNLOwotdHlwZWRlZiBNSURJQ0FMTEJBQ0sgRkFSICpMUE1JRElDQUxMQkFDSzsKK3R5cGVkZWYgSE1JRElJTiAgKkxQSE1JRElJTjsKK3R5cGVkZWYgSE1JRElPVVQgICpMUEhNSURJT1VUOwordHlwZWRlZiBMUERSVkNBTExCQUNLIExQTUlESUNBTExCQUNLOwogI2RlZmluZSBNSURJUEFUQ0hTSVpFICAgMTI4CiB0eXBlZGVmIFdPUkQgUEFUQ0hBUlJBWVtNSURJUEFUQ0hTSVpFXTsKLXR5cGVkZWYgV09SRCBGQVIgKkxQUEFUQ0hBUlJBWTsKK3R5cGVkZWYgV09SRCAqTFBQQVRDSEFSUkFZOwogdHlwZWRlZiBXT1JEIEtFWUFSUkFZW01JRElQQVRDSFNJWkVdOwotdHlwZWRlZiBXT1JEIEZBUiAqTFBLRVlBUlJBWTsKK3R5cGVkZWYgV09SRCAqTFBLRVlBUlJBWTsKIAogI2RlZmluZSBNSU1fT1BFTiAgICAgICAgTU1fTUlNX09QRU4KICNkZWZpbmUgTUlNX0NMT1NFICAgICAgIE1NX01JTV9DTE9TRQpAQCAtMzUyLDggKzMzNiw3IEBACiAgICAgVUlOVCAgICB3Tm90ZXM7ICAgICAgICAgICAgICAgIC8qIG1heCAjIG9mIG5vdGVzIChpbnRlcm5hbCBzeW50aCBvbmx5KSAqLwogICAgIFVJTlQgICAgd0NoYW5uZWxNYXNrOyAgICAgICAgICAvKiBjaGFubmVscyB1c2VkIChpbnRlcm5hbCBzeW50aCBvbmx5KSAqLwogICAgIERXT1JEICAgZHdTdXBwb3J0OyAgICAgICAgICAgICAvKiBmdW5jdGlvbmFsaXR5IHN1cHBvcnRlZCBieSBkcml2ZXIgKi8KLX0gTUlESU9VVENBUFM7Ci10eXBlZGVmIE1JRElPVVRDQVBTIEZBUiAgKkxQTUlESU9VVENBUFM7Cit9IE1JRElPVVRDQVBTLCAqTFBNSURJT1VUQ0FQUzsKIAogI2RlZmluZSBNT0RfTUlESVBPUlQgICAgMSAgLyogb3V0cHV0IHBvcnQgKi8KICNkZWZpbmUgTU9EX1NZTlRIICAgICAgIDIgIC8qIGdlbmVyaWMgaW50ZXJuYWwgc3ludGggKi8KQEAgLTM3MCw4ICszNTMsNyBAQAogICAgIFVJTlQgICAgd1BpZDsgICAgICAgICAgICAgICAgICAvKiBwcm9kdWN0IElEICovCiAgICAgVkVSU0lPTiB2RHJpdmVyVmVyc2lvbjsgICAgICAgIC8qIHZlcnNpb24gb2YgdGhlIGRyaXZlciAqLwogICAgIGNoYXIgICAgc3pQbmFtZVtNQVhQTkFNRUxFTl07ICAvKiBwcm9kdWN0IG5hbWUgKE5VTEwgdGVybWluYXRlZCBzdHJpbmcpICovCi19IE1JRElJTkNBUFM7Ci10eXBlZGVmIE1JRElJTkNBUFMgRkFSICAqTFBNSURJSU5DQVBTOworfSBNSURJSU5DQVBTLCAqTFBNSURJSU5DQVBTOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgTFBTVFIgICAgICAgbHBEYXRhOyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbG9ja2VkIGRhdGEgYmxvY2sgKi8KQEAgLTM3OSwxMCArMzYxLDkgQEAKICAgICBEV09SRCAgICAgICBkd0J5dGVzUmVjb3JkZWQ7ICAgICAgLyogdXNlZCBmb3IgaW5wdXQgb25seSAqLwogICAgIERXT1JEICAgICAgIGR3VXNlcjsgICAgICAgICAgICAgICAvKiBmb3IgY2xpZW50J3MgdXNlICovCiAgICAgRFdPUkQgICAgICAgZHdGbGFnczsgICAgICAgICAgICAgIC8qIGFzc29ydGVkIGZsYWdzIChzZWUgZGVmaW5lcykgKi8KLSAgICBzdHJ1Y3QgbWlkaWhkcl90YWcgRkFSICpscE5leHQ7ICAgLyogcmVzZXJ2ZWQgZm9yIGRyaXZlciAqLworICAgIHN0cnVjdCBtaWRpaGRyX3RhZyAqbHBOZXh0OyAgICAgICAvKiByZXNlcnZlZCBmb3IgZHJpdmVyICovCiAgICAgRFdPUkQgICAgICAgcmVzZXJ2ZWQ7ICAgICAgICAgICAgIC8qIHJlc2VydmVkIGZvciBkcml2ZXIgKi8KLX0gTUlESUhEUjsKLXR5cGVkZWYgTUlESUhEUiBGQVIgICpMUE1JRElIRFI7Cit9IE1JRElIRFIsICpMUE1JRElIRFI7CiAKICNkZWZpbmUgTUhEUl9ET05FICAgICAgIDB4MDAwMDAwMDEgICAgICAgLyogZG9uZSBiaXQgKi8KICNkZWZpbmUgTUhEUl9QUkVQQVJFRCAgIDB4MDAwMDAwMDIgICAgICAgLyogc2V0IGlmIGhlYWRlciBwcmVwYXJlZCAqLwpAQCAtMzkwLDI3ICszNzEsMjcgQEAKIAogVUlOVCBtaWRpT3V0R2V0TnVtRGV2cyh2b2lkKTsKIFVJTlQgbWlkaU91dEdldERldkNhcHMoVUlOVCB1RGV2aWNlSUQsCi0gICAgTUlESU9VVENBUFMgRkFSKiBscENhcHMsIFVJTlQgdVNpemUpOwotVUlOVCBtaWRpT3V0R2V0Vm9sdW1lKFVJTlQgdURldmljZUlELCBEV09SRCBGQVIqIGxwZHdWb2x1bWUpOworICAgIE1JRElPVVRDQVBTICogbHBDYXBzLCBVSU5UIHVTaXplKTsKK1VJTlQgbWlkaU91dEdldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgKiBscGR3Vm9sdW1lKTsKIFVJTlQgbWlkaU91dFNldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgZHdWb2x1bWUpOwogVUlOVCBtaWRpT3V0R2V0RXJyb3JUZXh0KFVJTlQgdUVycm9yLCBMUFNUUiBscFRleHQsIFVJTlQgdVNpemUpOwogVUlOVCBtaWRpR2V0RXJyb3JUZXh0KFVJTlQgdUVycm9yLCBMUFNUUiBscFRleHQsIFVJTlQgdVNpemUpOwotVUlOVCBtaWRpT3V0T3BlbihITUlESU9VVCBGQVIqIGxwaE1pZGlPdXQsIFVJTlQgdURldmljZUlELAorVUlOVCBtaWRpT3V0T3BlbihITUlESU9VVCAqIGxwaE1pZGlPdXQsIFVJTlQgdURldmljZUlELAogICAgIERXT1JEIGR3Q2FsbGJhY2ssIERXT1JEIGR3SW5zdGFuY2UsIERXT1JEIGR3RmxhZ3MpOwogVUlOVCBtaWRpT3V0Q2xvc2UoSE1JRElPVVQgaE1pZGlPdXQpOwogVUlOVCBtaWRpT3V0UHJlcGFyZUhlYWRlcihITUlESU9VVCBoTWlkaU91dCwKLSAgICBNSURJSERSIEZBUiogbHBNaWRpT3V0SGRyLCBVSU5UIHVTaXplKTsKKyAgICBNSURJSERSICogbHBNaWRpT3V0SGRyLCBVSU5UIHVTaXplKTsKIFVJTlQgbWlkaU91dFVucHJlcGFyZUhlYWRlcihITUlESU9VVCBoTWlkaU91dCwKLSAgICBNSURJSERSIEZBUiogbHBNaWRpT3V0SGRyLCBVSU5UIHVTaXplKTsKKyAgICBNSURJSERSICogbHBNaWRpT3V0SGRyLCBVSU5UIHVTaXplKTsKIFVJTlQgbWlkaU91dFNob3J0TXNnKEhNSURJT1VUIGhNaWRpT3V0LCBEV09SRCBkd01zZyk7CiBVSU5UIG1pZGlPdXRMb25nTXNnKEhNSURJT1VUIGhNaWRpT3V0LAotICAgIE1JRElIRFIgRkFSKiBscE1pZGlPdXRIZHIsIFVJTlQgdVNpemUpOworICAgIE1JRElIRFIgKiBscE1pZGlPdXRIZHIsIFVJTlQgdVNpemUpOwogVUlOVCBtaWRpT3V0UmVzZXQoSE1JRElPVVQgaE1pZGlPdXQpOwogVUlOVCBtaWRpT3V0Q2FjaGVQYXRjaGVzKEhNSURJT1VUIGhNaWRpT3V0LAotICAgIFVJTlQgdUJhbmssIFdPUkQgRkFSKiBscHdQYXRjaEFycmF5LCBVSU5UIHVGbGFncyk7CisgICAgVUlOVCB1QmFuaywgV09SRCAqIGxwd1BhdGNoQXJyYXksIFVJTlQgdUZsYWdzKTsKIFVJTlQgbWlkaU91dENhY2hlRHJ1bVBhdGNoZXMoSE1JRElPVVQgaE1pZGlPdXQsCi0gICAgVUlOVCB1UGF0Y2gsIFdPUkQgRkFSKiBscHdLZXlBcnJheSwgVUlOVCB1RmxhZ3MpOwotVUlOVCBtaWRpT3V0R2V0SUQoSE1JRElPVVQgaE1pZGlPdXQsIFVJTlQgRkFSKiBscHVEZXZpY2VJRCk7CisgICAgVUlOVCB1UGF0Y2gsIFdPUkQgKiBscHdLZXlBcnJheSwgVUlOVCB1RmxhZ3MpOworVUlOVCBtaWRpT3V0R2V0SUQoSE1JRElPVVQgaE1pZGlPdXQsIFVJTlQgKiBscHVEZXZpY2VJRCk7CiAKIERXT1JEIG1pZGlPdXRNZXNzYWdlKEhNSURJT1VUIGhNaWRpT3V0LCBVSU5UIHVNZXNzYWdlLCBEV09SRCBkdzEsIERXT1JEIGR3Mik7CiAKQEAgLTQxOCwxOSArMzk5LDE5IEBACiBVSU5UIG1pZGlJbkdldERldkNhcHMoVUlOVCB1RGV2aWNlSUQsCiAgICAgTFBNSURJSU5DQVBTIGxwQ2FwcywgVUlOVCB1U2l6ZSk7CiBVSU5UIG1pZGlJbkdldEVycm9yVGV4dChVSU5UIHVFcnJvciwgTFBTVFIgbHBUZXh0LCBVSU5UIHVTaXplKTsKLVVJTlQgbWlkaUluT3BlbihITUlESUlOIEZBUiogbHBoTWlkaUluLCBVSU5UIHVEZXZpY2VJRCwKK1VJTlQgbWlkaUluT3BlbihITUlESUlOICogbHBoTWlkaUluLCBVSU5UIHVEZXZpY2VJRCwKICAgICBEV09SRCBkd0NhbGxiYWNrLCBEV09SRCBkd0luc3RhbmNlLCBEV09SRCBkd0ZsYWdzKTsKIFVJTlQgbWlkaUluQ2xvc2UoSE1JRElJTiBoTWlkaUluKTsKIFVJTlQgbWlkaUluUHJlcGFyZUhlYWRlcihITUlESUlOIGhNaWRpSW4sCi0gICAgTUlESUhEUiBGQVIqIGxwTWlkaUluSGRyLCBVSU5UIHVTaXplKTsKKyAgICBNSURJSERSICogbHBNaWRpSW5IZHIsIFVJTlQgdVNpemUpOwogVUlOVCBtaWRpSW5VbnByZXBhcmVIZWFkZXIoSE1JRElJTiBoTWlkaUluLAotICAgIE1JRElIRFIgRkFSKiBscE1pZGlJbkhkciwgVUlOVCB1U2l6ZSk7CisgICAgTUlESUhEUiAqIGxwTWlkaUluSGRyLCBVSU5UIHVTaXplKTsKIFVJTlQgbWlkaUluQWRkQnVmZmVyKEhNSURJSU4gaE1pZGlJbiwKLSAgICBNSURJSERSIEZBUiogbHBNaWRpSW5IZHIsIFVJTlQgdVNpemUpOworICAgIE1JRElIRFIgKiBscE1pZGlJbkhkciwgVUlOVCB1U2l6ZSk7CiBVSU5UIG1pZGlJblN0YXJ0KEhNSURJSU4gaE1pZGlJbik7CiBVSU5UIG1pZGlJblN0b3AoSE1JRElJTiBoTWlkaUluKTsKIFVJTlQgbWlkaUluUmVzZXQoSE1JRElJTiBoTWlkaUluKTsKLVVJTlQgbWlkaUluR2V0SUQoSE1JRElJTiBoTWlkaUluLCBVSU5UIEZBUiogbHB1RGV2aWNlSUQpOworVUlOVCBtaWRpSW5HZXRJRChITUlESUlOIGhNaWRpSW4sIFVJTlQgKiBscHVEZXZpY2VJRCk7CiAKIERXT1JEIG1pZGlJbk1lc3NhZ2UoSE1JRElJTiBoTWlkaUluLCBVSU5UIHVNZXNzYWdlLCBEV09SRCBkdzEsIERXT1JEIGR3Mik7CiAKQEAgLTQ0Myw4ICs0MjQsNyBAQAogICAgIGNoYXIgICAgc3pQbmFtZVtNQVhQTkFNRUxFTl07ICAvKiBwcm9kdWN0IG5hbWUgKE5VTEwgdGVybWluYXRlZCBzdHJpbmcpICovCiAgICAgVUlOVCAgICB3VGVjaG5vbG9neTsgICAgICAgICAgIC8qIHR5cGUgb2YgZGV2aWNlICovCiAgICAgRFdPUkQgICBkd1N1cHBvcnQ7ICAgICAgICAgICAgIC8qIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydGVkIGJ5IGRyaXZlciAqLwotfSBBVVhDQVBTOwotdHlwZWRlZiBBVVhDQVBTIEZBUiAgKkxQQVVYQ0FQUzsKK30gQVVYQ0FQUywgKkxQQVVYQ0FQUzsKIAogI2RlZmluZSBBVVhDQVBTX0NEQVVESU8gICAgMSAgICAgICAvKiBhdWRpbyBmcm9tIGludGVybmFsIENELVJPTSBkcml2ZSAqLwogI2RlZmluZSBBVVhDQVBTX0FVWElOICAgICAgMiAgICAgICAvKiBhdWRpbyBmcm9tIGF1eGlsaWFyeSBpbnB1dCBqYWNrcyAqLwpAQCAtNDUzLDkgKzQzMyw5IEBACiAjZGVmaW5lIEFVWENBUFNfTFJWT0xVTUUgICAgICAgIDB4MDAwMiAgLyogc2VwYXJhdGUgbGVmdC1yaWdodCB2b2x1bWUgY29udHJvbCAqLwogCiBVSU5UIGF1eEdldE51bURldnModm9pZCk7Ci1VSU5UIGF1eEdldERldkNhcHMoVUlOVCB1RGV2aWNlSUQsIEFVWENBUFMgRkFSKiBscENhcHMsIFVJTlQgdVNpemUpOworVUlOVCBhdXhHZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBBVVhDQVBTICogbHBDYXBzLCBVSU5UIHVTaXplKTsKIFVJTlQgYXV4U2V0Vm9sdW1lKFVJTlQgdURldmljZUlELCBEV09SRCBkd1ZvbHVtZSk7Ci1VSU5UIGF1eEdldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgRkFSKiBscGR3Vm9sdW1lKTsKK1VJTlQgYXV4R2V0Vm9sdW1lKFVJTlQgdURldmljZUlELCBEV09SRCAqIGxwZHdWb2x1bWUpOwogCiBEV09SRCBhdXhPdXRNZXNzYWdlKFVJTlQgdURldmljZUlELCBVSU5UIHVNZXNzYWdlLCBEV09SRCBkdzEsIERXT1JEIGR3Mik7CiAKQEAgLTQ2Myw5ICs0NDMsNyBAQAogI2RlZmluZSBUSU1FUlJfTk9DQU5ETyAgICAgICAgKFRJTUVSUl9CQVNFKzEpICAgICAgLyogcmVxdWVzdCBub3QgY29tcGxldGVkICovCiAjZGVmaW5lIFRJTUVSUl9TVFJVQ1QgICAgICAgICAoVElNRVJSX0JBU0UrMzMpICAgICAvKiB0aW1lIHN0cnVjdCBzaXplICovCiAKLXR5cGVkZWYgdm9pZCAoQ0FMTEJBQ0sgVElNRUNBTExCQUNLKSAoVUlOVCB1VGltZXJJRCwgVUlOVCB1TWVzc2FnZSwgRFdPUkQgZHdVc2VyLCBEV09SRCBkdzEsIERXT1JEIGR3Mik7Ci0KLXR5cGVkZWYgVElNRUNBTExCQUNLIEZBUiAqTFBUSU1FQ0FMTEJBQ0s7Cit0eXBlZGVmIHZvaWQgKCpMUFRJTUVDQUxMQkFDSykgKFVJTlQgdVRpbWVySUQsIFVJTlQgdU1lc3NhZ2UsIERXT1JEIGR3VXNlciwgRFdPUkQgZHcxLCBEV09SRCBkdzIpOwogCiAjZGVmaW5lIFRJTUVfT05FU0hPVCAgICAwICAgLyogcHJvZ3JhbSB0aW1lciBmb3Igc2luZ2xlIGV2ZW50ICovCiAjZGVmaW5lIFRJTUVfUEVSSU9ESUMgICAxICAgLyogcHJvZ3JhbSBmb3IgY29udGludW91cyBwZXJpb2RpYyBldmVudCAqLwpAQCAtNDczLDE1ICs0NTEsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBVSU5UICAgIHdQZXJpb2RNaW47ICAgICAvKiBtaW5pbXVtIHBlcmlvZCBzdXBwb3J0ZWQgICovCiAgICAgVUlOVCAgICB3UGVyaW9kTWF4OyAgICAgLyogbWF4aW11bSBwZXJpb2Qgc3VwcG9ydGVkICAqLwotICAgIH0gVElNRUNBUFM7Ci10eXBlZGVmIFRJTUVDQVBTIEZBUiAgKkxQVElNRUNBUFM7Cit9IFRJTUVDQVBTLCAqTFBUSU1FQ0FQUzsKIAotVUlOVCB0aW1lR2V0U3lzdGVtVGltZShNTVRJTUUgRkFSKiBscFRpbWUsIFVJTlQgdVNpemUpOworVUlOVCB0aW1lR2V0U3lzdGVtVGltZShNTVRJTUUgKiBscFRpbWUsIFVJTlQgdVNpemUpOwogRFdPUkQgdGltZUdldFRpbWUodm9pZCk7CiBVSU5UIHRpbWVTZXRFdmVudChVSU5UIHVEZWxheSwgVUlOVCB1UmVzb2x1dGlvbiwKICAgICBMUFRJTUVDQUxMQkFDSyBscEZ1bmN0aW9uLCBEV09SRCBkd1VzZXIsIFVJTlQgdUZsYWdzKTsKIFVJTlQgdGltZUtpbGxFdmVudChVSU5UIHVUaW1lcklEKTsKLVVJTlQgdGltZUdldERldkNhcHMoVElNRUNBUFMgRkFSKiBscFRpbWVDYXBzLCBVSU5UIHVTaXplKTsKK1VJTlQgdGltZUdldERldkNhcHMoVElNRUNBUFMgKiBscFRpbWVDYXBzLCBVSU5UIHVTaXplKTsKIFVJTlQgdGltZUJlZ2luUGVyaW9kKFVJTlQgdVBlcmlvZCk7CiBVSU5UIHRpbWVFbmRQZXJpb2QoVUlOVCB1UGVyaW9kKTsKIApAQCAtNTE1LDIxICs0OTIsMTkgQEAKICAgICBVSU5UIHdOdW1CdXR0b25zOyAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ1dHRvbnMgKi8KICAgICBVSU5UIHdQZXJpb2RNaW47ICAgICAgICAgICAgLyogbWluaW11bSBtZXNzYWdlIHBlcmlvZCB3aGVuIGNhcHR1cmVkICovCiAgICAgVUlOVCB3UGVyaW9kTWF4OyAgICAgICAgICAgIC8qIG1heGltdW0gbWVzc2FnZSBwZXJpb2Qgd2hlbiBjYXB0dXJlZCAqLwotICAgIH0gSk9ZQ0FQUzsKLXR5cGVkZWYgSk9ZQ0FQUyBGQVIgICpMUEpPWUNBUFM7Cit9IEpPWUNBUFMsICpMUEpPWUNBUFM7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBVSU5UIHdYcG9zOyAgICAgICAgICAgICAgICAgLyogeCBwb3NpdGlvbiAqLwogICAgIFVJTlQgd1lwb3M7ICAgICAgICAgICAgICAgICAvKiB5IHBvc2l0aW9uICovCiAgICAgVUlOVCB3WnBvczsgICAgICAgICAgICAgICAgIC8qIHogcG9zaXRpb24gKi8KICAgICBVSU5UIHdCdXR0b25zOyAgICAgICAgICAgICAgLyogYnV0dG9uIHN0YXRlcyAqLwotICAgIH0gSk9ZSU5GTzsKLXR5cGVkZWYgSk9ZSU5GTyBGQVIgICpMUEpPWUlORk87Cit9IEpPWUlORk8sICpMUEpPWUlORk87CiAKLVVJTlQgam95R2V0RGV2Q2FwcyhVSU5UIHVKb3lJRCwgSk9ZQ0FQUyBGQVIqIGxwQ2FwcywgVUlOVCB1U2l6ZSk7CitVSU5UIGpveUdldERldkNhcHMoVUlOVCB1Sm95SUQsIEpPWUNBUFMgKiBscENhcHMsIFVJTlQgdVNpemUpOwogVUlOVCBqb3lHZXROdW1EZXZzKHZvaWQpOwotVUlOVCBqb3lHZXRQb3MoVUlOVCB1Sm95SUQsIEpPWUlORk8gRkFSKiBscEluZm8pOwotVUlOVCBqb3lHZXRUaHJlc2hvbGQoVUlOVCB1Sm95SUQsIFVJTlQgRkFSKiBscHVUaHJlc2hvbGQpOworVUlOVCBqb3lHZXRQb3MoVUlOVCB1Sm95SUQsIEpPWUlORk8gKiBscEluZm8pOworVUlOVCBqb3lHZXRUaHJlc2hvbGQoVUlOVCB1Sm95SUQsIFVJTlQgKiBscHVUaHJlc2hvbGQpOwogVUlOVCBqb3lSZWxlYXNlQ2FwdHVyZShVSU5UIHVKb3lJRCk7CiBVSU5UIGpveVNldENhcHR1cmUoSFdORCBod25kLCBVSU5UIHVKb3lJRCwgVUlOVCB1UGVyaW9kLAogICAgIEJPT0wgYkNoYW5nZWQpOwpAQCAtNTUwLDEwICs1MjUsOCBAQAogI2RlZmluZSBDRlNFUENIQVIgICAgICAgJysnICAgICAgICAgICAgIC8qIGNvbXBvdW5kIGZpbGUgbmFtZSBzZXBhcmF0b3IgY2hhci4gKi8KIAogdHlwZWRlZiBEV09SRCAgICAgICAgICAgRk9VUkNDOyAgICAgICAgIC8qIGEgZm91ciBjaGFyYWN0ZXIgY29kZSAqLwotREVDTEFSRV9IQU5ETEUoSE1NSU8pOyAgICAgICAgICAgICAgICAgIC8qIGEgaGFuZGxlIHRvIGFuIG9wZW4gZmlsZSAqLwotdHlwZWRlZiBMT05HIChDQUxMQkFDSyBNTUlPUFJPQykoTFBTVFIgbHBtbWlvaW5mbywgVUlOVCB1TWVzc2FnZSwKK3R5cGVkZWYgTE9ORyAoKkxQTU1JT1BST0MpKExQU1RSIGxwbW1pb2luZm8sIFVJTlQgdU1lc3NhZ2UsCiAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtMSwgTFBBUkFNIGxQYXJhbTIpOwotdHlwZWRlZiBNTUlPUFJPQyBGQVIgKkxQTU1JT1BST0M7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICAgICAgRFdPUkQgICAgICAgICAgIGR3RmxhZ3M7ICAgICAgICAvKiBnZW5lcmFsIHN0YXR1cyBmbGFncyAqLwpAQCAtNTc1LDggKzU0OCw3IEBACiAgICAgICAgIERXT1JEICAgICAgICAgICBkd1Jlc2VydmVkMTsgICAgLyogcmVzZXJ2ZWQgZm9yIE1NSU8gdXNlICovCiAgICAgICAgIERXT1JEICAgICAgICAgICBkd1Jlc2VydmVkMjsgICAgLyogcmVzZXJ2ZWQgZm9yIE1NSU8gdXNlICovCiAgICAgICAgIEhNTUlPICAgICAgICAgICBobW1pbzsgICAgICAgICAgLyogaGFuZGxlIHRvIG9wZW4gZmlsZSAqLwotfSBNTUlPSU5GTzsKLXR5cGVkZWYgTU1JT0lORk8gRkFSICAqTFBNTUlPSU5GTzsKK30gTU1JT0lORk8sICpMUE1NSU9JTkZPOwogCiB0eXBlZGVmIHN0cnVjdCBfTU1DS0lORk8KIHsKQEAgLTU4NSw4ICs1NTcsNyBAQAogICAgICAgICBGT1VSQ0MgICAgICAgICAgZmNjVHlwZTsgICAgICAgIC8qIGZvcm0gdHlwZSBvciBsaXN0IHR5cGUgKi8KICAgICAgICAgRFdPUkQgICAgICAgICAgIGR3RGF0YU9mZnNldDsgICAvKiBvZmZzZXQgb2YgZGF0YSBwb3J0aW9uIG9mIGNodW5rICovCiAgICAgICAgIERXT1JEICAgICAgICAgICBkd0ZsYWdzOyAgICAgICAgLyogZmxhZ3MgdXNlZCBieSBNTUlPIGZ1bmN0aW9ucyAqLwotfSBNTUNLSU5GTzsKLXR5cGVkZWYgTU1DS0lORk8gRkFSICAqTFBNTUNLSU5GTzsKK30gTU1DS0lORk8sICpMUE1NQ0tJTkZPOwogCiAjZGVmaW5lIE1NSU9fUldNT0RFICAgICAweDAwMDAwMDAzICAgICAgLyogb3BlbiBmaWxlIGZvciByZWFkaW5nL3dyaXRpbmcvYm90aCAqLwogI2RlZmluZSBNTUlPX1NIQVJFTU9ERSAgMHgwMDAwMDA3MCAgICAgIC8qIGZpbGUgc2hhcmluZyBtb2RlIG51bWJlciAqLwpAQCAtNjUzLDMwICs2MjQsMzAgQEAKIEZPVVJDQyBtbWlvU3RyaW5nVG9GT1VSQ0MoTFBDU1RSIHN6LCBVSU5UIHVGbGFncyk7CiBMUE1NSU9QUk9DIG1taW9JbnN0YWxsSU9Qcm9jKEZPVVJDQyBmY2NJT1Byb2MsIExQTU1JT1BST0MgcElPUHJvYywKICAgICBEV09SRCBkd0ZsYWdzKTsKLUhNTUlPIG1taW9PcGVuKExQU1RSIHN6RmlsZU5hbWUsIE1NSU9JTkZPIEZBUiogbHBtbWlvaW5mbywKK0hNTUlPIG1taW9PcGVuKExQU1RSIHN6RmlsZU5hbWUsIE1NSU9JTkZPICogbHBtbWlvaW5mbywKICAgICBEV09SRCBkd09wZW5GbGFncyk7CiAKIFVJTlQgbW1pb1JlbmFtZShMUENTVFIgc3pGaWxlTmFtZSwgTFBDU1RSIHN6TmV3RmlsZU5hbWUsCi0gICAgIE1NSU9JTkZPIEZBUiogbHBtbWlvaW5mbywgRFdPUkQgZHdSZW5hbWVGbGFncyk7CisgICAgIE1NSU9JTkZPICogbHBtbWlvaW5mbywgRFdPUkQgZHdSZW5hbWVGbGFncyk7CiAKIFVJTlQgbW1pb0Nsb3NlKEhNTUlPIGhtbWlvLCBVSU5UIHVGbGFncyk7CiBMT05HIG1taW9SZWFkKEhNTUlPIGhtbWlvLCBIUFNUUiBwY2gsIExPTkcgY2NoKTsKIExPTkcgbW1pb1dyaXRlKEhNTUlPIGhtbWlvLCBIUENTVFIgcGNoLCBMT05HIGNjaCk7CiBMT05HIG1taW9TZWVrKEhNTUlPIGhtbWlvLCBMT05HIGxPZmZzZXQsIGludCBpT3JpZ2luKTsKLVVJTlQgbW1pb0dldEluZm8oSE1NSU8gaG1taW8sIE1NSU9JTkZPIEZBUiogbHBtbWlvaW5mbywgVUlOVCB1RmxhZ3MpOwotVUlOVCBtbWlvU2V0SW5mbyhITU1JTyBobW1pbywgY29uc3QgTU1JT0lORk8gRkFSKiBscG1taW9pbmZvLCBVSU5UIHVGbGFncyk7CitVSU5UIG1taW9HZXRJbmZvKEhNTUlPIGhtbWlvLCBNTUlPSU5GTyAqIGxwbW1pb2luZm8sIFVJTlQgdUZsYWdzKTsKK1VJTlQgbW1pb1NldEluZm8oSE1NSU8gaG1taW8sIGNvbnN0IE1NSU9JTkZPICogbHBtbWlvaW5mbywgVUlOVCB1RmxhZ3MpOwogVUlOVCBtbWlvU2V0QnVmZmVyKEhNTUlPIGhtbWlvLCBMUFNUUiBwY2hCdWZmZXIsIExPTkcgY2NoQnVmZmVyLAogICAgIFVJTlQgdUZsYWdzKTsKIFVJTlQgbW1pb0ZsdXNoKEhNTUlPIGhtbWlvLCBVSU5UIHVGbGFncyk7Ci1VSU5UIG1taW9BZHZhbmNlKEhNTUlPIGhtbWlvLCBNTUlPSU5GTyBGQVIqIGxwbW1pb2luZm8sIFVJTlQgdUZsYWdzKTsKK1VJTlQgbW1pb0FkdmFuY2UoSE1NSU8gaG1taW8sIE1NSU9JTkZPICogbHBtbWlvaW5mbywgVUlOVCB1RmxhZ3MpOwogTE9ORyBtbWlvU2VuZE1lc3NhZ2UoSE1NSU8gaG1taW8sIFVJTlQgdU1lc3NhZ2UsCiAgICAgTFBBUkFNIGxQYXJhbTEsIExQQVJBTSBsUGFyYW0yKTsKLVVJTlQgbW1pb0Rlc2NlbmQoSE1NSU8gaG1taW8sIE1NQ0tJTkZPIEZBUiogbHBjaywKLSAgICBjb25zdCBNTUNLSU5GTyBGQVIqIGxwY2tQYXJlbnQsIFVJTlQgdUZsYWdzKTsKLVVJTlQgbW1pb0FzY2VuZChITU1JTyBobW1pbywgTU1DS0lORk8gRkFSKiBscGNrLCBVSU5UIHVGbGFncyk7Ci1VSU5UIG1taW9DcmVhdGVDaHVuayhITU1JTyBobW1pbywgTU1DS0lORk8gRkFSKiBscGNrLCBVSU5UIHVGbGFncyk7CitVSU5UIG1taW9EZXNjZW5kKEhNTUlPIGhtbWlvLCBNTUNLSU5GTyAqIGxwY2ssCisgICAgY29uc3QgTU1DS0lORk8gKiBscGNrUGFyZW50LCBVSU5UIHVGbGFncyk7CitVSU5UIG1taW9Bc2NlbmQoSE1NSU8gaG1taW8sIE1NQ0tJTkZPICogbHBjaywgVUlOVCB1RmxhZ3MpOworVUlOVCBtbWlvQ3JlYXRlQ2h1bmsoSE1NSU8gaG1taW8sIE1NQ0tJTkZPICogbHBjaywgVUlOVCB1RmxhZ3MpOwogCi10eXBlZGVmIFVJTlQgKENBTExCQUNLICpZSUVMRFBST0MpIChVSU5UIHVEZXZpY2VJRCwgRFdPUkQgZHdZaWVsZERhdGEpOwordHlwZWRlZiBVSU5UICgqWUlFTERQUk9DKSAoVUlOVCB1RGV2aWNlSUQsIERXT1JEIGR3WWllbGREYXRhKTsKIAogRFdPUkQgbWNpU2VuZENvbW1hbmQgKFVJTlQgdURldmljZUlELCBVSU5UIHVNZXNzYWdlLAogICAgIERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMik7CkBAIC02OTEsNyArNjYyLDcgQEAKICAgICBEV09SRCBkd1lpZWxkRGF0YSk7CiAKIEhUQVNLIG1jaUdldENyZWF0b3JUYXNrKFVJTlQgdURldmljZUlEKTsKLVlJRUxEUFJPQyBtY2lHZXRZaWVsZFByb2MgKFVJTlQgdURldmljZUlELCBEV09SRCBGQVIqIGxwZHdZaWVsZERhdGEpOworWUlFTERQUk9DIG1jaUdldFlpZWxkUHJvYyAoVUlOVCB1RGV2aWNlSUQsIERXT1JEICogbHBkd1lpZWxkRGF0YSk7CiAKICNkZWZpbmUgTUNJRVJSX0lOVkFMSURfREVWSUNFX0lEICAgICAgICAoTUNJRVJSX0JBU0UgKyAxKQogI2RlZmluZSBNQ0lFUlJfVU5SRUNPR05JWkVEX0tFWVdPUkQgICAgIChNQ0lFUlJfQkFTRSArIDMpCkBAIC05NTMsOCArOTI0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKLQl9IE1DSV9HRU5FUklDX1BBUk1TOwotdHlwZWRlZiBNQ0lfR0VORVJJQ19QQVJNUyBGQVIgKkxQTUNJX0dFTkVSSUNfUEFSTVM7Cit9IE1DSV9HRU5FUklDX1BBUk1TLCAqTFBNQ0lfR0VORVJJQ19QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKQEAgLTk2Myw0MyArOTMzLDM3IEBACiAJTFBDU1RSICBscHN0ckRldmljZVR5cGU7CiAJTFBDU1RSICBscHN0ckVsZW1lbnROYW1lOwogCUxQQ1NUUiAgbHBzdHJBbGlhczsKLQl9IE1DSV9PUEVOX1BBUk1TOwotdHlwZWRlZiBNQ0lfT1BFTl9QQVJNUyBGQVIgKkxQTUNJX09QRU5fUEFSTVM7Cit9IE1DSV9PUEVOX1BBUk1TLCAqTFBNQ0lfT1BFTl9QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlEV09SRCAgIGR3RnJvbTsKIAlEV09SRCAgIGR3VG87Ci0JfSBNQ0lfUExBWV9QQVJNUzsKLXR5cGVkZWYgTUNJX1BMQVlfUEFSTVMgRkFSICpMUE1DSV9QTEFZX1BBUk1TOworfSBNQ0lfUExBWV9QQVJNUywgKkxQTUNJX1BMQVlfUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CiAJRFdPUkQgICBkd1RvOwotCX0gTUNJX1NFRUtfUEFSTVM7Ci10eXBlZGVmIE1DSV9TRUVLX1BBUk1TIEZBUiAqTFBNQ0lfU0VFS19QQVJNUzsKK30gTUNJX1NFRUtfUEFSTVMsICpMUE1DSV9TRUVLX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwogCURXT1JEICAgZHdSZXR1cm47CiAJRFdPUkQgICBkd0l0ZW07CiAJRFdPUkQgICBkd1RyYWNrOwotCX0gTUNJX1NUQVRVU19QQVJNUzsKLXR5cGVkZWYgTUNJX1NUQVRVU19QQVJNUyBGQVIgKiBMUE1DSV9TVEFUVVNfUEFSTVM7Cit9IE1DSV9TVEFUVVNfUEFSTVMsICpMUE1DSV9TVEFUVVNfUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CiAJTFBTVFIgICBscHN0clJldHVybjsKIAlEV09SRCAgIGR3UmV0U2l6ZTsKLQl9IE1DSV9JTkZPX1BBUk1TOwotdHlwZWRlZiBNQ0lfSU5GT19QQVJNUyBGQVIgKiBMUE1DSV9JTkZPX1BBUk1TOworfSBNQ0lfSU5GT19QQVJNUywgKkxQTUNJX0lORk9fUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CiAJRFdPUkQgICBkd1JldHVybjsKIAlEV09SRCAgIGR3SXRlbTsKLQl9IE1DSV9HRVRERVZDQVBTX1BBUk1TOwotdHlwZWRlZiBNQ0lfR0VUREVWQ0FQU19QQVJNUyBGQVIgKiBMUE1DSV9HRVRERVZDQVBTX1BBUk1TOworfSBNQ0lfR0VUREVWQ0FQU19QQVJNUywgKkxQTUNJX0dFVERFVkNBUFNfUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CkBAIC0xMDA4LDE1ICs5NzIsMTMgQEAKIAlEV09SRCAgIGR3TnVtYmVyOwogCVVJTlQgICAgd0RldmljZVR5cGU7CiAJVUlOVCAgICB3UmVzZXJ2ZWQwOwotCX0gTUNJX1NZU0lORk9fUEFSTVM7Ci10eXBlZGVmIE1DSV9TWVNJTkZPX1BBUk1TIEZBUiAqIExQTUNJX1NZU0lORk9fUEFSTVM7Cit9IE1DSV9TWVNJTkZPX1BBUk1TLCAqTFBNQ0lfU1lTSU5GT19QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlEV09SRCAgIGR3VGltZUZvcm1hdDsKIAlEV09SRCAgIGR3QXVkaW87Ci0JfSBNQ0lfU0VUX1BBUk1TOwotdHlwZWRlZiBNQ0lfU0VUX1BBUk1TIEZBUiAqTFBNQ0lfU0VUX1BBUk1TOworfSBNQ0lfU0VUX1BBUk1TLCAqTFBNQ0lfU0VUX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwpAQCAtMTAyNCwzMyArOTg2LDI4IEBACiAJVUlOVCAgICB3UmVzZXJ2ZWQwOwogCUhXTkQgICAgaHduZEJyZWFrOwogCVVJTlQgICAgd1Jlc2VydmVkMTsKLQl9IE1DSV9CUkVBS19QQVJNUzsKLXR5cGVkZWYgTUNJX0JSRUFLX1BBUk1TIEZBUiAqIExQTUNJX0JSRUFLX1BBUk1TOworfSBNQ0lfQlJFQUtfUEFSTVMsICpMUE1DSV9CUkVBS19QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlMUENTVFIgIGxwc3RyU291bmROYW1lOwotCX0gTUNJX1NPVU5EX1BBUk1TOwotdHlwZWRlZiBNQ0lfU09VTkRfUEFSTVMgRkFSICogTFBNQ0lfU09VTkRfUEFSTVM7Cit9IE1DSV9TT1VORF9QQVJNUywgKkxQTUNJX1NPVU5EX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwogCUxQQ1NUUiAgbHBmaWxlbmFtZTsKLQl9IE1DSV9TQVZFX1BBUk1TOwotdHlwZWRlZiBNQ0lfU0FWRV9QQVJNUyBGQVIgKiBMUE1DSV9TQVZFX1BBUk1TOworfSBNQ0lfU0FWRV9QQVJNUywgKkxQTUNJX1NBVkVfUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CiAJTFBDU1RSICBscGZpbGVuYW1lOwotCX0gTUNJX0xPQURfUEFSTVM7Ci10eXBlZGVmIE1DSV9MT0FEX1BBUk1TIEZBUiAqIExQTUNJX0xPQURfUEFSTVM7Cit9IE1DSV9MT0FEX1BBUk1TLCAqTFBNQ0lfTE9BRF9QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlEV09SRCAgIGR3RnJvbTsKIAlEV09SRCAgIGR3VG87Ci0JfSBNQ0lfUkVDT1JEX1BBUk1TOwotdHlwZWRlZiBNQ0lfUkVDT1JEX1BBUk1TIEZBUiAqTFBNQ0lfUkVDT1JEX1BBUk1TOworfSBNQ0lfUkVDT1JEX1BBUk1TLCAqTFBNQ0lfUkVDT1JEX1BBUk1TOwogCiAjZGVmaW5lIE1DSV9WRF9NT0RFX1BBUksgICAgICAgICAgICAgICAgKE1DSV9WRF9PRkZTRVQgKyAxKQogCkBAIC0xMDk1LDIwICsxMDUyLDE3IEBACiAJRFdPUkQgICBkd0Zyb207CiAJRFdPUkQgICBkd1RvOwogCURXT1JEICAgZHdTcGVlZDsKLQl9IE1DSV9WRF9QTEFZX1BBUk1TOwotdHlwZWRlZiBNQ0lfVkRfUExBWV9QQVJNUyBGQVIgKkxQTUNJX1ZEX1BMQVlfUEFSTVM7Cit9IE1DSV9WRF9QTEFZX1BBUk1TLCAqTFBNQ0lfVkRfUExBWV9QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlEV09SRCAgIGR3RnJhbWVzOwotCX0gTUNJX1ZEX1NURVBfUEFSTVM7Ci10eXBlZGVmIE1DSV9WRF9TVEVQX1BBUk1TIEZBUiAqTFBNQ0lfVkRfU1RFUF9QQVJNUzsKK30gTUNJX1ZEX1NURVBfUEFSTVMsICpMUE1DSV9WRF9TVEVQX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwogCUxQQ1NUUiAgbHBzdHJDb21tYW5kOwotCX0gTUNJX1ZEX0VTQ0FQRV9QQVJNUzsKLXR5cGVkZWYgTUNJX1ZEX0VTQ0FQRV9QQVJNUyBGQVIgKkxQTUNJX1ZEX0VTQ0FQRV9QQVJNUzsKK30gTUNJX1ZEX0VTQ0FQRV9QQVJNUywgKkxQTUNJX1ZEX0VTQ0FQRV9QQVJNUzsKIAogI2RlZmluZSBNQ0lfV0FWRV9PUEVOX0JVRkZFUiAgICAgICAgICAgIDB4MDAwMTAwMDBMCiAKQEAgLTExNDQsMTUgKzEwOTgsMTMgQEAKIAlMUENTVFIgIGxwc3RyRWxlbWVudE5hbWU7CiAJTFBDU1RSICBscHN0ckFsaWFzOwogCURXT1JEICAgZHdCdWZmZXJTZWNvbmRzOwotCX0gTUNJX1dBVkVfT1BFTl9QQVJNUzsKLXR5cGVkZWYgTUNJX1dBVkVfT1BFTl9QQVJNUyBGQVIgKkxQTUNJX1dBVkVfT1BFTl9QQVJNUzsKK30gTUNJX1dBVkVfT1BFTl9QQVJNUywgKkxQTUNJX1dBVkVfT1BFTl9QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlEV09SRCAgIGR3RnJvbTsKIAlEV09SRCAgIGR3VG87Ci0JfSBNQ0lfV0FWRV9ERUxFVEVfUEFSTVM7Ci10eXBlZGVmIE1DSV9XQVZFX0RFTEVURV9QQVJNUyBGQVIgKkxQTUNJX1dBVkVfREVMRVRFX1BBUk1TOworfSBNQ0lfV0FWRV9ERUxFVEVfUEFSTVMsICpMUE1DSV9XQVZFX0RFTEVURV9QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKQEAgLTExNzIsOCArMTEyNCw3IEBACiAJVUlOVCAgICB3UmVzZXJ2ZWQ0OwogCVVJTlQgICAgd0JpdHNQZXJTYW1wbGU7CiAJVUlOVCAgICB3UmVzZXJ2ZWQ1OwotCX0gTUNJX1dBVkVfU0VUX1BBUk1TOwotdHlwZWRlZiBNQ0lfV0FWRV9TRVRfUEFSTVMgRkFSICogTFBNQ0lfV0FWRV9TRVRfUEFSTVM7Cit9IE1DSV9XQVZFX1NFVF9QQVJNUywgKiBMUE1DSV9XQVZFX1NFVF9QQVJNUzsKIAogI2RlZmluZSAgICAgTUNJX1NFUV9ESVZfUFBRTiAgICAgICAgICAgICgwICsgTUNJX1NFUV9PRkZTRVQpCiAjZGVmaW5lICAgICBNQ0lfU0VRX0RJVl9TTVBURV8yNCAgICAgICAgKDEgKyBNQ0lfU0VRX09GRlNFVCkKQEAgLTEyMDksOCArMTE2MCw3IEBACiAJRFdPUkQgICBkd1NsYXZlOwogCURXT1JEICAgZHdNYXN0ZXI7CiAJRFdPUkQgICBkd09mZnNldDsKLQl9IE1DSV9TRVFfU0VUX1BBUk1TOwotdHlwZWRlZiBNQ0lfU0VRX1NFVF9QQVJNUyBGQVIgKiBMUE1DSV9TRVFfU0VUX1BBUk1TOworfSBNQ0lfU0VRX1NFVF9QQVJNUywgKkxQTUNJX1NFUV9TRVRfUEFSTVM7CiAKICNkZWZpbmUgTUNJX0FOSU1fT1BFTl9XUyAgICAgICAgICAgICAgICAweDAwMDEwMDAwTAogI2RlZmluZSBNQ0lfQU5JTV9PUEVOX1BBUkVOVCAgICAgICAgICAgIDB4MDAwMjAwMDBMCkBAIC0xMjcxLDIyICsxMjIxLDE5IEBACiAJRFdPUkQgICBkd1N0eWxlOwogCUhXTkQgICAgaFduZFBhcmVudDsKIAlVSU5UICAgIHdSZXNlcnZlZDE7Ci0JfSBNQ0lfQU5JTV9PUEVOX1BBUk1TOwotdHlwZWRlZiBNQ0lfQU5JTV9PUEVOX1BBUk1TIEZBUiAqTFBNQ0lfQU5JTV9PUEVOX1BBUk1TOworfSBNQ0lfQU5JTV9PUEVOX1BBUk1TLCAqTFBNQ0lfQU5JTV9PUEVOX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwogCURXT1JEICAgZHdGcm9tOwogCURXT1JEICAgZHdUbzsKIAlEV09SRCAgIGR3U3BlZWQ7Ci0JfSBNQ0lfQU5JTV9QTEFZX1BBUk1TOwotdHlwZWRlZiBNQ0lfQU5JTV9QTEFZX1BBUk1TIEZBUiAqTFBNQ0lfQU5JTV9QTEFZX1BBUk1TOworfSBNQ0lfQU5JTV9QTEFZX1BBUk1TLCAqTFBNQ0lfQU5JTV9QTEFZX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwogCURXT1JEICAgZHdGcmFtZXM7Ci0JfSBNQ0lfQU5JTV9TVEVQX1BBUk1TOwotdHlwZWRlZiBNQ0lfQU5JTV9TVEVQX1BBUk1TIEZBUiAqTFBNQ0lfQU5JTV9TVEVQX1BBUk1TOworfSBNQ0lfQU5JTV9TVEVQX1BBUk1TLCAqTFBNQ0lfQU5JTV9TVEVQX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwpAQCAtMTI5NSw4ICsxMjQyLDcgQEAKIAlVSU5UICAgIG5DbWRTaG93OwogCVVJTlQgICAgd1Jlc2VydmVkMjsKIAlMUENTVFIgIGxwc3RyVGV4dDsKLQl9IE1DSV9BTklNX1dJTkRPV19QQVJNUzsKLXR5cGVkZWYgTUNJX0FOSU1fV0lORE9XX1BBUk1TIEZBUiAqIExQTUNJX0FOSU1fV0lORE9XX1BBUk1TOworfSBNQ0lfQU5JTV9XSU5ET1dfUEFSTVMsICpMUE1DSV9BTklNX1dJTkRPV19QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKQEAgLTEzMDYsMTUgKzEyNTIsMTMgQEAKICNlbHNlICAgLyogaWZkZWYgTUNJX1VTRV9PRkZFWFQgKi8KIAlSRUNUICAgIHJjOwogI2VuZGlmICAvKiBpZmRlZiBNQ0lfVVNFX09GRkVYVCAqLwotCX0gTUNJX0FOSU1fUkVDVF9QQVJNUzsKLXR5cGVkZWYgTUNJX0FOSU1fUkVDVF9QQVJNUyBGQVIgKiBMUE1DSV9BTklNX1JFQ1RfUEFSTVM7Cit9IE1DSV9BTklNX1JFQ1RfUEFSTVMsICpMUE1DSV9BTklNX1JFQ1RfUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CiAJUkVDVCAgICByYzsKIAlIREMgICAgIGhEQzsKLQl9IE1DSV9BTklNX1VQREFURV9QQVJNUzsKLXR5cGVkZWYgTUNJX0FOSU1fVVBEQVRFX1BBUk1TIEZBUiAqIExQTUNJX0FOSU1fVVBEQVRFX1BBUk1TOworfSBNQ0lfQU5JTV9VUERBVEVfUEFSTVMsICpMUE1DSV9BTklNX1VQREFURV9QQVJNUzsKIAogI2RlZmluZSBNQ0lfT1ZMWV9PUEVOX1dTICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBMCiAjZGVmaW5lIE1DSV9PVkxZX09QRU5fUEFSRU5UICAgICAgICAgICAgMHgwMDAyMDAwMEwKQEAgLTEzNTcsOCArMTMwMSw3IEBACiAJRFdPUkQgICBkd1N0eWxlOwogCUhXTkQgICAgaFduZFBhcmVudDsKIAlVSU5UICAgIHdSZXNlcnZlZDE7Ci0JfSBNQ0lfT1ZMWV9PUEVOX1BBUk1TOwotdHlwZWRlZiBNQ0lfT1ZMWV9PUEVOX1BBUk1TIEZBUiAqTFBNQ0lfT1ZMWV9PUEVOX1BBUk1TOworfSBNQ0lfT1ZMWV9PUEVOX1BBUk1TLCAqTFBNQ0lfT1ZMWV9PUEVOX1BBUk1TOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJRFdPUkQgICBkd0NhbGxiYWNrOwpAQCAtMTM2Nyw4ICsxMzEwLDcgQEAKIAlVSU5UICAgIG5DbWRTaG93OwogCVVJTlQgICAgd1Jlc2VydmVkMjsKIAlMUENTVFIgIGxwc3RyVGV4dDsKLQl9IE1DSV9PVkxZX1dJTkRPV19QQVJNUzsKLXR5cGVkZWYgTUNJX09WTFlfV0lORE9XX1BBUk1TIEZBUiAqIExQTUNJX09WTFlfV0lORE9XX1BBUk1TOworfSBNQ0lfT1ZMWV9XSU5ET1dfUEFSTVMsICpMUE1DSV9PVkxZX1dJTkRPV19QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKQEAgLTEzNzgsMjIgKzEzMjAsMTkgQEAKICNlbHNlICAgLyogaWZkZWYgTUNJX1VTRV9PRkZFWFQgKi8KIAlSRUNUICAgIHJjOwogI2VuZGlmICAvKiBpZmRlZiBNQ0lfVVNFX09GRkVYVCAqLwotCX0gTUNJX09WTFlfUkVDVF9QQVJNUzsKLXR5cGVkZWYgTUNJX09WTFlfUkVDVF9QQVJNUyBGQVIgKiBMUE1DSV9PVkxZX1JFQ1RfUEFSTVM7Cit9IE1DSV9PVkxZX1JFQ1RfUEFSTVMsICpMUE1DSV9PVkxZX1JFQ1RfUEFSTVM7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlEV09SRCAgIGR3Q2FsbGJhY2s7CiAJTFBDU1RSICBscGZpbGVuYW1lOwogCVJFQ1QgICAgcmM7Ci0JfSBNQ0lfT1ZMWV9TQVZFX1BBUk1TOwotdHlwZWRlZiBNQ0lfT1ZMWV9TQVZFX1BBUk1TIEZBUiAqIExQTUNJX09WTFlfU0FWRV9QQVJNUzsKK30gTUNJX09WTFlfU0FWRV9QQVJNUywgKkxQTUNJX09WTFlfU0FWRV9QQVJNUzsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JEICAgZHdDYWxsYmFjazsKIAlMUENTVFIgIGxwZmlsZW5hbWU7CiAJUkVDVCAgICByYzsKLQl9IE1DSV9PVkxZX0xPQURfUEFSTVM7Ci10eXBlZGVmIE1DSV9PVkxZX0xPQURfUEFSTVMgRkFSICogTFBNQ0lfT1ZMWV9MT0FEX1BBUk1TOworfSBNQ0lfT1ZMWV9MT0FEX1BBUk1TLCAqTFBNQ0lfT1ZMWV9MT0FEX1BBUk1TOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTUyNSwyMyArMTQ2NCwyMCBAQAogCURXT1JEICAgCWR3SW5zdGFuY2U7CiAJSE1JRElPVVQJaE1pZGk7CiAJRFdPUkQgICAJZHdGbGFnczsKLQl9CVBPUlRBTExPQzsKLXR5cGVkZWYgUE9SVEFMTE9DIEZBUiAqTFBQT1JUQUxMT0M7Cit9IFBPUlRBTExPQywgKkxQUE9SVEFMTE9DOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJSFdBVkUJCQloV2F2ZTsKIAlMUFdBVkVGT1JNQVQJbHBGb3JtYXQ7CiAJRFdPUkQJCQlkd0NhbGxCYWNrOwogCURXT1JECQkJZHdJbnN0YW5jZTsKLQl9IFdBVkVPUEVOREVTQzsKLXR5cGVkZWYgV0FWRU9QRU5ERVNDIEZBUiAqTFBXQVZFT1BFTkRFU0M7Cit9IFdBVkVPUEVOREVTQywgKkxQV0FWRU9QRU5ERVNDOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJSE1JREkJCQloTWlkaTsKIAlEV09SRAkJCWR3Q2FsbGJhY2s7CiAJRFdPUkQJCQlkd0luc3RhbmNlOwotCX0gTUlESU9QRU5ERVNDOwotdHlwZWRlZiBNSURJT1BFTkRFU0MgRkFSICpMUE1JRElPUEVOREVTQzsKK30gTUlESU9QRU5ERVNDLCAqTFBNSURJT1BFTkRFU0M7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlVSU5UCQkJd0RlbGF5OwpAQCAtMTU0OSw4ICsxNDg1LDcgQEAKIAlMUFRJTUVDQUxMQkFDSwlscEZ1bmN0aW9uOwogCURXT1JECQkJZHdVc2VyOwogCVVJTlQJCQl3RmxhZ3M7Ci0JfSBUSU1FUkVWRU5UOwotdHlwZWRlZiBUSU1FUkVWRU5UIEZBUiAqTFBUSU1FUkVWRU5UOworfSBUSU1FUkVWRU5ULCAqTFBUSU1FUkVWRU5UOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJVUlOVCAgICB3RGV2aWNlSUQ7CQkJCS8qIGRldmljZSBJRCAqLwpAQCAtMTU1OSw4ICsxNDk0LDcgQEAKIAkJCQkJCQkJCS8qIGZpbGxlZCBpbiBieSB0aGUgZHJpdmVyICovCiAJVUlOVCAgICB3VHlwZTsJCQkJCS8qIGRyaXZlciB0eXBlICovCiAJCQkJCQkJCQkvKiBmaWxsZWQgaW4gYnkgdGhlIGRyaXZlciAqLwotCX0gTUNJX09QRU5fRFJJVkVSX1BBUk1TOwotdHlwZWRlZiBNQ0lfT1BFTl9EUklWRVJfUEFSTVMgRkFSICogTFBNQ0lfT1BFTl9EUklWRVJfUEFSTVM7Cit9IE1DSV9PUEVOX0RSSVZFUl9QQVJNUywgKiBMUE1DSV9PUEVOX0RSSVZFUl9QQVJNUzsKIAogRFdPUkQgbWNpR2V0RHJpdmVyRGF0YShVSU5UIHVEZXZpY2VJRCk7CiBCT09MICBtY2lTZXREcml2ZXJEYXRhKFVJTlQgdURldmljZUlELCBEV09SRCBkd0RhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ub25jbGllbnQuaCBiL2luY2x1ZGUvbm9uY2xpZW50LmgKaW5kZXggYzg5MDIwMS4uNDlmYTIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ub25jbGllbnQuaAorKysgYi9pbmNsdWRlL25vbmNsaWVudC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfX1dJTkVfTk9OQ0xJRU5UX0gKICNkZWZpbmUgX19XSU5FX05PTkNMSUVOVF9ICiAKLSNpbmNsdWRlICJ3aW5kb3dzLmgiCisjaW5jbHVkZSAid2luLmgiCiAKIGV4dGVybiB2b2lkIE5DX0dldEluc2lkZVJlY3QoIEhXTkQgaHduZCwgUkVDVCAqcmVjdCApOwogZXh0ZXJuIHZvaWQgTkNfR2V0TWluTWF4SW5mbyggSFdORCBod25kLCBQT0lOVCAqbWF4U2l6ZSwgUE9JTlQgKm1heFBvcywKQEAgLTE4LDcgKzE4LDcgQEAKIGV4dGVybiBMT05HIE5DX0hhbmRsZU5DQ2FsY1NpemUoIEhXTkQgaHduZCwgTkNDQUxDU0laRV9QQVJBTVMgKnBhcmFtcyApOwogZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNIaXRUZXN0KCBIV05EIGh3bmQsIFBPSU5UIHB0ICk7CiBleHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0xCdXR0b25Eb3duKCBIV05EIGh3bmQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKTsKLWV4dGVybiBMT05HIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsayggSFdORCBod25kLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtICk7CitleHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoIFdORCAqcFduZCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CiBleHRlcm4gTE9ORyBOQ19IYW5kbGVTeXNDb21tYW5kKCBIV05EIGh3bmQsIFdQQVJBTSB3UGFyYW0sIFBPSU5UIHB0ICk7CiBleHRlcm4gTE9ORyBOQ19IYW5kbGVTZXRDdXJzb3IoIEhXTkQgaHduZCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL29sZS5oIGIvaW5jbHVkZS9vbGUuaAppbmRleCAxOGNmNzA2Li5iOTIwNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL29sZS5oCisrKyBiL2luY2x1ZGUvb2xlLmgKQEAgLTE0NSw4ICsxNDUsOCBAQAogfSBPTEVUQVJHRVRERVZJQ0U7CiB0eXBlZGVmIHN0cnVjdCBfT0xFU1RSRUFNKiBMUE9MRVNUUkVBTTsKIHR5cGVkZWYgc3RydWN0IF9PTEVTVFJFQU1WVEJMIHsKLQlEV09SRAkoQ0FMTEJBQ0sqIEdldCkoTFBPTEVTVFJFQU0sTFBTVFIsRFdPUkQpOwotCURXT1JECShDQUxMQkFDSyogUHV0KShMUE9MRVNUUkVBTSxMUFNUUixEV09SRCk7CisJRFdPUkQJKCpHZXQpKExQT0xFU1RSRUFNLExQU1RSLERXT1JEKTsKKwlEV09SRAkoKlB1dCkoTFBPTEVTVFJFQU0sTFBTVFIsRFdPUkQpOwogfSBPTEVTVFJFQU1WVEJMOwogdHlwZWRlZiBPTEVTVFJFQU1WVEJMKglMUE9MRVNUUkVBTVZUQkw7CiB0eXBlZGVmIHN0cnVjdCBfT0xFU1RSRUFNIHsKQEAgLTE1NiwxNCArMTU2LDE0IEBACiB0eXBlZGVmIHN0cnVjdCBfT0xFT0JKRUNUKglMUE9MRU9CSkVDVDsKIHR5cGVkZWYgc3RydWN0IF9PTEVDTElFTlQqCUxQT0xFQ0xJRU5UOwogdHlwZWRlZiBzdHJ1Y3QgX09MRVNFUlZFUkRPQ1ZUQkwgewotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFNhdmUpKExQT0xFU0VSVkVSRE9DKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBDbG9zZSkoTFBPTEVTRVJWRVJET0MpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFNldEhvc3ROYW1lcykoTFBPTEVTRVJWRVJET0MsT0xFX0xQQ1NUUixPTEVfTFBDU1RSKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBTZXREb2NEaW1lbnNpb25zKShMUE9MRVNFUlZFUkRPQyxMUFJFQ1QpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIEdldE9iamVjdCkoTFBPTEVTRVJWRVJET0MsT0xFX0xQQ1NUUixMUE9MRU9CSkVDVCosTFBPTEVDTElFTlQpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFJlbGVhc2UpKExQT0xFU0VSVkVSRE9DKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBTZXRDb2xvclNjaGVtZSkoTFBPTEVTRVJWRVJET0MsTFBMT0dQQUxFVFRFKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBFeGVjdXRlKShMUE9MRVNFUlZFUkRPQyxIR0xPQkFMKTsKKwlPTEVTVEFUVVMJKCpTYXZlKShMUE9MRVNFUlZFUkRPQyk7CisJT0xFU1RBVFVTCSgqQ2xvc2UpKExQT0xFU0VSVkVSRE9DKTsKKwlPTEVTVEFUVVMJKCpTZXRIb3N0TmFtZXMpKExQT0xFU0VSVkVSRE9DLE9MRV9MUENTVFIsT0xFX0xQQ1NUUik7CisJT0xFU1RBVFVTCSgqU2V0RG9jRGltZW5zaW9ucykoTFBPTEVTRVJWRVJET0MsTFBSRUNUKTsKKwlPTEVTVEFUVVMJKCpHZXRPYmplY3QpKExQT0xFU0VSVkVSRE9DLE9MRV9MUENTVFIsTFBPTEVPQkpFQ1QqLExQT0xFQ0xJRU5UKTsKKwlPTEVTVEFUVVMJKCpSZWxlYXNlKShMUE9MRVNFUlZFUkRPQyk7CisJT0xFU1RBVFVTCSgqU2V0Q29sb3JTY2hlbWUpKExQT0xFU0VSVkVSRE9DLExQTE9HUEFMRVRURSk7CisJT0xFU1RBVFVTCSgqRXhlY3V0ZSkoTFBPTEVTRVJWRVJET0MsSEdMT0JBTCk7CiB9IE9MRVNFUlZFUkRPQ1ZUQkw7CiB0eXBlZGVmIE9MRVNFUlZFUkRPQ1ZUQkwqCUxQT0xFU0VSVkVSRE9DVlRCTDsKIHR5cGVkZWYgc3RydWN0IF9PTEVTRVJWRVJET0MgewpAQCAtMTczLDEzICsxNzMsMTMgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX09MRVNFUlZFUioJTFBPTEVTRVJWRVI7CiB0eXBlZGVmIHN0cnVjdCBfT0xFU0VSVkVSVlRCTCB7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogT3BlbikoTFBPTEVTRVJWRVIsTEhTRVJWRVJET0MsT0xFX0xQQ1NUUixMUE9MRVNFUlZFUkRPQyAqKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBDcmVhdGUpKExQT0xFU0VSVkVSLExIU0VSVkVSRE9DLE9MRV9MUENTVFIsT0xFX0xQQ1NUUixMUE9MRVNFUlZFUkRPQyBGQVIqKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBDcmVhdGVGcm9tVGVtcGxhdGUpKExQT0xFU0VSVkVSLExIU0VSVkVSRE9DLE9MRV9MUENTVFIsT0xFX0xQQ1NUUixPTEVfTFBDU1RSLExQT0xFU0VSVkVSRE9DICopOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIEVkaXQpKExQT0xFU0VSVkVSLExIU0VSVkVSRE9DLE9MRV9MUENTVFIsT0xFX0xQQ1NUUixMUE9MRVNFUlZFUkRPQyAqKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBFeGl0KShMUE9MRVNFUlZFUik7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogUmVsZWFzZSkoTFBPTEVTRVJWRVIpOyAKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBFeGVjdXRlKShMUE9MRVNFUlZFUik7IAorCU9MRVNUQVRVUwkoKk9wZW4pKExQT0xFU0VSVkVSLExIU0VSVkVSRE9DLE9MRV9MUENTVFIsTFBPTEVTRVJWRVJET0MgKik7CisJT0xFU1RBVFVTCSgqQ3JlYXRlKShMUE9MRVNFUlZFUixMSFNFUlZFUkRPQyxPTEVfTFBDU1RSLE9MRV9MUENTVFIsTFBPTEVTRVJWRVJET0MqKTsKKwlPTEVTVEFUVVMJKCpDcmVhdGVGcm9tVGVtcGxhdGUpKExQT0xFU0VSVkVSLExIU0VSVkVSRE9DLE9MRV9MUENTVFIsT0xFX0xQQ1NUUixPTEVfTFBDU1RSLExQT0xFU0VSVkVSRE9DICopOworCU9MRVNUQVRVUwkoKkVkaXQpKExQT0xFU0VSVkVSLExIU0VSVkVSRE9DLE9MRV9MUENTVFIsT0xFX0xQQ1NUUixMUE9MRVNFUlZFUkRPQyAqKTsKKwlPTEVTVEFUVVMJKCpFeGl0KShMUE9MRVNFUlZFUik7CisJT0xFU1RBVFVTCSgqUmVsZWFzZSkoTFBPTEVTRVJWRVIpOyAKKwlPTEVTVEFUVVMJKCpFeGVjdXRlKShMUE9MRVNFUlZFUik7IAogfSBPTEVTRVJWRVJWVEJMOyAKIHR5cGVkZWYgT0xFU0VSVkVSVlRCTAkqTFBPTEVTRVJWRVJWVEJMOwogdHlwZWRlZiBzdHJ1Y3QgX09MRVNFUlZFUiB7CkBAIC0xODcsNyArMTg3LDcgQEAKIAkvKiBzZXJ2ZXIgc3BlY2lmaWMgZGF0YSAqLwogfSBPTEVTRVJWRVI7CiB0eXBlZGVmIHN0cnVjdCBfT0xFQ0xJRU5UVlRCTCB7Ci0JaW50IChDQUxMQkFDSyogQ2FsbEJhY2spKExQT0xFQ0xJRU5ULE9MRV9OT1RJRklDQVRJT04sTFBPTEVPQkpFQ1QpOworCWludCAoKkNhbGxCYWNrKShMUE9MRUNMSUVOVCxPTEVfTk9USUZJQ0FUSU9OLExQT0xFT0JKRUNUKTsKIH0gT0xFQ0xJRU5UVlRCTDsKIHR5cGVkZWYgT0xFQ0xJRU5UVlRCTAkqTFBPTEVDTElFTlRWVEJMOwogCkBAIC0xOTcsNDQgKzE5Nyw0NCBAQAogfSBPTEVDTElFTlQ7CiAKIHR5cGVkZWYgc3RydWN0IF9PTEVPQkpFQ1RWVEJMIHsKLQl2b2lkICoJKENBTExCQUNLKiBRdWVyeVByb3RvY29sKShMUE9MRU9CSkVDVCxPTEVfTFBDU1RSKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBSZWxlYXNlKShMUE9MRU9CSkVDVCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogU2hvdykoTFBPTEVPQkpFQ1QsQk9PTCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogRG9WZXJiKShMUE9MRU9CSkVDVCxVSU5ULEJPT0wsQk9PTCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogR2V0RGF0YSkoTFBPTEVPQkpFQ1QsT0xFQ0xJUEZPUk1BVCxIQU5ETEUgKik7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogU2V0RGF0YSkoTFBPTEVPQkpFQ1QsT0xFQ0xJUEZPUk1BVCxIQU5ETEUpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFNldFRhcmdldERldmljZSkoTFBPTEVPQkpFQ1QsSEdMT0JBTCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogU2V0Qm91bmRzKShMUE9MRU9CSkVDVCxMUFJFQ1QpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIEVudW1Gb3JtYXRzKShMUE9MRU9CSkVDVCxPTEVDTElQRk9STUFUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBTZXRDb2xvclNjaGVtZSkoTFBPTEVPQkpFQ1QsTFBMT0dQQUxFVFRFKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBEZWxldGUpKExQT0xFT0JKRUNUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBTZXRIb3N0TmFtZXMpKExQT0xFT0JKRUNULE9MRV9MUENTVFIsT0xFX0xQQ1NUUik7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogU2F2ZVRvU3RyZWFtKShMUE9MRU9CSkVDVCxMUE9MRVNUUkVBTSk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogQ2xvbmUpKExQT0xFT0JKRUNULExQT0xFQ0xJRU5ULExIQ0xJRU5URE9DLE9MRV9MUENTVFIsTFBPTEVPQkpFQ1QgKik7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogQ29weUZyb21MaW5rKShMUE9MRU9CSkVDVCxMUE9MRUNMSUVOVCxMSENMSUVOVERPQyxPTEVfTFBDU1RSLExQT0xFT0JKRUNUICopOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIEVxdWFsKShMUE9MRU9CSkVDVCxMUE9MRU9CSkVDVCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogQ29weVRvQ2xpcEJvYXJkKShMUE9MRU9CSkVDVCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogRHJhdykoTFBPTEVPQkpFQ1QsSERDLExQUkVDVCxMUFJFQ1QsSERDKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBBY3RpdmF0ZSkoTFBPTEVPQkpFQ1QsVUlOVCxCT09MLEJPT0wsSFdORCxMUFJFQ1QpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIEV4ZWN1dGUpKExQT0xFT0JKRUNULEhHTE9CQUwsVUlOVCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogQ2xvc2UpKExQT0xFT0JKRUNUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBVcGRhdGUpKExQT0xFT0JKRUNUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBSZWNvbm5lY3QpKExQT0xFT0JKRUNUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBPYmplY3RDb252ZXJ0KShMUE9MRU9CSkVDVCxPTEVfTFBDU1RSLExQT0xFQ0xJRU5ULExIQ0xJRU5URE9DLE9MRV9MUENTVFIsTFBPTEVPQkpFQ1QqKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBHZXRMaW5rVXBkYXRlT3B0aW9ucykoTFBPTEVPQkpFQ1QsTFBPTEVPUFRfVVBEQVRFKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBTZXRMaW5rVXBkYXRlT3B0aW9ucykoTFBPTEVPQkpFQ1QsT0xFT1BUX1VQREFURSk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogUmVuYW1lKShMUE9MRU9CSkVDVCxPTEVfTFBDU1RSKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBRdWVyeU5hbWUpKExQT0xFT0JKRUNULExQU1RSLExQVUlOVCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogUXVlcnlUeXBlKShMUE9MRU9CSkVDVCxMUExPTkcpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFF1ZXJ5Qm91bmRzKShMUE9MRU9CSkVDVCxMUFJFQ1QpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFF1ZXJ5U2l6ZSkoTFBPTEVPQkpFQ1QsTFBEV09SRCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogUXVlcnlPcGVuKShMUE9MRU9CSkVDVCk7Ci0JT0xFU1RBVFVTCShDQUxMQkFDSyogUXVlcnlPdXRPZkRhdGUpKExQT0xFT0JKRUNUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBRdWVyeVJlbGVhc2VTdGF0dXMpKExQT0xFT0JKRUNUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBRdWVyeVJlbGVhc2VFcnJvcikoTFBPTEVPQkpFQ1QpOwotCU9MRV9SRUxFQVNFX01FVEhPRAkoQ0FMTEJBQ0sqIFF1ZXJ5UmVsZWFzZU1ldGhvZCkoTFBPTEVPQkpFQ1QpOwotCU9MRVNUQVRVUwkoQ0FMTEJBQ0sqIFJlcXVlc3REYXRhKShMUE9MRU9CSkVDVCxPTEVDTElQRk9STUFUKTsKLQlPTEVTVEFUVVMJKENBTExCQUNLKiBPYmplY3RMb25nKShMUE9MRU9CSkVDVCxVSU5ULExQTE9ORyk7CisgICAgICAgIHZvaWQgKiAgCSgqUXVlcnlQcm90b2NvbCkoTFBPTEVPQkpFQ1QsT0xFX0xQQ1NUUik7CisJT0xFU1RBVFVTCSgqUmVsZWFzZSkoTFBPTEVPQkpFQ1QpOworCU9MRVNUQVRVUwkoKlNob3cpKExQT0xFT0JKRUNULEJPT0wpOworCU9MRVNUQVRVUwkoKkRvVmVyYikoTFBPTEVPQkpFQ1QsVUlOVCxCT09MLEJPT0wpOworCU9MRVNUQVRVUwkoKkdldERhdGEpKExQT0xFT0JKRUNULE9MRUNMSVBGT1JNQVQsSEFORExFICopOworCU9MRVNUQVRVUwkoKlNldERhdGEpKExQT0xFT0JKRUNULE9MRUNMSVBGT1JNQVQsSEFORExFKTsKKwlPTEVTVEFUVVMJKCpTZXRUYXJnZXREZXZpY2UpKExQT0xFT0JKRUNULEhHTE9CQUwpOworCU9MRVNUQVRVUwkoKlNldEJvdW5kcykoTFBPTEVPQkpFQ1QsTFBSRUNUKTsKKwlPTEVTVEFUVVMJKCpFbnVtRm9ybWF0cykoTFBPTEVPQkpFQ1QsT0xFQ0xJUEZPUk1BVCk7CisJT0xFU1RBVFVTCSgqU2V0Q29sb3JTY2hlbWUpKExQT0xFT0JKRUNULExQTE9HUEFMRVRURSk7CisJT0xFU1RBVFVTCSgqRGVsZXRlKShMUE9MRU9CSkVDVCk7CisJT0xFU1RBVFVTCSgqU2V0SG9zdE5hbWVzKShMUE9MRU9CSkVDVCxPTEVfTFBDU1RSLE9MRV9MUENTVFIpOworCU9MRVNUQVRVUwkoKlNhdmVUb1N0cmVhbSkoTFBPTEVPQkpFQ1QsTFBPTEVTVFJFQU0pOworCU9MRVNUQVRVUwkoKkNsb25lKShMUE9MRU9CSkVDVCxMUE9MRUNMSUVOVCxMSENMSUVOVERPQyxPTEVfTFBDU1RSLExQT0xFT0JKRUNUICopOworCU9MRVNUQVRVUwkoKkNvcHlGcm9tTGluaykoTFBPTEVPQkpFQ1QsTFBPTEVDTElFTlQsTEhDTElFTlRET0MsT0xFX0xQQ1NUUixMUE9MRU9CSkVDVCAqKTsKKwlPTEVTVEFUVVMJKCpFcXVhbCkoTFBPTEVPQkpFQ1QsTFBPTEVPQkpFQ1QpOworCU9MRVNUQVRVUwkoKkNvcHlUb0NsaXBCb2FyZCkoTFBPTEVPQkpFQ1QpOworCU9MRVNUQVRVUwkoKkRyYXcpKExQT0xFT0JKRUNULEhEQyxMUFJFQ1QsTFBSRUNULEhEQyk7CisJT0xFU1RBVFVTCSgqQWN0aXZhdGUpKExQT0xFT0JKRUNULFVJTlQsQk9PTCxCT09MLEhXTkQsTFBSRUNUKTsKKwlPTEVTVEFUVVMJKCpFeGVjdXRlKShMUE9MRU9CSkVDVCxIR0xPQkFMLFVJTlQpOworCU9MRVNUQVRVUwkoKkNsb3NlKShMUE9MRU9CSkVDVCk7CisJT0xFU1RBVFVTCSgqVXBkYXRlKShMUE9MRU9CSkVDVCk7CisJT0xFU1RBVFVTCSgqUmVjb25uZWN0KShMUE9MRU9CSkVDVCk7CisJT0xFU1RBVFVTCSgqT2JqZWN0Q29udmVydCkoTFBPTEVPQkpFQ1QsT0xFX0xQQ1NUUixMUE9MRUNMSUVOVCxMSENMSUVOVERPQyxPTEVfTFBDU1RSLExQT0xFT0JKRUNUKik7CisJT0xFU1RBVFVTCSgqR2V0TGlua1VwZGF0ZU9wdGlvbnMpKExQT0xFT0JKRUNULExQT0xFT1BUX1VQREFURSk7CisJT0xFU1RBVFVTCSgqU2V0TGlua1VwZGF0ZU9wdGlvbnMpKExQT0xFT0JKRUNULE9MRU9QVF9VUERBVEUpOworCU9MRVNUQVRVUwkoKlJlbmFtZSkoTFBPTEVPQkpFQ1QsT0xFX0xQQ1NUUik7CisJT0xFU1RBVFVTCSgqUXVlcnlOYW1lKShMUE9MRU9CSkVDVCxMUFNUUixMUFVJTlQxNik7CisJT0xFU1RBVFVTCSgqUXVlcnlUeXBlKShMUE9MRU9CSkVDVCxMUExPTkcpOworCU9MRVNUQVRVUwkoKlF1ZXJ5Qm91bmRzKShMUE9MRU9CSkVDVCxMUFJFQ1QpOworCU9MRVNUQVRVUwkoKlF1ZXJ5U2l6ZSkoTFBPTEVPQkpFQ1QsTFBEV09SRCk7CisJT0xFU1RBVFVTCSgqUXVlcnlPcGVuKShMUE9MRU9CSkVDVCk7CisJT0xFU1RBVFVTCSgqUXVlcnlPdXRPZkRhdGUpKExQT0xFT0JKRUNUKTsKKwlPTEVTVEFUVVMJKCpRdWVyeVJlbGVhc2VTdGF0dXMpKExQT0xFT0JKRUNUKTsKKwlPTEVTVEFUVVMJKCpRdWVyeVJlbGVhc2VFcnJvcikoTFBPTEVPQkpFQ1QpOworCU9MRV9SRUxFQVNFX01FVEhPRCAoKlF1ZXJ5UmVsZWFzZU1ldGhvZCkoTFBPTEVPQkpFQ1QpOworCU9MRVNUQVRVUwkoKlJlcXVlc3REYXRhKShMUE9MRU9CSkVDVCxPTEVDTElQRk9STUFUKTsKKwlPTEVTVEFUVVMJKCpPYmplY3RMb25nKShMUE9MRU9CSkVDVCxVSU5ULExQTE9ORyk7CiB9IE9MRU9CSkVDVFZUQkw7CiB0eXBlZGVmIE9MRU9CSkVDVFZUQkwqCUxQT0xFT0JKRUNUVlRCTDsKIApAQCAtMjQzLDExICsyNDMsMTEgQEAKIH0gT0xFT0JKRUNUOwogCiAKLU9MRVNUQVRVUyBXSU5BUEkgT2xlUmVnaXN0ZXJTZXJ2ZXIoTFBDU1RSLExQT0xFU0VSVkVSLExIU0VSVkVSICosSElOU1RBTkNFLE9MRV9TRVJWRVJfVVNFKTsKLU9MRVNUQVRVUyBXSU5BUEkgT2xlVW5ibG9ja1NlcnZlcihMSFNFUlZFUixCT09MICopOwotT0xFU1RBVFVTIFdJTkFQSSBPbGVSZWdpc3RlclNlcnZlckRvYyhMSFNFUlZFUixMUENTVFIsTFBPTEVTRVJWRVJET0MsTEhTRVJWRVJET0MgKik7Ci1PTEVTVEFUVVMgV0lOQVBJIE9sZVJlZ2lzdGVyQ2xpZW50RG9jKExQQ1NUUixMUENTVFIsTE9ORyxMSENMSUVOVERPQyAqKTsKLU9MRVNUQVRVUyBXSU5BUEkgT2xlUmVuYW1lQ2xpZW50RG9jKExIQ0xJRU5URE9DLExQQ1NUUik7Ci1PTEVTVEFUVVMgV0lOQVBJIE9sZVJldm9rZVNlcnZlckRvYyhMSFNFUlZFUkRPQyk7Ci1PTEVTVEFUVVMgV0lOQVBJIE9sZVJldm9rZUNsaWVudERvYyhMSENMSUVOVERPQyk7Ci1PTEVTVEFUVVMgV0lOQVBJIE9sZVJldm9rZVNlcnZlcihMSFNFUlZFUik7CitPTEVTVEFUVVMgT2xlUmVnaXN0ZXJTZXJ2ZXIoTFBDU1RSLExQT0xFU0VSVkVSLExIU0VSVkVSICosSElOU1RBTkNFLE9MRV9TRVJWRVJfVVNFKTsKK09MRVNUQVRVUyBPbGVVbmJsb2NrU2VydmVyKExIU0VSVkVSLEJPT0wgKik7CitPTEVTVEFUVVMgT2xlUmVnaXN0ZXJTZXJ2ZXJEb2MoTEhTRVJWRVIsTFBDU1RSLExQT0xFU0VSVkVSRE9DLExIU0VSVkVSRE9DICopOworT0xFU1RBVFVTIE9sZVJlZ2lzdGVyQ2xpZW50RG9jKExQQ1NUUixMUENTVFIsTE9ORyxMSENMSUVOVERPQyAqKTsKK09MRVNUQVRVUyBPbGVSZW5hbWVDbGllbnREb2MoTEhDTElFTlRET0MsTFBDU1RSKTsKK09MRVNUQVRVUyBPbGVSZXZva2VTZXJ2ZXJEb2MoTEhTRVJWRVJET0MpOworT0xFU1RBVFVTIE9sZVJldm9rZUNsaWVudERvYyhMSENMSUVOVERPQyk7CitPTEVTVEFUVVMgT2xlUmV2b2tlU2VydmVyKExIU0VSVkVSKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3RhY2tmcmFtZS5oIGIvaW5jbHVkZS9zdGFja2ZyYW1lLmgKaW5kZXggZDBjODQwMC4uZTUyZWIxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGFja2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9zdGFja2ZyYW1lLmgKQEAgLTc1LDkgKzc1LDkgQEAKICNlbmRpZgogU0VHUFRSIE1BS0VfU0VHUFRSKHZvaWQgKnB0cik7CiAjZWxzZQotI2RlZmluZSBDVVJSRU5UX1NUQUNLMTYJZXJyb3IuZXJyb3IKLSNkZWZpbmUgQ1VSUkVOVF9EUwkJMAotI2RlZmluZSBNQUtFX1NFR1BUUihwdHIpCSgoU0VHUFRSKXB0cikKKyNkZWZpbmUgQ1VSUkVOVF9TVEFDSzE2CSAgIGVycm9yLmVycm9yCisjZGVmaW5lIENVUlJFTlRfRFMgICAgICAgICAoKFdPUkQpR2V0VGFza0RTKCkpCisjZGVmaW5lIE1BS0VfU0VHUFRSKHB0cikgICAoKFNFR1BUUilwdHIpCiAjZW5kaWYKIAogI2VuZGlmIC8qIFdJTkVfU1RBQ0tGUkFNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0cnVjdDMyLmggYi9pbmNsdWRlL3N0cnVjdDMyLmgKaW5kZXggZmY1M2QyNC4uZWE1Yjc1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdHJ1Y3QzMi5oCisrKyBiL2luY2x1ZGUvc3RydWN0MzIuaApAQCAtNjYsOCArNjYsNiBAQAogCVdPUkQgaWQgV0lORV9QQUNLRUQ7CiB9IERMR0lURU1URU1QTEFURTMyOwogCi0jZGVmaW5lIENXX1VTRURFRkFVTFQzMgkweDgwMDAwMDAwCi0KIHR5cGVkZWYgc3RydWN0IHRhZ01TRzMyCiB7CiAJRFdPUkQgaHduZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGFzay5oIGIvaW5jbHVkZS90YXNrLmgKaW5kZXggODJiYzgwZS4uY2U1NmI3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXNrLmgKKysrIGIvaW5jbHVkZS90YXNrLmgKQEAgLTg5LDcgKzg5LDcgQEAKICAgICBEV09SRCAgIGNvbXBhdF9mbGFncyBXSU5FX1BBQ0tFRDsgICAvKiBDb21wYXRpYmlsaXR5IGZsYWdzICovCiAgICAgQllURSAgICB1bnVzZWQ0WzE0XTsKICAgICBIQU5ETEUgIGhQREI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3RvciBvZiBQREIgKGkuZS4gUFNQKSAqLwotICAgIERXT1JEICAgZHRhIFdJTkVfUEFDS0VEOyAgICAgICAgICAgIC8qIEN1cnJlbnQgRFRBICovCisgICAgU0VHUFRSICBkdGEgV0lORV9QQUNLRUQ7ICAgICAgICAgICAgLyogQ3VycmVudCBEVEEgKi8KICAgICBCWVRFICAgIGN1cmRyaXZlOyAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGRyaXZlICovCiAgICAgQllURSAgICBjdXJkaXJbNjVdOyAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBkaXJlY3RvcnkgKi8KICAgICBXT1JEICAgIG5DbWRTaG93OyAgICAgICAgICAgICAgICAgICAvKiBjbWRTaG93IHBhcmFtZXRlciB0byBXaW5NYWluICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Rvb2xoZWxwLmggYi9pbmNsdWRlL3Rvb2xoZWxwLmgKaW5kZXggMTFlMGU1NC4uZTE2MTEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90b29saGVscC5oCisrKyBiL2luY2x1ZGUvdG9vbGhlbHAuaApAQCAtNzcsOSArNzcsOCBAQAogQk9PTCBHbG9iYWxJbmZvKCBHTE9CQUxJTkZPICpwSW5mbyApOwogQk9PTCBHbG9iYWxGaXJzdCggR0xPQkFMRU5UUlkgKnBHbG9iYWwsIFdPUkQgd0ZsYWdzICk7CiBCT09MIEdsb2JhbE5leHQoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBXT1JEIHdGbGFncykgOwotQk9PTCBHbG9iYWxFbnRyeUhhbmRsZSggR0xPQkFMRU5UUlkgKnBHbG9iYWwsIEhHTE9CQUwgaEl0ZW0gKTsKLUJPT0wgR2xvYmFsRW50cnlNb2R1bGUoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBITU9EVUxFIGhNb2R1bGUsIFdPUkQgd1NlZyApOwotV09SRCBHbG9iYWxIYW5kbGVUb1NlbCggSEdMT0JBTCBoYW5kbGUgKTsKK0JPT0wgR2xvYmFsRW50cnlIYW5kbGUoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBIR0xPQkFMMTYgaEl0ZW0gKTsKK0JPT0wgR2xvYmFsRW50cnlNb2R1bGUoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBITU9EVUxFMTYgaE1vZHVsZSwgV09SRCB3U2VnICk7CiAKIC8qIExvY2FsIGhlYXAgKi8KIApAQCAtOTIsNyArOTEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgICBEV09SRCAgIGR3U2l6ZTsKLSAgICBITE9DQUwgIGhIYW5kbGU7CisgICAgSExPQ0FMMTYgIGhIYW5kbGU7CiAgICAgV09SRCAgICB3QWRkcmVzczsKICAgICBXT1JEICAgIHdTaXplOwogICAgIFdPUkQgICAgd0ZsYWdzOwpAQCAtMzMzLDcgKzMzMiw3IEBACiBzdHJ1Y3QgewogCURXT1JECWR3U2l6ZTsKIAlVSU5UCXdFcnJDb2RlOwotCVZPSUQJRkFSKglscEluZm87CS8qIGRlcGVuZHMgb24gd0VyckNvZGUgKi8KKwlWT0lEICAgKmxwSW5mbzsgLyogZGVwZW5kcyBvbiB3RXJyQ29kZSAqLwogfSBORllMT0dFUlJPUjsKIAogLyogY2FsbGVkIGZvciBwYXJhbWV0ZXIgZXJyb3JzPyAqLwpAQCAtMzQyLDYgKzM0MSw2IEBACiAJRFdPUkQJZHdTaXplOwogCVVJTlQJd0VyckNvZGU7CiAJRkFSUFJPQwlscGZuRXJyb3JBZGRyOwotCXZvaWQgRkFSKiBGQVIqIGxwQmFkUGFyYW07CisJdm9pZCAgKipscEJhZFBhcmFtOwogfSBORllMT0dQQVJBTUVSUk9SOwogI2VuZGlmIC8qIF9fVE9PTEhFTFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91c2VyLmggYi9pbmNsdWRlL3VzZXIuaAppbmRleCBjMTczNjRlLi5lNGVlYWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VzZXIuaAorKysgYi9pbmNsdWRlL3VzZXIuaApAQCAtMTAsMTYgKzEwLDYgQEAKICNpbmNsdWRlICJsZHQuaCIKICNpbmNsdWRlICJsb2NhbC5oIgogCi0jaWZkZWYgV0lORUxJQgotCi0jZGVmaW5lIFVTRVJfSEVBUF9BTExPQyhzaXplKSBMb2NhbEFsbG9jIChMTUVNX0ZJWEVELCBzaXplKQotI2RlZmluZSBVU0VSX0hFQVBfUkVBTExPQyhoYW5kbGUsc2l6ZSkgTG9jYWxSZUFsbG9jIChoYW5kbGUsc2l6ZSxMTUVNX0ZJWEVEKQotI2RlZmluZSBVU0VSX0hFQVBfTElOX0FERFIoaGFuZGxlKSBMb2NhbExvY2sgKGhhbmRsZSkKLSNkZWZpbmUgVVNFUl9IRUFQX1NFR19BRERSKGhhbmRsZSkgTG9jYWxMb2NrIChoYW5kbGUpCi0jZGVmaW5lIFVTRVJfSEVBUF9GUkVFKGhhbmRsZSkgTG9jYWxGcmVlIChoYW5kbGUpCi0KLSNlbHNlICAvKiBXSU5FTElCICovCi0KIGV4dGVybiBXT1JEIFVTRVJfSGVhcFNlbDsKIAogI2RlZmluZSBVU0VSX0hFQVBfQUxMT0Moc2l6ZSkgXApAQCAtMzAsOSArMjAsMTIgQEAKICAgICAgICAgICAgIExPQ0FMX0ZyZWUoIFVTRVJfSGVhcFNlbCwgKGhhbmRsZSkgKQogI2RlZmluZSBVU0VSX0hFQVBfTElOX0FERFIoaGFuZGxlKSAgXAogICAgICAgICAgICAgKChoYW5kbGUpID8gUFRSX1NFR19PRkZfVE9fTElOKFVTRVJfSGVhcFNlbCwgKGhhbmRsZSkpIDogTlVMTCkKKworI2lmZGVmIFdJTkVMSUIKKyNkZWZpbmUgVVNFUl9IRUFQX1NFR19BRERSKGhhbmRsZSkgICgoU0VHUFRSKShVU0VSX0hFQVBfTElOX0FERFIoaGFuZGxlKSkpCisjZWxzZQogI2RlZmluZSBVU0VSX0hFQVBfU0VHX0FERFIoaGFuZGxlKSAgXAogICAgICAgICAgICAgKChoYW5kbGUpID8gTUFLRUxPTkcoKGhhbmRsZSksIFVTRVJfSGVhcFNlbCkgOiAwKQotCiAjZW5kaWYgIC8qIFdJTkVMSUIgKi8KIAogI2VuZGlmICAvKiBVU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmVyLmggYi9pbmNsdWRlL3Zlci5oCmluZGV4IGU2YmNkOGUuLjIzMjQ2MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmVyLmgKKysrIGIvaW5jbHVkZS92ZXIuaApAQCAtMTI3LDM2ICsxMjcsMzYgQEAKIAlEV09SRCAgIGR3RmlsZURhdGVMUzsKIH0gVlNfRklYRURGSUxFSU5GTzsKIAotRFdPUkQgV0lOQVBJCitEV09SRAogR2V0RmlsZVJlc291cmNlU2l6ZShMUENTVFIgZmlsZW5hbWUsU0VHUFRSIHJlc3R5cGUsU0VHUFRSIHJlc2lkLExQRFdPUkQgb2ZmKTsKIAotRFdPUkQgV0lOQVBJCitEV09SRAogR2V0RmlsZVJlc291cmNlKExQQ1NUUiBmaWxlbmFtZSxTRUdQVFIgcmVzdHlwZSxTRUdQVFIgcmVzaWQsCiAJCURXT1JEIG9mZixEV09SRCByZXNsZW4sTFBWT0lEIGRhdGEKICk7CiAKLURXT1JEIFdJTkFQSQorRFdPUkQKIEdldEZpbGVWZXJzaW9uSW5mb1NpemUoTFBDU1RSIGZpbGVuYW1lLExQRFdPUkQgaGFuZGxlKTsKIAotRFdPUkQgV0lOQVBJCitEV09SRAogR2V0RmlsZVZlcnNpb25JbmZvKExQQ1NUUiBmaWxlbmFtZSxEV09SRCBoYW5kbGUsRFdPUkQgZGF0YXNpemUsTFBWT0lEIGRhdGEpOwogCi1EV09SRCBXSU5BUEkKK0RXT1JECiBWZXJGaW5kRmlsZSgKIAlVSU5UIGZsYWdzLExQQ1NUUiBmaWxlbmFtZSxMUENTVFIgd2luZGlyLExQQ1NUUiBhcHBkaXIsCiAJTFBTVFIgY3VyZGlyLFVJTlQgKmN1cmRpcmxlbixMUFNUUiBkZXN0ZGlyLFVJTlQqZGVzdGRpcmxlbgogKTsKIAotRFdPUkQgV0lOQVBJCitEV09SRAogVmVySW5zdGFsbEZpbGUoCiAJVUlOVCBmbGFncyxMUENTVFIgc3JjZmlsZW5hbWUsTFBDU1RSIGRlc3RmaWxlbmFtZSxMUENTVFIgc3JjZGlyLAogCUxQQ1NUUiBkZXN0ZGlyLExQU1RSIHRtcGZpbGUsVUlOVCp0bXBmaWxlbGVuCiApOwogCi1EV09SRCBXSU5BUEkKK0RXT1JECiBWZXJMYW5ndWFnZU5hbWUoVUlOVCBsYW5nLExQU1RSIGxhbmduYW1lLFVJTlQgbGFuZ25hbWVsZW4pOwogCi1EV09SRCBXSU5BUEkKK0RXT1JECiBWZXJRdWVyeVZhbHVlKFNFR1BUUiBibG9jayxMUENTVFIgc3ViYmxvY2ssU0VHUFRSICpidWZmZXIsVUlOVCAqYnVmbGVuKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luYmFzZS5oIGIvaW5jbHVkZS93aW5iYXNlLmgKaW5kZXggZTkxMzQwNy4uMGViMDVmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5iYXNlLmgKKysrIGIvaW5jbHVkZS93aW5iYXNlLmgKQEAgLTQzLDcgKzQzLDcgQEAKIAogdHlwZWRlZiBMT05HIChUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUikoc3RydWN0IF9FWENFUFRJT05fUE9JTlRFUlMgKik7CiAKLVdJTkFQSSAgVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIgKlNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcihUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUiAqZnVuYyk7CitUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUiAqU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKFRPUF9MRVZFTF9FWENFUFRJT05fRklMVEVSICpmdW5jKTsKIAogLypXSU5BUEkgaW50ICBTZXRFcnJvck1vZGUoaW50KTsqLwogCkBAIC0xMTQsMzkgKzExNCwzNiBAQAogCiAvKkRXT1JEIFdJTkFQSSBHZXRWZXJzaW9uKCB2b2lkICk7Ki8KIAotaW50Ci1XSU5BUEkgV2luTWFpbihISU5TVEFOQ0UsIEhJTlNUQU5DRSBwcmV2LCBjaGFyICpjbWQsIGludCBzaG93KTsKK2ludCBXaW5NYWluKEhJTlNUQU5DRSwgSElOU1RBTkNFIHByZXYsIGNoYXIgKmNtZCwgaW50IHNob3cpOwogCiAjZGVmaW5lIEdNRU1fRklYRUQgICAgICAgICAgMHgwMDAwCiAjZGVmaW5lIEdNRU1fTU9WRUFCTEUgCSAgICAweDAwMDIKIAotREVDTEFSRV9IQU5ETEUoSEFDQ0VMKTsKLQotSEFDQ0VMIFdJTkFQSSBMb2FkQWNjZWxlcmF0b3JzQSggICBISU5TVEFOQ0UsIGNvbnN0IGNoYXIgKik7CitIQUNDRUwgTG9hZEFjY2VsZXJhdG9yc0EoICAgSElOU1RBTkNFLCBjb25zdCBjaGFyICopOwogI2RlZmluZSBGcmVlTW9kdWxlKGhMaWJNb2R1bGUpIEZyZWVMaWJyYXJ5KChoTGliTW9kdWxlKSkKICNkZWZpbmUgTWFrZVByb2NJbnN0YW5jZShscFByb2MsaEluc3RhbmNlKSAobHBQcm9jKQogI2RlZmluZSBGcmVlUHJvY0luc3RhbmNlKGxwUHJvYykgKGxwUHJvYykKIAogCi1XSU5BUEkgdm9pZCAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04gKmxwQ3JpdCk7Ci1XSU5BUEkgdm9pZCAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oQ1JJVElDQUxfU0VDVElPTiAqbHBDcml0KTsKLVdJTkFQSSBpbnQgICAgICBHZXRDdXJyZW50UHJvY2Vzc0lkKHZvaWQpOwotV0lOQVBJIEhBTkRMRTMyIEdldFByb2Nlc3NIZWFwKHZvaWQpOwotV0lOQVBJIExQVk9JRCAgIEhlYXBBbGxvYyhIQU5ETEUzMixEV09SRCxEV09SRCk7Ci1XSU5BUEkgRFdPUkQgICAgSGVhcENvbXBhY3QoSEFORExFMzIsRFdPUkQpOwotV0lOQVBJIEhBTkRMRTMyIEhlYXBDcmVhdGUoRFdPUkQsRFdPUkQsRFdPUkQpOwotV0lOQVBJIEJPT0wgICAgIEhlYXBEZXN0cm95KEhBTkRMRTMyKTsKLVdJTkFQSSBCT09MICAgICBIZWFwRnJlZShIQU5ETEUzMixEV09SRCxMUFZPSUQpOwotV0lOQVBJIEJPT0wgICAgIEhlYXBMb2NrKEhBTkRMRTMyKTsKLVdJTkFQSSBMUFZPSUQgICBIZWFwUmVBbGxvYyhIQU5ETEUzMixEV09SRCxMUFZPSUQsRFdPUkQpOwotV0lOQVBJIERXT1JEICAgIEhlYXBTaXplKEhBTkRMRTMyLERXT1JELExQVk9JRCk7Ci1XSU5BUEkgQk9PTCAgICAgSGVhcFVubG9jayhIQU5ETEUzMik7Ci1XSU5BUEkgQk9PTCAgICAgSGVhcFZhbGlkYXRlKEhBTkRMRTMyLERXT1JELExQVk9JRCk7Ci1XSU5BUEkgdm9pZCAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbihDUklUSUNBTF9TRUNUSU9OICpscENyaXQpOwotV0lOQVBJIHZvaWQgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04gKmxwQ3JpdCk7Ci1XSU5BUEkgSEFORExFICAgT3BlblByb2Nlc3MoRFdPUkQgYWNjZXNzLCBCT09MIGluaGVyaXQsIERXT1JEIGlkKTsKLVdJTkFQSSBpbnQgICAgICBUZXJtaW5hdGVQcm9jZXNzKEhBTkRMRSBoLCBpbnQgcmV0KTsKLVdJTkFQSSBMUFZPSUQgICBWaXJ0dWFsQWxsb2MoTFBWT0lEIGFkZHIsRFdPUkQgc2l6ZSxEV09SRCB0eXBlLERXT1JEIHByb3RlY3QpOwotV0lOQVBJIEJPT0wgICAgIFZpcnR1YWxGcmVlKCBMUFZPSUQgYWRkciwgRFdPUkQgc2l6ZSwgRFdPUkQgdHlwZSApOwordm9pZCAgICAgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04gKmxwQ3JpdCk7Cit2b2lkICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbihDUklUSUNBTF9TRUNUSU9OICpscENyaXQpOworaW50ICAgICAgR2V0Q3VycmVudFByb2Nlc3NJZCh2b2lkKTsKK0hBTkRMRTMyIEdldFByb2Nlc3NIZWFwKHZvaWQpOworTFBWT0lEICAgSGVhcEFsbG9jKEhBTkRMRTMyLERXT1JELERXT1JEKTsKK0RXT1JEICAgIEhlYXBDb21wYWN0KEhBTkRMRTMyLERXT1JEKTsKK0hBTkRMRTMyIEhlYXBDcmVhdGUoRFdPUkQsRFdPUkQsRFdPUkQpOworQk9PTCAgICAgSGVhcERlc3Ryb3koSEFORExFMzIpOworQk9PTCAgICAgSGVhcEZyZWUoSEFORExFMzIsRFdPUkQsTFBWT0lEKTsKK0JPT0wgICAgIEhlYXBMb2NrKEhBTkRMRTMyKTsKK0xQVk9JRCAgIEhlYXBSZUFsbG9jKEhBTkRMRTMyLERXT1JELExQVk9JRCxEV09SRCk7CitEV09SRCAgICBIZWFwU2l6ZShIQU5ETEUzMixEV09SRCxMUFZPSUQpOworQk9PTCAgICAgSGVhcFVubG9jayhIQU5ETEUzMik7CitCT09MICAgICBIZWFwVmFsaWRhdGUoSEFORExFMzIsRFdPUkQsTFBWT0lEKTsKK3ZvaWQgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oQ1JJVElDQUxfU0VDVElPTiAqbHBDcml0KTsKK3ZvaWQgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04gKmxwQ3JpdCk7CitIQU5ETEUgICBPcGVuUHJvY2VzcyhEV09SRCBhY2Nlc3MsIEJPT0wgaW5oZXJpdCwgRFdPUkQgaWQpOworaW50ICAgICAgVGVybWluYXRlUHJvY2VzcyhIQU5ETEUgaCwgaW50IHJldCk7CitMUFZPSUQgICBWaXJ0dWFsQWxsb2MoTFBWT0lEIGFkZHIsRFdPUkQgc2l6ZSxEV09SRCB0eXBlLERXT1JEIHByb3RlY3QpOworQk9PTCAgICAgVmlydHVhbEZyZWUoIExQVk9JRCBhZGRyLCBEV09SRCBzaXplLCBEV09SRCB0eXBlICk7CiAKICNlbmRpZiAgLyogX19XSU5FX1dJTkJBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5jb24uaCBiL2luY2x1ZGUvd2luY29uLmgKaW5kZXggYzEwNTYwYy4uYmI1ZmZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS93aW5jb24uaAorKysgYi9pbmNsdWRlL3dpbmNvbi5oCkBAIC0xOTYsMTQwICsxOTYsNjIgQEAKICNkZWZpbmUgRU5BQkxFX1dSQVBfQVRfRU9MX09VVFBVVCAweDAyCiAKIAotQk9PTCBXSU5BUEkgQWxsb2NDb25zb2xlIChWT0lEKTsKK0JPT0wgQWxsb2NDb25zb2xlIChWT0lEKTsKIAogCi1IQU5ETEUgV0lOQVBJIENyZWF0ZUNvbnNvbGVTY3JlZW5CdWZmZXIgKERXT1JEIGFjY2VzcywKLQkJCQkJIERXT1JEIG1vZGUsCi0JCQkJCSBDT05TVCBTRUNVUklUWV9BVFRSSUJVVEVTICogbGF0dHIsCi0JCQkJCSBEV09SRCBmbGFncywKLQkJCQkJIFZPSUQgKiBwdHIpOwotCi1CT09MIFdJTkFQSSBGaWxsQ29uc29sZU91dHB1dEF0dHJpYnV0ZSAoSEFORExFIGgsCi0JCQkJCVdPUkQgYXR0ciwKLQkJCQkJRFdPUkQgbGVuLAotCQkJCQlDT09SRCBjbywKLQkJCQkJRFdPUkQgKiBkb25lKTsKLQotQk9PTCBXSU5BUEkgRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBIChIQU5ETEUgaCwKLQkJCQkJIENIQVIgYywKLQkJCQkJIERXT1JEIGxlbiwKLQkJCQkJIENPT1JEIGNvLAotCQkJCQkgRFdPUkQgKiBkb25lKTsKLQotCi1CT09MIFdJTkFQSSBGbHVzaEJ1ZmZlciAoSEFORExFIGgpOwotCi1CT09MIFdJTkFQSSBGcmVlQ29uc29sZSAoVk9JRCk7Ci1CT09MIFdJTkFQSSBHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQgKERXT1JEICBldiwgICAgRFdPUkQgZ3JvdXApOwotVUlOVCBXSU5BUEkgR2V0Q29uc29sZUNQIChWT0lEKTsKLUJPT0wgV0lOQVBJIEdldENvbnNvbGVDdXJzb3JJbmZvIChIQU5ETEUgaCwgQ09OU09MRV9DVVJTT1JfSU5GTyAqaW5mbyk7Ci1CT09MIFdJTkFQSSBHZXRDb25zb2xlTW9kZSAoSEFORExFIGgsIERXT1JEICogbW9kZSk7Ci1VSU5UIFdJTkFQSSBHZXRDb25zb2xlT3V0cHV0Q1AgKFZPSUQpOwotQk9PTCBXSU5BUEkgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gKEhBTkRMRSBoLCBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyAqCi0JCQkJCXB0cik7Ci0KLURXT1JEIFdJTkFQSSBHZXRDb25zb2xlVGl0bGVBIChMUFNUUiBzdHIsIERXT1JEIGxlbik7Ci0KLQotQ09PUkQgV0lOQVBJIEdldExhcmdlc3RDb25zb2xlV2luZG93U2l6ZSAoSEFORExFIGgpOwotCi1CT09MIFdJTkFQSSBHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyAoSEFORExFIGgsCi0JCQkJCSAgIERXT1JEICogbik7Ci0KLUJPT0wgV0lOQVBJIEdldE51bWJlck9mQ29uc29sZU1vdXNlQnV0dG9ucyAoRFdPUkQgKiBuKTsKLQotQk9PTCBXSU5BUEkgUGVla0NvbnNvbGVJbnB1dEEgKEhBTkRMRSBoLAotCQkJICAgICAgIElOUFVUX1JFQ09SRCAqIHB0ciwKLQkJCSAgICAgICBEV09SRCBsZW4sCi0JCQkgICAgICAgRFdPUkQgKiBkb25lKTsKLQotCi0KLUJPT0wgV0lOQVBJIFJlYWRDb25zb2xlQSAoSEFORExFIGgsCi0JCQkgIFZPSUQgKiBwdHIsCi0JCQkgIERXT1JEIGxlbiwKLQkJCSAgRFdPUkQgKiBkb25lLAotCQkJICBWT0lEICogcmVzKTsKLQotQk9PTCBXSU5BUEkgUmVhZENvbnNvbGVJbnB1dEEgKEhBTkRMRSBoLAotCQkJICAgICAgIElOUFVUX1JFQ09SRCAqIHB0ciwKLQkJCSAgICAgICBEV09SRCBsZW4sCi0JCQkgICAgICAgRFdPUkQgKiBkb25lKTsKLQotQk9PTCBXSU5BUEkgUmVhZENvbnNvbGVPdXRwdXRBIChIQU5ETEUgaCwKLQkJCQlDSEFSX0lORk8gKiBwdHIsCi0JCQkJQ09PUkQgc2l6ZSwKLQkJCQlDT09SRCBmcmVkLAotCQkJCVNNQUxMX1JFQ1QgKiByZWcpOwotCi1CT09MIFdJTkFQSSBSZWFkQ29uc29sZU91dHB1dEF0dHJpYnV0ZSAoSEFORExFIGgsCi0JCQkJCVdPUkQgKiBhdHRyLAotCQkJCQlEV09SRCBsZW4sCi0JCQkJCUNPT1JEIHJjLAotCQkJCQlEV09SRCAqIGRvbmUpOwotCi1CT09MIFdJTkFQSSBSZWFkQ29uc29sZU91dHB1dENoYXJhY3RlckEgKEhBTkRMRSBoLAotCQkJCQkgTFBTVFIgYywKLQkJCQkJIERXT1JEIGxlbiwKLQkJCQkJIENPT1JEIHJjLAotCQkJCQkgRFdPUkQgKiBkb25lKTsKLQotQk9PTCBXSU5BUEkgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlckEgKEhBTkRMRSBoLAotCQkJCQlDT05TVCBTTUFMTF9SRUNUICogc3IsCi0JCQkJCUNPTlNUIFNNQUxMX1JFQ1QgKiBjciwKLQkJCQkJQ09PUkQgY3BvcywKLQkJCQkJQ09OU1QgQ0hBUl9JTkZPICogaSk7Ci0KLQotQk9PTCBXSU5BUEkgU2V0Q29uc29sZUFjdGl2ZVNjcmVlbkJ1ZmZlciAoSEFORExFIGgpOwotQk9PTCBXSU5BUEkgU2V0Q29uc29sZUNQIChVSU5UIGkpOwotQk9PTCBXSU5BUEkgU2V0Q29uc29sZUN0cmxIYW5kbGVyIChIQU5ETEVSX1JPVVRJTkUgKiBmdW5jLCAgQk9PTCBhKTsKLQotQk9PTCBXSU5BUEkgU2V0Q29uc29sZUN1cnNvckluZm8gKEhBTkRMRSBoLCAgQ09OU1QgQ09OU09MRV9DVVJTT1JfSU5GTyAqIGluZm8pOwotCi1CT09MIFdJTkFQSSBTZXRDb25zb2xlQ3Vyc29yUG9zaXRpb24gKEhBTkRMRSBoLCBDT09SRCBwb3MpOwotCi1CT09MIFdJTkFQSSBTZXRDb25zb2xlTW9kZSAoSEFORExFIGgsIERXT1JEIG1vZGUpOwotCi1CT09MIFdJTkFQSSBTZXRDb25zb2xlT3V0cHV0Q1AgKFVJTlQgaSk7Ci1CT09MIFdJTkFQSSBTZXRDb25zb2xlU2NyZWVuQnVmZmVyU2l6ZSAoSEFORExFIGgsIENPT1JEIHNpemUpOwotQk9PTCBXSU5BUEkgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUgKEhBTkRMRSBoLAotCQkJCSAgICAgV09SRCBhdHRycyk7Ci1CT09MIFdJTkFQSSBTZXRDb25zb2xlVGl0bGVBIChjb25zdCBjaGFyICogc3RyKTsKLQotQk9PTCBXSU5BUEkgU2V0Q29uc29sZVdpbmRvd0luZm8gKEhBTkRMRSBoLAotCQkJCSAgQk9PTCBhYnMsIAotCQkJCSAgQ09OU1QgU01BTExfUkVDVCAqIHduZCk7Ci0KLUJPT0wgV0lOQVBJIFdyaXRlQ29uc29sZUEgKEhBTkRMRSBoLCAKLQkJCSAgIENPTlNUIFZPSUQgKiAgIHB0ciwKLQkJCSAgIERXT1JEIHNsZW4sCi0JCQkgICBEV09SRCAqIGRvbmUsCi0JCQkgICBWT0lEICogcmVzKTsKLQotQk9PTCBXSU5BUEkgV3JpdGVDb25zb2xlSW5wdXRBIChIQU5ETEUJaCwgCi0JCQkJQ09OU1QgSU5QVVRfUkVDT1JEICogcHRyLAotCQkJCURXT1JEIGxlbiwgCi0JCQkJRFdPUkQgKiBkb25lKTsKLQotQk9PTCBXSU5BUEkgV3JpdGVDb25zb2xlT3V0cHV0QSAoSEFORExFICBoLAotCQkJCSBDT05TVCBDSEFSX0lORk8gKiBwdHIsCi0JCQkJIENPT1JEIHNpemUsIAotCQkJCSBDT09SRCBmcmVkLCAKLQkJCQkgU01BTExfUkVDVCogd2hlcmUpOwotCi1CT09MIFdJTkFQSSBXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUgKEhBTkRMRSBoLAotCQkJCQkgQ09OU1QgV09SRCAqYXR0ciwKLQkJCQkJIERXT1JEIGxlbiwKLQkJCQkJIENPT1JEIGNvLAotCQkJCQkgRFdPUkQgKiBkb25lKTsKLQotQk9PTCBXSU5BUEkgV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQSAoSEFORExFIGgsCi0JCQkJCSAgY29uc3QgY2hhciAqIGMsCi0JCQkJCSAgRFdPUkQgbGVuLAotCQkJCQkgIENPT1JEIGNvLAotCQkJCQkgIERXT1JEICogZG9uZSk7CitIQU5ETEUgQ3JlYXRlQ29uc29sZVNjcmVlbkJ1ZmZlciAoRFdPUkQgYWNjZXNzLCBEV09SRCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUIFNFQ1VSSVRZX0FUVFJJQlVURVMgKiBsYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBmbGFncywgVk9JRCAqIHB0cik7CitCT09MIEZpbGxDb25zb2xlT3V0cHV0QXR0cmlidXRlIChIQU5ETEUgaCwgV09SRCBhdHRyLCBEV09SRCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT09SRCBjbywgRFdPUkQgKiBkb25lKTsKK0JPT0wgRmlsbENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBIChIQU5ETEUgaCwgQ0hBUiBjLCBEV09SRCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09PUkQgY28sIERXT1JEICogZG9uZSk7CitCT09MIEZsdXNoQnVmZmVyIChIQU5ETEUgaCk7CitCT09MIEZyZWVDb25zb2xlIChWT0lEKTsKK0JPT0wgR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50IChEV09SRCAgZXYsICAgIERXT1JEIGdyb3VwKTsKK1VJTlQgR2V0Q29uc29sZUNQIChWT0lEKTsKK0JPT0wgR2V0Q29uc29sZUN1cnNvckluZm8gKEhBTkRMRSBoLCBDT05TT0xFX0NVUlNPUl9JTkZPICppbmZvKTsKK0JPT0wgR2V0Q29uc29sZU1vZGUgKEhBTkRMRSBoLCBEV09SRCAqIG1vZGUpOworVUlOVCBHZXRDb25zb2xlT3V0cHV0Q1AgKFZPSUQpOworQk9PTCBHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyAoSEFORExFIGgsIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPICogcHRyKTsKK0RXT1JEIEdldENvbnNvbGVUaXRsZUEgKExQU1RSIHN0ciwgRFdPUkQgbGVuKTsKK0NPT1JEIEdldExhcmdlc3RDb25zb2xlV2luZG93U2l6ZSAoSEFORExFIGgpOworQk9PTCBHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyAoSEFORExFIGgsIERXT1JEICogbik7CitCT09MIEdldE51bWJlck9mQ29uc29sZU1vdXNlQnV0dG9ucyAoRFdPUkQgKiBuKTsKK0JPT0wgUGVla0NvbnNvbGVJbnB1dEEgKEhBTkRMRSBoLCBJTlBVVF9SRUNPUkQgKiBwdHIsIERXT1JEIGxlbiwgRFdPUkQgKiBkb25lKTsKK0JPT0wgUmVhZENvbnNvbGVBIChIQU5ETEUgaCwgVk9JRCAqIHB0ciwgRFdPUkQgbGVuLCBEV09SRCAqIGRvbmUsIFZPSUQgKiByZXMpOworQk9PTCBSZWFkQ29uc29sZUlucHV0QSAoSEFORExFIGgsIElOUFVUX1JFQ09SRCAqIHB0ciwgRFdPUkQgbGVuLCBEV09SRCAqIGRvbmUpOworQk9PTCBSZWFkQ29uc29sZU91dHB1dEEgKEhBTkRMRSBoLCBDSEFSX0lORk8gKiBwdHIsIENPT1JEIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ09PUkQgZnJlZCwgU01BTExfUkVDVCAqIHJlZyk7CitCT09MIFJlYWRDb25zb2xlT3V0cHV0QXR0cmlidXRlIChIQU5ETEUgaCwgV09SRCAqIGF0dHIsIERXT1JEIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPT1JEIHJjLCBEV09SRCAqIGRvbmUpOworQk9PTCBSZWFkQ29uc29sZU91dHB1dENoYXJhY3RlckEgKEhBTkRMRSBoLCBMUFNUUiBjLCBEV09SRCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09PUkQgcmMsIERXT1JEICogZG9uZSk7CitCT09MIFNjcm9sbENvbnNvbGVTY3JlZW5CdWZmZXJBIChIQU5ETEUgaCwgQ09OU1QgU01BTExfUkVDVCAqIHNyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1QgU01BTExfUkVDVCAqIGNyLCBDT09SRCBjcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OU1QgQ0hBUl9JTkZPICogaSk7CitCT09MIFNldENvbnNvbGVBY3RpdmVTY3JlZW5CdWZmZXIgKEhBTkRMRSBoKTsKK0JPT0wgU2V0Q29uc29sZUNQIChVSU5UIGkpOworQk9PTCBTZXRDb25zb2xlQ3RybEhhbmRsZXIgKEhBTkRMRVJfUk9VVElORSAqIGZ1bmMsICBCT09MIGEpOworQk9PTCBTZXRDb25zb2xlQ3Vyc29ySW5mbyAoSEFORExFIGgsICBDT05TVCBDT05TT0xFX0NVUlNPUl9JTkZPICogaW5mbyk7CitCT09MIFNldENvbnNvbGVDdXJzb3JQb3NpdGlvbiAoSEFORExFIGgsIENPT1JEIHBvcyk7CitCT09MIFNldENvbnNvbGVNb2RlIChIQU5ETEUgaCwgRFdPUkQgbW9kZSk7CitCT09MIFNldENvbnNvbGVPdXRwdXRDUCAoVUlOVCBpKTsKK0JPT0wgU2V0Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUgKEhBTkRMRSBoLCBDT09SRCBzaXplKTsKK0JPT0wgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUgKEhBTkRMRSBoLCBXT1JEIGF0dHJzKTsKK0JPT0wgU2V0Q29uc29sZVRpdGxlQSAoY29uc3QgY2hhciAqIHN0cik7CitCT09MIFNldENvbnNvbGVXaW5kb3dJbmZvIChIQU5ETEUgaCwgQk9PTCBhYnMsIENPTlNUIFNNQUxMX1JFQ1QgKiB3bmQpOworQk9PTCBXcml0ZUNvbnNvbGVBIChIQU5ETEUgaCwgQ09OU1QgVk9JRCAqICAgcHRyLCBEV09SRCBzbGVuLAorICAgICAgICAgICAgICAgICAgICBEV09SRCAqIGRvbmUsIFZPSUQgKiByZXMpOworQk9PTCBXcml0ZUNvbnNvbGVJbnB1dEEgKEhBTkRMRQloLCBDT05TVCBJTlBVVF9SRUNPUkQgKiBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgbGVuLCBEV09SRCAqIGRvbmUpOworQk9PTCBXcml0ZUNvbnNvbGVPdXRwdXRBIChIQU5ETEUgIGgsIENPTlNUIENIQVJfSU5GTyAqIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ09PUkQgc2l6ZSwgQ09PUkQgZnJlZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNNQUxMX1JFQ1QqIHdoZXJlKTsKK0JPT0wgV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlIChIQU5ETEUgaCwgQ09OU1QgV09SRCAqYXR0ciwgRFdPUkQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPT1JEIGNvLCBEV09SRCAqIGRvbmUpOworQk9PTCBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBIChIQU5ETEUgaCwgY29uc3QgY2hhciAqIGMsIERXT1JEIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09PUkQgY28sIERXT1JEICogZG9uZSk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbmRvd3MuaCBiL2luY2x1ZGUvd2luZG93cy5oCmluZGV4IDNhMGZmNzguLmQ0OGNkNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2luZG93cy5oCisrKyBiL2luY2x1ZGUvd2luZG93cy5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBXSU5ET1dTX0gKIAogI2luY2x1ZGUgIndpbnR5cGVzLmgiCisjaW5jbHVkZSAid2ludXNlci5oIgogCiAjaWZuZGVmIFdJTkVMSUIKICNwcmFnbWEgcGFjaygxKQpAQCAtNDIsNDcgKzQzLDYgQEAKIHR5cGVkZWYgUEFJTlRTVFJVQ1QgKk5QUEFJTlRTVFJVQ1Q7CiB0eXBlZGVmIFBBSU5UU1RSVUNUICpMUFBBSU5UU1RSVUNUOwogCi0KLSAgLyogV2luZG93IGNsYXNzZXMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCVdPUkQJc3R5bGU7Ci0JV05EUFJPQwlscGZuV25kUHJvYyBXSU5FX1BBQ0tFRDsKLQlJTlQJY2JDbHNFeHRyYSwgY2JXbmRFeHRyYTsKLQlIQU5ETEUJaEluc3RhbmNlOwotCUhJQ09OCWhJY29uOwotCUhDVVJTT1IJaEN1cnNvcjsKLQlIQlJVU0gJaGJyQmFja2dyb3VuZDsKLQlTRUdQVFIgIGxwc3pNZW51TmFtZSBXSU5FX1BBQ0tFRDsKLQlTRUdQVFIgIGxwc3pDbGFzc05hbWUgV0lORV9QQUNLRUQ7Ci19IFdORENMQVNTLCAqTFBXTkRDTEFTUzsKLQotI2RlZmluZSBDU19WUkVEUkFXICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBDU19IUkVEUkFXICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBDU19LRVlDVlRXSU5ET1cgICAgIDB4MDAwNAotI2RlZmluZSBDU19EQkxDTEtTICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBDU19PV05EQyAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBDU19DTEFTU0RDICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBDU19QQVJFTlREQyAgICAgICAgIDB4MDA4MAotI2RlZmluZSBDU19OT0tFWUNWVCAgICAgICAgIDB4MDEwMAotI2RlZmluZSBDU19OT0NMT1NFICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBDU19TQVZFQklUUyAgICAgICAgIDB4MDgwMAotI2RlZmluZSBDU19CWVRFQUxJR05DTElFTlQgIDB4MTAwMAotI2RlZmluZSBDU19CWVRFQUxJR05XSU5ET1cgIDB4MjAwMAotI2RlZmluZSBDU19HTE9CQUxDTEFTUyAgICAgIDB4NDAwMAotCi0gIC8qIE9mZnNldHMgZm9yIEdldENsYXNzTG9uZygpIGFuZCBHZXRDbGFzc1dvcmQoKSAqLwotI2RlZmluZSBHQ0xfTUVOVU5BTUUgICAgICAgICgtOCkKLSNkZWZpbmUgR0NXX0hCUkJBQ0tHUk9VTkQgICAoLTEwKQotI2RlZmluZSBHQ1dfSENVUlNPUiAgICAgICAgICgtMTIpCi0jZGVmaW5lIEdDV19ISUNPTiAgICAgICAgICAgKC0xNCkKLSNkZWZpbmUgR0NXX0hNT0RVTEUgICAgICAgICAoLTE2KQotI2RlZmluZSBHQ1dfQ0JXTkRFWFRSQSAgICAgICgtMTgpCi0jZGVmaW5lIEdDV19DQkNMU0VYVFJBICAgICAgKC0yMCkKLSNkZWZpbmUgR0NMX1dORFBST0MgICAgICAgICAoLTI0KQotI2RlZmluZSBHQ1dfU1RZTEUgICAgICAgICAgICgtMjYpCi0jZGVmaW5lIEdDV19BVE9NICAgICAgICAgICAgKC0zMikKLQogICAvKiBXaW5kb3dzICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTIwNiw4ICsxNjYsOCBAQAogICAvKiBXTV9OQ0NBTENTSVpFIHBhcmFtZXRlciBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gICAgUkVDVAkgICByZ3JjWzNdOwotICAgIFdJTkRPV1BPUyBGQVIqIGxwcG9zOworICAgIFJFQ1QgICAgcmdyY1szXTsKKyAgICBTRUdQVFIgIGxwcG9zOwogfSBOQ0NBTENTSVpFX1BBUkFNUzsKIAogICAvKiBXTV9OQ0NBTENTSVpFIHJldHVybiBmbGFncyAqLwpAQCAtNDIzLDggKzM4Myw2IEBACiAgIFBPSU5UCSAgcHQgV0lORV9QQUNLRUQ7CiB9IE1TRywgKkxQTVNHOwogCQotdHlwZWRlZiBXT1JEIEFUT007Ci0KICNkZWZpbmUgTUFLRUlOVEFUT00oaSkgICAoKFNFR1BUUilNQUtFTE9ORygoaSksMCkpCiAKICAgLyogUmFzdGVyIG9wZXJhdGlvbnMgKi8KQEAgLTEyMjQsOCArMTE4Miw3IEBACiAgICAgY2hhciBFb2ZDaGFyOwogICAgIGNoYXIgRXZ0Q2hhcjsKICAgICBVSU5UIFR4RGVsYXkgV0lORV9QQUNLRUQ7Ci19IERDQjsKLXR5cGVkZWYgRENCIEZBUiogTFBEQ0I7Cit9IERDQiwgKkxQRENCOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdDT01TVEFUCiB7CkBAIC0xNDQzLDcgKzE0MDAsNyBAQAogCUhBTkRMRSAgaE9mU3RydWN0OwogCVBPSU5UCXB0IFdJTkVfUEFDS0VEOwogCUxPTkcJbCAgV0lORV9QQUNLRUQ7Ci19CURSQUdJTkZPLCBGQVIqIExQRFJBR0lORk87Cit9IERSQUdJTkZPLCAqTFBEUkFHSU5GTzsKIAogI2RlZmluZSBEUkFHT0JKX1BST0dSQU0JCTB4MDAwMQogI2RlZmluZSBEUkFHT0JKX0RBVEEJCTB4MDAwMgpAQCAtMTg3Nyw2ICsxODM0LDExIEBACiAjZGVmaW5lIFNXX0lOVkFMSURBVEUgICAgICAgICAgMHgwMDAyCiAjZGVmaW5lIFNXX0VSQVNFICAgICAgICAgICAgICAgMHgwMDAzCiAKKy8qIENyZWF0ZVdpbmRvdygpIGNvb3JkaW5hdGVzICovCisjZGVmaW5lIENXX1VTRURFRkFVTFQxNiAoKElOVDE2KTB4ODAwMCkKKyNkZWZpbmUgQ1dfVVNFREVGQVVMVDMyICgoSU5UMzIpMHg4MDAwMDAwMCkKKyNkZWZpbmUgQ1dfVVNFREVGQVVMVCAgIFdJTkVMSUJfTkFNRShDV19VU0VERUZBVUxUKQorCiAvKiBCdXR0b24gY29udHJvbCBzdHlsZXMgKi8KICNkZWZpbmUgQlNfUFVTSEJVVFRPTiAgICAgICAgICAweDAwMDAwMDAwTAogI2RlZmluZSBCU19ERUZQVVNIQlVUVE9OICAgICAgIDB4MDAwMDAwMDFMCkBAIC0yMTYzLDkgKzIxMjUsNiBAQAogI2RlZmluZSBFTV9TQ1JPTEwgICAgICAgICAgICAgIChXTV9VU0VSKzUpCiAjZGVmaW5lIEVNX0dFVFRIVU1CICAgICAgICAgICAgKFdNX1VTRVIrMTQpCiAKLXR5cGVkZWYgaW50IChDQUxMQkFDSyAqRURJVFdPUkRCUkVBS1BST0MpKExQU1RSIGxwY2gsIGludCBpY2hDdXJyZW50LAotCQkJCQkgIGludCBjY2gsIGludCBjb2RlKTsKLQogLyogRURJVFdPUkRCUkVBS1BST0MgY29kZSB2YWx1ZXMgKi8KICNkZWZpbmUgV0JfTEVGVCAgICAgICAgIDAKICNkZWZpbmUgV0JfUklHSFQgICAgICAgIDEKQEAgLTIxOTMsOSArMjE1Miw3IEBACiAgICAgSERDICAgICAgICAgaERDOwogICAgIFJFQ1QgICAgICAgIHJjSXRlbSBXSU5FX1BBQ0tFRDsKICAgICBEV09SRCAgICAgICBpdGVtRGF0YSBXSU5FX1BBQ0tFRDsKLX0gRFJBV0lURU1TVFJVQ1Q7Ci10eXBlZGVmIERSQVdJVEVNU1RSVUNUIE5FQVIqIFBEUkFXSVRFTVNUUlVDVDsKLXR5cGVkZWYgRFJBV0lURU1TVFJVQ1QgRkFSKiBMUERSQVdJVEVNU1RSVUNUOworfSBEUkFXSVRFTVNUUlVDVCwgKlBEUkFXSVRFTVNUUlVDVCwgKkxQRFJBV0lURU1TVFJVQ1Q7CiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0yMjA1LDkgKzIxNjIsNyBAQAogICAgIFVJTlQgICAgICAgIGl0ZW1XaWR0aDsKICAgICBVSU5UICAgICAgICBpdGVtSGVpZ2h0OwogICAgIERXT1JEICAgICAgIGl0ZW1EYXRhIFdJTkVfUEFDS0VEOwotfSBNRUFTVVJFSVRFTVNUUlVDVDsKLXR5cGVkZWYgTUVBU1VSRUlURU1TVFJVQ1QgTkVBUiogUE1FQVNVUkVJVEVNU1RSVUNUOwotdHlwZWRlZiBNRUFTVVJFSVRFTVNUUlVDVCBGQVIqIExQTUVBU1VSRUlURU1TVFJVQ1Q7Cit9IE1FQVNVUkVJVEVNU1RSVUNULCAqUE1FQVNVUkVJVEVNU1RSVUNULCAqTFBNRUFTVVJFSVRFTVNUUlVDVDsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTIyMTYsOSArMjE3MSw3IEBACiAgICAgVUlOVCAgICAgICBpdGVtSUQ7CiAgICAgSFdORCAgICAgICBod25kSXRlbTsKICAgICBEV09SRCAgICAgIGl0ZW1EYXRhOwotfSBERUxFVEVJVEVNU1RSVUNUOwotdHlwZWRlZiBERUxFVEVJVEVNU1RSVUNUIE5FQVIqIFBERUxFVEVJVEVNU1RSVUNUOwotdHlwZWRlZiBERUxFVEVJVEVNU1RSVUNUIEZBUiogTFBERUxFVEVJVEVNU1RSVUNUOworfSBERUxFVEVJVEVNU1RSVUNULCAqUERFTEVURUlURU1TVFJVQ1QsICpMUERFTEVURUlURU1TVFJVQ1Q7CiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0yMjI5LDkgKzIxODIsNyBAQAogICAgIERXT1JEICAgICAgIGl0ZW1EYXRhMTsKICAgICBVSU5UICAgICAgICBpdGVtSUQyOwogICAgIERXT1JEICAgICAgIGl0ZW1EYXRhMiBXSU5FX1BBQ0tFRDsKLX0gQ09NUEFSRUlURU1TVFJVQ1Q7Ci10eXBlZGVmIENPTVBBUkVJVEVNU1RSVUNUIE5FQVIqIFBDT01QQVJFSVRFTVNUUlVDVDsKLXR5cGVkZWYgQ09NUEFSRUlURU1TVFJVQ1QgRkFSKiBMUENPTVBBUkVJVEVNU1RSVUNUOworfSBDT01QQVJFSVRFTVNUUlVDVCwgKlBDT01QQVJFSVRFTVNUUlVDVCwgKkxQQ09NUEFSRUlURU1TVFJVQ1Q7CiAKIC8qIFdNX0tFWVVQL0RPV04vQ0hBUiBISVdPUkQobFBhcmFtKSBmbGFncyAqLwogI2RlZmluZSBLRl9FWFRFTkRFRCAgICAgICAgIDB4MDEwMApAQCAtMjM0MCw2ICsyMjkxLDcgQEAKICNkZWZpbmUgR01FTV9MT1dFUiAgICAgICAgICBHTUVNX05PVF9CQU5LRUQKICNkZWZpbmUgR01FTV9ESVNDQVJERUQgICAgICAweDQwMDAKICNkZWZpbmUgR01FTV9MT0NLQ09VTlQgICAgICAweDAwZmYKKyNkZWZpbmUgR01FTV9JTlZBTElEX0hBTkRMRSAweDgwMDAKIAogI2RlZmluZSBHSE5EICAgICAgICAgICAgICAgIChHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCkKICNkZWZpbmUgR1BUUiAgICAgICAgICAgICAgICAoR01FTV9GSVhFRCB8IEdNRU1fWkVST0lOSVQpCkBAIC0yNjE2LDcgKzI1NjgsNyBAQAogI2RlZmluZSBIRUxQX1NFVFdJTlBPUyAgICAgIDB4MDIwMwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIFRDSEFSICBkbURldmljZU5hbWVbMzJdOworICAgICAgICBDSEFSICAgZG1EZXZpY2VOYW1lWzMyXTsKICAgICAgICAgV09SRCAgIGRtU3BlY1ZlcnNpb247CiAgICAgICAgIFdPUkQgICBkbURyaXZlclZlcnNpb247CiAgICAgICAgIFdPUkQgICBkbVNpemU7CkBAIC0yNjM1LDcgKzI1ODcsNyBAQAogICAgICAgICBzaG9ydCAgZG1ZUmVzb2x1dGlvbjsKICAgICAgICAgc2hvcnQgIGRtVFRPcHRpb247CiAgICAgICAgIHNob3J0ICBkbUNvbGxhdGU7Ci0gICAgICAgIFRDSEFSICBkbUZvcm1OYW1lWzMyXTsKKyAgICAgICAgQ0hBUiAgIGRtRm9ybU5hbWVbMzJdOwogICAgICAgICBXT1JEICAgZG1VbnVzZWRQYWRkaW5nOwogICAgICAgICBXT1JEICAgZG1CaXRzUGVyUGVsOwogICAgICAgICBEV09SRCAgZG1QZWxzV2lkdGg7CkBAIC0yNzE4LDcgKzI2NzAsNyBAQAogSERDICAgICAgICBDcmVhdGVDb21wYXRpYmxlREMoSERDKTsKIEhDVVJTT1IgICAgQ3JlYXRlQ3Vyc29yKEhBTkRMRSxJTlQsSU5ULElOVCxJTlQsY29uc3QgQllURSosY29uc3QgQllURSopOwogSEFORExFICAgICBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3QoSEFORExFLENVUlNPUklDT05JTkZPKixjb25zdCBCWVRFKixjb25zdCBCWVRFKik7Ci1IREMgICAgICAgIENyZWF0ZURDKExQQ1RTVFIsTFBDVFNUUixMUENUU1RSLGNvbnN0IERFVk1PREUqKTsKK0hEQyAgICAgICAgQ3JlYXRlREMoTFBDU1RSLExQQ1NUUixMUENTVFIsY29uc3QgREVWTU9ERSopOwogSEJSVVNIICAgICBDcmVhdGVESUJQYXR0ZXJuQnJ1c2goSEdMT0JBTCxVSU5UKTsKIEhCSVRNQVAgICAgQ3JlYXRlRElCaXRtYXAoSERDLEJJVE1BUElORk9IRUFERVIqLERXT1JELExQVk9JRCxCSVRNQVBJTkZPKixVSU5UKTsKIEhXTkQgICAgICAgQ3JlYXRlRGlhbG9nKEhJTlNUQU5DRSxTRUdQVFIsSFdORCxETEdQUk9DKTsKQEAgLTI3MzEsMjMgKzI2ODMsMjEgQEAKIEhGT05UICAgICAgQ3JlYXRlRm9udChJTlQsSU5ULElOVCxJTlQsSU5ULEJZVEUsQllURSxCWVRFLEJZVEUsQllURSxCWVRFLEJZVEUsQllURSxMUENTVFIpOwogSEZPTlQgICAgICBDcmVhdGVGb250SW5kaXJlY3QoY29uc3QgTE9HRk9OVCopOwogSEJSVVNIICAgICBDcmVhdGVIYXRjaEJydXNoKElOVCxDT0xPUlJFRik7Ci1IREMgICAgICAgIENyZWF0ZUlDKExQQ1RTVFIsTFBDVFNUUixMUENUU1RSLGNvbnN0IERFVk1PREUqKTsKK0hEQyAgICAgICAgQ3JlYXRlSUMoTFBDU1RSLExQQ1NUUixMUENTVFIsY29uc3QgREVWTU9ERSopOwogSElDT04gICAgICBDcmVhdGVJY29uKEhJTlNUQU5DRSxJTlQsSU5ULEJZVEUsQllURSxjb25zdCBCWVRFKixjb25zdCBCWVRFKik7CiBITUVOVSAgICAgIENyZWF0ZU1lbnUodm9pZCk7Ci1IREMgICAgICAgIENyZWF0ZU1ldGFGaWxlKExQQ1RTVFIpOworSERDICAgICAgICBDcmVhdGVNZXRhRmlsZShMUENTVFIpOwogSFBBTEVUVEUgICBDcmVhdGVQYWxldHRlKGNvbnN0IExPR1BBTEVUVEUqKTsKIEhCUlVTSCAgICAgQ3JlYXRlUGF0dGVybkJydXNoKEhCSVRNQVApOwogSFBFTiAgICAgICBDcmVhdGVQZW4oSU5ULElOVCxDT0xPUlJFRik7CiBIUEVOICAgICAgIENyZWF0ZVBlbkluZGlyZWN0KGNvbnN0IExPR1BFTiopOwotSFJHTiAgICAgICBDcmVhdGVQb2x5UG9seWdvblJnbihjb25zdCBQT0lOVCosY29uc3QgSU5UKixJTlQsSU5UKTsKK0hSR04gICAgICAgQ3JlYXRlUG9seVBvbHlnb25SZ24oY29uc3QgUE9JTlQqLGNvbnN0IElOVDE2KixJTlQsSU5UKTsKIEhSR04gICAgICAgQ3JlYXRlUG9seWdvblJnbihjb25zdCBQT0lOVCosSU5ULElOVCk7CiBITUVOVSAgICAgIENyZWF0ZVBvcHVwTWVudSh2b2lkKTsKIEhSR04gICAgICAgQ3JlYXRlUmVjdFJnbihJTlQsSU5ULElOVCxJTlQpOwogSFJHTiAgICAgICBDcmVhdGVSZWN0UmduSW5kaXJlY3QoY29uc3QgUkVDVCopOwogSFJHTiAgICAgICBDcmVhdGVSb3VuZFJlY3RSZ24oSU5ULElOVCxJTlQsSU5ULElOVCxJTlQpOwogSEJSVVNIICAgICBDcmVhdGVTb2xpZEJydXNoKENPTE9SUkVGKTsKLUhXTkQgICAgICAgQ3JlYXRlV2luZG93KFNFR1BUUixTRUdQVFIsRFdPUkQsSU5ULElOVCxJTlQsSU5ULEhXTkQsSE1FTlUsSElOU1RBTkNFLFNFR1BUUik7Ci1IV05EICAgICAgIENyZWF0ZVdpbmRvd0V4KERXT1JELFNFR1BUUixTRUdQVFIsRFdPUkQsSU5ULElOVCxJTlQsSU5ULEhXTkQsSE1FTlUsSElOU1RBTkNFLFNFR1BUUik7CiBCT09MICAgICAgIERQdG9MUChIREMsTFBQT0lOVCxJTlQpOwogdm9pZCAgICAgICBEZWJ1Z0JyZWFrKHZvaWQpOwogTFJFU1VMVCAgICBEZWZEbGdQcm9jKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsKQEAgLTI3ODIsNyArMjczMiw3IEBACiB2b2lkICAgICAgIERyYXdGb2N1c1JlY3QoSERDLGNvbnN0IFJFQ1QqKTsKIEJPT0wgICAgICAgRHJhd0ljb24oSERDLElOVCxJTlQsSElDT04pOwogdm9pZCAgICAgICBEcmF3TWVudUJhcihIV05EKTsKLUlOVCAgICAgICAgRHJhd1RleHQoSERDLExQQ1RTVFIsSU5ULExQUkVDVCxVSU5UKTsKK0lOVCAgICAgICAgRHJhd1RleHQoSERDLExQQ1NUUixJTlQsTFBSRUNULFVJTlQpOwogRFdPUkQgICAgICBEdW1wSWNvbihTRUdQVFIsV09SRCosU0VHUFRSKixTRUdQVFIqKTsKIEJPT0wgICAgICAgRWxsaXBzZShIREMsSU5ULElOVCxJTlQsSU5UKTsKIEJPT0wgICAgICAgRW1wdHlDbGlwYm9hcmQodm9pZCk7CkBAIC0yNzk1LDggKzI3NDUsOCBAQAogQk9PTCAgICAgICBFbmRQYWludChIV05ELGNvbnN0IFBBSU5UU1RSVUNUKik7CiBCT09MICAgICAgIEVudW1DaGlsZFdpbmRvd3MoSFdORCxXTkRFTlVNUFJPQyxMUEFSQU0pOwogVUlOVCAgICAgICBFbnVtQ2xpcGJvYXJkRm9ybWF0cyhVSU5UKTsKLUlOVCAgICAgICAgRW51bUZvbnRGYW1pbGllcyhIREMsTFBDVFNUUixGT05URU5VTVBST0MsTFBBUkFNKTsKLUlOVCAgICAgICAgRW51bUZvbnRzKEhEQyxMUENUU1RSLEZPTlRFTlVNUFJPQyxMUEFSQU0pOworSU5UICAgICAgICBFbnVtRm9udEZhbWlsaWVzKEhEQyxMUENTVFIsRk9OVEVOVU1QUk9DLExQQVJBTSk7CitJTlQgICAgICAgIEVudW1Gb250cyhIREMsTFBDU1RSLEZPTlRFTlVNUFJPQyxMUEFSQU0pOwogQk9PTCAgICAgICBFbnVtTWV0YUZpbGUoSERDLEhNRVRBRklMRSxNRkVOVU1QUk9DLExQQVJBTSk7CiBJTlQgICAgICAgIEVudW1PYmplY3RzKEhEQyxJTlQsR09CSkVOVU1QUk9DLExQQVJBTSk7CiBJTlQgICAgICAgIEVudW1Qcm9wcyhIV05ELFBST1BFTlVNUFJPQyk7CkBAIC0yODExLDcgKzI3NjEsNyBAQAogaW50ICAgICAgICBFeGNsdWRlVmlzUmVjdChIREMsc2hvcnQsc2hvcnQsc2hvcnQsc2hvcnQpOwogQk9PTCAgICAgICBFeGl0V2luZG93cyhEV09SRCxXT1JEKTsKIEJPT0wgICAgICAgRXh0Rmxvb2RGaWxsKEhEQyxJTlQsSU5ULENPTE9SUkVGLFdPUkQpOwotQk9PTCAgICAgICBFeHRUZXh0T3V0KEhEQyxzaG9ydCxzaG9ydCxXT1JELExQUkVDVCxMUFNUUixXT1JELExQSU5UKTsKK0JPT0wgICAgICAgRXh0VGV4dE91dChIREMsc2hvcnQsc2hvcnQsV09SRCxMUFJFQ1QsTFBTVFIsV09SRCxMUElOVDE2KTsKIEhJQ09OICAgICAgRXh0cmFjdEljb24oSElOU1RBTkNFLExQQ1NUUixXT1JEKTsKIFdPUkQgICAgICAgRmFyR2V0T3duZXIoSEFORExFKTsKIHZvaWQgICAgICAgRmFyU2V0T3duZXIoSEFORExFLEhBTkRMRSk7CkBAIC0yODI0LDYgKzI3NzQsNyBAQAogSElOU1RBTkNFICBGaW5kRXhlY3V0YWJsZShMUENTVFIsTFBDU1RSLExQU1RSKTsKIEhSU1JDICAgICAgRmluZFJlc291cmNlKEhJTlNUQU5DRSxTRUdQVFIsU0VHUFRSKTsKIEhXTkQgICAgICAgRmluZFdpbmRvdyhTRUdQVFIsTFBTVFIpOworSFdORCAgICAgICBGaW5kV2luZG93RXgoSFdORCxIV05ELFNFR1BUUixMUFNUUik7CiBCT09MICAgICAgIEZsYXNoV2luZG93KEhXTkQsQk9PTCk7CiBCT09MICAgICAgIEZsb29kRmlsbChIREMsSU5ULElOVCxDT0xPUlJFRik7CiBpbnQgICAgICAgIEZsdXNoQ29tbShpbnQsaW50KTsKQEAgLTI4NTIsMTAgKzI4MDMsNyBAQAogV09SRCAgICAgICBHZXRDYXJldEJsaW5rVGltZSh2b2lkKTsKIHZvaWQgICAgICAgR2V0Q2FyZXRQb3MoTFBQT0lOVCk7CiBCT09MICAgICAgIEdldENoYXJBQkNXaWR0aHMoSERDLFVJTlQsVUlOVCxMUEFCQyk7Ci1CT09MICAgICAgIEdldENoYXJXaWR0aChIREMsV09SRCxXT1JELExQSU5UKTsKLUJPT0wgICAgICAgR2V0Q2xhc3NJbmZvKEhBTkRMRSxTRUdQVFIsTFBXTkRDTEFTUyk7Ci1MT05HICAgICAgIEdldENsYXNzTG9uZyhIV05ELHNob3J0KTsKLWludCAgICAgICAgR2V0Q2xhc3NOYW1lKEhXTkQsTFBTVFIsc2hvcnQpOworQk9PTCAgICAgICBHZXRDaGFyV2lkdGgoSERDLFdPUkQsV09SRCxMUElOVDE2KTsKIFdPUkQgICAgICAgR2V0Q2xhc3NXb3JkKEhXTkQsc2hvcnQpOwogdm9pZCAgICAgICBHZXRDbGllbnRSZWN0KEhXTkQsTFBSRUNUKTsKIGludCAgICAgICAgR2V0Q2xpcEJveChIREMsTFBSRUNUKTsKQEAgLTI4OTcsNyArMjg0NSw3IEBACiBpbnQgICAgICAgIEdldEVudmlyb25tZW50KExQU1RSLExQU1RSLFdPUkQpOwogSE1PRFVMRSAgICBHZXRFeGVQdHIoSEFORExFKTsKIEhXTkQgICAgICAgR2V0Rm9jdXModm9pZCk7Ci1EV09SRCAgICAgIEdldEZyZWVTcGFjZShXT1JEKTsKK0RXT1JEICAgICAgR2V0RnJlZVNwYWNlKFVJTlQxNik7CiBEV09SRCAgICAgIEdldEhlYXBTcGFjZXMoSE1PRFVMRSk7CiBCT09MICAgICAgIEdldElucHV0U3RhdGUodm9pZCk7CiBpbnQgICAgICAgIEdldEluc3RhbmNlRGF0YShIQU5ETEUsV09SRCxpbnQpOwpAQCAtMjk1Miw3ICsyOTAwLDcgQEAKIFdPUkQgICAgICAgR2V0UmVsQWJzKEhEQyk7CiBpbnQgICAgICAgIEdldFJnbkJveChIUkdOLExQUkVDVCk7CiBpbnQgICAgICAgIEdldFNjcm9sbFBvcyhIV05ELGludCk7Ci12b2lkICAgICAgIEdldFNjcm9sbFJhbmdlKEhXTkQsaW50LExQSU5ULExQSU5UKTsKK3ZvaWQgICAgICAgR2V0U2Nyb2xsUmFuZ2UoSFdORCxpbnQsTFBJTlQxNixMUElOVDE2KTsKIERXT1JEICAgICAgR2V0U2VsZWN0b3JCYXNlKFdPUkQpOwogRFdPUkQgICAgICBHZXRTZWxlY3RvckxpbWl0KFdPUkQpOwogSEFORExFICAgICBHZXRTdG9ja09iamVjdChpbnQpOwpAQCAtMjk2Niw3ICsyOTE0LDcgQEAKIFdPUkQgICAgICAgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMoSERDLFdPUkQsV09SRCxMUFBBTEVUVEVFTlRSWSk7CiBXT1JEICAgICAgIEdldFN5c3RlbVBhbGV0dGVVc2UoSERDKTsKIFZPSUQgICAgICAgR2V0U3lzdGVtVGltZShMUFNZU1RFTVRJTUUpOyAvKiBXaW4zMiAqLwotRFdPUkQgICAgICBHZXRUYWJiZWRUZXh0RXh0ZW50KEhEQyxMUFNUUixpbnQsaW50LExQSU5UKTsKK0RXT1JEICAgICAgR2V0VGFiYmVkVGV4dEV4dGVudChIREMsTFBTVFIsaW50LGludCxMUElOVDE2KTsKIEhJTlNUQU5DRSAgR2V0VGFza0RTKHZvaWQpOwogSFFVRVVFICAgICBHZXRUYXNrUXVldWUoSFRBU0spOwogQllURSAgICAgICBHZXRUZW1wRHJpdmUoQllURSk7CkBAIC0yOTc4LDcgKzI5MjYsNyBAQAogQk9PTCAgICAgICBHZXRUZXh0RXh0ZW50UG9pbnQoSERDLExQQ1NUUixzaG9ydCxMUFNJWkUpOwogSU5UICAgICAgICBHZXRUZXh0RmFjZShIREMsSU5ULExQU1RSKTsKIEJPT0wgICAgICAgR2V0VGV4dE1ldHJpY3MoSERDLExQVEVYVE1FVFJJQyk7Ci1MUElOVCAgICAgIEdldFRocmVzaG9sZEV2ZW50KHZvaWQpOworTFBJTlQxNiAgICBHZXRUaHJlc2hvbGRFdmVudCh2b2lkKTsKIGludCAgICAgICAgR2V0VGhyZXNob2xkU3RhdHVzKHZvaWQpOwogRFdPUkQgICAgICBHZXRUaWNrQ291bnQodm9pZCk7CiBIV05EICAgICAgIEdldFRvcFdpbmRvdyhIV05EKTsKQEAgLTMwMDYsMzQgKzI5NTQsMjEgQEAKIFdPUkQgICAgICAgR2V0V2luZG93V29yZChIV05ELHNob3J0KTsKIFVJTlQgICAgICAgR2V0V2luZG93c0RpcmVjdG9yeShMUFNUUixVSU5UKTsKIEFUT00gICAgICAgR2xvYmFsQWRkQXRvbShTRUdQVFIpOwotSEdMT0JBTCAgICBHbG9iYWxBbGxvYyhXT1JELERXT1JEKTsKLURXT1JEICAgICAgR2xvYmFsQ29tcGFjdChEV09SRCk7CiBEV09SRCAgICAgIEdsb2JhbERPU0FsbG9jKERXT1JEKTsKIFdPUkQgICAgICAgR2xvYmFsRE9TRnJlZShXT1JEKTsKIEFUT00gICAgICAgR2xvYmFsRGVsZXRlQXRvbShBVE9NKTsKIEFUT00gICAgICAgR2xvYmFsRmluZEF0b20oU0VHUFRSKTsKLXZvaWQgICAgICAgR2xvYmFsRml4KEhHTE9CQUwpOwotV09SRCAgICAgICBHbG9iYWxGbGFncyhIR0xPQkFMKTsKLUhHTE9CQUwgICAgR2xvYmFsRnJlZShIR0xPQkFMKTsKLXZvaWQgICAgICAgR2xvYmFsRnJlZUFsbChIQU5ETEUpOwordm9pZCAgICAgICBHbG9iYWxGaXgoSEdMT0JBTDE2KTsKK3ZvaWQgICAgICAgR2xvYmFsRnJlZUFsbChIR0xPQkFMMTYpOwogV09SRCAgICAgICBHbG9iYWxHZXRBdG9tTmFtZShBVE9NLExQU1RSLHNob3J0KTsKLSNpZmRlZiBXSU5FTElCMzIKLUhHTE9CQUwgICAgR2xvYmFsSGFuZGxlKExQQ1ZPSUQpOyAvKiBXaW4zMiAqLwotI2Vsc2UKLURXT1JEICAgICAgR2xvYmFsSGFuZGxlKFVJTlQpOyAvKiBXaW4xNiAqLwotI2VuZGlmCi1IR0xPQkFMICAgIEdsb2JhbExSVU5ld2VzdChIR0xPQkFMKTsKLUhHTE9CQUwgICAgR2xvYmFsTFJVT2xkZXN0KEhHTE9CQUwpOwotTFBWT0lEICAgICBHbG9iYWxMb2NrKEhHTE9CQUwpOworSEdMT0JBTDE2ICBHbG9iYWxMUlVOZXdlc3QoSEdMT0JBTDE2KTsKK0hHTE9CQUwxNiAgR2xvYmFsTFJVT2xkZXN0KEhHTE9CQUwxNik7CiB2b2lkICAgICAgIEdsb2JhbE5vdGlmeShGQVJQUk9DKTsKLVdPUkQgICAgICAgR2xvYmFsUGFnZUxvY2soSEdMT0JBTCk7Ci1XT1JEICAgICAgIEdsb2JhbFBhZ2VVbmxvY2soSEdMT0JBTCk7Ci1IR0xPQkFMICAgIEdsb2JhbFJlQWxsb2MoSEdMT0JBTCxEV09SRCxXT1JEKTsKLURXT1JEICAgICAgR2xvYmFsU2l6ZShIR0xPQkFMKTsKLUJPT0wgICAgICAgR2xvYmFsVW5XaXJlKEhHTE9CQUwpOwotdm9pZCAgICAgICBHbG9iYWxVbmZpeChIR0xPQkFMKTsKLUJPT0wgICAgICAgR2xvYmFsVW5sb2NrKEhHTE9CQUwpOwotU0VHUFRSICAgICBHbG9iYWxXaXJlKEhHTE9CQUwpOworV09SRCAgICAgICBHbG9iYWxQYWdlTG9jayhIR0xPQkFMMTYpOworV09SRCAgICAgICBHbG9iYWxQYWdlVW5sb2NrKEhHTE9CQUwxNik7CitCT09MICAgICAgIEdsb2JhbFVuV2lyZShIR0xPQkFMMTYpOwordm9pZCAgICAgICBHbG9iYWxVbmZpeChIR0xPQkFMMTYpOworU0VHUFRSICAgICBHbG9iYWxXaXJlKEhHTE9CQUwxNik7CiBCT09MICAgICAgIEdyYXlTdHJpbmcoSERDLEhCUlVTSCxGQVJQUk9DLExQQVJBTSxJTlQsSU5ULElOVCxJTlQsSU5UKTsKIHZvaWQgICAgICAgSGlkZUNhcmV0KEhXTkQpOwogQk9PTCAgICAgICBIaWxpdGVNZW51SXRlbShIV05ELEhNRU5VLFVJTlQsVUlOVCk7CkBAIC0zMDg5LDE4ICszMDI0LDggQEAKIEhBTkRMRSAgICAgTG9hZE1vZHVsZShMUENTVFIsTFBWT0lEKTsKIEhHTE9CQUwgICAgTG9hZFJlc291cmNlKEhJTlNUQU5DRSxIUlNSQyk7CiBpbnQgICAgICAgIExvYWRTdHJpbmcoSEFORExFLFdPUkQsTFBTVFIsaW50KTsKLUhBTkRMRSAgICAgTG9jYWxBbGxvYyhXT1JELFdPUkQpOwotVUlOVCAgICAgICBMb2NhbENvbXBhY3QoV09SRCk7Ci1VSU5UICAgICAgIExvY2FsRmxhZ3MoSExPQ0FMKTsKLUhBTkRMRSAgICAgTG9jYWxGcmVlKEhBTkRMRSk7Ci1IQU5ETEUgICAgIExvY2FsSGFuZGxlKFdPUkQpOwogQk9PTCAgICAgICBMb2NhbEluaXQoSEFORExFLFdPUkQsV09SRCk7Ci1OUFZPSUQgICAgIExvY2FsTG9jayhITE9DQUwpOwogRkFSUFJPQyAgICBMb2NhbE5vdGlmeShGQVJQUk9DKTsKLUhBTkRMRSAgICAgTG9jYWxSZUFsbG9jKEhBTkRMRSxXT1JELFdPUkQpOwotVUlOVCAgICAgICBMb2NhbFNocmluayhIQU5ETEUsV09SRCk7Ci1VSU5UICAgICAgIExvY2FsU2l6ZShITE9DQUwpOwotQk9PTCAgICAgICBMb2NhbFVubG9jayhIQU5ETEUpOwogTFBWT0lEICAgICBMb2NrUmVzb3VyY2UoSEdMT0JBTCk7CiBIR0xPQkFMICAgIExvY2tTZWdtZW50KEhHTE9CQUwpOwogSE1FTlUgICAgICBMb29rdXBNZW51SGFuZGxlKEhNRU5VLElOVCk7CkBAIC0zMTE0LDcgKzMwMzksNiBAQAogRFdPUkQgICAgICBNb3ZlVG8oSERDLHNob3J0LHNob3J0KTsKIEJPT0wgICAgICAgTW92ZVRvRXgoSERDLHNob3J0LHNob3J0LExQUE9JTlQpOwogQk9PTCAgICAgICBNb3ZlV2luZG93KEhXTkQsc2hvcnQsc2hvcnQsc2hvcnQsc2hvcnQsQk9PTCk7Ci1JTlQgICAgICAgIE11bERpdihJTlQsSU5ULElOVCk7CiBEV09SRCAgICAgIE9lbUtleVNjYW4oV09SRCk7CiBCT09MICAgICAgIE9lbVRvQW5zaShMUFNUUixMUFNUUik7CiB2b2lkICAgICAgIE9lbVRvQW5zaUJ1ZmYoTFBTVFIsTFBTVFIsSU5UKTsKQEAgLTMxMzAsNyArMzA1NCw3IEBACiBIRklMRSAgICAgIE9wZW5GaWxlKExQQ1NUUixPRlNUUlVDVCosVUlOVCk7CiBCT09MICAgICAgIE9wZW5JY29uKEhXTkQpOwogaW50ICAgICAgICBPcGVuU291bmQodm9pZCk7Ci12b2lkICAgICAgIE91dHB1dERlYnVnU3RyaW5nKExQU1RSKTsKK3ZvaWQgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTFBDU1RSKTsKIHZvaWQgICAgICAgUGFpbnRSZWN0KEhXTkQsSFdORCxIREMsSEJSVVNILExQUkVDVCk7CiBCT09MICAgICAgIFBhaW50UmduKEhEQyxIUkdOKTsKIEJPT0wgICAgICAgUGF0Qmx0KEhEQyxzaG9ydCxzaG9ydCxzaG9ydCxzaG9ydCxEV09SRCk7CkBAIC0zMTM4LDcgKzMwNjIsNyBAQAogQk9PTCAgICAgICBQaWUoSERDLElOVCxJTlQsSU5ULElOVCxJTlQsSU5ULElOVCxJTlQpOwogQk9PTCAgICAgICBQbGF5TWV0YUZpbGUoSERDLEhBTkRMRSk7CiB2b2lkICAgICAgIFBsYXlNZXRhRmlsZVJlY29yZChIREMsTFBIQU5ETEVUQUJMRSxMUE1FVEFSRUNPUkQsV09SRCk7Ci1CT09MICAgICAgIFBvbHlQb2x5Z29uKEhEQyxMUFBPSU5ULExQSU5ULFdPUkQpOworQk9PTCAgICAgICBQb2x5UG9seWdvbihIREMsTFBQT0lOVCxMUElOVDE2LFdPUkQpOwogQk9PTCAgICAgICBQb2x5Z29uKEhEQyxMUFBPSU5ULGludCk7CiBCT09MICAgICAgIFBvbHlsaW5lKEhEQyxMUFBPSU5ULGludCk7CiBCT09MICAgICAgIFBvc3RBcHBNZXNzYWdlKEhBTkRMRSxXT1JELFdPUkQsTE9ORyk7CkBAIC0zMjEyLDcgKzMxMzYsNiBAQAogCQlMUERXT1JELExQRFdPUkQsTFBEV09SRCxMUERXT1JELExQRFdPUkQsRklMRVRJTUUqKTsKIERXT1JEICAgICAgUmVnUXVlcnlJbmZvS2V5QShIS0VZLExQU1RSLExQRFdPUkQsTFBEV09SRCxMUERXT1JELExQRFdPUkQsCiAJCUxQRFdPUkQsTFBEV09SRCxMUERXT1JELExQRFdPUkQsTFBEV09SRCxGSUxFVElNRSopOwotQVRPTSAgICAgICBSZWdpc3RlckNsYXNzKExQV05EQ0xBU1MpOwogV09SRCAgICAgICBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMUENTVFIpOwogV09SRCAgICAgICBSZWdpc3RlcldpbmRvd01lc3NhZ2UoU0VHUFRSKTsKIHZvaWQgICAgICAgUmVsZWFzZUNhcHR1cmUodm9pZCk7CkBAIC0zMjU0LDcgKzMxNzcsNiBAQAogSFdORCAgICAgICBTZXRDYXB0dXJlKEhXTkQpOwogdm9pZCAgICAgICBTZXRDYXJldEJsaW5rVGltZShXT1JEKTsKIHZvaWQgICAgICAgU2V0Q2FyZXRQb3Moc2hvcnQsc2hvcnQpOwotTE9ORyAgICAgICBTZXRDbGFzc0xvbmcoSFdORCxzaG9ydCxMT05HKTsKIFdPUkQgICAgICAgU2V0Q2xhc3NXb3JkKEhXTkQsc2hvcnQsV09SRCk7CiBIQU5ETEUgICAgIFNldENsaXBib2FyZERhdGEoV09SRCxIQU5ETEUpOwogSFdORCAgICAgICBTZXRDbGlwYm9hcmRWaWV3ZXIoSFdORCk7CkBAIC0zMzAzLDcgKzMyMjUsNyBAQAogaW50ICAgICAgICBTZXRTb3VuZE5vaXNlKGludCxpbnQpOwogV09SRCAgICAgICBTZXRTdHJldGNoQmx0TW9kZShIREMsV09SRCk7CiBMT05HICAgICAgIFNldFN3YXBBcmVhU2l6ZShXT1JEKTsKLXZvaWQgICAgICAgU2V0U3lzQ29sb3JzKGludCxMUElOVCxDT0xPUlJFRiopOwordm9pZCAgICAgICBTZXRTeXNDb2xvcnMoaW50LExQSU5UMTYsQ09MT1JSRUYqKTsKIEhXTkQgICAgICAgU2V0U3lzTW9kYWxXaW5kb3coSFdORCk7CiBXT1JEICAgICAgIFNldFN5c3RlbVBhbGV0dGVVc2UoSERDLFdPUkQpOwogV09SRCAgICAgICBTZXRTeXN0ZW1UaW1lcihIV05ELFdPUkQsV09SRCxGQVJQUk9DKTsKQEAgLTMzNTQsNyArMzI3Niw3IEBACiB2b2lkICAgICAgIFN3aXRjaFN0YWNrVG8oV09SRCxXT1JELFdPUkQpOwogaW50ICAgICAgICBTeW5jQWxsVm9pY2VzKHZvaWQpOwogQk9PTCAgICAgICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhVSU5ULFVJTlQsTFBWT0lELFVJTlQpOwotTE9ORyAgICAgICBUYWJiZWRUZXh0T3V0KEhEQyxzaG9ydCxzaG9ydCxMUFNUUixzaG9ydCxzaG9ydCxMUElOVCxzaG9ydCk7CitMT05HICAgICAgIFRhYmJlZFRleHRPdXQoSERDLHNob3J0LHNob3J0LExQU1RSLHNob3J0LHNob3J0LExQSU5UMTYsc2hvcnQpOwogQk9PTCAgICAgICBUZXh0T3V0KEhEQyxzaG9ydCxzaG9ydCxMUFNUUixzaG9ydCk7CiBpbnQgICAgICAgIFRocm93KExQQ0FUQ0hCVUYsaW50KTsKIGludCAgICAgICAgVG9Bc2NpaShXT1JELFdPUkQsTFBTVFIsTFBWT0lELFdPUkQpOwpAQCAtMzM2OSw3ICszMjkxLDYgQEAKIEJPT0wgICAgICAgVW5pb25SZWN0KExQUkVDVCxMUFJFQ1QsTFBSRUNUKTsKIHZvaWQgICAgICAgVW5sb2NrU2VnbWVudChIR0xPQkFMKTsKIEJPT0wgICAgICAgVW5yZWFsaXplT2JqZWN0KEhCUlVTSCk7Ci1CT09MICAgICAgIFVucmVnaXN0ZXJDbGFzcyhTRUdQVFIsSEFORExFKTsKIGludCAgICAgICAgVXBkYXRlQ29sb3JzKEhEQyk7CiB2b2lkICAgICAgIFVwZGF0ZVdpbmRvdyhIV05EKTsKIHZvaWQgICAgICAgVmFsaWRhdGVDb2RlU2VnbWVudHModm9pZCk7CkBAIC0zMzc3LDcgKzMyOTgsNyBAQAogdm9pZCAgICAgICBWYWxpZGF0ZVJlY3QoSFdORCxMUFJFQ1QpOwogdm9pZCAgICAgICBWYWxpZGF0ZVJnbihIV05ELEhSR04pOwogV09SRCAgICAgICBWa0tleVNjYW4oV09SRCk7Ci1TRUdQVFIgICAgIFdJTjE2X0dsb2JhbExvY2soSEdMT0JBTCk7CitTRUdQVFIgICAgIFdJTjE2X0dsb2JhbExvY2sxNihIR0xPQkFMMTYpOwogU0VHUFRSICAgICBXSU4xNl9Mb2NrUmVzb3VyY2UoSEFORExFKTsKIFNFR1BUUiAgICAgV0lOMTZfbHN0cmNweW4oU0VHUFRSLFNFR1BUUixXT1JEKTsKIHZvaWQgICAgICAgV2FpdE1lc3NhZ2Uodm9pZCk7CkBAIC0zNDA3LDcgKzMzMjgsODUgQEAKIExQU1RSICAgICAgbHN0cmNweW4oTFBTVFIsTFBDU1RSLGludCk7CiBJTlQgICAgICAgIGxzdHJsZW4oTFBDU1RSKTsKIGludCAgICAgICAgd3NwcmludGYoTFBTVFIsTFBTVFIsLi4uKTsKLWludCAgICAgICAgd3ZzcHJpbnRmKExQU1RSLExQU1RSLExQU1RSKTsKK2ludCAgICAgICAgd3ZzcHJpbnRmKExQU1RSLExQQ1NUUixMUENTVFIpOworCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZXhpc3QgYm90aCBpbiBXaW4xNiBhbmQgV2luMzIgKi8KKworSFdORCAgICAgICBDcmVhdGVXaW5kb3cxNihTRUdQVFIsU0VHUFRSLERXT1JELElOVDE2LElOVDE2LElOVDE2LElOVDE2LEhXTkQsSE1FTlUsSElOU1RBTkNFLFNFR1BUUik7CisjZGVmaW5lICAgIENyZWF0ZVdpbmRvdzMyQShjbGFzc05hbWUsdGl0bGVOYW1lLHN0eWxlLHgseSx3aWR0aCxoZWlnaHQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LG1lbnUsaW5zdGFuY2UscGFyYW0pIFwKKyAgICAgICAgICAgQ3JlYXRlV2luZG93RXgzMkEoMCxjbGFzc05hbWUsdGl0bGVOYW1lLHN0eWxlLHgseSx3aWR0aCxoZWlnaHQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LG1lbnUsaW5zdGFuY2UscGFyYW0pCisjZGVmaW5lICAgIENyZWF0ZVdpbmRvdzMyVyhjbGFzc05hbWUsdGl0bGVOYW1lLHN0eWxlLHgseSx3aWR0aCxoZWlnaHQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LG1lbnUsaW5zdGFuY2UscGFyYW0pIFwKKyAgICAgICAgICAgQ3JlYXRlV2luZG93RXgzMlcoMCxjbGFzc05hbWUsdGl0bGVOYW1lLHN0eWxlLHgseSx3aWR0aCxoZWlnaHQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LG1lbnUsaW5zdGFuY2UscGFyYW0pCisjZGVmaW5lICAgIENyZWF0ZVdpbmRvdyBXSU5FTElCX05BTUVfQVcoQ3JlYXRlV2luZG93KQorSFdORCAgICAgICBDcmVhdGVXaW5kb3dFeDE2KERXT1JELFNFR1BUUixTRUdQVFIsRFdPUkQsSU5UMTYsSU5UMTYsSU5UMTYsSU5UMTYsSFdORCxITUVOVSxISU5TVEFOQ0UsU0VHUFRSKTsKK0hXTkQzMiAgICAgQ3JlYXRlV2luZG93RXgzMkEoRFdPUkQsTFBDU1RSLExQQ1NUUixEV09SRCxJTlQzMixJTlQzMixJTlQzMixJTlQzMixIV05EMzIsSE1FTlUzMixISU5TVEFOQ0UzMixMUFZPSUQpOworSFdORDMyICAgICBDcmVhdGVXaW5kb3dFeDMyVyhEV09SRCxMUENXU1RSLExQQ1dTVFIsRFdPUkQsSU5UMzIsSU5UMzIsSU5UMzIsSU5UMzIsSFdORDMyLEhNRU5VMzIsSElOU1RBTkNFMzIsTFBWT0lEKTsKKyNkZWZpbmUgICAgQ3JlYXRlV2luZG93RXggV0lORUxJQl9OQU1FX0FXKENyZWF0ZVdpbmRvd0V4KQorSEdMT0JBTDE2ICBHbG9iYWxBbGxvYzE2KFVJTlQxNixEV09SRCk7CitIR0xPQkFMMzIgIEdsb2JhbEFsbG9jMzIoVUlOVDMyLERXT1JEKTsKKyNkZWZpbmUgICAgR2xvYmFsQWxsb2MgV0lORUxJQl9OQU1FKEdsb2JhbEFsbG9jKQorRFdPUkQgICAgICBHbG9iYWxDb21wYWN0MTYoRFdPUkQpOworRFdPUkQgICAgICBHbG9iYWxDb21wYWN0MzIoRFdPUkQpOworI2RlZmluZSAgICBHbG9iYWxDb21wYWN0IFdJTkVMSUJfTkFNRShHbG9iYWxDb21wYWN0KQorVUlOVDE2ICAgICBHbG9iYWxGbGFnczE2KEhHTE9CQUwxNik7CitVSU5UMzIgICAgIEdsb2JhbEZsYWdzMzIoSEdMT0JBTDMyKTsKKyNkZWZpbmUgICAgR2xvYmFsRmxhZ3MgV0lORUxJQl9OQU1FKEdsb2JhbEZsYWdzKQorSEdMT0JBTDE2ICBHbG9iYWxGcmVlMTYoSEdMT0JBTDE2KTsKK0hHTE9CQUwzMiAgR2xvYmFsRnJlZTMyKEhHTE9CQUwzMik7CisjZGVmaW5lICAgIEdsb2JhbEZyZWUgV0lORUxJQl9OQU1FKEdsb2JhbEZyZWUpCitEV09SRCAgICAgIEdsb2JhbEhhbmRsZTE2KFdPUkQpOworSEdMT0JBTDMyICBHbG9iYWxIYW5kbGUzMihMUENWT0lEKTsKKyNkZWZpbmUgICAgR2xvYmFsSGFuZGxlIFdJTkVMSUJfTkFNRShHbG9iYWxIYW5kbGUpCitMUFZPSUQgICAgIEdsb2JhbExvY2sxNihIR0xPQkFMMTYpOworTFBWT0lEICAgICBHbG9iYWxMb2NrMzIoSEdMT0JBTDMyKTsKKyNkZWZpbmUgICAgR2xvYmFsTG9jayBXSU5FTElCX05BTUUoR2xvYmFsTG9jaykKK0hHTE9CQUwxNiAgR2xvYmFsUmVBbGxvYzE2KEhHTE9CQUwxNixEV09SRCxVSU5UMTYpOworSEdMT0JBTDMyICBHbG9iYWxSZUFsbG9jMzIoSEdMT0JBTDMyLERXT1JELFVJTlQzMik7CisjZGVmaW5lICAgIEdsb2JhbFJlQWxsb2MgV0lORUxJQl9OQU1FKEdsb2JhbFJlQWxsb2MpCitEV09SRCAgICAgIEdsb2JhbFNpemUxNihIR0xPQkFMMTYpOworRFdPUkQgICAgICBHbG9iYWxTaXplMzIoSEdMT0JBTDMyKTsKKyNkZWZpbmUgICAgR2xvYmFsU2l6ZSBXSU5FTElCX05BTUUoR2xvYmFsU2l6ZSkKK0JPT0wgICAgICAgR2xvYmFsVW5sb2NrMTYoSEdMT0JBTDE2KTsKK0JPT0wgICAgICAgR2xvYmFsVW5sb2NrMzIoSEdMT0JBTDMyKTsKKyNkZWZpbmUgICAgR2xvYmFsVW5sb2NrIFdJTkVMSUJfTkFNRShHbG9iYWxVbmxvY2spCitITE9DQUwxNiAgIExvY2FsQWxsb2MxNihVSU5UMTYsV09SRCk7CitITE9DQUwzMiAgIExvY2FsQWxsb2MzMihVSU5UMzIsRFdPUkQpOworI2RlZmluZSAgICBMb2NhbEFsbG9jIFdJTkVMSUJfTkFNRShMb2NhbEFsbG9jKQorVUlOVDE2ICAgICBMb2NhbENvbXBhY3QxNihVSU5UMTYpOworVUlOVDMyICAgICBMb2NhbENvbXBhY3QzMihVSU5UMzIpOworI2RlZmluZSAgICBMb2NhbENvbXBhY3QgV0lORUxJQl9OQU1FKExvY2FsQ29tcGFjdCkKK1VJTlQxNiAgICAgTG9jYWxGbGFnczE2KEhMT0NBTDE2KTsKK1VJTlQzMiAgICAgTG9jYWxGbGFnczMyKEhMT0NBTDMyKTsKKyNkZWZpbmUgICAgTG9jYWxGbGFncyBXSU5FTElCX05BTUUoTG9jYWxGbGFncykKK0hMT0NBTDE2ICAgTG9jYWxGcmVlMTYoSExPQ0FMMTYpOworSExPQ0FMMzIgICBMb2NhbEZyZWUzMihITE9DQUwzMik7CisjZGVmaW5lICAgIExvY2FsRnJlZSBXSU5FTElCX05BTUUoTG9jYWxGcmVlKQorSExPQ0FMMTYgICBMb2NhbEhhbmRsZTE2KFdPUkQpOworSExPQ0FMMzIgICBMb2NhbEhhbmRsZTMyKExQQ1ZPSUQpOworI2RlZmluZSAgICBMb2NhbEhhbmRsZSBXSU5FTElCX05BTUUoTG9jYWxIYW5kbGUpCitTRUdQVFIgICAgIExvY2FsTG9jazE2KEhMT0NBTDE2KTsKK0xQVk9JRCAgICAgTG9jYWxMb2NrMzIoSExPQ0FMMzIpOworI2RlZmluZSAgICBMb2NhbExvY2sgV0lORUxJQl9OQU1FKExvY2FsTG9jaykKK0hMT0NBTDE2ICAgTG9jYWxSZUFsbG9jMTYoSExPQ0FMMTYsV09SRCxVSU5UMTYpOworSExPQ0FMMzIgICBMb2NhbFJlQWxsb2MzMihITE9DQUwzMixEV09SRCxVSU5UMzIpOworI2RlZmluZSAgICBMb2NhbFJlQWxsb2MgV0lORUxJQl9OQU1FKExvY2FsUmVBbGxvYykKK1VJTlQxNiAgICAgTG9jYWxTaHJpbmsxNihIR0xPQkFMMTYsVUlOVDE2KTsKK1VJTlQzMiAgICAgTG9jYWxTaHJpbmszMihIR0xPQkFMMzIsVUlOVDMyKTsKKyNkZWZpbmUgICAgTG9jYWxTaHJpbmsgV0lORUxJQl9OQU1FKExvY2FsU2hyaW5rKQorVUlOVDE2ICAgICBMb2NhbFNpemUxNihITE9DQUwxNik7CitVSU5UMzIgICAgIExvY2FsU2l6ZTMyKEhMT0NBTDMyKTsKKyNkZWZpbmUgICAgTG9jYWxTaXplIFdJTkVMSUJfTkFNRShMb2NhbFNpemUpCitCT09MICAgICAgIExvY2FsVW5sb2NrMTYoSExPQ0FMMTYpOworQk9PTCAgICAgICBMb2NhbFVubG9jazMyKEhMT0NBTDMyKTsKKyNkZWZpbmUgICAgTG9jYWxVbmxvY2sgV0lORUxJQl9OQU1FKExvY2FsVW5sb2NrKQorSU5UMTYgICAgICBNdWxEaXYxNihJTlQxNixJTlQxNixJTlQxNik7CitJTlQzMiAgICAgIE11bERpdjMyKElOVDMyLElOVDMyLElOVDMyKTsKKyNkZWZpbmUgICAgTXVsRGl2IFdJTkVMSUJfTkFNRShNdWxEaXYpCiAKICNpZmRlZiBXSU5FTElCCiAjZGVmaW5lIFdJTkVMSUJfVU5JTVAoeCkgZnByaW50ZiAoc3RkZXJyLCAiV2luZUxpYjogVW5pbXBsZW1lbnRlZCAlc1xuIiwgeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2lucG9zLmggYi9pbmNsdWRlL3dpbnBvcy5oCmluZGV4IDRlYzczMTkuLjk0ZDJkYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2lucG9zLmgKKysrIGIvaW5jbHVkZS93aW5wb3MuaApAQCAtMzcsNyArMzcsNyBAQAogZXh0ZXJuIEJPT0wgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyggSFdORCBod25kLCBCT09MIG1vdXNlTXNnICk7CiBleHRlcm4gTE9ORyBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIEhXTkQgaHduZCwgQk9PTCBjYWxjVmFsaWRSZWN0LAogCQkJCSAgIFJFQ1QgKm5ld1dpbmRvd1JlY3QsIFJFQ1QgKm9sZFdpbmRvd1JlY3QsCi0JCQkJICAgUkVDVCAqb2xkQ2xpZW50UmVjdCwgV0lORE9XUE9TICp3aW5wb3MsCisJCQkJICAgUkVDVCAqb2xkQ2xpZW50UmVjdCwgU0VHUFRSIHdpbnBvcywKIAkJCQkgICBSRUNUICpuZXdDbGllbnRSZWN0ICk7CiBleHRlcm4gTE9ORyBXSU5QT1NfSGFuZGxlV2luZG93UG9zQ2hhbmdpbmcoIFdJTkRPV1BPUyAqd2lucG9zICk7CiBleHRlcm4gSU5UIFdJTlBPU19XaW5kb3dGcm9tUG9pbnQoIFBPSU5UIHB0LCBXTkQgKipwcFduZCApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5zb2NrLmggYi9pbmNsdWRlL3dpbnNvY2suaAppbmRleCA0ZmJmYjFkLi5jMjJlMmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbnNvY2suaAorKysgYi9pbmNsdWRlL3dpbnNvY2suaApAQCAtMjIsNyArMjIsNyBAQAogICovCiB0eXBlZGVmIHVfaW50CVNPQ0tFVDsKIAotZXh0ZXJuIGludCBQQVNDQUwgRkFSIF9fV1NBRkRJc1NldChTT0NLRVQsIGZkX3NldCBGQVIgKik7CitleHRlcm4gaW50IF9fV1NBRkRJc1NldChTT0NLRVQsIGZkX3NldCAqKTsKIAogLyoKICAqIEludGVybmV0IGFkZHJlc3MgKG9sZCBzdHlsZS4uLiBzaG91bGQgYmUgdXBkYXRlZCkKQEAgLTQ2LDEwICs0Niw4IEBACiAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHN6U3lzdGVtU3RhdHVzW1dTQVNZU19TVEFUVVNfTEVOKzFdOwogICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBpTWF4U29ja2V0czsKICAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgaU1heFVkcERnOwotICAgICAgICBjaGFyIEZBUiAqICAgICAgICAgICAgICBscFZlbmRvckluZm87Ci19IFdTQURBVEE7Ci0KLXR5cGVkZWYgV1NBREFUQSBGQVIgKkxQV1NBREFUQTsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAqbHBWZW5kb3JJbmZvOworfSBXU0FEQVRBLCAqTFBXU0FEQVRBOwogCiAvKgogICogVGhpcyBpcyB1c2VkIGluc3RlYWQgb2YgLTEsIHNpbmNlIHRoZQpAQCAtMTkyLDkxICsxOTAsNDQgQEAKIAogLyogTWljcm9zb2Z0IFdpbmRvd3MgRXh0ZW5zaW9uIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIAotSU5UIFBBU0NBTCBGQVIgV1NBU3RhcnR1cChXT1JEIHdWZXJzaW9uUmVxdWlyZWQsIExQV1NBREFUQSBscFdTQURhdGEpOwotCi1JTlQgUEFTQ0FMIEZBUiBXU0FDbGVhbnVwKHZvaWQpOwotCi12b2lkIFBBU0NBTCBGQVIgV1NBU2V0TGFzdEVycm9yKElOVCBpRXJyb3IpOwotCi1JTlQgUEFTQ0FMIEZBUiBXU0FHZXRMYXN0RXJyb3Iodm9pZCk7Ci0KLUJPT0wgUEFTQ0FMIEZBUiBXU0FJc0Jsb2NraW5nKHZvaWQpOwotCi1JTlQgUEFTQ0FMIEZBUiBXU0FVbmhvb2tCbG9ja2luZ0hvb2sodm9pZCk7Ci0KLUZBUlBST0MgUEFTQ0FMIEZBUiBXU0FTZXRCbG9ja2luZ0hvb2soRkFSUFJPQyBscEJsb2NrRnVuYyk7Ci0KLUlOVCBQQVNDQUwgRkFSIFdTQUNhbmNlbEJsb2NraW5nQ2FsbCh2b2lkKTsKLQotSEFORExFIFBBU0NBTCBGQVIgV1NBQXN5bmNHZXRTZXJ2QnlOYW1lKEhXTkQgaFduZCwgdV9pbnQgd01zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIEZBUiAqbmFtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBGQVIgKnByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgRkFSICpidWYsIElOVCBidWZsZW4pOwotCi1IQU5ETEUgUEFTQ0FMIEZBUiBXU0FBc3luY0dldFNlcnZCeVBvcnQoSFdORCBoV25kLCB1X2ludCB3TXNnLCBJTlQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIEZBUiAqcHJvdG8sIGNoYXIgRkFSICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGJ1Zmxlbik7Ci0KLUhBTkRMRSBQQVNDQUwgRkFSIFdTQUFzeW5jR2V0UHJvdG9CeU5hbWUoSFdORCBoV25kLCB1X2ludCB3TXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIEZBUiAqbmFtZSwgY2hhciBGQVIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGJ1Zmxlbik7Ci0KLUhBTkRMRSBQQVNDQUwgRkFSIFdTQUFzeW5jR2V0UHJvdG9CeU51bWJlcihIV05EIGhXbmQsIHVfaW50IHdNc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIG51bWJlciwgY2hhciBGQVIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgYnVmbGVuKTsKLQotSEFORExFIFBBU0NBTCBGQVIgV1NBQXN5bmNHZXRIb3N0QnlOYW1lKEhXTkQgaFduZCwgdV9pbnQgd01zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIEZBUiAqbmFtZSwgY2hhciBGQVIgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgYnVmbGVuKTsKLQotSEFORExFIFBBU0NBTCBGQVIgV1NBQXN5bmNHZXRIb3N0QnlBZGRyKEhXTkQgaFduZCwgdV9pbnQgd01zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIEZBUiAqYWRkciwgSU5UIGxlbiwgSU5UIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBGQVIgKmJ1ZiwgSU5UIGJ1Zmxlbik7Ci0KLUlOVCBQQVNDQUwgRkFSIFdTQUNhbmNlbEFzeW5jUmVxdWVzdChIQU5ETEUgaEFzeW5jVGFza0hhbmRsZSk7Ci0KLUlOVCBQQVNDQUwgRkFSIFdTQUFzeW5jU2VsZWN0KFNPQ0tFVCBzLCBIV05EIGhXbmQsIHVfaW50IHdNc2csIGxvbmcgbEV2ZW50KTsKK0lOVCBXU0FTdGFydHVwKFdPUkQgd1ZlcnNpb25SZXF1aXJlZCwgTFBXU0FEQVRBIGxwV1NBRGF0YSk7CitJTlQgV1NBQ2xlYW51cCh2b2lkKTsKK3ZvaWQgV1NBU2V0TGFzdEVycm9yKElOVCBpRXJyb3IpOworSU5UIFdTQUdldExhc3RFcnJvcih2b2lkKTsKK0JPT0wgV1NBSXNCbG9ja2luZyh2b2lkKTsKK0lOVCBXU0FVbmhvb2tCbG9ja2luZ0hvb2sodm9pZCk7CitGQVJQUk9DIFdTQVNldEJsb2NraW5nSG9vayhGQVJQUk9DIGxwQmxvY2tGdW5jKTsKK0lOVCBXU0FDYW5jZWxCbG9ja2luZ0NhbGwodm9pZCk7CitIQU5ETEUgV1NBQXN5bmNHZXRTZXJ2QnlOYW1lKEhXTkQgaFduZCwgdV9pbnQgd01zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIG5hbWUsIExQQ1NUUiBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTVFIgYnVmLCBJTlQgYnVmbGVuKTsKK0hBTkRMRSBXU0FBc3luY0dldFNlcnZCeVBvcnQoSFdORCBoV25kLCB1X2ludCB3TXNnLCBJTlQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIHByb3RvLCBMUFNUUiBidWYsIElOVCBidWZsZW4pOworSEFORExFIFdTQUFzeW5jR2V0UHJvdG9CeU5hbWUoSFdORCBoV25kLCB1X2ludCB3TXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIG5hbWUsIExQU1RSIGJ1ZiwgSU5UIGJ1Zmxlbik7CitIQU5ETEUgV1NBQXN5bmNHZXRQcm90b0J5TnVtYmVyKEhXTkQgaFduZCwgdV9pbnQgd01zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIG51bWJlciwgTFBTVFIgYnVmLCBJTlQgYnVmbGVuKTsKK0hBTkRMRSBXU0FBc3luY0dldEhvc3RCeU5hbWUoSFdORCBoV25kLCB1X2ludCB3TXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgbmFtZSwgTFBTVFIgYnVmLCBJTlQgYnVmbGVuKTsKK0hBTkRMRSBXU0FBc3luY0dldEhvc3RCeUFkZHIoSFdORCBoV25kLCB1X2ludCB3TXNnLCBMUENTVFIgYWRkciwgSU5UIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHR5cGUsIExQU1RSIGJ1ZiwgSU5UIGJ1Zmxlbik7CitJTlQgV1NBQ2FuY2VsQXN5bmNSZXF1ZXN0KEhBTkRMRSBoQXN5bmNUYXNrSGFuZGxlKTsKK0lOVCBXU0FBc3luY1NlbGVjdChTT0NLRVQgcywgSFdORCBoV25kLCB1X2ludCB3TXNnLCBsb25nIGxFdmVudCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAKIC8qIE1pY3Jvc29mdCBXaW5kb3dzIEV4dGVuZGVkIGRhdGEgdHlwZXMgKi8KLXR5cGVkZWYgc3RydWN0IHNvY2thZGRyIFNPQ0tBRERSOwotdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHIgKlBTT0NLQUREUjsKLXR5cGVkZWYgc3RydWN0IHNvY2thZGRyIEZBUiAqTFBTT0NLQUREUjsKLQotdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gU09DS0FERFJfSU47Ci10eXBlZGVmIHN0cnVjdCBzb2NrYWRkcl9pbiAqUFNPQ0tBRERSX0lOOwotdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gRkFSICpMUFNPQ0tBRERSX0lOOwotCi10eXBlZGVmIHN0cnVjdCBsaW5nZXIgTElOR0VSOwotdHlwZWRlZiBzdHJ1Y3QgbGluZ2VyICpQTElOR0VSOwotdHlwZWRlZiBzdHJ1Y3QgbGluZ2VyIEZBUiAqTFBMSU5HRVI7Ci0KLXR5cGVkZWYgc3RydWN0IGluX2FkZHIgSU5fQUREUjsKLXR5cGVkZWYgc3RydWN0IGluX2FkZHIgKlBJTl9BRERSOwotdHlwZWRlZiBzdHJ1Y3QgaW5fYWRkciBGQVIgKkxQSU5fQUREUjsKLQotdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0IEZEX1NFVDsKLXR5cGVkZWYgc3RydWN0IGZkX3NldCAqUEZEX1NFVDsKLXR5cGVkZWYgc3RydWN0IGZkX3NldCBGQVIgKkxQRkRfU0VUOwotCi10eXBlZGVmIHN0cnVjdCBob3N0ZW50IEhPU1RFTlQ7Ci10eXBlZGVmIHN0cnVjdCBob3N0ZW50ICpQSE9TVEVOVDsKLXR5cGVkZWYgc3RydWN0IGhvc3RlbnQgRkFSICpMUEhPU1RFTlQ7Ci0KLXR5cGVkZWYgc3RydWN0IHNlcnZlbnQgU0VSVkVOVDsKLXR5cGVkZWYgc3RydWN0IHNlcnZlbnQgKlBTRVJWRU5UOwotdHlwZWRlZiBzdHJ1Y3Qgc2VydmVudCBGQVIgKkxQU0VSVkVOVDsKLQotdHlwZWRlZiBzdHJ1Y3QgcHJvdG9lbnQgUFJPVE9FTlQ7Ci10eXBlZGVmIHN0cnVjdCBwcm90b2VudCAqUFBST1RPRU5UOwotdHlwZWRlZiBzdHJ1Y3QgcHJvdG9lbnQgRkFSICpMUFBST1RPRU5UOwotCi10eXBlZGVmIHN0cnVjdCB0aW1ldmFsIFRJTUVWQUw7Ci10eXBlZGVmIHN0cnVjdCB0aW1ldmFsICpQVElNRVZBTDsKLXR5cGVkZWYgc3RydWN0IHRpbWV2YWwgRkFSICpMUFRJTUVWQUw7Cit0eXBlZGVmIHN0cnVjdCBzb2NrYWRkciBTT0NLQUREUiwgKlBTT0NLQUREUiwgKkxQU09DS0FERFI7Cit0eXBlZGVmIHN0cnVjdCBzb2NrYWRkcl9pbiBTT0NLQUREUl9JTiwgKlBTT0NLQUREUl9JTiwgKkxQU09DS0FERFJfSU47Cit0eXBlZGVmIHN0cnVjdCBsaW5nZXIgTElOR0VSLCAqUExJTkdFUiwgKkxQTElOR0VSOwordHlwZWRlZiBzdHJ1Y3QgaW5fYWRkciBJTl9BRERSLCAqUElOX0FERFIsICpMUElOX0FERFI7Cit0eXBlZGVmIHN0cnVjdCBmZF9zZXQgRkRfU0VULCAqUEZEX1NFVCwgKkxQRkRfU0VUOwordHlwZWRlZiBzdHJ1Y3QgaG9zdGVudCBIT1NURU5ULCAqUEhPU1RFTlQsICpMUEhPU1RFTlQ7Cit0eXBlZGVmIHN0cnVjdCBzZXJ2ZW50IFNFUlZFTlQsICpQU0VSVkVOVCwgKkxQU0VSVkVOVDsKK3R5cGVkZWYgc3RydWN0IHByb3RvZW50IFBST1RPRU5ULCAqUFBST1RPRU5ULCAqTFBQUk9UT0VOVDsKK3R5cGVkZWYgc3RydWN0IHRpbWV2YWwgVElNRVZBTCwgKlBUSU1FVkFMLCAqTFBUSU1FVkFMOwogCiAvKgogICogV2luZG93cyBtZXNzYWdlIHBhcmFtZXRlciBjb21wb3NpdGlvbiBhbmQgZGVjb21wb3NpdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW50eXBlcy5oIGIvaW5jbHVkZS93aW50eXBlcy5oCmluZGV4IGFmY2UyNjIuLmE5YmJlNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2ludHlwZXMuaAorKysgYi9pbmNsdWRlL3dpbnR5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQmFzaWMgdHlwZXMgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBBbGV4YW5kcmUgSnVsbGlhcmQKKyAqLworCiAjaWZuZGVmIF9fV0lORV9XSU5UWVBFU19ICiAjZGVmaW5lIF9fV0lORV9XSU5UWVBFU19ICiAKQEAgLTE5LDcwICsyNSw5OSBAQAogIyBlbmRpZgogI2VuZGlmCiAKLXR5cGVkZWYgc2hvcnQgSU5UMTY7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQxNjsKLXR5cGVkZWYgaW50IElOVDMyOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOworLyogTWFjcm9zIHRvIG1hcCBXaW5lbGliIG5hbWVzIHRvIHRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uIG5hbWUgKi8KKy8qIGRlcGVuZGluZyBvbiBXSU5FTElCMTYsIFdJTkVMSUIzMiBhbmQgVU5JQ09ERSBtYWNyb3MuICAgICAgICAgICovCiAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgQk9PTDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBCWVRFOwotdHlwZWRlZiBsb25nIExPTkc7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgQ0hBUjsKKyNpZmRlZiBXSU5FTElCCisjIGlmZGVmIFdJTkVMSUIzMgorIyAgZGVmaW5lIFdJTkVMSUJfTkFNRShmdW5jKSAgICAgZnVuYyMjMzIKKyMgIGlmZGVmIFVOSUNPREUKKyMgICBkZWZpbmUgV0lORUxJQl9OQU1FX0FXKGZ1bmMpIGZ1bmMjIzMyVworIyAgZWxzZQorIyAgIGRlZmluZSBXSU5FTElCX05BTUVfQVcoZnVuYykgZnVuYyMjMzJBCisjICBlbmRpZiAgLyogVU5JQ09ERSAqLworIyBlbHNlICAgLyogV0lORUxJQjMyICovCisjICBkZWZpbmUgV0lORUxJQl9OQU1FKGZ1bmMpICAgICBmdW5jIyMxNgorIyAgZGVmaW5lIFdJTkVMSUJfTkFNRV9BVyhmdW5jKSAgZnVuYyMjMTYKKyMgZW5kaWYgIC8qIFdJTkVMSUIzMiAqLworI2Vsc2UgICAvKiBXSU5FTElCICovCisjIGRlZmluZSBXSU5FTElCX05BTUUoZnVuYykgICAgICAvKiBub3RoaW5nICovCisjIGRlZmluZSBXSU5FTElCX05BTUVfQVcoZnVuYykgICAvKiBub3RoaW5nICovCisjZW5kaWYgIC8qIFdJTkVMSUIgKi8KKworI2lmZGVmIFdJTkVMSUIKKyMgZGVmaW5lIERFQ0xfV0lORUxJQl9UWVBFKHR5cGUpICAgICB0eXBlZGVmIFdJTkVMSUJfTkFNRSh0eXBlKSB0eXBlCisjIGRlZmluZSBERUNMX1dJTkVMSUJfVFlQRV9BVyh0eXBlKSAgdHlwZWRlZiBXSU5FTElCX05BTUVfQVcodHlwZSkgdHlwZQorI2Vsc2UgICAvKiBXSU5FTElCICovCisjIGRlZmluZSBERUNMX1dJTkVMSUJfVFlQRSh0eXBlKSAgICAgLyogbm90aGluZyAqLworIyBkZWZpbmUgREVDTF9XSU5FTElCX1RZUEVfQVcodHlwZSkgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZiAgLyogV0lORUxJQiAqLworCisvKiBTdGFuZGFyZCBkYXRhIHR5cGVzLiBUaGVzZSBhcmUgdGhlIHNhbWUgZm9yIGVtdWxhdG9yIGFuZCBsaWJyYXJ5LiAqLworCit0eXBlZGVmIHZvaWQgICAgICAgICAgICBWT0lEOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBVSU5UMTY7Cit0eXBlZGVmIGludCAgICAgICAgICAgICBJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgIFVJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFdPUkQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBEV09SRDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIEJPT0w7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBCWVRFOwordHlwZWRlZiBsb25nICAgICAgICAgICAgTE9ORzsKK3R5cGVkZWYgY2hhciAgICAgICAgICAgIENIQVI7CiAvKiBTb21lIHN5c3RlbXMgbWlnaHQgaGF2ZSB3Y2hhcl90LCBidXQgd2UgcmVhbGx5IG5lZWQgMTYgYml0IGNoYXJhY3RlcnMgKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV0NIQVI7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBXQ0hBUjsKIAotI2lmZGVmIFdJTkVMSUIzMgotdHlwZWRlZiBpbnQgSU5UOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDsKLXR5cGVkZWYgY2hhciBUQ0hBUjsgIC8qIFNob3VsZCBwcm9iYWJseSBldmVudHVhbGx5IGJlIHVuc2lnbmVkIHNob3J0ICovCi10eXBlZGVmIHZvaWQqIE5QVk9JRDsKKy8qIEhhbmRsZXMgdHlwZXMuIFRoZXNlIGFyZSB0aGUgc2FtZSBmb3IgZW11bGF0b3IgYW5kIGxpYnJhcnkuICovCisKK3R5cGVkZWYgVUlOVDE2ICAgICAgICAgIEhBTkRMRTE2OwordHlwZWRlZiBVSU5UMzIgICAgICAgICAgSEFORExFMzI7Cit0eXBlZGVmIFVJTlQxNiAgICAgICAgICBXUEFSQU0xNjsKK3R5cGVkZWYgVUlOVDMyICAgICAgICAgIFdQQVJBTTMyOwordHlwZWRlZiBMT05HICAgICAgICAgICAgTFBBUkFNOwordHlwZWRlZiBMT05HICAgICAgICAgICAgTFJFU1VMVDsKK3R5cGVkZWYgV09SRCAgICAgICAgICAgIEFUT007Cit0eXBlZGVmIFdPUkQgICAgICAgICAgICBDQVRDSEJVRls5XTsKK3R5cGVkZWYgV09SRCAgICAgICAgICAgKkxQQ0FUQ0hCVUY7Cit0eXBlZGVmIERXT1JEICAgICAgICAgICBBQ0NFU1NfTUFTSzsKK3R5cGVkZWYgQUNDRVNTX01BU0sgICAgIFJFR1NBTTsKK3R5cGVkZWYgSU5UMTYgICAgICAgICAgIEhGSUxFOwordHlwZWRlZiBIQU5ETEUzMiAgICAgICAgSEhPT0s7Cit0eXBlZGVmIEhBTkRMRTMyICAgICAgICBIS0VZOworCisvKiBQb2ludGVycyB0eXBlcy4gVGhlc2UgYXJlIHRoZSBzYW1lIGZvciBlbXVsYXRvciBhbmQgbGlicmFyeS4gKi8KKwordHlwZWRlZiBDSEFSICAgICAgICAgICAqTFBTVFI7Cit0eXBlZGVmIGNvbnN0IENIQVIgICAgICpMUENTVFI7Cit0eXBlZGVmIFdDSEFSICAgICAgICAgICpMUFdTVFI7Cit0eXBlZGVmIGNvbnN0IFdDSEFSICAgICpMUENXU1RSOwordHlwZWRlZiBCWVRFICAgICAgICAgICAqTFBCWVRFOwordHlwZWRlZiBXT1JEICAgICAgICAgICAqTFBXT1JEOwordHlwZWRlZiBEV09SRCAgICAgICAgICAqTFBEV09SRDsKK3R5cGVkZWYgTE9ORyAgICAgICAgICAgKkxQTE9ORzsKK3R5cGVkZWYgVk9JRCAgICAgICAgICAgKkxQVk9JRDsKK3R5cGVkZWYgY29uc3QgVk9JRCAgICAgKkxQQ1ZPSUQ7Cit0eXBlZGVmIElOVDE2ICAgICAgICAgICpMUElOVDE2OwordHlwZWRlZiBVSU5UMTYgICAgICAgICAqTFBVSU5UMTY7Cit0eXBlZGVmIElOVDMyICAgICAgICAgICpMUElOVDMyOwordHlwZWRlZiBVSU5UMzIgICAgICAgICAqTFBVSU5UMzI7Cit0eXBlZGVmIEhLRVkgICAgICAgICAgICpMUEhLRVk7CisKKy8qIFNwZWNpYWwgY2FzZTogYSBzZWdtZW50ZWQgcG9pbnRlciBpcyBqdXN0IGEgcG9pbnRlciBpbiB0aGUgbGlicmFyeS4gKi8KKworI2lmZGVmIFdJTkVMSUIKIHR5cGVkZWYgdm9pZCogU0VHUFRSOwotI2Vsc2UgIC8qIFdJTkVMSUIzMiAqLwotdHlwZWRlZiBzaG9ydCBJTlQ7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQ7Ci10eXBlZGVmIGNoYXIgVENIQVI7ICAvKiBUQ0hBUiBpcyBqdXN0IGNoYXIgaW4gV2luMTYgKi8KLXR5cGVkZWYgV09SRCBOUFZPSUQ7CisjZWxzZSAgLyogV0lORUxJQiAqLwogdHlwZWRlZiBEV09SRCBTRUdQVFI7Ci0jZW5kaWYgIC8qIFdJTkVMSUIzMiAqLworI2VuZGlmIC8qIFdJTkVMSUIgKi8KIAotdHlwZWRlZiBVSU5UMTYgSEFORExFMTY7Ci10eXBlZGVmIFVJTlQzMiBIQU5ETEUzMjsKLXR5cGVkZWYgVUlOVCBIQU5ETEU7Ci10eXBlZGVmIFVJTlQgV1BBUkFNOwotdHlwZWRlZiBMT05HIExQQVJBTTsKLXR5cGVkZWYgTE9ORyBMUkVTVUxUOwotdHlwZWRlZiBJTlQgSEZJTEU7Ci10eXBlZGVmIERXT1JEIEhIT09LOwotdHlwZWRlZiBjaGFyICpMUFNUUjsKLXR5cGVkZWYgQllURSAqTFBCWVRFOwotdHlwZWRlZiBjb25zdCBjaGFyICpMUENTVFI7Ci10eXBlZGVmIFRDSEFSICpMUFRTVFI7Ci10eXBlZGVmIGNvbnN0IFRDSEFSICpMUENUU1RSOwotdHlwZWRlZiBXQ0hBUiAqTFBXU1RSOwotdHlwZWRlZiBjb25zdCBXQ0hBUiAqTFBDV1NUUjsKLXR5cGVkZWYgY2hhciAqTlBTVFI7Ci10eXBlZGVmIElOVCAqTFBJTlQ7Ci10eXBlZGVmIFVJTlQgKkxQVUlOVDsKLXR5cGVkZWYgV09SRCAqTFBXT1JEOwotdHlwZWRlZiBEV09SRCAqTFBEV09SRDsKLXR5cGVkZWYgTE9ORyAqTFBMT05HOwotdHlwZWRlZiB2b2lkICpMUFZPSUQ7Ci10eXBlZGVmIGNvbnN0IHZvaWQgKkxQQ1ZPSUQ7Ci10eXBlZGVmIFdPUkQgQ0FUQ0hCVUZbOV07Ci10eXBlZGVmIFdPUkQgKkxQQ0FUQ0hCVUY7Ci10eXBlZGVmIERXT1JEIEFDQ0VTU19NQVNLOwotdHlwZWRlZiBBQ0NFU1NfTUFTSyBSRUdTQU07CisvKiBIYW5kbGUgdHlwZXMgdGhhdCBleGlzdCBib3RoIGluIFdpbjE2IGFuZCBXaW4zMi4gKi8KIAotI2RlZmluZSBERUNMQVJFX0hBTkRMRShhKSBcCi0gICAgdHlwZWRlZiBIQU5ETEUgYTsgXAotICAgIHR5cGVkZWYgSEFORExFMTYgYSMjMTY7IFwKLSAgICB0eXBlZGVmIEhBTkRMRTMyIGEjIzMyOwotCisjZGVmaW5lIERFQ0xBUkVfSEFORExFKGEpICB0eXBlZGVmIEhBTkRMRTE2IGEjIzE2OyB0eXBlZGVmIEhBTkRMRTMyIGEjIzMyOworREVDTEFSRV9IQU5ETEUoSEFDQ0VMKTsKIERFQ0xBUkVfSEFORExFKEhCSVRNQVApOwogREVDTEFSRV9IQU5ETEUoSEJSVVNIKTsKLURFQ0xBUkVfSEFORExFKEhDTEFTUyk7CiBERUNMQVJFX0hBTkRMRShIQ1VSU09SKTsKIERFQ0xBUkVfSEFORExFKEhEQyk7CiBERUNMQVJFX0hBTkRMRShIRFJPUCk7CkBAIC05Niw2ICsxMzEsMTAgQEAKIERFQ0xBUkVfSEFORExFKEhMT0NBTCk7CiBERUNMQVJFX0hBTkRMRShITUVOVSk7CiBERUNMQVJFX0hBTkRMRShITUVUQUZJTEUpOworREVDTEFSRV9IQU5ETEUoSE1JREkpOworREVDTEFSRV9IQU5ETEUoSE1JRElJTik7CitERUNMQVJFX0hBTkRMRShITUlESU9VVCk7CitERUNMQVJFX0hBTkRMRShITU1JTyk7CiBERUNMQVJFX0hBTkRMRShITU9EVUxFKTsKIERFQ0xBUkVfSEFORExFKEhQQUxFVFRFKTsKIERFQ0xBUkVfSEFORExFKEhQRU4pOwpAQCAtMTAzLDY5ICsxNDIsMjA3IEBACiBERUNMQVJFX0hBTkRMRShIUkdOKTsKIERFQ0xBUkVfSEFORExFKEhSU1JDKTsKIERFQ0xBUkVfSEFORExFKEhUQVNLKTsKK0RFQ0xBUkVfSEFORExFKEhXQVZFKTsKK0RFQ0xBUkVfSEFORExFKEhXQVZFSU4pOworREVDTEFSRV9IQU5ETEUoSFdBVkVPVVQpOwogREVDTEFSRV9IQU5ETEUoSFdORCk7Ci1ERUNMQVJFX0hBTkRMRShMT0NBTEhBTkRMRSk7Ci0jaWZkZWYgV0lORUxJQjMyCi1ERUNMQVJFX0hBTkRMRShIS0VZKTsKLSNlbHNlCi10eXBlZGVmIERXT1JEIEhLRVk7Ci0jZW5kaWYKLXR5cGVkZWYgSEtFWSogTFBIS0VZOwotdHlwZWRlZiBIR0xPQkFMIEdMT0JBTEhBTkRMRTsKKyN1bmRlZiBERUNMQVJFX0hBTkRMRQorCisvKiBDYWxsYmFjayBmdW5jdGlvbiBwb2ludGVycyB0eXBlcyBmb3IgV2luMTYuICovCiAKICNpZmRlZiBXSU5FTElCCi10eXBlZGVmIGxvbmcgKCpGQVJQUk9DKSgpOwotdHlwZWRlZiBMUkVTVUxUICgqV05EUFJPQykoSFdORCxVSU5ULFdQQVJBTSxMUEFSQU0pOwotdHlwZWRlZiBMUkVTVUxUICgqV05ERU5VTVBST0MpKEhXTkQsTFBBUkFNKTsKK3R5cGVkZWYgTFJFU1VMVCAoKldORFBST0MxNikoSFdORDE2LFVJTlQxNixXUEFSQU0xNixMUEFSQU0pOwordHlwZWRlZiBMUkVTVUxUICgqRkFSUFJPQzE2KSgpOworI2Vsc2UKKy8qIEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBTRUdQVFIgaW4gV2luMTYgKi8KK3R5cGVkZWYgU0VHUFRSIEZBUlBST0MxNjsKK3R5cGVkZWYgU0VHUFRSIFdORFBST0MxNjsKKyNlbmRpZgorCisvKiBDYWxsYmFjayBmdW5jdGlvbiBwb2ludGVycyB0eXBlcyBmb3IgV2luMzIuICovCisKK3R5cGVkZWYgTFJFU1VMVCAoKkZBUlBST0MzMikoKTsKK3R5cGVkZWYgTFJFU1VMVCAoKldORFBST0MzMikoSFdORDMyLFVJTlQzMixXUEFSQU0zMixMUEFSQU0pOworCisvKiBUQ0hBUiBkYXRhIHR5cGVzIGRlZmluaXRpb25zIGZvciBXaW5lbGliLiAqLworLyogVGhlc2UgdHlwZXMgYXJlIF9ub3RfIGRlZmluZWQgZm9yIHRoZSBlbXVsYXRvciwgYmVjYXVzZSB0aGV5ICovCisvKiBkZXBlbmQgb24gdGhlIFVOSUNPREUgbWFjcm8gdGhhdCBvbmx5IGV4aXN0cyBpbiB1c2VyJ3MgY29kZS4gKi8KKworI2lmZGVmIFdJTkVMSUIKKyMgaWYgZGVmaW5lZChXSU5FTElCMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKK3R5cGVkZWYgV0NIQVIgVENIQVI7Cit0eXBlZGVmIExQV1NUUiBMUFRTVFI7Cit0eXBlZGVmIExQQ1dTVFIgTFBDVFNUUjsKKyMgZWxzZSAgLyogV0lORUxJQjMyICYmIFVOSUNPREUgKi8KK3R5cGVkZWYgQ0hBUiBUQ0hBUjsKK3R5cGVkZWYgTFBTVFIgTFBUU1RSOwordHlwZWRlZiBMUENTVFIgTFBDVFNUUjsKKyMgZW5kaWYgLyogV0lORUxJQjMyICYmIFVOSUNPREUgKi8KKyNlbmRpZiAgIC8qIFdJTkVMSUIgKi8KKworLyogRGF0YSB0eXBlcyBzcGVjaWZpYyB0byB0aGUgbGlicmFyeS4gVGhlc2UgZG8gX25vdF8gZXhpc3QgaW4gdGhlIGVtdWxhdG9yLiAqLworCitERUNMX1dJTkVMSUJfVFlQRShJTlQpOworREVDTF9XSU5FTElCX1RZUEUoTFBJTlQpOworREVDTF9XSU5FTElCX1RZUEUoTFBVSU5UKTsKK0RFQ0xfV0lORUxJQl9UWVBFKFVJTlQpOworREVDTF9XSU5FTElCX1RZUEUoV1BBUkFNKTsKKworREVDTF9XSU5FTElCX1RZUEUoSEFDQ0VMKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhBTkRMRSk7CitERUNMX1dJTkVMSUJfVFlQRShIQklUTUFQKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhCUlVTSCk7CitERUNMX1dJTkVMSUJfVFlQRShIQ1VSU09SKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhEQyk7CitERUNMX1dJTkVMSUJfVFlQRShIRFJPUCk7CitERUNMX1dJTkVMSUJfVFlQRShIRFJWUik7CitERUNMX1dJTkVMSUJfVFlQRShIRFdQKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhGT05UKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhHRElPQkopOworREVDTF9XSU5FTElCX1RZUEUoSEdMT0JBTCk7CitERUNMX1dJTkVMSUJfVFlQRShISUNPTik7CitERUNMX1dJTkVMSUJfVFlQRShISU5TVEFOQ0UpOworREVDTF9XSU5FTElCX1RZUEUoSExPQ0FMKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhNRU5VKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhNRVRBRklMRSk7CitERUNMX1dJTkVMSUJfVFlQRShITUlESSk7CitERUNMX1dJTkVMSUJfVFlQRShITUlESUlOKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhNSURJT1VUKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhNTUlPKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhNT0RVTEUpOworREVDTF9XSU5FTElCX1RZUEUoSFBBTEVUVEUpOworREVDTF9XSU5FTElCX1RZUEUoSFBFTik7CitERUNMX1dJTkVMSUJfVFlQRShIUVVFVUUpOworREVDTF9XSU5FTElCX1RZUEUoSFJHTik7CitERUNMX1dJTkVMSUJfVFlQRShIUlNSQyk7CitERUNMX1dJTkVMSUJfVFlQRShIVEFTSyk7CitERUNMX1dJTkVMSUJfVFlQRShIV0FWRSk7CitERUNMX1dJTkVMSUJfVFlQRShIV0FWRUlOKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhXQVZFT1VUKTsKK0RFQ0xfV0lORUxJQl9UWVBFKEhXTkQpOworCitERUNMX1dJTkVMSUJfVFlQRShGQVJQUk9DKTsKK0RFQ0xfV0lORUxJQl9UWVBFKFdORFBST0MpOworCisvKiBMaWJyYXJ5IGRhdGEgdHlwZXMgZGVmaW5lZCBhcyBhIHRyYW5zaXRpb24gYWlkIGZvciB0aGUgZW11bGF0b3IuICovCisvKiBUaGVzZSBzaG91bGQgX25vdF8gYmUgdXNlZCBpbiB0aGUgZW11bGF0b3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb21lZGF5LiAqLworCisjaWZuZGVmIE5PX1RSQU5TSVRJT05fVFlQRVMKKworI2lmbmRlZiBXSU5FTElCCit0eXBlZGVmIElOVDE2IElOVDsKK3R5cGVkZWYgVUlOVDE2IFVJTlQ7Cit0eXBlZGVmIFdQQVJBTTE2IFdQQVJBTTsKK3R5cGVkZWYgSEFORExFMTYgSEFDQ0VMOwordHlwZWRlZiBIQU5ETEUxNiBIQU5ETEU7Cit0eXBlZGVmIEhBTkRMRTE2IEhCSVRNQVA7Cit0eXBlZGVmIEhBTkRMRTE2IEhCUlVTSDsKK3R5cGVkZWYgSEFORExFMTYgSENVUlNPUjsKK3R5cGVkZWYgSEFORExFMTYgSERDOwordHlwZWRlZiBIQU5ETEUxNiBIRFJPUDsKK3R5cGVkZWYgSEFORExFMTYgSERSVlI7Cit0eXBlZGVmIEhBTkRMRTE2IEhEV1A7Cit0eXBlZGVmIEhBTkRMRTE2IEhGT05UOwordHlwZWRlZiBIQU5ETEUxNiBIR0RJT0JKOwordHlwZWRlZiBIQU5ETEUxNiBIR0xPQkFMOwordHlwZWRlZiBIQU5ETEUxNiBISUNPTjsKK3R5cGVkZWYgSEFORExFMTYgSElOU1RBTkNFOwordHlwZWRlZiBIQU5ETEUxNiBITUVOVTsKK3R5cGVkZWYgSEFORExFMTYgSE1FVEFGSUxFOwordHlwZWRlZiBIQU5ETEUxNiBITUlESTsKK3R5cGVkZWYgSEFORExFMTYgSE1JRElJTjsKK3R5cGVkZWYgSEFORExFMTYgSE1JRElPVVQ7Cit0eXBlZGVmIEhBTkRMRTE2IEhNTUlPOwordHlwZWRlZiBIQU5ETEUxNiBITU9EVUxFOwordHlwZWRlZiBIQU5ETEUxNiBIUEFMRVRURTsKK3R5cGVkZWYgSEFORExFMTYgSFBFTjsKK3R5cGVkZWYgSEFORExFMTYgSFFVRVVFOwordHlwZWRlZiBIQU5ETEUxNiBIUkdOOwordHlwZWRlZiBIQU5ETEUxNiBIUlNSQzsKK3R5cGVkZWYgSEFORExFMTYgSFRBU0s7Cit0eXBlZGVmIEhBTkRMRTE2IEhXQVZFOwordHlwZWRlZiBIQU5ETEUxNiBIV0FWRUlOOwordHlwZWRlZiBIQU5ETEUxNiBIV0FWRU9VVDsKK3R5cGVkZWYgSEFORExFMTYgSFdORDsKK3R5cGVkZWYgRkFSUFJPQzE2IEZBUlBST0M7Cit0eXBlZGVmIFdORFBST0MxNiBXTkRQUk9DOworI2VuZGlmICAvKiBXSU5FTElCICovCisKKy8qIENhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXJzIHR5cGVzLiAqLworCisjaWZkZWYgV0lORUxJQgordHlwZWRlZiBMT05HICgqRFJJVkVSUFJPQykoRFdPUkQsIEhEUlZSLCBVSU5ULCBMUEFSQU0sIExQQVJBTSk7Cit0eXBlZGVmIGludCAoKkVESVRXT1JEQlJFQUtQUk9DKShMUFNUUiBscGNoLCBpbnQgaWNoQ3VycmVudCwgaW50IGNjaCxpbnQgY29kZSk7CiAvKnR5cGVkZWYgaW50ICgqRk9OVEVOVU1QUk9DKShjb25zdCBMT0dGT05UKixjb25zdCBURVhUTUVUUklDKixEV09SRCxMUEFSQU0pOyovCiB0eXBlZGVmIGludCAoKkZPTlRFTlVNUFJPQykoY29uc3Qgdm9pZCosY29uc3Qgdm9pZCosRFdPUkQsTFBBUkFNKTsKIHR5cGVkZWYgaW50ICgqR09CSkVOVU1QUk9DKShMUFZPSUQsTFBBUkFNKTsKLXR5cGVkZWYgQk9PTCAoKlBST1BFTlVNUFJPQykoSFdORCxMUENUU1RSLEhBTkRMRSk7CiAvKnR5cGVkZWYgaW50ICgqTUZFTlVNUFJPQykoSERDLEhBTkRMRVRBQkxFKixNRVRBUkVDT1JEKixpbnQsTFBBUkFNKTsqLwogdHlwZWRlZiBpbnQgKCpNRkVOVU1QUk9DKShIREMsdm9pZCosdm9pZCosaW50LExQQVJBTSk7Cit0eXBlZGVmIEJPT0wgKCpQUk9QRU5VTVBST0MpKEhXTkQsTFBDVFNUUixIQU5ETEUpOwordHlwZWRlZiBMUkVTVUxUICgqV05ERU5VTVBST0MpKEhXTkQsTFBBUkFNKTsKICNlbHNlCi10eXBlZGVmIFNFR1BUUiBGQVJQUk9DOwotdHlwZWRlZiBTRUdQVFIgV05EUFJPQzsKLXR5cGVkZWYgU0VHUFRSIFdOREVOVU1QUk9DOwordHlwZWRlZiBTRUdQVFIgRFJJVkVSUFJPQzsKK3R5cGVkZWYgU0VHUFRSIEVESVRXT1JEQlJFQUtQUk9DOwogdHlwZWRlZiBTRUdQVFIgRk9OVEVOVU1QUk9DOwogdHlwZWRlZiBTRUdQVFIgR09CSkVOVU1QUk9DOwotdHlwZWRlZiBTRUdQVFIgUFJPUEVOVU1QUk9DOwogdHlwZWRlZiBTRUdQVFIgTUZFTlVNUFJPQzsKK3R5cGVkZWYgU0VHUFRSIFBST1BFTlVNUFJPQzsKK3R5cGVkZWYgU0VHUFRSIFdOREVOVU1QUk9DOwogI2VuZGlmCiB0eXBlZGVmIEZBUlBST0MgRExHUFJPQzsKIHR5cGVkZWYgRkFSUFJPQyBIT09LUFJPQzsKIAotI2RlZmluZSBUUlVFIDEKKyNlbmRpZiAgLyogTk9fVFJBTlNJVElPTl9UWVBFUyAqLworCisvKiBNaXNjLiBjb25zdGFudHMuICovCisKKyNpZmRlZiBGQUxTRQorI3VuZGVmIEZBTFNFCisjZW5kaWYKICNkZWZpbmUgRkFMU0UgMAotI2RlZmluZSBDV19VU0VERUZBVUxUICgoSU5UKTB4ODAwMCkKLSNkZWZpbmUgRkFSCi0jZGVmaW5lIF9mYXIKKworI2lmZGVmIFRSVUUKKyN1bmRlZiBUUlVFCisjZW5kaWYKKyNkZWZpbmUgVFJVRSAgMQorCisjaWZkZWYgTlVMTAorI3VuZGVmIE5VTEwKKyNlbmRpZgorI2RlZmluZSBOVUxMICAwCisKKy8qIERlZmluZSBzb21lIGVtcHR5IG1hY3JvcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFdpbmRvd3MgY29kZS4gKi8KKworI2lmZGVmIFdJTkVMSUIKKyNkZWZpbmUgQ0FMTEJBQ0sKICNkZWZpbmUgTkVBUgotI2RlZmluZSBfbmVhcgorI2RlZmluZSBGQVIKICNkZWZpbmUgUEFTQ0FMCisjZGVmaW5lIFdJTkFQSQorI2RlZmluZSBfZmFyCisjZGVmaW5lIF9uZWFyCiAjZGVmaW5lIF9wYXNjYWwKICNkZWZpbmUgX19leHBvcnQKLSNkZWZpbmUgVk9JRCAgICAgICAgICAgICAgICB2b2lkCi0jZGVmaW5lIFdJTkFQSSAgICAgICAgICAgICAgUEFTQ0FMCi0jZGVmaW5lIENBTExCQUNLICAgICAgICAgICAgUEFTQ0FMCisjZW5kaWYgIC8qIFdJTkVMSUIgKi8KIAotI3VuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAwCisvKiBNYWNybyBmb3Igc3RydWN0dXJlIHBhY2tpbmcuICovCiAKICNpZmRlZiBXSU5FTElCCiAjZGVmaW5lIFdJTkVfUEFDS0VECiAjZWxzZQogI2RlZmluZSBXSU5FX1BBQ0tFRCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKLSNlbmRpZgorI2VuZGlmICAvKiBXSU5FTElCICovCiAKLSNkZWZpbmUgTE9CWVRFKHcpICAgICAgICAgICAoKEJZVEUpKFVJTlQpKHcpKQotI2RlZmluZSBISUJZVEUodykgICAgICAgICAgICgoQllURSkoKFVJTlQpKHcpID4+IDgpKQorLyogTWFjcm9zIHRvIHNwbGl0IHdvcmRzIGFuZCBsb25ncy4gKi8KKworI2RlZmluZSBMT0JZVEUodykgICAgICAgICAgICgoQllURSkoV09SRCkodykpCisjZGVmaW5lIEhJQllURSh3KSAgICAgICAgICAgKChCWVRFKSgoV09SRCkodykgPj4gOCkpCiAKICNkZWZpbmUgTE9XT1JEKGwpICAgICAgICAgICAoKFdPUkQpKERXT1JEKShsKSkKICNkZWZpbmUgSElXT1JEKGwpICAgICAgICAgICAoKFdPUkQpKChEV09SRCkobCkgPj4gMTYpKQogCi0jZGVmaW5lIFNMT1dPUkQobCkgICAgICAgICAgICgoSU5UKShMT05HKShsKSkKLSNkZWZpbmUgU0hJV09SRChsKSAgICAgICAgICAgKChJTlQpKChMT05HKShsKSA+PiAxNikpCisjZGVmaW5lIFNMT1dPUkQobCkgICAgICAgICAgICgoSU5UMTYpKExPTkcpKGwpKQorI2RlZmluZSBTSElXT1JEKGwpICAgICAgICAgICAoKElOVDE2KSgoTE9ORykobCkgPj4gMTYpKQogCiAjZGVmaW5lIE1BS0VMT05HKGxvdywgaGlnaCkgKChMT05HKSgoKFdPUkQpKGxvdykpIHwgXAogCQkJCSAgICAoKChEV09SRCkoKFdPUkQpKGhpZ2gpKSkgPDwgMTYpKSkKQEAgLTE3Myw2ICszNTAsOCBAQAogI2RlZmluZSBTRUxFQ1RPUk9GKHB0cikgICAgIChISVdPUkQocHRyKSkKICNkZWZpbmUgT0ZGU0VUT0YocHRyKSAgICAgICAoTE9XT1JEKHB0cikpCiAKKy8qIE1hY3JvcyB0byBhY2Nlc3MgdW5hbGlnbmVkIG9yIHdyb25nLWVuZGlhbiBXT1JEcyBhbmQgRFdPUkRzLiAqLworCiAjaWYgIWRlZmluZWQoV0lORUxJQikgfHwgZGVmaW5lZChfX2kzODZfXykKICNkZWZpbmUgUFVUX1dPUkQocHRyLHcpICAgKCooV09SRCAqKShwdHIpID0gKHcpKQogI2RlZmluZSBHRVRfV09SRChwdHIpICAgICAoKihXT1JEICopKHB0cikpCkBAIC0xODksMTMgKzM2OCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERXT1JEKUdFVF9XT1JEKChXT1JEICopKHB0cikrMSkgPDwgMTYpKSkKICNlbmRpZiAgLyogIVdJTkVMSUIgfHwgX19pMzg2X18gKi8KIAorLyogTUlOIGFuZCBNQVggbWFjcm9zICovCiAKLSNpZm5kZWYgTUFYCisjaWZkZWYgTUFYCisjdW5kZWYgTUFYCisjZW5kaWYKICNkZWZpbmUgTUFYKGEsYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQotI2VuZGlmCiAKLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTihhLGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKyNpZmRlZiBNSU4KKyN1bmRlZiBNSU4KICNlbmRpZgorI2RlZmluZSBNSU4oYSxiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCiAKICNlbmRpZiAvKiBfX1dJTkVfV0lOVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW51c2VyLmggYi9pbmNsdWRlL3dpbnVzZXIuaAppbmRleCA5ZWUyNzRmLi5iOGRjZGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbnVzZXIuaAorKysgYi9pbmNsdWRlL3dpbnVzZXIuaApAQCAtNDMsNyArNDMsNyBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgICBVSU5UMTYgICAgICBzdHlsZTsKLSAgICBXTkRQUk9DICAgICBscGZuV25kUHJvYyBXSU5FX1BBQ0tFRDsKKyAgICBXTkRQUk9DMTYgICBscGZuV25kUHJvYyBXSU5FX1BBQ0tFRDsKICAgICBJTlQxNiAgICAgICBjYkNsc0V4dHJhOwogICAgIElOVDE2ICAgICAgIGNiV25kRXh0cmE7CiAgICAgSEFORExFMTYgICAgaEluc3RhbmNlOwpAQCAtOTMsNSArOTMsNTUgQEAKIERFQ0xfV0lORUxJQl9UWVBFX0FXKFdORENMQVNTRVgpOwogREVDTF9XSU5FTElCX1RZUEVfQVcoTFBXTkRDTEFTU0VYKTsKIAorI2RlZmluZSBDU19WUkVEUkFXICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBDU19IUkVEUkFXICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBDU19LRVlDVlRXSU5ET1cgICAgIDB4MDAwNAorI2RlZmluZSBDU19EQkxDTEtTICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBDU19PV05EQyAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBDU19DTEFTU0RDICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBDU19QQVJFTlREQyAgICAgICAgIDB4MDA4MAorI2RlZmluZSBDU19OT0tFWUNWVCAgICAgICAgIDB4MDEwMAorI2RlZmluZSBDU19OT0NMT1NFICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBDU19TQVZFQklUUyAgICAgICAgIDB4MDgwMAorI2RlZmluZSBDU19CWVRFQUxJR05DTElFTlQgIDB4MTAwMAorI2RlZmluZSBDU19CWVRFQUxJR05XSU5ET1cgIDB4MjAwMAorI2RlZmluZSBDU19HTE9CQUxDTEFTUyAgICAgIDB4NDAwMAorCisgIC8qIE9mZnNldHMgZm9yIEdldENsYXNzTG9uZygpIGFuZCBHZXRDbGFzc1dvcmQoKSAqLworI2RlZmluZSBHQ0xfTUVOVU5BTUUgICAgICAgICgtOCkKKyNkZWZpbmUgR0NXX0hCUkJBQ0tHUk9VTkQgICAoLTEwKQorI2RlZmluZSBHQ0xfSEJSQkFDS0dST1VORCAgIEdDV19IQlJCQUNLR1JPVU5ECisjZGVmaW5lIEdDV19IQ1VSU09SICAgICAgICAgKC0xMikKKyNkZWZpbmUgR0NMX0hDVVJTT1IgICAgICAgICBHQ1dfSENVUlNPUgorI2RlZmluZSBHQ1dfSElDT04gICAgICAgICAgICgtMTQpCisjZGVmaW5lIEdDTF9ISUNPTiAgICAgICAgICAgR0NXX0hJQ09OCisjZGVmaW5lIEdDV19ITU9EVUxFICAgICAgICAgKC0xNikKKyNkZWZpbmUgR0NMX0hNT0RVTEUgICAgICAgICBHQ1dfSE1PRFVMRQorI2RlZmluZSBHQ1dfQ0JXTkRFWFRSQSAgICAgICgtMTgpCisjZGVmaW5lIEdDTF9DQldOREVYVFJBICAgICAgR0NXX0NCV05ERVhUUkEKKyNkZWZpbmUgR0NXX0NCQ0xTRVhUUkEgICAgICAoLTIwKQorI2RlZmluZSBHQ0xfQ0JDTFNFWFRSQSAgICAgIEdDV19DQkNMU0VYVFJBCisjZGVmaW5lIEdDTF9XTkRQUk9DICAgICAgICAgKC0yNCkKKyNkZWZpbmUgR0NXX1NUWUxFICAgICAgICAgICAoLTI2KQorI2RlZmluZSBHQ0xfU1RZTEUgICAgICAgICAgIEdDV19TVFlMRQorI2RlZmluZSBHQ1dfQVRPTSAgICAgICAgICAgICgtMzIpCisjZGVmaW5lIEdDTF9ISUNPTlNNICAgICAgICAgKC0zNCkKKworQVRPTSAgICAgICBSZWdpc3RlckNsYXNzMTYoY29uc3QgV05EQ0xBU1MxNiopOworQVRPTSAgICAgICBSZWdpc3RlckNsYXNzMzJBKGNvbnN0IFdORENMQVNTMzJBICopOworQVRPTSAgICAgICBSZWdpc3RlckNsYXNzMzJXKGNvbnN0IFdORENMQVNTMzJXICopOworI2RlZmluZSBSZWdpc3RlckNsYXNzIFdJTkVMSUJfTkFNRV9BVyhSZWdpc3RlckNsYXNzKQorQVRPTSAgICAgICBSZWdpc3RlckNsYXNzRXgzMkEoY29uc3QgV05EQ0xBU1NFWDMyQSAqKTsKK0FUT00gICAgICAgUmVnaXN0ZXJDbGFzc0V4MzJXKGNvbnN0IFdORENMQVNTRVgzMlcgKik7CisjZGVmaW5lIFJlZ2lzdGVyQ2xhc3NFeCBXSU5FTElCX05BTUVfQVcoUmVnaXN0ZXJDbGFzc0V4KQorQk9PTCAgICAgICBVbnJlZ2lzdGVyQ2xhc3MxNihTRUdQVFIsSElOU1RBTkNFMTYpOworQk9PTCAgICAgICBVbnJlZ2lzdGVyQ2xhc3MzMkEoTFBDU1RSLEhJTlNUQU5DRTMyKTsKK0JPT0wgICAgICAgVW5yZWdpc3RlckNsYXNzMzJXKExQQ1dTVFIsSElOU1RBTkNFMzIpOworI2RlZmluZSBVbnJlZ2lzdGVyQ2xhc3MgV0lORUxJQl9OQU1FX0FXKFVucmVnaXN0ZXJDbGFzcykKKworQk9PTCAgICAgICBHZXRDbGFzc0luZm8oSEFORExFLFNFR1BUUixXTkRDTEFTUzE2ICopOworTE9ORyAgICAgICBHZXRDbGFzc0xvbmcoSFdORCxzaG9ydCk7CitpbnQgICAgICAgIEdldENsYXNzTmFtZShIV05ELExQU1RSLHNob3J0KTsKK0xPTkcgICAgICAgU2V0Q2xhc3NMb25nKEhXTkQsc2hvcnQsTE9ORyk7CiAKICNlbmRpZiAgLyogX19XSU5FX1dJTlVTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlicmFyeS9oZWFwLmMgYi9saWJyYXJ5L2hlYXAuYwppbmRleCBkOTQyOTAyLi5hM2FjODgxIDEwMDY0NAotLS0gYS9saWJyYXJ5L2hlYXAuYworKysgYi9saWJyYXJ5L2hlYXAuYwpAQCAtMTksOCArMTksNiBAQAogLyogQ29udHJvbHMgdGhlIGJsb2NrcyBwZXIgaGFuZGxlIHRhYmxlICovCiAjZGVmaW5lIE1BWEJMT0NLUyAxMDI0CiAKLXN0YXRpYyBjaGFyIENvcHlyaWdodCBbXSA9ICJDb3B5cmlnaHQgKEMpIDE5OTQgTWlndWVsIGRlIEljYXphIjsKLQogdHlwZWRlZiBzdHJ1Y3QgaGFuZGxlX3RhYmxlIHsKICAgICBzdHJ1Y3QgaGFuZGxlX3RhYmxlICpuZXh0OwogICAgIHZvaWQgKmJsb2NrcyBbTUFYQkxPQ0tTXTsKQEAgLTE2NiwxMiArMTY0LDEyIEBACiAgICAgcmV0dXJuIExvY2FsVW5sb2NrIChoTWVtKTsKIH0KIAotV09SRCBHbG9iYWxGbGFncyAoSEFORExFIGhNZW0pCitXT1JEIEdsb2JhbEZsYWdzMTYoSEFORExFIGhNZW0pCiB7CiAgICAgcmV0dXJuIExvY2FsRmxhZ3MgKGhNZW0pOwogfQogCi1EV09SRCBHbG9iYWxTaXplIChIQU5ETEUgaE1lbSkKK0RXT1JEIEdsb2JhbFNpemUxNihIQU5ETEUgaE1lbSkKIHsKICAgICByZXR1cm4gTG9jYWxTaXplIChoTWVtKTsKIH0KQEAgLTE4NCw3ICsxODIsNyBAQAogCXJldHVybiAweDAxMDAwMDAwOwkvKiBTaG91bGQgY2hlY2sgdGhlIGF2YWlsYWJsZSBjb3JlLiAqLwogfQogCi1IQU5ETEUgR2xvYmFsUmVBbGxvYyhIQU5ETEUgaE1lbSwgRFdPUkQgbmV3X3NpemUsIFdPUkQgZmxhZ3MpCitIQU5ETEUgR2xvYmFsUmVBbGxvYzE2KEhBTkRMRSBoTWVtLCBEV09SRCBuZXdfc2l6ZSwgV09SRCBmbGFncykKIHsKICAgICBpZiAoIShmbGFncyAmIEdNRU1fTU9ESUZZKSkKIAlyZXR1cm4gTG9jYWxSZUFsbG9jIChoTWVtLCBuZXdfc2l6ZSwgZmxhZ3MpOwpAQCAtMjA4LDcgKzIwNiw5IEBACiAKICNlbmRpZgogCi0jZWxzZSAvKiBXSU5FTElCMTYgKi8KKyNlbmRpZiAvKiBXSU5FTElCMTYgKi8KKworI2lmIDAKIAogdHlwZWRlZiBzdHJ1Y3QgeyBEV09SRCBTaXplOyBEV09SRCBQYWRkaW5nWzNdOyB9IEhlYXBEYXRhOwogCkBAIC0zMTksMTcgKzMxOSwxNyBAQAogICByZXR1cm4gMDsKIH0KIAotV09SRCBHbG9iYWxGbGFncyAoSEFORExFIGhNZW0pCitXT1JEIEdsb2JhbEZsYWdzMzIoSEFORExFIGhNZW0pCiB7CiAgIHJldHVybiBMb2NhbEZsYWdzIChoTWVtKTsKIH0KIAotRFdPUkQgR2xvYmFsU2l6ZSAoSEFORExFIGhNZW0pCitEV09SRCBHbG9iYWxTaXplMzIoSEFORExFIGhNZW0pCiB7CiAgIHJldHVybiBIRUFQX1NpemUgKGhNZW0pOwogfQogCi1IQU5ETEUgR2xvYmFsUmVBbGxvYyhIQU5ETEUgaE1lbSwgRFdPUkQgbmV3X3NpemUsIFdPUkQgZmxhZ3MpCitIQU5ETEUgR2xvYmFsUmVBbGxvYzMyKEhBTkRMRSBoTWVtLCBEV09SRCBuZXdfc2l6ZSwgV09SRCBmbGFncykKIHsKICAgaWYgKCEoZmxhZ3MgJiBHTUVNX01PRElGWSkpCiAgICAgcmV0dXJuIEhFQVBfUmVBbGxvYyAoaE1lbSwgbmV3X3NpemUsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2xpYnJhcnkvbWlzY3N0dWJzLmMgYi9saWJyYXJ5L21pc2NzdHVicy5jCmluZGV4IDQwN2RlOTYuLjFjZWU2Y2YgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvbWlzY3N0dWJzLmMKKysrIGIvbGlicmFyeS9taXNjc3R1YnMuYwpAQCAtNDQsMTIgKzQ0LDEzIEBACiAKIFdPUkQgQ2FsbFRvMTZfd29yZF8gKCBGQVJQUk9DIGZ1bmMsIFdPUkQgYXJnICkgeyByZXR1cm4gZnVuYyhhcmcpOyB9CiAKLXZvaWQgR2xvYmFsRnJlZUFsbChIQU5ETEUgb3duZXIpCisjaWYgMAordm9pZCBHbG9iYWxGcmVlQWxsKEhHTE9CQUwxNiBvd25lcikKIHsKICAgV0lORUxJQl9VTklNUCgiR2xvYmFsRnJlZUFsbCgpIik7CiB9CiAKLVNFR1BUUiBXSU4xNl9HbG9iYWxMb2NrKEhHTE9CQUwgaCkgCitTRUdQVFIgV0lOMTZfR2xvYmFsTG9jazE2KEhHTE9CQUwxNiBoKSAKICAgeyByZXR1cm4gKFNFR1BUUiloOyB9CiBITE9DQUwgTE9DQUxfRnJlZShXT1JEIGRzLCBITE9DQUwgaGFuZGxlKSAKICAgeyByZXR1cm4gTG9jYWxGcmVlKGhhbmRsZSk7IH0KQEAgLTEyOCw2ICsxMjksNyBAQAogICBmcHJpbnRmKHN0ZGVyciwiSkJQOiBHbG9iYWxIYW5kbGUoKSBpZ25vcmVkLlxuIik7CiAgIHJldHVybiAwOwogfQorI2VuZGlmCiAKIGV4dGVybiBMUkVTVUxUIEFDVElWQVRFQVBQX2NhbGxiYWNrKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsKIGV4dGVybiBMUkVTVUxUIEFib3V0RGxnUHJvYyhIV05ELFVJTlQsV1BBUkFNLExQQVJBTSk7CmRpZmYgLS1naXQgYS9saWJyYXJ5L3dpbm1haW4uYyBiL2xpYnJhcnkvd2lubWFpbi5jCmluZGV4IGQxYzBhYzAuLjQ1MDhhMzQgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvd2lubWFpbi5jCisrKyBiL2xpYnJhcnkvd2lubWFpbi5jCkBAIC04LDcgKzgsNyBAQAogZXh0ZXJuIGludCBNQUlOX0luaXQodm9pZCk7CiBleHRlcm4gQk9PTCBXSURHRVRTX0luaXQodm9pZCk7CiBleHRlcm4gQk9PTCBXSU5fQ3JlYXRlRGVza3RvcFdpbmRvdyh2b2lkKTsKLWV4dGVybiBpbnQgUEFTQ0FMIFdpbk1haW4oSElOU1RBTkNFLEhJTlNUQU5DRSxMUFNUUixpbnQpOworZXh0ZXJuIGludCBXaW5NYWluKEhJTlNUQU5DRSxISU5TVEFOQ0UsTFBTVFIsaW50KTsKIGV4dGVybiB2b2lkIFRBU0tfUmVzY2hlZHVsZSh2b2lkKTsKIGV4dGVybiBpbnQgVVNFUl9Jbml0QXBwKEhJTlNUQU5DRSk7CiAKZGlmZiAtLWdpdCBhL2xpYnRlc3QvaGVsbG8uYyBiL2xpYnRlc3QvaGVsbG8uYwppbmRleCA0Mjg1YWMxLi43ZGU0ZmI1IDEwMDY0NAotLS0gYS9saWJ0ZXN0L2hlbGxvLmMKKysrIGIvbGlidGVzdC9oZWxsby5jCkBAIC00Miw2ICs0Miw4IEBACiAgICAgSFdORCAgICAgd25kOwogICAgIE1TRyAgICAgIG1zZzsKICAgICBXTkRDTEFTUyBjbGFzczsKKyAgICBjaGFyIGNsYXNzTmFtZVtdID0gImNsYXNzIjsgIC8qIFRvIG1ha2Ugc3VyZSBjbGFzc05hbWUgPj0gMHgxMDAwMCAqLworICAgIGNoYXIgd2luTmFtZVtdID0gIlRlc3QgYXBwIjsKIAogICAgIGlmICghcHJldil7CiAJY2xhc3Muc3R5bGUgPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsKQEAgLTUzLDEyICs1NSwxMiBAQAogCWNsYXNzLmhDdXJzb3IgICAgPSBMb2FkQ3Vyc29yICgwLCBJRENfQVJST1cpOwogCWNsYXNzLmhickJhY2tncm91bmQgPSBHZXRTdG9ja09iamVjdCAoV0hJVEVfQlJVU0gpOwogCWNsYXNzLmxwc3pNZW51TmFtZSA9IE5VTEw7Ci0JY2xhc3MubHBzekNsYXNzTmFtZSA9IChTRUdQVFIpImNsYXNzIjsKKwljbGFzcy5scHN6Q2xhc3NOYW1lID0gKFNFR1BUUiljbGFzc05hbWU7CiAgICAgfQogICAgIGlmICghUmVnaXN0ZXJDbGFzcyAoJmNsYXNzKSkKIAlyZXR1cm4gRkFMU0U7CiAKLSAgICB3bmQgPSBDcmVhdGVXaW5kb3cgKCJjbGFzcyIsICJUZXN0IGFwcCIsIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgd25kID0gQ3JlYXRlV2luZG93IChjbGFzc05hbWUsIHdpbk5hbWUsIFdTX09WRVJMQVBQRURXSU5ET1csCiAJCQlDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCAwLCAKIAkJCTAsIGluc3QsIDApOwogICAgIFNob3dXaW5kb3cgKHduZCwgc2hvdyk7CmRpZmYgLS1naXQgYS9saWJ0ZXN0L2hlbGxvMy5jIGIvbGlidGVzdC9oZWxsbzMuYwppbmRleCBmZTUzMmNiLi41ODhjNjI3IDEwMDY0NAotLS0gYS9saWJ0ZXN0L2hlbGxvMy5jCisrKyBiL2xpYnRlc3QvaGVsbG8zLmMKQEAgLTY5LDYgKzY5LDggQEAKICAgICBIV05EICAgICB3bmQ7CiAgICAgTVNHICAgICAgbXNnOwogICAgIFdORENMQVNTIGNsYXNzOworICAgIGNoYXIgY2xhc3NOYW1lW10gPSAiY2xhc3MiOyAgLyogVG8gbWFrZSBzdXJlIGNsYXNzTmFtZSA+PSAweDEwMDAwICovCisgICAgY2hhciB3aW5OYW1lW10gPSAiVGVzdCBhcHAiOwogCiAgICAgaWYgKCFwcmV2KXsKIAljbGFzcy5zdHlsZSA9IENTX0hSRURSQVcgfCBDU19WUkVEUkFXOwpAQCAtODAsMTIgKzgyLDEyIEBACiAJY2xhc3MuaEN1cnNvciAgICA9IExvYWRDdXJzb3IgKDAsIElEQ19BUlJPVyk7CiAJY2xhc3MuaGJyQmFja2dyb3VuZCA9IEdldFN0b2NrT2JqZWN0IChXSElURV9CUlVTSCk7CiAJY2xhc3MubHBzek1lbnVOYW1lID0gMDsKLQljbGFzcy5scHN6Q2xhc3NOYW1lID0gKFNFR1BUUikiY2xhc3MiOworCWNsYXNzLmxwc3pDbGFzc05hbWUgPSAoU0VHUFRSKWNsYXNzTmFtZTsKICAgICB9CiAgICAgaWYgKCFSZWdpc3RlckNsYXNzICgmY2xhc3MpKQogCXJldHVybiBGQUxTRTsKIAotICAgIHduZCA9IENyZWF0ZVdpbmRvdyAoImNsYXNzIiwgIlRlc3QgYXBwIiwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICB3bmQgPSBDcmVhdGVXaW5kb3cgKGNsYXNzTmFtZSwgd2luTmFtZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKIAkJCUNXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIAogCQkJTG9hZE1lbnUoaW5zdCwiTUFJTiIpLCBpbnN0LCAwKTsKICAgICBTaG93V2luZG93ICh3bmQsIHNob3cpOwpkaWZmIC0tZ2l0IGEvbGlidGVzdC9oZWxsbzQuYyBiL2xpYnRlc3QvaGVsbG80LmMKaW5kZXggOWU4ZjgwMC4uOTY0YzUyMSAxMDA2NDQKLS0tIGEvbGlidGVzdC9oZWxsbzQuYworKysgYi9saWJ0ZXN0L2hlbGxvNC5jCkBAIC03OCw2ICs3OCw5IEBACiAgICAgSFdORCAgICAgd25kLHduZDI7CiAgICAgTVNHICAgICAgbXNnOwogICAgIFdORENMQVNTIGNsYXNzOworICAgIGNoYXIgY2xhc3NOYW1lW10gPSAiY2xhc3MiOyAgLyogVG8gbWFrZSBzdXJlIGNsYXNzTmFtZSA+PSAweDEwMDAwICovCisgICAgY2hhciBjbGFzczJOYW1lW10gPSAiY2xhc3MyIjsKKyAgICBjaGFyIHdpbk5hbWVbXSA9ICJUZXN0IGFwcCI7CiAKICAgICBpZiAoIXByZXYpewogCWNsYXNzLnN0eWxlID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7CkBAIC04OSwyMyArOTIsMjMgQEAKIAljbGFzcy5oQ3Vyc29yICAgID0gTG9hZEN1cnNvciAoMCwgSURDX0FSUk9XKTsKIAljbGFzcy5oYnJCYWNrZ3JvdW5kID0gR2V0U3RvY2tPYmplY3QgKFdISVRFX0JSVVNIKTsKIAljbGFzcy5scHN6TWVudU5hbWUgPSBOVUxMOwotCWNsYXNzLmxwc3pDbGFzc05hbWUgPSAoU0VHUFRSKSJjbGFzcyI7CisJY2xhc3MubHBzekNsYXNzTmFtZSA9IChTRUdQVFIpY2xhc3NOYW1lOwogICAgICAgICBpZiAoIVJlZ2lzdGVyQ2xhc3MgKCZjbGFzcykpCiAJICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKLSAgICB3bmQgPSBDcmVhdGVXaW5kb3cgKCJjbGFzcyIsICJUZXN0IGFwcCIsIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgd25kID0gQ3JlYXRlV2luZG93IChjbGFzc05hbWUsIHdpbk5hbWUsIFdTX09WRVJMQVBQRURXSU5ET1csCiAJCQlDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLCAwLCAKIAkJCTAsIGluc3QsIDApOwogCiAgICAgaWYgKCFwcmV2KXsKICAgICAgICAgY2xhc3MubHBmblduZFByb2MgPSBXbmRQcm9jMjsKLQljbGFzcy5scHN6Q2xhc3NOYW1lID0gKFNFR1BUUikiY2xhc3MyIjsKKwljbGFzcy5scHN6Q2xhc3NOYW1lID0gY2xhc3MyTmFtZTsKICAgICAgICAgaWYgKCFSZWdpc3RlckNsYXNzICgmY2xhc3MpKQogCSAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgd25kMj0gQ3JlYXRlV2luZG93ICgiY2xhc3MyIiwiVGVzdCBhcHAiLCBXU19CT1JERVIgfCBXU19DSElMRCwgCisgICAgd25kMj0gQ3JlYXRlV2luZG93IChjbGFzczJOYW1lLCJUZXN0IGFwcCIsIFdTX0JPUkRFUiB8IFdTX0NISUxELCAKICAgICAgICAgICAgICAgICAgICAgICAgIDUwLCA1MCwgMzUwLCA1MCwgd25kLCAwLCBpbnN0LCAwKTsKIAogICAgIFNob3dXaW5kb3cgKHduZCwgc2hvdyk7CmRpZmYgLS1naXQgYS9saWJ0ZXN0L25ldy5jIGIvbGlidGVzdC9uZXcuYwppbmRleCA4ZGZhYmNlLi42N2Y2OGY1IDEwMDY0NAotLS0gYS9saWJ0ZXN0L25ldy5jCisrKyBiL2xpYnRlc3QvbmV3LmMKQEAgLTksNyArOSw3IEBACiBpbnQgUEFTQ0FMIFdpbk1haW4gKEhBTkRMRSBoSW5zdGFuY2UsIEhBTkRMRSBoUHJldkluc3RhbmNlLAogCQkgICAgTFBTVFIgbHBzekNtZFBhcmFtLCBpbnQgbkNtZFNob3cpCiAgICAgewotICAgIHN0YXRpYyBjaGFyIHN6QXBwTmFtZVtdID0gIkNsYXNzTG9vayIgOworICAgIGNoYXIgc3pBcHBOYW1lW10gPSAiQ2xhc3NMb29rIiA7CiAgICAgSFdORCAgICAgICAgaHduZCA7CiAgICAgTVNHCQltc2cgOwogICAgIFdORENMQVNTICAgIHduZGNsYXNzIDsKQEAgLTMyLDcgKzMyLDcgQEAKIAkgfQogCiAgICAgaHduZCA9IENyZWF0ZVdpbmRvdyAoc3pBcHBOYW1lLAkvKiB3aW5kb3cgY2xhc3MgbmFtZSAqLwotCQkgICJDbGFzc0xvb2siLAkJLyogd2luZG93IGNhcHRpb24gKi8KKwkJICBzekFwcE5hbWUsCQkvKiB3aW5kb3cgY2FwdGlvbiAqLwogCQkgIFdTX09WRVJMQVBQRURXSU5ET1csCS8qIHdpbmRvdyBzdHlsZSAqLwogCQkgIENXX1VTRURFRkFVTFQsCS8qIGluaXRpYWwgeCBwb3NpdGlvbiAqLwogCQkgIENXX1VTRURFRkFVTFQsCS8qIGluaXRpYWwgeSBwb3NpdGlvbiAqLwpAQCAtNjAsNiArNjAsNyBAQAogICAgIFBBSU5UU1RSVUNUCXBzIDsKICAgICBSRUNUCXJlY3QgOwogICAgIFdORENMQVNTICAgIHduZGNsYXNzIDsKKyAgICBjaGFyIGNsc05hbWVbXSA9ICJTZWNvbmRDbGFzcyI7CiAKICAgICBzdGF0aWMgSFdORAloQ2hpbGQ7CiAKQEAgLTc1LDExICs3NiwxMSBAQAogICAgIAkgICAgIHduZGNsYXNzLmhDdXJzb3IJCT0gTG9hZEN1cnNvciAoTlVMTCwgSURDX0NST1NTKSA7CiAgICAgCSAgICAgd25kY2xhc3MuaGJyQmFja2dyb3VuZAk9IEdldFN0b2NrT2JqZWN0IChMVEdSQVlfQlJVU0gpIDsKICAgICAJICAgICB3bmRjbGFzcy5scHN6TWVudU5hbWUJPSBOVUxMIDsKLSAgICAJICAgICB3bmRjbGFzcy5scHN6Q2xhc3NOYW1lCT0gIlNlY29uZENsYXNzIiA7CisgICAgCSAgICAgd25kY2xhc3MubHBzekNsYXNzTmFtZQk9IGNsc05hbWU7CiAKIAkgICAgIFJlZ2lzdGVyQ2xhc3MgKCZ3bmRjbGFzcyk7CiAgICAgICAgICAgICAgIAotICAgICAgICAgICAgIGhDaGlsZCA9IENyZWF0ZVdpbmRvdygiU2Vjb25kQ2xhc3MiLCJDaGlsZCBXaW5kb3ciLAorICAgICAgICAgICAgIGhDaGlsZCA9IENyZWF0ZVdpbmRvdyhjbHNOYW1lLCJDaGlsZCBXaW5kb3ciLAogICAgICAgICAgICAgICAgICBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19CT1JERVIsCiAgICAgICAgICAgICAgICAgIDEwLCAxMCwgNTgwLCAzODAsIGh3bmQsIE5VTEwsIGdoSW5zdGFuY2UsIE5VTEwpOwogICAgICAgICAgICAgIFNob3dXaW5kb3coaENoaWxkLCBTV19TSE9XKTsKQEAgLTEwNiw3ICsxMDcsNyBAQAogICAgIEhEQwkJCWhEQzsKICAgICBQQUlOVFNUUlVDVAkJcHM7CiAgICAgV05EQ0xBU1MJCXduZENsYXNzOwotICAgIGNoYXIqCQljbGFzc2VzW109eyJFRElUIiwiQlVUVE9OIiwiTElTVEJPWCIsIlNUQVRJQyIsIlNDUk9MTEJBUiIsIkNPTUJPQk9YIiwiQ09NQk9MQk9YIiwgTlVMTH07CisgICAgY2hhcgkJKmNsYXNzZXNbXT17IkVESVQiLCJCVVRUT04iLCJMSVNUQk9YIiwiU1RBVElDIiwiU0NST0xMQkFSIiwiQ09NQk9CT1giLCJDT01CT0xCT1giLCBOVUxMfTsKICAgICBjaGFyKioJCWN1cnI7CiAgICAgY2hhcgkJYnVmWzI1Nl07CiAgICAgUkVDVAlyZWN0IDsKZGlmZiAtLWdpdCBhL2xpYnRlc3Qvcm9sZXguYyBiL2xpYnRlc3Qvcm9sZXguYwppbmRleCAyZjUyMTJjLi5mN2FhZGQwIDEwMDY0NAotLS0gYS9saWJ0ZXN0L3JvbGV4LmMKKysrIGIvbGlidGVzdC9yb2xleC5jCkBAIC0xNSw4ICsxNSw4IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogCi1jaGFyKiBBcHBOYW1lID0gIlJvbGV4IjsKLWNoYXIqIFdpbmRvd05hbWUgPSAiUm9sZXgiOworY2hhciBBcHBOYW1lW10gPSAiUm9sZXgiOworY2hhciBXaW5kb3dOYW1lW10gPSAiUm9sZXgiOwogaW50IFdpbmRvd1dpZHRoID0gMTAwOwogaW50IFdpbmRvd0hlaWdodCA9IDEyMTsKIENPTE9SUkVGIEZhY2VDb2xvciA9IFJHQigxOTIsMTkyLDE5Mik7CmRpZmYgLS1naXQgYS9sb2FkZXIvYnVpbHRpbi5jIGIvbG9hZGVyL2J1aWx0aW4uYwppbmRleCBhMmYwNzRkLi4zM2VhNjEzIDEwMDY0NAotLS0gYS9sb2FkZXIvYnVpbHRpbi5jCisrKyBiL2xvYWRlci9idWlsdGluLmMKQEAgLTk2LDEzICs5NiwxNiBAQAogZXh0ZXJuIGNvbnN0IERMTF9ERVNDUklQVE9SIEFEVkFQSTMyX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgRExMX0RFU0NSSVBUT1IgQ09NQ1RMMzJfRGVzY3JpcHRvcjsKIGV4dGVybiBjb25zdCBETExfREVTQ1JJUFRPUiBDT01ETEczMl9EZXNjcmlwdG9yOworZXh0ZXJuIGNvbnN0IERMTF9ERVNDUklQVE9SIENSVERMTF9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IERMTF9ERVNDUklQVE9SIE9MRTMyX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgRExMX0RFU0NSSVBUT1IgR0RJMzJfRGVzY3JpcHRvcjsKIGV4dGVybiBjb25zdCBETExfREVTQ1JJUFRPUiBLRVJORUwzMl9EZXNjcmlwdG9yOworZXh0ZXJuIGNvbnN0IERMTF9ERVNDUklQVE9SIE5URExMX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgRExMX0RFU0NSSVBUT1IgU0hFTEwzMl9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IERMTF9ERVNDUklQVE9SIFVTRVIzMl9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IERMTF9ERVNDUklQVE9SIFdQUk9DUzMyX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgRExMX0RFU0NSSVBUT1IgV0lOU1BPT0xfRGVzY3JpcHRvcjsKK2V4dGVybiBjb25zdCBETExfREVTQ1JJUFRPUiBXU09DSzMyX0Rlc2NyaXB0b3I7CiAKIC8qIFRhYmxlIG9mIGFsbCBidWlsdC1pbiBETExzICovCiAKQEAgLTE0MSwxMyArMTQ0LDE2IEBACiAgICAgeyAmQURWQVBJMzJfRGVzY3JpcHRvciwgMCB9LAogICAgIHsgJkNPTUNUTDMyX0Rlc2NyaXB0b3IsIDAgfSwKICAgICB7ICZDT01ETEczMl9EZXNjcmlwdG9yLCAwIH0sCisgICAgeyAmQ1JURExMX0Rlc2NyaXB0b3IsIDAgfSwKICAgICB7ICZPTEUzMl9EZXNjcmlwdG9yLCAgICAwIH0sCiAgICAgeyAmR0RJMzJfRGVzY3JpcHRvciwgICAgMCB9LAogICAgIHsgJktFUk5FTDMyX0Rlc2NyaXB0b3IsIERMTF9GTEFHX0FMV0FZU19VU0VEIH0sCisgICAgeyAmTlRETExfRGVzY3JpcHRvciwgIDAgfSwKICAgICB7ICZTSEVMTDMyX0Rlc2NyaXB0b3IsICAwIH0sCiAgICAgeyAmVVNFUjMyX0Rlc2NyaXB0b3IsICAgMCB9LAogICAgIHsgJldQUk9DUzMyX0Rlc2NyaXB0b3IsIERMTF9GTEFHX0FMV0FZU19VU0VEIH0sCiAgICAgeyAmV0lOU1BPT0xfRGVzY3JpcHRvciwgMCB9LAorICAgIHsgJldTT0NLMzJfRGVzY3JpcHRvciwgMCB9LAogICAgIC8qIExhc3QgZW50cnkgKi8KICAgICB7IE5VTEwsIDAgfQogfTsKQEAgLTIxNCw3ICsyMjAsNyBAQAogCiAgICAgZHByaW50Zl9tb2R1bGUoIHN0ZGRlYiwgIkJ1aWx0LWluICVzOiBobW9kdWxlPSUwNHhcbiIsCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5kZXNjci0+bmFtZSwgaE1vZHVsZSApOwotICAgIHBNb2R1bGUgPSAoTkVfTU9EVUxFICopR2xvYmFsTG9jayggaE1vZHVsZSApOworICAgIHBNb2R1bGUgPSAoTkVfTU9EVUxFICopR2xvYmFsTG9jazE2KCBoTW9kdWxlICk7CiAgICAgcE1vZHVsZS0+c2VsZiA9IGhNb2R1bGU7CiAKICAgICBpZiAocE1vZHVsZS0+ZmxhZ3MgJiBORV9GRkxBR1NfV0lOMzIpCkBAIC0yNDMsNyArMjQ5LDcgQEAKICAgICAgICAgcFNlZ1RhYmxlLT5zZWxlY3RvciA9IEdMT0JBTF9BbGxvYyggR01FTV9GSVhFRCwgbWluc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaE1vZHVsZSwgRkFMU0UsIEZBTFNFLCBGQUxTRSApOwogICAgICAgICBpZiAoIXBTZWdUYWJsZS0+c2VsZWN0b3IpIHJldHVybiAwOwotICAgICAgICBpZiAocFNlZ1RhYmxlLT5taW5zaXplKSBtZW1jcHkoIEdsb2JhbExvY2soIHBTZWdUYWJsZS0+c2VsZWN0b3IgKSwKKyAgICAgICAgaWYgKHBTZWdUYWJsZS0+bWluc2l6ZSkgbWVtY3B5KCBHbG9iYWxMb2NrMTYoIHBTZWdUYWJsZS0+c2VsZWN0b3IgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjci0+ZGF0YV9zdGFydCwgcFNlZ1RhYmxlLT5taW5zaXplKTsKICAgICAgICAgaWYgKHBNb2R1bGUtPmhlYXBfc2l6ZSkKICAgICAgICAgICAgIExvY2FsSW5pdCggcFNlZ1RhYmxlLT5zZWxlY3RvciwgcFNlZ1RhYmxlLT5taW5zaXplLCBtaW5zaXplICk7CkBAIC0yNjYsNyArMjcyLDcgQEAKICAgICByZWdpc3RlciBCWVRFICpwOwogICAgIE5FX01PRFVMRSAqcE1vZHVsZTsKIAotICAgIGlmICghKHBNb2R1bGUgPSBNT0RVTEVfR2V0UHRyKCBGYXJHZXRPd25lciggR2xvYmFsSGFuZGxlKGNzKSApKSkpCisgICAgaWYgKCEocE1vZHVsZSA9IE1PRFVMRV9HZXRQdHIoIEZhckdldE93bmVyKCBHbG9iYWxIYW5kbGUxNihjcykgKSkpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIFNlYXJjaCBmb3IgdGhlIG9yZGluYWwgKi8KZGlmZiAtLWdpdCBhL2xvYWRlci9tYWluLmMgYi9sb2FkZXIvbWFpbi5jCmluZGV4IDMzNGVjODIuLjBhMmQ3NjQgMTAwNjQ0Ci0tLSBhL2xvYWRlci9tYWluLmMKKysrIGIvbG9hZGVyL21haW4uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzcHkuaCIKICNpbmNsdWRlICJ0YXNrLmgiCisjaW5jbHVkZSAidXNlci5oIgogI2luY2x1ZGUgImRjZS5oIgogI2luY2x1ZGUgInBlX2ltYWdlLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKQEAgLTYxLDcgKzYyLDEzIEBACiAgICAgLyogSW5pdGlhbGl6ZSBtZXNzYWdlIHNweWluZyAqLwogICAgIGlmICghU1BZX0luaXQoKSkgcmV0dXJuIDA7CiAKLSNpZm5kZWYgV0lORUxJQgorI2lmZGVmIFdJTkVMSUIKKyAgICAvKiBDcmVhdGUgVVNFUiBhbmQgR0RJIGhlYXAgKi8KKyAgICBVU0VSX0hlYXBTZWwgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX0ZJWEVELCAweDEwMDAwICk7CisgICAgTG9jYWxJbml0KCBVU0VSX0hlYXBTZWwsIDAsIDB4ZmZmZiApOworICAgIEdESV9IZWFwU2VsICA9IEdsb2JhbEFsbG9jMTYoIEdNRU1fRklYRUQsIEdESV9IRUFQX1NJWkUgKTsKKyAgICBMb2NhbEluaXQoIEdESV9IZWFwU2VsLCAwLCBHRElfSEVBUF9TSVpFLTEgKTsKKyNlbHNlCiAgICAgICAvKiBJbml0aWFsaXplIHJlbGF5IGNvZGUgKi8KICAgICBpZiAoIVJFTEFZX0luaXQoKSkgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2xvYWRlci9tb2R1bGUuYyBiL2xvYWRlci9tb2R1bGUuYwppbmRleCBhM2Y0NjE1Li45MjAzMTNmIDEwMDY0NAotLS0gYS9sb2FkZXIvbW9kdWxlLmMKKysrIGIvbG9hZGVyL21vZHVsZS5jCkBAIC00Myw3ICs0Myw3IEBACiAgKi8KIE5FX01PRFVMRSAqTU9EVUxFX0dldFB0ciggSE1PRFVMRSBoTW9kdWxlICkKIHsKLSAgICBORV9NT0RVTEUgKnBNb2R1bGUgPSAoTkVfTU9EVUxFICopR2xvYmFsTG9jayggaE1vZHVsZSApOworICAgIE5FX01PRFVMRSAqcE1vZHVsZSA9IChORV9NT0RVTEUgKilHbG9iYWxMb2NrMTYoIGhNb2R1bGUgKTsKICAgICBpZiAoIXBNb2R1bGUgfHwgKHBNb2R1bGUtPm1hZ2ljICE9IE5FX1NJR05BVFVSRSkgfHwKICAgICAgICAgKHBNb2R1bGUtPnNlbGYgIT0gaE1vZHVsZSkpIHJldHVybiBOVUxMOwogICAgIHJldHVybiBwTW9kdWxlOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgcHJpbnRmKCAiXG5Ob24tcmVzaWRlbnQgbmFtZXMgdGFibGU6XG4iICk7CiAgICAgaWYgKHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUpCiAgICAgewotICAgICAgICBwc3RyID0gKGNoYXIgKilHbG9iYWxMb2NrKCBwTW9kdWxlLT5ucm5hbWVfaGFuZGxlICk7CisgICAgICAgIHBzdHIgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSApOwogICAgICAgICB3aGlsZSAoKnBzdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHByaW50ZiggIiUqLipzOiAlZFxuIiwgKnBzdHIsICpwc3RyLCBwc3RyICsgMSwKQEAgLTI3NSwxMSArMjc1LDExIEBACiBEV09SRCBNT0RVTEVfQWxsb2NhdGVTZWdtZW50KFdPUkQgd0ZsYWdzLCBXT1JEIHdTaXplLCBXT1JEIHdFbGVtKQogewogICAgIFdPUkQgc2l6ZSA9IHdTaXplIDw8IHdFbGVtOwotICAgIEhBTkRMRSBoTWVtID0gR2xvYmFsQWxsb2MoIE1PRFVMRV9OZTJNZW1GbGFncyh3RmxhZ3MpLCBzaXplKTsKLSNpZmRlZiBXSU5FTElCMzIKLSAgICByZXR1cm4gKERXT1JEKUdsb2JhbExvY2soaE1lbSk7CisgICAgSEFORExFIGhNZW0gPSBHbG9iYWxBbGxvYzE2KCBNT0RVTEVfTmUyTWVtRmxhZ3Mod0ZsYWdzKSwgc2l6ZSk7CisjaWZkZWYgV0lORUxJQgorICAgIHJldHVybiAoRFdPUkQpR2xvYmFsTG9jazE2KGhNZW0pOwogI2Vsc2UKLSAgICBXT1JEIHNlbGVjdG9yID0gSElXT1JEKEdsb2JhbExvY2soaE1lbSkpOworICAgIFdPUkQgc2VsZWN0b3IgPSBISVdPUkQoV0lOMTZfR2xvYmFsTG9jazE2KGhNZW0pKTsKICAgICByZXR1cm4gTUFLRUxPTkcoaE1lbSwgc2VsZWN0b3IpOwogI2VuZGlmCiB9CkBAIC00MjEsMTAgKzQyMSwxMCBAQAogICAgICAgICAgICAgIC8qIGVudHJ5IHRhYmxlIGxlbmd0aCAqLwogICAgICAgICAgICBuZV9oZWFkZXIuZW50cnlfdGFiX2xlbmd0aDsKIAotICAgIGhNb2R1bGUgPSBHbG9iYWxBbGxvYyggR01FTV9NT1ZFQUJMRSB8IEdNRU1fWkVST0lOSVQsIHNpemUgKTsKKyAgICBoTW9kdWxlID0gR2xvYmFsQWxsb2MxNiggR01FTV9NT1ZFQUJMRSB8IEdNRU1fWkVST0lOSVQsIHNpemUgKTsKICAgICBpZiAoIWhNb2R1bGUpIHJldHVybiAoSE1PRFVMRSkxMTsgIC8qIGludmFsaWQgZXhlICovCiAgICAgRmFyU2V0T3duZXIoIGhNb2R1bGUsIGhNb2R1bGUgKTsKLSAgICBwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2soIGhNb2R1bGUgKTsKKyAgICBwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2sxNiggaE1vZHVsZSApOwogICAgIG1lbWNweSggcE1vZHVsZSwgJm5lX2hlYWRlciwgc2l6ZW9mKG5lX2hlYWRlcikgKTsKICAgICBwTW9kdWxlLT5jb3VudCA9IDA7CiAgICAgcE1vZHVsZS0+cGVfbW9kdWxlID0gTlVMTDsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBHbG9iYWxGcmVlKCBoTW9kdWxlICk7CisgICAgICAgIEdsb2JhbEZyZWUxNiggaE1vZHVsZSApOwogICAgICAgICByZXR1cm4gKEhNT0RVTEUpMTE7ICAvKiBpbnZhbGlkIGV4ZSAqLwogICAgIH0KIApAQCAtNTA4LDcgKzUwOCw3IEBACiAgICAgICAgICAgICAgICBuZV9oZWFkZXIubW9kdWxlcmVmX3RhYl9vZmZzZXQgLSBuZV9oZWFkZXIucm5hbWVfdGFiX29mZnNldCwKICAgICAgICAgICAgICAgIHBEYXRhICkpCiAgICAgewotICAgICAgICBHbG9iYWxGcmVlKCBoTW9kdWxlICk7CisgICAgICAgIEdsb2JhbEZyZWUxNiggaE1vZHVsZSApOwogICAgICAgICByZXR1cm4gKEhNT0RVTEUpMTE7ICAvKiBpbnZhbGlkIGV4ZSAqLwogICAgIH0KICAgICBwRGF0YSArPSBuZV9oZWFkZXIubW9kdWxlcmVmX3RhYl9vZmZzZXQgLSBuZV9oZWFkZXIucm5hbWVfdGFiX29mZnNldDsKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgICAgICAgICAgICAgbmVfaGVhZGVyLmVudHJ5X3RhYl9vZmZzZXQgLSBuZV9oZWFkZXIuaW5hbWVfdGFiX29mZnNldCwKICAgICAgICAgICAgICAgIHBEYXRhICkpCiAgICAgewotICAgICAgICBHbG9iYWxGcmVlKCBoTW9kdWxlICk7CisgICAgICAgIEdsb2JhbEZyZWUxNiggaE1vZHVsZSApOwogICAgICAgICByZXR1cm4gKEhNT0RVTEUpMTE7ICAvKiBpbnZhbGlkIGV4ZSAqLwogICAgIH0KICAgICBwRGF0YSArPSBuZV9oZWFkZXIuZW50cnlfdGFiX29mZnNldCAtIG5lX2hlYWRlci5pbmFtZV90YWJfb2Zmc2V0OwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAgICAgICAgICAgICAgICBuZV9oZWFkZXIuZW50cnlfdGFiX2xlbmd0aCwKICAgICAgICAgICAgICAgIHBEYXRhICkpCiAgICAgewotICAgICAgICBHbG9iYWxGcmVlKCBoTW9kdWxlICk7CisgICAgICAgIEdsb2JhbEZyZWUxNiggaE1vZHVsZSApOwogICAgICAgICByZXR1cm4gKEhNT0RVTEUpMTE7ICAvKiBpbnZhbGlkIGV4ZSAqLwogICAgIH0KICAgICBwRGF0YSArPSBuZV9oZWFkZXIuZW50cnlfdGFiX2xlbmd0aDsKQEAgLTU1NywxNiArNTU3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhNb2R1bGUsIEZBTFNFLCBGQUxTRSwgRkFMU0UgKTsKICAgICAgICAgaWYgKCFwTW9kdWxlLT5ucm5hbWVfaGFuZGxlKQogICAgICAgICB7Ci0gICAgICAgICAgICBHbG9iYWxGcmVlKCBoTW9kdWxlICk7CisgICAgICAgICAgICBHbG9iYWxGcmVlMTYoIGhNb2R1bGUgKTsKICAgICAgICAgICAgIHJldHVybiAoSE1PRFVMRSkxMTsgIC8qIGludmFsaWQgZXhlICovCiAgICAgICAgIH0KLSAgICAgICAgYnVmZmVyID0gR2xvYmFsTG9jayggcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSApOworICAgICAgICBidWZmZXIgPSBHbG9iYWxMb2NrMTYoIHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUgKTsKICAgICAgICAgX2xsc2VlayggaEZpbGUsIG5lX2hlYWRlci5ucm5hbWVfdGFiX29mZnNldCwgU0VFS19TRVQgKTsKICAgICAgICAgaWYgKEZJTEVfUmVhZCggaEZpbGUsIGJ1ZmZlciwgbmVfaGVhZGVyLm5ybmFtZV90YWJfbGVuZ3RoICkKICAgICAgICAgICAgICAgIT0gbmVfaGVhZGVyLm5ybmFtZV90YWJfbGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAgICAgICBHbG9iYWxGcmVlKCBwTW9kdWxlLT5ucm5hbWVfaGFuZGxlICk7Ci0gICAgICAgICAgICBHbG9iYWxGcmVlKCBoTW9kdWxlICk7CisgICAgICAgICAgICBHbG9iYWxGcmVlMTYoIHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUgKTsKKyAgICAgICAgICAgIEdsb2JhbEZyZWUxNiggaE1vZHVsZSApOwogICAgICAgICAgICAgcmV0dXJuIChITU9EVUxFKTExOyAgLyogaW52YWxpZCBleGUgKi8KICAgICAgICAgfQogICAgIH0KQEAgLTU4MSw4ICs1ODEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaE1vZHVsZSwgRkFMU0UsIEZBTFNFLCBGQUxTRSApOwogICAgICAgICBpZiAoIXBNb2R1bGUtPmRsbHNfdG9faW5pdCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUpIEdsb2JhbEZyZWUoIHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUgKTsKLSAgICAgICAgICAgIEdsb2JhbEZyZWUoIGhNb2R1bGUgKTsKKyAgICAgICAgICAgIGlmIChwTW9kdWxlLT5ucm5hbWVfaGFuZGxlKSBHbG9iYWxGcmVlMTYoIHBNb2R1bGUtPm5ybmFtZV9oYW5kbGUgKTsKKyAgICAgICAgICAgIEdsb2JhbEZyZWUxNiggaE1vZHVsZSApOwogICAgICAgICAgICAgcmV0dXJuIChITU9EVUxFKTExOyAgLyogaW52YWxpZCBleGUgKi8KICAgICAgICAgfQogICAgIH0KQEAgLTY0MCw3ICs2NDAsNyBAQAogICAgICAgLyogTm93IHNlYXJjaCB0aGUgbm9uLXJlc2lkZW50IG5hbWVzIHRhYmxlICovCiAKICAgICBpZiAoIXBNb2R1bGUtPm5ybmFtZV9oYW5kbGUpIHJldHVybiAwOyAgLyogTm8gbm9uLXJlc2lkZW50IHRhYmxlICovCi0gICAgY3BudCA9IChjaGFyICopR2xvYmFsTG9jayggcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSApOworICAgIGNwbnQgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSApOwogCiAgICAgICAvKiBTa2lwIHRoZSBmaXJzdCBlbnRyeSAobW9kdWxlIGRlc2NyaXB0aW9uIHN0cmluZykgKi8KICAgICBjcG50ICs9ICpjcG50ICsgMSArIHNpemVvZihXT1JEKTsKQEAgLTcwNCw3ICs3MDQsNyBAQAogCiAgICAgaWYgKHNlbCA9PSAweGZlKSBzZWwgPSAweGZmZmY7ICAvKiBjb25zdGFudCBlbnRyeSAqLwogICAgIGVsc2Ugc2VsID0gKFdPUkQpKERXT1JEKU5FX1NFR19UQUJMRShwTW9kdWxlKVtzZWwtMV0uc2VsZWN0b3I7Ci0gICAgcmV0dXJuIChTRUdQVFIpTUFLRUxPTkcoIG9mZnNldCwgc2VsICk7CisgICAgcmV0dXJuIFBUUl9TRUdfT0ZGX1RPX1NFR1BUUiggc2VsLCBvZmZzZXQgKTsKIH0KIAogCkBAIC04OTMsNyArODkzLDcgQEAKICAgICBwU2VnbWVudCA9IE5FX1NFR19UQUJMRSggcE1vZHVsZSApOwogICAgIGZvciAoaSA9IDE7IGkgPD0gcE1vZHVsZS0+c2VnX2NvdW50OyBpKyssIHBTZWdtZW50KyspCiAgICAgewotICAgICAgICBHbG9iYWxGcmVlKCBwU2VnbWVudC0+c2VsZWN0b3IgKTsKKyAgICAgICAgR2xvYmFsRnJlZTE2KCBwU2VnbWVudC0+c2VsZWN0b3IgKTsKICAgICB9CiAKICAgICAgIC8qIEZyZWUgdGhlIHJlZmVyZW5jZWQgbW9kdWxlcyAqLwpAQCAtOTA2LDkgKzkwNiw5IEBACiAKICAgICAgIC8qIEZyZWUgdGhlIG1vZHVsZSBzdG9yYWdlICovCiAKLSAgICBpZiAocE1vZHVsZS0+bnJuYW1lX2hhbmRsZSkgR2xvYmFsRnJlZSggcE1vZHVsZS0+bnJuYW1lX2hhbmRsZSApOwotICAgIGlmIChwTW9kdWxlLT5kbGxzX3RvX2luaXQpIEdsb2JhbEZyZWUoIHBNb2R1bGUtPmRsbHNfdG9faW5pdCApOwotICAgIEdsb2JhbEZyZWUoIGhNb2R1bGUgKTsKKyAgICBpZiAocE1vZHVsZS0+bnJuYW1lX2hhbmRsZSkgR2xvYmFsRnJlZTE2KCBwTW9kdWxlLT5ucm5hbWVfaGFuZGxlICk7CisgICAgaWYgKHBNb2R1bGUtPmRsbHNfdG9faW5pdCkgR2xvYmFsRnJlZTE2KCBwTW9kdWxlLT5kbGxzX3RvX2luaXQgKTsKKyAgICBHbG9iYWxGcmVlMTYoIGhNb2R1bGUgKTsKIAogICAgICAgLyogUmVtb3ZlIG1vZHVsZSBmcm9tIGNhY2hlICovCiAKQEAgLTk3OCw3ICs5NzgsNyBAQAogICAgICAgICAgIC8qIExvYWQgdGhlIHJlZmVyZW5jZWQgRExMcyAqLwogCiAgICAgICAgIHBNb2RSZWYgPSAoV09SRCAqKSgoY2hhciAqKXBNb2R1bGUgKyBwTW9kdWxlLT5tb2RyZWZfdGFibGUpOwotICAgICAgICBwRExMcyA9IChXT1JEICopR2xvYmFsTG9jayggcE1vZHVsZS0+ZGxsc190b19pbml0ICk7CisgICAgICAgIHBETExzID0gKFdPUkQgKilHbG9iYWxMb2NrMTYoIHBNb2R1bGUtPmRsbHNfdG9faW5pdCApOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcE1vZHVsZS0+bW9kcmVmX2NvdW50OyBpKyssIHBNb2RSZWYrKykKICAgICAgICAgewogICAgICAgICAgICAgY2hhciBidWZmZXJbMjU2XTsKQEAgLTEwNTksOCArMTA1OSw4IEBACiAKIAkJICAvKiBDcmVhdGUgdGhlIDMyLWJpdCBzdGFjayBmcmFtZSAqLwogCQkgIAotCQkgICooRFdPUkQgKilHbG9iYWxMb2NrKGhJbml0aWFsU3RhY2szMikgPSAweERFQURCRUVGOwotCQkgIHN0YWNrMzJUb3AgPSAoY2hhciopR2xvYmFsTG9jayhoSW5pdGlhbFN0YWNrMzIpICsgCisJCSAgKihEV09SRCAqKUdsb2JhbExvY2sxNihoSW5pdGlhbFN0YWNrMzIpID0gMHhERUFEQkVFRjsKKwkJICBzdGFjazMyVG9wID0gKGNoYXIqKUdsb2JhbExvY2sxNihoSW5pdGlhbFN0YWNrMzIpICsgCiAJCSAgICAweDEwMDAwOwogCQkgIGZyYW1lMzIgPSAoU1RBQ0szMkZSQU1FICopc3RhY2szMlRvcCAtIDE7CiAJCSAgZnJhbWUzMi0+c2F2ZWRfZXNwID0gKERXT1JEKXN0YWNrMzJUb3A7CkBAIC0xMDczLDcgKzEwNzMsNyBAQAogCQkgIGZyYW1lMzItPnJldGFkZHIgPSAwOwogCQkgIGZyYW1lMzItPmNvZGVzZWxlY3RvciA9IFdJTkVfQ09ERV9TRUxFQ1RPUjsKIAkJICAvKiBwVGFzay0+ZXNwID0gKERXT1JEKWZyYW1lMzI7ICovCi0JCSAgSUYxNjMyX1N0YWNrMzJfYmFzZSA9IFdJTjE2X0dsb2JhbExvY2soaEluaXRpYWxTdGFjazMyKTsKKwkJICBJRjE2MzJfU3RhY2szMl9iYXNlID0gV0lOMTZfR2xvYmFsTG9jazE2KGhJbml0aWFsU3RhY2szMik7CiAKIAkJfQogICAgICAgICAgICAgICAgIC8qIEZJWE1FOiB3ZSBwcm9iYWJseSBuZWVkIGEgRE9TIGhhbmRsZSBoZXJlICovCkBAIC0xMDg2LDggKzEwODYsNyBAQAogCQlJRjE2MzJfU2F2ZWQxNl9zcCA9IG9sZHNwOwogCQlmb3IgKGkgPSAyOyBpIDw9IHBNb2R1bGUtPnNlZ19jb3VudDsgaSsrKSBORV9Mb2FkU2VnbWVudCggaE1vZHVsZSwgaSApOwogCQlpZiAoaEluaXRpYWxTdGFjazMyKXsKLQkJICBHbG9iYWxVbmxvY2sgKGhJbml0aWFsU3RhY2szMik7Ci0JCSAgR2xvYmFsRnJlZSAoaEluaXRpYWxTdGFjazMyKTsKKwkJICBHbG9iYWxGcmVlMTYoaEluaXRpYWxTdGFjazMyKTsKIAkJICBJRjE2MzJfU3RhY2szMl9iYXNlID0gaEluaXRpYWxTdGFjazMyID0gMDsKIAkJfQogCX0gCkBAIC0xMTE2LDggKzExMTUsOCBAQAogICAgICAgICBwTW9kdWxlLT5jb3VudCsrOwogICAgIH0KICNlbHNlCi0gICAgaE1vZHVsZSA9IEdsb2JhbEFsbG9jKCBHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwgc2l6ZW9mKE5FX01PRFVMRSkgKTsKLSAgICBwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2soIGhNb2R1bGUgKTsKKyAgICBoTW9kdWxlID0gR2xvYmFsQWxsb2MxNiggR01FTV9NT1ZFQUJMRSB8IEdNRU1fWkVST0lOSVQsIHNpemVvZihORV9NT0RVTEUpKTsKKyAgICBwTW9kdWxlID0gKE5FX01PRFVMRSAqKUdsb2JhbExvY2sxNiggaE1vZHVsZSApOwogICAgIHBNb2R1bGUtPmNvdW50ID0gMTsKICAgICBwTW9kdWxlLT5tYWdpYyA9IE5FX1NJR05BVFVSRTsKICAgICBwTW9kdWxlLT5zZWxmID0gaE1vZHVsZTsKQEAgLTEyNDksMjQgKzEyNDgsMjQgQEAKIEhBTkRMRSBXaW5FeGVjKCBMUFNUUiBscENtZExpbmUsIFdPUkQgbkNtZFNob3cgKQogewogICAgIExPQURQQVJBTVMgcGFyYW1zOwotICAgIEhMT0NBTCBjbWRTaG93SGFuZGxlLCBjbWRMaW5lSGFuZGxlOworICAgIEhHTE9CQUwxNiBjbWRTaG93SGFuZGxlLCBjbWRMaW5lSGFuZGxlOwogICAgIEhBTkRMRSBoYW5kbGU7CiAgICAgV09SRCAqY21kU2hvd1B0cjsKICAgICBjaGFyICpwLCAqY21kbGluZSwgZmlsZW5hbWVbMjU2XTsKICAgICBzdGF0aWMgaW50IHVzZV9sb2FkX21vZHVsZSA9IDE7CiAKLSAgICBpZiAoIShjbWRTaG93SGFuZGxlID0gR2xvYmFsQWxsb2MoIDAsIDIgKiBzaXplb2YoV09SRCkgKSkpIHJldHVybiAwOwotICAgIGlmICghKGNtZExpbmVIYW5kbGUgPSBHbG9iYWxBbGxvYyggMCwgMjU2ICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShjbWRTaG93SGFuZGxlID0gR2xvYmFsQWxsb2MxNiggMCwgMiAqIHNpemVvZihXT1JEKSApKSkgcmV0dXJuIDA7CisgICAgaWYgKCEoY21kTGluZUhhbmRsZSA9IEdsb2JhbEFsbG9jMTYoIDAsIDI1NiApKSkgcmV0dXJuIDA7CiAKICAgICAgIC8qIFN0b3JlIG5DbWRTaG93ICovCiAKLSAgICBjbWRTaG93UHRyID0gKFdPUkQgKilHbG9iYWxMb2NrKCBjbWRTaG93SGFuZGxlICk7CisgICAgY21kU2hvd1B0ciA9IChXT1JEICopR2xvYmFsTG9jazE2KCBjbWRTaG93SGFuZGxlICk7CiAgICAgY21kU2hvd1B0clswXSA9IDI7CiAgICAgY21kU2hvd1B0clsxXSA9IG5DbWRTaG93OwogCiAgICAgICAvKiBCdWlsZCB0aGUgZmlsZW5hbWUgYW5kIGNvbW1hbmQtbGluZSAqLwogCi0gICAgY21kbGluZSA9IChjaGFyICopR2xvYmFsTG9jayggY21kTGluZUhhbmRsZSApOworICAgIGNtZGxpbmUgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggY21kTGluZUhhbmRsZSApOwogICAgIGxzdHJjcHluKCBmaWxlbmFtZSwgbHBDbWRMaW5lLCBzaXplb2YoZmlsZW5hbWUpIC0gNCAvKiBmb3IgZXh0ZW5zaW9uICovICk7CiAgICAgZm9yIChwID0gZmlsZW5hbWU7ICpwICYmICgqcCAhPSAnICcpICYmICgqcCAhPSAnXHQnKTsgcCsrKTsKICAgICBpZiAoKnApIGxzdHJjcHluKCBjbWRsaW5lLCBwICsgMSwgMTI4ICk7CkBAIC0xMjg0LDggKzEyODMsOCBAQAogI2Vsc2UKIAlwYXJhbXMuaEVudmlyb25tZW50ID0gKEhBTkRMRSlTRUxFQ1RPUk9GKCBHZXRET1NFbnZpcm9ubWVudCgpICk7CiAjZW5kaWYgIC8qIFdJTkVMSUIgKi8KLQlwYXJhbXMuY21kTGluZSAgPSAoU0VHUFRSKVdJTjE2X0dsb2JhbExvY2soIGNtZExpbmVIYW5kbGUgKTsKLQlwYXJhbXMuc2hvd0NtZCAgPSAoU0VHUFRSKVdJTjE2X0dsb2JhbExvY2soIGNtZFNob3dIYW5kbGUgKTsKKwlwYXJhbXMuY21kTGluZSAgPSAoU0VHUFRSKVdJTjE2X0dsb2JhbExvY2sxNiggY21kTGluZUhhbmRsZSApOworCXBhcmFtcy5zaG93Q21kICA9IChTRUdQVFIpV0lOMTZfR2xvYmFsTG9jazE2KCBjbWRTaG93SGFuZGxlICk7CiAJcGFyYW1zLnJlc2VydmVkID0gMDsKIAloYW5kbGUgPSBMb2FkTW9kdWxlKCBmaWxlbmFtZSwgJnBhcmFtcyApOwogCWlmIChoYW5kbGUgPT0gMikgIC8qIGZpbGUgbm90IGZvdW5kICovCkBAIC0xMzYwLDggKzEzNTksOCBAQAogCX0KICAgICB9CiAKLSAgICBHbG9iYWxGcmVlKCBjbWRTaG93SGFuZGxlICk7Ci0gICAgR2xvYmFsRnJlZSggY21kTGluZUhhbmRsZSApOworICAgIEdsb2JhbEZyZWUxNiggY21kU2hvd0hhbmRsZSApOworICAgIEdsb2JhbEZyZWUxNiggY21kTGluZUhhbmRsZSApOwogCiAjaWYgMAogICAgIGlmIChoYW5kbGUgPCAoSEFORExFKTMyKQkvKiBFcnJvcj8gKi8KZGlmZiAtLWdpdCBhL2xvYWRlci9uZV9pbWFnZS5jIGIvbG9hZGVyL25lX2ltYWdlLmMKaW5kZXggNDQ3YjUwMC4uOGZiMjAzMCAxMDA2NDQKLS0tIGEvbG9hZGVyL25lX2ltYWdlLmMKKysrIGIvbG9hZGVyL25lX2ltYWdlLmMKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VnbnVtLCBwU2VnLT5zZWxlY3RvciApOwogICAgIGxzZWVrKCBmZCwgcFNlZy0+ZmlsZXBvcyA8PCBwTW9kdWxlLT5hbGlnbm1lbnQsIFNFRUtfU0VUICk7CiAgICAgc2l6ZSA9IHBTZWctPnNpemUgPyBwU2VnLT5zaXplIDogMHgxMDAwMDsKLSAgICBtZW0gPSBHbG9iYWxMb2NrKHBTZWctPnNlbGVjdG9yKTsKKyAgICBtZW0gPSBHbG9iYWxMb2NrMTYocFNlZy0+c2VsZWN0b3IpOwogICAgIGlmIChwTW9kdWxlLT5mbGFncyAmIE5FX0ZGTEFHU19TRUxGTE9BRCAmJiBzZWdudW0gPiAxKSB7CQogI2lmbmRlZiBXSU5FTElCCiAgCS8qIEltcGxlbWVudCBzZWxmIGxvYWRpbmcgc2VnbWVudHMgKi8KQEAgLTIzMSw3ICsyMzEsNyBAQAogCSAgICB9CiAJICAgIGVsc2UKIAkgICAgewotICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBNQUtFTE9ORyggcmVwLT50YXJnZXQyLCBwU2VnVGFibGVbcmVwLT50YXJnZXQxLTFdLnNlbGVjdG9yICk7CisgICAgICAgICAgICAgICAgYWRkcmVzcyA9IFBUUl9TRUdfT0ZGX1RPX1NFR1BUUiggcFNlZ1RhYmxlW3JlcC0+dGFyZ2V0MS0xXS5zZWxlY3RvciwgcmVwLT50YXJnZXQyICk7CiAJICAgIH0KIAkgICAgCiAJICAgIGRwcmludGZfZml4dXAoc3RkZGViLCIlZDogJTA0eDolMDR4XG4iLCAKQEAgLTUxNywxMiArNTE3LDEyIEBACiAgICAgewogCUhBTkRMRSB0b19pbml0ID0gcE1vZHVsZS0+ZGxsc190b19pbml0OwogCXBNb2R1bGUtPmRsbHNfdG9faW5pdCA9IDA7Ci0gICAgICAgIGZvciAocERMTCA9IChITU9EVUxFICopR2xvYmFsTG9jayggdG9faW5pdCApOyAqcERMTDsgcERMTCsrKQorICAgICAgICBmb3IgKHBETEwgPSAoSE1PRFVMRSAqKUdsb2JhbExvY2sxNiggdG9faW5pdCApOyAqcERMTDsgcERMTCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBORV9Jbml0aWFsaXplRExMcyggKnBETEwgKTsKICAgICAgICAgICAgIE5FX0luaXRETEwoICpwRExMICk7CiAgICAgICAgIH0KLSAgICAgICAgR2xvYmFsRnJlZSggdG9faW5pdCApOworICAgICAgICBHbG9iYWxGcmVlMTYoIHRvX2luaXQgKTsKICAgICB9CiAgICAgTkVfSW5pdERMTCggaE1vZHVsZSApOwogfQpkaWZmIC0tZ2l0IGEvbG9hZGVyL25lX3Jlc291cmNlLmMgYi9sb2FkZXIvbmVfcmVzb3VyY2UuYwppbmRleCBjYWVlNWY4Li5iZjg4MDIyIDEwMDY0NAotLS0gYS9sb2FkZXIvbmVfcmVzb3VyY2UuYworKysgYi9sb2FkZXIvbmVfcmVzb3VyY2UuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgcE5hbWVJbmZvLT5oYW5kbGUgPSBORV9BbGxvY1Jlc291cmNlKCBoTW9kdWxlLCBoUnNyYywgMCApOwogICAgIHBOYW1lSW5mby0+dXNhZ2UgPSAxOwogICAgIGxzZWVrKCBmZCwgKGludClwTmFtZUluZm8tPm9mZnNldCA8PCBzaXplU2hpZnQsIFNFRUtfU0VUICk7Ci0gICAgcmVhZCggZmQsIEdsb2JhbExvY2soIHBOYW1lSW5mby0+aGFuZGxlICksCisgICAgcmVhZCggZmQsIEdsb2JhbExvY2sxNiggcE5hbWVJbmZvLT5oYW5kbGUgKSwKICAgICAgICAgICAoaW50KXBOYW1lSW5mby0+bGVuZ3RoIDw8IHNpemVTaGlmdCApOwogICAgIHJldHVybiBwTmFtZUluZm8tPmhhbmRsZTsKIH0KQEAgLTMxMSw3ICszMTEsNyBAQAogewogICAgIC8qIE1heSBuZWVkIHRvIHJlbG9hZCB0aGUgcmVzb3VyY2UgaWYgZGlzY2FyZGVkICovCiAKLSAgICByZXR1cm4gKFNFR1BUUilXSU4xNl9HbG9iYWxMb2NrKCBoYW5kbGUgKTsKKyAgICByZXR1cm4gKFNFR1BUUilXSU4xNl9HbG9iYWxMb2NrMTYoIGhhbmRsZSApOwogfQogCiAKQEAgLTMzNyw3ICszMzcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChwTmFtZUluZm8tPnVzYWdlID4gMCkgcE5hbWVJbmZvLT51c2FnZS0tOwogICAgICAgICAgICAgICAgIGlmIChwTmFtZUluZm8tPnVzYWdlID09IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHbG9iYWxGcmVlKCBwTmFtZUluZm8tPmhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICBHbG9iYWxGcmVlMTYoIHBOYW1lSW5mby0+aGFuZGxlICk7CiAgICAgICAgICAgICAgICAgICAgIHBOYW1lSW5mby0+aGFuZGxlID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CmRpZmYgLS1naXQgYS9sb2FkZXIvcGVfaW1hZ2UuYyBiL2xvYWRlci9wZV9pbWFnZS5jCmluZGV4IGQxNjQxN2EuLjQ2MWEwNzQgMTAwNjQ0Ci0tLSBhL2xvYWRlci9wZV9pbWFnZS5jCisrKyBiL2xvYWRlci9wZV9pbWFnZS5jCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJ4bWFsbG9jLmgiCiAKLXN0YXRpYyBIQU5ETEUzMiBQcm9jZXNzSGVhcDsgIC8qIEZJWE1FOiBzaG91bGQgYmUgaW4gcHJvY2VzcyBkYXRhYmFzZSAqLwotCiB2b2lkIG15X3djc3RvbWJzKGNoYXIgKiByZXN1bHQsIHVfc2hvcnQgKiBzb3VyY2UsIGludCBsZW4pCiB7CiAgIHdoaWxlKGxlbi0tKSB7CkBAIC0xNjQsMTAgKzE2MiwxMCBAQAogICAJaSsrOwogCiAgIC8qIE5vdywgYWxsb2NhdGUgbWVtb3J5IGZvciBkbGxzX3RvX2luaXQgKi8KLSAgbmVfbW9kID0gR2xvYmFsTG9jayhoTW9kdWxlKTsKKyAgbmVfbW9kID0gR2xvYmFsTG9jazE2KGhNb2R1bGUpOwogICBuZV9tb2QtPmRsbHNfdG9faW5pdCA9IEdMT0JBTF9BbGxvYyhHTUVNX1pFUk9JTklULChpKzEpICogc2l6ZW9mKEhNT0RVTEUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoTW9kdWxlLCBGQUxTRSwgRkFMU0UsIEZBTFNFICk7Ci0gIG1vZF9wdHIgPSBHbG9iYWxMb2NrKG5lX21vZC0+ZGxsc190b19pbml0KTsKKyAgbW9kX3B0ciA9IEdsb2JhbExvY2sxNihuZV9tb2QtPmRsbHNfdG9faW5pdCk7CiAgIC8qIGxvYWQgdGhlIG1vZHVsZXMgYW5kIHB1dCB0aGVpciBoYW5kbGVzIGludG8gdGhlIGxpc3QgKi8KICAgZm9yKGk9MCxwZV9pbXAgPSBwZS0+cGVfaW1wb3J0O3BlX2ltcC0+TW9kdWxlTmFtZTtwZV9pbXArKykKICAgewpAQCAtMjA3LDE2ICsyMDUsMTcgQEAKIAkJZHByaW50Zl93aW4zMihzdGRkZWIsIi0tLSBPcmRpbmFsICVzLCVkXG4iLCBNb2R1bGUsIG9yZGluYWwpOwogCQkqdGh1bmtfbGlzdCA9IFdJTjMyX0dldFByb2NBZGRyZXNzKE1PRFVMRV9GaW5kTW9kdWxlKE1vZHVsZSksCiAJCQlvcmRpbmFsKTsKKwkgIAlpZighKnRodW5rX2xpc3QpCisJICAJeworCSAgCQlmcHJpbnRmKHN0ZGVyciwiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkXG4iLE1vZHVsZSwgCisJCQkJb3JkaW5hbCk7CisJCQlmaXh1cF9mYWlsZWQ9MTsKKwkgIAl9CiAJICB9ZWxzZXsgLyogaW1wb3J0IGJ5IG5hbWUgKi8KIAkgIGRwcmludGZfd2luMzIoc3RkZGViLCAiLS0tICVzICVzLiVkXG4iLCBwZV9uYW1lLT5OYW1lLCBNb2R1bGUsIHBlX25hbWUtPkhpbnQpOwogI2lmbmRlZiBXSU5FTElCIC8qIEZJWE1FOiBKQlA6IFNob3VsZCB0aGlzIGhhcHBlbiBpbiBsaWJ3aW5lLmE/ICovCiAJICAJKnRodW5rX2xpc3QgPSBXSU4zMl9HZXRQcm9jQWRkcmVzcyhNT0RVTEVfRmluZE1vZHVsZShNb2R1bGUpLAogCQkJCXBlX25hbWUtPk5hbWUpOwotCi0jZWxzZQotCSAgZnByaW50ZihzdGRlcnIsIkpCUDogQ2FsbCB0byBSRUxBWTMyX0dldEVudHJ5UG9pbnQgYmVpbmcgaWdub3JlZC5cbiIpOwotI2VuZGlmCi0JCX0KIAkgIGlmKCEqdGh1bmtfbGlzdCkKIAkgIHsKIAkgIAlmcHJpbnRmKHN0ZGVyciwiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkKCVzKVxuIixNb2R1bGUsIApAQCAtMjI0LDYgKzIyMywxMSBAQAogCQlmaXh1cF9mYWlsZWQ9MTsKIAkgIH0KIAorI2Vsc2UKKwkgIGZwcmludGYoc3RkZXJyLCJKQlA6IENhbGwgdG8gUkVMQVkzMl9HZXRFbnRyeVBvaW50IGJlaW5nIGlnbm9yZWQuXG4iKTsKKyNlbmRpZgorCQl9CisKIAkgIGltcG9ydF9saXN0Kys7CiAJICB0aHVua19saXN0Kys7CiAJfQpAQCAtNTUyLDEyICs1NTYsMTIgQEAKICAgICAgICAgICAgICAgIC8qIHNldmVyYWwgZW1wdHkgdGFibGVzICovCiAgICAgICAgICAgICAgICA4OwogCi0JaE1vZHVsZSA9IEdsb2JhbEFsbG9jKCBHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwgc2l6ZSApOworCWhNb2R1bGUgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwgc2l6ZSApOwogCWlmICghaE1vZHVsZSkgcmV0dXJuIChISU5TVEFOQ0UpMTE7ICAvKiBpbnZhbGlkIGV4ZSAqLwogCiAJRmFyU2V0T3duZXIoIGhNb2R1bGUsIGhNb2R1bGUgKTsKIAkKLQlwTW9kdWxlID0gKE5FX01PRFVMRSopR2xvYmFsTG9jayhoTW9kdWxlKTsKKwlwTW9kdWxlID0gKE5FX01PRFVMRSopR2xvYmFsTG9jazE2KGhNb2R1bGUpOwogCiAJLyogU2V0IGFsbCB1c2VkIGVudHJpZXMgKi8KIAlwTW9kdWxlLT5tYWdpYz1ORV9TSUdOQVRVUkU7CkBAIC02MjMsNyArNjI3LDYgQEAKIAlpZiAoKHBlLT5wZV9oZWFkZXItPmNvZmYuQ2hhcmFjdGVyaXN0aWNzICYgSU1BR0VfRklMRV9ETEwpKSB7CiAvKiAgICAgICAgICAgIFBFX0luaXRETEwoaE1vZHVsZSk7ICovCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQcm9jZXNzSGVhcCA9IEhlYXBDcmVhdGUoIDAsIDB4MTAwMDAsIDAgKTsKICAgICAgICAgICAgIFRBU0tfQ3JlYXRlVGFzayhoTW9kdWxlLGhJbnN0YW5jZSwwLAogCQlwYXJhbXMtPmhFbnZpcm9ubWVudCwoTFBTVFIpUFRSX1NFR19UT19MSU4ocGFyYW1zLT5jbWRMaW5lKSwKIAkJKigoV09SRCopUFRSX1NFR19UT19MSU4ocGFyYW1zLT5zaG93Q21kKSsxKSk7CkBAIC02MzIsMTEgKzYzNSw2IEBACiAJcmV0dXJuIGhJbnN0YW5jZTsKIH0KIAotSEFORExFMzIgR2V0UHJvY2Vzc0hlYXAodm9pZCkKLXsKLSAgICByZXR1cm4gUHJvY2Vzc0hlYXA7Ci19Ci0KIGludCBVU0VSX0luaXRBcHAoSElOU1RBTkNFIGhJbnN0YW5jZSk7CiB2b2lkIFBFX0luaXRURUIoaW50IGhURUIpOwogCkBAIC02NTEsNyArNjQ5LDcgQEAKICAgICBoTW9kdWxlID0gR2V0RXhlUHRyKCBHZXRDdXJyZW50VGFzaygpICk7CiAgICAgcE1vZHVsZSA9IE1PRFVMRV9HZXRQdHIoIGhNb2R1bGUgKTsKICAgICBVU0VSX0luaXRBcHAoIGhNb2R1bGUgKTsKLSAgICBmcz0oaW50KUdsb2JhbEFsbG9jKEdITkQsMHgxMDAwMCk7CisgICAgZnM9KGludClHbG9iYWxBbGxvYzE2KEdITkQsMHgxMDAwMCk7CiAgICAgUEVfSW5pdFRFQihmcyk7CiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdncgJXcwLCUlZnMiOjoiciIgKGZzKSk7CiAgICAgQ2FsbFRhc2tTdGFydDMyKCAoRkFSUFJPQykocE1vZHVsZS0+cGVfbW9kdWxlLT5sb2FkX2FkZHIgKyAKQEAgLTcwNiw5ICs3MDQsOSBAQAogICAgIFREQiAqcFRhc2s7CiAgICAgVEVCICpwVEVCOwogCi0gICAgcFRhc2sgPSAoVERCICopKEdsb2JhbExvY2soR2V0Q3VycmVudFRhc2soKSAmIDB4ZmZmZikpOworICAgIHBUYXNrID0gKFREQiAqKShHbG9iYWxMb2NrMTYoR2V0Q3VycmVudFRhc2soKSAmIDB4ZmZmZikpOwogICAgIHBURUIgPSAoVEVCICopKFBUUl9TRUdfT0ZGX1RPX0xJTihoVEVCLCAwKSk7Ci0gICAgcFRFQi0+c3RhY2sgPSAodm9pZCAqKShHbG9iYWxMb2NrKHBUYXNrLT5oU3RhY2szMikpOworICAgIHBURUItPnN0YWNrID0gKHZvaWQgKikoR2xvYmFsTG9jazE2KHBUYXNrLT5oU3RhY2szMikpOwogICAgIHBURUItPkV4Y2VwdCA9ICh2b2lkICopKC0xKTsgCiAgICAgcFRFQi0+VEVCRFNBbGlhcyA9IHBURUI7CiAgICAgcFRFQi0+dGFza2lkID0gZ2V0cGlkKCk7CkBAIC03MjMsMTIgKzcyMSwxMiBAQAogCXsKIAkJSEFORExFIHRvX2luaXQgPSBwTW9kdWxlLT5kbGxzX3RvX2luaXQ7CiAJCXBNb2R1bGUtPmRsbHNfdG9faW5pdCA9IDA7Ci0JCWZvciAocERMTCA9IChITU9EVUxFICopR2xvYmFsTG9jayggdG9faW5pdCApOyAqcERMTDsgcERMTCsrKQorCQlmb3IgKHBETEwgPSAoSE1PRFVMRSAqKUdsb2JhbExvY2sxNiggdG9faW5pdCApOyAqcERMTDsgcERMTCsrKQogCQl7CiAJCQlQRV9Jbml0aWFsaXplRExMcyggKnBETEwgKTsKIAkJCVBFX0luaXRETEwoICpwRExMICk7CiAJCX0KLQkJR2xvYmFsRnJlZSggdG9faW5pdCApOworCQlHbG9iYWxGcmVlMTYoIHRvX2luaXQgKTsKIAl9CiAJUEVfSW5pdERMTCggaE1vZHVsZSApOwogfQpkaWZmIC0tZ2l0IGEvbG9hZGVyL3Jlc291cmNlLmMgYi9sb2FkZXIvcmVzb3VyY2UuYwppbmRleCA1YzVlYzkzLi42ZWJmZDY5IDEwMDY0NAotLS0gYS9sb2FkZXIvcmVzb3VyY2UuYworKysgYi9sb2FkZXIvcmVzb3VyY2UuYwpAQCAtMjc5LDkgKzI3OSw5IEBACiAKICAgICBscCA9IChCWVRFICopTG9ja1Jlc291cmNlKHJzY19tZW0pOwogICAgIG4gPSBTaXplb2ZSZXNvdXJjZSggaW5zdGFuY2UsIGhSc3JjICkgLyBzaXplb2YoQUNDRUxFTlRSWSk7Ci0gICAgaEFjY2VsID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgCisgICAgaEFjY2VsID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCAKICAgICAJc2l6ZW9mKEFDQ0VMSEVBREVSKSArIChuICsgMSkqc2l6ZW9mKEFDQ0VMRU5UUlkpKTsKLSAgICBscEFjY2VsVGJsID0gKExQQUNDRUxIRUFERVIpR2xvYmFsTG9jayhoQWNjZWwpOworICAgIGxwQWNjZWxUYmwgPSAoTFBBQ0NFTEhFQURFUilHbG9iYWxMb2NrMTYoaEFjY2VsKTsKICAgICBscEFjY2VsVGJsLT53Q291bnQgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAlscEFjY2VsVGJsLT50YmxbaV0udHlwZSA9ICoobHArKyk7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJbHBBY2NlbFRibC0+dGJsW2ldLnR5cGUpOwogCWxwQWNjZWxUYmwtPndDb3VudCsrOwogIAl9Ci0gICAgR2xvYmFsVW5sb2NrKGhBY2NlbCk7CisgICAgR2xvYmFsVW5sb2NrMTYoaEFjY2VsKTsKICAgICBGcmVlUmVzb3VyY2UoIHJzY19tZW0gKTsKICAgICByZXR1cm4gaEFjY2VsOwogfQpAQCAtMzE4LDcgKzMxOCw3IEBACiAKICAgICBkcHJpbnRmX2FjY2VsKHN0ZGRlYiwgIlRyYW5zbGF0ZUFjY2VsZXJhdG9ycyBoQWNjZWw9JTA0eCAhXG4iLCBoQWNjZWwpOwogCi0gICAgbHBBY2NlbFRibCA9IChMUEFDQ0VMSEVBREVSKUdsb2JhbExvY2soaEFjY2VsKTsKKyAgICBscEFjY2VsVGJsID0gKExQQUNDRUxIRUFERVIpR2xvYmFsTG9jazE2KGhBY2NlbCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxwQWNjZWxUYmwtPndDb3VudDsgaSsrKSB7CiAJaWYobHBBY2NlbFRibC0+dGJsW2ldLnR5cGUgJiBWSVJUS0VZX0FDQ0VMKSB7CiAJICAgIGlmKG1zZy0+d1BhcmFtID09IGxwQWNjZWxUYmwtPnRibFtpXS53RXZlbnQgJiYKQEAgLTMzMiw3ICszMzIsNyBAQAogCQkJICAgIChTSElGVF9BQ0NFTCB8IENPTlRST0xfQUNDRUwgfCBBTFRfQUNDRUwpKSkgewogCQkgICAgU2VuZE1lc3NhZ2UoaFduZCwgV01fQ09NTUFORCwgbHBBY2NlbFRibC0+dGJsW2ldLndJRHZhbCwKIAkJCQkweDAwMDEwMDAwTCk7Ci0JCSAgICBHbG9iYWxVbmxvY2soaEFjY2VsKTsKKwkJICAgIEdsb2JhbFVubG9jazE2KGhBY2NlbCk7CiAJCSAgICByZXR1cm4gMTsKIAkgICAgICAgIH0KIAkJaWYgKG1zZy0+bWVzc2FnZSA9PSBXTV9LRVlVUCB8fCBtc2ctPm1lc3NhZ2UgPT0gV01fU1lTS0VZVVApCkBAIC0zNDMsMTIgKzM0MywxMiBAQAogCSAgICBpZiAobXNnLT53UGFyYW0gPT0gbHBBY2NlbFRibC0+dGJsW2ldLndFdmVudCAmJgogCQltc2ctPm1lc3NhZ2UgPT0gV01fQ0hBUikgewogCQlTZW5kTWVzc2FnZShoV25kLCBXTV9DT01NQU5ELCBscEFjY2VsVGJsLT50YmxbaV0ud0lEdmFsLCAweDAwMDEwMDAwTCk7Ci0JCUdsb2JhbFVubG9jayhoQWNjZWwpOworCQlHbG9iYWxVbmxvY2sxNihoQWNjZWwpOwogCQlyZXR1cm4gMTsKIAkJfQogCSAgICB9CiAJfQotICAgIEdsb2JhbFVubG9jayhoQWNjZWwpOworICAgIEdsb2JhbFVubG9jazE2KGhBY2NlbCk7CiAgICAgcmV0dXJuIDA7CiB9CiAMCmRpZmYgLS1naXQgYS9sb2FkZXIvdGFzay5jIGIvbG9hZGVyL3Rhc2suYwppbmRleCBiYWI2Nzk0Li41MmJlN2E3IDEwMDY0NAotLS0gYS9sb2FkZXIvdGFzay5jCisrKyBiL2xvYWRlci90YXNrLmMKQEAgLTc0LDcgKzc0LDcgQEAKICAqLwogSFRBU0sgVEFTS19HZXROZXh0VGFzayggSFRBU0sgaFRhc2sgKQogewotICAgIFREQiogcFRhc2sgPSAoVERCKilHbG9iYWxMb2NrKGhUYXNrKTsKKyAgICBUREIqIHBUYXNrID0gKFREQiopR2xvYmFsTG9jazE2KGhUYXNrKTsKIAogICAgIGlmIChwVGFzay0+aE5leHQpIHJldHVybiBwVGFzay0+aE5leHQ7CiAgICAgcmV0dXJuIChoRmlyc3RUYXNrICE9IGhUYXNrKSA/IGhGaXJzdFRhc2sgOiAwOyAKQEAgLTE0MSw4ICsxNDEsOCBAQAogCiAgICAgLyogTm93IGFsbG9jYXRlIHRoZSBlbnZpcm9ubWVudCAqLwogCi0gICAgaWYgKCEoaGFuZGxlID0gR2xvYmFsQWxsb2MoIEdNRU1fRklYRUQsIHNpemUgKSkpIHJldHVybiAwOwotICAgIHAgPSAoY2hhciAqKUdsb2JhbExvY2soIGhhbmRsZSApOworICAgIGlmICghKGhhbmRsZSA9IEdsb2JhbEFsbG9jMTYoIEdNRU1fRklYRUQsIHNpemUgKSkpIHJldHVybiAwOworICAgIHAgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggaGFuZGxlICk7CiAKICAgICAvKiBBbmQgZmlsbCBpdCB3aXRoIHRoZSBVbml4IGVudmlyb25tZW50ICovCiAKQEAgLTE4MSw3ICsxODEsNyBAQAogCiAgICAgLyogRGlzcGxheSBpdCAqLwogCi0gICAgcCA9IChjaGFyICopIEdsb2JhbExvY2soIGhhbmRsZSApOworICAgIHAgPSAoY2hhciAqKSBHbG9iYWxMb2NrMTYoIGhhbmRsZSApOwogICAgIGRwcmludGZfdGFzayhzdGRkZWIsICJNYXN0ZXIgRE9TIGVudmlyb25tZW50IGF0ICVwXG4iLCBwKTsKICAgICBmb3IgKDsgKnA7IHAgKz0gc3RybGVuKHApICsgMSkgZHByaW50Zl90YXNrKHN0ZGRlYiwgIiAgICAlc1xuIiwgcCk7CiAgICAgZHByaW50Zl90YXNrKCBzdGRkZWIsICJQcm9nbmFtZTogJXNcbiIsIHArMyApOwpAQCAtMTk4LDExICsxOTgsMTEgQEAKICAgICBIVEFTSyAqcHJldlRhc2s7CiAgICAgVERCICpwVGFzazsKIAotICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhUYXNrICkpKSByZXR1cm47CisgICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoVGFzayApKSkgcmV0dXJuOwogICAgIHByZXZUYXNrID0gJmhGaXJzdFRhc2s7CiAgICAgd2hpbGUgKCpwcmV2VGFzaykKICAgICB7Ci0gICAgICAgIFREQiAqcHJldlRhc2tQdHIgPSAoVERCICopR2xvYmFsTG9jayggKnByZXZUYXNrICk7CisgICAgICAgIFREQiAqcHJldlRhc2tQdHIgPSAoVERCICopR2xvYmFsTG9jazE2KCAqcHJldlRhc2sgKTsKICAgICAgICAgaWYgKHByZXZUYXNrUHRyLT5wcmlvcml0eSA+PSBwVGFzay0+cHJpb3JpdHkpIGJyZWFrOwogICAgICAgICBwcmV2VGFzayA9ICZwcmV2VGFza1B0ci0+aE5leHQ7CiAgICAgfQpAQCAtMjIzLDEyICsyMjMsMTIgQEAKICAgICBwcmV2VGFzayA9ICZoRmlyc3RUYXNrOwogICAgIHdoaWxlICgqcHJldlRhc2sgJiYgKCpwcmV2VGFzayAhPSBoVGFzaykpCiAgICAgewotICAgICAgICBwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCAqcHJldlRhc2sgKTsKKyAgICAgICAgcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCAqcHJldlRhc2sgKTsKICAgICAgICAgcHJldlRhc2sgPSAmcFRhc2stPmhOZXh0OwogICAgIH0KICAgICBpZiAoKnByZXZUYXNrKQogICAgIHsKLSAgICAgICAgcFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggKnByZXZUYXNrICk7CisgICAgICAgIHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggKnByZXZUYXNrICk7CiAgICAgICAgICpwcmV2VGFzayA9IHBUYXNrLT5oTmV4dDsKICAgICAgICAgcFRhc2stPmhOZXh0ID0gMDsKICAgICAgICAgblRhc2tDb3VudC0tOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgV09SRCBmcmVlOwogICAgIFRIVU5LUyAqcFRodW5rOwogCi0gICAgcFRodW5rID0gKFRIVU5LUyAqKSgoQllURSAqKUdsb2JhbExvY2soIGhhbmRsZSApICsgb2Zmc2V0KTsKKyAgICBwVGh1bmsgPSAoVEhVTktTICopKChCWVRFICopR2xvYmFsTG9jazE2KCBoYW5kbGUgKSArIG9mZnNldCk7CiAgICAgcFRodW5rLT5uZXh0ID0gMDsKICAgICBwVGh1bmstPm1hZ2ljID0gVEhVTktfTUFHSUM7CiAgICAgcFRodW5rLT5mcmVlID0gKGludCkmcFRodW5rLT50aHVua3MgLSAoaW50KXBUaHVuazsKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgIFRIVU5LUyAqcFRodW5rOwogICAgIFdPUkQgc2VsLCBiYXNlOwogICAgIAotICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhUYXNrICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhUYXNrICkpKSByZXR1cm4gMDsKICAgICBzZWwgPSBwVGFzay0+aENTQWxpYXM7CiAgICAgcFRodW5rID0gJnBUYXNrLT50aHVua3M7CiAgICAgYmFzZSA9IChpbnQpcFRodW5rIC0gKGludClwVGFzazsKQEAgLTI4OSwxMiArMjg5LDEyIEBACiAgICAgICAgICAgICBUQVNLX0NyZWF0ZVRodW5rcyggc2VsLCAwLCBNSU5fVEhVTktTICk7CiAgICAgICAgICAgICBwVGh1bmstPm5leHQgPSBzZWw7CiAgICAgICAgIH0KLSAgICAgICAgcFRodW5rID0gKFRIVU5LUyAqKUdsb2JhbExvY2soIHNlbCApOworICAgICAgICBwVGh1bmsgPSAoVEhVTktTICopR2xvYmFsTG9jazE2KCBzZWwgKTsKICAgICAgICAgYmFzZSA9IDA7CiAgICAgfQogICAgIGJhc2UgKz0gcFRodW5rLT5mcmVlOwogICAgIHBUaHVuay0+ZnJlZSA9ICooV09SRCAqKSgoQllURSAqKXBUaHVuayArIHBUaHVuay0+ZnJlZSk7Ci0gICAgcmV0dXJuIE1BS0VMT05HKCBiYXNlLCBzZWwgKTsKKyAgICByZXR1cm4gUFRSX1NFR19PRkZfVE9fU0VHUFRSKCBzZWwsIGJhc2UgKTsKIH0KICNlbmRpZgogCkBAIC0zMTEsMTQgKzMxMSwxNCBAQAogICAgIFRIVU5LUyAqcFRodW5rOwogICAgIFdPUkQgc2VsLCBiYXNlOwogICAgIAotICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhUYXNrICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhUYXNrICkpKSByZXR1cm4gMDsKICAgICBzZWwgPSBwVGFzay0+aENTQWxpYXM7CiAgICAgcFRodW5rID0gJnBUYXNrLT50aHVua3M7CiAgICAgYmFzZSA9IChpbnQpcFRodW5rIC0gKGludClwVGFzazsKICAgICB3aGlsZSAoc2VsICYmIChzZWwgIT0gSElXT1JEKHRodW5rKSkpCiAgICAgewogICAgICAgICBzZWwgPSBwVGh1bmstPm5leHQ7Ci0gICAgICAgIHBUaHVuayA9IChUSFVOS1MgKilHbG9iYWxMb2NrKCBzZWwgKTsKKyAgICAgICAgcFRodW5rID0gKFRIVU5LUyAqKUdsb2JhbExvY2sxNiggc2VsICk7CiAgICAgICAgIGJhc2UgPSAwOwogICAgIH0KICAgICBpZiAoIXNlbCkgcmV0dXJuIEZBTFNFOwpAQCAtMzM5LDcgKzMzOSw3IEBACiBzdGF0aWMgdm9pZCBUQVNLX0NhbGxUb1N0YXJ0KHZvaWQpCiB7CiAgICAgaW50IGNzX3JlZywgZHNfcmVnLCBpcF9yZWc7Ci0gICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoQ3VycmVudFRhc2sgKTsKKyAgICBUREIgKnBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaEN1cnJlbnRUYXNrICk7CiAgICAgTkVfTU9EVUxFICpwTW9kdWxlID0gTU9EVUxFX0dldFB0ciggcFRhc2stPmhNb2R1bGUgKTsKICAgICBTRUdUQUJMRUVOVFJZICpwU2VnVGFibGUgPSBORV9TRUdfVEFCTEUoIHBNb2R1bGUgKTsKIApAQCAtNDA2LDI0ICs0MDYsMjQgQEAKICAgICBoVGFzayA9IEdMT0JBTF9BbGxvYyggR01FTV9GSVhFRCB8IEdNRU1fWkVST0lOSVQsIHNpemVvZihUREIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBoTW9kdWxlLCBGQUxTRSwgRkFMU0UsIEZBTFNFICk7CiAgICAgaWYgKCFoVGFzaykgcmV0dXJuIDA7Ci0gICAgcFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggaFRhc2sgKTsKKyAgICBwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhUYXNrICk7CiAKICAgICAgIC8qIEFsbG9jYXRlIHRoZSBuZXcgZW52aXJvbm1lbnQgYmxvY2sgKi8KIAogICAgIGlmICghKGhQYXJlbnRFbnYgPSBoRW52aXJvbm1lbnQpKQogICAgIHsKLSAgICAgICAgVERCICpwUGFyZW50ID0gKFREQiAqKUdsb2JhbExvY2soIGhDdXJyZW50VGFzayApOworICAgICAgICBUREIgKnBQYXJlbnQgPSAoVERCICopR2xvYmFsTG9jazE2KCBoQ3VycmVudFRhc2sgKTsKICAgICAgICAgaFBhcmVudEVudiA9IHBQYXJlbnQgPyBwUGFyZW50LT5wZGIuZW52aXJvbm1lbnQgOiBoRE9TRW52aXJvbm1lbnQ7CiAgICAgfQogICAgIC8qIEZJWE1FOiBkbyB3ZSByZWFsbHkgbmVlZCB0byBtYWtlIGEgY29weSBhbHNvIHdoZW4gKi8KICAgICAvKiAgICAgICAgd2UgZG9uJ3QgdXNlIHRoZSBwYXJlbnQgZW52aXJvbm1lbnQ/ICovCi0gICAgaWYgKCEoaEVudmlyb25tZW50ID0gR2xvYmFsQWxsb2MoIEdNRU1fRklYRUQsIEdsb2JhbFNpemUoIGhQYXJlbnRFbnYgKSApKSkKKyAgICBpZiAoIShoRW52aXJvbm1lbnQgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX0ZJWEVELCBHbG9iYWxTaXplMTYoaFBhcmVudEVudikpKSkKICAgICB7Ci0gICAgICAgIEdsb2JhbEZyZWUoIGhUYXNrICk7CisgICAgICAgIEdsb2JhbEZyZWUxNiggaFRhc2sgKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIG1lbWNweSggR2xvYmFsTG9jayggaEVudmlyb25tZW50ICksIEdsb2JhbExvY2soIGhQYXJlbnRFbnYgKSwKLSAgICAgICAgICAgIEdsb2JhbFNpemUoIGhQYXJlbnRFbnYgKSApOworICAgIG1lbWNweSggR2xvYmFsTG9jazE2KCBoRW52aXJvbm1lbnQgKSwgR2xvYmFsTG9jazE2KCBoUGFyZW50RW52ICksCisgICAgICAgICAgICBHbG9iYWxTaXplMTYoIGhQYXJlbnRFbnYgKSApOwogCiAgICAgICAvKiBHZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KICAgICAKQEAgLTUwMSw4ICs1MDEsOCBAQAogCiAgICAgICAvKiBEZWZhdWx0IERUQSBvdmVyd3JpdGVzIGNvbW1hbmQtbGluZSAqLwogCi0gICAgcFRhc2stPmR0YSA9IE1BS0VMT05HKCAoaW50KSZwVGFzay0+cGRiLmNtZExpbmUgLSAoaW50KSZwVGFzay0+cGRiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRhc2stPmhQREIgKTsKKyAgICBwVGFzay0+ZHRhID0gUFRSX1NFR19PRkZfVE9fU0VHUFRSKCBwVGFzay0+aFBEQiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpJnBUYXNrLT5wZGIuY21kTGluZSAtIChpbnQpJnBUYXNrLT5wZGIgKTsKIAogICAgICAgLyogQWxsb2NhdGUgdGhlIDMyLWJpdCBzdGFjayAqLwogCkBAIC01MTIsOCArNTEyLDggQEAKIAogICAgICAgLyogQ3JlYXRlIHRoZSAzMi1iaXQgc3RhY2sgZnJhbWUgKi8KIAotICAgICooRFdPUkQgKilHbG9iYWxMb2NrKHBUYXNrLT5oU3RhY2szMikgPSAweERFQURCRUVGOwotICAgIHN0YWNrMzJUb3AgPSAoY2hhciopR2xvYmFsTG9jayhwVGFzay0+aFN0YWNrMzIpICsgU1RBQ0szMl9TSVpFOworICAgICooRFdPUkQgKilHbG9iYWxMb2NrMTYocFRhc2stPmhTdGFjazMyKSA9IDB4REVBREJFRUY7CisgICAgc3RhY2szMlRvcCA9IChjaGFyKilHbG9iYWxMb2NrMTYocFRhc2stPmhTdGFjazMyKSArIFNUQUNLMzJfU0laRTsKICAgICBmcmFtZTMyID0gKFNUQUNLMzJGUkFNRSAqKXN0YWNrMzJUb3AgLSAxOwogICAgIGZyYW1lMzItPnNhdmVkX2VzcCA9IChEV09SRClzdGFjazMyVG9wOwogICAgIGZyYW1lMzItPmVkaSA9IDA7CkBAIC01ODMsNyArNTgzLDcgQEAKICAgICBUREIgKnBUYXNrOwogICAgIEhBTkRMRSBoUERCOwogCi0gICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggaFRhc2sgKSkpIHJldHVybjsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhUYXNrICkpKSByZXR1cm47CiAgICAgaFBEQiA9IHBUYXNrLT5oUERCOwogCiAgICAgLyogRnJlZSB0aGUgdGFzayBtb2R1bGUgKi8KQEAgLTYwMSw3ICs2MDEsNyBAQAogCiAgICAgLyogRnJlZSB0aGUgdGFzayBzdHJ1Y3R1cmUgaXRzZWxmICovCiAKLSAgICBHbG9iYWxGcmVlKCBoVGFzayApOworICAgIEdsb2JhbEZyZWUxNiggaFRhc2sgKTsKIAogICAgIC8qIEZyZWUgYWxsIG1lbW9yeSB1c2VkIGJ5IHRoaXMgdGFzayAoaW5jbHVkaW5nIHRoZSAzMi1iaXQgc3RhY2ssICovCiAgICAgLyogdGhlIGVudmlyb25tZW50IGJsb2NrIGFuZCB0aGUgdGh1bmsgc2VnbWVudHMpLiAqLwpAQCAtNjIyLDcgKzYyMiw3IEBACiB7CiAgICAgZXh0ZXJuIHZvaWQgRVhFQ19FeGl0V2luZG93cyggaW50IHJldENvZGUgKTsKIAotICAgIFREQiogcFRhc2sgPSAoVERCKikgR2xvYmFsTG9jayggaEN1cnJlbnRUYXNrICk7CisgICAgVERCKiBwVGFzayA9IChUREIqKSBHbG9iYWxMb2NrMTYoIGhDdXJyZW50VGFzayApOwogCiAgICAgLyogUGVyZm9ybSBVU0VSIGNsZWFudXAgKi8KIApAQCAtNjg1LDEzICs2ODUsMTMgQEAKIAogICAgICAgLyogRmluZCBhIHRhc2sgdG8geWllbGQgdG8gKi8KIAotICAgIHBPbGRUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhDdXJyZW50VGFzayApOworICAgIHBPbGRUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaEN1cnJlbnRUYXNrICk7CiAgICAgaWYgKHBPbGRUYXNrICYmIHBPbGRUYXNrLT5oWWllbGRUbykKICAgICB7CiAgICAgICAgIC8qIElmIGEgdGFzayBpcyBzdG9yZWQgaW4gaFlpZWxkVG8gb2YgdGhlIGN1cnJlbnQgdGFzayAocHV0IHRoZXJlICovCiAgICAgICAgIC8qIGJ5IERpcmVjdGVkWWllbGQpLCB5aWVsZCB0byBpdCBvbmx5IGlmIGl0IGhhcyBldmVudHMgcGVuZGluZy4gICovCiAgICAgICAgIGhUYXNrID0gcE9sZFRhc2stPmhZaWVsZFRvOwotICAgICAgICBpZiAoIShwTmV3VGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApKSB8fCAhcE5ld1Rhc2stPm5FdmVudHMpCisgICAgICAgIGlmICghKHBOZXdUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaFRhc2sgKSkgfHwgIXBOZXdUYXNrLT5uRXZlbnRzKQogICAgICAgICAgICAgaFRhc2sgPSAwOwogICAgIH0KIApAQCAtNzAwLDcgKzcwMCw3IEBACiAgICAgICAgIGhUYXNrID0gaEZpcnN0VGFzazsKICAgICAgICAgd2hpbGUgKGhUYXNrKQogICAgICAgICB7Ci0gICAgICAgICAgICBwTmV3VGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApOworICAgICAgICAgICAgcE5ld1Rhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoVGFzayApOwogICAgICAgICAgICAgaWYgKHBOZXdUYXNrLT5uRXZlbnRzICYmIChoVGFzayAhPSBoQ3VycmVudFRhc2spKSBicmVhazsKICAgICAgICAgICAgIGhUYXNrID0gcE5ld1Rhc2stPmhOZXh0OwogICAgICAgICB9CkBAIC03MTMsNyArNzEzLDcgQEAKIAogICAgIGlmICghaFRhc2spIHJldHVybjsgIC8qIERvIG5vdGhpbmcgKi8KIAotICAgIHBOZXdUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhUYXNrICk7CisgICAgcE5ld1Rhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoVGFzayApOwogICAgIGRwcmludGZfdGFzayggc3RkZGViLCAiU3dpdGNoaW5nIHRvIHRhc2sgJTA0eCAoJS44cylcbiIsCiAgICAgICAgICAgICAgICAgICBoVGFzaywgcE5ld1Rhc2stPm1vZHVsZV9uYW1lICk7CiAKQEAgLTc0Myw3ICs3NDMsNyBAQAogICAgIElGMTYzMl9TYXZlZDE2X3NzICAgPSBwTmV3VGFzay0+c3M7CiAgICAgSUYxNjMyX1NhdmVkMTZfc3AgICA9IHBOZXdUYXNrLT5zcDsKICAgICBJRjE2MzJfU2F2ZWQzMl9lc3AgID0gcE5ld1Rhc2stPmVzcDsKLSAgICBJRjE2MzJfU3RhY2szMl9iYXNlID0gV0lOMTZfR2xvYmFsTG9jayggcE5ld1Rhc2stPmhTdGFjazMyICk7CisgICAgSUYxNjMyX1N0YWNrMzJfYmFzZSA9IFdJTjE2X0dsb2JhbExvY2sxNiggcE5ld1Rhc2stPmhTdGFjazMyICk7CiAjZW5kaWYKIH0KIApAQCAtNzY3LDcgKzc2Nyw3IEBACiAjaWZuZGVmIFdJTkVMSUIKICAgICBFQVhfcmVnKCZjb250ZXh0KSA9IDA7CiAjZW5kaWYKLSAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoQ3VycmVudFRhc2sgKSkpIHJldHVybjsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhDdXJyZW50VGFzayApKSkgcmV0dXJuOwogICAgIGlmICghKHBNb2R1bGUgPSBNT0RVTEVfR2V0UHRyKCBwVGFzay0+aE1vZHVsZSApKSkgcmV0dXJuOwogCiAgICAgaWYgKGZpcnN0VGFzaykKQEAgLTgzNSw3ICs4MzUsNyBAQAogICAgIFREQiAqcFRhc2s7CiAKICAgICBpZiAoIWhUYXNrKSBoVGFzayA9IGhDdXJyZW50VGFzazsKLSAgICBwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApOworICAgIHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaFRhc2sgKTsKICAgICBpZiAocFRhc2stPm5FdmVudHMgPiAwKQogICAgIHsKICAgICAgICAgcFRhc2stPm5FdmVudHMtLTsKQEAgLTg1Niw3ICs4NTYsNyBAQAogICAgIFREQiAqcFRhc2s7CiAKICAgICBpZiAoIWhUYXNrKSBoVGFzayA9IGhDdXJyZW50VGFzazsKLSAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApKSkgcmV0dXJuOworICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaFRhc2sgKSkpIHJldHVybjsKICAgICBwVGFzay0+bkV2ZW50cysrOwogfQogCkBAIC04NzAsNyArODcwLDcgQEAKICAgICBpbnQgbmV3cHJpb3JpdHk7CiAKICAgICBpZiAoIWhUYXNrKSBoVGFzayA9IGhDdXJyZW50VGFzazsKLSAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApKSkgcmV0dXJuOworICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaFRhc2sgKSkpIHJldHVybjsKICAgICBuZXdwcmlvcml0eSA9IHBUYXNrLT5wcmlvcml0eSArIGRlbHRhOwogICAgIGlmIChuZXdwcmlvcml0eSA8IC0zMikgbmV3cHJpb3JpdHkgPSAtMzI7CiAgICAgZWxzZSBpZiAobmV3cHJpb3JpdHkgPiAxNSkgbmV3cHJpb3JpdHkgPSAxNTsKQEAgLTkwOSw3ICs5MDksNyBAQAogewogICAgIFREQiAqcEN1clRhc2s7CiAKLSAgICBwQ3VyVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoQ3VycmVudFRhc2sgKTsKKyAgICBwQ3VyVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhDdXJyZW50VGFzayApOwogICAgIGlmIChwQ3VyVGFzaykgcEN1clRhc2stPm5FdmVudHMrKzsgIC8qIE1ha2Ugc3VyZSB3ZSBnZXQgYmFjayBoZXJlICovCiAgICAgVEFTS19TQ0hFRFVMRSgpOwogICAgIGlmIChwQ3VyVGFzaykgcEN1clRhc2stPm5FdmVudHMtLTsKQEAgLTkyMyw3ICs5MjMsNyBAQAogewogICAgIFREQiAqcEN1clRhc2s7CiAKLSAgICBpZiAoKHBDdXJUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhDdXJyZW50VGFzayApKSAhPSBOVUxMKQorICAgIGlmICgocEN1clRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoQ3VycmVudFRhc2sgKSkgIT0gTlVMTCkKICAgICAgICAgcEN1clRhc2stPmhZaWVsZFRvID0gaFRhc2s7CiAKICAgICBPbGRZaWVsZCgpOwpAQCAtOTkzLDkgKzk5Myw5IEBACiAKICAgICAvKiBDaGVjayBpZiBpdCBpcyByZWFsbHkgYSB0aHVuayAqLwogICAgIGlmICgodGh1bmtbMF0gPT0gMHhiOCkgJiYgKHRodW5rWzNdID09IDB4ZWEpKQotICAgICAgICBoYW5kbGUgPSBHbG9iYWxIYW5kbGUoIHRodW5rWzZdICsgKHRodW5rWzddIDw8IDgpICk7CisgICAgICAgIGhhbmRsZSA9IEdsb2JhbEhhbmRsZTE2KCB0aHVua1s2XSArICh0aHVua1s3XSA8PCA4KSApOwogICAgIGVsc2UKLSAgICAgICAgaGFuZGxlID0gR2xvYmFsSGFuZGxlKCBISVdPUkQocHJvYykgKTsKKyAgICAgICAgaGFuZGxlID0gR2xvYmFsSGFuZGxlMTYoIEhJV09SRChwcm9jKSApOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKICNlbHNlCkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogICAgIFREQiAqcFRhc2s7CiAKICAgICBpZiAoIWhUYXNrKSBoVGFzayA9IGhDdXJyZW50VGFzazsKLSAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApKSkgcmV0dXJuIDA7CisgICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoVGFzayApKSkgcmV0dXJuIDA7CiAKICAgICBoUHJldiA9IHBUYXNrLT5oUXVldWU7CiAgICAgcFRhc2stPmhRdWV1ZSA9IGhRdWV1ZTsKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAgICAgVERCICpwVGFzazsKIAogICAgIGlmICghaFRhc2spIGhUYXNrID0gaEN1cnJlbnRUYXNrOwotICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhUYXNrICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhUYXNrICkpKSByZXR1cm4gMDsKICAgICByZXR1cm4gcFRhc2stPmhRdWV1ZTsKIH0KIApAQCAtMTA4MCw3ICsxMDgwLDcgQEAKIHsKICAgICBUREIgKnBUYXNrOwogCi0gICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggaEN1cnJlbnRUYXNrICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhDdXJyZW50VGFzayApKSkgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHBUYXNrLT5oUERCOwogfQogCkBAIC0xMDkwLDEwICsxMDkwLDEwIEBACiAgKi8KIGludCBHZXRJbnN0YW5jZURhdGEoIEhBTkRMRSBpbnN0YW5jZSwgV09SRCBidWZmZXIsIGludCBsZW4gKQogewotICAgIGNoYXIgKnB0ciA9IChjaGFyICopR2xvYmFsTG9jayggaW5zdGFuY2UgKTsKKyAgICBjaGFyICpwdHIgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggaW5zdGFuY2UgKTsKICAgICBpZiAoIXB0ciB8fCAhbGVuKSByZXR1cm4gMDsKICAgICBpZiAoKGludClidWZmZXIgKyBsZW4gPj0gMHgxMDAwMCkgbGVuID0gMHgxMDAwMCAtIGJ1ZmZlcjsKLSAgICBtZW1jcHkoIHB0ciArIGJ1ZmZlciwgKGNoYXIgKilHbG9iYWxMb2NrKCBDVVJSRU5UX0RTICkgKyBidWZmZXIsIGxlbiApOworICAgIG1lbWNweSggcHRyICsgYnVmZmVyLCAoY2hhciAqKUdsb2JhbExvY2sxNiggQ1VSUkVOVF9EUyApICsgYnVmZmVyLCBsZW4gKTsKICAgICByZXR1cm4gbGVuOwogfQogCkBAIC0xMTA2LDcgKzExMDYsNyBAQAogICAgIFREQiAqcFRhc2s7CiAgICAgVUlOVCBvbGRNb2RlOwogCi0gICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggaEN1cnJlbnRUYXNrICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIGhDdXJyZW50VGFzayApKSkgcmV0dXJuIDA7CiAgICAgb2xkTW9kZSA9IHBUYXNrLT5lcnJvcl9tb2RlOwogICAgIHBUYXNrLT5lcnJvcl9tb2RlID0gbW9kZTsKICAgICByZXR1cm4gb2xkTW9kZTsKQEAgLTExMjAsOCArMTEyMCw4IEBACiB7CiAgICAgVERCICpwVGFzazsKIAotICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGhDdXJyZW50VGFzayApKSkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChTRUdQVFIpV0lOMTZfR2xvYmFsTG9jayggcFRhc2stPnBkYi5lbnZpcm9ubWVudCApOworICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaEN1cnJlbnRUYXNrICkpKSByZXR1cm4gMDsKKyAgICByZXR1cm4gKFNFR1BUUilXSU4xNl9HbG9iYWxMb2NrMTYoIHBUYXNrLT5wZGIuZW52aXJvbm1lbnQgKTsKIH0KIAogCkBAIC0xMTQxLDcgKzExNDEsNyBAQAogewogICAgIFREQiAqcFRhc2s7CiAKLSAgICBpZiAoIShwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoQ3VycmVudFRhc2sgKSkpIHJldHVybiAwOworICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaEN1cnJlbnRUYXNrICkpKSByZXR1cm4gMDsKICAgICByZXR1cm4gcFRhc2stPmhJbnN0YW5jZTsKIH0KIApAQCAtMTE1Myw4ICsxMTUzLDggQEAKIHsKICAgICBUREIgKnBUYXNrOwogCi0gICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggaFRhc2sgKSkpIHJldHVybiBGQUxTRTsKLSAgICBpZiAoR2xvYmFsU2l6ZSggaFRhc2sgKSA8IHNpemVvZihUREIpKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoVGFzayApKSkgcmV0dXJuIEZBTFNFOworICAgIGlmIChHbG9iYWxTaXplMTYoIGhUYXNrICkgPCBzaXplb2YoVERCKSkgcmV0dXJuIEZBTFNFOwogICAgIHJldHVybiAocFRhc2stPm1hZ2ljID09IFREQl9NQUdJQyk7CiB9CiAKQEAgLTExNzAsNyArMTE3MCw3IEBACiAKICAgICAgIC8qIENoZWNrIGZvciBtb2R1bGUgaGFuZGxlICovCiAKLSAgICBpZiAoIShwdHIgPSBHbG9iYWxMb2NrKCBoYW5kbGUgKSkpIHJldHVybiAwOworICAgIGlmICghKHB0ciA9IEdsb2JhbExvY2sxNiggaGFuZGxlICkpKSByZXR1cm4gMDsKICAgICBpZiAoKChORV9NT0RVTEUgKilwdHIpLT5tYWdpYyA9PSBORV9TSUdOQVRVUkUpIHJldHVybiBoYW5kbGU7CiAKICAgICAgIC8qIENoZWNrIHRoZSBvd25lciBmb3IgbW9kdWxlIGhhbmRsZSAqLwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKICNlbHNlCiAgICAgb3duZXIgPSBOVUxMOwogI2VuZGlmCi0gICAgaWYgKCEocHRyID0gR2xvYmFsTG9jayggb3duZXIgKSkpIHJldHVybiAwOworICAgIGlmICghKHB0ciA9IEdsb2JhbExvY2sxNiggb3duZXIgKSkpIHJldHVybiAwOwogICAgIGlmICgoKE5FX01PRFVMRSAqKXB0ciktPm1hZ2ljID09IE5FX1NJR05BVFVSRSkgcmV0dXJuIG93bmVyOwogCiAgICAgICAvKiBTZWFyY2ggZm9yIHRoaXMgaGFuZGxlIGFuZCBpdHMgb3duZXIgaW5zaWRlIGFsbCB0YXNrcyAqLwpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKICAgICBoVGFzayA9IGhGaXJzdFRhc2s7CiAgICAgd2hpbGUgKGhUYXNrKQogICAgIHsKLSAgICAgICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBoVGFzayApOworICAgICAgICBUREIgKnBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaFRhc2sgKTsKICAgICAgICAgaWYgKChoVGFzayA9PSBoYW5kbGUpIHx8CiAgICAgICAgICAgICAocFRhc2stPmhJbnN0YW5jZSA9PSBoYW5kbGUpIHx8CiAgICAgICAgICAgICAocFRhc2stPmhRdWV1ZSA9PSBoYW5kbGUpIHx8CkBAIC0xMjIzLDcgKzEyMjMsNyBAQAogCiAgICAgZHByaW50Zl90b29saGVscCggc3RkZGViLCAiVGFza05leHQoJXApOiB0YXNrPSUwNHhcbiIsIGxwdGUsIGxwdGUtPmhOZXh0ICk7CiAgICAgaWYgKCFscHRlLT5oTmV4dCkgcmV0dXJuIEZBTFNFOwotICAgIHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soIGxwdGUtPmhOZXh0ICk7CisgICAgcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBscHRlLT5oTmV4dCApOwogICAgIGlmICghcFRhc2sgfHwgcFRhc2stPm1hZ2ljICE9IFREQl9NQUdJQykgcmV0dXJuIEZBTFNFOwogICAgIHBJbnN0RGF0YSA9IChJTlNUQU5DRURBVEEgKilQVFJfU0VHX09GRl9UT19MSU4oIHBUYXNrLT5oSW5zdGFuY2UsIDAgKTsKICAgICBscHRlLT5oVGFzayAgICAgICAgID0gbHB0ZS0+aE5leHQ7CmRpZmYgLS1naXQgYS9tZW1vcnkvYXRvbS5jIGIvbWVtb3J5L2F0b20uYwppbmRleCA5Njc2YTU0Li5jODcxYThmIDEwMDY0NAotLS0gYS9tZW1vcnkvYXRvbS5jCisrKyBiL21lbW9yeS9hdG9tLmMKQEAgLTE1OSw2ICsxNTksNyBAQAogICAgIGlmICghZW50cnkpIHJldHVybiAwOwogICAgIC8qIFJlbG9hZCB0aGUgdGFibGUgcHRyIGluIGNhc2UgaXQgbW92ZWQgaW4gbGluZWFyIG1lbW9yeSAqLwogICAgIHRhYmxlID0gQVRPTV9HZXRUYWJsZSggc2VsZWN0b3IsIEZBTFNFICk7CisgICAgc3RyID0gUFRSX1NFR19UT19MSU4oIG5hbWUgKTsKICAgICBlbnRyeVB0ciA9IEFUT01fTWFrZVB0ciggc2VsZWN0b3IsIGVudHJ5ICk7CiAgICAgZW50cnlQdHItPm5leHQgPSB0YWJsZS0+ZW50cmllc1toYXNoXTsKICAgICBlbnRyeVB0ci0+cmVmQ291bnQgPSAxOwpkaWZmIC0tZ2l0IGEvbWVtb3J5L2dsb2JhbC5jIGIvbWVtb3J5L2dsb2JhbC5jCmluZGV4IDU0ZGNkMDcuLjc4MDM4NTEgMTAwNjQ0Ci0tLSBhL21lbW9yeS9nbG9iYWwuYworKysgYi9tZW1vcnkvZ2xvYmFsLmMKQEAgLTQsOCArNCw2IEBACiAgKiBDb3B5cmlnaHQgMTk5NSBBbGV4YW5kcmUgSnVsbGlhcmQKICAqLwogCi0jaWZuZGVmIFdJTkVMSUIKLQogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtMjUsMTYgKzIzLDE2IEBACiAgIC8qIEdsb2JhbCBhcmVuYSBibG9jayAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgICBEV09SRCAgICBiYXNlOyAgICAgICAgICAgLyogQmFzZSBhZGRyZXNzICgwIGlmIGRpc2NhcmRlZCkgKi8KLSAgICBEV09SRCAgICBzaXplOyAgICAgICAgICAgLyogU2l6ZSBpbiBieXRlcyAoMCBpbmRpY2F0ZXMgYSBmcmVlIGJsb2NrKSAqLwotICAgIEhHTE9CQUwgIGhhbmRsZTsgICAgICAgICAvKiBIYW5kbGUgZm9yIHRoaXMgYmxvY2sgKi8KLSAgICBIR0xPQkFMICBoT3duZXI7ICAgICAgICAgLyogT3duZXIgb2YgdGhpcyBibG9jayAqLwotICAgIEJZVEUgICAgIGxvY2tDb3VudDsgICAgICAvKiBDb3VudCBvZiBHbG9iYWxGaXgoKSBjYWxscyAqLwotICAgIEJZVEUgICAgIHBhZ2VMb2NrQ291bnQ7ICAvKiBDb3VudCBvZiBHbG9iYWxQYWdlTG9jaygpIGNhbGxzICovCi0gICAgQllURSAgICAgZmxhZ3M7ICAgICAgICAgIC8qIEFsbG9jYXRpb24gZmxhZ3MgKi8KLSAgICBCWVRFICAgICBzZWxDb3VudDsgICAgICAgLyogTnVtYmVyIG9mIHNlbGVjdG9ycyBhbGxvY2F0ZWQgZm9yIHRoaXMgYmxvY2sgKi8KKyAgICBEV09SRCAgICAgYmFzZTsgICAgICAgICAgLyogQmFzZSBhZGRyZXNzICgwIGlmIGRpc2NhcmRlZCkgKi8KKyAgICBEV09SRCAgICAgc2l6ZTsgICAgICAgICAgLyogU2l6ZSBpbiBieXRlcyAoMCBpbmRpY2F0ZXMgYSBmcmVlIGJsb2NrKSAqLworICAgIEhHTE9CQUwxNiBoYW5kbGU7ICAgICAgICAvKiBIYW5kbGUgZm9yIHRoaXMgYmxvY2sgKi8KKyAgICBIR0xPQkFMMTYgaE93bmVyOyAgICAgICAgLyogT3duZXIgb2YgdGhpcyBibG9jayAqLworICAgIEJZVEUgICAgICBsb2NrQ291bnQ7ICAgICAvKiBDb3VudCBvZiBHbG9iYWxGaXgoKSBjYWxscyAqLworICAgIEJZVEUgICAgICBwYWdlTG9ja0NvdW50OyAvKiBDb3VudCBvZiBHbG9iYWxQYWdlTG9jaygpIGNhbGxzICovCisgICAgQllURSAgICAgIGZsYWdzOyAgICAgICAgIC8qIEFsbG9jYXRpb24gZmxhZ3MgKi8KKyAgICBCWVRFICAgICAgc2VsQ291bnQ7ICAgICAgLyogTnVtYmVyIG9mIHNlbGVjdG9ycyBhbGxvY2F0ZWQgZm9yIHRoaXMgYmxvY2sgKi8KICNpZmRlZiBDT05GSUdfSVBDCi0gICAgaW50ICAgICAgc2htaWQ7CisgICAgaW50ICAgICAgIHNobWlkOwogI2VuZGlmCiB9IEdMT0JBTEFSRU5BOwogCkBAIC05NCwxMCArOTIsMTAgQEAKICAqCiAgKiBDcmVhdGUgYSBnbG9iYWwgaGVhcCBibG9jayBmb3IgYSBmaXhlZCByYW5nZSBvZiBsaW5lYXIgbWVtb3J5LgogICovCi1IR0xPQkFMIEdMT0JBTF9DcmVhdGVCbG9jayggV09SRCBmbGFncywgY29uc3Qgdm9pZCAqcHRyLCBEV09SRCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhHTE9CQUwgaE93bmVyLCBCT09MIGlzQ29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGlzMzJCaXQsIEJPT0wgaXNSZWFkT25seSwKLQkJCSAgICBTSE1EQVRBICpzaG1kYXRhICApCitIR0xPQkFMMTYgR0xPQkFMX0NyZWF0ZUJsb2NrKCBXT1JEIGZsYWdzLCBjb25zdCB2b2lkICpwdHIsIERXT1JEIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIR0xPQkFMMTYgaE93bmVyLCBCT09MIGlzQ29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgaXMzMkJpdCwgQk9PTCBpc1JlYWRPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hNREFUQSAqc2htZGF0YSAgKQogewogICAgIFdPUkQgc2VsLCBzZWxjb3VudDsKICAgICBHTE9CQUxBUkVOQSAqcEFyZW5hOwpAQCAtMTU4LDcgKzE1Niw3IEBACiAgKiBGcmVlIGEgYmxvY2sgYWxsb2NhdGVkIGJ5IEdMT0JBTF9DcmVhdGVCbG9jaywgd2l0aG91dCB0b3VjaGluZwogICogdGhlIGFzc29jaWF0ZWQgbGluZWFyIG1lbW9yeSByYW5nZS4KICAqLwotQk9PTCBHTE9CQUxfRnJlZUJsb2NrKCBIR0xPQkFMIGhhbmRsZSApCitCT09MIEdMT0JBTF9GcmVlQmxvY2soIEhHTE9CQUwxNiBoYW5kbGUgKQogewogICAgIFdPUkQgc2VsOwogCkBAIC0xNzMsMTMgKzE3MSwxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR0xPQkFMX0FsbG9jCiAgKgotICogSW1wbGVtZW50YXRpb24gb2YgR2xvYmFsQWxsb2MoKQorICogSW1wbGVtZW50YXRpb24gb2YgR2xvYmFsQWxsb2MxNigpCiAgKi8KLUhHTE9CQUwgR0xPQkFMX0FsbG9jKCBXT1JEIGZsYWdzLCBEV09SRCBzaXplLCBIR0xPQkFMIGhPd25lciwKLSAgICAgICAgICAgICAgICAgICAgICBCT09MIGlzQ29kZSwgQk9PTCBpczMyQml0LCBCT09MIGlzUmVhZE9ubHkgKQorSEdMT0JBTDE2IEdMT0JBTF9BbGxvYyggVUlOVDE2IGZsYWdzLCBEV09SRCBzaXplLCBIR0xPQkFMMTYgaE93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBpc0NvZGUsIEJPT0wgaXMzMkJpdCwgQk9PTCBpc1JlYWRPbmx5ICkKIHsKICAgICB2b2lkICpwdHI7Ci0gICAgSEdMT0JBTCBoYW5kbGU7CisgICAgSEdMT0JBTDE2IGhhbmRsZTsKICAgICBTSE1EQVRBIHNobWRhdGE7CiAKICAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsQWxsb2M6ICVsZCBmbGFncz0lMDR4XG4iLCBzaXplLCBmbGFncyApOwpAQCAtMjY1LDExICsyNjMsMTEgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxBbGxvYyAgIChLRVJORUwuMTUpCisgKiAgICAgICAgICAgR2xvYmFsQWxsb2MxNiAgIChLRVJORUwuMTUpCiAgKi8KLUhHTE9CQUwgR2xvYmFsQWxsb2MoIFdPUkQgZmxhZ3MsIERXT1JEIHNpemUgKQorSEdMT0JBTDE2IEdsb2JhbEFsbG9jMTYoIFVJTlQxNiBmbGFncywgRFdPUkQgc2l6ZSApCiB7Ci0gICAgSEFORExFIG93bmVyID0gR2V0Q3VycmVudFBEQigpOworICAgIEhBTkRMRTE2IG93bmVyID0gR2V0Q3VycmVudFBEQigpOwogCiAgICAgaWYgKGZsYWdzICYgR01FTV9EREVTSEFSRSkKICAgICAgICAgb3duZXIgPSBHZXRFeGVQdHIob3duZXIpOyAgLyogTWFrZSBpdCBhIG1vZHVsZSBoYW5kbGUgKi8KQEAgLTI3OCw5ICsyNzYsOSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdsb2JhbFJlQWxsb2MgICAoS0VSTkVMLjE2KQorICogICAgICAgICAgIEdsb2JhbFJlQWxsb2MxNiAgIChLRVJORUwuMTYpCiAgKi8KLUhHTE9CQUwgR2xvYmFsUmVBbGxvYyggSEdMT0JBTCBoYW5kbGUsIERXT1JEIHNpemUsIFdPUkQgZmxhZ3MgKQorSEdMT0JBTDE2IEdsb2JhbFJlQWxsb2MxNiggSEdMT0JBTDE2IGhhbmRsZSwgRFdPUkQgc2l6ZSwgVUlOVDE2IGZsYWdzICkKIHsKICAgICBXT1JEIHNlbGNvdW50OwogICAgIERXT1JEIG9sZHNpemU7CkBAIC0yODgsMTQgKzI4NiwxNCBAQAogICAgIEdMT0JBTEFSRU5BICpwQXJlbmEsICpwTmV3QXJlbmE7CiAgICAgV09SRCBzZWwgPSBHbG9iYWxIYW5kbGVUb1NlbCggaGFuZGxlICk7CiAKLSAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsUmVBbGxvYzogJTA0eCAlbGQgZmxhZ3M9JTA0eFxuIiwKKyAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsUmVBbGxvYzE2OiAlMDR4ICVsZCBmbGFncz0lMDR4XG4iLAogICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIHNpemUsIGZsYWdzICk7CiAgICAgaWYgKCFoYW5kbGUpIHJldHVybiAwOwogICAgIAogI2lmZGVmIENPTkZJR19JUEMKICAgICBpZiAoT3B0aW9ucy5pcGMgJiYgKGZsYWdzICYgR01FTV9EREVTSEFSRSB8fCBpc19kZGVfaGFuZGxlKGhhbmRsZSkpKSB7CiAJZnByaW50ZihzdGRuaW1wLAotCQkiR2xvYmFsUmVBbGxvYzogc2hhcmVkIG1lbW9yeSByZWFsbG9jYXRpbmcgdW5pbXBsZW1lbnRlZFxuIik7IAorICAgICAgICAgICAgICAgIkdsb2JhbFJlQWxsb2MxNjogc2hhcmVkIG1lbW9yeSByZWFsbG9jYXRpbmcgdW5pbXBsZW1lbnRlZFxuIik7IAogCXJldHVybiAwOwogICAgIH0KICNlbmRpZiAgLyogQ09ORklHX0lQQyAqLwpAQCAtMzg0LDEzICszODIsMTMgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxGcmVlICAgKEtFUk5FTC4xNykKKyAqICAgICAgICAgICBHbG9iYWxGcmVlMTYgICAoS0VSTkVMLjE3KQogICovCi1IR0xPQkFMIEdsb2JhbEZyZWUoIEhHTE9CQUwgaGFuZGxlICkKK0hHTE9CQUwxNiBHbG9iYWxGcmVlMTYoIEhHTE9CQUwxNiBoYW5kbGUgKQogewotICAgIHZvaWQgKnB0ciA9IEdsb2JhbExvY2soIGhhbmRsZSApOworICAgIHZvaWQgKnB0ciA9IEdsb2JhbExvY2sxNiggaGFuZGxlICk7CiAKLSAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsRnJlZTogJTA0eFxuIiwgaGFuZGxlICk7CisgICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbEZyZWUxNjogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgaWYgKCFHTE9CQUxfRnJlZUJsb2NrKCBoYW5kbGUgKSkgcmV0dXJuIGhhbmRsZTsgIC8qIGZhaWxlZCAqLwogI2lmZGVmIENPTkZJR19JUEMKICAgICBpZiAoaXNfZGRlX2hhbmRsZShoYW5kbGUpKSByZXR1cm4gRERFX0dsb2JhbEZyZWUoaGFuZGxlKTsKQEAgLTQwMSw4MCArMzk5LDg0IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgV0lOMTZfR2xvYmFsTG9jayAgIChLRVJORUwuMTgpCisgKiAgICAgICAgICAgV0lOMTZfR2xvYmFsTG9jazE2ICAgKEtFUk5FTC4xOCkKICAqCi0gKiBUaGlzIGlzIHRoZSBHbG9iYWxMb2NrKCkgZnVuY3Rpb24gdXNlZCBieSAxNi1iaXQgY29kZS4KKyAqIFRoaXMgaXMgdGhlIEdsb2JhbExvY2sxNigpIGZ1bmN0aW9uIHVzZWQgYnkgMTYtYml0IGNvZGUuCiAgKi8KLVNFR1BUUiBXSU4xNl9HbG9iYWxMb2NrKCBIR0xPQkFMIGhhbmRsZSApCitTRUdQVFIgV0lOMTZfR2xvYmFsTG9jazE2KCBIR0xPQkFMMTYgaGFuZGxlICkKIHsKLSAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiV0lOMTZfR2xvYmFsTG9jayglMDR4KSAtPiAlMDhseFxuIiwKKyNpZm5kZWYgV0lORUxJQgorICAgIGRwcmludGZfZ2xvYmFsKCBzdGRkZWIsICJXSU4xNl9HbG9iYWxMb2NrMTYoJTA0eCkgLT4gJTA4bHhcbiIsCiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgTUFLRUxPTkcoIDAsIEdsb2JhbEhhbmRsZVRvU2VsKGhhbmRsZSkpICk7CiAgICAgaWYgKCFoYW5kbGUpIHJldHVybiAwOwogCiAjaWZkZWYgQ09ORklHX0lQQwogICAgIGlmIChpc19kZGVfaGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiAoU0VHUFRSKU1BS0VMT05HKCAwLCBEREVfR2xvYmFsSGFuZGxlVG9TZWwoaGFuZGxlKSApOworICAgICAgICByZXR1cm4gUFRSX1NFR19PRkZfVE9fU0VHUFRSKCBEREVfR2xvYmFsSGFuZGxlVG9TZWwoaGFuZGxlKSwgMCApOwogI2VuZGlmICAvKiBDT05GSUdfSVBDICovCiAKICAgICBpZiAoIUdFVF9BUkVOQV9QVFIoaGFuZGxlKS0+YmFzZSkgcmV0dXJuIChTRUdQVFIpMDsKLSAgICByZXR1cm4gKFNFR1BUUilNQUtFTE9ORyggMCwgR2xvYmFsSGFuZGxlVG9TZWwoaGFuZGxlKSApOworICAgIHJldHVybiBQVFJfU0VHX09GRl9UT19TRUdQVFIoIEdsb2JhbEhhbmRsZVRvU2VsKGhhbmRsZSksIDAgKTsKKyNlbHNlICAvKiBXSU5FTElCICovCisgICAgcmV0dXJuIEdsb2JhbExvY2sxNiggaGFuZGxlICk7CisjZW5kaWYgIC8qIFdJTkVMSUIgKi8KIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxMb2NrICAgKEtFUk5FTC4xOCkKKyAqICAgICAgICAgICBHbG9iYWxMb2NrMTYgICAoS0VSTkVMLjE4KQogICoKLSAqIFRoaXMgaXMgdGhlIEdsb2JhbExvY2soKSBmdW5jdGlvbiB1c2VkIGJ5IDMyLWJpdCBjb2RlLgorICogVGhpcyBpcyB0aGUgR2xvYmFsTG9jazE2KCkgZnVuY3Rpb24gdXNlZCBieSAzMi1iaXQgY29kZS4KICAqLwotTFBWT0lEIEdsb2JhbExvY2soIEhHTE9CQUwgaGFuZGxlICkKK0xQVk9JRCBHbG9iYWxMb2NrMTYoIEhHTE9CQUwxNiBoYW5kbGUgKQogewogICAgIGlmICghaGFuZGxlKSByZXR1cm4gMDsKICNpZmRlZiBDT05GSUdfSVBDCiAgICAgaWYgKGlzX2RkZV9oYW5kbGUoaGFuZGxlKSkgcmV0dXJuIERERV9BdHRhY2hIYW5kbGUoaGFuZGxlLCBOVUxMKTsKICNlbmRpZgotICAgIHJldHVybiAoTFBTVFIpR0VUX0FSRU5BX1BUUihoYW5kbGUpLT5iYXNlOworICAgIHJldHVybiAoTFBWT0lEKUdFVF9BUkVOQV9QVFIoaGFuZGxlKS0+YmFzZTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxVbmxvY2sgICAoS0VSTkVMLjE5KQorICogICAgICAgICAgIEdsb2JhbFVubG9jazE2ICAgKEtFUk5FTC4xOSkKICAqLwotQk9PTCBHbG9iYWxVbmxvY2soIEhHTE9CQUwgaGFuZGxlICkKK0JPT0wgR2xvYmFsVW5sb2NrMTYoIEhHTE9CQUwxNiBoYW5kbGUgKQogewotICAgIGRwcmludGZfZ2xvYmFsKCBzdGRkZWIsICJHbG9iYWxVbmxvY2s6ICUwNHhcbiIsIGhhbmRsZSApOworICAgIGRwcmludGZfZ2xvYmFsKCBzdGRkZWIsICJHbG9iYWxVbmxvY2sxNjogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2xvYmFsU2l6ZSAgIChLRVJORUwuMjApCisgKiAgICAgICAgICAgR2xvYmFsU2l6ZTE2ICAgKEtFUk5FTC4yMCkKICAqLwotRFdPUkQgR2xvYmFsU2l6ZSggSEdMT0JBTCBoYW5kbGUgKQorRFdPUkQgR2xvYmFsU2l6ZTE2KCBIR0xPQkFMMTYgaGFuZGxlICkKIHsKLSAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsU2l6ZTogJTA0eFxuIiwgaGFuZGxlICk7CisgICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbFNpemUxNjogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgaWYgKCFoYW5kbGUpIHJldHVybiAwOwogICAgIHJldHVybiBHRVRfQVJFTkFfUFRSKGhhbmRsZSktPnNpemU7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2xvYmFsSGFuZGxlICAgKEtFUk5FTC4yMSkKKyAqICAgICAgICAgICBHbG9iYWxIYW5kbGUxNiAgIChLRVJORUwuMjEpCiAgKi8KLURXT1JEIEdsb2JhbEhhbmRsZSggV09SRCBzZWwgKQorRFdPUkQgR2xvYmFsSGFuZGxlMTYoIFdPUkQgc2VsICkKIHsKLSAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsSGFuZGxlOiAlMDR4XG4iLCBzZWwgKTsKKyAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsSGFuZGxlMTY6ICUwNHhcbiIsIHNlbCApOwogICAgIHJldHVybiBNQUtFTE9ORyggR0VUX0FSRU5BX1BUUihzZWwpLT5oYW5kbGUsIEdsb2JhbEhhbmRsZVRvU2VsKHNlbCkgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxGbGFncyAgIChLRVJORUwuMjIpCisgKiAgICAgICAgICAgR2xvYmFsRmxhZ3MxNiAgIChLRVJORUwuMjIpCiAgKi8KLVdPUkQgR2xvYmFsRmxhZ3MoIEhHTE9CQUwgaGFuZGxlICkKK1VJTlQxNiBHbG9iYWxGbGFnczE2KCBIR0xPQkFMMTYgaGFuZGxlICkKIHsKICAgICBHTE9CQUxBUkVOQSAqcEFyZW5hOwogCi0gICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbEZsYWdzOiAlMDR4XG4iLCBoYW5kbGUgKTsKKyAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsRmxhZ3MxNjogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgcEFyZW5hID0gR0VUX0FSRU5BX1BUUihoYW5kbGUpOwogICAgIHJldHVybiBwQXJlbmEtPmxvY2tDb3VudCB8CiAgICAgICAgICAgICgocEFyZW5hLT5mbGFncyAmIEdBX0RJU0NBUkRBQkxFKSA/IEdNRU1fRElTQ0FSREFCTEUgOiAwKSB8CkBAIC01MDcsOSArNTA5LDkgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBHbG9iYWxDb21wYWN0ICAgKEtFUk5FTC4yNSkKKyAqICAgICAgICAgICBHbG9iYWxDb21wYWN0MTYgICAoS0VSTkVMLjI1KQogICovCi1EV09SRCBHbG9iYWxDb21wYWN0KCBEV09SRCBkZXNpcmVkICkKK0RXT1JEIEdsb2JhbENvbXBhY3QxNiggRFdPUkQgZGVzaXJlZCApCiB7CiAgICAgcmV0dXJuIEdMT0JBTF9NQVhfQUxMT0NfU0laRTsKIH0KQEAgLTUxOCw3ICs1MjAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsRnJlZUFsbCAgIChLRVJORUwuMjYpCiAgKi8KLXZvaWQgR2xvYmFsRnJlZUFsbCggSEFORExFIG93bmVyICkKK3ZvaWQgR2xvYmFsRnJlZUFsbCggSEdMT0JBTDE2IG93bmVyICkKIHsKICAgICBEV09SRCBpOwogICAgIEdMT0JBTEFSRU5BICpwQXJlbmE7CkBAIC01MjcsNyArNTI5LDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgZ2xvYmFsQXJlbmFTaXplOyBpKyssIHBBcmVuYSsrKQogICAgIHsKICAgICAgICAgaWYgKChwQXJlbmEtPnNpemUgIT0gMCkgJiYgKHBBcmVuYS0+aE93bmVyID09IG93bmVyKSkKLSAgICAgICAgICAgIEdsb2JhbEZyZWUoIHBBcmVuYS0+aGFuZGxlICk7CisgICAgICAgICAgICBHbG9iYWxGcmVlMTYoIHBBcmVuYS0+aGFuZGxlICk7CiAgICAgfQogfQogCkBAIC01MzUsMTggKzUzNywxOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsV2lyZSAgIChLRVJORUwuMTExKQogICovCi1TRUdQVFIgR2xvYmFsV2lyZSggSEdMT0JBTCBoYW5kbGUgKQorU0VHUFRSIEdsb2JhbFdpcmUoIEhHTE9CQUwxNiBoYW5kbGUgKQogewotICAgIHJldHVybiBXSU4xNl9HbG9iYWxMb2NrKCBoYW5kbGUgKTsKKyAgICByZXR1cm4gV0lOMTZfR2xvYmFsTG9jazE2KCBoYW5kbGUgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHbG9iYWxVbldpcmUgICAoS0VSTkVMLjExMikKICAqLwotQk9PTCBHbG9iYWxVbldpcmUoIEhHTE9CQUwgaGFuZGxlICkKK0JPT0wgR2xvYmFsVW5XaXJlKCBIR0xPQkFMMTYgaGFuZGxlICkKIHsKLSAgICByZXR1cm4gR2xvYmFsVW5sb2NrKCBoYW5kbGUgKTsKKyAgICByZXR1cm4gR2xvYmFsVW5sb2NrMTYoIGhhbmRsZSApOwogfQogCiAKQEAgLTU1NSw3ICs1NTcsNyBAQAogICovCiBEV09SRCBHbG9iYWxET1NBbGxvYyggRFdPUkQgc2l6ZSApCiB7Ci0gICAgV09SRCBzZWwgPSBHbG9iYWxBbGxvYyggR01FTV9GSVhFRCwgc2l6ZSApOworICAgIFdPUkQgc2VsID0gR2xvYmFsQWxsb2MxNiggR01FTV9GSVhFRCwgc2l6ZSApOwogICAgIGlmICghc2VsKSByZXR1cm4gMDsKICAgICByZXR1cm4gTUFLRUxPTkcoIHNlbCwgc2VsIC8qIHRoaXMgb25lIG91Z2h0IHRvIGJlIGEgcmVhbC1tb2RlIHNlZ21lbnQgKi8gKTsKIH0KQEAgLTU2Niw3ICs1NjgsNyBAQAogICovCiBXT1JEIEdsb2JhbERPU0ZyZWUoIFdPUkQgc2VsICkKIHsKLSAgICByZXR1cm4gR2xvYmFsRnJlZSggR2xvYmFsSGFuZGxlKHNlbCkgKSA/IHNlbCA6IDA7CisgICAgcmV0dXJuIEdsb2JhbEZyZWUxNiggR2xvYmFsSGFuZGxlMTYoc2VsKSApID8gc2VsIDogMDsKIH0KIAogCkBAIC01ODMsNyArNTg1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdsb2JhbExSVU9sZGVzdCAgIChLRVJORUwuMTYzKQogICovCi1IR0xPQkFMIEdsb2JhbExSVU9sZGVzdCggSEdMT0JBTCBoYW5kbGUgKQorSEdMT0JBTDE2IEdsb2JhbExSVU9sZGVzdCggSEdMT0JBTDE2IGhhbmRsZSApCiB7CiAgICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbExSVU9sZGVzdDogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgaWYgKGhhbmRsZSA9PSAoSEdMT0JBTCktMSkgaGFuZGxlID0gQ1VSUkVOVF9EUzsKQEAgLTU5NCw3ICs1OTYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsTFJVTmV3ZXN0ICAgKEtFUk5FTC4xNjQpCiAgKi8KLUhHTE9CQUwgR2xvYmFsTFJVTmV3ZXN0KCBIR0xPQkFMIGhhbmRsZSApCitIR0xPQkFMMTYgR2xvYmFsTFJVTmV3ZXN0KCBIR0xPQkFMMTYgaGFuZGxlICkKIHsKICAgICBkcHJpbnRmX2dsb2JhbCggc3RkZGViLCAiR2xvYmFsTFJVTmV3ZXN0OiAlMDR4XG4iLCBoYW5kbGUgKTsKICAgICBpZiAoaGFuZGxlID09IChIR0xPQkFMKS0xKSBoYW5kbGUgPSBDVVJSRU5UX0RTOwpAQCAtNjA1LDcgKzYwNyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXRGcmVlU3BhY2UgICAoS0VSTkVMLjE2OSkKICAqLwotRFdPUkQgR2V0RnJlZVNwYWNlKCBVSU5UIHdGbGFncyApCitEV09SRCBHZXRGcmVlU3BhY2UoIFVJTlQxNiB3RmxhZ3MgKQogewogICAgIHJldHVybiBHTE9CQUxfTUFYX0FMTE9DX1NJWkU7CiB9CkBAIC02MTQsNyArNjE2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdsb2JhbFBhZ2VMb2NrICAgKEtFUk5FTC4xOTEpCiAgKi8KLVdPUkQgR2xvYmFsUGFnZUxvY2soIEhHTE9CQUwgaGFuZGxlICkKK1dPUkQgR2xvYmFsUGFnZUxvY2soIEhHTE9CQUwxNiBoYW5kbGUgKQogewogICAgIGRwcmludGZfZ2xvYmFsKCBzdGRkZWIsICJHbG9iYWxQYWdlTG9jazogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgcmV0dXJuICsrKEdFVF9BUkVOQV9QVFIoaGFuZGxlKS0+cGFnZUxvY2tDb3VudCk7CkBAIC02MjQsNyArNjI2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdsb2JhbFBhZ2VVbmxvY2sgICAoS0VSTkVMLjE5MikKICAqLwotV09SRCBHbG9iYWxQYWdlVW5sb2NrKCBIR0xPQkFMIGhhbmRsZSApCitXT1JEIEdsb2JhbFBhZ2VVbmxvY2soIEhHTE9CQUwxNiBoYW5kbGUgKQogewogICAgIGRwcmludGZfZ2xvYmFsKCBzdGRkZWIsICJHbG9iYWxQYWdlVW5sb2NrOiAlMDR4XG4iLCBoYW5kbGUgKTsKICAgICByZXR1cm4gLS0oR0VUX0FSRU5BX1BUUihoYW5kbGUpLT5wYWdlTG9ja0NvdW50KTsKQEAgLTYzNCw3ICs2MzYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsRml4ICAgKEtFUk5FTC4xOTcpCiAgKi8KLXZvaWQgR2xvYmFsRml4KCBIR0xPQkFMIGhhbmRsZSApCit2b2lkIEdsb2JhbEZpeCggSEdMT0JBTDE2IGhhbmRsZSApCiB7CiAgICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbEZpeDogJTA0eFxuIiwgaGFuZGxlICk7CiAgICAgR0VUX0FSRU5BX1BUUihoYW5kbGUpLT5sb2NrQ291bnQrKzsKQEAgLTY0NCw3ICs2NDYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsVW5maXggICAoS0VSTkVMLjE5OCkKICAqLwotdm9pZCBHbG9iYWxVbmZpeCggSEdMT0JBTCBoYW5kbGUgKQordm9pZCBHbG9iYWxVbmZpeCggSEdMT0JBTDE2IGhhbmRsZSApCiB7CiAgICAgZHByaW50Zl9nbG9iYWwoIHN0ZGRlYiwgIkdsb2JhbFVuZml4OiAlMDR4XG4iLCBoYW5kbGUgKTsKICAgICBHRVRfQVJFTkFfUFRSKGhhbmRsZSktPmxvY2tDb3VudC0tOwpAQCAtNjcyLDcgKzY3NCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHbG9iYWxIYW5kbGVUb1NlbCAgIChUT09MSEVMUC41MCkKICAqLwotV09SRCBHbG9iYWxIYW5kbGVUb1NlbCggSEdMT0JBTCBoYW5kbGUgKQorV09SRCBHbG9iYWxIYW5kbGVUb1NlbCggSEdMT0JBTDE2IGhhbmRsZSApCiB7CiAgICAgZHByaW50Zl90b29saGVscCggc3RkZGViLCAiR2xvYmFsSGFuZGxlVG9TZWw6ICUwNHhcbiIsIGhhbmRsZSApOwogICAgIGlmICghaGFuZGxlKSByZXR1cm4gMDsKQEAgLTc1Miw3ICs3NTQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsRW50cnlIYW5kbGUgICAoVE9PTEhFTFAuNTQpCiAgKi8KLUJPT0wgR2xvYmFsRW50cnlIYW5kbGUoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBIR0xPQkFMIGhJdGVtICkKK0JPT0wgR2xvYmFsRW50cnlIYW5kbGUoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBIR0xPQkFMMTYgaEl0ZW0gKQogewogICAgIHJldHVybiBGQUxTRTsKIH0KQEAgLTc2MSw3ICs3NjMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2xvYmFsRW50cnlNb2R1bGUgICAoVE9PTEhFTFAuNTUpCiAgKi8KLUJPT0wgR2xvYmFsRW50cnlNb2R1bGUoIEdMT0JBTEVOVFJZICpwR2xvYmFsLCBITU9EVUxFIGhNb2R1bGUsIFdPUkQgd1NlZyApCitCT09MIEdsb2JhbEVudHJ5TW9kdWxlKCBHTE9CQUxFTlRSWSAqcEdsb2JhbCwgSE1PRFVMRTE2IGhNb2R1bGUsIFdPUkQgd1NlZyApCiB7CiAgICAgcmV0dXJuIEZBTFNFOwogfQpAQCAtODE4LDIzICs4MjAsOTggQEAKICNlbmRpZgogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgR2xvYmFsQWxsb2MzMgotICogaW1wbGVtZW50cyAgICBHbG9iYWxBbGxvYyAgICAgICAgKEtFUk5FTDMyLjMxNikKLSAqICAgICAgICAgICAgICAgTG9jYWxBbGxvYyAgICAgICAgIChLRVJORUwzMi4zNzIpCi0gKi8KLXZvaWQgKkdsb2JhbEFsbG9jMzIoaW50IGZsYWdzLGludCBzaXplKQotewotICAgIGRwcmludGZfZ2xvYmFsKHN0ZGRlYiwiR2xvYmFsQWxsb2MzMigleCwleClcbiIsZmxhZ3Msc2l6ZSk7Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgIEdsb2JhbExvY2szMgotICovCi12b2lkKiBHbG9iYWxMb2NrMzIoRFdPUkQgcHRyKQotewotCXJldHVybiAodm9pZCopcHRyOwotfQorI2lmbmRlZiBXSU5FTElCCiAKICNlbmRpZiAgLyogV0lORUxJQiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxBbGxvYzMyICAgKEtFUk5FTDMyLjMxNSkKKyAqLworSEdMT0JBTDMyIEdsb2JhbEFsbG9jMzIoIFVJTlQzMiBmbGFncywgRFdPUkQgc2l6ZSApCit7CisgICAgRFdPUkQgaGVhcEZsYWdzID0gMDsKKworICAgIGlmIChmbGFncyAmIEdNRU1fTU9WRUFCTEUpCisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkdsb2JhbEFsbG9jMzI6IHVuaW1wbGVtZW50ZWQgZmxhZyBHTUVNX01PVkVBQkxFXG4iICk7CisKKyAgICBpZiAoZmxhZ3MgJiBHTUVNX1pFUk9JTklUKSBoZWFwRmxhZ3MgfD0gSEVBUF9aRVJPX01FTU9SWTsKKyAgICByZXR1cm4gKEhHTE9CQUwzMilIZWFwQWxsb2MoIEdldFByb2Nlc3NIZWFwKCksIGhlYXBGbGFncywgc2l6ZSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbENvbXBhY3QzMiAgIChLRVJORUwzMi4zMTYpCisgKi8KK0RXT1JEIEdsb2JhbENvbXBhY3QzMiggRFdPUkQgbWluZnJlZSApCit7CisgICAgcmV0dXJuIDA7ICAvKiBHbG9iYWxDb21wYWN0IGRvZXMgbm90aGluZyBpbiBXaW4zMiAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdsb2JhbEZsYWdzMzIgICAoS0VSTkVMMzIuMzIxKQorICovCitVSU5UMzIgR2xvYmFsRmxhZ3MzMiggSEdMT0JBTDMyIGhhbmRsZSApCit7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2xvYmFsRnJlZTMyICAgKEtFUk5FTDMyLjMyMikKKyAqLworSEdMT0JBTDMyIEdsb2JhbEZyZWUzMiggSEdMT0JBTDMyIGhhbmRsZSApCit7CisgICAgcmV0dXJuIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCAoTFBWT0lEKWhhbmRsZSApID8gMCA6IGhhbmRsZTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxIYW5kbGUzMiAgIChLRVJORUwzMi4zMjUpCisgKi8KK0hHTE9CQUwzMiBHbG9iYWxIYW5kbGUzMiggTFBDVk9JRCBwdHIgKQoreworICAgIHJldHVybiAoSEdMT0JBTDMyKXB0cjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxMb2NrMzIgICAoS0VSTkVMMzIuMzI2KQorICovCitMUFZPSUQgR2xvYmFsTG9jazMyKCBIR0xPQkFMMzIgaGFuZGxlICkKK3sKKyAgICByZXR1cm4gKExQVk9JRCloYW5kbGU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2xvYmFsUmVBbGxvYzMyICAgKEtFUk5FTDMyLjMyOCkKKyAqLworSEdMT0JBTDMyIEdsb2JhbFJlQWxsb2MzMiggSEdMT0JBTDMyIGhhbmRsZSwgRFdPUkQgc2l6ZSwgVUlOVDMyIGZsYWdzICkKK3sKKyAgICBpZiAoZmxhZ3MgJiBHTUVNX01PRElGWSkKKyAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkdsb2JhbFJlQWxsb2MzMjogR01FTV9NT0RJRlkgbm90IHN1cHBvcnRlZFxuIiApOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gKEhHTE9CQUwzMilIZWFwUmVBbGxvYyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKExQVk9JRCloYW5kbGUsIHNpemUgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxTaXplMzIgICAoS0VSTkVMMzIuMzI5KQorICovCitEV09SRCBHbG9iYWxTaXplMzIoIEhHTE9CQUwzMiBoYW5kbGUgKQoreworICAgIHJldHVybiBIZWFwU2l6ZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKExQVk9JRCloYW5kbGUgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHbG9iYWxVbmxvY2szMiAgIChLRVJORUwzMi4zMzIpCisgKi8KK0JPT0wgR2xvYmFsVW5sb2NrMzIoIEhHTE9CQUwzMiBoYW5kbGUgKQoreworICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvbWVtb3J5L2xvY2FsLmMgYi9tZW1vcnkvbG9jYWwuYwppbmRleCBmZjlhZTI1Li4zOGNiM2VhIDEwMDY0NAotLS0gYS9tZW1vcnkvbG9jYWwuYworKysgYi9tZW1vcnkvbG9jYWwuYwpAQCAtMiw2ICsyLDcgQEAKICAqIExvY2FsIGhlYXAgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IDE5OTUgQWxleGFuZHJlIEp1bGxpYXJkCisgKiBDb3B5cmlnaHQgMTk5NiBIdXcgRGF2aWVzCiAgKi8KIAogLyoKQEAgLTExLDggKzEyLDYgQEAKICAqIHBhcmFtZXRlciB0aGFuIHVzdWFsLgogICovCiAKLSNpZm5kZWYgV0lORUxJQgotCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgpAQCAtMjUsNyArMjQsNiBAQAogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotCiAjaWZuZGVmIFdJTkVMSUIKICNwcmFnbWEgcGFjaygxKQogI2VuZGlmCkBAIC00Nyw3ICs0NSw2IEBACiAgIC8qIEFyZW5hIHR5cGVzIChzdG9yZWQgaW4gJ3ByZXYnIGZpZWxkIG9mIHRoZSBhcmVuYSkgKi8KICNkZWZpbmUgTE9DQUxfQVJFTkFfRlJFRSAgICAgICAwCiAjZGVmaW5lIExPQ0FMX0FSRU5BX0ZJWEVEICAgICAgMQotI2RlZmluZSBMT0NBTF9BUkVOQV9NT1ZFQUJMRSAgIDMKIAogLyogTGF5b3V0IG9mIGEgaGFuZGxlIGVudHJ5IHRhYmxlCiAgKgpAQCAtOTcsOSArOTQsOSBAQAogI2RlZmluZSBMQUxJR04od29yZCkgICAgICAgICAgKCgod29yZCkgKyAzKSAmIH4zKQogCiAjZGVmaW5lIEFSRU5BX1BUUihwdHIsYXJlbmEpICAgICAgICgoTE9DQUxBUkVOQSAqKSgoY2hhciopKHB0cikrKGFyZW5hKSkpCi0jZGVmaW5lIEFSRU5BX1BSRVYocHRyLGFyZW5hKSAgICAgIChBUkVOQV9QVFIocHRyLGFyZW5hKS0+cHJldiAmIH4zKQotI2RlZmluZSBBUkVOQV9ORVhUKHB0cixhcmVuYSkgICAgICAoQVJFTkFfUFRSKHB0cixhcmVuYSktPm5leHQpCi0jZGVmaW5lIEFSRU5BX0ZMQUdTKHB0cixhcmVuYSkgICAgIChBUkVOQV9QVFIocHRyLGFyZW5hKS0+cHJldiAmIDMpCisjZGVmaW5lIEFSRU5BX1BSRVYocHRyLGFyZW5hKSAgICAgIChBUkVOQV9QVFIoKHB0ciksKGFyZW5hKSktPnByZXYgJiB+MykKKyNkZWZpbmUgQVJFTkFfTkVYVChwdHIsYXJlbmEpICAgICAgKEFSRU5BX1BUUigocHRyKSwoYXJlbmEpKS0+bmV4dCkKKyNkZWZpbmUgQVJFTkFfRkxBR1MocHRyLGFyZW5hKSAgICAgKEFSRU5BX1BUUigocHRyKSwoYXJlbmEpKS0+cHJldiAmIDMpCiAKICAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGhhbmRsZSBiZWxvbmdzIHRvIGEgZml4ZWQgb3IgYSBtb3ZlYWJsZSBibG9jayAqLwogI2RlZmluZSBIQU5ETEVfRklYRUQoaGFuZGxlKSAoKChoYW5kbGUpICYgMykgPT0gMCkKQEAgLTExMCw3ICsxMDcsNyBAQAogICoKICAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGxvY2FsIGhlYXAsIG1ha2luZyBzdXJlIGl0IGV4aXN0cy4KICAqLwotc3RhdGljIExPQ0FMSEVBUElORk8gKkxPQ0FMX0dldEhlYXAoIFdPUkQgZHMgKQorc3RhdGljIExPQ0FMSEVBUElORk8gKkxPQ0FMX0dldEhlYXAoIEhBTkRMRTE2IGRzICkKIHsKICAgICBMT0NBTEhFQVBJTkZPICpwSW5mbzsKICAgICBJTlNUQU5DRURBVEEgKnB0ciA9IChJTlNUQU5DRURBVEEgKilQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CkBAIC0xOTYsNyArMTkzLDcgQEAKICAgICBMT0NBTEFSRU5BICpwUHJldiA9IEFSRU5BX1BUUiggYmFzZXB0ciwgcHJldiApOwogICAgIExPQ0FMQVJFTkEgKnBOZXcgID0gQVJFTkFfUFRSKCBiYXNlcHRyLCBuZXcgKTsKIAotICAgIHBOZXctPnByZXYgPSBwcmV2IHwgTE9DQUxfQVJFTkFfRklYRUQ7CisgICAgcE5ldy0+cHJldiA9IChwcmV2ICYgfjMpIHwgTE9DQUxfQVJFTkFfRklYRUQ7CiAgICAgcE5ldy0+bmV4dCA9IHBQcmV2LT5uZXh0OwogICAgIEFSRU5BX1BUUihiYXNlcHRyLHBQcmV2LT5uZXh0KS0+cHJldiAmPSAzOwogICAgIEFSRU5BX1BUUihiYXNlcHRyLHBQcmV2LT5uZXh0KS0+cHJldiB8PSBuZXc7CkBAIC0yMzksNyArMjM2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIExPQ0FMX1ByaW50SGVhcAogICovCi1zdGF0aWMgdm9pZCBMT0NBTF9QcmludEhlYXAoIFdPUkQgZHMgKQorc3RhdGljIHZvaWQgTE9DQUxfUHJpbnRIZWFwKCBIQU5ETEUxNiBkcyApCiB7CiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogICAgIExPQ0FMSEVBUElORk8gKnBJbmZvID0gTE9DQUxfR2V0SGVhcCggZHMgKTsKQEAgLTMyOSw3ICszMjYsNyBAQAogICAgICAgICAgICAgICAgICAqIG9mIG1pbnNpemUgKyBzdGFja3NpemUsIHNpbmNlIHRoZXJlIGFyZSBwcm9ncmFtcyB0aGF0CiAgICAgICAgICAgICAgICAgICogcmVzaXplIHRoZSBkYXRhIHNlZ21lbnQgYmVmb3JlIGNhbGxpbmcgSW5pdFRhc2soKS4gU28sCiAgICAgICAgICAgICAgICAgICogd2UgbXVzdCBwdXQgaXQgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCAqLwotCQlzdGFydCA9IEdsb2JhbFNpemUoIEdsb2JhbEhhbmRsZSggc2VsZWN0b3IgKSApOworCQlzdGFydCA9IEdsb2JhbFNpemUxNiggR2xvYmFsSGFuZGxlMTYoIHNlbGVjdG9yICkgKTsKIAkJc3RhcnQgLT0gZW5kOwogCQllbmQgKz0gc3RhcnQ7CiAJCWRwcmludGZfbG9jYWwoIHN0ZGRlYiwiIG5ldyBzdGFydCAlMDR4LCBtaW5zdGFydDogJTA0eFxuIiwgc3RhcnQsIHBTZWctPm1pbnNpemUgKyBwTW9kdWxlLT5zdGFja19zaXplKTsKQEAgLTQwNCwxMCArNDAxLDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBMT0NBTF9Hcm93SGVhcAogICovCi1zdGF0aWMgdm9pZCBMT0NBTF9Hcm93SGVhcCggV09SRCBkcyApCitzdGF0aWMgdm9pZCBMT0NBTF9Hcm93SGVhcCggSEFORExFMTYgZHMgKQogewotICAgIEhBTkRMRSBoc2VnID0gR2xvYmFsSGFuZGxlKCBkcyApOwotICAgIExPTkcgb2xkc2l6ZSA9IEdsb2JhbFNpemUoIGhzZWcgKTsKKyAgICBIQU5ETEUgaHNlZyA9IEdsb2JhbEhhbmRsZTE2KCBkcyApOworICAgIExPTkcgb2xkc2l6ZSA9IEdsb2JhbFNpemUxNiggaHNlZyApOwogICAgIExPTkcgZW5kOwogICAgIExPQ0FMSEVBUElORk8gKnBIZWFwSW5mbzsKICAgICBXT1JEIGZyZWVBcmVuYSwgbGFzdEFyZW5hOwpAQCAtNDE2LDE0ICs0MTMsMTQgQEAKICAgICAKICAgICAvKiBpZiBub3RoaW5nIGNhbiBiZSBnYWluZWQsIHJldHVybiAqLwogICAgIGlmIChvbGRzaXplID4gMHhmZmYwKSByZXR1cm47Ci0gICAgaHNlZyA9IEdsb2JhbFJlQWxsb2MoIGhzZWcsIDB4MTAwMDAsIEdNRU1fRklYRUQgKTsKKyAgICBoc2VnID0gR2xvYmFsUmVBbGxvYzE2KCBoc2VnLCAweDEwMDAwLCBHTUVNX0ZJWEVEICk7CiAgICAgcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogICAgIHBIZWFwSW5mbyA9IExPQ0FMX0dldEhlYXAoIGRzICk7CiAgICAgaWYgKHBIZWFwSW5mbyA9PSBOVUxMKSB7CiAJZnByaW50Ziggc3RkZXJyLCAiTG9jYWxfR3Jvd0hlYXA6IGhlYXAgbm90IGZvdW5kXG4iICk7CiAJcmV0dXJuOwogICAgIH0KLSAgICBlbmQgPSBHbG9iYWxTaXplKCBoc2VnICk7CisgICAgZW5kID0gR2xvYmFsU2l6ZTE2KCBoc2VnICk7CiAgICAgbGFzdEFyZW5hID0gKGVuZCAtIHNpemVvZihMT0NBTEFSRU5BKSkgJiB+MzsKIAogICAgICAgLyogVXBkYXRlIHRoZSBIZWFwSW5mbyAqLwpAQCAtNDMzLDEyICs0MzAsMTEgQEAKICAgICBwSGVhcEluZm8tPm1pbnNpemUgKz0gZW5kIC0gb2xkc2l6ZTsKICAgICAKICAgICAgIC8qIGdyb3cgdGhlIG9sZCBsYXN0IGJsb2NrICovCi0gICAgICAvKiBGSVhNRTogbWVyZ2UgdHdvIGFkamFjZW50IGZyZWUgYmxvY2tzICovCiAgICAgcEFyZW5hID0gQVJFTkFfUFRSKCBwdHIsIGZyZWVBcmVuYSApOwogICAgIHBBcmVuYS0+c2l6ZSAgICAgID0gbGFzdEFyZW5hIC0gZnJlZUFyZW5hOwogICAgIHBBcmVuYS0+bmV4dCAgICAgID0gbGFzdEFyZW5hOwogICAgIHBBcmVuYS0+ZnJlZV9uZXh0ID0gbGFzdEFyZW5hOwotICAgIAorCiAgICAgICAvKiBJbml0aWFsaXNlIHRoZSBuZXcgbGFzdCBibG9jayAqLwogCiAgICAgcExhc3RBcmVuYSA9IEFSRU5BX1BUUiggcHRyLCBsYXN0QXJlbmEgKTsKQEAgLTQ0OCwxNCArNDQ0LDcxIEBACiAgICAgcExhc3RBcmVuYS0+ZnJlZV9wcmV2ID0gZnJlZUFyZW5hOwogICAgIHBMYXN0QXJlbmEtPmZyZWVfbmV4dCA9IGxhc3RBcmVuYTsgIC8qIHRoaXMgb25lICovCiAgICAgCisgICAgLyogSWYgYmxvY2sgYmVmb3JlIGZyZWVBcmVuYSBpcyBhbHNvIGZyZWUgdGhlbiBtZXJnZSB0aGVtICovCisgICAgaWYoKEFSRU5BX1BUUihwdHIsIChwQXJlbmEtPnByZXYgJiB+MykpLT5wcmV2ICYgMykgPT0gTE9DQUxfQVJFTkFfRlJFRSkKKyAgICB7CisgICAgICAgIExPQ0FMX1JlbW92ZUJsb2NrKHB0ciwgZnJlZUFyZW5hKTsKKyAgICAgICAgcEhlYXBJbmZvLT5pdGVtcy0tOworICAgIH0KKwogICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkhlYXAgZXhwYW5kZWRcbiIgKTsKICAgICBMT0NBTF9QcmludEhlYXAoIGRzICk7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgTE9DQUxfQ29tcGFjdAorICogICAgICAgICAgIExPQ0FMX0ZyZWVBcmVuYQogICovCi1zdGF0aWMgV09SRCBMT0NBTF9Db21wYWN0KCBXT1JEIGRzLCBXT1JEIG1pbmZyZWUsIFdPUkQgZmxhZ3MgKQorc3RhdGljIEhMT0NBTDE2IExPQ0FMX0ZyZWVBcmVuYSggV09SRCBkcywgV09SRCBhcmVuYSApCit7CisgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOworICAgIExPQ0FMSEVBUElORk8gKnBJbmZvOworICAgIExPQ0FMQVJFTkEgKnBBcmVuYSwgKnBQcmV2LCAqcE5leHQ7CisKKyAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbEZyZWVBcmVuYTogJTA0eCBkcz0lMDR4XG4iLCBhcmVuYSwgZHMgKTsKKyAgICBpZiAoIShwSW5mbyA9IExPQ0FMX0dldEhlYXAoIGRzICkpKSByZXR1cm4gYXJlbmE7CisKKyAgICBwQXJlbmEgPSBBUkVOQV9QVFIoIHB0ciwgYXJlbmEgKTsKKyAgICBpZiAoKHBBcmVuYS0+cHJldiAmIDMpID09IExPQ0FMX0FSRU5BX0ZSRUUpCisgICAgeworCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiTG9jYWxGcmVlQXJlbmE6IFRyeWluZyB0byBmcmVlIGJsb2NrICUwNHggdHdpY2UhXG4iLAorICAgICAgICAgICAgICAgICBhcmVuYSApOworCUxPQ0FMX1ByaW50SGVhcCggZHMgKTsKKwlyZXR1cm4gYXJlbmE7CisgICAgfQorCisgICAgICAvKiBDaGVjayBpZiB3ZSBjYW4gbWVyZ2Ugd2l0aCB0aGUgcHJldmlvdXMgYmxvY2sgKi8KKworICAgIHBQcmV2ID0gQVJFTkFfUFRSKCBwdHIsIHBBcmVuYS0+cHJldiAmIH4zICk7CisgICAgcE5leHQgPSBBUkVOQV9QVFIoIHB0ciwgcEFyZW5hLT5uZXh0ICk7CisgICAgaWYgKChwUHJldi0+cHJldiAmIDMpID09IExPQ0FMX0FSRU5BX0ZSRUUpCisgICAgeworICAgICAgICBhcmVuYSAgPSBwQXJlbmEtPnByZXYgJiB+MzsKKyAgICAgICAgcEFyZW5hID0gcFByZXY7CisgICAgICAgIExPQ0FMX1JlbW92ZUJsb2NrKCBwdHIsIHBQcmV2LT5uZXh0ICk7CisgICAgICAgIHBJbmZvLT5pdGVtcy0tOworICAgIH0KKyAgICBlbHNlICAvKiBNYWtlIGEgbmV3IGZyZWUgYmxvY2sgKi8KKyAgICB7CisgICAgICAgIExPQ0FMX01ha2VCbG9ja0ZyZWUoIHB0ciwgYXJlbmEgKTsKKyAgICB9CisKKyAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiBtZXJnZSB3aXRoIHRoZSBuZXh0IGJsb2NrICovCisKKyAgICBpZiAoKHBBcmVuYS0+bmV4dCA9PSBwQXJlbmEtPmZyZWVfbmV4dCkgJiYKKyAgICAgICAgKHBBcmVuYS0+bmV4dCAhPSBwSW5mby0+bGFzdCkpCisgICAgeworICAgICAgICBMT0NBTF9SZW1vdmVCbG9jayggcHRyLCBwQXJlbmEtPm5leHQgKTsKKyAgICAgICAgcEluZm8tPml0ZW1zLS07CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBMT0NBTF9HZXRGcmVlU3BhY2UKKyAqLworc3RhdGljIFdPUkQgTE9DQUxfR2V0RnJlZVNwYWNlKFdPUkQgZHMsIFdPUkQgY291bnRkaXNjYXJkKQogewogICAgIGNoYXIgKnB0ciA9IFBUUl9TRUdfT0ZGX1RPX0xJTiggZHMsIDAgKTsKICAgICBMT0NBTEhFQVBJTkZPICpwSW5mbzsKQEAgLTQ2NSwzNCArNTE4LDE3MSBAQAogICAgIAogICAgIGlmICghKHBJbmZvID0gTE9DQUxfR2V0SGVhcCggZHMgKSkpCiAgICAgewotICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJMb2NhbF9GaW5kRnJlZUJsb2NrOiBMb2NhbCBoZWFwIG5vdCBmb3VuZFxuIiApOwotCUxPQ0FMX1ByaW50SGVhcChkcyk7Ci0JcmV0dXJuIDA7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkxPQ0FMX0dldEZyZWVTcGFjZTogTG9jYWwgaGVhcCBub3QgZm91bmRcbiIgKTsKKyAgICAgICAgTE9DQUxfUHJpbnRIZWFwKGRzKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCiAgICAgYXJlbmEgPSBwSW5mby0+Zmlyc3Q7CiAgICAgcEFyZW5hID0gQVJFTkFfUFRSKCBwdHIsIGFyZW5hICk7Ci0gICAgd2hpbGUgKGFyZW5hICE9IHBBcmVuYS0+ZnJlZV9uZXh0KSB7CisgICAgd2hpbGUgKGFyZW5hICE9IHBBcmVuYS0+ZnJlZV9uZXh0KQorICAgIHsKICAgICAgICAgYXJlbmEgPSBwQXJlbmEtPmZyZWVfbmV4dDsKICAgICAgICAgcEFyZW5hID0gQVJFTkFfUFRSKCBwdHIsIGFyZW5hICk7CiAgICAgICAgIGlmIChwQXJlbmEtPnNpemUgPj0gZnJlZXNwYWNlKSBmcmVlc3BhY2UgPSBwQXJlbmEtPnNpemU7CiAgICAgfQotCi0gICAgaWYoZnJlZXNwYWNlIDwgQVJFTkFfSEVBREVSX1NJWkUpCi0JZnJlZXNwYWNlID0gMDsKLSAgICBlbHNlCi0JZnJlZXNwYWNlIC09IEFSRU5BX0hFQURFUl9TSVpFOwotICAgIAotICAgIGlmIChmbGFncyAmIExNRU1fTk9DT01QQUNUKSByZXR1cm4gZnJlZXNwYWNlOwotICAgIAotICAgIGlmIChmbGFncyAmIExNRU1fTk9ESVNDQVJEKSByZXR1cm4gZnJlZXNwYWNlOworICAgIC8qIEZJWE1FIGRvZXNuJ3QgeWV0IGNhbGN1bGF0ZSBzcGFjZSB0aGF0IHdvdWxkIGJlY29tZSBmcmVlIGlmIGV2ZXJ5dGhpbmcKKyAgICAgICB3ZXJlIGRpc2NhcmRlZCB3aGVuIGNvdW50ZGlzY2FyZCA9PSAxICovCisgICAgaWYgKGZyZWVzcGFjZSA8IEFSRU5BX0hFQURFUl9TSVpFKSBmcmVlc3BhY2UgPSAwOworICAgIGVsc2UgZnJlZXNwYWNlIC09IEFSRU5BX0hFQURFUl9TSVpFOwogICAgIHJldHVybiBmcmVlc3BhY2U7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTE9DQUxfQ29tcGFjdAorICovCitzdGF0aWMgV09SRCBMT0NBTF9Db21wYWN0KCBIQU5ETEUxNiBkcywgV09SRCBtaW5mcmVlLCBXT1JEIGZsYWdzICkKK3sKKyAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICksICpmY3AsICptY3A7CisgICAgTE9DQUxIRUFQSU5GTyAqcEluZm87CisgICAgTE9DQUxBUkVOQSAqcEFyZW5hLCAqcE1vdmVBcmVuYSwgKnBGaW5hbEFyZW5hOworICAgIFdPUkQgYXJlbmEsIG1vdmVhcmVuYSwgZmluYWxhcmVuYSwgdGFibGU7CisgICAgV09SRCBjb3VudCwgbW92ZXNpemUsIHNpemUsIGk7CisgICAgV09SRCBmcmVlc3BhY2U7CisgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5OworCisgICAgaWYgKCEocEluZm8gPSBMT0NBTF9HZXRIZWFwKCBkcyApKSkKKyAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkxvY2FsX0NvbXBhY3Q6IExvY2FsIGhlYXAgbm90IGZvdW5kXG4iICk7CisgICAgICAgIExPQ0FMX1ByaW50SGVhcChkcyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBkcHJpbnRmX2xvY2FsKHN0ZGRlYiwKKyAgICAgICAgICAgICAgICAgICJMT0NBTF9Db21wYWN0OiBkcyA9ICUwNHgsIG1pbmZyZWUgPSAlMDR4LCBmbGFncyA9ICUwNHhcbiIsCisgICAgICAgICAgICAgICAgICBkcywgbWluZnJlZSwgZmxhZ3MpOworICAgIGZyZWVzcGFjZSA9IExPQ0FMX0dldEZyZWVTcGFjZShkcywgbWluZnJlZSA/IDAgOiAxKTsKKyAgICBpZihmcmVlc3BhY2UgPj0gbWluZnJlZSB8fCAoZmxhZ3MgJiBMTUVNX05PQ09NUEFDVCkpCisgICAgeworICAgICAgICBkcHJpbnRmX2xvY2FsKHN0ZGRlYiwgIlJldHVybmluZyAlMDR4LlxuIiwgZnJlZXNwYWNlKTsKKyAgICAgICAgcmV0dXJuIGZyZWVzcGFjZTsKKyAgICB9CisgICAgZHByaW50Zl9sb2NhbChzdGRkZWIsICJMb2NhbF9Db21wYWN0OiBDb21wYWN0aW5nIGhlYXAgJTA0eC5cbiIsIGRzKTsKKyAgICB0YWJsZSA9IHBJbmZvLT5odGFibGU7CisgICAgd2hpbGUodGFibGUpCisgICAgeworICAgICAgICBwRW50cnkgPSAoTE9DQUxIQU5ETEVFTlRSWSAqKShwdHIgKyB0YWJsZSArIHNpemVvZihXT1JEKSk7CisgICAgICAgIGZvcihjb3VudCA9ICooV09SRCAqKShwdHIgKyB0YWJsZSk7IGNvdW50ID4gMDsgY291bnQtLSwgcEVudHJ5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChwRW50cnktPmxvY2sgPT0gMCkgJiYgIShwRW50cnktPmZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTE1FTV9ESVNDQVJERUQgPj4gOCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIE9LIHdlIGNhbiBtb3ZlIHRoaXMgb25lIGlmIHdlIHdhbnQgKi8KKyAgICAgICAgICAgICAgICBkcHJpbnRmX2xvY2FsKHN0ZGRlYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGUgJTA0eCAoYmxvY2sgJTA0eCkgY2FuIGJlIG1vdmVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXT1JEKSgoY2hhciAqKXBFbnRyeSAtIHB0ciksIHBFbnRyeS0+YWRkcik7CisgICAgICAgICAgICAgICAgbW92ZWFyZW5hID0gQVJFTkFfSEVBREVSKHBFbnRyeS0+YWRkcik7CisgICAgICAgICAgICAgICAgcE1vdmVBcmVuYSA9IEFSRU5BX1BUUihwdHIsIG1vdmVhcmVuYSk7CisgICAgICAgICAgICAgICAgbW92ZXNpemUgPSBwTW92ZUFyZW5hLT5uZXh0IC0gbW92ZWFyZW5hOworICAgICAgICAgICAgICAgIGFyZW5hID0gcEluZm8tPmZpcnN0OworICAgICAgICAgICAgICAgIHBBcmVuYSA9IEFSRU5BX1BUUihwdHIsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBzaXplID0gMHhmZmZmOworICAgICAgICAgICAgICAgIGZpbmFsYXJlbmEgPSAwOworICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBzbWFsbGVzdCBhcmVuYSB0aGF0IHdpbGwgZG8sICovCisgICAgICAgICAgICAgICAgLyogd2hpY2ggaXMgYmVsb3cgdXMgaW4gbWVtb3J5ICovCisgICAgICAgICAgICAgICAgZm9yKDs7KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXJlbmEgPSBwQXJlbmEtPmZyZWVfbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgcEFyZW5hID0gQVJFTkFfUFRSKHB0ciwgYXJlbmEpOworICAgICAgICAgICAgICAgICAgICBpZihhcmVuYSA+PSBtb3ZlYXJlbmEpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYoYXJlbmEgPT0gcEFyZW5hLT5mcmVlX25leHQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYoKHBBcmVuYS0+c2l6ZSA+PSBtb3Zlc2l6ZSkgJiYgKHBBcmVuYS0+c2l6ZSA8IHNpemUpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gcEFyZW5hLT5zaXplOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxhcmVuYSA9IGFyZW5hOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmaW5hbGFyZW5hKSAvKiBBY3R1YWxseSBnb3Qgc29tZXdoZXJlIHRvIG1vdmUgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRwcmludGZfbG9jYWwoc3RkZGViLCAiTW92aW5nIGl0IHRvICUwNHguXG4iLCBmaW5hbGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgcEZpbmFsQXJlbmEgPSBBUkVOQV9QVFIocHRyLCBmaW5hbGFyZW5hKTsKKworCSAvKiBDaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCBjcmVhdGluZyBhIGZyZWUgYXJlbmEgYXQgdGhlIGVuZCAqLworICAgICAgICAgICAgICAgICAgICBpZihwRmluYWxBcmVuYS0+c2l6ZSA+IG1vdmVzaXplK0xBTElHTihzaXplb2YoTE9DQUxBUkVOQSkpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0NBTF9BZGRCbG9jayhwdHIsIGZpbmFsYXJlbmEsIGZpbmFsYXJlbmEgKyBtb3Zlc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0NBTF9NYWtlQmxvY2tGcmVlKHB0ciwgZmluYWxhcmVuYSArIG1vdmVzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBJbmZvLT5pdGVtcysrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIENvcHkgdGhlIGFyZW5hIHRvIGl0J3MgbmV3IGxvY2F0aW9uICovCisgICAgICAgICAgICAgICAgICAgIExPQ0FMX1JlbW92ZUZyZWVCbG9jayhwdHIsIGZpbmFsYXJlbmEpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKilwRmluYWxBcmVuYSArIEFSRU5BX0hFQURFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilwTW92ZUFyZW5hICsgQVJFTkFfSEVBREVSX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3Zlc2l6ZSAtIEFSRU5BX0hFQURFUl9TSVpFICk7CisgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIG9sZCBsb2NhdGlvbiAqLyAgCisgICAgICAgICAgICAgICAgICAgIExPQ0FMX0ZyZWVBcmVuYShkcywgbW92ZWFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIGhhbmRsZSB0YWJsZSBlbnRyeSAqLworICAgICAgICAgICAgICAgICAgICBwRW50cnktPmFkZHIgPSBmaW5hbGFyZW5hICsgQVJFTkFfSEVBREVSX1NJWkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKEFSRU5BX1BUUihwdHIsIHBNb3ZlQXJlbmEtPnByZXYgJiB+MyktPnByZXYgJiAzKQorCQkJICAgICAgID09IExPQ0FMX0FSRU5BX0ZSRUUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBQcmV2aW91cyBhcmVuYSBpcyBmcmVlIChidXQgPCBtb3Zlc2l6ZSkgICovCisgICAgICAgICAgICAgICAgICAgIC8qIHNvIHdlIGNhbiAnc2xpZGUnIG1vdmVhcmVuYSBkb3duIGludG8gaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgZmluYWxhcmVuYSA9IHBNb3ZlQXJlbmEtPnByZXYgJiB+MzsKKyAgICAgICAgICAgICAgICAgICAgcEZpbmFsQXJlbmEgPSBBUkVOQV9QVFIocHRyLCBmaW5hbGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgZHByaW50Zl9sb2NhbChzdGRkZWIsICJTbGlkaW5nIGFyZW5hICUwNHggdG8gJTA0eC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZWFyZW5hLCBmaW5hbGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgTE9DQUxfUmVtb3ZlRnJlZUJsb2NrKHB0ciwgZmluYWxhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgIExPQ0FMX1JlbW92ZUJsb2NrKHB0ciwgbW92ZWFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgbWNwID0gKGNoYXIgKilwTW92ZUFyZW5hICsgQVJFTkFfSEVBREVSX1NJWkU7CisgICAgICAgICAgICAgICAgICAgIGZjcCA9IChjaGFyICopcEZpbmFsQXJlbmEgKyBBUkVOQV9IRUFERVJfU0laRTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbW92ZXNpemUgLSBBUkVOQV9IRUFERVJfU0laRTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgKihmY3ArKykgPSAqKG1jcCsrKTsKKyAgICAgICAgICAgICAgICAgICAgTE9DQUxfQWRkQmxvY2socHRyLCBmaW5hbGFyZW5hLCBmaW5hbGFyZW5hICsgbW92ZXNpemUpOworICAgICAgICAgICAgICAgICAgICBMT0NBTF9NYWtlQmxvY2tGcmVlKHB0ciwgZmluYWxhcmVuYSArIG1vdmVzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIGhhbmRsZSB0YWJsZSBlbnRyeSAqLworICAgICAgICAgICAgICAgICAgICBwRW50cnktPmFkZHIgPSBmaW5hbGFyZW5hICsgQVJFTkFfSEVBREVSX1NJWkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRhYmxlID0gKihXT1JEICopcEVudHJ5OworICAgIH0KKyAgICBmcmVlc3BhY2UgPSBMT0NBTF9HZXRGcmVlU3BhY2UoZHMsIG1pbmZyZWUgPyAwIDogMSk7CisgICAgaWYoZnJlZXNwYWNlID49IG1pbmZyZWUgfHwgKGZsYWdzICYgTE1FTV9OT0RJU0NBUkQpKQorICAgIHsKKyAgICAgICAgZHByaW50Zl9sb2NhbChzdGRkZWIsICJSZXR1cm5pbmcgJTA0eC5cbiIsIGZyZWVzcGFjZSk7CisgICAgICAgIHJldHVybiBmcmVlc3BhY2U7CisgICAgfQorCisgICAgdGFibGUgPSBwSW5mby0+aHRhYmxlOworICAgIHdoaWxlKHRhYmxlKQorICAgIHsKKyAgICAgICAgcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkgKikocHRyICsgdGFibGUgKyBzaXplb2YoV09SRCkpOworICAgICAgICBmb3IoY291bnQgPSAqKFdPUkQgKikocHRyICsgdGFibGUpOyBjb3VudCA+IDA7IGNvdW50LS0sIHBFbnRyeSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocEVudHJ5LT5mbGFncyAmIChMTUVNX0RJU0NBUkRBQkxFID4+IDgpKSAmJgorICAgICAgICAgICAgICAgcEVudHJ5LT5sb2NrID09IDAgJiYgIShwRW50cnktPmZsYWdzICYgKExNRU1fRElTQ0FSREVEID4+IDgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkcHJpbnRmX2xvY2FsKHN0ZGRlYiwgIkRpc2NhcmRpbmcgaGFuZGxlICUwNHggKGJsb2NrICUwNHgpLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopcEVudHJ5IC0gcHRyLCBwRW50cnktPmFkZHIpOworICAgICAgICAgICAgICAgIExPQ0FMX0ZyZWVBcmVuYShkcywgcEVudHJ5LT5hZGRyKTsKKyAgICAgICAgICAgICAgICBwRW50cnktPmFkZHIgPSAwOworICAgICAgICAgICAgICAgIHBFbnRyeS0+ZmxhZ3MgfD0gKExNRU1fRElTQ0FSREVEID4+IDgpOworICAgICAgICAgICAgICAgIC8qIENhbGwgbG9jYWxub3RpZnkgcHJvYyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRhYmxlID0gKihXT1JEICopcEVudHJ5OworICAgIH0KKyAgICByZXR1cm4gTE9DQUxfQ29tcGFjdChkcywgMHhmZmZmLCBMTUVNX05PRElTQ0FSRCk7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTE9DQUxfRmluZEZyZWVCbG9jawogICovCi1zdGF0aWMgSExPQ0FMIExPQ0FMX0ZpbmRGcmVlQmxvY2soIFdPUkQgZHMsIFdPUkQgc2l6ZSApCitzdGF0aWMgSExPQ0FMMTYgTE9DQUxfRmluZEZyZWVCbG9jayggSEFORExFMTYgZHMsIFdPUkQgc2l6ZSApCiB7CiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogICAgIExPQ0FMSEVBUElORk8gKnBJbmZvOwpAQCAtNTI0LDcgKzcxNCw3IEBACiAgKiBUaGUgc2VnbWVudCBtYXkgZ2V0IG1vdmVkIGFyb3VuZCBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBhbGwgY2FsbGVycwogICogc2hvdWxkIHJlc2V0IHRoZWlyIHBvaW50ZXIgdmFyaWFibGVzLgogICovCi1zdGF0aWMgSExPQ0FMIExPQ0FMX0dldEJsb2NrKCBXT1JEIGRzLCBXT1JEIHNpemUsIFdPUkQgZmxhZ3MgKQorc3RhdGljIEhMT0NBTDE2IExPQ0FMX0dldEJsb2NrKCBIQU5ETEUxNiBkcywgV09SRCBzaXplLCBXT1JEIGZsYWdzICkKIHsKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAgICAgTE9DQUxIRUFQSU5GTyAqcEluZm87CkBAIC01ODUsMTIgKzc3NSwxMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTE9DQUxfTmV3SFRhYmxlCiAgKi8KLXN0YXRpYyBCT09MIExPQ0FMX05ld0hUYWJsZSggV09SRCBkcyApCitzdGF0aWMgQk9PTCBMT0NBTF9OZXdIVGFibGUoIEhBTkRMRTE2IGRzICkKIHsKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAgICAgTE9DQUxIRUFQSU5GTyAqcEluZm87CiAgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5OwotICAgIEhMT0NBTCBoYW5kbGU7CisgICAgSExPQ0FMMTYgaGFuZGxlOwogICAgIGludCBpOwogCiAgICAgZHByaW50Zl9sb2NhbCggc3RkZGViLCAiTG9jYWxfTmV3SFRhYmxlXG4iICk7CkBAIC02MDEsMTEgKzc5MSwxMyBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgaGFuZGxlID0gTE9DQUxfR2V0QmxvY2soIGRzLCBwSW5mby0+aGRlbHRhICogc2l6ZW9mKExPQ0FMSEFORExFRU5UUlkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAyICogc2l6ZW9mKFdPUkQpLCBMTUVNX0ZJWEVEICk7Ci0gICAgcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwotICAgIHBJbmZvID0gTE9DQUxfR2V0SGVhcCggZHMgKTsKLSAgICBpZiAoaGFuZGxlID09IDApIHJldHVybiBGQUxTRTsKKyAgICBpZiAoIShoYW5kbGUgPSBMT0NBTF9HZXRCbG9jayggZHMsIHBJbmZvLT5oZGVsdGEgKiBzaXplb2YoTE9DQUxIQU5ETEVFTlRSWSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAyICogc2l6ZW9mKFdPUkQpLCBMTUVNX0ZJWEVEICkpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKCEocHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApKSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJMT0NBTF9OZXdIVGFibGU6IHB0ciA9PSBOVUxMIGFmdGVyIEdldEJsb2NrLlxuIik7CisgICAgaWYgKCEocEluZm8gPSBMT0NBTF9HZXRIZWFwKCBkcyApKSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIkxPQ0FMX05ld0hUYWJsZTogcEluZm8gPT0gTlVMTCBhZnRlciBHZXRCbG9jay5cbiIpOwogCiAgICAgLyogRmlsbCB0aGUgZW50cnkgdGFibGUgKi8KIApAQCAtNjIxLDcgKzgxMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBMT0NBTF9HZXROZXdIYW5kbGVFbnRyeQogICovCi1zdGF0aWMgSExPQ0FMIExPQ0FMX0dldE5ld0hhbmRsZUVudHJ5KCBXT1JEIGRzICkKK3N0YXRpYyBITE9DQUwxNiBMT0NBTF9HZXROZXdIYW5kbGVFbnRyeSggSEFORExFMTYgZHMgKQogewogICAgIGNoYXIgKnB0ciA9IFBUUl9TRUdfT0ZGX1RPX0xJTiggZHMsIDAgKTsKICAgICBMT0NBTEhFQVBJTkZPICpwSW5mbzsKQEAgLTY2MSw1NyArODUzLDcgQEAKICAgICBwRW50cnktPmxvY2sgPSAwOwogICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxPQ0FMX0dldE5ld0hhbmRsZUVudHJ5KCUwNHgpOiAlMDR4XG4iLAogICAgICAgICAgICAgICAgICAgIGRzLCAoKGNoYXIgKilwRW50cnkgLSBwdHIpICk7Ci0gICAgcmV0dXJuIChITE9DQUwpKChjaGFyICopcEVudHJ5IC0gcHRyKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMT0NBTF9GcmVlQXJlbmEKLSAqLwotc3RhdGljIEhMT0NBTCBMT0NBTF9GcmVlQXJlbmEoIFdPUkQgZHMsIFdPUkQgYXJlbmEgKQotewotICAgIGNoYXIgKnB0ciA9IFBUUl9TRUdfT0ZGX1RPX0xJTiggZHMsIDAgKTsKLSAgICBMT0NBTEhFQVBJTkZPICpwSW5mbzsKLSAgICBMT0NBTEFSRU5BICpwQXJlbmEsICpwUHJldiwgKnBOZXh0OwotCi0gICAgZHByaW50Zl9sb2NhbCggc3RkZGViLCAiTG9jYWxGcmVlQXJlbmE6ICUwNHggZHM9JTA0eFxuIiwgYXJlbmEsIGRzICk7Ci0gICAgaWYgKCEocEluZm8gPSBMT0NBTF9HZXRIZWFwKCBkcyApKSkgcmV0dXJuIGFyZW5hOwotCi0gICAgcEFyZW5hID0gQVJFTkFfUFRSKCBwdHIsIGFyZW5hICk7Ci0gICAgaWYgKChwQXJlbmEtPnByZXYgJiAzKSA9PSBMT0NBTF9BUkVOQV9GUkVFKQotICAgIHsKLQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0gICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkxvY2FsRnJlZUFyZW5hOiBUcnlpbmcgdG8gZnJlZSBibG9jayAlMDR4IHR3aWNlIVxuIiwKLSAgICAgICAgICAgICAgICAgYXJlbmEgKTsKLQlMT0NBTF9QcmludEhlYXAoIGRzICk7Ci0JcmV0dXJuIGFyZW5hOwotICAgIH0KLQotICAgICAgLyogQ2hlY2sgaWYgd2UgY2FuIG1lcmdlIHdpdGggdGhlIHByZXZpb3VzIGJsb2NrICovCi0KLSAgICBwUHJldiA9IEFSRU5BX1BUUiggcHRyLCBwQXJlbmEtPnByZXYgJiB+MyApOwotICAgIHBOZXh0ID0gQVJFTkFfUFRSKCBwdHIsIHBBcmVuYS0+bmV4dCApOwotICAgIGlmICgocFByZXYtPnByZXYgJiAzKSA9PSBMT0NBTF9BUkVOQV9GUkVFKQotICAgIHsKLSAgICAgICAgYXJlbmEgID0gcEFyZW5hLT5wcmV2ICYgfjM7Ci0gICAgICAgIHBBcmVuYSA9IHBQcmV2OwotICAgICAgICBMT0NBTF9SZW1vdmVCbG9jayggcHRyLCBwUHJldi0+bmV4dCApOwotICAgICAgICBwSW5mby0+aXRlbXMtLTsKLSAgICB9Ci0gICAgZWxzZSAgLyogTWFrZSBhIG5ldyBmcmVlIGJsb2NrICovCi0gICAgewotICAgICAgICBMT0NBTF9NYWtlQmxvY2tGcmVlKCBwdHIsIGFyZW5hICk7Ci0gICAgfQotCi0gICAgICAvKiBDaGVjayBpZiB3ZSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbmV4dCBibG9jayAqLwotCi0gICAgaWYgKChwQXJlbmEtPm5leHQgPT0gcEFyZW5hLT5mcmVlX25leHQpICYmCi0gICAgICAgIChwQXJlbmEtPm5leHQgIT0gcEluZm8tPmxhc3QpKQotICAgIHsKLSAgICAgICAgTE9DQUxfUmVtb3ZlQmxvY2soIHB0ciwgcEFyZW5hLT5uZXh0ICk7Ci0gICAgICAgIHBJbmZvLT5pdGVtcy0tOwotICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKEhMT0NBTDE2KSgoY2hhciAqKXBFbnRyeSAtIHB0cik7CiB9CiAKIApAQCAtNzIwLDcgKzg2Miw3IEBACiAgKgogICogRnJlZSBhIGhhbmRsZSB0YWJsZSBlbnRyeS4KICAqLwotc3RhdGljIHZvaWQgTE9DQUxfRnJlZUhhbmRsZUVudHJ5KCBXT1JEIGRzLCBITE9DQUwgaGFuZGxlICkKK3N0YXRpYyB2b2lkIExPQ0FMX0ZyZWVIYW5kbGVFbnRyeSggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSApCiB7CiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogICAgIExPQ0FMSEFORExFRU5UUlkgKnBFbnRyeSA9IChMT0NBTEhBTkRMRUVOVFJZICopKHB0ciArIGhhbmRsZSk7CkBAIC03NTQsMTYgKzg5NiwxNiBAQAogCiAgICAgLyogTm93IGNoZWNrIGlmIGFsbCBlbnRyaWVzIGluIHRoaXMgdGFibGUgYXJlIGZyZWUgKi8KIAotICAgIHBFbnRyeSA9IChMT0NBTEhBTkRMRUVOVFJZICopKHB0ciArICpwVGFibGUgKyBzaXplb2YoV09SRCkpOwotICAgIGNvdW50ID0gKihXT1JEICopKHB0ciArICpwVGFibGUpOworICAgIHRhYmxlID0gKnBUYWJsZTsKKyAgICBwRW50cnkgPSAoTE9DQUxIQU5ETEVFTlRSWSAqKShwdHIgKyB0YWJsZSArIHNpemVvZihXT1JEKSk7CisgICAgY291bnQgPSAqKFdPUkQgKikocHRyICsgdGFibGUpOwogICAgIGZvciAoaSA9IGNvdW50OyBpID4gMDsgaS0tLCBwRW50cnkrKykgaWYgKHBFbnRyeS0+bG9jayAhPSAweGZmKSByZXR1cm47CiAgICAgCiAgICAgLyogUmVtb3ZlIHRoZSB0YWJsZSBmcm9tIHRoZSBsaW5rZWQgbGlzdCBhbmQgZnJlZSBpdCAqLwogCi0gICAgdGFibGUgPSAqcFRhYmxlOwogICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxPQ0FMX0ZyZWVIYW5kbGVFbnRyeSglMDR4KTogZnJlZWluZyB0YWJsZSAlMDR4XG4iLAogICAgICAgICAgICAgICAgICAgIGRzLCB0YWJsZSk7Ci0gICAgKnBUYWJsZSA9ICooKFdPUkQgKikocHRyICsgY291bnQgKiBzaXplb2YoKnBFbnRyeSkpICsgMSk7CisgICAgKnBUYWJsZSA9ICooV09SRCAqKXBFbnRyeTsKICAgICBMT0NBTF9GcmVlQXJlbmEoIGRzLCBBUkVOQV9IRUFERVIoIHRhYmxlICkgKTsKIH0KIApAQCAtNzczLDcgKzkxNSw3IEBACiAgKgogICogSW1wbGVtZW50YXRpb24gb2YgTG9jYWxGcmVlKCkuCiAgKi8KLUhMT0NBTCBMT0NBTF9GcmVlKCBIQU5ETEUgZHMsIEhMT0NBTCBoYW5kbGUgKQorSExPQ0FMMTYgTE9DQUxfRnJlZSggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSApCiB7CiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogCkBAIC03ODcsOSArOTI5LDE0IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0JV09SRCBhcmVuYSA9IEFSRU5BX0hFQURFUiggKihXT1JEICopKHB0ciArIGhhbmRsZSkgKTsKLSAgICAgICAgZHByaW50Zl9sb2NhbCggc3RkZGViLCAiTG9jYWxGcmVlOiByZWFsIGJsb2NrIGF0ICUwNHhcbiIsIGFyZW5hICk7Ci0gICAgICAgIGlmIChMT0NBTF9GcmVlQXJlbmEoIGRzLCBhcmVuYSApKSByZXR1cm4gaGFuZGxlOyAvKiBjb3VsZG4ndCBmcmVlIGl0ICovCisgICAgICAgIExPQ0FMSEFORExFRU5UUlkgKnBFbnRyeSA9IChMT0NBTEhBTkRMRUVOVFJZICopKHB0ciArIGhhbmRsZSk7CisgICAgICAgIGlmICghKHBFbnRyeS0+ZmxhZ3MgJiAoTE1FTV9ESVNDQVJERUQgPj4gOCkpKQorICAgICAgICB7CisgICAgICAgICAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbEZyZWU6IHJlYWwgYmxvY2sgYXQgJTA0eFxuIiwKKwkJCSAgIHBFbnRyeS0+YWRkciApOworICAgICAgICAgICAgaWYgKExPQ0FMX0ZyZWVBcmVuYSggZHMsIEFSRU5BX0hFQURFUihwRW50cnktPmFkZHIpICkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsgLyogY291bGRuJ3QgZnJlZSBpdCAqLworICAgICAgICB9CiAgICAgICAgIExPQ0FMX0ZyZWVIYW5kbGVFbnRyeSggZHMsIGhhbmRsZSApOwogICAgICAgICByZXR1cm4gMDsgIC8qIE9LICovCiAgICAgfQpAQCAtODAxLDE3ICs5NDgsMTcgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBMb2NhbEFsbG9jKCkuCiAgKi8KLUhMT0NBTCBMT0NBTF9BbGxvYyggSEFORExFIGRzLCBXT1JEIGZsYWdzLCBXT1JEIHNpemUgKQorSExPQ0FMMTYgTE9DQUxfQWxsb2MoIEhBTkRMRTE2IGRzLCBXT1JEIGZsYWdzLCBXT1JEIHNpemUgKQogewogICAgIGNoYXIgKnB0cjsKLSAgICBITE9DQUwgaGFuZGxlOworICAgIEhMT0NBTDE2IGhhbmRsZTsKICAgICAKICAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbEFsbG9jOiAlMDR4ICVkIGRzPSUwNHhcbiIsIGZsYWdzLCBzaXplLCBkcyApOwogCiAgICAgaWYgKGZsYWdzICYgTE1FTV9NT1ZFQUJMRSkKICAgICB7CiAJTE9DQUxIQU5ETEVFTlRSWSAqcGxoZTsKLQlITE9DQUwgaG1lbTsKKwlITE9DQUwxNiBobWVtOwogCQogCWlmICghKGhtZW0gPSBMT0NBTF9HZXRCbG9jayggZHMsIHNpemUsIGZsYWdzICkpKSByZXR1cm4gMDsKIAlpZiAoIShoYW5kbGUgPSBMT0NBTF9HZXROZXdIYW5kbGVFbnRyeSggZHMgKSkpCkBAIC04MzcsMTEgKzk4NCwxMiBAQAogICoKICAqIEltcGxlbWVudGF0aW9uIG9mIExvY2FsUmVBbGxvYygpLgogICovCi1ITE9DQUwgTE9DQUxfUmVBbGxvYyggSEFORExFIGRzLCBITE9DQUwgaGFuZGxlLCBXT1JEIHNpemUsIFdPUkQgZmxhZ3MgKQorSExPQ0FMMTYgTE9DQUxfUmVBbGxvYyggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSwgV09SRCBzaXplLCBXT1JEIGZsYWdzICkKIHsKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAgICAgTE9DQUxIRUFQSU5GTyAqcEluZm87CiAgICAgTE9DQUxBUkVOQSAqcEFyZW5hLCAqcE5leHQ7CisgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5OwogICAgIFdPUkQgYXJlbmEsIG5ld2hhbmRsZSwgYmxvY2toYW5kbGU7CiAgICAgTE9ORyBuZXh0YXJlbmE7CiAKQEAgLTg1OCwxMSArMTAwNiw1MiBAQAogICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxvY2FsUmVBbGxvYzogYXJlbmEgaXMgJTA0eFxuIiwgYXJlbmEgKTsKICAgICBwQXJlbmEgPSBBUkVOQV9QVFIoIHB0ciwgYXJlbmEgKTsKICAgICAKLSAgICBpZiAoZmxhZ3MgJiBMTUVNX01PRElGWSkgewotICAgICAgZHByaW50Zl9sb2NhbCggc3RkZGViLCAiTE1FTV9NT0RJRlkgc2V0XG4iKTsKLSAgICAgIHJldHVybiBoYW5kbGU7CisgICAgaWYgKChmbGFncyAmIExNRU1fTU9ESUZZKSAmJiAoZmxhZ3MgJiBMTUVNX0RJU0NBUkRBQkxFKSkKKyAgICB7CisgICAgICAgIGlmIChIQU5ETEVfRklYRUQoaGFuZGxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIkxvY2FsUmVBbGxvYzogTE1FTV9NT0RJRlkgJiBMTUVNX0RJU0NBUkRBQkxFIG9uIGEgZml4ZWQgaGFuZGxlLlxuIik7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlOworICAgICAgICB9CisgICAgICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIk1ha2luZyBibG9jayBkaXNjYXJkYWJsZS5cbiIgKTsKKyAgICAgICAgcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkgKikocHRyICsgaGFuZGxlKTsKKyAgICAgICAgcEVudHJ5LT5mbGFncyB8PSAoTE1FTV9ESVNDQVJEQUJMRSA+PiA4KTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICB9Ci0gICAgaWYgKCFzaXplKSBzaXplID0gMTsKKworICAgIGlmICgoZmxhZ3MgJiBMTUVNX01PRElGWSkgfHwgKGZsYWdzICYgTE1FTV9ESVNDQVJEQUJMRSkpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTG9jYWxSZUFsbG9jOiBmbGFncyAlMDR4LiBNT0RJRlkgJiBESVNDQVJEQUJMRSBzaG91bGQgYm90aCBiZSBzZXRcbiIsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisKKyAgICBpZiAoIXNpemUpCisgICAgeworICAgICAgICBpZiAoSEFORExFX0ZJWEVEKGhhbmRsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIExNRU1fTU9WRUFCTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHByaW50Zl9sb2NhbChzdGRkZWIsICJGcmVlaW5nIGZpeGVkIGJsb2NrLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIExPQ0FMX0ZyZWUoIGRzLCBoYW5kbGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugc2l6ZSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwRW50cnkgPSAoTE9DQUxIQU5ETEVFTlRSWSAqKShwdHIgKyBoYW5kbGUpOworICAgICAgICAgICAgaWYgKHBFbnRyeS0+bG9jayA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGRpc2NhcmRzIG1vdmVhYmxlIGJsb2NrcyBpcyB0aGlzIHJpZ2h0PyAqLworICAgICAgICAgICAgICAgIGRwcmludGZfbG9jYWwoc3RkZGViLCJEaXNjYXJkaW5nIGJsb2NrXG4iKTsKKyAgICAgICAgICAgICAgICBMT0NBTF9GcmVlQXJlbmEoZHMsIEFSRU5BX0hFQURFUihwRW50cnktPmFkZHIpKTsKKyAgICAgICAgICAgICAgICBwRW50cnktPmFkZHIgPSAwOworICAgICAgICAgICAgICAgIHBFbnRyeS0+ZmxhZ3MgPSAoTE1FTV9ESVNDQVJERUQgPj4gOCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlOworICAgICAgICB9CisgICAgfQorCiAgICAgc2l6ZSA9IExBTElHTiggc2l6ZSApOwogICAgIG5leHRhcmVuYSA9IExBTElHTihibG9ja2hhbmRsZSArIHNpemUpOwogCkBAIC05MDEsMTcgKzEwOTAsMjYgQEAKICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICB9CiAKLSAgICAgIC8qIE5vdyB3ZSBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2NrICovCisgICAgLyogTm93IHdlIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgYmxvY2ssIGJ1dCBub3QgaWYgZml4ZWQgYmxvY2sgYW5kIG5vCisgICAgICAgTE1FTV9NT1ZFQUJMRSAqLwogCi0gICAgbmV3aGFuZGxlID0gTE9DQUxfR2V0QmxvY2soIGRzLCBzaXplLCBmbGFncyApOwotICAgIGlmIChuZXdoYW5kbGUgPT0gMCkgcmV0dXJuIDA7CisgICAgaWYgKEhBTkRMRV9GSVhFRChoYW5kbGUpICYmICEoZmxhZ3MgJiBMTUVNX01PVkVBQkxFKSkKKyAgICB7CisgICAgICAgIGRwcmludGZfbG9jYWwoc3RkZGViLCAiTmVlZGVkIHRvIG1vdmUgZml4ZWQgYmxvY2ssIGJ1dCBMTUVNX01PVkVBQkxFIG5vdCBzcGVjaWZpZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7ICAvKiBGSVhNRTogc2hvdWxkIHdlIGZyZWUgaXQgaGVyZT8gKi8KKyAgICB9CisKKyAgICBpZiAoIShuZXdoYW5kbGUgPSBMT0NBTF9HZXRCbG9jayggZHMsIHNpemUsIGZsYWdzICkpKSByZXR1cm4gMDsKICAgICBwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAgICAgbWVtY3B5KCBwdHIgKyBuZXdoYW5kbGUsIHB0ciArIChhcmVuYSArIEFSRU5BX0hFQURFUl9TSVpFKSwgc2l6ZSApOwogICAgIExPQ0FMX0ZyZWVBcmVuYSggZHMsIGFyZW5hICk7CiAgICAgaWYgKEhBTkRMRV9NT1ZFQUJMRSggaGFuZGxlICkpCiAgICAgewogCWRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxvY2FsUmVBbGxvYzogZml4aW5nIGhhbmRsZVxuIik7Ci0JKihXT1JEICopKHB0ciArIGhhbmRsZSkgPSBuZXdoYW5kbGU7CisgICAgICAgIHBFbnRyeSA9IChMT0NBTEhBTkRMRUVOVFJZICopKHB0ciArIGhhbmRsZSk7CisgICAgICAgIHBFbnRyeS0+YWRkciA9IG5ld2hhbmRsZTsKKyAgICAgICAgcEVudHJ5LT5mbGFncyB8PSB+KExNRU1fRElTQ0FSREVEID4+IDgpOyAvKiBjbGVhciBkaXNjYXJkZWQgZmxhZyAqLworICAgICAgICBwRW50cnktPmxvY2sgPSAwOwogCW5ld2hhbmRsZSA9IGhhbmRsZTsKICAgICB9CiAgICAgZHByaW50Zl9sb2NhbCggc3RkZGViLCAiTG9jYWxSZUFsbG9jOiByZXR1cm5pbmcgJTA0eFxuIiwgbmV3aGFuZGxlICk7CkBAIC05MjIsNyArMTEyMCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBMT0NBTF9JbnRlcm5hbExvY2sKICAqLwotc3RhdGljIEhMT0NBTCBMT0NBTF9JbnRlcm5hbExvY2soIExQU1RSIGhlYXAsIEhMT0NBTCBoYW5kbGUgKQorc3RhdGljIEhMT0NBTDE2IExPQ0FMX0ludGVybmFsTG9jayggTFBTVFIgaGVhcCwgSExPQ0FMMTYgaGFuZGxlICkKIHsKICAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbExvY2s6ICUwNHggIiwgaGFuZGxlICk7CiAgICAgaWYgKEhBTkRMRV9NT1ZFQUJMRShoYW5kbGUpKQpAQCAtOTM5LDcgKzExMzcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTE9DQUxfTG9jawogICovCi1MUFNUUiBMT0NBTF9Mb2NrKCBIQU5ETEUgZHMsIEhMT0NBTCBoYW5kbGUgKQorTFBTVFIgTE9DQUxfTG9jayggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSApCiB7CiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogICAgIHJldHVybiBoYW5kbGUgPyBwdHIgKyBMT0NBTF9JbnRlcm5hbExvY2soIHB0ciwgaGFuZGxlICkgOiBOVUxMOwpAQCAtOTQ5LDcgKzExNDcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTE9DQUxfVW5sb2NrCiAgKi8KLUJPT0wgTE9DQUxfVW5sb2NrKCBXT1JEIGRzLCBITE9DQUwgaGFuZGxlICkKK0JPT0wgTE9DQUxfVW5sb2NrKCBIQU5ETEUxNiBkcywgSExPQ0FMMTYgaGFuZGxlICkKIHsKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAKQEAgLTk3MSw3ICsxMTY5LDcgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBMb2NhbFNpemUoKS4KICAqLwotV09SRCBMT0NBTF9TaXplKCBXT1JEIGRzLCBITE9DQUwgaGFuZGxlICkKK1dPUkQgTE9DQUxfU2l6ZSggSEFORExFMTYgZHMsIEhMT0NBTDE2IGhhbmRsZSApCiB7CiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBDVVJSRU5UX0RTLCAwICk7CiAgICAgTE9DQUxBUkVOQSAqcEFyZW5hOwpAQCAtOTg5LDcgKzExODcsNyBAQAogICoKICAqIEltcGxlbWVudGF0aW9uIG9mIExvY2FsRmxhZ3MoKS4KICAqLwotV09SRCBMT0NBTF9GbGFncyggV09SRCBkcywgSExPQ0FMIGhhbmRsZSApCitXT1JEIExPQ0FMX0ZsYWdzKCBIQU5ETEUxNiBkcywgSExPQ0FMMTYgaGFuZGxlICkKIHsKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAKQEAgLTEwMTQsNyArMTIxMiw3IEBACiAgKgogICogSW1wbGVtZW50YXRpb24gb2YgTG9jYWxIZWFwU2l6ZSgpLgogICovCi1XT1JEIExPQ0FMX0hlYXBTaXplKCBXT1JEIGRzICkKK1dPUkQgTE9DQUxfSGVhcFNpemUoIEhBTkRMRTE2IGRzICkKIHsKICAgICBMT0NBTEhFQVBJTkZPICpwSW5mbyA9IExPQ0FMX0dldEhlYXAoIGRzICk7CiAgICAgaWYgKCFwSW5mbykgcmV0dXJuIDA7CkBAIC0xMDI3LDcgKzEyMjUsNyBAQAogICoKICAqIEltcGxlbWVudGF0aW9uIG9mIExvY2FsQ291bnRGcmVlKCkuCiAgKi8KLVdPUkQgTE9DQUxfQ291bnRGcmVlKCBXT1JEIGRzICkKK1dPUkQgTE9DQUxfQ291bnRGcmVlKCBIQU5ETEUxNiBkcyApCiB7CiAgICAgV09SRCBhcmVuYSwgdG90YWw7CiAgICAgTE9DQUxBUkVOQSAqcEFyZW5hOwpAQCAtMTA2MSw3ICsxMjU5LDcgQEAKICAqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBMb2NhbEhhbmRsZSgpLgogICovCi1ITE9DQUwgTE9DQUxfSGFuZGxlKCBXT1JEIGRzLCBXT1JEIGFkZHIgKQorSExPQ0FMMTYgTE9DQUxfSGFuZGxlKCBIQU5ETEUxNiBkcywgV09SRCBhZGRyICkKIHsgCiAgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOwogICAgIExPQ0FMSEVBUElORk8gKnBJbmZvOwpAQCAtMTA4Miw5MSArMTI4MCw5NCBAQAogICAgICAgICBXT1JEIGNvdW50ID0gKihXT1JEICopKHB0ciArIHRhYmxlKTsKICAgICAgICAgTE9DQUxIQU5ETEVFTlRSWSAqcEVudHJ5ID0gKExPQ0FMSEFORExFRU5UUlkqKShwdHIrdGFibGUrc2l6ZW9mKFdPUkQpKTsKICAgICAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcEVudHJ5KyspCi0gICAgICAgICAgICBpZiAocEVudHJ5LT5hZGRyID09IGFkZHIpIHJldHVybiAoSExPQ0FMKSgoY2hhciAqKXBFbnRyeSAtIHB0cik7CisgICAgICAgICAgICBpZiAocEVudHJ5LT5hZGRyID09IGFkZHIpIHJldHVybiAoSExPQ0FMMTYpKChjaGFyICopcEVudHJ5IC0gcHRyKTsKICAgICAgICAgdGFibGUgPSAqKFdPUkQgKilwRW50cnk7CiAgICAgfQogCi0gICAgcmV0dXJuIChITE9DQUwpYWRkcjsgIC8qIEZpeGVkIGJsb2NrIGhhbmRsZSBpcyBhZGRyICovCisgICAgcmV0dXJuIChITE9DQUwxNilhZGRyOyAgLyogRml4ZWQgYmxvY2sgaGFuZGxlIGlzIGFkZHIgKi8KIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2NhbEFsbG9jICAgKEtFUk5FTC41KQorICogICAgICAgICAgIExvY2FsQWxsb2MxNiAgIChLRVJORUwuNSkKICAqLwotSExPQ0FMIExvY2FsQWxsb2MoIFdPUkQgZmxhZ3MsIFdPUkQgc2l6ZSApCitITE9DQUwxNiBMb2NhbEFsbG9jMTYoIFVJTlQxNiBmbGFncywgV09SRCBzaXplICkKIHsKICAgICByZXR1cm4gTE9DQUxfQWxsb2MoIENVUlJFTlRfRFMsIGZsYWdzLCBzaXplICk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgTG9jYWxSZUFsbG9jICAgKEtFUk5FTC42KQorICogICAgICAgICAgIExvY2FsUmVBbGxvYzE2ICAgKEtFUk5FTC42KQogICovCi1ITE9DQUwgTG9jYWxSZUFsbG9jKCBITE9DQUwgaGFuZGxlLCBXT1JEIHNpemUsIFdPUkQgZmxhZ3MgKQorSExPQ0FMMTYgTG9jYWxSZUFsbG9jMTYoIEhMT0NBTDE2IGhhbmRsZSwgV09SRCBzaXplLCBVSU5UMTYgZmxhZ3MgKQogewogICAgIHJldHVybiBMT0NBTF9SZUFsbG9jKCBDVVJSRU5UX0RTLCBoYW5kbGUsIHNpemUsIGZsYWdzICk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgTG9jYWxGcmVlICAgKEtFUk5FTC43KQorICogICAgICAgICAgIExvY2FsRnJlZTE2ICAgKEtFUk5FTC43KQogICovCi1ITE9DQUwgTG9jYWxGcmVlKCBITE9DQUwgaGFuZGxlICkKK0hMT0NBTDE2IExvY2FsRnJlZTE2KCBITE9DQUwxNiBoYW5kbGUgKQogewogICAgIHJldHVybiBMT0NBTF9GcmVlKCBDVVJSRU5UX0RTLCBoYW5kbGUgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2NhbExvY2sgICAoS0VSTkVMLjgpCisgKiAgICAgICAgICAgTG9jYWxMb2NrMTYgICAoS0VSTkVMLjgpCisgKgorICogTm90ZTogb25seSB0aGUgb2Zmc2V0IHBhcnQgb2YgdGhlIHBvaW50ZXIgaXMgcmV0dXJuZWQgYnkgdGhlIHJlbGF5IGNvZGUuCiAgKi8KLU5QVk9JRCBMb2NhbExvY2soIEhMT0NBTCBoYW5kbGUgKQorU0VHUFRSIExvY2FsTG9jazE2KCBITE9DQUwxNiBoYW5kbGUgKQogewotICAgIGNoYXIgKnB0ciA9IFBUUl9TRUdfT0ZGX1RPX0xJTiggQ1VSUkVOVF9EUywgMCApOwotICAgIHJldHVybiAoTlBWT0lEKUxPQ0FMX0ludGVybmFsTG9jayggcHRyLCBoYW5kbGUgKTsKKyAgICBIQU5ETEUxNiBkcyA9IENVUlJFTlRfRFM7CisgICAgY2hhciAqcHRyID0gUFRSX1NFR19PRkZfVE9fTElOKCBkcywgMCApOworICAgIHJldHVybiBQVFJfU0VHX09GRl9UT19TRUdQVFIoIGRzLCBMT0NBTF9JbnRlcm5hbExvY2soIHB0ciwgaGFuZGxlICkgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2NhbFVubG9jayAgIChLRVJORUwuOSkKKyAqICAgICAgICAgICBMb2NhbFVubG9jazE2ICAgKEtFUk5FTC45KQogICovCi1CT09MIExvY2FsVW5sb2NrKCBITE9DQUwgaGFuZGxlICkKK0JPT0wgTG9jYWxVbmxvY2sxNiggSExPQ0FMMTYgaGFuZGxlICkKIHsKICAgICByZXR1cm4gTE9DQUxfVW5sb2NrKCBDVVJSRU5UX0RTLCBoYW5kbGUgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2NhbFNpemUgICAoS0VSTkVMLjEwKQorICogICAgICAgICAgIExvY2FsU2l6ZTE2ICAgKEtFUk5FTC4xMCkKICAqLwotV09SRCBMb2NhbFNpemUoIEhMT0NBTCBoYW5kbGUgKQorVUlOVDE2IExvY2FsU2l6ZTE2KCBITE9DQUwxNiBoYW5kbGUgKQogewogICAgIHJldHVybiBMT0NBTF9TaXplKCBDVVJSRU5UX0RTLCBoYW5kbGUgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2NhbEhhbmRsZSAgIChLRVJORUwuMTEpCisgKiAgICAgICAgICAgTG9jYWxIYW5kbGUxNiAgIChLRVJORUwuMTEpCiAgKi8KLUhMT0NBTCBMb2NhbEhhbmRsZSggV09SRCBhZGRyICkKK0hMT0NBTDE2IExvY2FsSGFuZGxlMTYoIFdPUkQgYWRkciApCiB7IAogICAgIHJldHVybiBMT0NBTF9IYW5kbGUoIENVUlJFTlRfRFMsIGFkZHIgKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBMb2NhbEZsYWdzICAgKEtFUk5FTC4xMikKKyAqICAgICAgICAgICBMb2NhbEZsYWdzMTYgICAoS0VSTkVMLjEyKQogICovCi1XT1JEIExvY2FsRmxhZ3MoIEhMT0NBTCBoYW5kbGUgKQorVUlOVDE2IExvY2FsRmxhZ3MxNiggSExPQ0FMMTYgaGFuZGxlICkKIHsKICAgICByZXR1cm4gTE9DQUxfRmxhZ3MoIENVUlJFTlRfRFMsIGhhbmRsZSApOwogfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIExvY2FsQ29tcGFjdCAgIChLRVJORUwuMTMpCisgKiAgICAgICAgICAgTG9jYWxDb21wYWN0MTYgICAoS0VSTkVMLjEzKQogICovCi1XT1JEIExvY2FsQ29tcGFjdCggV09SRCBtaW5mcmVlICkKK1VJTlQxNiBMb2NhbENvbXBhY3QxNiggVUlOVDE2IG1pbmZyZWUgKQogewogICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxvY2FsQ29tcGFjdDogJTA0eFxuIiwgbWluZnJlZSApOwogICAgIHJldHVybiBMT0NBTF9Db21wYWN0KCBDVVJSRU5UX0RTLCBtaW5mcmVlLCAwICk7CkBAIC0xMTgwLDcgKzEzODEsNyBAQAogewogICAgIExPQ0FMSEVBUElORk8gKnBJbmZvOwogICAgIEZBUlBST0Mgb2xkTm90aWZ5OwotICAgIFdPUkQgZHMgPSBDVVJSRU5UX0RTOworICAgIEhBTkRMRTE2IGRzID0gQ1VSUkVOVF9EUzsKIAogICAgIGlmICghKHBJbmZvID0gTE9DQUxfR2V0SGVhcCggZHMgKSkpCiAgICAgewpAQCAtMTE4OCw3ICsxMzg5LDcgQEAKIAlMT0NBTF9QcmludEhlYXAoIGRzICk7CiAJcmV0dXJuIDA7CiAgICAgfQotICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxvY2FsTm90aWZ5KCUwNHgpOiAlMDhseFxuIiwgZHMsIGZ1bmMgKTsKKyAgICBkcHJpbnRmX2xvY2FsKCBzdGRkZWIsICJMb2NhbE5vdGlmeSglMDR4KTogJTA4bHhcbiIsIGRzLCAoRFdPUkQpZnVuYyApOwogICAgIG9sZE5vdGlmeSA9IHBJbmZvLT5ub3RpZnk7CiAgICAgcEluZm8tPm5vdGlmeSA9IGZ1bmM7CiAgICAgcmV0dXJuIG9sZE5vdGlmeTsKQEAgLTExOTYsOSArMTM5Nyw5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgTG9jYWxTaHJpbmsgICAoS0VSTkVMLjEyMSkKKyAqICAgICAgICAgICBMb2NhbFNocmluazE2ICAgKEtFUk5FTC4xMjEpCiAgKi8KLVdPUkQgTG9jYWxTaHJpbmsoIEhMT0NBTCBoYW5kbGUsIFdPUkQgbmV3c2l6ZSApCitVSU5UMTYgTG9jYWxTaHJpbmsxNiggSEdMT0JBTDE2IGhhbmRsZSwgVUlOVDE2IG5ld3NpemUgKQogewogICAgIGRwcmludGZfbG9jYWwoIHN0ZGRlYiwgIkxvY2FsU2hyaW5rOiAlMDR4ICUwNHhcbiIsIGhhbmRsZSwgbmV3c2l6ZSApOwogICAgIHJldHVybiAwOwpAQCAtMTI2Myw3ICsxNDY0LDcgQEAKICAqLwogQk9PTCBMb2NhbEluZm8oIExPQ0FMSU5GTyAqcExvY2FsSW5mbywgSEdMT0JBTCBoYW5kbGUgKQogewotICAgIExPQ0FMSEVBUElORk8gKnBJbmZvID0gTE9DQUxfR2V0SGVhcChTRUxFQ1RPUk9GKFdJTjE2X0dsb2JhbExvY2soaGFuZGxlKSkpOworICAgIExPQ0FMSEVBUElORk8gKnBJbmZvID0gTE9DQUxfR2V0SGVhcChTRUxFQ1RPUk9GKFdJTjE2X0dsb2JhbExvY2sxNihoYW5kbGUpKSk7CiAgICAgaWYgKCFwSW5mbykgcmV0dXJuIEZBTFNFOwogICAgIHBMb2NhbEluZm8tPndjSXRlbXMgPSBwSW5mby0+aXRlbXM7CiAgICAgcmV0dXJuIFRSVUU7CkBAIC0xMjc1LDcgKzE0NzYsNyBAQAogICovCiBCT09MIExvY2FsRmlyc3QoIExPQ0FMRU5UUlkgKnBMb2NhbEVudHJ5LCBIR0xPQkFMIGhhbmRsZSApCiB7Ci0gICAgV09SRCBkcyA9IFNFTEVDVE9ST0YoIFdJTjE2X0dsb2JhbExvY2soIGhhbmRsZSApICk7CisgICAgV09SRCBkcyA9IFNFTEVDVE9ST0YoIFdJTjE2X0dsb2JhbExvY2sxNiggaGFuZGxlICkgKTsKICAgICBjaGFyICpwdHIgPSBQVFJfU0VHX09GRl9UT19MSU4oIGRzLCAwICk7CiAgICAgTE9DQUxIRUFQSU5GTyAqcEluZm8gPSBMT0NBTF9HZXRIZWFwKCBkcyApOwogICAgIGlmICghcEluZm8pIHJldHVybiBGQUxTRTsKQEAgLTEzMTksNCArMTUyMCw5NSBAQAogICAgIHJldHVybiBUUlVFOwogfQogCisjaWZuZGVmIFdJTkVMSUIKKwogI2VuZGlmICAvKiBXSU5FTElCICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIExvY2FsQWxsb2MzMiAgIChLRVJORUwzMi4zNzEpCisgKi8KK0hMT0NBTDMyIExvY2FsQWxsb2MzMiggVUlOVDMyIGZsYWdzLCBEV09SRCBzaXplICkKK3sKKyAgICByZXR1cm4gKEhMT0NBTDMyKUdsb2JhbEFsbG9jMzIoIGZsYWdzLCBzaXplICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTG9jYWxDb21wYWN0MzIgICAoS0VSTkVMMzIuMzcyKQorICovCitVSU5UMzIgTG9jYWxDb21wYWN0MzIoIFVJTlQzMiBtaW5mcmVlICkKK3sKKyAgICByZXR1cm4gMDsgIC8qIExvY2FsQ29tcGFjdCBkb2VzIG5vdGhpbmcgaW4gV2luMzIgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBMb2NhbEZsYWdzMzIgICAoS0VSTkVMMzIuMzc0KQorICovCitVSU5UMzIgTG9jYWxGbGFnczMyKCBITE9DQUwzMiBoYW5kbGUgKQoreworICAgIHJldHVybiBHbG9iYWxGbGFnczMyKCAoSEdMT0JBTDMyKWhhbmRsZSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIExvY2FsRnJlZTMyICAgKEtFUk5FTDMyLjM3NSkKKyAqLworSExPQ0FMMzIgTG9jYWxGcmVlMzIoIEhMT0NBTDMyIGhhbmRsZSApCit7CisgICAgcmV0dXJuIChITE9DQUwzMilHbG9iYWxGcmVlMzIoIChIR0xPQkFMMzIpaGFuZGxlICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTG9jYWxIYW5kbGUzMiAgIChLRVJORUwzMi4zNzYpCisgKi8KK0hMT0NBTDMyIExvY2FsSGFuZGxlMzIoIExQQ1ZPSUQgcHRyICkKK3sKKyAgICByZXR1cm4gKEhMT0NBTDMyKUdsb2JhbEhhbmRsZTMyKCBwdHIgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBMb2NhbExvY2szMiAgIChLRVJORUwzMi4zNzcpCisgKi8KK0xQVk9JRCBMb2NhbExvY2szMiggSExPQ0FMMzIgaGFuZGxlICkKK3sKKyAgICByZXR1cm4gR2xvYmFsTG9jazMyKCAoSEdMT0JBTDMyKWhhbmRsZSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIExvY2FsUmVBbGxvYzMyICAgKEtFUk5FTDMyLjM3OCkKKyAqLworSExPQ0FMMzIgTG9jYWxSZUFsbG9jMzIoIEhMT0NBTDMyIGhhbmRsZSwgRFdPUkQgc2l6ZSwgVUlOVDMyIGZsYWdzICkKK3sKKyAgICByZXR1cm4gKEhMT0NBTDMyKUdsb2JhbFJlQWxsb2MzMiggKEhHTE9CQUwzMiloYW5kbGUsIHNpemUsIGZsYWdzICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTG9jYWxTaHJpbmszMiAgIChLRVJORUwzMi4zNzkpCisgKi8KK1VJTlQzMiBMb2NhbFNocmluazMyKCBIR0xPQkFMMzIgaGFuZGxlLCBVSU5UMzIgbmV3c2l6ZSApCit7CisgICAgcmV0dXJuIDA7ICAvKiBMb2NhbFNocmluayBkb2VzIG5vdGhpbmcgaW4gV2luMzIgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBMb2NhbFNpemUzMiAgIChLRVJORUwzMi4zODApCisgKi8KK1VJTlQzMiBMb2NhbFNpemUzMiggSExPQ0FMMzIgaGFuZGxlICkKK3sKKyAgICByZXR1cm4gR2xvYmFsU2l6ZTMyKCAoSEdMT0JBTDMyKWhhbmRsZSApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIExvY2FsVW5sb2NrMzIgICAoS0VSTkVMMzIuMzgxKQorICovCitCT09MIExvY2FsVW5sb2NrMzIoIEhMT0NBTDMyIGhhbmRsZSApCit7CisgICAgcmV0dXJuIEdsb2JhbFVubG9jazMyKCAoSEdMT0JBTDMyKWhhbmRsZSApOworfQpkaWZmIC0tZ2l0IGEvbWVtb3J5L3NlbGVjdG9yLmMgYi9tZW1vcnkvc2VsZWN0b3IuYwppbmRleCA2ZWVmMTg3Li40YjllNDVhIDEwMDY0NAotLS0gYS9tZW1vcnkvc2VsZWN0b3IuYworKysgYi9tZW1vcnkvc2VsZWN0b3IuYwpAQCAtNCw4ICs0LDYgQEAKICAqIENvcHlyaWdodCAxOTk1IEFsZXhhbmRyZSBKdWxsaWFyZAogICovCiAKLSNpZm5kZWYgV0lORUxJQgotCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgImxkdC5oIgpAQCAtNzMsNiArNzEsNyBAQAogICAgIGRwcmludGZfc2VsZWN0b3IoIHN0ZGRlYiwgIkZyZWVTZWxlY3RvciglMDR4KVxuIiwgc2VsICk7CiAgICAgaWYgKElTX1NFTEVDVE9SX0ZSRUUoc2VsKSkgcmV0dXJuIHNlbDsgIC8qIGVycm9yICovCiAgICAgY291bnQgPSAoR0VUX1NFTF9MSU1JVChzZWwpID4+IDE2KSArIDE7CisgICAgc2VsICY9IH4oX19BSElOQ1IgLSAxKTsgIC8qIGNsZWFyIGJvdHRvbSBiaXRzIG9mIHNlbGVjdG9yICovCiAgICAgbmV4dHNlbCA9IHNlbCArIChjb3VudCA8PCBfX0FIU0hJRlQpOwogICAgIG1lbXNldCggJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpICk7ICAvKiBjbGVhciB0aGUgTERUIGVudHJpZXMgKi8KICAgICAvKiBGSVhNRTogaXMgaXQgY29ycmVjdCB0byBmcmVlIHRoZSB3aG9sZSBhcnJheT8gKi8KQEAgLTQ4NCw1ICs0ODMsMyBAQAogICAgIHJldHVybiAoKGVudHJ5IDw8IDE2KSB8ICgodW5zaWduZWQpIHB0ciAmIDB4ZmZmZikpOwogfQogI2VuZGlmCi0KLSNlbmRpZiAgLyogV0lORUxJQiAqLwpkaWZmIC0tZ2l0IGEvbWlzYy9jbGlwYm9hcmQuYyBiL21pc2MvY2xpcGJvYXJkLmMKaW5kZXggMzEwNDliYS4uYmJhYzdhMiAxMDA2NDQKLS0tIGEvbWlzYy9jbGlwYm9hcmQuYworKysgYi9taXNjL2NsaXBib2FyZC5jCkBAIC0yOCw4ICsyOCw3IEBACiAgICAgRFdPUkQJQnVmU2l6ZTsKICAgICB2b2lkCSpQcmV2Rm9ybWF0OwogICAgIHZvaWQJKk5leHRGb3JtYXQ7Ci19IENMSVBGT1JNQVQ7Ci10eXBlZGVmIENMSVBGT1JNQVQgRkFSKiBMUENMSVBGT1JNQVQ7Cit9IENMSVBGT1JNQVQsICpMUENMSVBGT1JNQVQ7CiAKIHN0YXRpYyBIV05EIGhXbmRDbGlwYm9hcmRPd25lciA9IDA7CiBzdGF0aWMgSFdORCBoV25kVmlld2VyID0gMDsKQEAgLTg3LDcgKzg2LDcgQEAKICAgICB3aGlsZShUUlVFKSB7CiAJaWYgKGxwRm9ybWF0ID09IE5VTEwpIGJyZWFrOwogCWlmIChscEZvcm1hdC0+aERhdGEgIT0gMCkgewotCSAgICBHbG9iYWxGcmVlKGxwRm9ybWF0LT5oRGF0YSk7CisJICAgIEdsb2JhbEZyZWUxNihscEZvcm1hdC0+aERhdGEpOwogCSAgICBscEZvcm1hdC0+aERhdGEgPSAwOwogCSAgICB9CiAJbHBGb3JtYXQgPSBscEZvcm1hdC0+TmV4dEZvcm1hdDsKQEAgLTEzMCw3ICsxMjksNyBAQAogICAgIFhTZXRTZWxlY3Rpb25Pd25lcihkaXNwbGF5LFhBX1BSSU1BUlksV0lOX0dldFhXaW5kb3coaFduZENsaXBib2FyZE93bmVyKSxDdXJyZW50VGltZSk7CiAgICAgd2luZU93bnNTZWxlY3Rpb24gPSBUcnVlOwogICAgIGRwcmludGZfY2xpcGJvYXJkKHN0ZGRlYiwiR2V0dGluZyBzZWxlY3Rpb25cbiIpOwotICAgIGlmIChscEZvcm1hdC0+aERhdGEgIT0gMCkgR2xvYmFsRnJlZShscEZvcm1hdC0+aERhdGEpOworICAgIGlmIChscEZvcm1hdC0+aERhdGEgIT0gMCkgR2xvYmFsRnJlZTE2KGxwRm9ybWF0LT5oRGF0YSk7CiAgICAgbHBGb3JtYXQtPmhEYXRhID0gaERhdGE7CiAgICAgcmV0dXJuIGxwRm9ybWF0LT5oRGF0YTsKIH0KQEAgLTMzOSw3ICszMzgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCUdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0CVtVU0VSLjQwMl0KICAqLwotaW50IEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KFdPUkQgRkFSICpscFByaW9yaXR5TGlzdCwgc2hvcnQgbkNvdW50KQoraW50IEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KFdPUkQgKmxwUHJpb3JpdHlMaXN0LCBzaG9ydCBuQ291bnQpCiB7CiAgICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkbmltcCwKIAkiR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQoJXAsICVkKSAhXG4iLCBscFByaW9yaXR5TGlzdCwgbkNvdW50KTsKQEAgLTM3Nyw5ICszNzYsOSBAQAogCSAgICBoVGV4dD0wOwogCX0gZWxzZSB7CiAJICAgIGRwcmludGZfY2xpcGJvYXJkKHN0ZGRlYiwiU2VsZWN0aW9uIGlzICVzXG4iLHZhbCk7Ci0JICAgIGhUZXh0PUdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIG5pdGVtcysxKTsKLQkgICAgbWVtY3B5KEdsb2JhbExvY2soaFRleHQpLHZhbCxuaXRlbXMrMSk7Ci0JICAgIEdsb2JhbFVubG9jayhoVGV4dCk7CisJICAgIGhUZXh0PUdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgbml0ZW1zKzEpOworCSAgICBtZW1jcHkoR2xvYmFsTG9jazE2KGhUZXh0KSx2YWwsbml0ZW1zKzEpOworCSAgICBHbG9iYWxVbmxvY2sxNihoVGV4dCk7CiAJfQogCVhGcmVlKHZhbCk7CiAgICAgfQpAQCAtMzg4LDcgKzM4Nyw3IEBACiAJaWYgKGxwRm9ybWF0LT53Rm9ybWF0SUQgPT0gQ0ZfVEVYVCkgYnJlYWs7CiAJbHBGb3JtYXQgPSBscEZvcm1hdC0+TmV4dEZvcm1hdDsKIAl9Ci0gICAgaWYgKGxwRm9ybWF0LT5oRGF0YSAhPSAwKSBHbG9iYWxGcmVlKGxwRm9ybWF0LT5oRGF0YSk7CisgICAgaWYgKGxwRm9ybWF0LT5oRGF0YSAhPSAwKSBHbG9iYWxGcmVlMTYobHBGb3JtYXQtPmhEYXRhKTsKICAgICB3YWl0X2Zvcl9zZWxlY3Rpb249RmFsc2U7CiAgICAgbHBGb3JtYXQtPmhEYXRhID0gaFRleHQ7CiAgICAgZHByaW50Zl9jbGlwYm9hcmQoc3RkZGViLCJSZWNlaXZlZCBzZWxlY3Rpb25cbiIpOwpkaWZmIC0tZ2l0IGEvbWlzYy9jb21tLmMgYi9taXNjL2NvbW0uYwppbmRleCBkODYzZWM1Li43MzgxMWE5IDEwMDY0NAotLS0gYS9taXNjL2NvbW0uYworKysgYi9taXNjL2NvbW0uYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJfQogfSAgCiAKLWludCBHZXRDb21tRXJyb3IoaW50IGZkLCBDT01TVEFUIEZBUiAqbHBTdGF0KQoraW50IEdldENvbW1FcnJvcihpbnQgZmQsIENPTVNUQVQgKmxwU3RhdCkKIHsKIAlpbnQgdGVtcGVycm9yOwogCkBAIC00MzcsNyArNDM3LDcgQEAKIAlyZXR1cm4odGVtcGVycm9yKTsKIH0KIAotVUlOVCBGQVIqIFNldENvbW1FdmVudE1hc2soaW50IGZkLCBVSU5UIGZ1RXZ0TWFzaykKK1VJTlQgKiBTZXRDb21tRXZlbnRNYXNrKGludCBmZCwgVUlOVCBmdUV2dE1hc2spCiB7CiAgICAgCWRwcmludGZfY29tbShzdGRkZWIsCiAJCSJTZXRDb21tRXZlbnRNYXNrOiBmZCAlZCwgbWFzayAlZFxuIiwgZmQsIGZ1RXZ0TWFzayk7CkBAIC00NTMsNyArNDUzLDcgQEAKIAlyZXR1cm4gZXZlbnRtYXNrOwogfQogCi1pbnQgU2V0Q29tbVN0YXRlKERDQiBGQVIgKmxwZGNiKQoraW50IFNldENvbW1TdGF0ZShEQ0IgKmxwZGNiKQogewogCXN0cnVjdCB0ZXJtaW9zIHBvcnQ7CiAJc3RydWN0IERvc0RldmljZVN0cnVjdCAqcHRyOwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJfQogfQogCi1pbnQgR2V0Q29tbVN0YXRlKGludCBmZCwgRENCIEZBUiAqbHBkY2IpCitpbnQgR2V0Q29tbVN0YXRlKGludCBmZCwgRENCICpscGRjYikKIHsKIAlzdHJ1Y3QgdGVybWlvcyBwb3J0OwogCmRpZmYgLS1naXQgYS9taXNjL2NvbW1kbGcuYyBiL21pc2MvY29tbWRsZy5jCmluZGV4IGE3NDliYTIuLjA3ODk4NDMgMTAwNjQ0Ci0tLSBhL21pc2MvY29tbWRsZy5jCisrKyBiL21pc2MvY29tbWRsZy5jCkBAIC0yOCw2ICsyOCw3IEBACiBzdGF0aWMJSEJJVE1BUAkJaEZsb3BweSA9IDA7CiBzdGF0aWMJSEJJVE1BUAkJaEhEaXNrID0gMDsKIHN0YXRpYwlIQklUTUFQCQloQ0RSb20gPSAwOworc3RhdGljICBIQklUTUFQIAloQml0bWFwVFQgPSAwOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIAkJCQlGaWxlRGxnX0luaXQJCQlbaW50ZXJuYWxdCkBAIC03MTUsMTEgKzcxNiwxMSBAQAogICAgICAqLwogICAgIGhEbGdUbXBsID0gU1lTUkVTX0xvYWRSZXNvdXJjZSggU1lTUkVTX0RJQUxPR19GSU5EX1RFWFQgKTsKICAgICBoSW5zdCA9IFdJTl9HZXRXaW5kb3dJbnN0YW5jZSggbHBGaW5kLT5od25kT3duZXIgKTsKLSAgICBpZiAoIShwdHIgPSAoU0VHUFRSKVdJTjE2X0dsb2JhbExvY2soIGhEbGdUbXBsICkpKSByZXR1cm4gLTE7CisgICAgaWYgKCEocHRyID0gKFNFR1BUUilXSU4xNl9HbG9iYWxMb2NrMTYoIGhEbGdUbXBsICkpKSByZXR1cm4gLTE7CiAgICAgYlJldCA9IENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oIGhJbnN0LCBwdHIsIGxwRmluZC0+aHduZE93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoIkZpbmRUZXh0RGxnUHJvYyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpbHBGaW5kICk7Ci0gICAgR2xvYmFsVW5sb2NrKCBoRGxnVG1wbCApOworICAgIEdsb2JhbFVubG9jazE2KCBoRGxnVG1wbCApOwogICAgIFNZU1JFU19GcmVlUmVzb3VyY2UoIGhEbGdUbXBsICk7CiAgICAgcmV0dXJuIGJSZXQ7CiB9CkBAIC03NDQsMTEgKzc0NSwxMSBAQAogICAgICAqLwogICAgIGhEbGdUbXBsID0gU1lTUkVTX0xvYWRSZXNvdXJjZSggU1lTUkVTX0RJQUxPR19SRVBMQUNFX1RFWFQgKTsKICAgICBoSW5zdCA9IFdJTl9HZXRXaW5kb3dJbnN0YW5jZSggbHBGaW5kLT5od25kT3duZXIgKTsKLSAgICBpZiAoIShwdHIgPSAoU0VHUFRSKVdJTjE2X0dsb2JhbExvY2soIGhEbGdUbXBsICkpKSByZXR1cm4gLTE7CisgICAgaWYgKCEocHRyID0gKFNFR1BUUilXSU4xNl9HbG9iYWxMb2NrMTYoIGhEbGdUbXBsICkpKSByZXR1cm4gLTE7CiAgICAgYlJldCA9IENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0oIGhJbnN0LCBwdHIsIGxwRmluZC0+aHduZE93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoIlJlcGxhY2VUZXh0RGxnUHJvYyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpbHBGaW5kICk7Ci0gICAgR2xvYmFsVW5sb2NrKCBoRGxnVG1wbCApOworICAgIEdsb2JhbFVubG9jazE2KCBoRGxnVG1wbCApOwogICAgIFNZU1JFU19GcmVlUmVzb3VyY2UoIGhEbGdUbXBsICk7CiAgICAgcmV0dXJuIGJSZXQ7CiB9CkBAIC0yMTUwLDggKzIxNTEsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlRm9udCAgIChDT01NRExHLjE1KSAgICAgCi0gICAgIC0tQXByaWwgMTk5Ni0tCi0gICAgIHBsZWFzZSBub3RlOiBDaG9vc2VGb250IGV0Yy4gYXJlIHN0aWxsIHVuZGVyIGNvbnN0cnVjdGlvbgogICovCiBCT09MIENob29zZUZvbnQoTFBDSE9PU0VGT05UIGxwQ2hGb250KQogewpAQCAtMjE2Nyw2MyArMjE2Niw1MTYgQEAKICAgICByZXR1cm4gYlJldDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRm9udFN0eWxlRW51bVByb2MgICAoQ09NTURMRy4xOCkKLSAqLwotaW50IEZvbnRTdHlsZUVudW1Qcm9jKExPR0ZPTlQgKmxmICxURVhUTUVUUklDICp0bSwgaW50IGZvbnR0eXBlLCBMUEFSQU0gbFBhcmFtKQorCisjZGVmaW5lIFRFWFRfRVhUUkFTIDQKKyNkZWZpbmUgVEVYVF9DT0xPUlMgMTYKKworc3RhdGljIGNvbnN0IENPTE9SUkVGIHRleHRjb2xvcnNbVEVYVF9DT0xPUlNdPQogewotIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIkZvbnRTdHlsZUVudW1Qcm9jOiBmb250PSVzIChoZWlnaHQ9JWQpXG4iLGxmLT5sZkZhY2VOYW1lLGxmLT5sZkhlaWdodCk7Ci0gcmV0dXJuIDE7CisgMHgwMDAwMDAwMEwsMHgwMDAwMDA4MEwsMHgwMDAwODAwMEwsMHgwMDAwODA4MEwsCisgMHgwMDgwMDAwMEwsMHgwMDgwMDA4MEwsMHgwMDgwODAwMEwsMHgwMDgwODA4MEwsCisgMHgwMGMwYzBjMEwsMHgwMDAwMDBmZkwsMHgwMDAwZmYwMEwsMHgwMDAwZmZmZkwsCisgMHgwMGZmMDAwMEwsMHgwMGZmMDBmZkwsMHgwMGZmZmYwMEwsMHgwMEZGRkZGRkwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgIENGbl9Ib29rQ2FsbENoayAgICAgICAgICAgICAgICAgW2ludGVybmFsXQorICovCitzdGF0aWMgQk9PTCBDRm5fSG9va0NhbGxDaGsoTFBDSE9PU0VGT05UIGxwY2YpCit7CisgaWYgKGxwY2YpCisgIGlmKGxwY2YtPkZsYWdzICYgQ0ZfRU5BQkxFSE9PSykKKyAgIGlmIChscGNmLT5scGZuSG9vaykKKyAgICByZXR1cm4gVFJVRTsKKyByZXR1cm4gRkFMU0U7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEZvbnRGYW1pbHlFbnVtUHJvYyAgIChDT01NRExHLjE5KQorICogICAgICAgICAgICAgICAgRm9udEZhbWlseUVudW1Qcm9jICAgICAgICAgICAgICAgICAgICAgICAoQ09NTURMRy4xOSkKICAqLwotaW50IEZvbnRGYW1pbHlFbnVtUHJvYyhMT0dGT05UICpsZiAsVEVYVE1FVFJJQyAqdG0sIGludCBmb250dHlwZSwgTFBBUkFNIGxQYXJhbSkKK2ludCBGb250RmFtaWx5RW51bVByb2MoTFBMT0dGT05UIGxwbGYgLExQVEVYVE1FVFJJQyBscHRtLCBpbnQgbkZvbnRUeXBlLCBMUEFSQU0gbFBhcmFtKQogewotIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIkZvbnRGYW1pbHlFbnVtUHJvYzogZm9udD0lc1xuIixsZi0+bGZGYWNlTmFtZSk7Ci0gcmV0dXJuIDE7CisgIGludCBpOworICBXT1JEIHc7CisgIEhXTkQgaHduZD1MT1dPUkQobFBhcmFtKTsKKworICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJGb250RmFtaWx5RW51bVByb2M6IGZvbnQ9JXMgKG5Gb250VHlwZT0lZClcbiIsCisgICAgIAkJCWxwbGYtPmxmRmFjZU5hbWUsbkZvbnRUeXBlKTsKKyAgaT1TZW5kTWVzc2FnZShod25kLENCX0FERFNUUklORywwLChMUEFSQU0pTUFLRV9TRUdQVFIobHBsZi0+bGZGYWNlTmFtZSkpOworICBpZiAoaSE9Q0JfRVJSKQorICB7CisgICAgdz0obHBsZi0+bGZDaGFyU2V0IDw8IDgpIHwgbHBsZi0+bGZQaXRjaEFuZEZhbWlseTsKKyAgICBTZW5kTWVzc2FnZShod25kLCBDQl9TRVRJVEVNREFUQSxpLE1BS0VMT05HKG5Gb250VHlwZSx3KSk7CisgICAgcmV0dXJuIDEgOworICB9CisgIGVsc2UKKyAgICByZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgQ29sb3JEbGdQcm9jICAgKENPTU1ETEcuMTYpCisgKiAgICAgICAgICAgICAgICAgRm9udFN0eWxlRW51bVByb2MgICAgICAgICAgICAgICAgICAgICAoQ09NTURMRy4xOCkKICAqLwotTFJFU1VMVCBGb3JtYXRDaGFyRGxnUHJvYyhIV05EIGhEbGcsIFVJTlQgd01zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK2ludCBGb250U3R5bGVFbnVtUHJvYyhMUExPR0ZPTlQgbHBsZiAsTFBURVhUTUVUUklDIGxwdG0sIGludCBuRm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCit7CisgIGludCBqOworICBjaGFyIGJ1ZmZlclsyMF07CisvKiAgSFdORCBoY21iMj1MT1dPUkQobFBhcmFtKTsqLworICBIV05EIGhjbWIzPUhJV09SRChsUGFyYW0pOworICBMUExPR0ZPTlQgbGY9bHBsZjsKKworICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJGb250U3R5bGVFbnVtUHJvYzogKG5Gb250VHlwZT0lZClcbiIsbkZvbnRUeXBlKTsKKyAgZHByaW50Zl9jb21tZGxnKHN0ZGRlYiwiICAlcyBoPSVkIHc9JWQgZT0lZCBvPSVkIHdnPSVkIGk9JWQgdT0lZCBzPSVkIGNoPSVkIG9wPSVkIGNwPSVkIHE9JWQgcGY9JXhoXG4iLAorCWxmLT5sZkZhY2VOYW1lLGxmLT5sZkhlaWdodCxsZi0+bGZXaWR0aCxsZi0+bGZFc2NhcGVtZW50LGxmLT5sZk9yaWVudGF0aW9uLAorCWxmLT5sZldlaWdodCxsZi0+bGZJdGFsaWMsbGYtPmxmVW5kZXJsaW5lLGxmLT5sZlN0cmlrZU91dCxsZi0+bGZDaGFyU2V0LAorCWxmLT5sZk91dFByZWNpc2lvbixsZi0+bGZDbGlwUHJlY2lzaW9uLGxmLT5sZlF1YWxpdHksbGYtPmxmUGl0Y2hBbmRGYW1pbHkpOworCisjaWYgMSAgICAgICAgIC8qIFZFUlNJT04gQTogdXNlIHNvbWUgcHJlZGVmaW5lZCBoZWlnaHQgdmFsdWVzICovICAgICAgICAgICAgICAgICAgICAgICAKKyAgLyogRklYTUU6IGlmICghKG5Gb250VHlwZSAmIFJBU1RFUl9GT05UVFlQRSkpLi4uLi4uLi4uICovCisgIHsKKyAgICBpbnQgc2l6ZXNbXT17OCw5LDEwLDExLDEyLDE0LDE2LDE4LDIwLDIyLDI0LDI2LDI4LDM2LDQ4LDcyLDB9OyAgCisgICAgaW50IGk7CisgICAgaWYgKCFTZW5kTWVzc2FnZShoY21iMyxDQl9HRVRDT1VOVCwwLDApKSAKKyAgICB7CisgICAgICBpPTA7CisgICAgICB3aGlsZSAoc2l6ZXNbaV0pCisgICAgICB7CisgICAgICAgIHNwcmludGYoYnVmZmVyLCIlM2QiLHNpemVzW2krK10pOworICAgICAgICBqPVNlbmRNZXNzYWdlKGhjbWIzLENCX0FERFNUUklORywwLChMUEFSQU0pTUFLRV9TRUdQVFIoYnVmZmVyKSk7CisgICAgICAgIFNlbmRNZXNzYWdlKGhjbWIzLCBDQl9TRVRJVEVNREFUQSwgaiwgTUFLRUxPTkcoc2l6ZXNbaV0sMCkpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gMDsgCisjZW5kaWYKKworI2lmIDAgICAgICAgIC8qIFZFUlNJT04gQjogdXNlIG9ubHkgbHBsZi0+bGZIZWlnaHQgdmFsdWVzICovCisgIHsKKyAgICBpZiAobHBsZi0+bGZIZWlnaHQpCisgICAgeworICAgICAgc3ByaW50ZihidWZmZXIsIiUzZCIsbHBsZi0+bGZIZWlnaHQpOworICAgICAgaj1TZW5kTWVzc2FnZShoY21iMyxDQl9GSU5EU1RSSU5HLC0xLChMUEFSQU0pTUFLRV9TRUdQVFIoYnVmZmVyKSk7CisgICAgICBpZiAoaj09Q0JfRVJSKQorICAgICAgeworICAgICAgIGo9U2VuZE1lc3NhZ2UoaGNtYjMsQ0JfQUREU1RSSU5HLDAsKExQQVJBTSlNQUtFX1NFR1BUUihidWZmZXIpKTsKKyAgICAgICBTZW5kTWVzc2FnZShoY21iMywgQ0JfU0VUSVRFTURBVEEsIGosIE1BS0VMT05HKGxwbGYtPmxmSGVpZ2h0LGxwbGYtPmxmV2lkdGgpKTsKKyAgICAgIH0gCisgICAgfSAKKyAgfQorICByZXR1cm4gMSA7CisjZW5kaWYgIAorCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ0ZuX1dNSW5pdERpYWxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCisgKi8KK0xSRVNVTFQgQ0ZuX1dNSW5pdERpYWxvZyhIV05EIGhEbGcsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgIEhEQyBoZGM7Ci0gIEZBUlBST0MgIGVudW1DYWxsYmFjazsKLSAgCi0gIHN3aXRjaCAod01zZykgCisgIGludCBpLGoscmVzLGluaXQ9MDsKKyAgbG9uZyBsOworICBjaGFyIGJ1ZmZlclszMl07CisgIEZBUlBST0MgZW51bUNhbGxiYWNrID0gTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCJGb250RmFtaWx5RW51bVByb2MiKTsKKyAgTFBMT0dGT05UIGxweHg7CisgIEhDVVJTT1IgaGN1cnNvcj1TZXRDdXJzb3IoTG9hZEN1cnNvcigwLElEQ19XQUlUKSk7CisgIExQQ0hPT1NFRk9OVCBscGNmOworCisgIFNldFdpbmRvd0xvbmcoaERsZywgRFdMX1VTRVIsIGxQYXJhbSk7IAorICBscGNmPShMUENIT09TRUZPTlQpbFBhcmFtOworICBscHh4PVBUUl9TRUdfVE9fTElOKGxwY2YtPmxwTG9nRm9udCk7CisgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIkZvcm1hdENoYXJEbGdQcm9jIC8vIFdNX0lOSVRESUFMT0cgbFBhcmFtPSUwOGxYXG4iLCBsUGFyYW0pOworCisgIGlmIChscGNmLT5sU3RydWN0U2l6ZSAhPSBzaXplb2YoQ0hPT1NFRk9OVCkpCisgIHsKKyAgICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJXTV9JTklURElBTE9HOiBzdHJ1Y3R1cmUgc2l6ZSBmYWlsdXJlICEhIVxuIik7CisgICAgRW5kRGlhbG9nIChoRGxnLCAwKTsgCisgICAgcmV0dXJuIEZBTFNFOworICB9CisgIGlmICghaEJpdG1hcFRUKQorICAgIGhCaXRtYXBUVCA9IExvYWRCaXRtYXAoMCwgTUFLRUlOVFJFU09VUkNFKE9CTV9UUlRZUEUpKTsKKwkJCSAKKyAgaWYgKCEobHBjZi0+RmxhZ3MgJiBDRl9TSE9XSEVMUCkgfHwgIUlzV2luZG93KGxwY2YtPmh3bmRPd25lcikpCisgICAgU2hvd1dpbmRvdyhHZXREbGdJdGVtKGhEbGcscHNoSGVscCksU1dfSElERSk7CisgIGlmICghKGxwY2YtPkZsYWdzICYgQ0ZfQVBQTFkpKQorICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoRGxnLHBzaDMpLFNXX0hJREUpOworICBpZiAobHBjZi0+RmxhZ3MgJiBDRl9FRkZFQ1RTKQorICB7CisgICAgZm9yIChyZXM9MSxpPTA7cmVzICYmIGk8VEVYVF9DT0xPUlM7aSsrKQogICAgIHsKLSAgICBjYXNlIFdNX0lOSVRESUFMT0c6Ci0gICAgICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJGb3JtYXRDaGFyRGxnUHJvYyAvLyBXTV9JTklURElBTE9HIGxQYXJhbT0lMDhsWFxuIiwgbFBhcmFtKTsKLSAgICAgIFNob3dXaW5kb3coaERsZywgU1dfU0hPV05PUk1BTCk7Ci0gICAgICBoZGMgPSBHZXREQyhoRGxnKTsKLSAgICAgIGlmIChoZGMpCisgICAgICAvKiBGSVhNRTogbG9hZCBjb2xvciBuYW1lIGZyb20gcmVzb3VyY2U6ICByZXM9TG9hZFN0cmluZyguLi4saSsuLi4uLGJ1ZmZlciwuLi4uLik7ICovCisgICAgICBqPVNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjQsQ0JfQUREU1RSSU5HLDAsKExQQVJBTSlNQUtFX1NFR1BUUigiW2NvbG9yIG5hbWVdIikpOworICAgICAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iNCwgQ0JfU0VUSVRFTURBVEEsaix0ZXh0Y29sb3JzW2pdKTsKKyAgICAgIC8qIGxvb2sgZm9yIGEgZml0dGluZyB2YWx1ZSBpbiBjb2xvciBjb21ib2JveCAqLworICAgICAgaWYgKHRleHRjb2xvcnNbal09PWxwY2YtPnJnYkNvbG9ycykKKyAgICAgICAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iNCwgQ0JfU0VUQ1VSU0VMLGosMCk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoRGxnLGNtYjQpLFNXX0hJREUpOworICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoRGxnLGNoeDEpLFNXX0hJREUpOworICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoRGxnLGNoeDIpLFNXX0hJREUpOworICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoRGxnLGdycDEpLFNXX0hJREUpOworICAgIFNob3dXaW5kb3coR2V0RGxnSXRlbShoRGxnLHN0YzQpLFNXX0hJREUpOworICB9CisgIAorICAvKiBwZXJoYXBzIHRoaXMgc3R1ZmYgc2hvdWxkIGJlIG1vdmVkIHRvIEZvbnRTdHlsZUVudW1Qcm9jKCkgPz8gKi8KKyAgc3RyY3B5KGJ1ZmZlciwiUmVndWxhciIpOyAJLyogTG9hZFN0cmluZyhoSW5zdCwuLi4uICxidWZmZXIsTEZfRkFDRVNJWkUpOyovCisgIGo9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMixDQl9BRERTVFJJTkcsMCwoTFBBUkFNKU1BS0VfU0VHUFRSKGJ1ZmZlcikpOworICBTZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIyLCBDQl9TRVRJVEVNREFUQSwgaiwgTUFLRUxPTkcoRldfTk9STUFMLDApKTsKKyAgc3RyY3B5KGJ1ZmZlciwiQm9sZCIpOyAgICAgICAJLyogTG9hZFN0cmluZyhoSW5zdCwuLi4uICxidWZmZXIsTEZfRkFDRVNJWkUpOyovCisgIGo9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMixDQl9BRERTVFJJTkcsMCwoTFBBUkFNKU1BS0VfU0VHUFRSKGJ1ZmZlcikpOworICBTZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIyLCBDQl9TRVRJVEVNREFUQSwgaiwgTUFLRUxPTkcoRldfQk9MRCwwKSk7CisgIHN0cmNweShidWZmZXIsIkl0YWxpYyIpOwkvKiBMb2FkU3RyaW5nKGhJbnN0LC4uLi4gLGJ1ZmZlcixMRl9GQUNFU0laRSk7Ki8KKyAgaj1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIyLENCX0FERFNUUklORywwLChMUEFSQU0pTUFLRV9TRUdQVFIoYnVmZmVyKSk7CisgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjIsIENCX1NFVElURU1EQVRBLCBqLCBNQUtFTE9ORyhGV19OT1JNQUwsMSkpOworICBzdHJjcHkoYnVmZmVyLCJCb2xkIEl0YWxpYyIpOwkvKiBMb2FkU3RyaW5nKGhJbnN0LC4uLi4gLGJ1ZmZlcixMRl9GQUNFU0laRSk7Ki8KKyAgaj1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIyLENCX0FERFNUUklORywwLChMUEFSQU0pTUFLRV9TRUdQVFIoYnVmZmVyKSk7CisgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjIsIENCX1NFVElURU1EQVRBLCBqLCBNQUtFTE9ORyhGV19CT0xELDEpKTsKKyAgCisgIGhkYz0gKGxwY2YtPkZsYWdzICYgQ0ZfUFJJTlRFUkZPTlRTICYmIGxwY2YtPmhEQykgPyBscGNmLT5oREMgOiBHZXREQyhoRGxnKTsKKyAgaWYgKGhkYykKKyAgeworICAgIGlmICghRW51bUZvbnRGYW1pbGllcyAoaGRjLCBOVUxMLGVudW1DYWxsYmFjaywoTFBBUkFNKUdldERsZ0l0ZW0oaERsZyxjbWIxKSkpCisgICAgICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJXTV9JTklURElBTE9HOiBFbnVtRm9udEZhbWlsaWVzIHJldHVybnMgMFxuIik7CisgICAgaWYgKGxwY2YtPkZsYWdzICYgQ0ZfSU5JVFRPTE9HRk9OVFNUUlVDVCkKKyAgICB7CisgICAgICAvKiBsb29rIGZvciBmaXR0aW5nIGZvbnQgbmFtZSBpbiBjb21ib2JveDEgKi8KKyAgICAgIGo9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMSxDQl9GSU5EU1RSSU5HLC0xLChMT05HKWxweHgtPmxmRmFjZU5hbWUpOworICAgICAgaWYgKGohPUNCX0VSUikKICAgICAgIHsKLSAgICAgICBIQ1VSU09SIGhjdXJzb3I9U2V0Q3Vyc29yKExvYWRDdXJzb3IoMCxJRENfV0FJVCkpOwotICAgICAgIC8qICAKLSAgICAgICAgIGN1cnJlbnRseSBvbmx5IGNhbGxlZCBmb3IgdGVzdGluZyBvZiAyIG5lY2Vzc2FyeSBFbnVtUHJvY3MgCi0gICAgICAgKi8KLSAgICAgICBlbnVtQ2FsbGJhY2sgPSBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoIkZvbnRGYW1pbHlFbnVtUHJvYyIpOwotICAgICAgIEVudW1Gb250RmFtaWxpZXMgKGhkYywgTlVMTCxlbnVtQ2FsbGJhY2sgLE5VTEwpOyAKLSAgICAgICBlbnVtQ2FsbGJhY2sgPSBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoIkZvbnRTdHlsZUVudW1Qcm9jIik7Ci0gICAgICAgRW51bUZvbnRGYW1pbGllcyhoZGMsIC8qIGZvciBleGFtcGxlIDogKi8gIkNPVVJJRVIiLGVudW1DYWxsYmFjayxOVUxMKTsKLSAgICAgICBSZWxlYXNlREMoaERsZyxoZGMpOwotICAgICAgIFNldEN1cnNvcihoY3Vyc29yKTsKKyAgICAgICAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMSxDQl9TRVRDVVJTRUwsaiwwKTsKKwlTZW5kTWVzc2FnZShoRGxnLFdNX0NPTU1BTkQsY21iMSxNQUtFTE9ORyhHZXREbGdJdGVtKGhEbGcsY21iMSksQ0JOX1NFTENIQU5HRSkpOworICAgICAgICBpbml0PTE7CisgICAgICAgIC8qIGxvb2sgZm9yIGZpdHRpbmcgZm9udCBzdHlsZSBpbiBjb21ib2JveDIgKi8KKyAgICAgICAgbD1NQUtFTE9ORyhscHh4LT5sZldlaWdodCA+IEZXX01FRElVTSA/IEZXX0JPTEQ6RldfTk9STUFMLGxweHgtPmxmSXRhbGljICE9MCk7CisgICAgICAgIGZvciAoaT0wO2k8VEVYVF9FWFRSQVM7aSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGw9PVNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjIsIENCX0dFVElURU1EQVRBLGksMCkpCisgICAgICAgICAgICBTZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIyLENCX1NFVENVUlNFTCxpLDApOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgLyogbG9vayBmb3IgZml0dGluZyBmb250IHNpemUgaW4gY29tYm9ib3gzICovCisgICAgICAgIGo9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMyxDQl9HRVRDT1VOVCwwLDApOworICAgICAgICBmb3IgKGk9MDtpPGo7aSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGxweHgtPmxmSGVpZ2h0PT0oaW50KVNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjMsIENCX0dFVElURU1EQVRBLGksMCkpCisgICAgICAgICAgICBTZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIzLENCX1NFVENVUlNFTCxpLDApOworICAgICAgICB9CiAgICAgICB9Ci0gICAgICByZXR1cm4gKFRSVUUpOwotICAgIGNhc2UgV01fQ09NTUFORDoKLSAgICAgIHN3aXRjaCAod1BhcmFtKQotCXsKLQljYXNlIElET0s6Ci0JICBFbmREaWFsb2coaERsZywgVFJVRSk7Ci0JICByZXR1cm4oVFJVRSk7Ci0JY2FzZSBJRENBTkNFTDoKLQkgIEVuZERpYWxvZyhoRGxnLCBGQUxTRSk7Ci0JICByZXR1cm4oVFJVRSk7CisgICAgICBpZiAoIWluaXQpCisgICAgICB7CisgICAgICAgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjEsQ0JfU0VUQ1VSU0VMLDAsMCk7CisJU2VuZE1lc3NhZ2UoaERsZyxXTV9DT01NQU5ELGNtYjEsTUFLRUxPTkcoR2V0RGxnSXRlbShoRGxnLGNtYjEpLENCTl9TRUxDSEFOR0UpKTsgICAgICAKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGxwY2YtPkZsYWdzICYgQ0ZfVVNFU1RZTEUgJiYgbHBjZi0+bHBzelN0eWxlKQorICAgIHsKKyAgICAgIGo9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMixDQl9GSU5EU1RSSU5HLC0xLChMT05HKWxwY2YtPmxwc3pTdHlsZSk7CisgICAgICBpZiAoaiE9Q0JfRVJSKQorICAgICAgeworICAgICAgICBqPVNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjIsQ0JfU0VUQ1VSU0VMLGosMCk7CisgICAgICAgIFNlbmRNZXNzYWdlKGhEbGcsV01fQ09NTUFORCxjbWIyLE1BS0VMT05HKEdldERsZ0l0ZW0oaERsZyxjbWIyKSxDQk5fU0VMQ0hBTkdFKSk7CisgICAgICB9CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0lOSVRESUFMT0c6IEhEQyBmYWlsdXJlICEhIVxuIik7CisgICAgRW5kRGlhbG9nIChoRGxnLCAwKTsgCisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKCEobHBjZi0+RmxhZ3MgJiBDRl9QUklOVEVSRk9OVFMgJiYgbHBjZi0+aERDKSkKKyAgICBSZWxlYXNlREMoaERsZyxoZGMpOworICByZXM9VFJVRTsKKyAgaWYgKENGbl9Ib29rQ2FsbENoayhscGNmKSkKKyAgICByZXM9Q2FsbFdpbmRvd1Byb2MobHBjZi0+bHBmbkhvb2ssaERsZyxXTV9JTklURElBTE9HLHdQYXJhbSxsUGFyYW0pOworICBTZXRDdXJzb3IoaGN1cnNvcik7ICAgCisgIHJldHVybiByZXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ0ZuX1dNTWVhc3VyZUl0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50ZXJuYWxdCisgKi8KK0xSRVNVTFQgQ0ZuX1dNTWVhc3VyZUl0ZW0oSFdORCBoRGxnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICBCSVRNQVAgYm07CisgIExQTUVBU1VSRUlURU1TVFJVQ1QgbHBtaT1QVFJfU0VHX1RPX0xJTigoTFBNRUFTVVJFSVRFTVNUUlVDVClsUGFyYW0pOworICBpZiAoIWhCaXRtYXBUVCkKKyAgICBoQml0bWFwVFQgPSBMb2FkQml0bWFwKDAsIE1BS0VJTlRSRVNPVVJDRShPQk1fVFJUWVBFKSk7CisgIEdldE9iamVjdChoQml0bWFwVFQsIHNpemVvZihCSVRNQVApLCAoTFBTVFIpJmJtKTsKKyAgbHBtaS0+aXRlbUhlaWdodD1ibS5ibUhlaWdodDsKKyAgLyogRklYTUU6IHVzZSBNQVggb2YgYm0uYm1IZWlnaHQgYW5kIHRtLnRtSGVpZ2h0IC4qLworICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDRm5fV01EcmF3SXRlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KKyAqLworTFJFU1VMVCBDRm5fV01EcmF3SXRlbShIV05EIGhEbGcsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgIEhCUlVTSCBoQnJ1c2g7CisgIGNoYXIgYnVmZmVyWzQwXTsKKyAgQklUTUFQIGJtOworICBDT0xPUlJFRiBjcjsKKyAgUkVDVCByZWN0OworI2lmIDAgIAorICBIREMgaE1lbURDOworICBpbnQgbkZvbnRUeXBlOworICBIQklUTUFQIGhCaXRtYXA7IC8qIGZvciBsYXRlciBUVCB1c2FnZSAqLworI2VuZGlmICAKKyAgTFBEUkFXSVRFTVNUUlVDVCBscGRpID0gKExQRFJBV0lURU1TVFJVQ1QpUFRSX1NFR19UT19MSU4obFBhcmFtKTsKKworICBpZiAobHBkaS0+aXRlbUlEID09IDB4RkZGRikgCQkJLyogZ290IG5vIGl0ZW1zICovCisgICAgRHJhd0ZvY3VzUmVjdChscGRpLT5oREMsICZscGRpLT5yY0l0ZW0pOworICBlbHNlCisgIHsKKyAgIGlmIChscGRpLT5DdGxUeXBlID09IE9EVF9DT01CT0JPWCkKKyAgIHsKKyAgICAgaEJydXNoID0gU2VsZWN0T2JqZWN0KGxwZGktPmhEQywgR2V0U3RvY2tPYmplY3QoTFRHUkFZX0JSVVNIKSk7CisgICAgIFNlbGVjdE9iamVjdChscGRpLT5oREMsIGhCcnVzaCk7CisgICAgIEZpbGxSZWN0KGxwZGktPmhEQywgJmxwZGktPnJjSXRlbSwgaEJydXNoKTsKKyAgIH0KKyAgIGVsc2UKKyAgICAgcmV0dXJuIFRSVUU7CS8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCisgICByZWN0PWxwZGktPnJjSXRlbTsKKyAgIHN3aXRjaCAobHBkaS0+Q3RsSUQpCisgICB7CisgICAgY2FzZSBjbWIxOgkvKiBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJXTV9EcmF3aXRlbSBjbWIxXG4iKTsgKi8KKwkJU2VuZE1lc3NhZ2UobHBkaS0+aHduZEl0ZW0sIENCX0dFVExCVEVYVCwgbHBkaS0+aXRlbUlELAorCQkJKExQQVJBTSlNQUtFX1NFR1BUUihidWZmZXIpKTsJICAgICAgICAgIAorCQlHZXRPYmplY3QoaEJpdG1hcFRULCBzaXplb2YoQklUTUFQKSwgKExQU1RSKSZibSk7CisJCVRleHRPdXQobHBkaS0+aERDLCBscGRpLT5yY0l0ZW0ubGVmdCArIGJtLmJtV2lkdGggKyAxMCwKKwkJCWxwZGktPnJjSXRlbS50b3AsIGJ1ZmZlciwgbHN0cmxlbihidWZmZXIpKTsKKyNpZiAwCisJCW5Gb250VHlwZSA9IFNlbmRNZXNzYWdlKGxwZGktPmh3bmRJdGVtLCBDQl9HRVRJVEVNREFUQSwgbHBkaS0+aXRlbUlELDBMKTsKKwkJICAvKiBGSVhNRTogZHJhdyBiaXRtYXAgaWYgdHJ1ZXR5cGUgdXNhZ2UgKi8KKwkJaWYgKG5Gb250VHlwZSZUUlVFVFlQRV9GT05UVFlQRSkKKwkJeworCQkgIGhNZW1EQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhscGRpLT5oREMpOworCQkgIGhCaXRtYXAgPSBTZWxlY3RPYmplY3QoaE1lbURDLCBoQml0bWFwVFQpOworCQkgIEJpdEJsdChscGRpLT5oREMsIGxwZGktPnJjSXRlbS5sZWZ0LCBscGRpLT5yY0l0ZW0udG9wLAorCQkJYm0uYm1XaWR0aCwgYm0uYm1IZWlnaHQsIGhNZW1EQywgMCwgMCwgU1JDQ09QWSk7CisJCSAgU2VsZWN0T2JqZWN0KGhNZW1EQywgaEJpdG1hcCk7CisJCSAgRGVsZXRlREMoaE1lbURDKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworICAgIGNhc2UgY21iMjoKKyAgICBjYXNlIGNtYjM6CS8qIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0RSQVdJVEVOIGNtYjIsY21iM1xuIik7ICovCisJCVNlbmRNZXNzYWdlKGxwZGktPmh3bmRJdGVtLCBDQl9HRVRMQlRFWFQsIGxwZGktPml0ZW1JRCwKKwkJCShMUEFSQU0pTUFLRV9TRUdQVFIoYnVmZmVyKSk7CisJCVRleHRPdXQobHBkaS0+aERDLCBscGRpLT5yY0l0ZW0ubGVmdCwKKwkJCWxwZGktPnJjSXRlbS50b3AsIGJ1ZmZlciwgbHN0cmxlbihidWZmZXIpKTsKKwkJYnJlYWs7CisKKyAgICBjYXNlIGNtYjQ6CS8qIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0RSQVdJVEVNIGNtYjQgKD1DT0xPUilcbiIpOyAqLworCQlTZW5kTWVzc2FnZShscGRpLT5od25kSXRlbSwgQ0JfR0VUTEJURVhULCBscGRpLT5pdGVtSUQsCisgICAgCQkgICAgKExQQVJBTSlNQUtFX1NFR1BUUihidWZmZXIpKTsKKwkJVGV4dE91dChscGRpLT5oREMsIGxwZGktPnJjSXRlbS5sZWZ0ICsgIDI1KzUsCisJCQlscGRpLT5yY0l0ZW0udG9wLCBidWZmZXIsIGxzdHJsZW4oYnVmZmVyKSk7CisJCWNyID0gU2VuZE1lc3NhZ2UobHBkaS0+aHduZEl0ZW0sIENCX0dFVElURU1EQVRBLCBscGRpLT5pdGVtSUQsMEwpOworCQloQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoKGNyKTsKKwkJaWYgKGhCcnVzaCkKKwkJeworCQkgIGhCcnVzaCA9IFNlbGVjdE9iamVjdCAobHBkaS0+aERDLCBoQnJ1c2gpIDsKKwkJICByZWN0LnJpZ2h0PXJlY3QubGVmdCsyNTsKKwkJICByZWN0LnRvcCsrOworCQkgIHJlY3QubGVmdCs9NTsKKwkJICByZWN0LmJvdHRvbS0tOworCQkgIFJlY3RhbmdsZShscGRpLT5oREMscmVjdC5sZWZ0LHJlY3QudG9wLHJlY3QucmlnaHQscmVjdC5ib3R0b20pOworCQkgIERlbGV0ZU9iamVjdCAoU2VsZWN0T2JqZWN0IChscGRpLT5oREMsIGhCcnVzaCkpIDsKKwkJfQorCQlyZWN0PWxwZGktPnJjSXRlbTsKKwkJcmVjdC5sZWZ0Kz0yNSs1OworCQlicmVhazsKKworICAgIGRlZmF1bHQ6CXJldHVybiBUUlVFOwkvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKyAgIH0KKyAgIGlmIChscGRpLT5pdGVtU3RhdGUgPT1PRFNfU0VMRUNURUQpCisgICAgIEludmVydFJlY3QobHBkaS0+aERDLCAmcmVjdCk7CisgfQorIHJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDRm5fV01DdGxDb2xvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KKyAqLworTFJFU1VMVCBDRm5fV01DdGxDb2xvcihIV05EIGhEbGcsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgIExQQ0hPT1NFRk9OVCBscGNmPShMUENIT09TRUZPTlQpR2V0V2luZG93TG9uZyhoRGxnLCBEV0xfVVNFUik7IAorCisgIGlmIChscGNmLT5GbGFncyAmIENGX0VGRkVDVFMpCisgICBpZiAoSElXT1JEKGxQYXJhbSk9PUNUTENPTE9SX1NUQVRJQyAmJiBHZXREbGdDdHJsSUQoTE9XT1JEKGxQYXJhbSkpPT1zdGM2KQorICAgeworICAgICBTZXRUZXh0Q29sb3Iod1BhcmFtLGxwY2YtPnJnYkNvbG9ycyk7CisgICAgIHJldHVybiBHZXRTdG9ja09iamVjdChXSElURV9CUlVTSCk7CisgICB9CisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDRm5fV01Db21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnRlcm5hbF0KKyAqLworTFJFU1VMVCBDRm5fV01Db21tYW5kKEhXTkQgaERsZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgY2hhciBidWZmZXJbMjAwXTsKKyAgRkFSUFJPQyBlbnVtQ2FsbGJhY2s7CisgIEhGT05UIGhGb250LyosaEZvbnRPbGQqLzsKKyAgaW50IGksajsKKyAgbG9uZyBsOworICBIREMgaGRjOworICBMUENIT09TRUZPTlQgbHBjZj0oTFBDSE9PU0VGT05UKUdldFdpbmRvd0xvbmcoaERsZywgRFdMX1VTRVIpOyAKKyAgTFBMT0dGT05UIGxweHg9UFRSX1NFR19UT19MSU4obHBjZi0+bHBMb2dGb250KTsKKyAgCisgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIkZvcm1hdENoYXJEbGdQcm9jIC8vIFdNX0NPTU1BTkQgbFBhcmFtPSUwOGxYXG4iLCBsUGFyYW0pOworICBzd2l0Y2ggKHdQYXJhbSkKKyAgeworCWNhc2UgY21iMTppZiAoSElXT1JEKGxQYXJhbSk9PUNCTl9TRUxDSEFOR0UpCisJCSAgeworCQkgICAgaGRjPShscGNmLT5GbGFncyAmIENGX1BSSU5URVJGT05UUyAmJiBscGNmLT5oREMpID8gbHBjZi0+aERDIDogR2V0REMoaERsZyk7CisJCSAgICBpZiAoaGRjKQorCQkgICAgeworCQkgICAgICAvKiBvbmx5IGlmIGNtYjIgaXMgcmVmaWxsZWQgaW4gIEZvbnRTdHlsZUVudW1Qcm9jKCk6CisgICAgICAgCQkgICAgICAgICAgICAgICAgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjIsQ0JfUkVTRVRDT05URU5ULDAsMCk7IAorCQkgICAgICAgKi8KKwkJICAgICAgU2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMyxDQl9SRVNFVENPTlRFTlQsMCwwKTsKKwkJICAgICAgaT1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIxLENCX0dFVENVUlNFTCwwLDApOworCQkgICAgICBpZiAoaSE9Q0JfRVJSKQorCQkgICAgICB7CisJCSAgICAgICAgSENVUlNPUiBoY3Vyc29yPVNldEN1cnNvcihMb2FkQ3Vyc29yKDAsSURDX1dBSVQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjEsQ0JfR0VUTEJURVhULGksKExQQVJBTSlNQUtFX1NFR1BUUihidWZmZXIpKTsKKwkgICAgICAgICAgICAgICAgZHByaW50Zl9jb21tZGxnKHN0ZGRlYiwiV01fQ09NTUFORC9jbWIxID0+JXNcbiIsYnVmZmVyKTsKKwkJICAgICAgICBlbnVtQ2FsbGJhY2sgPSBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoIkZvbnRTdHlsZUVudW1Qcm9jIik7CisgICAgICAgCQkgICAgICAgIEVudW1Gb250RmFtaWxpZXMoaGRjLGJ1ZmZlcixlbnVtQ2FsbGJhY2ssCisJCSAgICAgICAgICAgICBNQUtFTE9ORyhHZXREbGdJdGVtKGhEbGcsY21iMiksR2V0RGxnSXRlbShoRGxnLGNtYjMpKSk7CisJCSAgICAgICAgU2V0Q3Vyc29yKGhjdXJzb3IpOyAgICAgICAgCisJCSAgICAgIH0KKwkJICAgICAgaWYgKCEobHBjZi0+RmxhZ3MgJiBDRl9QUklOVEVSRk9OVFMgJiYgbHBjZi0+aERDKSkKKyAJCSAgICAgICAgUmVsZWFzZURDKGhEbGcsaGRjKTsKKyAJCSAgICB9CisgCQkgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgZHByaW50Zl9jb21tZGxnKHN0ZGRlYiwiV01fQ09NTUFORDogSERDIGZhaWx1cmUgISEhXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICBFbmREaWFsb2cgKGhEbGcsIDApOyAKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICB9CisJY2FzZSBjaHgxOgorCWNhc2UgY2h4MjoKKwljYXNlIGNtYjI6CisJY2FzZSBjbWIzOmlmIChISVdPUkQobFBhcmFtKT09Q0JOX1NFTENIQU5HRSB8fCBISVdPUkQobFBhcmFtKT09IEJOX0NMSUNLRUQgKQorCSAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRwcmludGZfY29tbWRsZyhzdGRkZWIsIldNX0NPTU1BTkQvY21iMiwzID0lMDhsWFxuIiwgbFBhcmFtKTsKKwkJICAgIGk9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMSxDQl9HRVRDVVJTRUwsMCwwKTsKKwkJICAgIGlmIChpPT1DQl9FUlIpCisgICAgICAgICAgICAgICAgICAgICAgaT1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIxLFdNX0dFVFRFWFQsMjAsKExQQVJBTSlNQUtFX1NFR1BUUihidWZmZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisJCSAgICAgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjEsQ0JfR0VUTEJURVhULGksKExQQVJBTSlNQUtFX1NFR1BUUihidWZmZXIpKTsKKwkJICAgICAgbD1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIxLENCX0dFVElURU1EQVRBLGksMCk7CisJCSAgICAgIGo9SElXT1JEKGwpOworCQkgICAgICBscGNmLT5uRm9udFR5cGUgPSBMT1dPUkQobCk7CisJCSAgICAgIC8qIEZJWE1FOiAgIGxwY2YtPm5Gb250VHlwZSB8PSAuLi4uICBTSU1VTEFURURfRk9OVFRZUEUgYW5kIHNvICovCisJCSAgICAgIC8qIHNhbWUgdmFsdWUgcmVwb3J0ZWQgdG8gdGhlIEVudW1Gb250cworCQkgICAgICAgY2FsbCBiYWNrIHdpdGggdGhlIGV4dHJhIEZPTlRUWVBFXy4uLiAgYml0cyBhZGRlZCAqLworCQkgICAgICBscHh4LT5sZlBpdGNoQW5kRmFtaWx5PWomMHhmZjsKKwkJICAgICAgbHB4eC0+bGZDaGFyU2V0PWo+Pjg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGxweHgtPmxmRmFjZU5hbWUsYnVmZmVyKTsKKwkJICAgIGk9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMixDQl9HRVRDVVJTRUwsMCwwKTsKKwkJICAgIGlmIChpIT1DQl9FUlIpCisJCSAgICB7CisJCSAgICAgIGw9U2VuZERsZ0l0ZW1NZXNzYWdlKGhEbGcsY21iMixDQl9HRVRJVEVNREFUQSxpLDApOworCQkgICAgICBpZiAoMCE9KGxweHgtPmxmSXRhbGljPUhJV09SRChsKSkpCisJCSAgICAgICAgbHBjZi0+bkZvbnRUeXBlIHw9IElUQUxJQ19GT05UVFlQRTsKKwkJICAgICAgaWYgKChscHh4LT5sZldlaWdodD1MT1dPUkQobCkpID4gRldfTUVESVVNKQorCQkgICAgICAgIGxwY2YtPm5Gb250VHlwZSB8PSBCT0xEX0ZPTlRUWVBFOworCQkgICAgfQorCQkgICAgaT1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIzLENCX0dFVENVUlNFTCwwLDApOworCQkgICAgaWYgKGkhPUNCX0VSUikKKwkJICAgIHsKKwkJICAgICAgbD1TZW5kRGxnSXRlbU1lc3NhZ2UoaERsZyxjbWIzLENCX0dFVElURU1EQVRBLGksMCk7CisJCSAgICAgIGxweHgtPmxmSGVpZ2h0PS1MT1dPUkQobCk7CisJCSAgICAgIGxweHgtPmxmV2lkdGggPSAwOyAgLyogRllJOiBsZldpZHRoIGlzIGluIEhJV09SRChsKTsgKi8KKwkJICAgIH0KKwkJICAgIGxweHgtPmxmU3RyaWtlT3V0PUlzRGxnQnV0dG9uQ2hlY2tlZChoRGxnLGNoeDEpOworCQkgICAgbHB4eC0+bGZVbmRlcmxpbmU9SXNEbGdCdXR0b25DaGVja2VkKGhEbGcsY2h4Mik7CisJCSAgICBscHh4LT5sZk9yaWVudGF0aW9uPWxweHgtPmxmRXNjYXBlbWVudD0wOworCQkgICAgbHB4eC0+bGZPdXRQcmVjaXNpb249T1VUX0RFRkFVTFRfUFJFQ0lTOworCQkgICAgbHB4eC0+bGZDbGlwUHJlY2lzaW9uPUNMSVBfREVGQVVMVF9QUkVDSVM7CisJCSAgICBscHh4LT5sZlF1YWxpdHk9REVGQVVMVF9RVUFMSVRZOworCisJCSAgICBoRm9udD1DcmVhdGVGb250SW5kaXJlY3QobHB4eCk7CisJCSAgICBpZiAoaEZvbnQpCisJCSAgICAgIFNlbmREbGdJdGVtTWVzc2FnZShoRGxnLHN0YzYsV01fU0VURk9OVCxoRm9udCxUUlVFKTsKKwkJICAgIC8qIEZJWE1FOiBEZWxldGUgb2xkIGZvbnQgLi4uPyAqLyAgCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKworCWNhc2UgY21iNDppPVNlbmREbGdJdGVtTWVzc2FnZShoRGxnLGNtYjQsQ0JfR0VUQ1VSU0VMLDAsMCk7CisJCSAgaWYgKGkhPUNCX0VSUikKKwkJICB7CisJCSAgIGxwY2YtPnJnYkNvbG9ycz10ZXh0Y29sb3JzW2ldOworCQkgICBJbnZhbGlkYXRlUmVjdChHZXREbGdJdGVtKGhEbGcsc3RjNiksTlVMTCwwKTsKKwkJICB9CisJCSAgYnJlYWs7CisJCisJY2FzZSBwc2gxNTppPVJlZ2lzdGVyV2luZG93TWVzc2FnZShNQUtFX1NFR1BUUihIRUxQTVNHU1RSSU5HKSk7CisJCSAgaWYgKGxwY2YtPmh3bmRPd25lcikKKwkJICAgIFNlbmRNZXNzYWdlKGxwY2YtPmh3bmRPd25lcixpLDAsKExQQVJBTSlscGNmKTsKKwkJICBpZiAoQ0ZuX0hvb2tDYWxsQ2hrKGxwY2YpKQorCQkgICAgQ2FsbFdpbmRvd1Byb2MobHBjZi0+bHBmbkhvb2ssaERsZyxXTV9DT01NQU5ELHBzaDE1LChMUEFSQU0pbHBjZik7CisJCSAgYnJlYWs7CisKKwljYXNlIElET0s6RW5kRGlhbG9nKGhEbGcsIFRSVUUpOworCQkgIHJldHVybihUUlVFKTsKKwljYXNlIElEQ0FOQ0VMOkVuZERpYWxvZyhoRGxnLCBGQUxTRSk7CisJCSAgcmV0dXJuKFRSVUUpOwogCX0KICAgICAgIHJldHVybihGQUxTRSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRm9ybWF0Q2hhckRsZ1Byb2MgICAoQ09NTURMRy4xNikKKyAgICAgICAgICAgICBGSVhNRTogMS4gc29tZSBzdHJpbmdzIGFyZSAiaGFyZGNvZGVkIiwgYnV0IGl0J3MgYmV0dGVyIGxvYWQgZnJvbSBzeXNyZXMKKyAgICAgICAgICAgICAgICAgICAgMi4gc29tZSBDRl8uLiBmbGFncyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAzLiBzb21lIFRUeXBlIGV4dGVuc2lvbnMKKyAqLworTFJFU1VMVCBGb3JtYXRDaGFyRGxnUHJvYyhIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgTFBDSE9PU0VGT05UIGxwY2Y9KExQQ0hPT1NFRk9OVClHZXRXaW5kb3dMb25nKGhEbGcsIERXTF9VU0VSKTsgIAorICBpZiAobWVzc2FnZSE9V01fSU5JVERJQUxPRykKKyAgeworICAgaW50IHJlcz0wOworICAgaWYgKCFscGNmKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgaWYgKENGbl9Ib29rQ2FsbENoayhscGNmKSkKKyAgICAgcmVzPUNhbGxXaW5kb3dQcm9jKGxwY2YtPmxwZm5Ib29rLGhEbGcsbWVzc2FnZSx3UGFyYW0sbFBhcmFtKTsKKyAgIGlmIChyZXMpCisgICAgcmV0dXJuIHJlczsKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIENGbl9XTUluaXREaWFsb2coaERsZyx3UGFyYW0sbFBhcmFtKTsKKyAgc3dpdGNoIChtZXNzYWdlKQorICAgIHsKKyAgICAgIGNhc2UgV01fTUVBU1VSRUlURU06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZuX1dNTWVhc3VyZUl0ZW0oaERsZyx3UGFyYW0sbFBhcmFtKTsKKyAgICAgIGNhc2UgV01fRFJBV0lURU06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZuX1dNRHJhd0l0ZW0oaERsZyx3UGFyYW0sbFBhcmFtKTsKKyAgICAgIGNhc2UgV01fQ1RMQ09MT1I6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZuX1dNQ3RsQ29sb3IoaERsZyx3UGFyYW0sbFBhcmFtKTsKKyAgICAgIGNhc2UgV01fQ09NTUFORDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDRm5fV01Db21tYW5kKGhEbGcsd1BhcmFtLGxQYXJhbSk7CisgICAgICBjYXNlIFdNX0NIT09TRUZPTlRfR0VUTE9HRk9OVDogCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBGSVhNRTogIGN1cnJlbnQgbG9nZm9udCBiYWNrIHRvIGNhbGxlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICByZXR1cm4gRkFMU0U7CiB9CmRpZmYgLS1naXQgYS9taXNjL2NvbXBvYmouYyBiL21pc2MvY29tcG9iai5jCmluZGV4IDAyNmI2ODEuLjEwNmFhZWQgMTAwNjQ0Ci0tLSBhL21pc2MvY29tcG9iai5jCisrKyBiL21pc2MvY29tcG9iai5jCkBAIC0xOSw3ICsxOSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDb0J1aWxkVmVyc2lvbiBbQ09NUE9CSi4xXQogICovCi1EV09SRCBXSU5BUEkgQ29CdWlsZFZlcnNpb24oKQorRFdPUkQgQ29CdWlsZFZlcnNpb24oKQogewogCWRwcmludGZfb2xlKHN0ZGRlYiwiQ29CdWlsZFZlcnNpb24oKVxuIik7CiAJcmV0dXJuIChybW08PDE2KStydXA7CkBAIC0yOSw3ICsyOSw3IEBACiAgKiAgICAgICAgICAgQ29Jbml0aWFsaXplCVtDT01QT0JKLjJdCiAgKiBscFJlc2VydmVkIGlzIGFuIElNYWxsb2MgcG9pbnRlciBpbiAxNmJpdCBPTEUuIFdlIGp1c3Qgc3RvcmVkIGl0IGFzLWlzLgogICovCi1IUkVTVUxUIFdJTkFQSSBDb0luaXRpYWxpemUoRFdPUkQgbHBSZXNlcnZlZCkKK0hSRVNVTFQgQ29Jbml0aWFsaXplKERXT1JEIGxwUmVzZXJ2ZWQpCiB7CiAJZHByaW50Zl9vbGUoc3RkbmltcCwiQ29Jbml0aWFsaXplXG4iKTsKIAkvKiByZW1lbWJlciB0aGUgTFBNQUxMT0MsIG1heWJlIHNvbWVib2R5IHdhbnRzIHRvIHJlYWQgaXQgbGF0ZXIgb24gKi8KQEAgLTQ4LDcgKzQ4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENvR2V0TWFsbG9jICAgIFtDT01QT0JKLjRdCiAgKi8KLUhSRVNVTFQgV0lOQVBJIENvR2V0TWFsbG9jKERXT1JEIGR3TWVtQ29udGV4dCwgRFdPUkQgKiBscE1hbGxvYykKK0hSRVNVTFQgQ29HZXRNYWxsb2MoRFdPUkQgZHdNZW1Db250ZXh0LCBEV09SRCAqIGxwTWFsbG9jKQogewogCWlmKGN1cnJlbnRNYWxsb2MpCiAJewpAQCAtNjMsOSArNjMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ29EaXNjb25uZWN0T2JqZWN0CiAgKi8KLU9MRVNUQVRVUyBXSU5BUEkgQ29EaXNjb25uZWN0T2JqZWN0KAotCUxQVU5LTk9XTiBscFVuaywKLQlEV09SRCByZXNlcnZlZCkKK09MRVNUQVRVUyBDb0Rpc2Nvbm5lY3RPYmplY3QoIExQVU5LTk9XTiBscFVuaywgRFdPUkQgcmVzZXJ2ZWQgKQogewogICAgIGRwcmludGZfb2xlKHN0ZG5pbXAsIkNvRGlzY29ubmVjdE9iamVjdDolcCAlbHhcbiIsbHBVbmsscmVzZXJ2ZWQpOwogICAgIHJldHVybiBPTEVfT0s7CmRpZmYgLS1naXQgYS9taXNjL2RyaXZlci5jIGIvbWlzYy9kcml2ZXIuYwppbmRleCA3ZjlmOTUxLi5lYjUxYmE5IDEwMDY0NAotLS0gYS9taXNjL2RyaXZlci5jCisrKyBiL21pc2MvZHJpdmVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJU2VuZERyaXZlck1lc3NhZ2UJCVtVU0VSLjI1MV0KICAqLwotTFJFU1VMVCBXSU5BUEkgU2VuZERyaXZlck1lc3NhZ2UoSERSVlIgaERyaXZlciwgV09SRCBtc2csIExQQVJBTSBsUGFyYW0xLCBMUEFSQU0gbFBhcmFtMikKK0xSRVNVTFQgU2VuZERyaXZlck1lc3NhZ2UoSERSVlIgaERyaXZlciwgV09SRCBtc2csIExQQVJBTSBsUGFyYW0xLCBMUEFSQU0gbFBhcmFtMikKIHsKIAlkcHJpbnRmX2RyaXZlcihzdGRuaW1wLCJTZW5kRHJpdmVyTWVzc2FnZSglMDR4LCAlMDRYLCAlMDhsWCwgJTA4bFgpO1xuIiwKIAkJCQkJCWhEcml2ZXIsIG1zZywgbFBhcmFtMSwgbFBhcmFtMik7CkBAIC02OCw4ICs2OCw4IEBACiAJCWlmIChscGRydi0+bHBOZXh0SXRlbSA9PSBOVUxMKSBicmVhazsKIAkJbHBkcnYgPSBscGRydi0+bHBOZXh0SXRlbTsKIAkJfQotCWhEcnZyID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgc2l6ZW9mKERSSVZFUklURU0pKTsKLQlscG5ld2RydiA9IChMUERSSVZFUklURU0pIEdsb2JhbExvY2soaERydnIpOworCWhEcnZyID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCBzaXplb2YoRFJJVkVSSVRFTSkpOworCWxwbmV3ZHJ2ID0gKExQRFJJVkVSSVRFTSkgR2xvYmFsTG9jazE2KGhEcnZyKTsKIAlpZiAobHBuZXdkcnYgPT0gTlVMTCkgcmV0dXJuIDA7CiAJbHBuZXdkcnYtPmRpcy5sZW5ndGggPSBzaXplb2YoRFJJVkVSSU5GT1NUUlVDVCk7CiAJbHBuZXdkcnYtPmRpcy5oTW9kdWxlID0gMDsKQEAgLTkxLDcgKzkxLDcgQEAKIAkJbHBkcnYtPmxwTmV4dEl0ZW0gPSBscG5ld2RydjsKIAkJbHBuZXdkcnYtPmxwUHJldkl0ZW0gPSBscGRydjsKIAkJfQotCWxwbmV3ZHJ2LT5scERydlByb2MgPSBOVUxMOworCWxwbmV3ZHJ2LT5scERydlByb2MgPSAoRFJJVkVSUFJPQylOVUxMOwogICAgIAlkcHJpbnRmX2RyaXZlcihzdGRkZWIsIk9wZW5Ecml2ZXIgLy8gaERydnI9JTA0eCBsb2FkZWQgIVxuIiwgaERydnIpOwogCXJldHVybiBoRHJ2cjsKIH0KQEAgLTEwNCwxNCArMTA0LDE0IEBACiAJTFBEUklWRVJJVEVNCWxwZHJ2OwogICAgIAlkcHJpbnRmX2RyaXZlcihzdGRkZWIsCiAJCSJDbG9zZURyaXZlciglMDR4LCAlMDhsWCwgJTA4bFgpO1xuIiwgaERydnIsIGxQYXJhbTEsIGxQYXJhbTIpOwotCWxwZHJ2ID0gKExQRFJJVkVSSVRFTSkgR2xvYmFsTG9jayhoRHJ2cik7CisJbHBkcnYgPSAoTFBEUklWRVJJVEVNKSBHbG9iYWxMb2NrMTYoaERydnIpOwogCWlmIChscGRydiAhPSBOVUxMICYmIGxwZHJ2LT5kaXMuaERyaXZlciA9PSBoRHJ2cikgewogCQlpZiAobHBkcnYtPmxwUHJldkl0ZW0pCiAJCQkoKExQRFJJVkVSSVRFTSlscGRydi0+bHBQcmV2SXRlbSktPmxwTmV4dEl0ZW0gPSBscGRydi0+bHBOZXh0SXRlbTsKIAkJaWYgKGxwZHJ2LT5scE5leHRJdGVtKQogCQkJKChMUERSSVZFUklURU0pbHBkcnYtPmxwTmV4dEl0ZW0pLT5scFByZXZJdGVtID0gbHBkcnYtPmxwUHJldkl0ZW07Ci0JCUdsb2JhbFVubG9jayhoRHJ2cik7Ci0JCUdsb2JhbEZyZWUoaERydnIpOworCQlHbG9iYWxVbmxvY2sxNihoRHJ2cik7CisJCUdsb2JhbEZyZWUxNihoRHJ2cik7CiAgICAgICAgIGRwcmludGZfZHJpdmVyKHN0ZGRlYiwiQ2xvc2VEcml2ZXIgLy8gaERydnI9JTA0eCBjbG9zZWQgIVxuIiwgaERydnIpOwogCQlyZXR1cm4gVFJVRTsKIAkJfQpAQCAtMTI2LDEwICsxMjYsMTAgQEAKIAlMUERSSVZFUklURU0JbHBkcnY7CiAJSEFORExFCQkJaE1vZHVsZSA9IDA7CiAgICAgCWRwcmludGZfZHJpdmVyKHN0ZGRlYiwiR2V0RHJpdmVyTW9kdWxlSGFuZGxlKCUwNHgpO1xuIiwgaERydnIpOwotCWxwZHJ2ID0gKExQRFJJVkVSSVRFTSkgR2xvYmFsTG9jayhoRHJ2cik7CisJbHBkcnYgPSAoTFBEUklWRVJJVEVNKSBHbG9iYWxMb2NrMTYoaERydnIpOwogCWlmIChscGRydiAhPSBOVUxMKSB7CiAJCWhNb2R1bGUgPSBscGRydi0+ZGlzLmhNb2R1bGU7Ci0JCUdsb2JhbFVubG9jayhoRHJ2cik7CisJCUdsb2JhbFVubG9jazE2KGhEcnZyKTsKIAkJfQogCXJldHVybiBoTW9kdWxlOwogfQpAQCAtMTc2LDEwICsxNzYsMTAgQEAKIAlMUERSSVZFUklURU0JbHBkcnY7CiAgICAgCWRwcmludGZfZHJpdmVyKHN0ZGRlYiwiR2V0RHJpdmVySW5mbyglMDR4LCAlcCk7XG4iLCBoRHJ2ciwgbHBEcnZJbmZvKTsKIAlpZiAobHBEcnZJbmZvID09IE5VTEwpIHJldHVybiBGQUxTRTsKLQlscGRydiA9IChMUERSSVZFUklURU0pIEdsb2JhbExvY2soaERydnIpOworCWxwZHJ2ID0gKExQRFJJVkVSSVRFTSkgR2xvYmFsTG9jazE2KGhEcnZyKTsKIAlpZiAobHBkcnYgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwogCW1lbWNweShscERydkluZm8sICZscGRydi0+ZGlzLCBzaXplb2YoRFJJVkVSSU5GT1NUUlVDVCkpOwotCUdsb2JhbFVubG9jayhoRHJ2cik7CisJR2xvYmFsVW5sb2NrMTYoaERydnIpOwogCXJldHVybiBUUlVFOwogfQogCkBAIC0yMDIsNyArMjAyLDcgQEAKIAkJCQkJbHBEcnZJdGVtTGlzdC0+ZGlzLmhEcml2ZXIpOwogCQlyZXR1cm4gbHBEcnZJdGVtTGlzdC0+ZGlzLmhEcml2ZXI7CiAJCX0KLQlscGRydiA9IChMUERSSVZFUklURU0pIEdsb2JhbExvY2soaERydnIpOworCWxwZHJ2ID0gKExQRFJJVkVSSVRFTSkgR2xvYmFsTG9jazE2KGhEcnZyKTsKIAlpZiAobHBkcnYgIT0gTlVMTCkgewogCQlpZiAoZHdGbGFncyAmIEdORF9SRVZFUlNFKSB7CiAJCQlpZiAobHBkcnYtPmxwUHJldkl0ZW0pIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJCQlpZiAobHBkcnYtPmxwTmV4dEl0ZW0pIAogCQkJCWhSZXREcnYgPSAoKExQRFJJVkVSSVRFTSlscGRydi0+bHBOZXh0SXRlbSktPmRpcy5oRHJpdmVyOwogCQkJfQotCQlHbG9iYWxVbmxvY2soaERydnIpOworCQlHbG9iYWxVbmxvY2sxNihoRHJ2cik7CiAJCX0KICAgICAJZHByaW50Zl9kcml2ZXIoc3RkZGViLCJHZXROZXh0RHJpdmVyIC8vIHJldHVybiAlMDR4ICFcbiIsIGhSZXREcnYpOwogCXJldHVybiBoUmV0RHJ2OwpkaWZmIC0tZ2l0IGEvbWlzYy9leGVjLmMgYi9taXNjL2V4ZWMuYwppbmRleCAwODViYjg2Li5hZDUzZjZiIDEwMDY0NAotLS0gYS9taXNjL2V4ZWMuYworKysgYi9taXNjL2V4ZWMuYwpAQCAtMTY1LDggKzE2NSw4IEBACiAJZWxzZQogCQlubGVuID0gMDsKIAlzaXplID0gc2l6ZW9mKFdJTkhFTFApICsgbmxlbiArIGRzaXplOwotCWh3aCA9IEdsb2JhbEFsbG9jKDAsc2l6ZSk7Ci0JbHB3aCA9IEdsb2JhbExvY2soaHdoKTsKKwlod2ggPSBHbG9iYWxBbGxvYzE2KDAsc2l6ZSk7CisJbHB3aCA9IEdsb2JhbExvY2sxNihod2gpOwogCWxwd2gtPnNpemUgPSBzaXplOwogCWxwd2gtPmNvbW1hbmQgPSB3Q29tbWFuZDsKIAlpZihubGVuKSB7CkBAIC0xNzgsNiArMTc4LDYgQEAKIAkJbHB3aC0+b2ZzRGF0YSA9IHNpemVvZihXSU5IRUxQKStubGVuOwogCX0gZWxzZQogCQlscHdoLT5vZnNEYXRhID0gMDsKLQlHbG9iYWxVbmxvY2soaHdoKTsKKwlHbG9iYWxVbmxvY2sxNihod2gpOwogCXJldHVybiBTZW5kTWVzc2FnZShoRGVzdCxXTV9XSU5IRUxQLGhXbmQsaHdoKTsKIH0KZGlmZiAtLWdpdCBhL21pc2MvbHN0ci5jIGIvbWlzYy9sc3RyLmMKaW5kZXggYjgwNjA2MS4uNWViZDc5YyAxMDA2NDQKLS0tIGEvbWlzYy9sc3RyLmMKKysrIGIvbWlzYy9sc3RyLmMKQEAgLTUsMTQgKzUsMTggQEAKICAqLwogCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCi0jaW5jbHVkZSAibGR0LmgiCiAjaW5jbHVkZSAid2luZG93cy5oIgorI2luY2x1ZGUgImxkdC5oIgorI2luY2x1ZGUgIm1vZHVsZS5oIgorI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAieG1hbGxvYy5oIgogCiAjZGVmaW5lIFRvVXBwZXIoYykJdG91cHBlcihjKQogI2RlZmluZSBUb0xvd2VyKGMpCXRvbG93ZXIoYykKQEAgLTMxNSwzICszMTksMTI3IEBACiAgIGZvcihpPTA7aTxuTGVuZ3RoO2krKykKICAgICBscEFuc2lTdHJbaV09T2VtMkFuc2lbKHVuc2lnbmVkIGNoYXIpKGxwT2VtU3RyW2ldKV07CiB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcgICAoS0VSTkVMLjExNSkKKyAqLwordm9pZCBPdXRwdXREZWJ1Z1N0cmluZyggTFBDU1RSIHN0ciApCit7CisgICAgY2hhciAqbW9kdWxlOworICAgIGNoYXIgKnAsICpidWZmZXIgPSB4bWFsbG9jKCBzdHJsZW4oc3RyKSsxICk7CisgICAgLyogUmVtb3ZlIENScyAqLworICAgIGZvciAocCA9IGJ1ZmZlcjsgKnN0cjsgc3RyKyspIGlmICgqc3RyICE9ICdccicpICpwKysgPSAqc3RyOworICAgICpwID0gJ1wwJzsKKyAgICBpZiAoKHAgPiBidWZmZXIpICYmIChwWy0xXSA9PSAnXG4nKSkgcFsxXSA9ICdcMCc7IC8qIFJlbW92ZSB0cmFpbGluZyBcbiAqLworICAgIG1vZHVsZSA9IE1PRFVMRV9HZXRNb2R1bGVOYW1lKCBHZXRFeGVQdHIoR2V0Q3VycmVudFRhc2soKSkgKTsKKyAgICBmcHJpbnRmKCBzdGRlcnIsICJPdXRwdXREZWJ1Z1N0cmluZzogJXMgc2F5cyAnJXMnXG4iLAorICAgICAgICAgICAgIG1vZHVsZSA/IG1vZHVsZSA6ICI/Pz8iLCBidWZmZXIgKTsKKyAgICAgICAgICAgICAKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICB3c3ByaW50ZiAgIChVU0VSLjQyMCkKKyAqLworI2lmbmRlZiBXSU5FTElCCitpbnQgd3NwcmludGYoIExQU1RSIGR1bW15MSwgTFBTVFIgZHVtbXkyLCAuLi4gKQoreworICAgIExQU1RSIGxwT3V0cHV0LCBscEZvcm1hdDsKKyAgICBEV09SRCAqd2luX3N0YWNrID0gKERXT1JEICopQ1VSUkVOVF9TVEFDSzE2LT5hcmdzOworCisgICAgbHBPdXRwdXQgPSAoTFBTVFIpIFBUUl9TRUdfVE9fTElOKCp3aW5fc3RhY2spOworICAgIHdpbl9zdGFjaysrOworICAgIGxwRm9ybWF0ID0gKExQU1RSKSBQVFJfU0VHX1RPX0xJTigqd2luX3N0YWNrKTsKKyAgICB3aW5fc3RhY2srKzsKKworICAgIHJldHVybiB3dnNwcmludGYoIGxwT3V0cHV0LCBscEZvcm1hdCwgKExQQ1NUUil3aW5fc3RhY2sgKTsKK30KKyNlbHNlICAvKiBXSU5FTElCICovCitpbnQgd3NwcmludGYoTFBTVFIgbHBPdXRwdXQsIExQU1RSIGxwRm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCB2YWxpc3Q7CisgICAgaW50IEFyZ0NudDsKKworICAgIHZhX3N0YXJ0KHZhbGlzdCwgbHBGb3JtYXQpOworICAgIEFyZ0NudCA9IHZzcHJpbnRmKGxwT3V0cHV0LCBscEZvcm1hdCwgdmFsaXN0KTsKKyAgICB2YV9lbmQodmFsaXN0KTsKKworICAgIHJldHVybiBBcmdDbnQ7Cit9CisjZW5kaWYgIC8qIFdJTkVMSUIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICB3dnNwcmludGYgICAoVVNFUi40MjEpCisgKi8KK2ludCB3dnNwcmludGYoIExQU1RSIGJ1ZiwgTFBDU1RSIGZvcm1hdCwgTFBDU1RSIGFyZ3MgKQoreworICAgIExQQ1NUUiBwdHI7CisgICAgRFdPUkQgc3RhY2tbNTEyXSwgKnN0YWNrX3B0cjsKKyAgICBCT09MIGZMYXJnZTsKKworICAgIC8qIENyZWF0ZSB0aGUgMzItYml0IHN0YWNrIGZvciBsaWJjJ3MgdnNwcmludGYoKSAqLworCisgICAgZm9yIChzdGFja19wdHIgPSBzdGFjaywgcHRyID0gZm9ybWF0OyAqcHRyOyBwdHIrKykKKyAgICB7CisgICAgICAgIGlmICgqcHRyICE9ICclJyB8fCAqKytwdHIgPT0gJyUnKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogc2tpcCB3aWR0aC9wcmVjaXNpb24gKi8KKyAgICAgICAgd2hpbGUgKCpwdHIgPT0gJy0nIHx8ICpwdHIgPT0gJysnIHx8ICpwdHIgPT0gJy4nIHx8CisgICAgICAgICAgICAgICAqcHRyID09ICcgJyB8fCBpc2RpZ2l0KCpwdHIpIHx8ICpwdHIgPT0gJyMnKQorICAgICAgICAgICAgcHRyKys7CisKKyAgICAgICAgLyogaGFuZGxlIG1vZGlmaWVyICovCisgICAgICAgIGZMYXJnZSA9ICgoKnB0ciA9PSAnbCcpIHx8ICgqcHRyID09ICdMJykpOworICAgICAgICBpZiAoZkxhcmdlKSBwdHIrKzsKKworICAgICAgICBzd2l0Y2ggKCpwdHIpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAqc3RhY2tfcHRyKysgPSAoRFdPUkQpUFRSX1NFR19UT19MSU4oKihEV09SRCopYXJncyk7CisgICAgICAgICAgICBhcmdzICs9IHNpemVvZihEV09SRCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdjJzoKKy8qIHdpbmRvd3MnIHdzcHJpbnRmKCkgJWMgaWdub3JlcyAwJ3MsIHdlIHJlcGxhY2UgMCB3aXRoIFNQQUNFIHRvIG1ha2Ugc3VyZQorICAgdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgb2YgdGhlIHN0cmluZyBpc24ndCBpZ25vcmVkIGJ5IHRoZSB3aW5hcHAgKi8KKyAgICAgICAgICAgICpzdGFja19wdHIrKyA9IChEV09SRCkoKihXT1JEKilhcmdzID8gKihXT1JEKilhcmdzIDogJyAnKTsKKyAgICAgICAgICAgIGFyZ3MgKz0gc2l6ZW9mKFdPUkQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgaWYgKCFmTGFyZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnN0YWNrX3B0cisrID0gKERXT1JEKShJTlQzMikoKihJTlQxNiAqKWFyZ3MpOworICAgICAgICAgICAgICAgIGFyZ3MgKz0gc2l6ZW9mKElOVDE2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICovCisgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICBpZiAoZkxhcmdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpzdGFja19wdHIrKyA9ICooRFdPUkQqKWFyZ3M7CisgICAgICAgICAgICAgICAgYXJncyArPSBzaXplb2YoRFdPUkQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpzdGFja19wdHIrKyA9ICooV09SRCopYXJnczsKKyAgICAgICAgICAgICAgICBhcmdzICs9IHNpemVvZihXT1JEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqc3RhY2tfcHRyKysgPSAwOworICAgICAgICAgICAgYXJncyArPSBzaXplb2YoV09SRCk7CisgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJ3c3ByaW50Zjogb29wcywgdW5rbm93biBmb3JtYXQgJWMhXG4iLCAqcHRyICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2c3ByaW50ZiggYnVmLCBmb3JtYXQsIHN0YWNrICk7Cit9CmRpZmYgLS1naXQgYS9taXNjL21haW4uYyBiL21pc2MvbWFpbi5jCmluZGV4IDJjYjBhZjQuLjIzM2U3ZWQgMTAwNjQ0Ci0tLSBhL21pc2MvbWFpbi5jCisrKyBiL21pc2MvbWFpbi5jCkBAIC0xMDQ0LDcgKzEwNDQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCUdldFdpbkRlYnVnSW5mbyAoS0VSTkVMLjM1NSkKICovCi1CT09MIEdldFdpbkRlYnVnSW5mbyhXSU5ERUJVR0lORk8gRkFSKiBscHdkaSwgVUlOVCBmbGFncykKK0JPT0wgR2V0V2luRGVidWdJbmZvKFdJTkRFQlVHSU5GTyAqbHB3ZGksIFVJTlQgZmxhZ3MpCiB7CiAJcHJpbnRmKCJHZXRXaW5EZWJ1Z0luZm8oJThseCwlZCkgc3R1YiByZXR1cm5pbmcgMFxuIiwgKHVuc2lnbmVkIGxvbmcpbHB3ZGksIGZsYWdzKTsKIAkvKiAwIG1lYW5zIG5vdCBpbiBkZWJ1Z2dpbmcgbW9kZS92ZXJzaW9uICovCkBAIC0xMDU2LDcgKzEwNTYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCUdldFdpbkRlYnVnSW5mbyAoS0VSTkVMLjM1NSkKICovCi1CT09MIFNldFdpbkRlYnVnSW5mbyhXSU5ERUJVR0lORk8gRkFSKiBscHdkaSkKK0JPT0wgU2V0V2luRGVidWdJbmZvKFdJTkRFQlVHSU5GTyAqbHB3ZGkpCiB7CiAJcHJpbnRmKCJTZXRXaW5EZWJ1Z0luZm8oJThseCkgc3R1YiByZXR1cm5pbmcgMFxuIiwgKHVuc2lnbmVkIGxvbmcpbHB3ZGkpOwogCS8qIDAgbWVhbnMgbm90IGluIGRlYnVnZ2luZyBtb2RlL3ZlcnNpb24gKi8KZGlmZiAtLWdpdCBhL21pc2MvbmV0d29yay5jIGIvbWlzYy9uZXR3b3JrLmMKaW5kZXggMDcxM2Y4ZC4uNjVlZjljYiAxMDA2NDQKLS0tIGEvbWlzYy9uZXR3b3JrLmMKKysrIGIvbWlzYy9uZXR3b3JrLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogICoJCQkJV05ldEdldENvbm5lY3Rpb24JW1VTRVIuNTEyXQogICovCiBpbnQgV05ldEdldENvbm5lY3Rpb24oTFBTVFIgbHBMb2NhbE5hbWUsIAotCUxQU1RSIGxwUmVtb3RlTmFtZSwgVUlOVCBGQVIgKmNiUmVtb3RlTmFtZSkKKwlMUFNUUiBscFJlbW90ZU5hbWUsIFVJTlQgKmNiUmVtb3RlTmFtZSkKIHsKICAgICBjb25zdCBjaGFyICpwYXRoOwogCkBAIC0zOTMsNyArMzkzLDcgQEAKICAqCQkJCVdOZXRPcGVuRW51bQkJW1VTRVIuPz8/XQogICovCiBVSU5UIFdOZXRPcGVuRW51bShEV09SRCBkd1Njb3BlLCBEV09SRCBkd1R5cGUsIAotCUxQTkVUUkVTT1VSQ0UgbHBOZXQsIEhBTkRMRSBGQVIgKmxwaEVudW0pCisJTFBORVRSRVNPVVJDRSBscE5ldCwgSEFORExFICpscGhFbnVtKQogewogCXByaW50ZigiRU1QVFkgU1RVQiAhISEgV05ldE9wZW5FbnVtKCUwOGxYLCAlMDhsWCwgJXAsICVwKTtcbiIsCiAgICAgICAgICAgICAgICBkd1Njb3BlLCBkd1R5cGUsIGxwTmV0LCBscGhFbnVtKTsKZGlmZiAtLWdpdCBhL21pc2Mvb2xlMi5jIGIvbWlzYy9vbGUyLmMKaW5kZXggZTVhZTNjNy4uM2NhNTAxMCAxMDA2NDQKLS0tIGEvbWlzYy9vbGUyLmMKKysrIGIvbWlzYy9vbGUyLmMKQEAgLTI0LDcgKzI0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE9sZUluaXRpYWxpemUgICAgICAgW09MRTIuMl0KICAqLwotSFJFU1VMVCBXSU5BUEkgT2xlSW5pdGlhbGl6ZShMUFZPSUQgcmVzZXJ2ZWQpCitIUkVTVUxUIE9sZUluaXRpYWxpemUoTFBWT0lEIHJlc2VydmVkKQogewogICAgIGRwcmludGZfb2xlKHN0ZG5pbXAsIk9sZUluaXRpYWxpemVcbiIpOwogCXJldHVybiBTX09LOwpAQCAtMzMsNyArMzMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlVW5pdGlhbGl6ZSAgICAgICBbT0xFMi4zXQogICovCi12b2lkIFdJTkFQSSBPbGVVbmluaXRpYWxpemUoKQordm9pZCBPbGVVbmluaXRpYWxpemUoKQogewogCWRwcmludGZfb2xlKHN0ZG5pbXAsIk9sZVVuaW5pdGlhbGl6ZSgpXG4iKTsKIH0KZGlmZiAtLWdpdCBhL21pc2Mvb2xlMmRpc3AuYyBiL21pc2Mvb2xlMmRpc3AuYwppbmRleCBlZGI0NjFjLi5lNzM4YWRjIDEwMDY0NAotLS0gYS9taXNjL29sZTJkaXNwLmMKKysrIGIvbWlzYy9vbGUyZGlzcC5jCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogc3RhdGljIEJTVFIgQlNUUl9BbGxvY0J5dGVzKGludCBuKQogewotCUhMT0NBTCBtZW07CisJSExPQ0FMMTYgbWVtOwogCWlmKCFCU1RSaGVhcHNlbCkKIAl7Ci0JCUJTVFJoZWFwc2VsPUdsb2JhbEFsbG9jKEdNRU1fRklYRUQsQlNUUl9IRUFQX1NJWkUpOworCQlCU1RSaGVhcHNlbD1HbG9iYWxBbGxvYzE2KEdNRU1fRklYRUQsQlNUUl9IRUFQX1NJWkUpOwogCQlMb2NhbEluaXQoQlNUUmhlYXBzZWwsMCxCU1RSX0hFQVBfU0laRS0xKTsKIAl9CiAJaWYoIUJTVFJoZWFwc2VsKQpkaWZmIC0tZ2l0IGEvbWlzYy9vbGUybmxzLmMgYi9taXNjL29sZTJubHMuYwppbmRleCA3MmU1YmVlLi4zZjEyMGE1IDEwMDY0NAotLS0gYS9taXNjL29sZTJubHMuYworKysgYi9taXNjL29sZTJubHMuYwpAQCAtMTgsNyArMTgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0VXNlckRlZmF1bHRMQ0lEICAgICAgIChPTEUyTkxTLjEpCiAgKi8KLURXT1JEIFdJTkFQSSBHZXRVc2VyRGVmYXVsdExDSUQoKQorRFdPUkQgR2V0VXNlckRlZmF1bHRMQ0lEKCkKIHsKIC8qIERlZmF1bHQgc29ydGluZywgbmV1dHJhbCBzdWJsYW5ndWFnZSAqLwogICAgIHN3aXRjaChPcHRpb25zLmxhbmd1YWdlKQpAQCAtNDIsNyArNDIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgIEdldFN5c3RlbURlZmF1bHRMQ0lEICAgICAgIChPTEUyTkxTLjIpCiAgKi8KLURXT1JEIFdJTkFQSSBHZXRTeXN0ZW1EZWZhdWx0TENJRCgpCitEV09SRCBHZXRTeXN0ZW1EZWZhdWx0TENJRCgpCiB7CiAJcmV0dXJuIEdldFVzZXJEZWZhdWx0TENJRCgpOwogfQpAQCAtNTAsNyArNTAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgIEdldFVzZXJEZWZhdWx0TGFuZ0lEICAgICAgIChPTEUyTkxTLjMpCiAgKi8KLVdPUkQgV0lOQVBJIEdldFVzZXJEZWZhdWx0TGFuZ0lEKCkKK1dPUkQgR2V0VXNlckRlZmF1bHRMYW5nSUQoKQogewogCXJldHVybiAoV09SRClHZXRVc2VyRGVmYXVsdExDSUQoKTsKIH0KQEAgLTU4LDcgKzU4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lEICAgICAoT0xFMk5MUy40KQogICovCi1XT1JEIFdJTkFQSSBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lEKCkKK1dPUkQgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCgpCiB7CiAJcmV0dXJuIEdldFVzZXJEZWZhdWx0TGFuZ0lEKCk7CiB9CkBAIC02Nyw3ICs2Nyw3IEBACiAgKiAgICAgICAgIEdldExvY2FsZUluZm9BICAgICAgICAgICAgIChPTEUyTkxTLjUpCiAgKiBJcyB0aGUgbGFzdCBwYXJhbWV0ZXIgcmVhbGx5IFdPUkQgZm9yIFdpbjE2PwogICovCi1pbnQgV0lOQVBJIEdldExvY2FsZUluZm9BKERXT1JEIGxjaWQsRFdPUkQgTENUeXBlLExQU1RSIGJ1ZixXT1JEIGxlbikKK2ludCBHZXRMb2NhbGVJbmZvQShEV09SRCBsY2lkLERXT1JEIExDVHlwZSxMUFNUUiBidWYsV09SRCBsZW4pCiB7CiAJY2hhciAqcmV0U3RyaW5nOwogICAgIGludCByZXRMZW47CmRpZmYgLS1naXQgYS9taXNjL29sZWNsaS5jIGIvbWlzYy9vbGVjbGkuYwppbmRleCBhZGY5YTcyLi43ZTUzNjU2IDEwMDY0NAotLS0gYS9taXNjL29sZWNsaS5jCisrKyBiL21pc2Mvb2xlY2xpLmMKQEAgLTE4LDExICsxOCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBPbGVSZWdpc3RlckNsaWVudERvYwogICovCi1PTEVTVEFUVVMgV0lOQVBJIE9sZVJlZ2lzdGVyQ2xpZW50RG9jKAotCUxQQ1NUUiBjbGFzc25hbWUsCi0JTFBDU1RSIGRvY25hbWUsCi0JTE9ORyByZXNlcnZlZCwKLQlMSENMSUVOVERPQyBGQVIgKmhSZXQpCitPTEVTVEFUVVMgT2xlUmVnaXN0ZXJDbGllbnREb2MoCUxQQ1NUUiBjbGFzc25hbWUsIExQQ1NUUiBkb2NuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT05HIHJlc2VydmVkLCBMSENMSUVOVERPQyAqaFJldCApCiB7CiAgICAgZHByaW50Zl9vbGUoc3RkbmltcCwiT2xlUmVnaXN0ZXJDbGllbnREb2M6JXMgJXNcbiIsY2xhc3NuYW1lLGRvY25hbWUpOwogICAgICpoUmV0PSsrT0xFX2N1cnJlbnRfaGFuZGxlOwpAQCAtMzIsNyArMjksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlUmVuYW1lQ2xpZW50RG9jCiAgKi8KLU9MRVNUQVRVUyBXSU5BUEkgT2xlUmVuYW1lQ2xpZW50RG9jKExIQ0xJRU5URE9DIGhEb2MsIExQQ1NUUiBuZXdOYW1lKQorT0xFU1RBVFVTIE9sZVJlbmFtZUNsaWVudERvYyhMSENMSUVOVERPQyBoRG9jLCBMUENTVFIgbmV3TmFtZSkKIHsKICAgICBkcHJpbnRmX29sZShzdGRuaW1wLCJPbGVSZW5hbWVDbGllbnREb2M6ICVsZCAlc1xuIixoRG9jLCBuZXdOYW1lKTsKICAgICByZXR1cm4gT0xFX09LOwpAQCAtNDEsNyArMzgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlUmV2b2tlQ2xpZW50RG9jCiAgKi8KLU9MRVNUQVRVUyBXSU5BUEkgT2xlUmV2b2tlQ2xpZW50RG9jKExIQ0xJRU5URE9DIGhTZXJ2ZXJEb2MpCitPTEVTVEFUVVMgT2xlUmV2b2tlQ2xpZW50RG9jKExIQ0xJRU5URE9DIGhTZXJ2ZXJEb2MpCiB7CiAgICAgZHByaW50Zl9vbGUoc3RkbmltcCwiT2xlUmV2b2tlQ2xpZW50RG9jOiVsZFxuIixoU2VydmVyRG9jKTsKICAgICByZXR1cm4gT0xFX09LOwpAQCAtNTAsNyArNDcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlSXNEY01ldGEKICAqLwotQk9PTCBXSU5BUEkgT2xlSXNEY01ldGEoSERDIGhkYykKK0JPT0wgT2xlSXNEY01ldGEoSERDIGhkYykKIHsKIAlkcHJpbnRmX29sZShzdGRkZWIsIk9sZUlzRENNZXRhKCUwNHgpXG4iLGhkYyk7CiAJcmV0dXJuIEdESV9HZXRPYmpQdHIoIGhkYywgTUVUQUZJTEVfRENfTUFHSUMgKSAhPSAwOwpkaWZmIC0tZ2l0IGEvbWlzYy9vbGVzdnIuYyBiL21pc2Mvb2xlc3ZyLmMKaW5kZXggNTMzNTFjMi4uNDAzNWUwOCAxMDA2NDQKLS0tIGEvbWlzYy9vbGVzdnIuYworKysgYi9taXNjL29sZXN2ci5jCkBAIC0xNywxMiArMTcsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlUmVnaXN0ZXJTZXJ2ZXIKICAqLwotT0xFU1RBVFVTIFdJTkFQSSBPbGVSZWdpc3RlclNlcnZlcigKLQlMUENTVFIJbmFtZSwKLQlMUE9MRVNFUlZFUiBzZXJ2ZXJTdHJ1Y3QsCi0JTEhTRVJWRVIgRkFSICpoUmV0LAotCUhJTlNUQU5DRSBoU2VydmVyLAotCU9MRV9TRVJWRVJfVVNFIHVzZSkKK09MRVNUQVRVUyBPbGVSZWdpc3RlclNlcnZlciggTFBDU1RSIG5hbWUsIExQT0xFU0VSVkVSIHNlcnZlclN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEhTRVJWRVIgKmhSZXQsIEhJTlNUQU5DRSBoU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTEVfU0VSVkVSX1VTRSB1c2UgKQogewogICAgIGRwcmludGZfb2xlKHN0ZG5pbXAsIk9sZVJlZ2lzdGVyU2VydmVyOiVzXG4iLG5hbWUpOwogICAgICpoUmV0PSsrT0xFX2N1cnJlbnRfaGFuZGxlOwpAQCAtMzMsNyArMzAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlQmxvY2tTZXJ2ZXIKICAqLwotT0xFU1RBVFVTIFdJTkFQSSBPbGVCbG9ja1NlcnZlcihMSFNFUlZFUiBoU2VydmVyKQorT0xFU1RBVFVTIE9sZUJsb2NrU2VydmVyKExIU0VSVkVSIGhTZXJ2ZXIpCiB7CiAgICAgZnByaW50ZihzdGRuaW1wLCJPbGVCbG9ja1NlcnZlcjolbGRcbiIsaFNlcnZlcik7CiAgICAgcmV0dXJuIE9MRV9PSzsKQEAgLTQyLDcgKzM5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE9sZVVuYmxvY2tTZXJ2ZXIKICAqLwotT0xFU1RBVFVTIFdJTkFQSSBPbGVVbmJsb2NrU2VydmVyKExIU0VSVkVSIGhTZXJ2ZXIsIEJPT0wgRkFSICpibG9jaykKK09MRVNUQVRVUyBPbGVVbmJsb2NrU2VydmVyKExIU0VSVkVSIGhTZXJ2ZXIsIEJPT0wgKmJsb2NrKQogewogICAgIGZwcmludGYoc3RkbmltcCwiT2xlVW5ibG9ja1NlcnZlcjolbGRcbiIsaFNlcnZlcik7CiAgICAgLyogbm8gbW9yZSBibG9ja2VkIG1lc3NhZ2VzIDopICovCkBAIC01MywxMSArNTAsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlUmVnaXN0ZXJTZXJ2ZXJEb2MKICAqLwotT0xFU1RBVFVTIFdJTkFQSSBPbGVSZWdpc3RlclNlcnZlckRvYygKLQlMSFNFUlZFUiBoU2VydmVyLAotCUxQQ1NUUiBkb2NuYW1lLAotCUxQT0xFU0VSVkVSRE9DIGRvY3VtZW50LAotCUxIU0VSVkVSRE9DIEZBUiAqaFJldCkKK09MRVNUQVRVUyBPbGVSZWdpc3RlclNlcnZlckRvYyggTEhTRVJWRVIgaFNlcnZlciwgTFBDU1RSIGRvY25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQT0xFU0VSVkVSRE9DIGRvY3VtZW50LCBMSFNFUlZFUkRPQyAqaFJldCkKIHsKICAgICBkcHJpbnRmX29sZShzdGRuaW1wLCJPbGVSZWdpc3RlclNlcnZlckRvYzolbGQsJXNcbiIsIGhTZXJ2ZXIsIGRvY25hbWUpOwogICAgICpoUmV0PSsrT0xFX2N1cnJlbnRfaGFuZGxlOwpAQCAtNjcsNyArNjEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlUmV2b2tlU2VydmVyRG9jCiAgKi8KLU9MRVNUQVRVUyBXSU5BUEkgT2xlUmV2b2tlU2VydmVyRG9jKExIU0VSVkVSRE9DIGhTZXJ2ZXJEb2MpCitPTEVTVEFUVVMgT2xlUmV2b2tlU2VydmVyRG9jKExIU0VSVkVSRE9DIGhTZXJ2ZXJEb2MpCiB7CiAgICAgZHByaW50Zl9vbGUoc3RkbmltcCwiT2xlUmV2b2tlU2VydmVyRG9jOiVsZFxuIixoU2VydmVyRG9jKTsKICAgICByZXR1cm4gT0xFX09LOwpAQCAtNzYsNyArNzAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgT2xlUmV2b2tlU2VydmVyCiAgKi8KLU9MRVNUQVRVUyBXSU5BUEkgT2xlUmV2b2tlU2VydmVyKExIU0VSVkVSIGhTZXJ2ZXIpCitPTEVTVEFUVVMgT2xlUmV2b2tlU2VydmVyKExIU0VSVkVSIGhTZXJ2ZXIpCiB7CiAgICAgZHByaW50Zl9vbGUoc3RkbmltcCwiT2xlUmV2b2tlU2VydmVyOiVsZFxuIixoU2VydmVyKTsKICAgICByZXR1cm4gT0xFX09LOwpkaWZmIC0tZ2l0IGEvbWlzYy9yZWdpc3RyeS5jIGIvbWlzYy9yZWdpc3RyeS5jCmluZGV4IDE4MmY0NzEuLjdkZWU4MTAgMTAwNjQ0Ci0tLSBhL21pc2MvcmVnaXN0cnkuYworKysgYi9taXNjL3JlZ2lzdHJ5LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQlpZiAob3BlbmhhbmRsZXNbaV0uaGtleT09aGtleSkKIAkJCWJyZWFrOwogCWlmIChpPT1ucm9mb3BlbmhhbmRsZXMpIHsKLQkJZHByaW50Zl9yZWcoc3RkZGViLCJyZW1vdmVfaGFuZGxlOkRpZG4ndCBmaW5kIGhhbmRsZSAlbHg/XG4iLGhrZXkpOworCQlkcHJpbnRmX3JlZyhzdGRkZWIsInJlbW92ZV9oYW5kbGU6RGlkbid0IGZpbmQgaGFuZGxlICUwOHg/XG4iLGhrZXkpOwogCQlyZXR1cm47CiAJfQogCW1lbWNweSgJb3BlbmhhbmRsZXMraSwKQEAgLTcyOCw4ICs3MjgsNyBAQAogICovCiAKIC8qIFJlZ09wZW5LZXlFeFcJCVtBRFZBUEkzMi4xNTBdICovCi1XSU5BUEkgRFdPUkQKLVJlZ09wZW5LZXlFeFcoCitEV09SRCBSZWdPcGVuS2V5RXhXKAogCUhLRVkJaGtleSwKIAlMUENXU1RSCWxwc3pTdWJLZXksCiAJRFdPUkQJZHdSZXNlcnZlZCwKQEAgLTc3Niw4ICs3NzUsNyBAQAogfQogCiAvKiBSZWdPcGVuS2V5VwkJCVtBRFZBUEkzMi4xNTFdICovCi1XSU5BUEkgRFdPUkQKLVJlZ09wZW5LZXlXKAorRFdPUkQgUmVnT3BlbktleVcoCiAJSEtFWQloa2V5LAogCUxQQ1dTVFIJbHBzelN1YktleSwKIAlMUEhLRVkJcmV0a2V5CkBAIC03OTAsOCArNzg4LDcgQEAKIAogCiAvKiBSZWdPcGVuS2V5RXhBCQlbQURWQVBJMzIuMTQ5XSAqLwotV0lOQVBJIERXT1JECi1SZWdPcGVuS2V5RXhBKAorRFdPUkQgUmVnT3BlbktleUV4QSgKIAlIS0VZCWhrZXksCiAJTFBDU1RSCWxwc3pTdWJLZXksCiAJRFdPUkQJZHdSZXNlcnZlZCwKQEAgLTgxNSw4ICs4MTIsNyBAQAogfQogCiAvKiBSZWdPcGVuS2V5QQkJCVtBRFZBUEkzMi4xNDhdICovCi1XSU5BUEkgRFdPUkQKLVJlZ09wZW5LZXlBKAorRFdPUkQgUmVnT3BlbktleUEoCiAJSEtFWQloa2V5LAogCUxQQ1NUUglscHN6U3ViS2V5LAogCUxQSEtFWQlyZXRrZXkKQEAgLTgyOCw4ICs4MjQsNyBAQAogfQogCiAvKiBSZWdPcGVuS2V5CQkJW1NIRUxMLjFdIFtLRVJORUwuMjE3XSAqLwotV0lOQVBJIERXT1JECi1SZWdPcGVuS2V5KAorRFdPUkQgUmVnT3BlbktleSgKIAlIS0VZCWhrZXksCiAJTFBDU1RSCWxwc3pTdWJLZXksCiAJTFBIS0VZCXJldGtleQpAQCAtODU0LDggKzg0OSw3IEBACiAgKi8KIAogLyogUmVnQ3JlYXRlS2V5RXhXCQlbQURWQVBJMzIuMTMxXSAqLwotV0lOQVBJIERXT1JECi1SZWdDcmVhdGVLZXlFeFcoCitEV09SRCBSZWdDcmVhdGVLZXlFeFcoCiAJSEtFWQloa2V5LAogCUxQQ1dTVFIJbHBzelN1YktleSwKIAlEV09SRAlkd1Jlc2VydmVkLApAQCAtOTU1LDggKzk0OSw3IEBACiB9CiAKIC8qIFJlZ0NyZWF0ZUtleVcJCVtBRFZBUEkzMi4xMzJdICovCi1XSU5BUEkgRFdPUkQKLVJlZ0NyZWF0ZUtleVcoCitEV09SRCBSZWdDcmVhdGVLZXlXKAogCUhLRVkJaGtleSwKIAlMUENXU1RSCWxwc3pTdWJLZXksCiAJTFBIS0VZCXJldGtleQpAQCAtOTgxLDggKzk3NCw3IEBACiB9CiAKIC8qIFJlZ0NyZWF0ZUtleUV4QQkJW0FEVkFQSTMyLjEzMF0gKi8KLVdJTkFQSSBEV09SRAotUmVnQ3JlYXRlS2V5RXhBKAorRFdPUkQgUmVnQ3JlYXRlS2V5RXhBKAogCUhLRVkJaGtleSwKIAlMUENTVFIJbHBzelN1YktleSwKIAlEV09SRAlkd1Jlc2VydmVkLApAQCAtMTAzNCw4ICsxMDI2LDcgQEAKIH0KIAogLyogUmVnQ3JlYXRlS2V5QQkJW0FEVkFQSTMyLjEyOV0gKi8KLVdJTkFQSSBEV09SRAotUmVnQ3JlYXRlS2V5QSgKK0RXT1JEIFJlZ0NyZWF0ZUtleUEoCiAJSEtFWQloa2V5LAogCUxQQ1NUUglscHN6U3ViS2V5LAogCUxQSEtFWQlyZXRrZXkKQEAgLTEwNTksOCArMTA1MCw3IEBACiB9CiAKIC8qIFJlZ0NyZWF0ZUtleQkJCVtTSEVMTC4yXSBbS0VSTkVMLjIxOF0gKi8KLVdJTkFQSSBEV09SRAotUmVnQ3JlYXRlS2V5KAorRFdPUkQgUmVnQ3JlYXRlS2V5KAogCUhLRVkJaGtleSwKIAlMUENTVFIJbHBzelN1YktleSwKIAlMUEhLRVkJcmV0a2V5CkBAIC0xMDg0LDggKzEwNzQsNyBAQAogICovCiAKIC8qIFJlZ1F1ZXJ5VmFsdWVFeFcJCVtBRFZBUEkzMi4xNThdICovCi1XSU5BUEkgRFdPUkQKLVJlZ1F1ZXJ5VmFsdWVFeFcoCitEV09SRCBSZWdRdWVyeVZhbHVlRXhXKAogCUhLRVkJaGtleSwKIAlMUFdTVFIJbHBzelZhbHVlTmFtZSwKIAlMUERXT1JECWxwZHdSZXNlcnZlZCwKQEAgLTEwOTYsNyArMTA4NSw3IEBACiAJTFBLRVlTVFJVQ1QJbHBrZXk7CiAJaW50CQlpOwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXhXKCVseCwlcywlcCwlcCwlcCwlcClcbiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXhXKCV4LCVzLCVwLCVwLCVwLCVwKVxuIiwKIAkJaGtleSxXMkMobHBzelZhbHVlTmFtZSwwKSxscGR3UmVzZXJ2ZWQsbHBkd1R5cGUsbHBiRGF0YSxscGNiRGF0YQogCSk7CiAKQEAgLTExNDEsOCArMTEzMCw3IEBACiB9CiAKIC8qIFJlZ1F1ZXJ5VmFsdWVXCQlbQURWQVBJMzIuMTU5XSAqLwotV0lOQVBJIERXT1JECi1SZWdRdWVyeVZhbHVlVygKK0RXT1JEIFJlZ1F1ZXJ5VmFsdWVXKAogCUhLRVkJaGtleSwKIAlMUFdTVFIJbHBzelN1YktleSwKIAlMUFdTVFIJbHBzekRhdGEsCkBAIC0xMTUxLDcgKzExMzksNyBAQAogCUhLRVkJeGhrZXk7CiAJRFdPUkQJcmV0LGxwZHdUeXBlOwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlVyglbHgsJXMsJXAsJXApXG4tPiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlVygleCwlcywlcCwlcClcbi0+IiwKIAkJaGtleSxXMkMobHBzelN1YktleSwwKSxscHN6RGF0YSxscGNiRGF0YQogCSk7CiAKQEAgLTExNzgsOCArMTE2Niw3IEBACiB9CiAKIC8qIFJlZ1F1ZXJ5VmFsdWVFeEEJCVtBRFZBUEkzMi4xNTddICovCi1XSU5BUEkgRFdPUkQKLVJlZ1F1ZXJ5VmFsdWVFeEEoCitEV09SRCBSZWdRdWVyeVZhbHVlRXhBKAogCUhLRVkJaGtleSwKIAlMUFNUUglscHN6VmFsdWVOYW1lLAogCUxQRFdPUkQJbHBkd1Jlc2VydmVkLApAQCAtMTE5Miw3ICsxMTc5LDcgQEAKIAlEV09SRAlyZXQsbXl4bGVuOwogCURXT1JECSpteWxlbjsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZUV4QSglbHgsJXMsJXAsJXAsJXAsJXApXG4tPiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXhBKCV4LCVzLCVwLCVwLCVwLCVwKVxuLT4iLAogCQloa2V5LGxwc3pWYWx1ZU5hbWUsbHBkd1Jlc2VydmVkLGxwZHdUeXBlLGxwYkRhdGEsbHBjYkRhdGEKIAkpOwogCWlmIChscGJEYXRhKSB7CkBAIC0xMjUwLDggKzEyMzcsNyBAQAogfQogCiAvKiBSZWdRdWVyeVZhbHVlRXgJCVtLRVJORUwuMjI1XSAqLwotV0lOQVBJIERXT1JECi1SZWdRdWVyeVZhbHVlRXgoCitEV09SRCBSZWdRdWVyeVZhbHVlRXgoCiAJSEtFWQloa2V5LAogCUxQU1RSCWxwc3pWYWx1ZU5hbWUsCiAJTFBEV09SRAlscGR3UmVzZXJ2ZWQsCkBAIC0xMjU5LDcgKzEyNDUsNyBAQAogCUxQQllURQlscGJEYXRhLAogCUxQRFdPUkQJbHBjYkRhdGEKICkgewotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZUV4KCVseCwlcywlcCwlcCwlcCwlcClcbiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXgoJXgsJXMsJXAsJXAsJXAsJXApXG4iLAogCQloa2V5LGxwc3pWYWx1ZU5hbWUsbHBkd1Jlc2VydmVkLGxwZHdUeXBlLGxwYkRhdGEsbHBjYkRhdGEKIAkpOwogCXJldHVybiBSZWdRdWVyeVZhbHVlRXhBKAkKQEAgLTEyNzMsOCArMTI1OSw3IEBACiB9CiAKIC8qIFJlZ1F1ZXJ5VmFsdWVBCQlbQURWQVBJMzIuMTU2XSAqLwotV0lOQVBJIERXT1JECi1SZWdRdWVyeVZhbHVlQSgKK0RXT1JEIFJlZ1F1ZXJ5VmFsdWVBKAogCUhLRVkJaGtleSwKIAlMUFNUUglscHN6U3ViS2V5LAogCUxQU1RSCWxwc3pEYXRhLApAQCAtMTI4Myw3ICsxMjY4LDcgQEAKIAlIS0VZCXhoa2V5OwogCURXT1JECXJldCxscGR3VHlwZTsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZUEoJWx4LCVzLCVwLCVwKVxuIiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWVBKCV4LCVzLCVwLCVwKVxuIiwKIAkJaGtleSxscHN6U3ViS2V5LGxwc3pEYXRhLGxwY2JEYXRhCiAJKTsKIApAQCAtMTMxMCwxNCArMTI5NSwxMyBAQAogfQogCiAvKiBSZWdRdWVyeVZhbHVlCQlbU0hFTEwuNl0gW0tFUk5FTC4yMjRdICovCi1XSU5BUEkgRFdPUkQKLVJlZ1F1ZXJ5VmFsdWUoCitEV09SRCBSZWdRdWVyeVZhbHVlKAogCUhLRVkJaGtleSwKIAlMUFNUUglscHN6U3ViS2V5LAogCUxQU1RSCWxwc3pEYXRhLAogCUxQRFdPUkQJbHBjYkRhdGEKICkgewotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZUEoJWx4LCVzLCVwLCVwKVxuIiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWVBKCV4LCVzLCVwLCVwKVxuIiwKIAkJaGtleSxscHN6U3ViS2V5LGxwc3pEYXRhLGxwY2JEYXRhCiAJKTsKIAlyZXR1cm4gUmVnUXVlcnlWYWx1ZUEoaGtleSxscHN6U3ViS2V5LGxwc3pEYXRhLGxwY2JEYXRhKTsKQEAgLTEzMzIsOCArMTMxNiw3IEBACiAgKi8KIAogLyogUmVnU2V0VmFsdWVFeFcJCVtBRFZBUEkzMi4xNzBdICovCi1XSU5BUEkgRFdPUkQKLVJlZ1NldFZhbHVlRXhXKAorRFdPUkQgUmVnU2V0VmFsdWVFeFcoCiAJSEtFWQloa2V5LAogCUxQV1NUUglscHN6VmFsdWVOYW1lLAogCURXT1JECWR3UmVzZXJ2ZWQsCkBAIC0xMzQ0LDcgKzEzMjcsNyBAQAogCUxQS0VZU1RSVUNUCWxwa2V5OwogCWludAkJaTsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnU2V0VmFsdWVFeFcoJWx4LCVzLCVsZCwlbGQsJXAsJWxkKVxuIiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1NldFZhbHVlRXhXKCV4LCVzLCVsZCwlbGQsJXAsJWxkKVxuIiwKIAkJaGtleSxXMkMobHBzelZhbHVlTmFtZSwwKSxkd1Jlc2VydmVkLGR3VHlwZSxscGJEYXRhLGNiRGF0YQogCSk7CiAJLyogd2Ugbm8gbG9uZ2VyIGNhcmUgYWJvdXQgdGhlIGxwYkRhdGEgZHdUeXBlIGhlcmUuLi4gKi8KQEAgLTEzODQsOCArMTM2Nyw3IEBACiB9CiAKIC8qIFJlZ1NldFZhbHVlRXhBCQlbQURWQVBJMzIuMTY5XSAqLwotV0lOQVBJIERXT1JECi1SZWdTZXRWYWx1ZUV4QSgKK0RXT1JEIFJlZ1NldFZhbHVlRXhBKAogCUhLRVkJaGtleSwKIAlMUFNUUglscHN6VmFsdWVOYW1lLAogCURXT1JECWR3UmVzZXJ2ZWQsCkBAIC0xMzk3LDcgKzEzNzksNyBAQAogCUxQV1NUUglscHN6VmFsdWVOYW1lVzsKIAlEV09SRAlyZXQ7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1NldFZhbHVlRXhBKCVseCwlcywlbGQsJWxkLCVwLCVsZClcbi0+IiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1NldFZhbHVlRXhBKCV4LCVzLCVsZCwlbGQsJXAsJWxkKVxuLT4iLAogCQloa2V5LGxwc3pWYWx1ZU5hbWUsZHdSZXNlcnZlZCxkd1R5cGUsbHBiRGF0YSxjYkRhdGEKIAkpOwogCWlmICgoMTw8ZHdUeXBlKSAmIFVOSUNPTlZNQVNLKSB7CkBAIC0xNDE4LDggKzE0MDAsNyBAQAogfQogCiAvKiBSZWdTZXRWYWx1ZUV4CQlbS0VSTkVMLjIyNl0gKi8KLVdJTkFQSSBEV09SRAotUmVnU2V0VmFsdWVFeCgKK0RXT1JEIFJlZ1NldFZhbHVlRXgoCiAJSEtFWQloa2V5LAogCUxQU1RSCWxwc3pWYWx1ZU5hbWUsCiAJRFdPUkQJZHdSZXNlcnZlZCwKQEAgLTE0MjcsMTUgKzE0MDgsMTQgQEAKIAlMUEJZVEUJbHBiRGF0YSwKIAlEV09SRAljYkRhdGEKICkgewotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnU2V0VmFsdWVFeCglbHgsJXMsJWxkLCVsZCwlcCwlbGQpXG4tPiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdTZXRWYWx1ZUV4KCV4LCVzLCVsZCwlbGQsJXAsJWxkKVxuLT4iLAogCQloa2V5LGxwc3pWYWx1ZU5hbWUsZHdSZXNlcnZlZCxkd1R5cGUsbHBiRGF0YSxjYkRhdGEKIAkpOwogCXJldHVybiBSZWdTZXRWYWx1ZUV4QShoa2V5LGxwc3pWYWx1ZU5hbWUsZHdSZXNlcnZlZCxkd1R5cGUsbHBiRGF0YSxjYkRhdGEpOwogfQogCiAvKiBSZWdTZXRWYWx1ZVcJCQlbQURWQVBJMzIuMTcxXSAqLwotV0lOQVBJIERXT1JECi1SZWdTZXRWYWx1ZVcoCitEV09SRCBSZWdTZXRWYWx1ZVcoCiAJSEtFWQloa2V5LAogCUxQQ1dTVFIJbHBzelN1YktleSwKIAlEV09SRAlkd1R5cGUsCkBAIC0xNDQ1LDcgKzE0MjUsNyBAQAogCUhLRVkJeGhrZXk7CiAJRFdPUkQJcmV0OwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdTZXRWYWx1ZVcoJWx4LCVzLCVsZCwlcywlbGQpXG4tPiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdTZXRWYWx1ZVcoJXgsJXMsJWxkLCVzLCVsZClcbi0+IiwKIAkJaGtleSxXMkMobHBzelN1YktleSwwKSxkd1R5cGUsVzJDKGxwc3pEYXRhLDApLGNiRGF0YQogCSk7CiAJaWYgKGxwc3pTdWJLZXkgJiYgKmxwc3pTdWJLZXkpIHsKQEAgLTE0NzEsOCArMTQ1MSw3IEBACiAKIH0KIC8qIFJlZ1NldFZhbHVlQQkJCVtBRFZBUEkzMi4xNjhdICovCi1XSU5BUEkgRFdPUkQKLVJlZ1NldFZhbHVlQSgKK0RXT1JEIFJlZ1NldFZhbHVlQSgKIAlIS0VZCWhrZXksCiAJTFBDU1RSCWxwc3pTdWJLZXksCiAJRFdPUkQJZHdUeXBlLApAQCAtMTQ4Miw3ICsxNDYxLDcgQEAKIAlEV09SRAlyZXQ7CiAJSEtFWQl4aGtleTsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnU2V0VmFsdWVBKCVseCwlcywlbGQsJXMsJWxkKVxuLT4iLAorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnU2V0VmFsdWVBKCV4LCVzLCVsZCwlcywlbGQpXG4tPiIsCiAJCWhrZXksbHBzelN1YktleSxkd1R5cGUsbHBzekRhdGEsY2JEYXRhCiAJKTsKIAlpZiAobHBzelN1YktleSAmJiAqbHBzelN1YktleSkgewpAQCAtMTUwNSw4ICsxNDg0LDcgQEAKIH0KIAogLyogUmVnU2V0VmFsdWUJCQlbS0VSTkVMLjIyMV0gW1NIRUxMLjVdICovCi1XSU5BUEkgRFdPUkQKLVJlZ1NldFZhbHVlKAorRFdPUkQgUmVnU2V0VmFsdWUoCiAJSEtFWQloa2V5LAogCUxQQ1NUUglscHN6U3ViS2V5LAogCURXT1JECWR3VHlwZSwKQEAgLTE1MTQsNyArMTQ5Miw3IEBACiAJRFdPUkQJY2JEYXRhCiApIHsKIAlEV09SRAlyZXQ7Ci0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdTZXRWYWx1ZSglbHgsJXMsJWxkLCVzLCVsZClcbi0+IiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1NldFZhbHVlKCV4LCVzLCVsZCwlcywlbGQpXG4tPiIsCiAJCWhrZXksbHBzelN1YktleSxkd1R5cGUsbHBzekRhdGEsY2JEYXRhCiAJKTsKIAlyZXQ9UmVnU2V0VmFsdWVBKGhrZXksbHBzelN1YktleSxkd1R5cGUsbHBzekRhdGEsY2JEYXRhKTsKQEAgLTE1MzAsOCArMTUwOCw3IEBACiAgKi8KIAogLyogUmVnRW51bUtleUV4VwkJW0FEVkFQSTMyLjEzOV0gKi8KLVdJTkFQSSBEV09SRAotUmVnRW51bUtleUV4VygKK0RXT1JEIFJlZ0VudW1LZXlFeFcoCiAJSEtFWQloa2V5LAogCURXT1JECWlTdWJrZXksCiAJTFBXU1RSCWxwc3pOYW1lLApAQCAtMTU0Myw3ICsxNTIwLDcgQEAKICkgewogCUxQS0VZU1RSVUNUCWxwa2V5LGxweGtleTsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRW51bUtleUV4VyglbHgsJWxkLCVwLCVsZCwlcCwlcCwlcCwlcClcbiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdFbnVtS2V5RXhXKCV4LCVsZCwlcCwlbGQsJXAsJXAsJXAsJXApXG4iLAogCQloa2V5LGlTdWJrZXksbHBzek5hbWUsKmxwY2NoTmFtZSxscGR3UmVzZXJ2ZWQsbHBzekNsYXNzLGxwY2NoQ2xhc3MsZnQKIAkpOwogCWxwa2V5PWxvb2t1cF9oa2V5KGhrZXkpOwpAQCAtMTU3MSw4ICsxNTQ4LDcgQEAKIH0KIAogLyogUmVnRW51bUtleVcJCQlbQURWQVBJMzIuMTQwXSAqLwotV0lOQVBJIERXT1JECi1SZWdFbnVtS2V5VygKK0RXT1JEIFJlZ0VudW1LZXlXKAogCUhLRVkJaGtleSwKIAlEV09SRAlpU3Via2V5LAogCUxQV1NUUglscHN6TmFtZSwKQEAgLTE1ODAsMTQgKzE1NTYsMTMgQEAKICkgewogCUZJTEVUSU1FCWZ0OwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdFbnVtS2V5VyglbHgsJWxkLCVwLCVsZClcbi0+IiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1LZXlXKCV4LCVsZCwlcCwlbGQpXG4tPiIsCiAJCWhrZXksaVN1YmtleSxscHN6TmFtZSxscGNjaE5hbWUKIAkpOwogCXJldHVybiBSZWdFbnVtS2V5RXhXKGhrZXksaVN1YmtleSxscHN6TmFtZSwmbHBjY2hOYW1lLE5VTEwsTlVMTCxOVUxMLCZmdCk7CiB9CiAvKiBSZWdFbnVtS2V5RXhBCQlbQURWQVBJMzIuMTM4XSAqLwotV0lOQVBJIERXT1JECi1SZWdFbnVtS2V5RXhBKAorRFdPUkQgUmVnRW51bUtleUV4QSgKIAlIS0VZCWhrZXksCiAJRFdPUkQJaVN1YmtleSwKIAlMUFNUUglscHN6TmFtZSwKQEAgLTE2MDEsNyArMTU3Niw3IEBACiAJTFBXU1RSCWxwc3pOYW1lVyxscHN6Q2xhc3NXOwogCiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1LZXlFeEEoJWx4LCVsZCwlcCwlbGQsJXAsJXAsJXAsJXApXG4tPiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdFbnVtS2V5RXhBKCV4LCVsZCwlcCwlbGQsJXAsJXAsJXAsJXApXG4tPiIsCiAJCWhrZXksaVN1YmtleSxscHN6TmFtZSwqbHBjY2hOYW1lLGxwZHdSZXNlcnZlZCxscHN6Q2xhc3MsbHBjY2hDbGFzcyxmdAogCSk7CiAJaWYgKGxwc3pOYW1lKSB7CkBAIC0xNjQ0LDggKzE2MTksNyBAQAogfQogCiAvKiBSZWdFbnVtS2V5QQkJCVtBRFZBUEkzMi4xMzddICovCi1XSU5BUEkgRFdPUkQKLVJlZ0VudW1LZXlBKAorRFdPUkQgUmVnRW51bUtleUEoCiAJSEtFWQloa2V5LAogCURXT1JECWlTdWJrZXksCiAJTFBTVFIJbHBzek5hbWUsCkBAIC0xNjUzLDcgKzE2MjcsNyBAQAogKSB7CiAJRklMRVRJTUUJZnQ7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1LZXlBKCVseCwlbGQsJXAsJWxkKVxuLT4iLAorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRW51bUtleUEoJXgsJWxkLCVwLCVsZClcbi0+IiwKIAkJaGtleSxpU3Via2V5LGxwc3pOYW1lLGxwY2NoTmFtZQogCSk7CiAJcmV0dXJuCVJlZ0VudW1LZXlFeEEoCkBAIC0xNjY5LDE0ICsxNjQzLDEzIEBACiB9CiAKIC8qIFJlZ0VudW1LZXkJCQlbU0hFTEwuN10gW0tFUk5FTC4yMTZdICovCi1XSU5BUEkgRFdPUkQKLVJlZ0VudW1LZXkoCitEV09SRCBSZWdFbnVtS2V5KAogCUhLRVkJaGtleSwKIAlEV09SRAlpU3Via2V5LAogCUxQU1RSCWxwc3pOYW1lLAogCURXT1JECWxwY2NoTmFtZQogKSB7Ci0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdFbnVtS2V5KCVseCwlbGQsJXAsJWxkKVxuLT4iLAorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRW51bUtleSgleCwlbGQsJXAsJWxkKVxuLT4iLAogCQloa2V5LGlTdWJrZXksbHBzek5hbWUsbHBjY2hOYW1lCiAJKTsKIAlyZXR1cm4gUmVnRW51bUtleUEoaGtleSxpU3Via2V5LGxwc3pOYW1lLGxwY2NoTmFtZSk7CkBAIC0xNjkwLDggKzE2NjMsNyBAQAogICovCiAKIC8qIFJlZ0VudW1WYWx1ZVcJCVtBRFZBUEkzMi4xNDJdICovCi1XSU5BUEkgRFdPUkQKLVJlZ0VudW1WYWx1ZVcoCitEV09SRCBSZWdFbnVtVmFsdWVXKAogCUhLRVkJaGtleSwKIAlEV09SRAlpVmFsdWUsCiAJTFBXU1RSCWxwc3pWYWx1ZSwKQEAgLTE3MDQsNyArMTY3Niw3IEBACiAJTFBLRVlTVFJVQ1QJbHBrZXk7CiAJTFBLRVlWQUxVRQl2YWw7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1WYWx1ZVcoJWxkLCVsZCwlcCwlcCwlcCwlcCwlcCwlcClcbiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdFbnVtVmFsdWVXKCV4LCVsZCwlcCwlcCwlcCwlcCwlcCwlcClcbiIsCiAJCWhrZXksaVZhbHVlLGxwc3pWYWx1ZSxscGNjaFZhbHVlLGxwZFJlc2VydmVkLGxwZHdUeXBlLGxwYkRhdGEsbHBjYkRhdGEKIAkpOwogCWxwa2V5ID0gbG9va3VwX2hrZXkoaGtleSk7CkBAIC0xNzM3LDggKzE3MDksNyBAQAogfQogCiAvKiBSZWdFbnVtVmFsdWVBCQlbQURWQVBJMzIuMTQxXSAqLwotV0lOQVBJIERXT1JECi1SZWdFbnVtVmFsdWVBKAorRFdPUkQgUmVnRW51bVZhbHVlQSgKIAlIS0VZCWhrZXksCiAJRFdPUkQJaVZhbHVlLAogCUxQU1RSCWxwc3pWYWx1ZSwKQEAgLTE3NTIsNyArMTcyMyw3IEBACiAJTFBCWVRFCWxwYkRhdGFXOwogCURXT1JECXJldCxscGNiRGF0YVc7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1WYWx1ZUEoJWxkLCVsZCwlcCwlcCwlcCwlcCwlcCwlcClcbiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdFbnVtVmFsdWVBKCV4LCVsZCwlcCwlcCwlcCwlcCwlcCwlcClcbiIsCiAJCWhrZXksaVZhbHVlLGxwc3pWYWx1ZSxscGNjaFZhbHVlLGxwZFJlc2VydmVkLGxwZHdUeXBlLGxwYkRhdGEsbHBjYkRhdGEKIAkpOwogCkBAIC0xNzk1LDggKzE3NjYsNyBAQAogfQogCiAvKiBSZWdFbnVtVmFsdWUJCQlbS0VSTkVMLjIyM10gKi8KLVdJTkFQSSBEV09SRAotUmVnRW51bVZhbHVlKAorRFdPUkQgUmVnRW51bVZhbHVlKAogCUhLRVkJaGtleSwKIAlEV09SRAlpVmFsdWUsCiAJTFBTVFIJbHBzelZhbHVlLApAQCAtMTgwNiw3ICsxNzc2LDcgQEAKIAlMUEJZVEUJbHBiRGF0YSwKIAlMUERXT1JECWxwY2JEYXRhCiApIHsKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1WYWx1ZSglbGQsJWxkLCVwLCVwLCVwLCVwLCVwLCVwKVxuIiwKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0VudW1WYWx1ZSgleCwlbGQsJXAsJXAsJXAsJXAsJXAsJXApXG4iLAogCQloa2V5LGlWYWx1ZSxscHN6VmFsdWUsbHBjY2hWYWx1ZSxscGRSZXNlcnZlZCxscGR3VHlwZSxscGJEYXRhLGxwY2JEYXRhCiAJKTsKIAlyZXR1cm4gUmVnRW51bVZhbHVlQSgKQEAgLTE4MjUsOSArMTc5NSw4IEBACiAgKiAgQ2xvc2UgcmVnaXN0cnkga2V5CiAgKi8KIC8qIFJlZ0Nsb3NlS2V5CQkJW1NIRUxMLjNdIFtLRVJORUwuMjIwXSBbQURWQVBJMzIuMTI2XSAqLwotV0lOQVBJIERXT1JECi1SZWdDbG9zZUtleShIS0VZIGhrZXkpIHsKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0Nsb3NlS2V5KCVsZClcbiIsaGtleSk7CitEV09SRCBSZWdDbG9zZUtleShIS0VZIGhrZXkpIHsKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0Nsb3NlS2V5KCV4KVxuIixoa2V5KTsKIAlyZW1vdmVfaGFuZGxlKGhrZXkpOwogCXJldHVybiBFUlJPUl9TVUNDRVNTOwogfQpAQCAtMTgzOCwxMyArMTgwNywxMiBAQAogICogUmVnRGVsZXRlS2V5IC0+IFJlZ0RlbGV0ZUtleUEgLT4gUmVnRGVsZXRlS2V5VwogICovCiAvKiBSZWdEZWxldGVLZXlXCQlbQURWQVBJMzIuMTM0XSAqLwotV0lOQVBJIERXT1JECi1SZWdEZWxldGVLZXlXKEhLRVkgaGtleSxMUFdTVFIgbHBzelN1YktleSkgeworRFdPUkQgUmVnRGVsZXRlS2V5VyhIS0VZIGhrZXksTFBXU1RSIGxwc3pTdWJLZXkpIHsKIAlMUEtFWVNUUlVDVAkqbHBscFByZXZLZXksbHBOZXh0S2V5LGxweGtleTsKIAlMUFdTVFIJCSp3cHM7CiAJaW50CQl3cGMsaTsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRGVsZXRlS2V5VyglbGQsJXMpXG4iLAorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRGVsZXRlS2V5VygleCwlcylcbiIsCiAJCWhrZXksVzJDKGxwc3pTdWJLZXksMCkKIAkpOwogCWxwTmV4dEtleQk9IGxvb2t1cF9oa2V5KGhrZXkpOwpAQCAtMTg5NSwxMiArMTg2MywxMSBAQAogfQogCiAvKiBSZWdEZWxldGVLZXlBCQlbQURWQVBJMzIuMTMzXSAqLwotV0lOQVBJIERXT1JECi1SZWdEZWxldGVLZXlBKEhLRVkgaGtleSxMUENTVFIgbHBzelN1YktleSkgeworRFdPUkQgUmVnRGVsZXRlS2V5QShIS0VZIGhrZXksTFBDU1RSIGxwc3pTdWJLZXkpIHsKIAlMUFdTVFIJbHBzelN1YktleVc7CiAJRFdPUkQJcmV0OwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdEZWxldGVLZXlBKCVsZCwlcylcbiIsCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdEZWxldGVLZXlBKCV4LCVzKVxuIiwKIAkJaGtleSxscHN6U3ViS2V5CiAJKTsKIAlscHN6U3ViS2V5Vz1zdHJkdXBBMlcobHBzelN1YktleSk7CkBAIC0xOTEwLDkgKzE4NzcsOCBAQAogfQogCiAvKiBSZWdEZWxldGVLZXkJCQlbU0hFTEwuNF0gW0tFUk5FTC4yMTldICovCi1XSU5BUEkgRFdPUkQKLVJlZ0RlbGV0ZUtleShIS0VZIGhrZXksTFBDU1RSIGxwc3pTdWJLZXkpIHsKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0RlbGV0ZUtleSglbGQsJXMpXG4iLAorRFdPUkQgUmVnRGVsZXRlS2V5KEhLRVkgaGtleSxMUENTVFIgbHBzelN1YktleSkgeworCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRGVsZXRlS2V5KCV4LCVzKVxuIiwKIAkJaGtleSxscHN6U3ViS2V5CiAJKTsKIAlyZXR1cm4gUmVnRGVsZXRlS2V5QShoa2V5LGxwc3pTdWJLZXkpOwpAQCAtMTkyNSwxMyArMTg5MSwxMiBAQAogICogUmVnRGVsZXRlVmFsdWUgLT4gUmVnRGVsZXRlVmFsdWVBIC0+IFJlZ0RlbGV0ZVZhbHVlVwogICovCiAvKiBSZWdEZWxldGVWYWx1ZVcJCVtBRFZBUEkzMi4xMzZdICovCi1XSU5BUEkgRFdPUkQKLVJlZ0RlbGV0ZVZhbHVlVyhIS0VZIGhrZXksTFBXU1RSIGxwc3pWYWx1ZSkgeworRFdPUkQgUmVnRGVsZXRlVmFsdWVXKEhLRVkgaGtleSxMUFdTVFIgbHBzelZhbHVlKSB7CiAJRFdPUkQJCWk7CiAJTFBLRVlTVFJVQ1QJbHBrZXk7CiAJTFBLRVlWQUxVRQl2YWw7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0RlbGV0ZVZhbHVlVyglbGQsJXMpXG4iLAorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRGVsZXRlVmFsdWVXKCV4LCVzKVxuIiwKIAkJaGtleSxXMkMobHBzelZhbHVlLDApCiAJKTsKIAlscGtleT1sb29rdXBfaGtleShoa2V5KTsKQEAgLTE5NjUsMTQgKzE5MzAsMTEgQEAKIH0KIAogLyogUmVnRGVsZXRlVmFsdWVBCQlbQURWQVBJMzIuMTM1XSAqLwotV0lOQVBJIERXT1JECi1SZWdEZWxldGVWYWx1ZUEoSEtFWSBoa2V5LExQU1RSIGxwc3pWYWx1ZSkgeworRFdPUkQgUmVnRGVsZXRlVmFsdWVBKEhLRVkgaGtleSxMUFNUUiBscHN6VmFsdWUpIHsKIAlMUFdTVFIJbHBzelZhbHVlVzsKIAlEV09SRAlyZXQ7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ0RlbGV0ZVZhbHVlQSglbGQsJXMpXG4iLAotCQloa2V5LGxwc3pWYWx1ZQotCSk7CisJZHByaW50Zl9yZWcoIHN0ZGRlYiwgIlJlZ0RlbGV0ZVZhbHVlQSgleCwlcylcbiIsIGhrZXksbHBzelZhbHVlICk7CiAJaWYgKGxwc3pWYWx1ZSkKIAkJbHBzelZhbHVlVz1zdHJkdXBBMlcobHBzelZhbHVlKTsKIAllbHNlCkBAIC0xOTg0LDI2ICsxOTQ2LDIxIEBACiB9CiAKIC8qIFJlZ0RlbGV0ZVZhbHVlCQlbS0VSTkVMLjIyMl0gKi8KLVdJTkFQSSBEV09SRAotUmVnRGVsZXRlVmFsdWUoSEtFWSBoa2V5LExQU1RSIGxwc3pWYWx1ZSkgewotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRGVsZXRlVmFsdWUoJWxkLCVzKVxuIiwKLQkJaGtleSxscHN6VmFsdWUKLQkpOworRFdPUkQgUmVnRGVsZXRlVmFsdWUoSEtFWSBoa2V5LExQU1RSIGxwc3pWYWx1ZSkgeworCWRwcmludGZfcmVnKCBzdGRkZWIsIlJlZ0RlbGV0ZVZhbHVlKCV4LCVzKVxuIiwgaGtleSxscHN6VmFsdWUgKTsKIAlyZXR1cm4gUmVnRGVsZXRlVmFsdWVBKGhrZXksbHBzelZhbHVlKTsKIH0KIAogLyogUmVnRmx1c2hLZXkJCQlbQURWQVBJMzIuMTQzXSBbS0VSTkVMLjIyN10gKi8KLVdJTkFQSSBEV09SRAotUmVnRmx1c2hLZXkoSEtFWSBoa2V5KSB7Ci0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdGbHVzaEtleSglbGQpLCBTVFVCLlxuIixoa2V5KTsKK0RXT1JEIFJlZ0ZsdXNoS2V5KEhLRVkgaGtleSkgeworCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnRmx1c2hLZXkoJXgpLCBTVFVCLlxuIixoa2V5KTsKIAlyZXR1cm4gU0hFTExfRVJST1JfU1VDQ0VTUzsKIH0KIAogLyogRklYTUU6IGxwY2NoWFhYWCAuLi4gaXMgdGhpcyBjb3VudGluZyBpbiBXQ0hBUlMgb3IgaW4gQllURXMgPz8gKi8KIAogLyogUmVnUXVlcnlJbmZvS2V5VwkJW0FEVkFQSTMyLjE1M10gKi8KLVdJTkFQSSBEV09SRAotUmVnUXVlcnlJbmZvS2V5VygKK0RXT1JEIFJlZ1F1ZXJ5SW5mb0tleVcoCiAJSEtFWQloa2V5LAogCUxQV1NUUglscHN6Q2xhc3MsCiAJTFBEV09SRAlscGNjaENsYXNzLApAQCAtMjAyMSw3ICsxOTc4LDcgQEAKIAlpbnQJCW5yb2ZrZXlzLG1heHN1YmtleSxtYXhjbGFzcyxtYXh2YWx1ZXMsbWF4dm5hbWUsbWF4dmRhdGE7CiAJaW50CQlpOwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeUluZm9LZXlXKCVseCwuLi4uLi4pXG4iLGhrZXkpOworCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlJbmZvS2V5VygleCwuLi4uLi4pXG4iLGhrZXkpOwogCWxwa2V5PWxvb2t1cF9oa2V5KGhrZXkpOwogCWlmICghbHBrZXkpCiAJCXJldHVybiBTSEVMTF9FUlJPUl9CQURLRVk7CkBAIC0yMDc5LDggKzIwMzYsNyBAQAogfQogCiAvKiBSZWdRdWVyeUluZm9LZXlBCQlbQURWQVBJMzIuMTUyXSAqLwotV0lOQVBJIERXT1JECi1SZWdRdWVyeUluZm9LZXlBKAorRFdPUkQgUmVnUXVlcnlJbmZvS2V5QSgKIAlIS0VZCWhrZXksCiAJTFBTVFIJbHBzekNsYXNzLAogCUxQRFdPUkQJbHBjY2hDbGFzcywKQEAgLTIwOTcsNyArMjA1Myw3IEBACiAJTFBXU1RSCQlscHN6Q2xhc3NXOwogCURXT1JECQlyZXQ7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5SW5mb0tleUEoJWx4LC4uLi4uLilcbiIsaGtleSk7CisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeUluZm9LZXlBKCV4LC4uLi4uLilcbiIsaGtleSk7CiAJaWYgKGxwc3pDbGFzcykgewogCQkqbHBjY2hDbGFzcyo9IDI7CiAJCWxwc3pDbGFzc1cgID0gKExQV1NUUil4bWFsbG9jKCpscGNjaENsYXNzKTsKZGlmZiAtLWdpdCBhL21pc2Mvc2hlbGwuYyBiL21pc2Mvc2hlbGwuYwppbmRleCA2NmZkMjU4Li5kZDJkNTkxIDEwMDY0NAotLS0gYS9taXNjL3NoZWxsLmMKKysrIGIvbWlzYy9zaGVsbC5jCkBAIC01MCw3ICs1MCw3IEBACiAgICAgZHByaW50Zl9yZWcoc3RkZGViLCJEcmFnUXVlcnlGaWxlKCUwNHgsICVpLCAlcCwgJXUpXG4iLAogCQloRHJvcCx3RmlsZSxscHN6RmlsZSx3TGVuZ3RoKTsKICAgICAKLSAgICBscERyb3BGaWxlU3RydWN0ID0gKExQRFJPUEZJTEVTVFJVQ1QpIEdsb2JhbExvY2soaERyb3ApOyAKKyAgICBscERyb3BGaWxlU3RydWN0ID0gKExQRFJPUEZJTEVTVFJVQ1QpIEdsb2JhbExvY2sxNihoRHJvcCk7IAogICAgIGlmKCFscERyb3BGaWxlU3RydWN0KQogICAgIHsKIAlkcHJpbnRmX3JlZyhzdGRkZWIsIkRyYWdRdWVyeUZpbGU6IHVuYWJsZSB0byBsb2NrIGhhbmRsZSFcbiIpOwpAQCAtNzMsNyArNzMsNyBAQAogICAgIHN0cm5jcHkobHBzekZpbGUsIGxwQ3VycmVudCwgaSk7CiAgICAgbHBzekZpbGVbaV0gPSAnXDAnOwogICAgIAotICAgIEdsb2JhbFVubG9jayhoRHJvcCk7CisgICAgR2xvYmFsVW5sb2NrMTYoaERyb3ApOwogICAgIHJldHVybiBpOwogfQogCkBAIC04MywyNCArODMsMjQgQEAKICAqLwogdm9pZCBEcmFnRmluaXNoKEhEUk9QIGgpCiB7Ci0gICAgR2xvYmFsRnJlZSgoSEdMT0JBTCloKTsKKyAgICBHbG9iYWxGcmVlMTYoKEhHTE9CQUwxNiloKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJRHJhZ1F1ZXJ5UG9pbnQJCVtTSEVMTC4xM10KICAqLwotQk9PTCBEcmFnUXVlcnlQb2ludChIRFJPUCBoRHJvcCwgUE9JTlQgRkFSICpwKQorQk9PTCBEcmFnUXVlcnlQb2ludChIRFJPUCBoRHJvcCwgUE9JTlQgKnApCiB7CiAgICAgTFBEUk9QRklMRVNUUlVDVCBscERyb3BGaWxlU3RydWN0OyAgCiAgICAgQk9PTCAgICAgICAgICAgICBiUmV0OwogCi0gICAgbHBEcm9wRmlsZVN0cnVjdCA9IChMUERST1BGSUxFU1RSVUNUKSBHbG9iYWxMb2NrKGhEcm9wKTsKKyAgICBscERyb3BGaWxlU3RydWN0ID0gKExQRFJPUEZJTEVTVFJVQ1QpIEdsb2JhbExvY2sxNihoRHJvcCk7CiAKICAgICBtZW1jcHkocCwmbHBEcm9wRmlsZVN0cnVjdC0+cHRNb3VzZVBvcyxzaXplb2YoUE9JTlQpKTsKICAgICBiUmV0ID0gbHBEcm9wRmlsZVN0cnVjdC0+ZkluTm9uQ2xpZW50QXJlYTsKIAotICAgIEdsb2JhbFVubG9jayhoRHJvcCk7CisgICAgR2xvYmFsVW5sb2NrMTYoaERyb3ApOwogICAgIHJldHVybiBiUmV0OwogfQogCkBAIC0xNzksMTEgKzE3OSwxMSBAQAogCSAgfQogCX0gZWxzZSB7CiAJICBmcHJpbnRmKHN0ZGRlYiwiU2hlbGxFeGVjdXRlOiBObyAlc1xcc2hlbGxcXCVzXFxjb21tYW5kIGZvdW5kIGZvciBcIiVzXCIgc3VmZml4LlxuIixzdWJjbGFzcyxscE9wZXJhdGlvbixwKTsKLQkgIHJldHVybiAoSElOU1RBTkNFKTE0OyAvKiB1bmtub3duIHR5cGUgKi8KKwkgIHJldHVybiAoSElOU1RBTkNFKTMxOyAvKiB1bmtub3duIHR5cGUgKi8KIAl9CiAgICAgICB9IGVsc2UgewogCWZwcmludGYoc3RkZGViLCJTaGVsbEV4ZWN1dGU6IE5vIG9wZXJhdGlvbiBmb3VuZCBmb3IgXCIlc1wiIHN1ZmZpeC5cbiIscCk7Ci0JcmV0dXJuIChISU5TVEFOQ0UpMTQ7IC8qIGZpbGUgbm90IGZvdW5kICovCisJcmV0dXJuIChISU5TVEFOQ0UpMzE7IC8qIGZpbGUgbm90IGZvdW5kICovCiAgICAgICB9CiAgICAgfQogICAgIGRwcmludGZfZXhlYyhzdGRkZWIsIlNoZWxsRXhlY3V0ZTpzdGFydGluZyAlc1xuIixjbWQpOwpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgICAgIHJldHVybiAzMTsJCS8qIG5vIGFzc29jaWF0aW9uICovCiB9CiAKLXN0YXRpYyBjaGFyIEFwcE5hbWVbMTI4XSwgQXBwTWlzY1s5MDZdOworc3RhdGljIGNoYXIgQXBwTmFtZVsxMjhdLCBBcHBNaXNjWzE1MzZdOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJQWJvdXREbGdQcm9jCQlbU0hFTEwuMzNdCkBAIC0zMTMsNyArMzEzLDcgQEAKICBCWVRFKglwdHI7CiAgSEFORExFIGhhbmRsZSA9IERpcmVjdFJlc0FsbG9jKCBoSW5zdCwgMHgxMCwgKERXT1JEKXBOSW5mby0+bGVuZ3RoIDw8IHNpemVTaGlmdCk7CiAKLSBpZiggKHB0ciA9IChCWVRFKilHbG9iYWxMb2NrKCBoYW5kbGUgKSkgKQorIGlmKCAocHRyID0gKEJZVEUqKUdsb2JhbExvY2sxNiggaGFuZGxlICkpICkKICAgIHsKICAgICBfbGxzZWVrKCBoRmlsZSwgKERXT1JEKXBOSW5mby0+b2Zmc2V0IDw8IHNpemVTaGlmdCwgU0VFS19TRVQpOwogICAgICBGSUxFX1JlYWQoIGhGaWxlLCAoY2hhciopcHRyLCBwTkluZm8tPmxlbmd0aCA8PCBzaXplU2hpZnQpOwpAQCAtMzQwLDggKzM0MCw4IEBACiAKICAgaWYoIGhGaWxlID09IEhGSUxFX0VSUk9SIHx8ICFuICkgcmV0dXJuIDA7CiAKLSAgaFJldCA9IEdsb2JhbEFsbG9jKCBHTUVNX01PVkVBQkxFLCBzaXplb2YoSElDT04pKm4pOwotICBSZXRQdHIgPSAoSElDT04qKUdsb2JhbExvY2soaFJldCk7CisgIGhSZXQgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX0ZJWEVELCBzaXplb2YoSElDT04pKm4pOworICBSZXRQdHIgPSAoSElDT04qKUdsb2JhbExvY2sxNihoUmV0KTsKIAogICpSZXRQdHIgPSAobiA9PSAweEZGRkYpPyAwOiAxOwkJCQkvKiBlcnJvciByZXR1cm4gdmFsdWVzICovCiAKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQkgICAgICAgaEljb24gPSBTSEVMTF9Mb2FkUmVzb3VyY2UoIGhJbnN0YW5jZSwgaEZpbGUsIHBJY29uRGlyICsgKGkgLSBuSWNvbkluZGV4KSwgCiAJCQkJCQkJCQkJICooV09SRCopcERhdGEgKTsKIAkJICAgICAgIFJldFB0cltpLW5JY29uSW5kZXhdID0gR2V0SWNvbklEKCBoSWNvbiwgMyApOwotCQkgICAgICAgR2xvYmFsRnJlZShoSWNvbik7IAorCQkgICAgICAgR2xvYmFsRnJlZTE2KGhJY29uKTsgCiAJCSAgICAgfQogCiAJCSAgZm9yKCBpY29uID0gbkljb25JbmRleDsgaWNvbiA8IG5JY29uSW5kZXggKyBuOyBpY29uKysgKQpAQCAtNDI5LDEwICs0MjksMTAgQEAKIAogICBpZiggaGFuZGxlICkKICAgICB7Ci0gICAgICBISUNPTiogcHRyID0gKEhJQ09OKilHbG9iYWxMb2NrKGhhbmRsZSk7CisgICAgICBISUNPTiogcHRyID0gKEhJQ09OKilHbG9iYWxMb2NrMTYoaGFuZGxlKTsKICAgICAgIEhJQ09OICBoSWNvbiA9ICpwdHI7CiAKLSAgICAgIEdsb2JhbEZyZWUoaGFuZGxlKTsKKyAgICAgIEdsb2JhbEZyZWUxNihoYW5kbGUpOwogICAgICAgcmV0dXJuIGhJY29uOwogICAgIH0KICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9taXNjL3NvdW5kLmMgYi9taXNjL3NvdW5kLmMKaW5kZXggOTkwYmI3Mi4uOWI3MjQxNiAxMDA2NDQKLS0tIGEvbWlzYy9zb3VuZC5jCisrKyBiL21pc2Mvc291bmQuYwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotTFBJTlQgR2V0VGhyZXNob2xkRXZlbnQodm9pZCkKK0xQSU5UMTYgR2V0VGhyZXNob2xkRXZlbnQodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIkdldFRocmVzaG9sZEV2ZW50KClcbiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21pc2MvdXNlci5jIGIvbWlzYy91c2VyLmMKaW5kZXggZGM4ZGM4ZC4uZmJhYTg5NyAxMDA2NDQKLS0tIGEvbWlzYy91c2VyLmMKKysrIGIvbWlzYy91c2VyLmMKQEAgLTEyLDE1ICsxMiwxNSBAQAogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ0YXNrLmgiCiAjaW5jbHVkZSAicXVldWUuaCIKLSNpbmNsdWRlICJjbGFzcy5oIgogI2luY2x1ZGUgIndpbi5oIgogI2luY2x1ZGUgImhvb2suaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInRvb2xoZWxwLmgiCiAKLSNpZm5kZWYgV0lORUxJQgogV09SRCBVU0VSX0hlYXBTZWwgPSAwOwogCisjaWZuZGVmIFdJTkVMSUIKKwogZXh0ZXJuIHZvaWQgCVRJTUVSX051a2VUaW1lcnMoSFdORCwgSFFVRVVFICk7CiBleHRlcm4gSFRBU0sJVEFTS19HZXROZXh0VGFzayhIVEFTSyk7CiAKZGlmZiAtLWdpdCBhL21pc2Mvd2luc29ja2V0LmMgYi9taXNjL3dpbnNvY2tldC5jCmluZGV4IGY1MmM1ODguLjBlYmZhY2EgMTAwNjQ0Ci0tLSBhL21pc2Mvd2luc29ja2V0LmMKKysrIGIvbWlzYy93aW5zb2NrZXQuYwpAQCAtMTEwNCw4ICsxMTA0LDggQEAKIH0KIAogCi1IQU5ETEUgV1NBQXN5bmNHZXRIb3N0QnlBZGRyKEhXTkQgaFduZCwgdV9pbnQgd01zZywgY29uc3QgY2hhciAqYWRkciwKLQkJIElOVCBsZW4sIElOVCB0eXBlLCBjaGFyICpidWYsIElOVCBidWZsZW4pCitIQU5ETEUgV1NBQXN5bmNHZXRIb3N0QnlBZGRyKEhXTkQgaFduZCwgdV9pbnQgd01zZywgTFBDU1RSIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBsZW4sIElOVCB0eXBlLCBMUFNUUiBidWYsIElOVCBidWZsZW4pCiB7CiAJSEFORExFIGhhbmRsZTsKIAlzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKQEAgLTExMzksOCArMTEzOSw4IEBACiB9CiAKIAotSEFORExFIFdTQUFzeW5jR2V0SG9zdEJ5TmFtZShIV05EIGhXbmQsIHVfaW50IHdNc2csIGNvbnN0IGNoYXIgKm5hbWUsIAotCQkJY2hhciAqYnVmLCBJTlQgYnVmbGVuKQorSEFORExFIFdTQUFzeW5jR2V0SG9zdEJ5TmFtZShIV05EIGhXbmQsIHVfaW50IHdNc2csIExQQ1NUUiBuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTVFIgYnVmLCBJTlQgYnVmbGVuKQogewogCUhBTkRMRSBoYW5kbGU7CiAJc3RydWN0IGhvc3RlbnQgKmhvc3Q7CkBAIC0xMTc0LDggKzExNzQsOCBAQAogfSAgICAgICAgICAgICAgICAgICAgIAogCiAKLUhBTkRMRSBXU0FBc3luY0dldFByb3RvQnlOYW1lKEhXTkQgaFduZCwgdV9pbnQgd01zZywgY29uc3QgY2hhciAqbmFtZSwgCi0JCQljaGFyICpidWYsIElOVCBidWZsZW4pCitIQU5ETEUgV1NBQXN5bmNHZXRQcm90b0J5TmFtZShIV05EIGhXbmQsIHVfaW50IHdNc2csIExQQ1NUUiBuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZiwgSU5UIGJ1ZmxlbikKIHsKIAlIQU5ETEUgaGFuZGxlOwogCXN0cnVjdCBwcm90b2VudCAqcHJvdG87CkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCiAKIEhBTkRMRSBXU0FBc3luY0dldFByb3RvQnlOdW1iZXIoSFdORCBoV25kLCB1X2ludCB3TXNnLCBJTlQgbnVtYmVyLCAKLQkJCWNoYXIgKmJ1ZiwgSU5UIGJ1ZmxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTVFIgYnVmLCBJTlQgYnVmbGVuKQogewogCUhBTkRMRSBoYW5kbGU7CiAJc3RydWN0IHByb3RvZW50ICpwcm90bzsKQEAgLTEyNDQsOCArMTI0NCw4IEBACiB9CiAKIAotSEFORExFIFdTQUFzeW5jR2V0U2VydkJ5TmFtZShIV05EIGhXbmQsIHVfaW50IHdNc2csIGNvbnN0IGNoYXIgKm5hbWUsIAotCQkJY29uc3QgY2hhciAqcHJvdG8sIGNoYXIgKmJ1ZiwgSU5UIGJ1ZmxlbikKK0hBTkRMRSBXU0FBc3luY0dldFNlcnZCeU5hbWUoSFdORCBoV25kLCB1X2ludCB3TXNnLCBMUENTVFIgbmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1NUUiBwcm90bywgTFBTVFIgYnVmLCBJTlQgYnVmbGVuKQogewogCUhBTkRMRSBoYW5kbGU7CiAJc3RydWN0IHNlcnZlbnQgKnNlcnZpY2U7CkBAIC0xMjc5LDggKzEyNzksOCBAQAogfQogCiAKLUhBTkRMRSBXU0FBc3luY0dldFNlcnZCeVBvcnQoSFdORCBoV25kLCB1X2ludCB3TXNnLCBJTlQgcG9ydCwgY29uc3QgY2hhciAKLQkJCSpwcm90bywgY2hhciAqYnVmLCBJTlQgYnVmbGVuKQorSEFORExFIFdTQUFzeW5jR2V0U2VydkJ5UG9ydChIV05EIGhXbmQsIHVfaW50IHdNc2csIElOVCBwb3J0LCBMUENTVFIgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGJ1ZiwgSU5UIGJ1ZmxlbikKIHsKIAlIQU5ETEUgaGFuZGxlOwogCXN0cnVjdCBzZXJ2ZW50ICpzZXJ2aWNlOwpAQCAtMTUwOCwxMCArMTUwOCwxMCBAQAogCiAJLyogYWxsb2Mgd2luc29jayBoZWFwICovCiAKLSAgICBpZiAoKEhlYXBIYW5kbGUgPSBHbG9iYWxBbGxvYyhHTUVNX0ZJWEVELHNpemVvZihzdHJ1Y3QgV2luU29ja0hlYXApKSkgPT0gMCkKKyAgICBpZiAoKEhlYXBIYW5kbGUgPSBHbG9iYWxBbGxvYzE2KEdNRU1fRklYRUQsc2l6ZW9mKHN0cnVjdCBXaW5Tb2NrSGVhcCkpKSA9PSAwKQogCXJldHVybiBXU0FTWVNOT1RSRUFEWTsKIAotICAgIEhlYXAgPSAoc3RydWN0IFdpblNvY2tIZWFwICopIEdsb2JhbExvY2soSGVhcEhhbmRsZSk7CisgICAgSGVhcCA9IChzdHJ1Y3QgV2luU29ja0hlYXAgKikgR2xvYmFsTG9jazE2KEhlYXBIYW5kbGUpOwogCiAgICAgLyogcmV0dXJuIHdpbnNvY2sgaW5mb3JtYXRpb24gKi8KICAgICBtZW1jcHkobHBXU0FEYXRhLCAmV0lOU09DS19kYXRhLCBzaXplb2YoV0lOU09DS19kYXRhKSk7IApkaWZmIC0tZ2l0IGEvbWlzY2VtdS9kb3NtZW0uYyBiL21pc2NlbXUvZG9zbWVtLmMKaW5kZXggNmZkNTJlMi4uOWJjZjMxMSAxMDA2NDQKLS0tIGEvbWlzY2VtdS9kb3NtZW0uYworKysgYi9taXNjZW11L2Rvc21lbS5jCkBAIC0xNTQsNyArMTU0LDcgQEAKICAqLwogdm9pZCBET1NNRU1fRmlsbEJpb3NTZWdtZW50KHZvaWQpCiB7Ci0gICAgcEJpb3NEYXRhID0gKEJJT1NEQVRBICopR2xvYmFsTG9jayggRE9TTUVNX0Jpb3NTZWcgKTsKKyAgICBwQmlvc0RhdGEgPSAoQklPU0RBVEEgKilHbG9iYWxMb2NrMTYoIERPU01FTV9CaW9zU2VnICk7CiAKICAgICAgIC8qIENsZWFyIGFsbCB1bnVzZWQgdmFsdWVzICovCiAgICAgbWVtc2V0KCBwQmlvc0RhdGEsIDAsIHNpemVvZigqcEJpb3NEYXRhKSApOwpkaWZmIC0tZ2l0IGEvbWlzY2VtdS9kcG1pLmMgYi9taXNjZW11L2RwbWkuYwppbmRleCAyZjkzMTlkLi4yOTFhZjc1IDEwMDY0NAotLS0gYS9taXNjZW11L2RwbWkuYworKysgYi9taXNjZW11L2RwbWkuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKICAgICBjYXNlIDB4MDIwNTogIC8qIFNldCBwcm90ZWN0ZWQgbW9kZSBpbnRlcnJ1cHQgdmVjdG9yICovCiAJSU5UX1NldEhhbmRsZXIoIEJMX3JlZygmY29udGV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgIChTRUdQVFIpTUFLRUxPTkcoIERYX3JlZygmY29udGV4dCksIENYX3JlZygmY29udGV4dCkgKSk7CisgICAgICAgICAgICAgICAgICAgICBQVFJfU0VHX09GRl9UT19TRUdQVFIoQ1hfcmVnKCZjb250ZXh0KSxEWF9yZWcoJmNvbnRleHQpKSk7CiAJYnJlYWs7CiAKICAgICBjYXNlIDB4MDMwMDogIC8qIFNpbXVsYXRlIHJlYWwgbW9kZSBpbnRlcnJ1cHQgCmRpZmYgLS1naXQgYS9taXNjZW11L2ludDIxLmMgYi9taXNjZW11L2ludDIxLmMKaW5kZXggNTNlMDc2OS4uN2QwMGVlMiAxMDA2NDQKLS0tIGEvbWlzY2VtdS9pbnQyMS5jCisrKyBiL21pc2NlbXUvaW50MjEuYwpAQCAtODUsNyArODUsNyBAQAogCiBCWVRFICpHZXRDdXJyZW50RFRBKHZvaWQpCiB7Ci0gICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBHZXRDdXJyZW50VGFzaygpICk7CisgICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIEdldEN1cnJlbnRUYXNrKCkgKTsKICAgICByZXR1cm4gKEJZVEUgKilQVFJfU0VHX1RPX0xJTiggcFRhc2stPmR0YSApOwogfQogCkBAIC0xMDA5LDggKzEwMDksOCBAQAogCiAgICAgY2FzZSAweDFhOiAvKiBTRVQgRElTSyBUUkFOU0ZFUiBBUkVBIEFERFJFU1MgKi8KICAgICAgICAgewotICAgICAgICAgICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrKCBHZXRDdXJyZW50VGFzaygpICk7Ci0gICAgICAgICAgICBwVGFzay0+ZHRhID0gTUFLRUxPTkcoIERYX3JlZygmY29udGV4dCksIERTX3JlZygmY29udGV4dCkgKTsKKyAgICAgICAgICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBHZXRDdXJyZW50VGFzaygpICk7CisgICAgICAgICAgICBwVGFzay0+ZHRhID0gUFRSX1NFR19PRkZfVE9fU0VHUFRSKERTX3JlZygmY29udGV4dCksRFhfcmVnKCZjb250ZXh0KSk7CiAgICAgICAgICAgICBkcHJpbnRmX2ludChzdGRkZWIsICJpbnQyMTogU2V0IERUQTogJTA4bHhcbiIsIHBUYXNrLT5kdGEpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAKIAkJCiAgICAgY2FzZSAweDI1OiAvKiBTRVQgSU5URVJSVVBUIFZFQ1RPUiAqLwogICAgICAgICBJTlRfU2V0SGFuZGxlciggQUxfcmVnKCZjb250ZXh0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKCBEWF9yZWcoJmNvbnRleHQpLCBEU19yZWcoJmNvbnRleHQpICkgKTsKKyAgICAgICAgICAgICAgICAgICBQVFJfU0VHX09GRl9UT19TRUdQVFIoIERTX3JlZygmY29udGV4dCksIERYX3JlZygmY29udGV4dCkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4MmE6IC8qIEdFVCBTWVNURU0gREFURSAqLwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKIAogICAgIGNhc2UgMHgyZjogLyogR0VUIERJU0sgVFJBTlNGRVIgQVJFQSBBRERSRVNTICovCiAgICAgICAgIHsKLSAgICAgICAgICAgIFREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggR2V0Q3VycmVudFRhc2soKSApOworICAgICAgICAgICAgVERCICpwVGFzayA9IChUREIgKilHbG9iYWxMb2NrMTYoIEdldEN1cnJlbnRUYXNrKCkgKTsKICAgICAgICAgICAgIEVTX3JlZygmY29udGV4dCkgPSBTRUxFQ1RPUk9GKCBwVGFzay0+ZHRhICk7CiAgICAgICAgICAgICBCWF9yZWcoJmNvbnRleHQpID0gT0ZGU0VUT0YoIHBUYXNrLT5kdGEgKTsKICAgICAgICAgfQpAQCAtMTE3NSw4ICsxMTc1LDggQEAKICAgICBjYXNlIDB4M2Y6IC8qICJSRUFEIiAtIFJFQUQgRlJPTSBGSUxFIE9SIERFVklDRSAqLwogICAgICAgICB7CiAgICAgICAgICAgICBMT05HIHJlc3VsdCA9IF9ocmVhZCggQlhfcmVnKCZjb250ZXh0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0VHUFRSKU1BS0VMT05HKCBEWF9yZWcoJmNvbnRleHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTX3JlZygmY29udGV4dCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfU0VHX09GRl9UT19TRUdQVFIoIERTX3JlZygmY29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWF9yZWcoJmNvbnRleHQpICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1hfcmVnKCZjb250ZXh0KSApOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKICAgICAgICAgICAgIHsKQEAgLTE2MDgsMTUgKzE2MDgsMTUgQEAKIAogQk9PTCBJTlQyMV9Jbml0KHZvaWQpCiB7Ci0gICAgaWYgKChEb3NIZWFwSGFuZGxlID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCxzaXplb2Yoc3RydWN0IERvc0hlYXApKSkgPT0gMCkKKyAgICBpZiAoIShEb3NIZWFwSGFuZGxlID0gR2xvYmFsQWxsb2MxNihHTUVNX0ZJWEVELHNpemVvZihzdHJ1Y3QgRG9zSGVhcCkpKSkKICAgICB7CiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIklOVDIxX0luaXQ6IE91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQotICAgIGhlYXAgPSAoc3RydWN0IERvc0hlYXAgKikgR2xvYmFsTG9jayhEb3NIZWFwSGFuZGxlKTsKKyAgICBoZWFwID0gKHN0cnVjdCBEb3NIZWFwICopIEdsb2JhbExvY2sxNihEb3NIZWFwSGFuZGxlKTsKIAogICAgIGRwYiA9ICZoZWFwLT5kcGI7Ci0gICAgZHBic2VncHRyID0gTUFLRUxPTkcoIChpbnQpJmhlYXAtPmRwYiAtIChpbnQpaGVhcCwgRG9zSGVhcEhhbmRsZSApOworICAgIGRwYnNlZ3B0ciA9IFBUUl9TRUdfT0ZGX1RPX1NFR1BUUihEb3NIZWFwSGFuZGxlLChpbnQpJmhlYXAtPmRwYi0oaW50KWhlYXApOwogICAgIGhlYXAtPkluRG9zRmxhZyA9IDA7CiAgICAgc3RyY3B5KGhlYXAtPmJpb3NkYXRlLCAiMDEvMDEvODAiKTsKICAgICByZXR1cm4gVFJVRTsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvYXVkaW8uYyBiL211bHRpbWVkaWEvYXVkaW8uYwppbmRleCBjZThkYTRjLi5iOTdjYTU4IDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL2F1ZGlvLmMKKysrIGIvbXVsdGltZWRpYS9hdWRpby5jCkBAIC0yODksOCArMjg5LDggQEAKICNlbmRpZgogCWJ1ZnNpemUgPSA2NDAwMDsKIAlscFdhdmVIZHIgPSAmTUNJV2F2RGV2W3dEZXZJRF0uV2F2ZUhkcjsKLQloRGF0YSA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIGJ1ZnNpemUpOwotCWxwV2F2ZUhkci0+bHBEYXRhID0gKExQU1RSKSBXSU4xNl9HbG9iYWxMb2NrKGhEYXRhKTsKKwloRGF0YSA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgYnVmc2l6ZSk7CisJbHBXYXZlSGRyLT5scERhdGEgPSAoTFBTVFIpIFdJTjE2X0dsb2JhbExvY2sxNihoRGF0YSk7CiAJbHBXYXZlSGRyLT5kd1VzZXIgPSAwTDsKIAlscFdhdmVIZHItPmR3RmxhZ3MgPSAwTDsKIAlscFdhdmVIZHItPmR3TG9vcHMgPSAwTDsKQEAgLTMxMiw4ICszMTIsOCBAQAogCQl9CiAJZHdSZXQgPSB3b2RNZXNzYWdlKDAsIFdPRE1fVU5QUkVQQVJFLCAwLCAoRFdPUkQpbHAxNldhdmVIZHIsIHNpemVvZihXQVZFSERSKSk7CiAJaWYgKGxwV2F2ZUhkci0+bHBEYXRhICE9IE5VTEwpIHsKLQkJR2xvYmFsVW5sb2NrKGhEYXRhKTsKLQkJR2xvYmFsRnJlZShoRGF0YSk7CisJCUdsb2JhbFVubG9jazE2KGhEYXRhKTsKKwkJR2xvYmFsRnJlZTE2KGhEYXRhKTsKIAkJbHBXYXZlSGRyLT5scERhdGEgPSBOVUxMOwogCQl9CiAJVVNFUl9IRUFQX0ZSRUUoaFdhdmVIZHIpOwpAQCAtMzU4LDggKzM1OCw4IEBACiAJCX0KIAlidWZzaXplID0gNjQwMDA7CiAJbHBXYXZlSGRyID0gJk1DSVdhdkRldlt3RGV2SURdLldhdmVIZHI7Ci0JaERhdGEgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBidWZzaXplKTsKLQlscFdhdmVIZHItPmxwRGF0YSA9IChMUFNUUikgV0lOMTZfR2xvYmFsTG9jayhoRGF0YSk7CisJaERhdGEgPSBHbG9iYWxBbGxvYzE2KEdNRU1fTU9WRUFCTEUsIGJ1ZnNpemUpOworCWxwV2F2ZUhkci0+bHBEYXRhID0gKExQU1RSKSBXSU4xNl9HbG9iYWxMb2NrMTYoaERhdGEpOwogCWxwV2F2ZUhkci0+ZHdCdWZmZXJMZW5ndGggPSBidWZzaXplOwogCWxwV2F2ZUhkci0+ZHdVc2VyID0gMEw7CiAJbHBXYXZlSGRyLT5kd0ZsYWdzID0gMEw7CkBAIC0zODIsOCArMzgyLDggQEAKIAlkd1JldCA9IHdpZE1lc3NhZ2UoMCwgV0lETV9VTlBSRVBBUkUsIDAsIChEV09SRClscDE2V2F2ZUhkciwgc2l6ZW9mKFdBVkVIRFIpKTsKIAlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJXQVZFX21jaVJlY29yZCAvLyBhZnRlciBXSURNX1VOUFJFUEFSRSBcbiIpOwogCWlmIChscFdhdmVIZHItPmxwRGF0YSAhPSBOVUxMKSB7Ci0JCUdsb2JhbFVubG9jayhoRGF0YSk7Ci0JCUdsb2JhbEZyZWUoaERhdGEpOworCQlHbG9iYWxVbmxvY2sxNihoRGF0YSk7CisJCUdsb2JhbEZyZWUxNihoRGF0YSk7CiAJCWxwV2F2ZUhkci0+bHBEYXRhID0gTlVMTDsKIAkJfQogCVVTRVJfSEVBUF9GUkVFKGhXYXZlSGRyKTsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbWNpc3RyaW5nLmMgYi9tdWx0aW1lZGlhL21jaXN0cmluZy5jCmluZGV4IGRlMGZiMGUuLjQ2MzBjN2QgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpc3RyaW5nLmMKKysrIGIvbXVsdGltZWRpYS9tY2lzdHJpbmcuYwpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKICAJCWlmICghU1RSQ01QKE1DSVNUUl9jbWR0YWJsZVtpXS5jbWQsY21kKSkgewogIAkJCXJlcz1NQ0lTVFJfY21kdGFibGVbaV0uZnVuKAogIAkJCQl3RGV2SUQsdURldlR5cCxscHN0clJldHVyblN0cmluZywKLSAJCQkJdVJldHVybkxlbmd0aCxkZXYsa2V5d29yZHMsbnJvZmtleXdvcmRzLAorIAkJCQl1UmV0dXJuTGVuZ3RoLGRldiwoTFBTVFIqKWtleXdvcmRzLG5yb2ZrZXl3b3JkcywKICAJCQkJZHdGbGFncwogIAkJCSk7CiAgCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21pZGkuYyBiL211bHRpbWVkaWEvbWlkaS5jCmluZGV4IGM1NzFjOWMuLjg0YTUyMTAgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWlkaS5jCisrKyBiL211bHRpbWVkaWEvbWlkaS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJTUlESV9SZWFkQnl0ZQkJCVtpbnRlcm5hbF0JCiAqLwotc3RhdGljIERXT1JEIE1JRElfUmVhZEJ5dGUoVUlOVCB3RGV2SUQsIEJZVEUgRkFSICpscGJ5dCkKK3N0YXRpYyBEV09SRCBNSURJX1JlYWRCeXRlKFVJTlQgd0RldklELCBCWVRFICpscGJ5dCkKIHsKICNpZmRlZiBsaW51eAogCWlmIChscGJ5dCAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21tc3lzdGVtLmMgYi9tdWx0aW1lZGlhL21tc3lzdGVtLmMKaW5kZXggYTdmYzMyZC4uYTQ0OTkwOSAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9tbXN5c3RlbS5jCisrKyBiL211bHRpbWVkaWEvbW1zeXN0ZW0uYwpAQCAtMTQ1LDggKzE0NSw4IEBACiAJbHBXYXZlSGRyID0gKExQV0FWRUhEUikgVVNFUl9IRUFQX0xJTl9BRERSKGhXYXZlSGRyKTsKIAlscDE2V2F2ZUhkciA9IChMUFdBVkVIRFIpIFVTRVJfSEVBUF9TRUdfQUREUihoV2F2ZUhkcik7CiAJYnVmc2l6ZSA9IDY0MDAwOwotCWhEYXRhID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgYnVmc2l6ZSk7Ci0JbHBXYXZlSGRyLT5scERhdGEgPSAoTFBTVFIpIFdJTjE2X0dsb2JhbExvY2soaERhdGEpOworCWhEYXRhID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCBidWZzaXplKTsKKwlscFdhdmVIZHItPmxwRGF0YSA9IChMUFNUUikgV0lOMTZfR2xvYmFsTG9jazE2KGhEYXRhKTsKIAlscFdhdmVIZHItPmR3QnVmZmVyTGVuZ3RoID0gYnVmc2l6ZTsKIAlscFdhdmVIZHItPmR3VXNlciA9IDBMOwogCWxwV2F2ZUhkci0+ZHdGbGFncyA9IDBMOwpAQCAtMTU0LDggKzE1NCw4IEBACiAJZHdSZXQgPSB3b2RNZXNzYWdlKDAsIFdPRE1fUFJFUEFSRSwgMCwgKERXT1JEKWxwMTZXYXZlSGRyLCBzaXplb2YoV0FWRUhEUikpOwogCWlmIChkd1JldCAhPSBNTVNZU0VSUl9OT0VSUk9SKSB7CiAJCWRwcmludGZfbW1zeXMoc3RkZGViLCAic25kUGxheVNvdW5kIC8vIGNhbid0IHByZXBhcmUgV2F2ZU91dCBkZXZpY2UgIVxuIik7Ci0JCUdsb2JhbFVubG9jayhoRGF0YSk7Ci0JCUdsb2JhbEZyZWUoaERhdGEpOworCQlHbG9iYWxVbmxvY2sxNihoRGF0YSk7CisJCUdsb2JhbEZyZWUxNihoRGF0YSk7CiAJCVVTRVJfSEVBUF9GUkVFKGhEZXNjKTsKIAkJVVNFUl9IRUFQX0ZSRUUoaFdhdmVIZHIpOwogCQlnb3RvIEVyclNORDsKQEAgLTE2OSw4ICsxNjksOCBAQAogCQl9CiAJd29kTWVzc2FnZSgwLCBXT0RNX1VOUFJFUEFSRSwgMCwgKERXT1JEKWxwMTZXYXZlSGRyLCBzaXplb2YoV0FWRUhEUikpOwogCXdvZE1lc3NhZ2UoMCwgV09ETV9DTE9TRSwgMCwgMEwsIDBMKTsKLQlHbG9iYWxVbmxvY2soaERhdGEpOwotCUdsb2JhbEZyZWUoaERhdGEpOworCUdsb2JhbFVubG9jazE2KGhEYXRhKTsKKwlHbG9iYWxGcmVlMTYoaERhdGEpOwogCVVTRVJfSEVBUF9GUkVFKGhEZXNjKTsKIAlVU0VSX0hFQVBfRlJFRShoV2F2ZUhkcik7CiAJaWYgKGhtbWlvICE9IDApICAgbW1pb0Nsb3NlKGhtbWlvLCAwKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQlhdXhHZXREZXZDYXBzCQlbTU1TWVNURU0uMzUxXQogKi8KLVVJTlQgYXV4R2V0RGV2Q2FwcyhVSU5UIHVEZXZpY2VJRCwgQVVYQ0FQUyBGQVIqIGxwQ2FwcywgVUlOVCB1U2l6ZSkKK1VJTlQgYXV4R2V0RGV2Q2FwcyhVSU5UIHVEZXZpY2VJRCwgQVVYQ0FQUyAqIGxwQ2FwcywgVUlOVCB1U2l6ZSkKIHsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgImF1eEdldERldkNhcHMoJTA0WCwgJXAsICVkKSAhXG4iLCAKIAkJCQkJdURldmljZUlELCBscENhcHMsIHVTaXplKTsKQEAgLTI1NCw3ICsyNTQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQlhdXhHZXRWb2x1bWUJCVtNTVNZU1RFTS4zNTJdCiAqLwotVUlOVCBhdXhHZXRWb2x1bWUoVUlOVCB1RGV2aWNlSUQsIERXT1JEIEZBUiogbHBkd1ZvbHVtZSkKK1VJTlQgYXV4R2V0Vm9sdW1lKFVJTlQgdURldmljZUlELCBEV09SRCAqIGxwZHdWb2x1bWUpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJhdXhHZXRWb2x1bWUoJTA0WCwgJXApICFcbiIsIHVEZXZpY2VJRCwgbHBkd1ZvbHVtZSk7CiAJcmV0dXJuIGF1eE1lc3NhZ2UodURldmljZUlELCBBVVhETV9HRVRWT0xVTUUsIDBMLCAoRFdPUkQpbHBkd1ZvbHVtZSwgMEwpOwpAQCAtODExLDcgKzgxMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCQkJCW1jaUdldFlpZWxkUHJvYwkJW01NU1lTVEVNLjcxNl0KICovCi1ZSUVMRFBST0MgbWNpR2V0WWllbGRQcm9jKFVJTlQgdURldmljZUlELCBEV09SRCBGQVIqIGxwZHdZaWVsZERhdGEpCitZSUVMRFBST0MgbWNpR2V0WWllbGRQcm9jKFVJTlQgdURldmljZUlELCBEV09SRCAqIGxwZHdZaWVsZERhdGEpCiB7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC04MzksNyArODM5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbWlkaU91dEdldERldkNhcHMJW01NU1lTVEVNLjIwMl0KICovCi1VSU5UIG1pZGlPdXRHZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBNSURJT1VUQ0FQUyBGQVIqIGxwQ2FwcywgVUlOVCB1U2l6ZSkKK1VJTlQgbWlkaU91dEdldERldkNhcHMoVUlOVCB1RGV2aWNlSUQsIE1JRElPVVRDQVBTICogbHBDYXBzLCBVSU5UIHVTaXplKQogewogCWRwcmludGZfbW1zeXMoc3RkZGViLCAibWlkaU91dEdldERldkNhcHNcbiIpOwogCXJldHVybiAwOwpAQCAtOTAzLDcgKzkwMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCQkJCW1pZGlPdXRPcGVuICAgIAkJW01NU1lTVEVNLjIwNF0KICovCi1VSU5UIG1pZGlPdXRPcGVuKEhNSURJT1VUIEZBUiogbHBoTWlkaU91dCwgVUlOVCB1RGV2aWNlSUQsCitVSU5UIG1pZGlPdXRPcGVuKEhNSURJT1VUICogbHBoTWlkaU91dCwgVUlOVCB1RGV2aWNlSUQsCiAJCSBEV09SRCBkd0NhbGxiYWNrLCBEV09SRCBkd0luc3RhbmNlLCBEV09SRCBkd0ZsYWdzKQogewogCUhNSURJCWhNaWRpT3V0OwpAQCAtOTU0LDcgKzk1NCw3IEBACiAqIAkJCQltaWRpT3V0UHJlcGFyZUhlYWRlcglbTU1TWVNURU0uMjA2XQogKi8KIFVJTlQgbWlkaU91dFByZXBhcmVIZWFkZXIoSE1JRElPVVQgaE1pZGlPdXQsCi0gICAgTUlESUhEUiBGQVIqIGxwTWlkaU91dEhkciwgVUlOVCB1U2l6ZSkKKyAgICBNSURJSERSICogbHBNaWRpT3V0SGRyLCBVSU5UIHVTaXplKQogewogCUxQTUlESU9QRU5ERVNDCWxwRGVzYzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1pZGlPdXRQcmVwYXJlSGVhZGVyKCUwNFgsICVwLCAlZClcbiIsIApAQCAtOTY5LDcgKzk2OSw3IEBACiAqIAkJCQltaWRpT3V0VW5wcmVwYXJlSGVhZGVyCVtNTVNZU1RFTS4yMDddCiAqLwogVUlOVCBtaWRpT3V0VW5wcmVwYXJlSGVhZGVyKEhNSURJT1VUIGhNaWRpT3V0LAotICAgIE1JRElIRFIgRkFSKiBscE1pZGlPdXRIZHIsIFVJTlQgdVNpemUpCisgICAgTUlESUhEUiAqIGxwTWlkaU91dEhkciwgVUlOVCB1U2l6ZSkKIHsKIAlMUE1JRElPUEVOREVTQwlscERlc2M7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtaWRpT3V0VW5wcmVwYXJlSGVhZGVyKCUwNFgsICVwLCAlZClcbiIsIApAQCAtOTk2LDcgKzk5Niw3IEBACiAqIAkJCQltaWRpT3V0TG9uZ01zZwkJW01NU1lTVEVNLjIwOV0KICovCiBVSU5UIG1pZGlPdXRMb25nTXNnKEhNSURJT1VUIGhNaWRpT3V0LAotICAgIE1JRElIRFIgRkFSKiBscE1pZGlPdXRIZHIsIFVJTlQgdVNpemUpCisgICAgTUlESUhEUiAqIGxwTWlkaU91dEhkciwgVUlOVCB1U2l6ZSkKIHsKIAlMUE1JRElPUEVOREVTQwlscERlc2M7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtaWRpT3V0TG9uZ01zZyglMDRYLCAlcCwgJWQpXG4iLCAKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCQkJCW1pZGlPdXRHZXRWb2x1bWUJW01NU1lTVEVNLjIxMV0KICovCi1VSU5UIG1pZGlPdXRHZXRWb2x1bWUoVUlOVCB1RGV2aWNlSUQsIERXT1JEIEZBUiogbHBkd1ZvbHVtZSkKK1VJTlQgbWlkaU91dEdldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgKiBscGR3Vm9sdW1lKQogewogCWRwcmludGZfbW1zeXMoc3RkZGViLCAibWlkaU91dEdldFZvbHVtZSglMDRYLCAlcCk7XG4iLCB1RGV2aWNlSUQsIGxwZHdWb2x1bWUpOwogCXJldHVybiBtb2RNZXNzYWdlKHVEZXZpY2VJRCwgTU9ETV9HRVRWT0xVTUUsIDBMLCAoRFdPUkQpbHBkd1ZvbHVtZSwgMEwpOwpAQCAtMTA0Myw3ICsxMDQzLDcgQEAKICogCQkJCW1pZGlPdXRDYWNoZVBhdGNoZXMJCVtNTVNZU1RFTS4yMTNdCiAqLwogVUlOVCBtaWRpT3V0Q2FjaGVQYXRjaGVzKEhNSURJT1VUIGhNaWRpT3V0LAotICAgIFVJTlQgdUJhbmssIFdPUkQgRkFSKiBscHdQYXRjaEFycmF5LCBVSU5UIHVGbGFncykKKyAgICBVSU5UIHVCYW5rLCBXT1JEICogbHB3UGF0Y2hBcnJheSwgVUlOVCB1RmxhZ3MpCiB7CiAgICAgICAgIC8qIG5vdCByZWFsbHkgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgdGhpcyAqLwogCWZwcmludGYoc3RkbmltcCwgIm1pZGlPdXRDYWNoZVBhdGNoZXM6IG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKQEAgLTEwNTQsNyArMTA1NCw3IEBACiAqIAkJCQltaWRpT3V0Q2FjaGVEcnVtUGF0Y2hlcwlbTU1TWVNURU0uMjE0XQogKi8KIFVJTlQgbWlkaU91dENhY2hlRHJ1bVBhdGNoZXMoSE1JRElPVVQgaE1pZGlPdXQsCi0gICAgVUlOVCB1UGF0Y2gsIFdPUkQgRkFSKiBscHdLZXlBcnJheSwgVUlOVCB1RmxhZ3MpCisgICAgVUlOVCB1UGF0Y2gsIFdPUkQgKiBscHdLZXlBcnJheSwgVUlOVCB1RmxhZ3MpCiB7CiAJZnByaW50ZihzdGRuaW1wLCAibWlkaU91dENhY2hlRHJ1bVBhdGNoZXNpOiBub3Qgc3VwcG9ydGVkIHlldFxuIik7CiAJcmV0dXJuIE1NU1lTRVJSX05PVFNVUFBPUlRFRDsKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCQkJCW1pZGlPdXRHZXRJRAkJW01NU1lTVEVNLjIxNV0KICovCi1VSU5UIG1pZGlPdXRHZXRJRChITUlESU9VVCBoTWlkaU91dCwgVUlOVCBGQVIqIGxwdURldmljZUlEKQorVUlOVCBtaWRpT3V0R2V0SUQoSE1JRElPVVQgaE1pZGlPdXQsIFVJTlQgKiBscHVEZXZpY2VJRCkKIHsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1pZGlPdXRHZXRJRFxuIik7CiAJcmV0dXJuIDA7CkBAIC0xMTE4LDcgKzExMTgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQltaWRpSW5PcGVuCQlbTU1TWVNURU0uMzA0XQogKi8KLVVJTlQgbWlkaUluT3BlbihITUlESUlOIEZBUiogbHBoTWlkaUluLCBVSU5UIHVEZXZpY2VJRCwKK1VJTlQgbWlkaUluT3BlbihITUlESUlOICogbHBoTWlkaUluLCBVSU5UIHVEZXZpY2VJRCwKICAgICBEV09SRCBkd0NhbGxiYWNrLCBEV09SRCBkd0luc3RhbmNlLCBEV09SRCBkd0ZsYWdzKQogewogCUhNSURJCWhNaWRpSW47CkBAIC0xMTY5LDcgKzExNjksNyBAQAogKiAJCQkJbWlkaUluUHJlcGFyZUhlYWRlcglbTU1TWVNURU0uMzA2XQogKi8KIFVJTlQgbWlkaUluUHJlcGFyZUhlYWRlcihITUlESUlOIGhNaWRpSW4sCi0gICAgTUlESUhEUiBGQVIqIGxwTWlkaUluSGRyLCBVSU5UIHVTaXplKQorICAgIE1JRElIRFIgKiBscE1pZGlJbkhkciwgVUlOVCB1U2l6ZSkKIHsKIAlMUE1JRElPUEVOREVTQwlscERlc2M7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtaWRpSW5QcmVwYXJlSGVhZGVyKCUwNFgsICVwLCAlZClcbiIsIApAQCAtMTE4NCw3ICsxMTg0LDcgQEAKICogCQkJCW1pZGlJblVucHJlcGFyZUhlYWRlcglbTU1TWVNURU0uMzA3XQogKi8KIFVJTlQgbWlkaUluVW5wcmVwYXJlSGVhZGVyKEhNSURJSU4gaE1pZGlJbiwKLSAgICBNSURJSERSIEZBUiogbHBNaWRpSW5IZHIsIFVJTlQgdVNpemUpCisgICAgTUlESUhEUiAqIGxwTWlkaUluSGRyLCBVSU5UIHVTaXplKQogewogCUxQTUlESU9QRU5ERVNDCWxwRGVzYzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1pZGlJblVucHJlcGFyZUhlYWRlciglMDRYLCAlcCwgJWQpXG4iLCAKQEAgLTExOTksNyArMTE5OSw3IEBACiAqIAkJCQltaWRpSW5BZGRCdWZmZXIJCVtNTVNZU1RFTS4zMDhdCiAqLwogVUlOVCBtaWRpSW5BZGRCdWZmZXIoSE1JRElJTiBoTWlkaUluLAotICAgIE1JRElIRFIgRkFSKiBscE1pZGlJbkhkciwgVUlOVCB1U2l6ZSkKKyAgICBNSURJSERSICogbHBNaWRpSW5IZHIsIFVJTlQgdVNpemUpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtaWRpSW5BZGRCdWZmZXJcbiIpOwogCXJldHVybiAwOwpAQCAtMTIzNSw3ICsxMjM1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbWlkaUluR2V0SUQJCQlbTU1TWVNURU0uMzEyXQogKi8KLVVJTlQgbWlkaUluR2V0SUQoSE1JRElJTiBoTWlkaUluLCBVSU5UIEZBUiogbHB1RGV2aWNlSUQpCitVSU5UIG1pZGlJbkdldElEKEhNSURJSU4gaE1pZGlJbiwgVUlOVCAqIGxwdURldmljZUlEKQogewogCWRwcmludGZfbW1zeXMoc3RkZGViLCAibWlkaUluR2V0SURcbiIpOwogCXJldHVybiAwOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd2F2ZU91dEdldERldkNhcHMJCVtNTVNZU1RFTS40MDJdCiAqLwotVUlOVCB3YXZlT3V0R2V0RGV2Q2FwcyhVSU5UIHVEZXZpY2VJRCwgV0FWRU9VVENBUFMgRkFSKiBscENhcHMsIFVJTlQgdVNpemUpCitVSU5UIHdhdmVPdXRHZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBXQVZFT1VUQ0FQUyAqIGxwQ2FwcywgVUlOVCB1U2l6ZSkKIHsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIndhdmVPdXRHZXREZXZDYXBzXG4iKTsKIAlyZXR1cm4gd29kTWVzc2FnZSh1RGV2aWNlSUQsIFdPRE1fR0VUREVWQ0FQUywgMEwsIChEV09SRClscENhcHMsIHVTaXplKTsKQEAgLTEzNTYsNyArMTM1Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCQkJCXdhdmVPdXRPcGVuCQkJW01NU1lTVEVNLjQwNF0KICovCi1VSU5UIHdhdmVPdXRPcGVuKEhXQVZFT1VUIEZBUiogbHBoV2F2ZU91dCwgVUlOVCB1RGV2aWNlSUQsCitVSU5UIHdhdmVPdXRPcGVuKEhXQVZFT1VUICogbHBoV2F2ZU91dCwgVUlOVCB1RGV2aWNlSUQsCiAgICAgY29uc3QgTFBXQVZFRk9STUFUIGxwRm9ybWF0LCBEV09SRCBkd0NhbGxiYWNrLCBEV09SRCBkd0luc3RhbmNlLCBEV09SRCBkd0ZsYWdzKQogewogCUhXQVZFCWhXYXZlT3V0OwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKICogCQkJCXdhdmVPdXRQcmVwYXJlSGVhZGVyCVtNTVNZU1RFTS40MDZdCiAqLwogVUlOVCB3YXZlT3V0UHJlcGFyZUhlYWRlcihIV0FWRU9VVCBoV2F2ZU91dCwKLSAgICAgV0FWRUhEUiBGQVIqIGxwV2F2ZU91dEhkciwgVUlOVCB1U2l6ZSkKKyAgICAgV0FWRUhEUiAqIGxwV2F2ZU91dEhkciwgVUlOVCB1U2l6ZSkKIHsKIAlMUFdBVkVPUEVOREVTQwlscERlc2M7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlT3V0UHJlcGFyZUhlYWRlciglMDRYLCAlcCwgJXUpO1xuIiwgCkBAIC0xNDMwLDcgKzE0MzAsNyBAQAogKiAJCQkJd2F2ZU91dFVucHJlcGFyZUhlYWRlcglbTU1TWVNURU0uNDA3XQogKi8KIFVJTlQgd2F2ZU91dFVucHJlcGFyZUhlYWRlcihIV0FWRU9VVCBoV2F2ZU91dCwKLSAgICBXQVZFSERSIEZBUiogbHBXYXZlT3V0SGRyLCBVSU5UIHVTaXplKQorICAgIFdBVkVIRFIgKiBscFdhdmVPdXRIZHIsIFVJTlQgdVNpemUpCiB7CiAJTFBXQVZFT1BFTkRFU0MJbHBEZXNjOwogCWRwcmludGZfbW1zeXMoc3RkZGViLCAid2F2ZU91dFVucHJlcGFyZUhlYWRlciglMDRYLCAlcCwgJXUpO1xuIiwgCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQl3YXZlT3V0V3JpdGUJCVtNTVNZU1RFTS40MDhdCiAqLwotVUlOVCB3YXZlT3V0V3JpdGUoSFdBVkVPVVQgaFdhdmVPdXQsIFdBVkVIRFIgRkFSKiBscFdhdmVPdXRIZHIsICBVSU5UIHVTaXplKQorVUlOVCB3YXZlT3V0V3JpdGUoSFdBVkVPVVQgaFdhdmVPdXQsIFdBVkVIRFIgKiBscFdhdmVPdXRIZHIsICBVSU5UIHVTaXplKQogewogCUxQV0FWRU9QRU5ERVNDCWxwRGVzYzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIndhdmVPdXRXcml0ZSglMDRYLCAlcCwgJXUpO1xuIiwgaFdhdmVPdXQsIGxwV2F2ZU91dEhkciwgdVNpemUpOwpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd2F2ZU91dEdldFBvc2l0aW9uCVtNTVNZU1RFTS40MTJdCiAqLwotVUlOVCB3YXZlT3V0R2V0UG9zaXRpb24oSFdBVkVPVVQgaFdhdmVPdXQsIE1NVElNRSBGQVIqIGxwVGltZSwgVUlOVCB1U2l6ZSkKK1VJTlQgd2F2ZU91dEdldFBvc2l0aW9uKEhXQVZFT1VUIGhXYXZlT3V0LCBNTVRJTUUgKiBscFRpbWUsIFVJTlQgdVNpemUpCiB7CiAJTFBXQVZFT1BFTkRFU0MJbHBEZXNjOwogCWRwcmludGZfbW1zeXMoc3RkZGViLCAid2F2ZU91dEdldFBvc2l0aW9uKCUwNFgsICVwLCAldSk7XG4iLCBoV2F2ZU91dCwgbHBUaW1lLCB1U2l6ZSk7CkBAIC0xNTA2LDcgKzE1MDYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQl3YXZlT3V0R2V0UGl0Y2gJCVtNTVNZU1RFTS40MTNdCiAqLwotVUlOVCB3YXZlT3V0R2V0UGl0Y2goSFdBVkVPVVQgaFdhdmVPdXQsIERXT1JEIEZBUiogbHBkd1BpdGNoKQorVUlOVCB3YXZlT3V0R2V0UGl0Y2goSFdBVkVPVVQgaFdhdmVPdXQsIERXT1JEICogbHBkd1BpdGNoKQogewogCUxQV0FWRU9QRU5ERVNDCWxwRGVzYzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIndhdmVPdXRHZXRQaXRjaCglMDRYLCAlcCk7XG4iLCBoV2F2ZU91dCwgbHBkd1BpdGNoKTsKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCQkJCXdhdmVPdXRHZXRWb2x1bWUJW01NU1lTVEVNLjQxNV0KICovCi1VSU5UIHdhdmVPdXRHZXRWb2x1bWUoVUlOVCB1RGV2aWNlSUQsIERXT1JEIEZBUiogbHBkd1ZvbHVtZSkKK1VJTlQgd2F2ZU91dEdldFZvbHVtZShVSU5UIHVEZXZpY2VJRCwgRFdPUkQgKiBscGR3Vm9sdW1lKQogewogCWRwcmludGZfbW1zeXMoc3RkZGViLCAid2F2ZU91dEdldFZvbHVtZSglMDRYLCAlcCk7XG4iLCB1RGV2aWNlSUQsIGxwZHdWb2x1bWUpOwogCXJldHVybiB3b2RNZXNzYWdlKHVEZXZpY2VJRCwgV09ETV9HRVRWT0xVTUUsIDBMLCAoRFdPUkQpbHBkd1ZvbHVtZSwgMEwpOwpAQCAtMTU0OSw3ICsxNTQ5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd2F2ZU91dEdldFBsYXliYWNrUmF0ZQlbTU1TWVNURU0uNDE3XQogKi8KLVVJTlQgd2F2ZU91dEdldFBsYXliYWNrUmF0ZShIV0FWRU9VVCBoV2F2ZU91dCwgRFdPUkQgRkFSKiBscGR3UmF0ZSkKK1VJTlQgd2F2ZU91dEdldFBsYXliYWNrUmF0ZShIV0FWRU9VVCBoV2F2ZU91dCwgRFdPUkQgKiBscGR3UmF0ZSkKIHsKIAlMUFdBVkVPUEVOREVTQwlscERlc2M7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlT3V0R2V0UGxheWJhY2tSYXRlKCUwNFgsICVwKTtcbiIsIGhXYXZlT3V0LCBscGR3UmF0ZSk7CkBAIC0xNTg0LDcgKzE1ODQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQl3YXZlT3V0R2V0SUQJIAlbTU1TWVNURU0uNDIwXQogKi8KLVVJTlQgd2F2ZU91dEdldElEKEhXQVZFT1VUIGhXYXZlT3V0LCBVSU5UIEZBUiogbHB1RGV2aWNlSUQpCitVSU5UIHdhdmVPdXRHZXRJRChIV0FWRU9VVCBoV2F2ZU91dCwgVUlOVCAqIGxwdURldmljZUlEKQogewogCUxQV0FWRU9QRU5ERVNDCWxwRGVzYzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIndhdmVPdXRHZXRJRCglMDRYLCAlcCk7XG4iLCBoV2F2ZU91dCwgbHB1RGV2aWNlSUQpOwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd2F2ZUluR2V0RGV2Q2FwcyAJCVtNTVNZU1RFTS41MDJdCiAqLwotVUlOVCB3YXZlSW5HZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBXQVZFSU5DQVBTIEZBUiogbHBDYXBzLCBVSU5UIHVTaXplKQorVUlOVCB3YXZlSW5HZXREZXZDYXBzKFVJTlQgdURldmljZUlELCBXQVZFSU5DQVBTICogbHBDYXBzLCBVSU5UIHVTaXplKQogewogCWRwcmludGZfbW1zeXMoc3RkZGViLCAid2F2ZUluR2V0RGV2Q2Fwc1xuIik7CiAJcmV0dXJuIHdpZE1lc3NhZ2UodURldmljZUlELCBXSURNX0dFVERFVkNBUFMsIDBMLCAoRFdPUkQpbHBDYXBzLCB1U2l6ZSk7CkBAIC0xNjQ3LDcgKzE2NDcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQl3YXZlSW5PcGVuCQkJW01NU1lTVEVNLjUwNF0KICovCi1VSU5UIHdhdmVJbk9wZW4oSFdBVkVJTiBGQVIqIGxwaFdhdmVJbiwgVUlOVCB1RGV2aWNlSUQsCitVSU5UIHdhdmVJbk9wZW4oSFdBVkVJTiAqIGxwaFdhdmVJbiwgVUlOVCB1RGV2aWNlSUQsCiAgICAgY29uc3QgTFBXQVZFRk9STUFUIGxwRm9ybWF0LCBEV09SRCBkd0NhbGxiYWNrLCBEV09SRCBkd0luc3RhbmNlLCBEV09SRCBkd0ZsYWdzKQogewogCUhXQVZFCWhXYXZlSW47CkBAIC0xNzA4LDcgKzE3MDgsNyBAQAogKiAJCQkJd2F2ZUluUHJlcGFyZUhlYWRlcgkJW01NU1lTVEVNLjUwNl0KICovCiBVSU5UIHdhdmVJblByZXBhcmVIZWFkZXIoSFdBVkVJTiBoV2F2ZUluLAotICAgIFdBVkVIRFIgRkFSKiBscFdhdmVJbkhkciwgVUlOVCB1U2l6ZSkKKyAgICBXQVZFSERSICogbHBXYXZlSW5IZHIsIFVJTlQgdVNpemUpCiB7CiAJTFBXQVZFT1BFTkRFU0MJbHBEZXNjOwogCUxQV0FWRUhEUiAJCWxwMzJXYXZlSW5IZHI7CkBAIC0xNzMxLDcgKzE3MzEsNyBAQAogKiAJCQkJd2F2ZUluVW5wcmVwYXJlSGVhZGVyCVtNTVNZU1RFTS41MDddCiAqLwogVUlOVCB3YXZlSW5VbnByZXBhcmVIZWFkZXIoSFdBVkVJTiBoV2F2ZUluLAotICAgIFdBVkVIRFIgRkFSKiBscFdhdmVJbkhkciwgVUlOVCB1U2l6ZSkKKyAgICBXQVZFSERSICogbHBXYXZlSW5IZHIsIFVJTlQgdVNpemUpCiB7CiAJTFBXQVZFT1BFTkRFU0MJbHBEZXNjOwogCUxQV0FWRUhEUiAJCWxwMzJXYXZlSW5IZHI7CkBAIC0xNzUzLDcgKzE3NTMsNyBAQAogKiAJCQkJd2F2ZUluQWRkQnVmZmVyCQlbTU1TWVNURU0uNTA4XQogKi8KIFVJTlQgd2F2ZUluQWRkQnVmZmVyKEhXQVZFSU4gaFdhdmVJbiwKLSAgICBXQVZFSERSIEZBUiogbHBXYXZlSW5IZHIsIFVJTlQgdVNpemUpCisgICAgV0FWRUhEUiAqIGxwV2F2ZUluSGRyLCBVSU5UIHVTaXplKQogewogCUxQV0FWRU9QRU5ERVNDCWxwRGVzYzsKIAlMUFdBVkVIRFIgCQlscDMyV2F2ZUluSGRyOwpAQCAtMTgxMyw3ICsxODEzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd2F2ZUluR2V0UG9zaXRpb24JW01NU1lTVEVNLjUxMl0KICovCi1VSU5UIHdhdmVJbkdldFBvc2l0aW9uKEhXQVZFSU4gaFdhdmVJbiwgTU1USU1FIEZBUiogbHBUaW1lLCBVSU5UIHVTaXplKQorVUlOVCB3YXZlSW5HZXRQb3NpdGlvbihIV0FWRUlOIGhXYXZlSW4sIE1NVElNRSAqIGxwVGltZSwgVUlOVCB1U2l6ZSkKIHsKIAlMUFdBVkVPUEVOREVTQwlscERlc2M7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlSW5HZXRQb3NpdGlvbiglMDRYLCAlcCwgJXUpO1xuIiwgaFdhdmVJbiwgbHBUaW1lLCB1U2l6ZSk7CkBAIC0xODI3LDcgKzE4MjcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQl3YXZlSW5HZXRJRAkJCVtNTVNZU1RFTS41MTNdCiAqLwotVUlOVCB3YXZlSW5HZXRJRChIV0FWRUlOIGhXYXZlSW4sIFVJTlQgRkFSKiBscHVEZXZpY2VJRCkKK1VJTlQgd2F2ZUluR2V0SUQoSFdBVkVJTiBoV2F2ZUluLCBVSU5UICogbHB1RGV2aWNlSUQpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlSW5HZXRJRFxuIik7CiAJaWYgKGxwdURldmljZUlEID09IE5VTEwpIHJldHVybiBNTVNZU0VSUl9JTlZBTFBBUkFNOwpAQCAtMTg1Myw3ICsxODUzLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbW1pb09wZW4gICAgICAgCQlbTU1TWVNURU0uMTIxMF0KICovCi1ITU1JTyBtbWlvT3BlbihMUFNUUiBzekZpbGVOYW1lLCBNTUlPSU5GTyBGQVIqIGxwbW1pb2luZm8sIERXT1JEIGR3T3BlbkZsYWdzKQorSE1NSU8gbW1pb09wZW4oTFBTVFIgc3pGaWxlTmFtZSwgTU1JT0lORk8gKiBscG1taW9pbmZvLCBEV09SRCBkd09wZW5GbGFncykKIHsKIAlpbnQJCWhGaWxlOwogCUhBTkRMRQkJaG1taW87CkBAIC0xODYyLDEzICsxODYyLDEzIEBACiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvT3BlbignJXMnLCAlcCwgJTA4bFgpO1xuIiwgc3pGaWxlTmFtZSwgbHBtbWlvaW5mbywgZHdPcGVuRmxhZ3MpOwogCWhGaWxlID0gT3BlbkZpbGUoc3pGaWxlTmFtZSwgJm9mcywgZHdPcGVuRmxhZ3MpOwogCWlmIChoRmlsZSA9PSAtMSkgcmV0dXJuIDA7Ci0JaG1taW8gPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBzaXplb2YoTU1JT0lORk8pKTsKLQlscG1taW5mbyA9IChMUE1NSU9JTkZPKUdsb2JhbExvY2soaG1taW8pOworCWhtbWlvID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCBzaXplb2YoTU1JT0lORk8pKTsKKwlscG1taW5mbyA9IChMUE1NSU9JTkZPKUdsb2JhbExvY2sxNihobW1pbyk7CiAJaWYgKGxwbW1pbmZvID09IE5VTEwpIHJldHVybiAwOwogCW1lbXNldChscG1taW5mbywgMCwgc2l6ZW9mKE1NSU9JTkZPKSk7CiAJbHBtbWluZm8tPmhtbWlvID0gaG1taW87CiAJbHBtbWluZm8tPmR3UmVzZXJ2ZWQyID0gTUFLRUxPTkcoaEZpbGUsIDApOwotCUdsb2JhbFVubG9jayhobW1pbyk7CisJR2xvYmFsVW5sb2NrMTYoaG1taW8pOwogCWRwcmludGZfbW1zeXMoc3RkZGViLCAibW1pb09wZW4gLy8gcmV0dXJuIGhtbWlvPSUwNFhcbiIsIGhtbWlvKTsKIAlyZXR1cm4gaG1taW87CiB9CkBAIC0xODgxLDExICsxODgxLDExIEBACiB7CiAJTFBNTUlPSU5GTwlscG1taW5mbzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1taW9DbG9zZSglMDRYLCAlMDRYKTtcbiIsIGhtbWlvLCB1RmxhZ3MpOwotCWxwbW1pbmZvID0gKExQTU1JT0lORk8pR2xvYmFsTG9jayhobW1pbyk7CisJbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrMTYoaG1taW8pOwogCWlmIChscG1taW5mbyA9PSBOVUxMKSByZXR1cm4gMDsKIAlfbGNsb3NlKExPV09SRChscG1taW5mby0+ZHdSZXNlcnZlZDIpKTsKLQlHbG9iYWxVbmxvY2soaG1taW8pOwotCUdsb2JhbEZyZWUoaG1taW8pOworCUdsb2JhbFVubG9jazE2KGhtbWlvKTsKKwlHbG9iYWxGcmVlMTYoaG1taW8pOwogCXJldHVybiAwOwogfQogCkBAIC0xODk5LDEwICsxODk5LDEwIEBACiAJTE9ORwkJY291bnQ7CiAJTFBNTUlPSU5GTwlscG1taW5mbzsKIAlkcHJpbnRmX21taW8oc3RkZGViLCAibW1pb1JlYWQoJTA0WCwgJXAsICVsZCk7XG4iLCBobW1pbywgcGNoLCBjY2gpOwotCWxwbW1pbmZvID0gKExQTU1JT0lORk8pR2xvYmFsTG9jayhobW1pbyk7CisJbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrMTYoaG1taW8pOwogCWlmIChscG1taW5mbyA9PSBOVUxMKSByZXR1cm4gMDsKIAljb3VudCA9IEZJTEVfUmVhZChMT1dPUkQobHBtbWluZm8tPmR3UmVzZXJ2ZWQyKSwgcGNoLCBjY2gpOwotCUdsb2JhbFVubG9jayhobW1pbyk7CisJR2xvYmFsVW5sb2NrMTYoaG1taW8pOwogCWRwcmludGZfbW1pbyhzdGRkZWIsICJtbWlvUmVhZCAvLyBjb3VudD0lbGRcbiIsIGNvdW50KTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xOTE3LDEwICsxOTE3LDEwIEBACiAJTE9ORwkJY291bnQ7CiAJTFBNTUlPSU5GTwlscG1taW5mbzsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1taW9Xcml0ZSglMDRYLCAlcCwgJWxkKTtcbiIsIGhtbWlvLCBwY2gsIGNjaCk7Ci0JbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrKGhtbWlvKTsKKwlscG1taW5mbyA9IChMUE1NSU9JTkZPKUdsb2JhbExvY2sxNihobW1pbyk7CiAJaWYgKGxwbW1pbmZvID09IE5VTEwpIHJldHVybiAwOwogCWNvdW50ID0gX2x3cml0ZShMT1dPUkQobHBtbWluZm8tPmR3UmVzZXJ2ZWQyKSwgKExQU1RSKXBjaCwgY2NoKTsKLQlHbG9iYWxVbmxvY2soaG1taW8pOworCUdsb2JhbFVubG9jazE2KGhtbWlvKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE5MzIsNDAgKzE5MzIsNDAgQEAKIAlpbnQJCWNvdW50OwogCUxQTU1JT0lORk8JbHBtbWluZm87CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvU2VlayglMDRYLCAlMDhsWCwgJWQpO1xuIiwgaG1taW8sIGxPZmZzZXQsIGlPcmlnaW4pOwotCWxwbW1pbmZvID0gKExQTU1JT0lORk8pR2xvYmFsTG9jayhobW1pbyk7CisJbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrMTYoaG1taW8pOwogCWlmIChscG1taW5mbyA9PSBOVUxMKSB7CiAJCWRwcmludGZfbW1zeXMoc3RkZGViLCAibW1pb1NlZWsgLy8gY2FuJ3QgbG9jayBobW1pbz0lMDRYICFcbiIsIGhtbWlvKTsKIAkJcmV0dXJuIDA7CiAJCX0KIAljb3VudCA9IF9sbHNlZWsoTE9XT1JEKGxwbW1pbmZvLT5kd1Jlc2VydmVkMiksIGxPZmZzZXQsIGlPcmlnaW4pOwotCUdsb2JhbFVubG9jayhobW1pbyk7CisJR2xvYmFsVW5sb2NrMTYoaG1taW8pOwogCXJldHVybiBjb3VudDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQltbWlvR2V0SW5mbwkgICAgICAgCVtNTVNZU1RFTS4xMjE1XQogKi8KLVVJTlQgbW1pb0dldEluZm8oSE1NSU8gaG1taW8sIE1NSU9JTkZPIEZBUiogbHBtbWlvaW5mbywgVUlOVCB1RmxhZ3MpCitVSU5UIG1taW9HZXRJbmZvKEhNTUlPIGhtbWlvLCBNTUlPSU5GTyAqIGxwbW1pb2luZm8sIFVJTlQgdUZsYWdzKQogewogCUxQTU1JT0lORk8JbHBtbWluZm87CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvR2V0SW5mb1xuIik7Ci0JbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrKGhtbWlvKTsKKwlscG1taW5mbyA9IChMUE1NSU9JTkZPKUdsb2JhbExvY2sxNihobW1pbyk7CiAJaWYgKGxwbW1pbmZvID09IE5VTEwpIHJldHVybiAwOwogCW1lbWNweShscG1taW9pbmZvLCBscG1taW5mbywgc2l6ZW9mKE1NSU9JTkZPKSk7Ci0JR2xvYmFsVW5sb2NrKGhtbWlvKTsKKwlHbG9iYWxVbmxvY2sxNihobW1pbyk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbW1pb1NldEluZm8gICAgCQlbTU1TWVNURU0uMTIxNl0KICovCi1VSU5UIG1taW9TZXRJbmZvKEhNTUlPIGhtbWlvLCBjb25zdCBNTUlPSU5GTyBGQVIqIGxwbW1pb2luZm8sIFVJTlQgdUZsYWdzKQorVUlOVCBtbWlvU2V0SW5mbyhITU1JTyBobW1pbywgY29uc3QgTU1JT0lORk8gKiBscG1taW9pbmZvLCBVSU5UIHVGbGFncykKIHsKIAlMUE1NSU9JTkZPCWxwbW1pbmZvOwogCWRwcmludGZfbW1zeXMoc3RkZGViLCAibW1pb1NldEluZm9cbiIpOwotCWxwbW1pbmZvID0gKExQTU1JT0lORk8pR2xvYmFsTG9jayhobW1pbyk7CisJbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrMTYoaG1taW8pOwogCWlmIChscG1taW5mbyA9PSBOVUxMKSByZXR1cm4gMDsKLQlHbG9iYWxVbmxvY2soaG1taW8pOworCUdsb2JhbFVubG9jazE2KGhtbWlvKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4NiwyMSArMTk4NiwyMSBAQAogewogCUxQTU1JT0lORk8JbHBtbWluZm87CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvRmx1c2goJTA0WCwgJTA0WClcbiIsIGhtbWlvLCB1RmxhZ3MpOwotCWxwbW1pbmZvID0gKExQTU1JT0lORk8pR2xvYmFsTG9jayhobW1pbyk7CisJbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrMTYoaG1taW8pOwogCWlmIChscG1taW5mbyA9PSBOVUxMKSByZXR1cm4gMDsKLQlHbG9iYWxVbmxvY2soaG1taW8pOworCUdsb2JhbFVubG9jazE2KGhtbWlvKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQltbWlvQWR2YW5jZSAgICAJCVtNTVNZU1RFTS4xMjE5XQogKi8KLVVJTlQgbW1pb0FkdmFuY2UoSE1NSU8gaG1taW8sIE1NSU9JTkZPIEZBUiogbHBtbWlvaW5mbywgVUlOVCB1RmxhZ3MpCitVSU5UIG1taW9BZHZhbmNlKEhNTUlPIGhtbWlvLCBNTUlPSU5GTyAqIGxwbW1pb2luZm8sIFVJTlQgdUZsYWdzKQogewogCWludAkJY291bnQgPSAwOwogCUxQTU1JT0lORk8JbHBtbWluZm87CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvQWR2YW5jZVxuIik7Ci0JbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrKGhtbWlvKTsKKwlscG1taW5mbyA9IChMUE1NSU9JTkZPKUdsb2JhbExvY2sxNihobW1pbyk7CiAJaWYgKGxwbW1pbmZvID09IE5VTEwpIHJldHVybiAwOwogCWlmICh1RmxhZ3MgPT0gTU1JT19SRUFEKSB7CiAJCWNvdW50ID0gRklMRV9SZWFkKExPV09SRChscG1taW5mby0+ZHdSZXNlcnZlZDIpLCAKQEAgLTIwMTEsNyArMjAxMSw3IEBACiAJCQlscG1taW9pbmZvLT5wY2hCdWZmZXIsIGxwbW1pb2luZm8tPmNjaEJ1ZmZlcik7CiAJCX0KIAlscG1taW9pbmZvLT5wY2hOZXh0CSs9IGNvdW50OwotCUdsb2JhbFVubG9jayhobW1pbyk7CisJR2xvYmFsVW5sb2NrMTYoaG1taW8pOwogCWxwbW1pbmZvLT5sRGlza09mZnNldCA9IF9sbHNlZWsoTE9XT1JEKGxwbW1pbmZvLT5kd1Jlc2VydmVkMiksIDAsIFNFRUtfQ1VSKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNDgsMTUgKzIwNDgsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbW1pb0Rlc2NlbmQJICAgICAgIAlbTU1TWVNURU0uMTIyM10KICovCi1VSU5UIG1taW9EZXNjZW5kKEhNTUlPIGhtbWlvLCBNTUNLSU5GTyBGQVIqIGxwY2ssCi0JCSAgICBjb25zdCBNTUNLSU5GTyBGQVIqIGxwY2tQYXJlbnQsIFVJTlQgdUZsYWdzKQorVUlOVCBtbWlvRGVzY2VuZChITU1JTyBobW1pbywgTU1DS0lORk8gKiBscGNrLAorCQkgICAgY29uc3QgTU1DS0lORk8gKiBscGNrUGFyZW50LCBVSU5UIHVGbGFncykKIHsKIAlEV09SRAlkd2ZjYywgZHdPbGRQb3M7CiAJTFBNTUlPSU5GTwlscG1taW5mbzsKIAlkcHJpbnRmX21taW8oc3RkZGViLCAibW1pb0Rlc2NlbmQoJTA0WCwgJXAsICVwLCAlMDRYKTtcbiIsIAogCQkJCWhtbWlvLCBscGNrLCBscGNrUGFyZW50LCB1RmxhZ3MpOwogCWlmIChscGNrID09IE5VTEwpIHJldHVybiAwOwotCWxwbW1pbmZvID0gKExQTU1JT0lORk8pR2xvYmFsTG9jayhobW1pbyk7CisJbHBtbWluZm8gPSAoTFBNTUlPSU5GTylHbG9iYWxMb2NrMTYoaG1taW8pOwogCWlmIChscG1taW5mbyA9PSBOVUxMKSByZXR1cm4gMDsKIAlkd2ZjYyA9IGxwY2stPmNraWQ7CiAJZHByaW50Zl9tbWlvKHN0ZGRlYiwgIm1taW9EZXNjZW5kIC8vIGR3ZmNjPSUwOGxYXG4iLCBkd2ZjYyk7CkBAIC0yMDc0LDcgKzIwNzQsNyBAQAogCQkJaWYgKEZJTEVfUmVhZChMT1dPUkQobHBtbWluZm8tPmR3UmVzZXJ2ZWQyKSwgKExQU1RSKWxwY2ssIAogCQkJCQlzaXplb2YoTU1DS0lORk8pKSA8IHNpemVvZihNTUNLSU5GTykpIHsKIAkJCQlfbGxzZWVrKExPV09SRChscG1taW5mby0+ZHdSZXNlcnZlZDIpLCBkd09sZFBvcywgU0VFS19TRVQpOwotCQkJCUdsb2JhbFVubG9jayhobW1pbyk7CisJCQkJR2xvYmFsVW5sb2NrMTYoaG1taW8pOwogCQkJCXJldHVybiBNTUlPRVJSX0NIVU5LTk9URk9VTkQ7CiAJCQkJfQogCQkJZHByaW50Zl9tbWlvKHN0ZGRlYiwgIm1taW9EZXNjZW5kIC8vIGR3ZmNjPSUwOGxYIGNraWQ9JTA4bFggY2tzaXplPSUwOGxYICFcbiIsIApAQCAtMjA5MCw3ICsyMDkwLDcgQEAKIAkJaWYgKEZJTEVfUmVhZChMT1dPUkQobHBtbWluZm8tPmR3UmVzZXJ2ZWQyKSwgKExQU1RSKWxwY2ssIAogCQkJCXNpemVvZihNTUNLSU5GTykpIDwgc2l6ZW9mKE1NQ0tJTkZPKSkgewogCQkJX2xsc2VlayhMT1dPUkQobHBtbWluZm8tPmR3UmVzZXJ2ZWQyKSwgZHdPbGRQb3MsIFNFRUtfU0VUKTsKLQkJCUdsb2JhbFVubG9jayhobW1pbyk7CisJCQlHbG9iYWxVbmxvY2sxNihobW1pbyk7CiAJCQlyZXR1cm4gTU1JT0VSUl9DSFVOS05PVEZPVU5EOwogCQkJfQogCQl9CkBAIC0yMDk5LDcgKzIwOTksNyBAQAogCQlscGNrLT5kd0RhdGFPZmZzZXQgKz0gc2l6ZW9mKERXT1JEKTsKIAlscG1taW5mby0+bERpc2tPZmZzZXQgPSBfbGxzZWVrKExPV09SRChscG1taW5mby0+ZHdSZXNlcnZlZDIpLCAKIAkJCQkJCQkJCWxwY2stPmR3RGF0YU9mZnNldCwgU0VFS19TRVQpOwotCUdsb2JhbFVubG9jayhobW1pbyk7CisJR2xvYmFsVW5sb2NrMTYoaG1taW8pOwogCWRwcmludGZfbW1pbyhzdGRkZWIsICJtbWlvRGVzY2VuZCAvLyBscGNrLT5ja2lkPSUwOGxYIGxwY2stPmNrc2l6ZT0lbGQgIVxuIiwgCiAJCQkJCQkJCWxwY2stPmNraWQsIGxwY2stPmNrc2l6ZSk7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvRGVzY2VuZCAvLyBscGNrLT5mY2NUeXBlPSUwOGxYICFcbiIsIGxwY2stPmZjY1R5cGUpOwpAQCAtMjEwOSw3ICsyMTA5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJbW1pb0FzY2VuZCAgICAgCQlbTU1TWVNURU0uMTIyNF0KICovCi1VSU5UIG1taW9Bc2NlbmQoSE1NSU8gaG1taW8sIE1NQ0tJTkZPIEZBUiogbHBjaywgVUlOVCB1RmxhZ3MpCitVSU5UIG1taW9Bc2NlbmQoSE1NSU8gaG1taW8sIE1NQ0tJTkZPICogbHBjaywgVUlOVCB1RmxhZ3MpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvQXNjZW5kIC8vIGVtcHR5IHN0dWIgIVxuIik7CiAJcmV0dXJuIDA7CkBAIC0yMTE4LDcgKzIxMTgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQltbWlvQ3JlYXRlQ2h1bmsJCVtNTVNZU1RFTS4xMjI1XQogKi8KLVVJTlQgbW1pb0NyZWF0ZUNodW5rKEhNTUlPIGhtbWlvLCBNTUNLSU5GTyBGQVIqIGxwY2ssIFVJTlQgdUZsYWdzKQorVUlOVCBtbWlvQ3JlYXRlQ2h1bmsoSE1NSU8gaG1taW8sIE1NQ0tJTkZPICogbHBjaywgVUlOVCB1RmxhZ3MpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvQ3JlYXRlQ2h1bmsgLy8gZW1wdHkgc3R1YiBcbiIpOwogCXJldHVybiAwOwpAQCAtMjEyOSw3ICsyMTI5LDcgQEAKICogCQkJCW1taW9SZW5hbWUgICAgIAkJW01NU1lTVEVNLjEyMjZdCiAqLwogVUlOVCBtbWlvUmVuYW1lKExQQ1NUUiBzekZpbGVOYW1lLCBMUENTVFIgc3pOZXdGaWxlTmFtZSwKLSAgICAgTU1JT0lORk8gRkFSKiBscG1taW9pbmZvLCBEV09SRCBkd1JlbmFtZUZsYWdzKQorICAgICBNTUlPSU5GTyAqIGxwbW1pb2luZm8sIERXT1JEIGR3UmVuYW1lRmxhZ3MpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtbWlvUmVuYW1lKCclcycsICclcycsICVwLCAlMDhsWCk7IC8vIGVtcHR5IHN0dWIgXG4iLAogCQkJc3pGaWxlTmFtZSwgc3pOZXdGaWxlTmFtZSwgbHBtbWlvaW5mbywgZHdSZW5hbWVGbGFncyk7CmRpZmYgLS1naXQgYS9vYmplY3RzL2JydXNoLmMgYi9vYmplY3RzL2JydXNoLmMKaW5kZXggY2Q1NWJkMy4uZTVlZTliMCAxMDA2NDQKLS0tIGEvb2JqZWN0cy9icnVzaC5jCisrKyBiL29iamVjdHMvYnJ1c2guYwpAQCAtMjAwLDcgKzIwMCw3IEBACiAKICAgICAgIC8qIE1ha2UgYSBjb3B5IG9mIHRoZSBiaXRtYXAgKi8KIAotICAgIGlmICghKGluZm8gPSAoQklUTUFQSU5GTyAqKSBHbG9iYWxMb2NrKCBoYml0bWFwICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShpbmZvID0gKEJJVE1BUElORk8gKikgR2xvYmFsTG9jazE2KCBoYml0bWFwICkpKSByZXR1cm4gMDsKIAogICAgIHNpemUgPSBpbmZvLT5ibWlIZWFkZXIuYmlTaXplSW1hZ2U7CiAgICAgaWYgKCFzaXplKQpAQCAtMjA4LDE1ICsyMDgsMTUgQEAKIAkgICAgICAgICAqIDggKiBpbmZvLT5ibWlIZWFkZXIuYmlIZWlnaHQ7CiAgICAgc2l6ZSArPSBESUJfQml0bWFwSW5mb1NpemUoIGluZm8sIGNvbG9ydXNlICk7CiAKLSAgICBpZiAoIShsb2dicnVzaC5sYkhhdGNoID0gKElOVClHbG9iYWxBbGxvYyggR01FTV9NT1ZFQUJMRSwgc2l6ZSApKSkKKyAgICBpZiAoIShsb2dicnVzaC5sYkhhdGNoID0gKElOVClHbG9iYWxBbGxvYzE2KCBHTUVNX01PVkVBQkxFLCBzaXplICkpKQogICAgIHsKLQlHbG9iYWxVbmxvY2soIGhiaXRtYXAgKTsKKwlHbG9iYWxVbmxvY2sxNiggaGJpdG1hcCApOwogCXJldHVybiAwOwogICAgIH0KLSAgICBuZXdJbmZvID0gKEJJVE1BUElORk8gKikgR2xvYmFsTG9jayggKEhBTkRMRSlsb2dicnVzaC5sYkhhdGNoICk7CisgICAgbmV3SW5mbyA9IChCSVRNQVBJTkZPICopIEdsb2JhbExvY2sxNiggKEhBTkRMRSlsb2dicnVzaC5sYkhhdGNoICk7CiAgICAgbWVtY3B5KCBuZXdJbmZvLCBpbmZvLCBzaXplICk7Ci0gICAgR2xvYmFsVW5sb2NrKCAoSEFORExFKWxvZ2JydXNoLmxiSGF0Y2ggKTsKLSAgICBHbG9iYWxVbmxvY2soIGhiaXRtYXAgKTsKKyAgICBHbG9iYWxVbmxvY2sxNiggKEhBTkRMRSlsb2dicnVzaC5sYkhhdGNoICk7CisgICAgR2xvYmFsVW5sb2NrMTYoIGhiaXRtYXAgKTsKICAgICByZXR1cm4gQ3JlYXRlQnJ1c2hJbmRpcmVjdCggJmxvZ2JydXNoICk7CiB9CiAKQEAgLTI2NSw3ICsyNjUsNyBAQAogCSAgRGVsZXRlT2JqZWN0KCAoSEFORExFKWJydXNoLT5sb2dicnVzaC5sYkhhdGNoICk7CiAJICBicmVhazsKICAgICAgIGNhc2UgQlNfRElCUEFUVEVSTjoKLQkgIEdsb2JhbEZyZWUoIChIQU5ETEUpYnJ1c2gtPmxvZ2JydXNoLmxiSGF0Y2ggKTsKKwkgIEdsb2JhbEZyZWUxNiggKEhBTkRMRSlicnVzaC0+bG9nYnJ1c2gubGJIYXRjaCApOwogCSAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBHRElfRnJlZU9iamVjdCggaGJydXNoICk7CkBAIC0zOTcsNyArMzk3LDcgQEAKIAogICAgICAgY2FzZSBCU19ESUJQQVRURVJOOgogCWRwcmludGZfZ2RpKCBzdGRkZWIsICJCU19ESUJQQVRURVJOXG4iKTsKLQlpZiAoKGJtcEluZm8gPSAoQklUTUFQSU5GTyAqKSBHbG9iYWxMb2NrKCAoSEFORExFKWJydXNoLT5sb2dicnVzaC5sYkhhdGNoICkpKQorCWlmICgoYm1wSW5mbyA9IChCSVRNQVBJTkZPICopIEdsb2JhbExvY2sxNiggKEhBTkRMRSlicnVzaC0+bG9nYnJ1c2gubGJIYXRjaCApKSkKIAl7CiAJICAgIGludCBzaXplID0gRElCX0JpdG1hcEluZm9TaXplKCBibXBJbmZvLCBicnVzaC0+bG9nYnJ1c2gubGJDb2xvciApOwogCSAgICBoQml0bWFwID0gQ3JlYXRlRElCaXRtYXAoIGhkYywgJmJtcEluZm8tPmJtaUhlYWRlciwgQ0JNX0lOSVQsCkBAIC00MDUsNyArNDA1LDcgQEAKIAkJCQkgICAgICAoV09SRCkgYnJ1c2gtPmxvZ2JydXNoLmxiQ29sb3IgKTsKIAkgICAgQlJVU0hfU2VsZWN0UGF0dGVybkJydXNoKCBkYywgaEJpdG1hcCApOwogCSAgICBEZWxldGVPYmplY3QoIGhCaXRtYXAgKTsKLQkgICAgR2xvYmFsVW5sb2NrKCAoSEFORExFKWJydXNoLT5sb2dicnVzaC5sYkhhdGNoICk7CSAgICAKKwkgICAgR2xvYmFsVW5sb2NrMTYoIChIQU5ETEUpYnJ1c2gtPmxvZ2JydXNoLmxiSGF0Y2ggKTsJICAgIAogCX0KIAkKIAlicmVhazsKZGlmZiAtLWdpdCBhL29iamVjdHMvY3Vyc29yaWNvbi5jIGIvb2JqZWN0cy9jdXJzb3JpY29uLmMKaW5kZXggYjY0NWYwZS4uNzY2ODk2NyAxMDA2NDQKLS0tIGEvb2JqZWN0cy9jdXJzb3JpY29uLmMKKysrIGIvb2JqZWN0cy9jdXJzb3JpY29uLmMKQEAgLTMzMSw4ICszMzEsOCBAQAogICAgIHNpemVYb3IgPSBibXBYb3ItPmJpdG1hcC5ibUhlaWdodCAqIGJtcFhvci0+Yml0bWFwLmJtV2lkdGhCeXRlczsKICAgICBzaXplQW5kID0gYm1wQW5kLT5iaXRtYXAuYm1IZWlnaHQgKiBibXBBbmQtPmJpdG1hcC5ibVdpZHRoQnl0ZXM7CiAKLSAgICBpZiAoIShoYW5kbGUgPSBHbG9iYWxBbGxvYyggR01FTV9NT1ZFQUJMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKENVUlNPUklDT05JTkZPKSArIHNpemVYb3IgKyBzaXplQW5kKSkpCisgICAgaWYgKCEoaGFuZGxlID0gR2xvYmFsQWxsb2MxNiggR01FTV9NT1ZFQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ1VSU09SSUNPTklORk8pICsgc2l6ZVhvciArIHNpemVBbmQpKSkKICAgICB7CiAgICAgICAgIERlbGV0ZU9iamVjdCggaFhvckJpdHMgKTsKICAgICAgICAgRGVsZXRlT2JqZWN0KCBoQW5kQml0cyApOwpAQCAtMzQyLDcgKzM0Miw3IEBACiAgICAgLyogTWFrZSBpdCBvd25lZCBieSB0aGUgbW9kdWxlICovCiAgICAgaWYgKGhJbnN0YW5jZSkgRmFyU2V0T3duZXIoIGhhbmRsZSwgR2V0RXhlUHRyKGhJbnN0YW5jZSkgKTsKIAotICAgIGluZm8gPSAoQ1VSU09SSUNPTklORk8gKilHbG9iYWxMb2NrKCBoYW5kbGUgKTsKKyAgICBpbmZvID0gKENVUlNPUklDT05JTkZPICopR2xvYmFsTG9jazE2KCBoYW5kbGUgKTsKICAgICBpbmZvLT5wdEhvdFNwb3QueCAgID0gaG90c3BvdC54OwogICAgIGluZm8tPnB0SG90U3BvdC55ICAgPSBob3RzcG90Lnk7CiAgICAgaW5mby0+bldpZHRoICAgICAgICA9IGJtcFhvci0+Yml0bWFwLmJtV2lkdGg7CkBAIC0zNTcsNyArMzU3LDcgQEAKICAgICBHZXRCaXRtYXBCaXRzKCBoWG9yQml0cywgc2l6ZVhvciwgKGNoYXIgKikoaW5mbyArIDEpICsgc2l6ZUFuZCApOwogICAgIERlbGV0ZU9iamVjdCggaFhvckJpdHMgKTsKICAgICBEZWxldGVPYmplY3QoIGhBbmRCaXRzICk7Ci0gICAgR2xvYmFsVW5sb2NrKCBoYW5kbGUgKTsKKyAgICBHbG9iYWxVbmxvY2sxNiggaGFuZGxlICk7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIApAQCAtNDEzLDE1ICs0MTMsMTUgQEAKICAgICBpbnQgc2l6ZTsKICAgICBIQU5ETEUgaE5ldzsKIAotICAgIGlmICghKHB0ck9sZCA9IChjaGFyICopR2xvYmFsTG9jayggaGFuZGxlICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShwdHJPbGQgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggaGFuZGxlICkpKSByZXR1cm4gMDsKICAgICBpZiAoIShoSW5zdGFuY2UgPSBHZXRFeGVQdHIoIGhJbnN0YW5jZSApKSkgcmV0dXJuIDA7Ci0gICAgc2l6ZSA9IEdsb2JhbFNpemUoIGhhbmRsZSApOwotICAgIGhOZXcgPSBHbG9iYWxBbGxvYyggR01FTV9NT1ZFQUJMRSwgc2l6ZSApOworICAgIHNpemUgPSBHbG9iYWxTaXplMTYoIGhhbmRsZSApOworICAgIGhOZXcgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX01PVkVBQkxFLCBzaXplICk7CiAgICAgRmFyU2V0T3duZXIoIGhOZXcsIGhJbnN0YW5jZSApOwotICAgIHB0ck5ldyA9IChjaGFyICopR2xvYmFsTG9jayggaE5ldyApOworICAgIHB0ck5ldyA9IChjaGFyICopR2xvYmFsTG9jazE2KCBoTmV3ICk7CiAgICAgbWVtY3B5KCBwdHJOZXcsIHB0ck9sZCwgc2l6ZSApOwotICAgIEdsb2JhbFVubG9jayggaGFuZGxlICk7Ci0gICAgR2xvYmFsVW5sb2NrKCBoTmV3ICk7CisgICAgR2xvYmFsVW5sb2NrMTYoIGhhbmRsZSApOworICAgIEdsb2JhbFVubG9jazE2KCBoTmV3ICk7CiAgICAgcmV0dXJuIGhOZXc7CiB9CiAKQEAgLTQzNyw3ICs0MzcsNyBAQAogIENVUlNPUklDT05JTkZPICpwdHIgPSBOVUxMOwogCiAgaWYoaEljb24pCi0gICAgaWYgKCEocHRyID0gKENVUlNPUklDT05JTkZPKilHbG9iYWxMb2NrKCBoSWNvbiApKSkgcmV0dXJuIEZBTFNFOworICAgIGlmICghKHB0ciA9IChDVVJTT1JJQ09OSU5GTyopR2xvYmFsTG9jazE2KCBoSWNvbiApKSkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmIChwdHItPmJQbGFuZXMgKiBwdHItPmJCaXRzUGVyUGl4ZWwgPT0gMSkKICAgICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaEljb247IC8qIGFzc3VtaW5nIGl0J3MgYSBjdXJzb3IgKi8KQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCSAgIC8qIGtsdWRnZSAqLwogCiAJICAgSFRBU0sgaFRhc2sgPSBHZXRDdXJyZW50VGFzaygpOwotCSAgIFREQiogIHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2soaFRhc2spOworCSAgIFREQiogIHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNihoVGFzayk7CiAKIAkgICBpZighcFRhc2spIHJldHVybiAwOwogCkBAIC01NDIsMTEgKzU0MiwxMSBAQAogICAgIGlmICghKGhhbmRsZSA9IERpcmVjdFJlc0FsbG9jKGhJbnN0YW5jZSwgMHgxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ1VSU09SSUNPTklORk8pICsgc2l6ZVhvciArIHNpemVBbmQpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcHRyID0gKGNoYXIgKilHbG9iYWxMb2NrKCBoYW5kbGUgKTsKKyAgICBwdHIgPSAoY2hhciAqKUdsb2JhbExvY2sxNiggaGFuZGxlICk7CiAgICAgbWVtY3B5KCBwdHIsIGluZm8sIHNpemVvZigqaW5mbykgKTsKICAgICBtZW1jcHkoIHB0ciArIHNpemVvZihDVVJTT1JJQ09OSU5GTyksIGxwQU5EYml0cywgc2l6ZUFuZCApOwogICAgIG1lbWNweSggcHRyICsgc2l6ZW9mKENVUlNPUklDT05JTkZPKSArIHNpemVBbmQsIGxwWE9SYml0cywgc2l6ZVhvciApOwotICAgIEdsb2JhbFVubG9jayggaGFuZGxlICk7CisgICAgR2xvYmFsVW5sb2NrMTYoIGhhbmRsZSApOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKQEAgLTU5NCw3ICs1OTQsNyBAQAogewogICAgIGRwcmludGZfaWNvbiggc3RkZGViLCAiRGVzdHJveUljb246ICUwNHhcbiIsIGhJY29uICk7CiAgICAgLyogRklYTUU6IHNob3VsZCBjaGVjayBmb3IgT0VNIGljb24gaGVyZSAqLwotICAgIHJldHVybiAoR2xvYmFsRnJlZSggaEljb24gKSAhPSAwKTsKKyAgICByZXR1cm4gKEdsb2JhbEZyZWUxNiggaEljb24gKSAhPSAwKTsKIH0KIAogCkBAIC02MDUsNyArNjA1LDcgQEAKIHsKICAgICBkcHJpbnRmX2N1cnNvciggc3RkZGViLCAiRGVzdHJveUN1cnNvcjogJTA0eFxuIiwgaEN1cnNvciApOwogICAgIC8qIEZJWE1FOiBzaG91bGQgY2hlY2sgZm9yIE9FTSBjdXJzb3IgaGVyZSAqLwotICAgIHJldHVybiAoR2xvYmFsRnJlZSggaEN1cnNvciApICE9IDApOworICAgIHJldHVybiAoR2xvYmFsRnJlZTE2KCBoQ3Vyc29yICkgIT0gMCk7CiB9CiAKIApAQCAtNjE5LDcgKzYxOSw3IEBACiAgICAgSEJJVE1BUCBoWG9yQml0cywgaEFuZEJpdHM7CiAgICAgQ09MT1JSRUYgb2xkRmcsIG9sZEJnOwogCi0gICAgaWYgKCEocHRyID0gKENVUlNPUklDT05JTkZPICopR2xvYmFsTG9jayggaEljb24gKSkpIHJldHVybiBGQUxTRTsKKyAgICBpZiAoIShwdHIgPSAoQ1VSU09SSUNPTklORk8gKilHbG9iYWxMb2NrMTYoIGhJY29uICkpKSByZXR1cm4gRkFMU0U7CiAgICAgaWYgKCEoaE1lbURDID0gQ3JlYXRlQ29tcGF0aWJsZURDKCBoZGMgKSkpIHJldHVybiBGQUxTRTsKICAgICBoQW5kQml0cyA9IENyZWF0ZUJpdG1hcCggcHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgMSwgMSwgKGNoYXIgKikocHRyKzEpKTsKICAgICBoWG9yQml0cyA9IENyZWF0ZUJpdG1hcCggcHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgcHRyLT5iUGxhbmVzLApAQCAtNjM5LDcgKzYzOSw3IEBACiAgICAgRGVsZXRlREMoIGhNZW1EQyApOwogICAgIGlmIChoWG9yQml0cykgRGVsZXRlT2JqZWN0KCBoWG9yQml0cyApOwogICAgIGlmIChoQW5kQml0cykgRGVsZXRlT2JqZWN0KCBoQW5kQml0cyApOwotICAgIEdsb2JhbFVubG9jayggaEljb24gKTsKKyAgICBHbG9iYWxVbmxvY2sxNiggaEljb24gKTsKICAgICBTZXRUZXh0Q29sb3IoIGhkYywgb2xkRmcgKTsKICAgICBTZXRCa0NvbG9yKCBoZGMsIG9sZEJnICk7CiAgICAgcmV0dXJuIFRSVUU7CkBAIC02OTQsNyArNjk0LDcgQEAKICAgICAgICAgQ1VSU09SSUNPTklORk8gKnB0cjsKICAgICAgICAgWEltYWdlICppbWFnZTsKIAotICAgICAgICBpZiAoIShwdHIgPSAoQ1VSU09SSUNPTklORk8qKUdsb2JhbExvY2soIGhDdXJzb3IgKSkpIHJldHVybiBGQUxTRTsKKyAgICAgICAgaWYgKCEocHRyID0gKENVUlNPUklDT05JTkZPKilHbG9iYWxMb2NrMTYoIGhDdXJzb3IgKSkpIHJldHVybiBGQUxTRTsKICAgICAgICAgaWYgKHB0ci0+YlBsYW5lcyAqIHB0ci0+YkJpdHNQZXJQaXhlbCAhPSAxKQogICAgICAgICB7CiAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJDdXJzb3IgJTA0eCBoYXMgbW9yZSB0aGFuIDEgYnBwIVxuIiwgaEN1cnNvciApOwpAQCAtNzc4LDcgKzc3OCw3IEBACiAgICAgICAgIGlmIChwaXhtYXBBbGwpIFhGcmVlUGl4bWFwKCBkaXNwbGF5LCBwaXhtYXBBbGwgKTsKICAgICAgICAgaWYgKHBpeG1hcEJpdHMpIFhGcmVlUGl4bWFwKCBkaXNwbGF5LCBwaXhtYXBCaXRzICk7CiAgICAgICAgIGlmIChwaXhtYXBNYXNrKSBYRnJlZVBpeG1hcCggZGlzcGxheSwgcGl4bWFwTWFzayApOwotICAgICAgICBHbG9iYWxVbmxvY2soIGhDdXJzb3IgKTsKKyAgICAgICAgR2xvYmFsVW5sb2NrMTYoIGhDdXJzb3IgKTsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yID09IE5vbmUpIHJldHVybiBGQUxTRTsKZGlmZiAtLWdpdCBhL29iamVjdHMvZGMuYyBiL29iamVjdHMvZGMuYwppbmRleCBkMmVlODhjLi44MDk0NzU2IDEwMDY0NAotLS0gYS9vYmplY3RzL2RjLmMKKysrIGIvb2JqZWN0cy9kYy5jCkBAIC00NTYsNyArNDU2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENyZWF0ZURDICAgIChHREkuNTMpCiAgKi8KLUhEQyBDcmVhdGVEQyggTFBDVFNUUiBkcml2ZXIsIExQQ1RTVFIgZGV2aWNlLCBMUENUU1RSIG91dHB1dCwgY29uc3QgREVWTU9ERSogaW5pdERhdGEgKQorSERDIENyZWF0ZURDKCBMUENTVFIgZHJpdmVyLCBMUENTVFIgZGV2aWNlLCBMUENTVFIgb3V0cHV0LCBjb25zdCBERVZNT0RFKiBpbml0RGF0YSApCiB7CiAgICAgREMgKiBkYzsKICAgICBIQU5ETEUgaGFuZGxlOwpAQCAtNTAwLDcgKzUwMCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVJQyAgICAoR0RJLjE1MykKICAqLwotSERDIENyZWF0ZUlDKCBMUENUU1RSIGRyaXZlciwgTFBDVFNUUiBkZXZpY2UsIExQQ1RTVFIgb3V0cHV0LCBjb25zdCBERVZNT0RFKiBpbml0RGF0YSApCitIREMgQ3JlYXRlSUMoIExQQ1NUUiBkcml2ZXIsIExQQ1NUUiBkZXZpY2UsIExQQ1NUUiBvdXRwdXQsIGNvbnN0IERFVk1PREUqIGluaXREYXRhICkKIHsKICAgICAgIC8qIE5vdGhpbmcgc3BlY2lhbCB5ZXQgZm9yIElDcyAqLwogICAgIHJldHVybiBDcmVhdGVEQyggZHJpdmVyLCBkZXZpY2UsIG91dHB1dCwgaW5pdERhdGEgKTsKZGlmZiAtLWdpdCBhL29iamVjdHMvZm9udC5jIGIvb2JqZWN0cy9mb250LmMKaW5kZXggZTFlMWJiMC4uNzkxN2E1MyAxMDA2NDQKLS0tIGEvb2JqZWN0cy9mb250LmMKKysrIGIvb2JqZWN0cy9mb250LmMKQEAgLTY5NSw3ICs2OTUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0Q2hhcldpZHRoICAgIChHREkuMzUwKQogICovCi1CT09MIEdldENoYXJXaWR0aChIREMgaGRjLCBXT1JEIHdGaXJzdENoYXIsIFdPUkQgd0xhc3RDaGFyLCBMUElOVCBscEJ1ZmZlcikKK0JPT0wgR2V0Q2hhcldpZHRoKEhEQyBoZGMsIFdPUkQgd0ZpcnN0Q2hhciwgV09SRCB3TGFzdENoYXIsIExQSU5UMTYgbHBCdWZmZXIpCiB7CiAgICAgaW50IGksIGo7CiAgICAgWEZvbnRTdHJ1Y3QgKnhmb250OwpAQCAtODU3LDcgKzg1Nyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCQkJRW51bUZvbnRzCQkJW0dESS43MF0KICAqLwotSU5UIEVudW1Gb250cyhIREMgaERDLCBMUENUU1RSIGxwRmFjZU5hbWUsIEZPTlRFTlVNUFJPQyBscEVudW1GdW5jLCBMUEFSQU0gbHBEYXRhKQorSU5UIEVudW1Gb250cyhIREMgaERDLCBMUENTVFIgbHBGYWNlTmFtZSwgRk9OVEVOVU1QUk9DIGxwRW51bUZ1bmMsIExQQVJBTSBscERhdGEpCiB7CiAgIEhBTkRMRSAgICAgICBoTG9nOwogICBIQU5ETEUgICAgICAgaE1ldDsKQEAgLTkyNyw3ICs5MjcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCUVudW1Gb250RmFtaWxpZXMJW0dESS4zMzBdCiAgKi8KLUlOVCBFbnVtRm9udEZhbWlsaWVzKEhEQyBoREMsIExQQ1RTVFIgbHBzekZhbWlseSwgRk9OVEVOVU1QUk9DIGxwRW51bUZ1bmMsIExQQVJBTSBscERhdGEpCitJTlQgRW51bUZvbnRGYW1pbGllcyhIREMgaERDLCBMUENTVFIgbHBzekZhbWlseSwgRk9OVEVOVU1QUk9DIGxwRW51bUZ1bmMsIExQQVJBTSBscERhdGEpCiB7CiAgIEhBTkRMRSAgICAgICAJaExvZzsKICAgSEFORExFICAgICAgIAloTWV0OwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9nZGlvYmouYyBiL29iamVjdHMvZ2Rpb2JqLmMKaW5kZXggZDY3N2U1ZC4uZTk1N2Y3ZSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9nZGlvYmouYworKysgYi9vYmplY3RzL2dkaW9iai5jCkBAIC00NDIsMyArNDQyLDM0IEBACiAgICAgLyogRklYTUU6IHNob3VsZCBjaGVjayBtYWdpYyBoZXJlICovCiAgICAgcmV0dXJuIChvYmplY3QgIT0gTlVMTCk7CiB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTXVsRGl2MTYgICAoR0RJLjEyOCkKKyAqLworSU5UMTYgTXVsRGl2MTYoIElOVDE2IGZvbywgSU5UMTYgYmFyLCBJTlQxNiBiYXogKQoreworICAgIElOVDMyIHJldDsKKyAgICBpZiAoIWJheikgcmV0dXJuIC0zMjc2ODsKKyAgICByZXQgPSAoZm9vICogYmFyKSAvIGJhejsKKyAgICBpZiAoKHJldCA+IDMyNzY3KSB8fCAocmV0IDwgLTMyNzY3KSkgcmV0dXJuIC0zMjc2ODsKKyAgICByZXR1cm4gcmV0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIE11bERpdjMyICAgKEtFUk5FTDMyLjM5MSkKKyAqLworSU5UMzIgTXVsRGl2MzIoIElOVDMyIGZvbywgSU5UMzIgYmFyLCBJTlQzMiBiYXogKQoreworI2lmZGVmIF9fR05VQ19fCisgICAgbG9uZyBsb25nIHJldDsKKyAgICBpZiAoIWJheikgcmV0dXJuIC0xOworICAgIHJldCA9ICgobG9uZyBsb25nKWZvbyAqIGJhcikgLyBiYXo7CisgICAgaWYgKChyZXQgPiAyMTQ3NDgzNjQ3KSB8fCAocmV0IDwgLTIxNDc0ODM2NDcpKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIHJldDsKKyNlbHNlCisgICAgaWYgKCFiYXopIHJldHVybiAtMTsKKyAgICByZXR1cm4gKGZvbyAqIGJhcikgLyBiYXo7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL29iamVjdHMvbWV0YWZpbGUuYyBiL29iamVjdHMvbWV0YWZpbGUuYwppbmRleCA4Y2I0NjBlLi42Y2E4MTRhIDEwMDY0NAotLS0gYS9vYmplY3RzL21ldGFmaWxlLmMKKysrIGIvb2JqZWN0cy9tZXRhZmlsZS5jCkBAIC0zNyw0OCArMzcsNDggQEAKICAgaWYgKCFscEZpbGVuYW1lKQogICAgIHJldHVybiAwOwogCi0gIGhtZiA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIE1GSEVBREVSU0laRSk7Ci0gIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrKGhtZik7CisgIGhtZiA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgTUZIRUFERVJTSVpFKTsKKyAgbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihobWYpOwogICAKICAgaWYgKCFtaCkgewotICAgIEdsb2JhbEZyZWUoaG1mKTsKKyAgICBHbG9iYWxGcmVlMTYoaG1mKTsKICAgICByZXR1cm4gMDsKICAgfQogICAKICAgaWYgKChoRmlsZSA9IF9sb3BlbihscEZpbGVuYW1lLCBPRl9SRUFEKSkgPT0gSEZJTEVfRVJST1IpIHsKLSAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCiAgIGlmIChGSUxFX1JlYWQoaEZpbGUsIChjaGFyICopbWgsIE1GSEVBREVSU0laRSkgPT0gSEZJTEVfRVJST1IpIHsKLSAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCiAgIHNpemUgPSBtaC0+bXRTaXplICogMjsgICAgICAgICAvKiBhbGxvYyBtZW1vcnkgZm9yIHdob2xlIG1ldGFmaWxlICovCi0gIEdsb2JhbFVubG9jayhobWYpOwotICBobWYgPSBHbG9iYWxSZUFsbG9jKGhtZixzaXplLEdNRU1fTU9WRUFCTEUpOwotICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhobWYpOworICBHbG9iYWxVbmxvY2sxNihobWYpOworICBobWYgPSBHbG9iYWxSZUFsbG9jMTYoaG1mLHNpemUsR01FTV9NT1ZFQUJMRSk7CisgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaG1mKTsKICAgCiAgIGlmICghbWgpIHsKLSAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCiAgIGlmIChGSUxFX1JlYWQoaEZpbGUsIChjaGFyKiltaCArIG1oLT5tdEhlYWRlclNpemUgKiAyLCAKIAkgICAgICAgIHNpemUgLSBtaC0+bXRIZWFkZXJTaXplICogMikgPT0gSEZJTEVfRVJST1IpIHsKLSAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCiAgIF9sY2xvc2UoaEZpbGUpOwogCiAgIGlmIChtaC0+bXRUeXBlICE9IDEpIHsKLSAgICBHbG9iYWxGcmVlKGhtZik7CisgICAgR2xvYmFsRnJlZTE2KGhtZik7CiAgICAgcmV0dXJuIDA7CiAgIH0KICAgCi0gIEdsb2JhbFVubG9jayhobWYpOworICBHbG9iYWxVbmxvY2sxNihobWYpOwogICByZXR1cm4gaG1mOwogCiB9CkBAIC04Nyw3ICs4Nyw3IEBACiAgKiAgICAgICAgIENyZWF0ZU1ldGFmaWxlICAgICAgICAgR0RJLjEyNQogICovCiAKLUhBTkRMRSBDcmVhdGVNZXRhRmlsZShMUENUU1RSIGxwRmlsZW5hbWUpCitIQU5ETEUgQ3JlYXRlTWV0YUZpbGUoTFBDU1RSIGxwRmlsZW5hbWUpCiB7CiAgICAgREMgKmRjOwogICAgIEhBTkRMRSBoYW5kbGU7CkBAIC0xMDMsMTIgKzEwMywxMiBAQAogICAgIAogICAgIGRjID0gKERDICopR0RJX0hFQVBfTElOX0FERFIoaGFuZGxlKTsKIAotICAgIGlmICghKGRjLT53LmhNZXRhRmlsZSA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIHNpemVvZihNRVRBSEVBREVSKSkpKSB7CisgICAgaWYgKCEoZGMtPncuaE1ldGFGaWxlID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCBzaXplb2YoTUVUQUhFQURFUikpKSkgewogICAgICAgICBHRElfRnJlZU9iamVjdChoYW5kbGUpOwogCXJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhkYy0+dy5oTWV0YUZpbGUpOworICAgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKIAogICAgIG1oLT5tdEhlYWRlclNpemUgPSBNRkhFQURFUlNJWkUgLyAyOwogICAgIG1oLT5tdFZlcnNpb24gPSBNRlZFUlNJT047CkBAIC0xMjMsNyArMTIzLDcgQEAKIAloRmlsZSA9IF9sY3JlYXQobHBGaWxlbmFtZSwgMCk7CiAJaWYgKF9sd3JpdGUoaEZpbGUsIChjaGFyICopbWgsIE1GSEVBREVSU0laRSkgPT0gLTEpCiAJewotCSAgICBHbG9iYWxGcmVlKGRjLT53LmhNZXRhRmlsZSk7CisJICAgIEdsb2JhbEZyZWUxNihkYy0+dy5oTWV0YUZpbGUpOwogCSAgICByZXR1cm4gMDsKIAl9CiAJbWgtPm10Tm9QYXJhbWV0ZXJzID0gaEZpbGU7IC8qIHN0b3JlIGZpbGUgZGVzY3JpcHRvciBoZXJlICovCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogCiAgICAgLyogY3JlYXRlIHRoZSBoYW5kbGUgdGFibGUgKi8KICAgICBIVExlbiA9IEhUSU5DUjsKLSAgICBoSFQgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwgCisgICAgaEhUID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwgCiAJCSAgICAgIHNpemVvZihIQU5ETEVUQUJMRSkgKiBIVExlbik7CiAgICAgCi0gICAgR2xvYmFsVW5sb2NrKGRjLT53LmhNZXRhRmlsZSk7CisgICAgR2xvYmFsVW5sb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICBkcHJpbnRmX21ldGFmaWxlKHN0ZGRlYiwiQ3JlYXRlTWV0YUZpbGU6IHJldHVybmluZyAlMDR4XG4iLCBoYW5kbGUpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAKICAgICBkcHJpbnRmX21ldGFmaWxlKHN0ZGRlYiwiQ29weU1ldGFGaWxlOiAlc1xuIiwgbHBGaWxlbmFtZSk7CiAgICAgCi0gICAgbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2soaFNyY01ldGFGaWxlKTsKKyAgICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jazE2KGhTcmNNZXRhRmlsZSk7CiAgICAgCiAgICAgaWYgKCFtaCkKICAgICAgIHJldHVybiAwOwpAQCAtMTczLDEwICsxNzMsMTAgQEAKICAgICAgICAgfQogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAvKiBtZW1vcnkgYmFzZWQgbWV0YWZpbGUgKi8KICAgICAgICAgewotCWhhbmRsZSA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsbWgtPm10U2l6ZSAqIDIpOwotCW1oMiA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhoYW5kbGUpOworCWhhbmRsZSA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSxtaC0+bXRTaXplICogMik7CisJbWgyID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaGFuZGxlKTsKIAltZW1jcHkobWgyLG1oLCBtaC0+bXRTaXplICogMik7Ci0JR2xvYmFsVW5sb2NrKGhhbmRsZSk7CisJR2xvYmFsVW5sb2NrMTYoaGFuZGxlKTsKICAgICAgICAgfQogICAgIAogICAgIHJldHVybiBoYW5kbGU7CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICBpZiAoIWRjKSAKICAgICAgIHJldHVybiAwOwogICAgIAotICAgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrKGRjLT53LmhNZXRhRmlsZSk7CisgICAgbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihkYy0+dy5oTWV0YUZpbGUpOwogCiAgICAgLyogQ29uc3RydWN0IHRoZSBlbmQgb2YgbWV0YWZpbGUgcmVjb3JkIC0gdGhpcyBpcyBkb2N1bWVudGVkCiAgICAgICogaW4gU0RLIEtub3dsZWRnZWJhc2UgUTk5MzM0LgpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICAgICBpZiAoIU1GX01ldGFQYXJhbTAoZGMsIE1FVEFfRU9GKSkKICAgICB7Ci0JR2xvYmFsRnJlZShkYy0+dy5oTWV0YUZpbGUpOworCUdsb2JhbEZyZWUxNihkYy0+dy5oTWV0YUZpbGUpOwogCXJldHVybiAwOwogICAgIH0JCiAKQEAgLTIxOSwyMiArMjE5LDIyIEBACiAJbWgtPm10Tm9QYXJhbWV0ZXJzID0gMDsKICAgICAgICAgaWYgKF9sbHNlZWsoaEZpbGUsIDBMLCAwKSA9PSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgR2xvYmFsRnJlZShkYy0+dy5oTWV0YUZpbGUpOworICAgICAgICAgICAgR2xvYmFsRnJlZTE2KGRjLT53LmhNZXRhRmlsZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBpZiAoX2x3cml0ZShoRmlsZSwgKGNoYXIgKiltaCwgTUZIRUFERVJTSVpFKSA9PSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgR2xvYmFsRnJlZShkYy0+dy5oTWV0YUZpbGUpOworICAgICAgICAgICAgR2xvYmFsRnJlZTE2KGRjLT53LmhNZXRhRmlsZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBfbGNsb3NlKGhGaWxlKTsKICAgICB9CiAKICAgICAvKiBkZWxldGUgdGhlIGhhbmRsZSB0YWJsZSAqLwotICAgIEdsb2JhbEZyZWUoaEhUKTsKKyAgICBHbG9iYWxGcmVlMTYoaEhUKTsKIAogICAgIGhtZiA9IGRjLT53LmhNZXRhRmlsZTsKLSAgICBHbG9iYWxVbmxvY2soaG1mKTsKKyAgICBHbG9iYWxVbmxvY2sxNihobWYpOwogICAgIEdESV9GcmVlT2JqZWN0KGhkYyk7CiAgICAgcmV0dXJuIGhtZjsKIH0KQEAgLTI0NiwxMiArMjQ2LDEyIEBACiAKIEJPT0wgRGVsZXRlTWV0YUZpbGUoSE1FVEFGSUxFIGhtZikKIHsKLSAgICBNRVRBSEVBREVSICptaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhobWYpOworICAgIE1FVEFIRUFERVIgKm1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaG1mKTsKIAogICAgIGlmICghbWgpCiAJcmV0dXJuIEZBTFNFOwogCi0gICAgR2xvYmFsRnJlZShobWYpOworICAgIEdsb2JhbEZyZWUxNihobWYpOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogQk9PTCBQbGF5TWV0YUZpbGUoSERDIGhkYywgSE1FVEFGSUxFIGhtZikKIHsKLSAgICBNRVRBSEVBREVSICptaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhobWYpOworICAgIE1FVEFIRUFERVIgKm1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaG1mKTsKICAgICBNRVRBUkVDT1JEICptcjsKICAgICBIQU5ETEVUQUJMRSAqaHQ7CiAgICAgaW50IG9mZnNldCA9IDA7CkBAIC0yNzEsOSArMjcxLDkgQEAKICAgICBkcHJpbnRmX21ldGFmaWxlKHN0ZGRlYiwiUGxheU1ldGFGaWxlKCUwNHggJTA0eClcbiIsaGRjLGhtZik7CiAgICAgCiAgICAgLyogY3JlYXRlIHRoZSBoYW5kbGUgdGFibGUgKi8KLSAgICBoSFQgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFfEdNRU1fWkVST0lOSVQsCisgICAgaEhUID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFfEdNRU1fWkVST0lOSVQsCiAJCSAgICAgIHNpemVvZihIQU5ETEVUQUJMRSkgKiBtaC0+bXROb09iamVjdHMpOwotICAgIGh0ID0gKEhBTkRMRVRBQkxFICopR2xvYmFsTG9jayhoSFQpOworICAgIGh0ID0gKEhBTkRMRVRBQkxFICopR2xvYmFsTG9jazE2KGhIVCk7CiAKICAgICAvKiBsb29wIHRocm91Z2ggbWV0YWZpbGUgcGxheWluZyByZWNvcmRzICovCiAgICAgb2Zmc2V0ID0gbWgtPm10SGVhZGVyU2l6ZSAqIDI7CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgRGVsZXRlT2JqZWN0KCooaHQtPm9iamVjdEhhbmRsZSArIGkpKTsKICAgICAKICAgICAvKiBmcmVlIGhhbmRsZSB0YWJsZSAqLwotICAgIEdsb2JhbEZyZWUoaEhUKTsKKyAgICBHbG9iYWxGcmVlMTYoaEhUKTsKIAogICAgIHJldHVybiBUUlVFOwogfQpAQCAtMzA1LDcgKzMwNSw3IEBACiAKIEJPT0wgRW51bU1ldGFGaWxlKEhEQyBoZGMsIEhNRVRBRklMRSBobWYsIE1GRU5VTVBST0MgbHBFbnVtRnVuYyxMUEFSQU0gbHBEYXRhKQogewotICAgIE1FVEFIRUFERVIgKm1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrKGhtZik7CisgICAgTUVUQUhFQURFUiAqbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihobWYpOwogICAgIE1FVEFSRUNPUkQgKm1yOwogICAgIEhBTkRMRVRBQkxFICpodDsKICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTMxNSw5ICszMTUsOSBAQAogICAgCiAgICAgLyogY3JlYXRlIHRoZSBoYW5kbGUgdGFibGUgKi8KICAgICAKLSAgICBoSFQgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFIHwgR01FTV9aRVJPSU5JVCwKKyAgICBoSFQgPSBHbG9iYWxBbGxvYzE2KEdNRU1fTU9WRUFCTEUgfCBHTUVNX1pFUk9JTklULAogCQkgICAgIHNpemVvZihIQU5ETEVUQUJMRSkgKiBtaC0+bXROb09iamVjdHMpOwotICAgIGh0ID0gKEhBTkRMRVRBQkxFICopR2xvYmFsTG9jayhoSFQpOworICAgIGh0ID0gKEhBTkRMRVRBQkxFICopR2xvYmFsTG9jazE2KGhIVCk7CiAgICAKICAgICBvZmZzZXQgPSBtaC0+bXRIZWFkZXJTaXplICogMjsKICAgICAKQEAgLTMzNSw3ICszMzUsNyBAQAogICAgIH0KIAogICAgIC8qIGZyZWUgaGFuZGxlIHRhYmxlICovCi0gICAgR2xvYmFsRnJlZShoSFQpOworICAgIEdsb2JhbEZyZWUxNihoSFQpOwogCiAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC01MTUsNyArNTE1LDcgQEAKIAogICAgIGNhc2UgTUVUQV9QT0xZUE9MWUdPTjoKICAgICAgIFBvbHlQb2x5Z29uKGhkYywgKExQUE9JTlQpKG1yLT5yZFBhcmFtICsgKihtci0+cmRQYXJhbSkgKyAxKSwKLQkJICAoTFBJTlQpKG1yLT5yZFBhcmFtICsgMSksICoobXItPnJkUGFyYW0pKTsgCisJCSAgKExQSU5UMTYpKG1yLT5yZFBhcmFtICsgMSksICoobXItPnJkUGFyYW0pKTsgCiAgICAgICBicmVhazsKIAogICAgIGNhc2UgTUVUQV9QT0xZTElORToKQEAgLTU1MiwxMyArNTUyLDEzIEBACiAKIAljYXNlIEJTX0RJQlBBVFRFUk46CiAJICAgIHMxID0gbXItPnJkU2l6ZSAqIDIgLSBzaXplb2YoTUVUQVJFQ09SRCkgLSAyOwotCSAgICBobmRsID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgczEpOwotCSAgICBwdHIgPSBHbG9iYWxMb2NrKGhuZGwpOworCSAgICBobmRsID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCBzMSk7CisJICAgIHB0ciA9IEdsb2JhbExvY2sxNihobmRsKTsKIAkgICAgbWVtY3B5KHB0ciwgbXItPnJkUGFyYW0gKyAyLCBzMSk7Ci0JICAgIEdsb2JhbFVubG9jayhobmRsKTsKKwkgICAgR2xvYmFsVW5sb2NrMTYoaG5kbCk7CiAJICAgIE1GX0FkZEhhbmRsZShodCwgbkhhbmRsZXMsCiAJCQkgQ3JlYXRlRElCUGF0dGVybkJydXNoKGhuZGwsICoobXItPnJkUGFyYW0gKyAxKSkpOwotCSAgICBHbG9iYWxGcmVlKGhuZGwpOworCSAgICBHbG9iYWxGcmVlMTYoaG5kbCk7CiAJfQogCWJyZWFrOwogCQpAQCAtNzA1LDE0ICs3MDUsMTQgQEAKIEhNRVRBRklMRSBNRl9Xcml0ZVJlY29yZChITUVUQUZJTEUgaG1mLCBNRVRBUkVDT1JEICptciwgV09SRCBybGVuKQogewogICAgIERXT1JEIGxlbjsKLSAgICBNRVRBSEVBREVSICptaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhobWYpOworICAgIE1FVEFIRUFERVIgKm1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaG1mKTsKICAgICAKICAgICBpZiAobWgtPm10VHlwZSA9PSAwKSAgICAgICAgICAvKiBtZW1vcnkgYmFzZWQgbWV0YWZpbGUgKi8KICAgICB7CiAJbGVuID0gbWgtPm10U2l6ZSAqIDIgKyBybGVuOwotCUdsb2JhbFVubG9jayhobWYpOwotCWhtZiA9IEdsb2JhbFJlQWxsb2MoaG1mLCBsZW4sIEdNRU1fTU9WRUFCTEUpOyAvKiBobWYgY2FuIGNoYW5nZSAqLwotCW1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrKGhtZik7CisJR2xvYmFsVW5sb2NrMTYoaG1mKTsKKwlobWYgPSBHbG9iYWxSZUFsbG9jMTYoaG1mLCBsZW4sIEdNRU1fTU9WRUFCTEUpOyAvKiBobWYgY2FuIGNoYW5nZSAqLworCW1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoaG1mKTsKIAltZW1jcHkoKFdPUkQgKiltaCArIG1oLT5tdFNpemUsIG1yLCBybGVuKTsKICAgICB9CiAgICAgZWxzZSBpZiAobWgtPm10VHlwZSA9PSAxKSAgICAgLyogZGlzayBiYXNlZCBtZXRhZmlsZSAqLwpAQCAtNzIwLDE5ICs3MjAsMTkgQEAKICAgICAgIGRwcmludGZfbWV0YWZpbGUoc3RkZGViLCJXcml0aW5nIHJlY29yZCB0byBkaXNrXG4iKTsKIAlpZiAoX2x3cml0ZShtaC0+bXROb1BhcmFtZXRlcnMsIChjaGFyICopbXIsIHJsZW4pID09IC0xKQogCXsKLQkgICAgR2xvYmFsVW5sb2NrKGhtZik7CisJICAgIEdsb2JhbFVubG9jazE2KGhtZik7CiAJICAgIHJldHVybiAwOwogCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLQlHbG9iYWxVbmxvY2soaG1mKTsKKwlHbG9iYWxVbmxvY2sxNihobWYpOwogCXJldHVybiAwOwogICAgIH0KIAogICAgIG1oLT5tdFNpemUgKz0gcmxlbiAvIDI7CiAgICAgbWgtPm10TWF4UmVjb3JkID0gTUFYKG1oLT5tdE1heFJlY29yZCwgcmxlbiAvIDIpOwotICAgIEdsb2JhbFVubG9jayhobWYpOworICAgIEdsb2JhbFVubG9jazE2KGhtZik7CiAgICAgcmV0dXJuIGhtZjsKIH0KIApAQCAtNzY4LDI0ICs3NjgsMjQgQEAKIGludCBNRl9BZGRIYW5kbGVJbnRlcm5hbChIQU5ETEUgaG9iaikKIHsKICAgICBpbnQgaTsKLSAgICBIQU5ETEVUQUJMRSAqaHQgPSAoSEFORExFVEFCTEUgKilHbG9iYWxMb2NrKGhIVCk7CisgICAgSEFORExFVEFCTEUgKmh0ID0gKEhBTkRMRVRBQkxFICopR2xvYmFsTG9jazE2KGhIVCk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgSFRMZW47IGkrKykKICAgICB7CiAJaWYgKCooaHQtPm9iamVjdEhhbmRsZSArIGkpID09IDApCiAJewogCSAgICAqKGh0LT5vYmplY3RIYW5kbGUgKyBpKSA9IGhvYmo7Ci0JICAgIEdsb2JhbFVubG9jayhoSFQpOworCSAgICBHbG9iYWxVbmxvY2sxNihoSFQpOwogCSAgICByZXR1cm4gaTsKIAl9CiAgICAgfQotICAgIEdsb2JhbFVubG9jayhoSFQpOwotICAgIGlmICghKGhIVCA9IEdsb2JhbFJlQWxsb2MoaEhULCBIVElOQ1IsIEdNRU1fTU9WRUFCTEUgfCBHTUVNX1pFUk9JTklUKSkpCisgICAgR2xvYmFsVW5sb2NrMTYoaEhUKTsKKyAgICBpZiAoIShoSFQgPSBHbG9iYWxSZUFsbG9jMTYoaEhULCBIVElOQ1IsIEdNRU1fTU9WRUFCTEUgfCBHTUVNX1pFUk9JTklUKSkpCiAJcmV0dXJuIC0xOwogICAgIEhUTGVuICs9IEhUSU5DUjsKLSAgICBodCA9IChIQU5ETEVUQUJMRSAqKUdsb2JhbExvY2soaEhUKTsKKyAgICBodCA9IChIQU5ETEVUQUJMRSAqKUdsb2JhbExvY2sxNihoSFQpOwogICAgICooaHQtPm9iamVjdEhhbmRsZSArIGkpID0gaG9iajsKLSAgICBHbG9iYWxVbmxvY2soaEhUKTsKKyAgICBHbG9iYWxVbmxvY2sxNihoSFQpOwogICAgIHJldHVybiBpOwogfQogCkBAIC05NTEsMTIgKzk1MSwxMiBAQAogICAgIGlmICgoaW5kZXggPSBNRl9BZGRIYW5kbGVJbnRlcm5hbChoQnJ1c2gpKSA9PSAtMSkKIAlyZXR1cm4gRkFMU0U7CiAKLSAgICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhkYy0+dy5oTWV0YUZpbGUpOworICAgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICAqKG1yLT5yZFBhcmFtKSA9IGluZGV4OwogICAgIGlmIChpbmRleCA+PSBtaC0+bXROb09iamVjdHMpCiAJbWgtPm10Tm9PYmplY3RzKys7CiAgICAgCi0gICAgR2xvYmFsVW5sb2NrKGRjLT53LmhNZXRhRmlsZSk7CisgICAgR2xvYmFsVW5sb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICBoYW5kbGUgPSBNRl9Xcml0ZVJlY29yZChkYy0+dy5oTWV0YUZpbGUsIG1yLCBtci0+cmRTaXplICogMik7CiAgICAgZGMtPncuaE1ldGFGaWxlID0gaGFuZGxlOwogCkBAIC05ODgsOSArOTg4LDkgQEAKIAlpZiAoIWJtcCkgcmV0dXJuIEZBTFNFOwogCWxlbiA9IHNpemVvZihNRVRBUkVDT1JEKSArIHNpemVvZihCSVRNQVBJTkZPSEVBREVSKSArIAogCSAgICAgIChibXAtPmJpdG1hcC5ibUhlaWdodCAqIGJtcC0+Yml0bWFwLmJtV2lkdGhCeXRlcykgKyA2OwotCWlmICghKGhtciA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIGxlbikpKQorCWlmICghKGhtciA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgbGVuKSkpCiAJICAgIHJldHVybiBGQUxTRTsKLQltciA9IChNRVRBUkVDT1JEICopR2xvYmFsTG9jayhobXIpOworCW1yID0gKE1FVEFSRUNPUkQgKilHbG9iYWxMb2NrMTYoaG1yKTsKIAltZW1zZXQobXIsIDAsIGxlbik7CiAJbXItPnJkRnVuY3Rpb24gPSBNRVRBX0RJQkNSRUFURVBBVFRFUk5CUlVTSDsKIAltci0+cmRTaXplID0gbGVuIC8gMjsKQEAgLTEwMDgsMTYgKzEwMDgsMTYgQEAKIAlicmVhazsKIAogICAgIGNhc2UgQlNfRElCUEFUVEVSTjoKLQlpbmZvID0gKEJJVE1BUElORk8gKilHbG9iYWxMb2NrKChIQU5ETEUpbG9nYnJ1c2gtPmxiSGF0Y2gpOworCWluZm8gPSAoQklUTUFQSU5GTyAqKUdsb2JhbExvY2sxNigoSEFORExFKWxvZ2JydXNoLT5sYkhhdGNoKTsKIAlibVNpemUgPSBpbmZvLT5ibWlIZWFkZXIuYmlTaXplSW1hZ2U7CiAJaWYgKCFibVNpemUpCiAJICAgIGJtU2l6ZSA9IChpbmZvLT5ibWlIZWFkZXIuYmlXaWR0aCAqIGluZm8tPmJtaUhlYWRlci5iaUJpdENvdW50IAogCQkgICAgKyAzMSkgLyAzMiAqIDggKiBpbmZvLT5ibWlIZWFkZXIuYmlIZWlnaHQ7CiAJYmlTaXplID0gRElCX0JpdG1hcEluZm9TaXplKGluZm8sIExPV09SRChsb2dicnVzaC0+bGJDb2xvcikpOyAKIAlsZW4gPSBzaXplb2YoTUVUQVJFQ09SRCkgKyBiaVNpemUgKyBibVNpemUgKyAyOwotCWlmICghKGhtciA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIGxlbikpKQorCWlmICghKGhtciA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgbGVuKSkpCiAJICAgIHJldHVybiBGQUxTRTsKLQltciA9IChNRVRBUkVDT1JEICopR2xvYmFsTG9jayhobXIpOworCW1yID0gKE1FVEFSRUNPUkQgKilHbG9iYWxMb2NrMTYoaG1yKTsKIAltZW1zZXQobXIsIDAsIGxlbik7CiAJbXItPnJkRnVuY3Rpb24gPSBNRVRBX0RJQkNSRUFURVBBVFRFUk5CUlVTSDsKIAltci0+cmRTaXplID0gbGVuIC8gMjsKQEAgLTEwMzAsMTEgKzEwMzAsMTEgQEAKICAgICB9CiAgICAgaWYgKCEoZGMtPncuaE1ldGFGaWxlID0gTUZfV3JpdGVSZWNvcmQoZGMtPncuaE1ldGFGaWxlLCBtciwgbGVuKSkpCiAgICAgewotCUdsb2JhbEZyZWUoaG1yKTsKKwlHbG9iYWxGcmVlMTYoaG1yKTsKIAlyZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgR2xvYmFsRnJlZShobXIpOworICAgIEdsb2JhbEZyZWUxNihobXIpOwogICAgIAogICAgIG1yID0gKE1FVEFSRUNPUkQgKikmYnVmZmVyOwogICAgIG1yLT5yZFNpemUgPSBzaXplb2YoTUVUQVJFQ09SRCkgLyAyOwpAQCAtMTA0MiwxMSArMTA0MiwxMSBAQAogICAgIGlmICgoaW5kZXggPSBNRl9BZGRIYW5kbGVJbnRlcm5hbChoQnJ1c2gpKSA9PSAtMSkKIAlyZXR1cm4gRkFMU0U7CiAKLSAgICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhkYy0+dy5oTWV0YUZpbGUpOworICAgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICAqKG1yLT5yZFBhcmFtKSA9IGluZGV4OwogICAgIGlmIChpbmRleCA+PSBtaC0+bXROb09iamVjdHMpCiAJbWgtPm10Tm9PYmplY3RzKys7Ci0gICAgR2xvYmFsVW5sb2NrKGRjLT53LmhNZXRhRmlsZSk7CisgICAgR2xvYmFsVW5sb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICBoYW5kbGUgPSBNRl9Xcml0ZVJlY29yZChkYy0+dy5oTWV0YUZpbGUsIG1yLCBtci0+cmRTaXplICogMik7CiAgICAgZGMtPncuaE1ldGFGaWxlID0gaGFuZGxlOwogCkBAIC0xMDc5LDExICsxMDc5LDExIEBACiAgICAgaWYgKChpbmRleCA9IE1GX0FkZEhhbmRsZUludGVybmFsKGhQZW4pKSA9PSAtMSkKIAlyZXR1cm4gRkFMU0U7CiAKLSAgICBtaCA9IChNRVRBSEVBREVSICopR2xvYmFsTG9jayhkYy0+dy5oTWV0YUZpbGUpOworICAgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICAqKG1yLT5yZFBhcmFtKSA9IGluZGV4OwogICAgIGlmIChpbmRleCA+PSBtaC0+bXROb09iamVjdHMpCiAJbWgtPm10Tm9PYmplY3RzKys7Ci0gICAgR2xvYmFsVW5sb2NrKGRjLT53LmhNZXRhRmlsZSk7CisgICAgR2xvYmFsVW5sb2NrMTYoZGMtPncuaE1ldGFGaWxlKTsKICAgICBoYW5kbGUgPSBNRl9Xcml0ZVJlY29yZChkYy0+dy5oTWV0YUZpbGUsIG1yLCBtci0+cmRTaXplICogMik7CiAgICAgZGMtPncuaE1ldGFGaWxlID0gaGFuZGxlOwogICAgIApAQCAtMTExNiwxMSArMTExNiwxMSBAQAogICAgIGlmICgoaW5kZXggPSBNRl9BZGRIYW5kbGVJbnRlcm5hbChoRm9udCkpID09IC0xKQogCXJldHVybiBGQUxTRTsKIAotICAgIG1oID0gKE1FVEFIRUFERVIgKilHbG9iYWxMb2NrKGRjLT53LmhNZXRhRmlsZSk7CisgICAgbWggPSAoTUVUQUhFQURFUiAqKUdsb2JhbExvY2sxNihkYy0+dy5oTWV0YUZpbGUpOwogICAgICoobXItPnJkUGFyYW0pID0gaW5kZXg7CiAgICAgaWYgKGluZGV4ID49IG1oLT5tdE5vT2JqZWN0cykKIAltaC0+bXROb09iamVjdHMrKzsKLSAgICBHbG9iYWxVbmxvY2soZGMtPncuaE1ldGFGaWxlKTsKKyAgICBHbG9iYWxVbmxvY2sxNihkYy0+dy5oTWV0YUZpbGUpOwogICAgIGhhbmRsZSAgPSBNRl9Xcml0ZVJlY29yZChkYy0+dy5oTWV0YUZpbGUsIG1yLCBtci0+cmRTaXplICogMik7CiAgICAgZGMtPncuaE1ldGFGaWxlID0gaGFuZGxlOwogICAgIApAQCAtMTEzOSw5ICsxMTM5LDkgQEAKICAgICBNRVRBUkVDT1JEICptcjsKIAogICAgIGxlbiA9IHNpemVvZihNRVRBUkVDT1JEKSArICgoKGNvdW50ICsgMSkgPj4gMSkgKiAyKSArIDQ7Ci0gICAgaWYgKCEoaG1yID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSwgbGVuKSkpCisgICAgaWYgKCEoaG1yID0gR2xvYmFsQWxsb2MxNihHTUVNX01PVkVBQkxFLCBsZW4pKSkKIAlyZXR1cm4gRkFMU0U7Ci0gICAgbXIgPSAoTUVUQVJFQ09SRCAqKUdsb2JhbExvY2soaG1yKTsKKyAgICBtciA9IChNRVRBUkVDT1JEICopR2xvYmFsTG9jazE2KGhtcik7CiAgICAgbWVtc2V0KG1yLCAwLCBsZW4pOwogCiAgICAgbXItPnJkU2l6ZSA9IGxlbiAvIDI7CkBAIC0xMTUyLDcgKzExNTIsNyBAQAogICAgICoobXItPnJkUGFyYW0gKyAoKGNvdW50ICsgMSkgPj4gMSkgKyAyKSA9IHg7CiAgICAgaGFuZGxlID0gTUZfV3JpdGVSZWNvcmQoZGMtPncuaE1ldGFGaWxlLCBtciwgbXItPnJkU2l6ZSAqIDIpOwogICAgIGRjLT53LmhNZXRhRmlsZSA9IGhhbmRsZTsKLSAgICBHbG9iYWxGcmVlKGhtcik7CisgICAgR2xvYmFsRnJlZTE2KGhtcik7CiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIApAQCAtMTE2OCw5ICsxMTY4LDkgQEAKICAgICBNRVRBUkVDT1JEICptcjsKIAogICAgIGxlbiA9IHNpemVvZihNRVRBUkVDT1JEKSArIChjb3VudCAqIDQpOyAKLSAgICBpZiAoIShobXIgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFLCBsZW4pKSkKKyAgICBpZiAoIShobXIgPSBHbG9iYWxBbGxvYzE2KEdNRU1fTU9WRUFCTEUsIGxlbikpKQogCXJldHVybiBGQUxTRTsKLSAgICBtciA9IChNRVRBUkVDT1JEICopR2xvYmFsTG9jayhobXIpOworICAgIG1yID0gKE1FVEFSRUNPUkQgKilHbG9iYWxMb2NrMTYoaG1yKTsKICAgICBtZW1zZXQobXIsIDAsIGxlbik7CiAKICAgICBtci0+cmRTaXplID0gbGVuIC8gMjsKQEAgLTExNzksNyArMTE3OSw3IEBACiAgICAgbWVtY3B5KG1yLT5yZFBhcmFtICsgMSwgcHQsIGNvdW50ICogNCk7CiAgICAgaGFuZGxlICA9IE1GX1dyaXRlUmVjb3JkKGRjLT53LmhNZXRhRmlsZSwgbXIsIG1yLT5yZFNpemUgKiAyKTsKICAgICBkYy0+dy5oTWV0YUZpbGUgPSBoYW5kbGU7Ci0gICAgR2xvYmFsRnJlZShobXIpOworICAgIEdsb2JhbEZyZWUxNihobXIpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKZGlmZiAtLWdpdCBhL29iamVjdHMvb2VtYml0bWFwLmMgYi9vYmplY3RzL29lbWJpdG1hcC5jCmluZGV4IDA0ODY3ZmEuLmNhMzMwY2UgMTAwNjQ0Ci0tLSBhL29iamVjdHMvb2VtYml0bWFwLmMKKysrIGIvb2JqZWN0cy9vZW1iaXRtYXAuYwpAQCAtNDQyLDE1ICs0NDIsMTUgQEAKICAgICBzaXplWG9yID0gYm1wWG9yLT5iaXRtYXAuYm1IZWlnaHQgKiBibXBYb3ItPmJpdG1hcC5ibVdpZHRoQnl0ZXM7CiAgICAgc2l6ZUFuZCA9IGJtcFhvci0+Yml0bWFwLmJtSGVpZ2h0ICogKChibXBYb3ItPmJpdG1hcC5ibVdpZHRoKzE1KSAvIDE2ICogMik7CiAKLSAgICBpZiAoIShoYW5kbGUgPSBHbG9iYWxBbGxvYyggR01FTV9NT1ZFQUJMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKENVUlNPUklDT05JTkZPKSArIHNpemVYb3IgKyBzaXplQW5kKSkpCisgICAgaWYgKCEoaGFuZGxlID0gR2xvYmFsQWxsb2MxNiggR01FTV9NT1ZFQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ1VSU09SSUNPTklORk8pICsgc2l6ZVhvciArIHNpemVBbmQpKSkKICAgICB7CiAgICAgICAgIERlbGV0ZU9iamVjdCggaFhvckJpdHMgKTsKICAgICAgICAgRGVsZXRlT2JqZWN0KCBoQW5kQml0cyApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBwSW5mbyA9IChDVVJTT1JJQ09OSU5GTyAqKUdsb2JhbExvY2soIGhhbmRsZSApOworICAgIHBJbmZvID0gKENVUlNPUklDT05JTkZPICopR2xvYmFsTG9jazE2KCBoYW5kbGUgKTsKICAgICBwSW5mby0+cHRIb3RTcG90LnggICA9IGhvdHNwb3QueDsKICAgICBwSW5mby0+cHRIb3RTcG90LnkgICA9IGhvdHNwb3QueTsKICAgICBwSW5mby0+bldpZHRoICAgICAgICA9IGJtcFhvci0+Yml0bWFwLmJtV2lkdGg7CmRpZmYgLS1naXQgYS9vYmplY3RzL3JlZ2lvbi5jIGIvb2JqZWN0cy9yZWdpb24uYwppbmRleCBmOTk0YTkxLi45MzViOTk2IDEwMDY0NAotLS0gYS9vYmplY3RzL3JlZ2lvbi5jCisrKyBiL29iamVjdHMvcmVnaW9uLmMKQEAgLTI0OSw3ICsyNDksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQ3JlYXRlUG9seVBvbHlnb25SZ24gICAgKEdESS40NTEpCiAgKi8KLUhSR04gQ3JlYXRlUG9seVBvbHlnb25SZ24oIGNvbnN0IFBPSU5UICogcG9pbnRzLCBjb25zdCBJTlQgKiBjb3VudCwKK0hSR04gQ3JlYXRlUG9seVBvbHlnb25SZ24oIGNvbnN0IFBPSU5UICogcG9pbnRzLCBjb25zdCBJTlQxNiAqIGNvdW50LAogCQkJICAgSU5UIG5icG9seWdvbnMsIElOVCBtb2RlICkKIHsKICAgICBSR05PQkogKiBvYmo7CmRpZmYgLS1naXQgYS9vYmplY3RzL3RleHQuYyBiL29iamVjdHMvdGV4dC5jCmluZGV4IDZhZDVkNGUuLjNlNjJjODQgMTAwNjQ0Ci0tLSBhL29iamVjdHMvdGV4dC5jCisrKyBiL29iamVjdHMvdGV4dC5jCkBAIC0xODQsNyArMTg0LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIERyYXdUZXh0ICAgIChVU0VSLjg1KQogICovCi1JTlQgRHJhd1RleHQoIEhEQyBoZGMsIExQQ1RTVFIgc3RyLCBJTlQgaV9jb3VudCwgTFBSRUNUIHJlY3QsIFVJTlQgZmxhZ3MgKQorSU5UIERyYXdUZXh0KCBIREMgaGRjLCBMUENTVFIgc3RyLCBJTlQgaV9jb3VudCwgTFBSRUNUIHJlY3QsIFVJTlQgZmxhZ3MgKQogewogICAgIFNJWkUgc2l6ZTsKICAgICBjb25zdCBjaGFyICpzdHJQdHI7CkBAIC0yODYsNyArMjg2LDcgQEAKICAqICAgICAgICAgICBFeHRUZXh0T3V0ICAgIChHREkuMzUxKQogICovCiBCT09MIEV4dFRleHRPdXQoIEhEQyBoZGMsIHNob3J0IHgsIHNob3J0IHksIFdPUkQgZmxhZ3MsIExQUkVDVCBscHJlY3QsCi0gICAgICAgICAgICAgICAgIExQU1RSIHN0ciwgV09SRCBjb3VudCwgTFBJTlQgbHBEeCApCisgICAgICAgICAgICAgICAgIExQU1RSIHN0ciwgV09SRCBjb3VudCwgTFBJTlQxNiBscER4ICkKIHsKICAgICBpbnQgZGlyLCBhc2NlbnQsIGRlc2NlbnQsIGk7CiAgICAgWENoYXJTdHJ1Y3QgaW5mbzsKQEAgLTUxOCw3ICs1MTgsNyBAQAogICogICAgICAgdGhhbiBUQV9MRUZUfFRBX1RPUC4gQnV0IHdlIHdhbnQgYnVnLWZvci1idWcgY29tcGF0aWJpbGl0eSA6LSkKICAqLwogTE9ORyBURVhUX1RhYmJlZFRleHRPdXQoIEhEQyBoZGMsIGludCB4LCBpbnQgeSwgTFBTVFIgbHBzdHIsIGludCBjb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNUYWJTdG9wcywgTFBJTlQgbHBUYWJQb3MsIGludCBuVGFiT3JnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjVGFiU3RvcHMsIExQSU5UMTYgbHBUYWJQb3MsIGludCBuVGFiT3JnLAogICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZkRpc3BsYXlUZXh0KQogewogICAgIFdPUkQgZGVmV2lkdGg7CkBAIC01NzQsNyArNTc0LDcgQEAKICAqICAgICAgICAgICBUYWJiZWRUZXh0T3V0ICAgIChVU0VSLjE5NikKICAqLwogTE9ORyBUYWJiZWRUZXh0T3V0KCBIREMgaGRjLCBzaG9ydCB4LCBzaG9ydCB5LCBMUFNUUiBscHN0ciwgc2hvcnQgY291bnQsIAotICAgICAgICAgICAgICAgICAgICBzaG9ydCBjVGFiU3RvcHMsIExQSU5UIGxwVGFiUG9zLCBzaG9ydCBuVGFiT3JnICkKKyAgICAgICAgICAgICAgICAgICAgc2hvcnQgY1RhYlN0b3BzLCBMUElOVDE2IGxwVGFiUG9zLCBzaG9ydCBuVGFiT3JnICkKIHsKICAgICBkcHJpbnRmX3RleHQoIHN0ZGRlYiwgIlRhYmJlZFRleHRPdXQ6ICUwNHggJWQsJWQgJyUqLipzJyAlZFxuIiwKICAgICAgICAgICAgICAgICAgIGhkYywgeCwgeSwgY291bnQsIGNvdW50LCBscHN0ciwgY291bnQgKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogICogICAgICAgICAgIEdldFRhYmJlZFRleHRFeHRlbnQgICAgKFVTRVIuMTk3KQogICovCiBEV09SRCBHZXRUYWJiZWRUZXh0RXh0ZW50KCBIREMgaGRjLCBMUFNUUiBscHN0ciwgaW50IGNvdW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNUYWJTdG9wcywgTFBJTlQgbHBUYWJQb3MgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY1RhYlN0b3BzLCBMUElOVDE2IGxwVGFiUG9zICkKIHsKICAgICBkcHJpbnRmX3RleHQoIHN0ZGRlYiwgIkdldFRhYmJlZFRleHRFeHRlbnQ6ICUwNHggJyUqLipzJyAlZFxuIiwKICAgICAgICAgICAgICAgICAgIGhkYywgY291bnQsIGNvdW50LCBscHN0ciwgY291bnQgKTsKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL01ha2VmaWxlLmluIGIvcHJvZ3JhbXMvTWFrZWZpbGUuaW4KaW5kZXggYTk1NGE1Zi4uYzQyOTI4ZCAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvTWFrZWZpbGUuaW4KKysrIGIvcHJvZ3JhbXMvTWFrZWZpbGUuaW4KQEAgLTEsNCArMSw0IEBACi1TVUJESVJTID0gcHJvZ21hbgorU1VCRElSUyA9IHByb2dtYW4gd2luaGVscAogCiBhbGw6ICQoU1VCRElSUykKIApAQCAtOCw2ICs4LDkgQEAKIGRlcGVuZDoKIAlmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGRlcGVuZCk7IGRvbmUKIAoraW5zdGFsbDoKKwlmb3IgaSBpbiAkKFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGluc3RhbGwpOyBkb25lCisKIGNsZWFuOgogCWZvciBpIGluICQoU1VCRElSUyk7IGRvIChjZCAkJGk7ICQoTUFLRSkgY2xlYW4pOyBkb25lCiAKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4gYi9wcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluCmluZGV4IDM3YWYzOTQuLjhkYjY1ZDIgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4KKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbgpAQCAtNiw2ICs2LDE5IEBACiBMQU5HVUFHRVMgICA9IEVuIERlIEZyCiBMSUNFTlNFTEFORyA9IEVuCiAKKyMgSW5zdGFsbGF0aW9uIGluZm9zCisKK0lOU1RBTEwgICAgICAgICA9IEBJTlNUQUxMQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfREFUQSAgICA9IEBJTlNUQUxMX0RBVEFACitwcmVmaXggICAgICAgICAgPSBAcHJlZml4QAorZXhlY19wcmVmaXggICAgID0gQGV4ZWNfcHJlZml4QAorYmluZGlyICAgICAgICAgID0gQGJpbmRpckAKK2xpYmRpciAgICAgICAgICA9IEBsaWJkaXJACitzeXNjb25mZGlyICAgICAgPSBAc3lzY29uZmRpckAKK21hbmRpciAgICAgICAgICA9IEBtYW5kaXJAL21hbjEKK21hbmV4dCAgICAgICAgICA9IC4xCisKIE1PU1RPQkpTID0gXAogCWRpYWxvZy5vIFwKIAlncm91cC5vIFwKQEAgLTMwLDEwICs0MywxNSBAQAogcHJvZ21hbjogJChNT1NUT0JKUykgJChTVFJJTkdPQkpTKSAkKFdJTkVMSUIpCiAJJChDQykgLW8gcHJvZ21hbiAkKE1PU1RPQkpTKSAkKExET1BUSU9OUykgJChBTExfTElCUykgJChTVFJJTkdPQkpTKQogCitpbnN0YWxsOiBkdW1teQorCSQoSU5TVEFMTF9QUk9HUkFNKSBwcm9nbWFuICQoYmluZGlyKS9wcm9nbWFuCisKIGNsZWFuOjoKIAkkKFJNKSBhY2NlbC5jIGFjY2VsLmggJChMQU5HVUFHRVM6JT0lLmMpICQoTEFOR1VBR0VTOiU9JS5oKSBwcm9nbWFuCiAKIGFjY2VsLmMgYWNjZWwuaDogJChXSU5FUkMpIFh4LnJjCiAkKExBTkdVQUdFUzolPSUuYykgJChMQU5HVUFHRVM6JT0lLmgpOiAkKFdJTkVSQykgWHgucmMKIAorZHVtbXk6CisKICMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL0NoYW5nZUxvZyBiL3Byb2dyYW1zL3dpbmhlbHAvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTJmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL0NoYW5nZUxvZwpAQCAtMCwwICsxLDcgQEAKK01vbiBBcHIgMjkgMTk6NDg6MTUgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KKworCSogW3dpbmhlbHAuY10gW3dpbmhlbHAuaF0gW2hscGZpbGUuY10gW2hscGZpbGUuaF0KKwlbbWFjcm8uY10gW21hY3JvLmhdIFttYWNyby5sZXgubF0gW21hY3JvLnlhY2MueV0KKyAJW3N0cmluZy5jXSBbRW4ucmNdIFtEZS5yY10gW1h4LnJjXSBbaGxwMnNnbWwuY10KKwlPcmlnaW5hbCBieSBVbHJpY2ggU2NobWlkCisKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvRGUucmMgYi9wcm9ncmFtcy93aW5oZWxwL0RlLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YTBjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL0RlLnJjCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBIZWxwIFZpZXdlcgorICoKKyAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKKyAqLworCisvKiBUaGlzIGZpbGUgaXMgbm90IHlldCBjb21wbGV0ZSAhISAqLworCisjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRGUKKyNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICAyCisKKy8qIE1lbnUgKi8KKworI2RlZmluZSBNRU5VX0ZJTEUgICAgICAgICAgICAgICAgICAgICImRGF0ZWkiCisjZGVmaW5lIE1FTlVfRklMRV9PUEVOICAgICAgICAgICAgICAgItYmZmZuZW4uLi4iCisjZGVmaW5lIE1FTlVfRklMRV9QUklOVCAgICAgICAgICAgICAgIlRoZW1hICZkcnVja2VuIgorI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlRFUl9TRVRVUCAgICAgICJEcnVja2VyJmVpbnJpY2h0dW5nLi4uIgorI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICImQmVlbmRlbiIKKworI2RlZmluZSBNRU5VX0VESVQgICAgICAgICAgICAgICAgICAgICImQmVhcmJlaXRlbiIKKyNkZWZpbmUgTUVOVV9FRElUX0NPUFlfRElBTE9HICAgICAgICAiJktvcGllcmVuLi4uIgorI2RlZmluZSBNRU5VX0VESVRfQU5OT1RBVEUgICAgICAgICAgICImQW5tZXJrZW4uLi4iCisKKyNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiJkxlc2V6ZWljaGVuIgorI2RlZmluZSBNRU5VX0JPT0tNQVJLX0RFRklORSAgICAgICAgICImRGVmaW5pZXJlbi4uLiIKKworI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImSGlsZmUiCisjZGVmaW5lIE1FTlVfSEVMUF9PTl9IRUxQICAgICAgICAgICAgIiZIaWxmZSBiZW51dHplbiIKKyNkZWZpbmUgTUVOVV9IRUxQX09OX1RPUCAgICAgICAgICAgICAiSW1tZXIgaW0gJlZvcmRlcmdydW5kIgorI2RlZmluZSBNRU5VX0hFTFBfSU5GTyAgICAgICAgICAgICAgICJJbmYmby4uLiIKKyNkZWZpbmUgTUVOVV9IRUxQX0FCT1VUX1dJTkUgICAgICAgICAiJtxiZXIgV0lORSIKKworLyogU3RyaW5ncyAqLworCisjZGVmaW5lIFNUUklOR19XSU5FX0hFTFAgICAgICAgICAgICAgIldJTkUgSGlsZmUiCisjZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgIkZFSExFUiIKKyNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAiQUNIVFVORyIKKyNkZWZpbmUgU1RSSU5HX0lORk8gICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCisjZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgIk5pY2h0IGltcGxlbWVudGllcnQiCisjZGVmaW5lIFNUUklOR19ITFBGSUxFX0VSUk9SX3MgICAgICAgIkZlaGxlciBiZWltIExlc2VuIGRlciBIaWxmZS1EYXRlaSBgJXMnIgorI2RlZmluZSBTVFJJTkdfQ09OVEVOVFMgICAgICAgICAgICAgICImSW5oYWx0IgorI2RlZmluZSBTVFJJTkdfU0VBUkNIICAgICAgICAgICAgICAgICImU3VjaGVuIgorI2RlZmluZSBTVFJJTkdfQkFDSyAgICAgICAgICAgICAgICAgICImWnVy/GNrIgorI2RlZmluZSBTVFJJTkdfSElTVE9SWSAgICAgICAgICAgICAgICImQmlzaGVyIgorI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICJBbGxlIERhdGVpZW4gKCouKikiCisjZGVmaW5lIFNUUklOR19IRUxQX0ZJTEVTX0hMUCAgICAgICAgIkhpbGZlLURhdGVpZW4gKCouaGxwKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9Fbi5yYyBiL3Byb2dyYW1zL3dpbmhlbHAvRW4ucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0Mzg5YgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvRW4ucmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAorICovCisKKy8qIFRoaXMgZmlsZSBpcyBub3QgeWV0IGNvbXBsZXRlICEhICovCisKKyNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBFbgorI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDAKKworLyogTWVudSAqLworCisjZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIiZGaWxlIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImT3Blbi4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UICAgICAgICAgICAgICAiJlByaW50IgorI2RlZmluZSBNRU5VX0ZJTEVfUFJJTlRFUl9TRVRVUCAgICAgICJQcmludGVyICZzZXR1cC4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAiJkV4aXQiCisKKyNkZWZpbmUgTUVOVV9FRElUICAgICAgICAgICAgICAgICAgICAiJkVkaXQiCisjZGVmaW5lIE1FTlVfRURJVF9DT1BZX0RJQUxPRyAgICAgICAgIiZDb3B5Li4uIgorI2RlZmluZSBNRU5VX0VESVRfQU5OT1RBVEUgICAgICAgICAgICImQW5ub3RhdGUuLi4iCisKKyNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiJkJvb2ttYXJrIgorI2RlZmluZSBNRU5VX0JPT0tNQVJLX0RFRklORSAgICAgICAgICImRGVmaW5lLi4uIgorCisjZGVmaW5lIE1FTlVfSEVMUCAgICAgICAgICAgICAgICAgICAgIiZIZWxwIgorI2RlZmluZSBNRU5VX0hFTFBfT05fSEVMUCAgICAgICAgICAgICJIZWxwICZvbiBoZWxwIgorI2RlZmluZSBNRU5VX0hFTFBfT05fVE9QICAgICAgICAgICAgICJBbHdheXMgb24gJnRvcCIKKyNkZWZpbmUgTUVOVV9IRUxQX0lORk8gICAgICAgICAgICAgICAiJkluZm8uLi4iCisjZGVmaW5lIE1FTlVfSEVMUF9BQk9VVF9XSU5FICAgICAgICAgIiZBYm91dCBXSU5FIgorCisvKiBTdHJpbmdzICovCisKKyNkZWZpbmUgU1RSSU5HX1dJTkVfSEVMUCAgICAgICAgICAgICAiV0lORSBIZWxwIgorI2RlZmluZSBTVFJJTkdfRVJST1IgICAgICAgICAgICAgICAgICJFUlJPUiIKKyNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAiV0FSTklORyIKKyNkZWZpbmUgU1RSSU5HX0lORk8gICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCisjZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgIk5vdCBpbXBsZW1lbnRlZCIKKyNkZWZpbmUgU1RSSU5HX0hMUEZJTEVfRVJST1JfcyAgICAgICAiRXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgaGVscCBmaWxlIGAlcyciCisjZGVmaW5lIFNUUklOR19DT05URU5UUyAgICAgICAgICAgICAgIiZDb250ZW50cyIKKyNkZWZpbmUgU1RSSU5HX1NFQVJDSCAgICAgICAgICAgICAgICAiJlNlYXJjaCIKKyNkZWZpbmUgU1RSSU5HX0JBQ0sgICAgICAgICAgICAgICAgICAiJkJhY2siCisjZGVmaW5lIFNUUklOR19ISVNUT1JZICAgICAgICAgICAgICAgIiZIaXN0b3J5IgorI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICJBbGwgZmlsZXMgKCouKikiCisjZGVmaW5lIFNUUklOR19IRUxQX0ZJTEVTX0hMUCAgICAgICAgIkhlbHAgZmlsZXMgKCouaGxwKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbiBiL3Byb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhNWZjYgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw2MyBAQAorVE9QU1JDICAgPSBAdG9wX3NyY2RpckAKK01PRFVMRSAgID0gbm9uZQorUFJPR1JBTVMgPSB3aW5oZWxwIGhscDJzZ21sCitBTExfTElCUyA9ICQoV0lORUxJQikgJChYX0xJQlMpICQoWFBNX0xJQikgJChYTElCKSAkKExETElCUykKKworTEFOR1VBR0VTICAgPSBFbiBEZQorCisjIEluc3RhbGxhdGlvbiBpbmZvcworCitJTlNUQUxMICAgICAgICAgPSBASU5TVEFMTEAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX0RBVEEgICAgPSBASU5TVEFMTF9EQVRBQAorcHJlZml4ICAgICAgICAgID0gQHByZWZpeEAKK2V4ZWNfcHJlZml4ICAgICA9IEBleGVjX3ByZWZpeEAKK2JpbmRpciAgICAgICAgICA9IEBiaW5kaXJACitsaWJkaXIgICAgICAgICAgPSBAbGliZGlyQAorc3lzY29uZmRpciAgICAgID0gQHN5c2NvbmZkaXJACittYW5kaXIgICAgICAgICAgPSBAbWFuZGlyQC9tYW4xCittYW5leHQgICAgICAgICAgPSAuMQorCitNT1NUT0JKUyA9IFwKKwl3aW5oZWxwLm8gXAorCWhscGZpbGUubyBcCisJbWFjcm8ubyBcCisJeS50YWIubyBcCisJbGV4Lnl5Lm8KKworU1RSSU5HT0JKUyA9IFwKKwlzdHJpbmcubyBcCisJJChMQU5HVUFHRVM6JT0lLm8pCisKK0NfU1JDUyA9ICQoTU9TVE9CSlM6Lm89LmMpICQoU1RSSU5HT0JKUzoubz0uYykgaGxwMnNnbWwuYworCithbGw6IGNoZWNrX3dpbmVyYyAkKFBST0dSQU1TKQorCitATUFLRV9SVUxFU0AKKworIyBTb21lIHN0cmluZ3MgbmVlZCBhZGRyZXNzZXMgPj0gMHgxMDAwMAord2luaGVscDogJChNT1NUT0JKUykgJChTVFJJTkdPQkpTKSAkKFdJTkVMSUIpCisJJChDQykgLW8gd2luaGVscCAkKE1PU1RPQkpTKSAkKExET1BUSU9OUykgJChBTExfTElCUykgJChTVFJJTkdPQkpTKQorCitobHAyc2dtbDogaGxwMnNnbWwubyBobHBmaWxlLm8KKwkkKENDKSAtbyBobHAyc2dtbCBobHAyc2dtbC5vIGhscGZpbGUubworCitpbnN0YWxsOiBkdW1teQorCSQoSU5TVEFMTF9QUk9HUkFNKSB3aW5oZWxwICQoYmluZGlyKS93aW5oZWxwCisJJChJTlNUQUxMX1BST0dSQU0pIGhscDJzZ21sICQoYmluZGlyKS9obHAyc2dtbAorCitjbGVhbjo6CisJJChSTSkgJChQUk9HUkFNUykgbGV4Lnl5LmMgeS50YWIuYyB5LnRhYi5oCisJJChSTSkgJChMQU5HVUFHRVM6JT0lLmMpICQoTEFOR1VBR0VTOiU9JS5oKQorCit5LnRhYi5jIHkudGFiLmg6IG1hY3JvLnlhY2MueQorCSQoWUFDQykgLWQgLXQgbWFjcm8ueWFjYy55CisKK2xleC55eS5jOiBtYWNyby5sZXgubAorCSQoTEVYKSAtOCAtSSBtYWNyby5sZXgubAorCiskKExBTkdVQUdFUzolPSUuYykgJChMQU5HVUFHRVM6JT0lLmgpOiAkKFdJTkVSQykgWHgucmMKKworZHVtbXk6CisKKyMjIyBEZXBlbmRlbmNpZXM6CmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL1h4LnJjIGIvcHJvZ3JhbXMvd2luaGVscC9YeC5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmU3MTNiCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3JhbXMvd2luaGVscC9YeC5yYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogSGVscCBWaWV3ZXIKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCisgKi8KKworI2luY2x1ZGUgIndpbmhlbHAuaCIKKworI2RlZmluZSBDT05DQVQoYSwgYikgQ09OQ0FUMShhLCBiKQorI2RlZmluZSBDT05DQVQxKGEsIGIpIGEjI2IKKworLyogTWVudSAqLworCitDT05DQVQoTUVOVV8sIExBTkdVQUdFX0lEKSBNRU5VCit7CisgUE9QVVAgTUVOVV9GSUxFIHsKKyAgIE1FTlVJVEVNIE1FTlVfRklMRV9PUEVOLCAgICAgICAgICAgICBXSF9PUEVOCisgICBNRU5VSVRFTSBTRVBBUkFUT1IgICAKKyAgIE1FTlVJVEVNIE1FTlVfRklMRV9QUklOVCwgICAgICAgICAgICBXSF9QUklOVAorICAgTUVOVUlURU0gTUVOVV9GSUxFX1BSSU5URVJfU0VUVVAsICAgIFdIX1BSSU5URVJfU0VUVVAKKyAgIE1FTlVJVEVNIFNFUEFSQVRPUiAgIAorICAgTUVOVUlURU0gTUVOVV9GSUxFX0VYSVQsICAgICAgICAgICAgIFdIX0VYSVQKKyB9CisgUE9QVVAgTUVOVV9FRElUIHsKKyAgIE1FTlVJVEVNIE1FTlVfRURJVF9DT1BZX0RJQUxPRywgICAgICBXSF9DT1BZX0RJQUxPRworICAgTUVOVUlURU0gU0VQQVJBVE9SICAgCisgICBNRU5VSVRFTSBNRU5VX0VESVRfQU5OT1RBVEUsICAgICAgICAgV0hfQU5OT1RBVEUKKyB9CisgUE9QVVAgTUVOVV9CT09LTUFSSyB7CisgICBNRU5VSVRFTSBNRU5VX0JPT0tNQVJLX0RFRklORSwgICAgICAgV0hfQk9PS01BUktfREVGSU5FCisgfQorIFBPUFVQIE1FTlVfSEVMUCB7CisgICBNRU5VSVRFTSBNRU5VX0hFTFBfT05fSEVMUCwgICAgICAgICAgV0hfSEVMUF9PTl9IRUxQCisgICBNRU5VSVRFTSBNRU5VX0hFTFBfT05fVE9QLCAgICAgICAgICAgV0hfSEVMUF9PTl9UT1AKKyAgIE1FTlVJVEVNIFNFUEFSQVRPUiAgIAorICAgTUVOVUlURU0gTUVOVV9IRUxQX0lORk8sICAgICAgICAgICAgIFdIX0FCT1VUCisjaWZkZWYgV0lORUxJQgorICAgTUVOVUlURU0gTUVOVV9IRUxQX0FCT1VUX1dJTkUsICAgICAgIFdIX0FCT1VUX1dJTkUKKyNlbmRpZgorIH0KK30KKworLyogRGlhbG9ncyAqLworCitESUFMT0dfVEVTVCBESUFMT0cgMCwgMCwgMTUwLCAyMgorU1RZTEUgRFNfTU9EQUxGUkFNRQorQ0FQVElPTiAiTWFjcm8gVGVzdCIKK3sKK0dST1VQQk9YICAgICAgIiIsICAgSURJR05PUkUsICAgNCwgNCwgMTAyLCAxMgorRURJVFRFWFQgICAgICAgICAgICA5OSwgICAgICAgICA1LCA3LCAxMDAsICA4CitERUZQVVNIQlVUVE9OICJPSyIsIElET0ssICAgICAxMTAsIDUsIDM1LCAgMTIKK30KKworLyogU3RyaW5ncyAqLworCisjZGVmaW5lIEFERFNUUklORyhzdHIpIEFERFNUUklORzEoTEFOR1VBR0VfTlVNQkVSLCBJRFNfICMjIHN0cikgU1RSSU5HXyAjIyBzdHIKKyNkZWZpbmUgQUREU1RSSU5HMShsYW5nbnVtLCBpZHMpIEFERFNUUklORzIobGFuZ251bSwgaWRzKQorI2RlZmluZSBBRERTVFJJTkcyKGxhbmdudW0sIGlkcykgMHggIyMgbGFuZ251bSAjIyBpZHMKKworI2RlZmluZSBTVFJJTkdJRlkoc3RyKSBTVFJJTkdJRlkxKHN0cikKKyNkZWZpbmUgU1RSSU5HSUZZMShzdHIpICNzdHIKKworI2RlZmluZSBTVFJJTkdfTEFOR1VBR0VfSUQgICAgICAgIFNUUklOR0lGWShMQU5HVUFHRV9JRCkKKworU1RSSU5HVEFCTEUKK3sKK0FERFNUUklORyhMQU5HVUFHRV9JRCkKK0FERFNUUklORyhXSU5FX0hFTFApCitBRERTVFJJTkcoRVJST1IpCitBRERTVFJJTkcoV0FSTklORykKK0FERFNUUklORyhJTkZPKQorQUREU1RSSU5HKE5PVF9JTVBMRU1FTlRFRCkKK0FERFNUUklORyhITFBGSUxFX0VSUk9SX3MpCitBRERTVFJJTkcoQ09OVEVOVFMpCitBRERTVFJJTkcoU0VBUkNIKQorQUREU1RSSU5HKEJBQ0spCitBRERTVFJJTkcoSElTVE9SWSkKK0FERFNUUklORyhBTExfRklMRVMpCitBRERTVFJJTkcoSEVMUF9GSUxFU19ITFApCit9CmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL2hscDJzZ21sLmMgYi9wcm9ncmFtcy93aW5oZWxwL2hscDJzZ21sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmMDE4NAotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvaGxwMnNnbWwuYwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJobHBmaWxlLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGNvbnN0IGNoYXIgKmhlYWRlcjE7CisgIGNvbnN0IGNoYXIgKmhlYWRlcjI7CisgIGNvbnN0IGNoYXIgKnNlY3Rpb247CisgIGNvbnN0IGNoYXIgKmZpcnN0X3BhcmFncmFwaDsKKyAgY29uc3QgY2hhciAqbmV3bGluZTsKKyAgY29uc3QgY2hhciAqbmV4dF9wYXJhZ3JhcGg7CisgIGNvbnN0IGNoYXIgKnNwZWNpYWxfY2hhcjsKKyAgY29uc3QgY2hhciAqYmVnaW5faXRhbGljOworICBjb25zdCBjaGFyICplbmRfaXRhbGljOworICBjb25zdCBjaGFyICpiZWdpbl9ib2xkZmFjZTsKKyAgY29uc3QgY2hhciAqZW5kX2JvbGRmYWNlOworICBjb25zdCBjaGFyICpiZWdpbl90eXBld3JpdGVyOworICBjb25zdCBjaGFyICplbmRfdHlwZXdyaXRlcjsKKyAgY29uc3QgY2hhciAqdGFpbDsKK30gRk9STUFUOworCit0eXBlZGVmIHN0cnVjdAoreworICBjb25zdCBjaGFyIGNoOworICBjb25zdCBjaGFyICpzdWJzdDsKK30gQ0hBUk1BUFtdOworCisKK0ZPUk1BVCBmb3JtYXQgPQoreworICAiPCFkb2N0eXBlIGxpbnV4ZG9jIHN5c3RlbT5cbiIKKyAgIjxhcnRpY2xlPlxuIgorICAiPHRpdGxlPlxuIiwKKworICAiXG48YXV0aG9yPlxuJXNcbiIKKyAgIjxkYXRlPlxuJXNcbiIsCisKKyAgIlxuPHNlY3Q+XG4iLAorICAiXG48cD5cbiIsCisgICJcbjxuZXdsaW5lPlxuIiwKKyAgIlxuXG4iLAorCisgICImJXM7IiwKKworICAiPGVtPiIsCisgICI8L2VtPiIsCisgICI8YmY+IiwKKyAgIjwvYmY+IiwKKyAgIjx0dD4iLAorICAiPC90dD4iLAorCisgICJcbjwvYXJ0aWNsZT5cbiIKK307CisKK0NIQVJNQVAgY2hhcm1hcCA9CisgIHt7J8YnLCAiQUVsaWcifSwKKyAgIHsnwScsICJBYWN1dGUifSwKKyAgIHsnwicsICJBY2lyYyJ9LAorICAgeyfAJywgIkFncmF2ZSJ9LAorICAgeyfDJywgIkF0aWxkZSJ9LAorICAgeyfHJywgIkNjZWRpbCJ9LAorICAgeyfJJywgIkVhY3V0ZSJ9LAorICAgeyfIJywgIkVncmF2ZSJ9LAorICAgeyfLJywgIkV1bWwifSwKKyAgIHsnzScsICJJYWN1dGUifSwKKyAgIHsnzicsICJJY2lyYyJ9LAorICAgeyfMJywgIklncmF2ZSJ9LAorICAgeyfPJywgIkl1bWwifSwKKyAgIHsn0ScsICJOdGlsZGUifSwKKyAgIHsn0ycsICJPYWN1dGUifSwKKyAgIHsn1CcsICJPY2lyYyJ9LAorICAgeyfSJywgIk9ncmF2ZSJ9LAorICAgeyfYJywgIk9zbGFzaCJ9LAorICAgeyfaJywgIlVhY3V0ZSJ9LAorICAgeyfZJywgIlVncmF2ZSJ9LAorICAgeyfdJywgIllhY3V0ZSJ9LAorICAgeyfhJywgImFhY3V0ZSJ9LAorICAgeyfiJywgImFjaXJjIn0sCisgICB7J+YnLCAiYWVsaWcifSwKKyAgIHsn4CcsICJhZ3JhdmUifSwKKyAgIHsn5ScsICJhcmluZyJ9LAorICAgeyfjJywgImF0aWxkZSJ9LAorICAgeyfnJywgImNjZWRpbCJ9LAorICAgeyfpJywgImVhY3V0ZSJ9LAorICAgeyfqJywgImVjaXJjIn0sCisgICB7J+gnLCAiZWdyYXZlIn0sCisgICB7J+snLCAiZXVtbCJ9LAorICAgeyftJywgImlhY3V0ZSJ9LAorICAgeyfuJywgImljaXJjIn0sCisgICB7J+wnLCAiaWdyYXZlIn0sCisgICB7J+8nLCAiaXVtbCJ9LAorICAgeyfxJywgIm50aWxkZSJ9LAorICAgeyfzJywgIm9hY3V0ZSJ9LAorICAgeyf/JywgInl1bWwifSwKKyAgIHsn9CcsICJvY2lyYyJ9LAorICAgeyfyJywgIm9ncmF2ZSJ9LAorICAgeyf4JywgIm9zbGFzaCJ9LAorICAgeyf1JywgIm90aWxkZSJ9LAorICAgeyf6JywgInVhY3V0ZSJ9LAorICAgeyf7JywgInVjaXJjIn0sCisgICB7J/knLCAidWdyYXZlIn0sCisgICB7J/0nLCAieWFjdXRlIn0sCisgICB7JzwnLCAibHQifSwKKyAgIHsnJicsICJhbXAifSwKKyAgIHsnIicsICJkcXVvdCJ9LAorICAgeycjJywgIm51bSJ9LAorICAgeyclJywgInBlcmNudCJ9LAorICAgeydcJycsICJxdW90In0sCisjaWYgMAorICAgeycoJywgImxwYXIifSwKKyAgIHsnKScsICJycGFyIn0sCisgICB7JyonLCAiYXN0In0sCisgICB7JysnLCAicGx1cyJ9LAorICAgeycsJywgImNvbW1hIn0sCisgICB7Jy0nLCAiaHlwaGVuIn0sCisgICB7JzonLCAiY29sb24ifSwKKyAgIHsnOycsICJzZW1pIn0sCisgICB7Jz0nLCAiZXF1YWxzIn0sCisgICB7J0AnLCAiY29tbWF0In0sCisgICB7J1snLCAibHNxYiJ9LAorICAgeyddJywgInJzcWIifSwKKyAgIHsnXicsICJjaXJjIn0sCisgICB7J18nLCAibG93YmFyIn0sCisgICB7J3snLCAibGN1YiJ9LAorICAgeyd8JywgInZlcmJhciJ9LAorICAgeyd9JywgInJjdWIifSwKKyAgIHsnficsICJ0aWxkZSJ9LAorI2VuZGlmCisgICB7J1xcJywgImJzb2wifSwKKyAgIHsnJCcsICJkb2xsYXIifSwKKyAgIHsnxCcsICJBdW1sIn0sCisgICB7J+QnLCAiYXVtbCJ9LAorICAgeyfWJywgIk91bWwifSwKKyAgIHsn9icsICJvdW1sIn0sCisgICB7J9wnLCAiVXVtbCJ9LAorICAgeyf8JywgInV1bWwifSwKKyAgIHsn3ycsICJzemxpZyJ9LAorICAgeyc+JywgImd0In0sCisgICB7J6cnLCAic2VjdCJ9LAorICAgeye2JywgInBhcmEifSwKKyAgIHsnqScsICJjb3B5In0sCisgICB7J6EnLCAiaWV4Y2wifSwKKyAgIHsnvycsICJpcXVlc3QifSwKKyAgIHsnoicsICJjZW50In0sCisgICB7J6MnLCAicG91bmQifSwKKyAgIHsn1ycsICJ0aW1lcyJ9LAorICAgeyexJywgInBsdXNtbiJ9LAorICAgeyf3JywgImRpdmlkZSJ9LAorICAgeyesJywgIm5vdCJ9LAorICAgeye1JywgIm11In0sCisgICB7MCwwfX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBwcmludF90ZXh0CisgKi8KKworc3RhdGljIHZvaWQgcHJpbnRfdGV4dChjb25zdCBjaGFyICpwKQoreworICBpbnQgaTsKKworICBmb3IgKDsgKnA7IHArKykKKyAgICB7CisgICAgICBmb3IgKGkgPSAwOyBjaGFybWFwW2ldLmNoOyBpKyspCisJaWYgKCpwID09IGNoYXJtYXBbaV0uY2gpCisJICB7CisJICAgIHByaW50Zihmb3JtYXQuc3BlY2lhbF9jaGFyLCBjaGFybWFwW2ldLnN1YnN0KTsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICBpZiAoIWNoYXJtYXBbaV0uY2gpCisJcHJpbnRmKCIlYyIsICpwKTsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBtYWluCisgKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBITFBGSUxFICAgKmhscGZpbGU7CisgIEhMUEZJTEVfUEFHRSAqcGFnZTsKKyAgSExQRklMRV9QQVJBR1JBUEggKnBhcmFncmFwaDsKKyAgdGltZV90IHQ7CisgIGNoYXIgZGF0ZVs1MF07CisgIGNoYXIgKmZpbGVuYW1lOworCisgIGhscGZpbGUgPSBITFBGSUxFX1JlYWRIbHBGaWxlKGFyZ2MgPiAxID8gYXJndlsxXSA6ICIiKTsKKworICBpZiAoIWhscGZpbGUpIHJldHVybigyKTsKKworICB0aW1lKCZ0KTsKKyAgc3RyZnRpbWUoZGF0ZSwgc2l6ZW9mKGRhdGUpLCAiJXgiLCBsb2NhbHRpbWUoJnQpKTsKKyAgZmlsZW5hbWUgPSBzdHJyY2hyKGhscGZpbGUtPmxwc3pQYXRoLCAnLycpOworICBpZiAoZmlsZW5hbWUpIGZpbGVuYW1lKys7CisgIGVsc2UgZmlsZW5hbWUgPSBobHBmaWxlLT5scHN6UGF0aDsKKworICAvKiBIZWFkZXIgKi8KKyAgcHJpbnRmKGZvcm1hdC5oZWFkZXIxKTsKKyAgcHJpbnRfdGV4dChobHBmaWxlLT5scHN6VGl0bGUpOworICBwcmludGYoZm9ybWF0LmhlYWRlcjIsIGZpbGVuYW1lLCBkYXRlKTsKKworICBmb3IgKHBhZ2UgPSBobHBmaWxlLT5maXJzdF9wYWdlOyBwYWdlOyBwYWdlID0gcGFnZS0+bmV4dCkKKyAgICB7CisgICAgICBwYXJhZ3JhcGggPSBwYWdlLT5maXJzdF9wYXJhZ3JhcGg7CisgICAgICBpZiAoIXBhcmFncmFwaCkgY29udGludWU7CisKKyAgICAgIC8qIFNlY3Rpb24gKi8KKyAgICAgIHByaW50Zihmb3JtYXQuc2VjdGlvbik7CisgICAgICBmb3IgKDsgcGFyYWdyYXBoICYmICFwYXJhZ3JhcGgtPndWU3BhY2U7IHBhcmFncmFwaCA9IHBhcmFncmFwaC0+bmV4dCkKKwlwcmludF90ZXh0KHBhcmFncmFwaC0+bHBzelRleHQpOworICAgICAgcHJpbnRmKGZvcm1hdC5maXJzdF9wYXJhZ3JhcGgpOworCisgICAgICBmb3IgKDsgcGFyYWdyYXBoOyBwYXJhZ3JhcGggPSBwYXJhZ3JhcGgtPm5leHQpCisJeworCSAgLyogTmV3IGxpbmU7IG5ldyBwYXJhZ3JhcGggKi8KKwkgIGlmIChwYXJhZ3JhcGgtPndWU3BhY2UgPT0gMSkKKwkgICAgcHJpbnRmKGZvcm1hdC5uZXdsaW5lKTsKKwkgIGVsc2UgaWYgKHBhcmFncmFwaC0+d1ZTcGFjZSA+IDEpCisJICAgIHByaW50Zihmb3JtYXQubmV4dF9wYXJhZ3JhcGgpOworCisJICBpZiAocGFyYWdyYXBoLT53Rm9udCkKKwkgICAgcHJpbnRmKGZvcm1hdC5iZWdpbl9ib2xkZmFjZSk7CisKKwkgIHByaW50X3RleHQocGFyYWdyYXBoLT5scHN6VGV4dCk7CisKKwkgIGlmIChwYXJhZ3JhcGgtPndGb250KQorCSAgICBwcmludGYoZm9ybWF0LmVuZF9ib2xkZmFjZSk7CisJfQorICAgIH0KKworICBwcmludGYoZm9ybWF0LnRhaWwpOworCisgIHJldHVybigwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFN1YnN0aXR1dGlvbnMgZm9yIHNvbWUgV0lORUxJQiBmdW5jdGlvbnMKKyAqLworCitIRklMRSBPcGVuRmlsZSggTFBDU1RSIHBhdGgsIE9GU1RSVUNUICpvZnMsIFVJTlQgbW9kZSApCit7CisgIEZJTEUgKmZpbGU7CisKKyAgaWYgKCEqcGF0aCkgcmV0dXJuIChIRklMRSkgc3RkaW47CisKKyAgZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7CisgIGlmICghZmlsZSkgcmV0dXJuIEhGSUxFX0VSUk9SOworICByZXR1cm4gKEhGSUxFKSBmaWxlOworfQorCitIRklMRSBfbGNsb3NlKCBIRklMRSBoRmlsZSApCit7CisgIGZjbG9zZSgoRklMRSopIGhGaWxlKTsKKyAgcmV0dXJuIDA7Cit9CisKK0xPTkcgX2hyZWFkKCBIRklMRSBoRmlsZSwgU0VHUFRSIGJ1ZmZlciwgTE9ORyBjb3VudCApCit7CisgIHJldHVybiBmcmVhZChidWZmZXIsIDEsIGNvdW50LCAoRklMRSopIGhGaWxlKTsKK30KKworSEdMT0JBTCBHbG9iYWxBbGxvYyggV09SRCBmbGFncywgRFdPUkQgc2l6ZSApCit7CisgIHJldHVybiAoSEdMT0JBTCkgbWFsbG9jKHNpemUpOworfQorCitMUFZPSUQgR2xvYmFsTG9jayggSEdMT0JBTCBoYW5kbGUgKQoreworICByZXR1cm4gKExQVk9JRCkgaGFuZGxlOworfQorCitIR0xPQkFMIEdsb2JhbEZyZWUoIEhHTE9CQUwgaGFuZGxlICkKK3sKKyAgZnJlZSgoVk9JRCopIGhhbmRsZSk7CisgIHJldHVybigwKTsKK30KKworLyoKKyAqIFN0cmluZyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMTk5MyBZbmd2aSBTaWd1cmpvbnNzb24gKHluZ3ZpQGhhZnJvLmlzKQorICovCisKK0lOVCBsc3RyY21wKExQQ1NUUiBzdHIxLExQQ1NUUiBzdHIyKQoreworICByZXR1cm4gc3RyY21wKCBzdHIxLCBzdHIyICk7Cit9CisKK0lOVCBsc3RyY21waSggTFBDU1RSIHN0cjEsIExQQ1NUUiBzdHIyICkKK3sKKyAgSU5UIHJlczsKKworICB3aGlsZSAoKnN0cjEpCisgICAgeworICAgICAgaWYgKChyZXMgPSB0b3VwcGVyKCpzdHIxKSAtIHRvdXBwZXIoKnN0cjIpKSAhPSAwKSByZXR1cm4gcmVzOworICAgICAgc3RyMSsrOworICAgICAgc3RyMisrOworICAgIH0KKyAgcmV0dXJuIHRvdXBwZXIoKnN0cjEpIC0gdG91cHBlcigqc3RyMik7Cit9CisKK0lOVCBsc3RybGVuKExQQ1NUUiBzdHIpCit7CisgIHJldHVybiBzdHJsZW4oc3RyKTsKK30KKworU0VHUFRSIGxzdHJjcHkoIFNFR1BUUiB0YXJnZXQsIFNFR1BUUiBzb3VyY2UgKQoreworICBzdHJjcHkoIChjaGFyICopdGFyZ2V0LCAoY2hhciAqKXNvdXJjZSApOworICByZXR1cm4gdGFyZ2V0OworfQorCit2b2lkIGhtZW1jcHkoTFBWT0lEIGhwdkRlc3QsIExQQ1ZPSUQgaHB2U291cmNlLCBMT05HIGNiQ29weSkKK3sKKyAgbWVtY3B5KGhwdkRlc3QsIGhwdlNvdXJjZSwgY2JDb3B5KTsKK30KKworLyogTG9jYWwgVmFyaWFibGVzOiAgICAqLworLyogYy1maWxlLXN0eWxlOiAiR05VIiAqLworLyogRW5kOiAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9obHBmaWxlLmMgYi9wcm9ncmFtcy93aW5oZWxwL2hscGZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDIzMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3JhbXMvd2luaGVscC9obHBmaWxlLmMKQEAgLTAsMCArMSw5ODkgQEAKKy8qCisgKiBIZWxwIFZpZXdlcgorICoKKyAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSAid2luaGVscC5oIgorCitzdGF0aWMgdm9pZCBSZXBvcnQoTFBDU1RSIHN0cikKK3sKKyNpZiAwCisgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cik7CisjZW5kaWYKK30KKworI2RlZmluZSBHRVRfVVNIT1JUKGJ1ZmZlciwgaSlcCisoKChCWVRFKSgoYnVmZmVyKVsoaSldKSArIDB4MTAwICogKEJZVEUpKChidWZmZXIpWyhpKSsxXSkpKQorI2RlZmluZSBHRVRfU0hPUlQoYnVmZmVyLCBpKVwKKygoKEJZVEUpKChidWZmZXIpWyhpKV0pICsgMHgxMDAgKiAoc2lnbmVkIGNoYXIpKChidWZmZXIpWyhpKSsxXSkpKQorI2RlZmluZSBHRVRfVUlOVChidWZmZXIsIGkpXAorR0VUX1VTSE9SVChidWZmZXIsIGkpICsgMHgxMDAwMCAqIEdFVF9VU0hPUlQoYnVmZmVyLCBpKzIpCisKK3N0YXRpYyBCT09MIEhMUEZJTEVfRG9SZWFkSGxwRmlsZShITFBGSUxFKiwgTFBDU1RSKTsKK3N0YXRpYyBCT09MIEhMUEZJTEVfUmVhZEZpbGVUb0J1ZmZlcihIRklMRSk7CitzdGF0aWMgQk9PTCBITFBGSUxFX0ZpbmRTdWJGaWxlKExQQ1NUUiBuYW1lLCBCWVRFKiosIEJZVEUqKik7CitzdGF0aWMgVk9JRCBITFBGSUxFX1N5c3RlbUNvbW1hbmRzKEhMUEZJTEUqKTsKK3N0YXRpYyBCT09MIEhMUEZJTEVfVW5jb21wcmVzczFfUGhyYXNlcygpOworc3RhdGljIEJPT0wgSExQRklMRV9VbmNvbXByZXNzMV9Ub3BpYygpOworc3RhdGljIEJPT0wgSExQRklMRV9HZXRDb250ZXh0KEhMUEZJTEUqKTsKK3N0YXRpYyBCT09MIEhMUEZJTEVfQWRkUGFnZShITFBGSUxFKiwgQllURSosIEJZVEUqKTsKK3N0YXRpYyBCT09MIEhMUEZJTEVfQWRkUGFyYWdyYXBoKEhMUEZJTEUqLCBCWVRFICosIEJZVEUqKTsKK3N0YXRpYyBVSU5UIEhMUEZJTEVfVW5jb21wcmVzc2VkMl9TaXplKEJZVEUqLCBCWVRFKik7CitzdGF0aWMgVk9JRCBITFBGSUxFX1VuY29tcHJlc3MyKEJZVEUqKiwgQllURSosIEJZVEUqKTsKKworc3RhdGljIEhMUEZJTEUgKmZpcnN0X2hscGZpbGUgPSAwOworc3RhdGljIEhHTE9CQUwgIGhGaWxlQnVmZmVyOworc3RhdGljIEJZVEUgICAgKmZpbGVfYnVmZmVyOworCitzdGF0aWMgc3RydWN0Cit7CisgIFVJTlQgICAgbnVtOworICBCWVRFICAgKmJ1ZjsKKyAgSEdMT0JBTCBoQnVmZmVyOworfSBwaHJhc2VzOworCitzdGF0aWMgc3RydWN0Cit7CisgIEJZVEUgICAgKiptYXA7CisgIEJZVEUgICAgKmVuZDsKKyAgVUlOVCAgICB3TWFwTGVuOworICBIR0xPQkFMIGhNYXA7CisgIEhHTE9CQUwgaEJ1ZmZlcjsKK30gdG9waWM7CisKK3N0YXRpYyBzdHJ1Y3QKK3sKKyAgVUlOVCAgYkRlYnVnOworICBVSU5UICB3Rm9udDsKKyAgVUlOVCAgd0luZGVudDsKKyAgVUlOVCAgd0hTcGFjZTsKKyAgVUlOVCAgd1ZTcGFjZTsKKyAgVUlOVCAgd1ZCYWNrU3BhY2U7CisgIEhMUEZJTEVfTElOSyBsaW5rOworfSBhdHRyaWJ1dGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9Db250ZW50cworICovCisKK0hMUEZJTEVfUEFHRSAqSExQRklMRV9Db250ZW50cyhMUENTVFIgbHBzelBhdGgpCit7CisgIEhMUEZJTEUgKmhscGZpbGUgPSBITFBGSUxFX1JlYWRIbHBGaWxlKGxwc3pQYXRoKTsKKworICBpZiAoIWhscGZpbGUpIHJldHVybigwKTsKKworICByZXR1cm4oaGxwZmlsZS0+Zmlyc3RfcGFnZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBITFBGSUxFX1BhZ2VCeU51bWJlcgorICovCisKK0hMUEZJTEVfUEFHRSAqSExQRklMRV9QYWdlQnlOdW1iZXIoTFBDU1RSIGxwc3pQYXRoLCBVSU5UIHdOdW0pCit7CisgIEhMUEZJTEVfUEFHRSAqcGFnZTsKKyAgSExQRklMRSAqaGxwZmlsZSA9IEhMUEZJTEVfUmVhZEhscEZpbGUobHBzelBhdGgpOworCisgIGlmICghaGxwZmlsZSkgcmV0dXJuKDApOworCisgIGZvciAocGFnZSA9IGhscGZpbGUtPmZpcnN0X3BhZ2U7IHBhZ2UgJiYgd051bTsgcGFnZSA9IHBhZ2UtPm5leHQpIHdOdW0tLTsKKworICByZXR1cm4gcGFnZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfSGxwRmlsZVBhZ2VCeUhhc2gKKyAqLworCitITFBGSUxFX1BBR0UgKkhMUEZJTEVfUGFnZUJ5SGFzaChMUENTVFIgbHBzelBhdGgsIExPTkcgbEhhc2gpCit7CisgIElOVCBpOworICBVSU5UIHdOdW07CisgIEhMUEZJTEVfUEFHRSAqcGFnZTsKKyAgSExQRklMRSAqaGxwZmlsZSA9IEhMUEZJTEVfUmVhZEhscEZpbGUobHBzelBhdGgpOworCisgIGlmICghaGxwZmlsZSkgcmV0dXJuKDApOworCisgIGZvciAoaSA9IDA7IGkgPCBobHBmaWxlLT53Q29udGV4dExlbjsgaSsrKQorICAgIGlmIChobHBmaWxlLT5Db250ZXh0W2ldLmxIYXNoID09IGxIYXNoKSBicmVhazsKKworICBpZiAoaSA+PSBobHBmaWxlLT53Q29udGV4dExlbikKKyAgICB7CisgICAgICBITFBGSUxFX0ZyZWVIbHBGaWxlKGhscGZpbGUpOworICAgICAgcmV0dXJuKDApOworICAgIH0KKworICB3TnVtID0gaGxwZmlsZS0+Q29udGV4dFtpXS53UGFnZTsKKyAgZm9yIChwYWdlID0gaGxwZmlsZS0+Zmlyc3RfcGFnZTsgcGFnZSAmJiB3TnVtOyBwYWdlID0gcGFnZS0+bmV4dCkgd051bS0tOworCisgIHJldHVybiBwYWdlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9IYXNoCisgKi8KKworTE9ORyBITFBGSUxFX0hhc2goTFBDU1RSIGxwc3pDb250ZXh0KQoreworICBMT05HIGxIYXNoID0gMDsKKyAgQ0hBUiBjOworICB3aGlsZSgoYyA9ICpscHN6Q29udGV4dCsrKSkKKyAgICB7CisgICAgICBDSEFSIHggPSAwOworICAgICAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB4ID0gYyAtICdBJyArIDE3OworICAgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB4ID0gYyAtICdhJyArIDE3OworICAgICAgaWYgKGMgPj0gJzEnICYmIGMgPD0gJzknKSB4ID0gYyAtICcwJzsKKyAgICAgIGlmIChjID09ICcwJykgeCA9IDEwOworICAgICAgaWYgKGMgPT0gJy4nKSB4ID0gMTI7CisgICAgICBpZiAoYyA9PSAnXycpIHggPSAxMzsKKyAgICAgIGlmICh4KSBsSGFzaCA9IGxIYXNoICogNDMgKyB4OworICAgIH0KKyAgcmV0dXJuIGxIYXNoOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9SZWFkSGxwRmlsZQorICovCisKK0hMUEZJTEUgKkhMUEZJTEVfUmVhZEhscEZpbGUoTFBDU1RSIGxwc3pQYXRoKQoreworICBIR0xPQkFMICAgaEhscEZpbGU7CisgIEhMUEZJTEUgKmhscGZpbGU7CisKKyAgZm9yIChobHBmaWxlID0gZmlyc3RfaGxwZmlsZTsgaGxwZmlsZTsgaGxwZmlsZSA9IGhscGZpbGUtPm5leHQpCisgICAgaWYgKCFsc3RyY21wKGhscGZpbGUtPmxwc3pQYXRoLCBscHN6UGF0aCkpCisgICAgICB7CisJaGxwZmlsZS0+d1JlZkNvdW50Kys7CisJcmV0dXJuKGhscGZpbGUpOworICAgICAgfQorCisgIGhIbHBGaWxlID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgc2l6ZW9mKEhMUEZJTEUpICsgbHN0cmxlbihscHN6UGF0aCkgKyAxKTsKKyAgaWYgKCFoSGxwRmlsZSkgcmV0dXJuKDApOworCisgIGhscGZpbGUgICAgICAgICAgICAgID0gR2xvYmFsTG9jayhoSGxwRmlsZSk7CisgIGhscGZpbGUtPmhTZWxmICAgICAgID0gaEhscEZpbGU7CisgIGhscGZpbGUtPndSZWZDb3VudCAgID0gMTsKKyAgaGxwZmlsZS0+aFRpdGxlICAgICAgPSAwOworICBobHBmaWxlLT5oQ29udGV4dCAgICA9IDA7CisgIGhscGZpbGUtPndDb250ZXh0TGVuID0gMDsKKyAgaGxwZmlsZS0+Zmlyc3RfcGFnZSAgPSAwOworICBobHBmaWxlLT5maXJzdF9tYWNybyA9IDA7CisgIGhscGZpbGUtPnByZXYgICAgICAgID0gMDsKKyAgaGxwZmlsZS0+bmV4dCAgICAgICAgPSBmaXJzdF9obHBmaWxlOworICBmaXJzdF9obHBmaWxlICAgPSBobHBmaWxlOworICBpZiAoaGxwZmlsZS0+bmV4dCkgaGxwZmlsZS0+bmV4dC0+cHJldiA9IGhscGZpbGU7CisKKyAgaGxwZmlsZS0+bHBzelBhdGggICA9IEdsb2JhbExvY2soaEhscEZpbGUpOworICBobHBmaWxlLT5scHN6UGF0aCAgKz0gc2l6ZW9mKEhMUEZJTEUpOworICBsc3RyY3B5KGhscGZpbGUtPmxwc3pQYXRoLCAoU0VHUFRSKSBscHN6UGF0aCk7CisKKyAgcGhyYXNlcy5oQnVmZmVyID0gdG9waWMuaEJ1ZmZlciA9IGhGaWxlQnVmZmVyID0gMDsKKworICBpZiAoIUhMUEZJTEVfRG9SZWFkSGxwRmlsZShobHBmaWxlLCBscHN6UGF0aCkpCisgICAgeworICAgICAgSExQRklMRV9GcmVlSGxwRmlsZShobHBmaWxlKTsKKyAgICAgIGhscGZpbGUgPSAwOworICAgIH0KKworICBpZiAocGhyYXNlcy5oQnVmZmVyKSBHbG9iYWxGcmVlKHBocmFzZXMuaEJ1ZmZlcik7CisgIGlmICh0b3BpYy5oQnVmZmVyKSAgIEdsb2JhbEZyZWUodG9waWMuaEJ1ZmZlcik7CisgIGlmICh0b3BpYy5oTWFwKSAgICAgIEdsb2JhbEZyZWUodG9waWMuaE1hcCk7CisgIGlmIChoRmlsZUJ1ZmZlcikgICAgIEdsb2JhbEZyZWUoaEZpbGVCdWZmZXIpOworCisgIHJldHVybihobHBmaWxlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfRG9SZWFkSGxwRmlsZQorICovCisKK3N0YXRpYyBCT09MIEhMUEZJTEVfRG9SZWFkSGxwRmlsZShITFBGSUxFICpobHBmaWxlLCBMUENTVFIgbHBzelBhdGgpCit7CisgIEJPT0wgICAgIHJldDsKKyAgSEZJTEUgICAgaEZpbGU7CisgIE9GU1RSVUNUIG9mczsKKyAgQllURSAgICAgKmJ1ZjsKKworICBoRmlsZT1PcGVuRmlsZShscHN6UGF0aCwgJm9mcywgT0ZfUkVBRCB8IE9GX1NFQVJDSCk7CisgIGlmIChoRmlsZSA9PSBIRklMRV9FUlJPUikgcmV0dXJuIEZBTFNFOworCisgIHJldCA9IEhMUEZJTEVfUmVhZEZpbGVUb0J1ZmZlcihoRmlsZSk7CisgIF9sY2xvc2UoaEZpbGUpOworICBpZiAoIXJldCkgcmV0dXJuIEZBTFNFOworCisgIEhMUEZJTEVfU3lzdGVtQ29tbWFuZHMoaGxwZmlsZSk7CisgIGlmICghSExQRklMRV9VbmNvbXByZXNzMV9QaHJhc2VzKCkpIHJldHVybiBGQUxTRTsKKyAgaWYgKCFITFBGSUxFX1VuY29tcHJlc3MxX1RvcGljKCkpIHJldHVybiBGQUxTRTsKKworICBidWYgPSB0b3BpYy5tYXBbMF0gKyAweGM7CisgIHdoaWxlKGJ1ZiArIDB4YyA8IHRvcGljLmVuZCkKKyAgICB7CisgICAgICBCWVRFICplbmQgPSBNSU4oYnVmICsgR0VUX1VJTlQoYnVmLCAwKSwgdG9waWMuZW5kKTsKKyAgICAgIFVJTlQgbmV4dCwgaW5kZXgsIG9mZnNldDsKKworICAgICAgc3dpdGNoIChidWZbMHgxNF0pCisJeworCWNhc2UgMHgwMjoKKwkgIGlmICghSExQRklMRV9BZGRQYWdlKGhscGZpbGUsIGJ1ZiwgZW5kKSkgcmV0dXJuKEZBTFNFKTsKKwkgIGJyZWFrOworCisJY2FzZSAweDIwOgorCSAgaWYgKCFITFBGSUxFX0FkZFBhcmFncmFwaChobHBmaWxlLCBidWYsIGVuZCkpIHJldHVybihGQUxTRSk7CisJICBicmVhazsKKworCWNhc2UgMHgyMzoKKwkgIGlmICghSExQRklMRV9BZGRQYXJhZ3JhcGgoaGxwZmlsZSwgYnVmLCBlbmQpKSByZXR1cm4oRkFMU0UpOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgZnByaW50ZihzdGRlcnIsICJidWZbMHgxNF0gPSAleFxuIiwgYnVmWzB4MTRdKTsKKwl9CisKKyAgICAgIG5leHQgICA9IEdFVF9VSU5UKGJ1ZiwgMHhjKTsKKyAgICAgIGlmIChuZXh0ID09IDB4ZmZmZmZmZmYpIGJyZWFrOworCisgICAgICBpbmRleCAgPSBuZXh0ID4+IDE0OworICAgICAgb2Zmc2V0ID0gbmV4dCAmIDB4M2ZmZjsKKyAgICAgIGlmIChpbmRleCA+IHRvcGljLndNYXBMZW4pIHtSZXBvcnQoIm1hcGxlbiIpOyBicmVhazt9CisgICAgICBidWYgPSB0b3BpYy5tYXBbaW5kZXhdICsgb2Zmc2V0OworICAgIH0KKworICByZXR1cm4oSExQRklMRV9HZXRDb250ZXh0KGhscGZpbGUpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfQWRkUGFnZQorICovCisKK3N0YXRpYyBCT09MIEhMUEZJTEVfQWRkUGFnZShITFBGSUxFICpobHBmaWxlLCBCWVRFICpidWYsIEJZVEUgKmVuZCkKK3sKKyAgSEdMT0JBTCAgIGhQYWdlOworICBITFBGSUxFX1BBR0UgKnBhZ2UsICoqcGFnZXB0cjsKKyAgQllURSAgICAgICp0aXRsZTsKKyAgVUlOVCAgICAgIHRpdGxlc2l6ZTsKKworICBmb3IgKHBhZ2VwdHIgPSAmaGxwZmlsZS0+Zmlyc3RfcGFnZTsgKnBhZ2VwdHI7IHBhZ2VwdHIgPSAmKCpwYWdlcHRyKS0+bmV4dCkKKyAgICAvKiBOb3RoaW5nICovOyAKKworICBpZiAoYnVmICsgMHgzMSA+IGVuZCkge1JlcG9ydCgicGFnZTEiKTsgcmV0dXJuKEZBTFNFKTt9OworICB0aXRsZSA9IGJ1ZiArIEdFVF9VSU5UKGJ1ZiwgMHgxMCk7CisgIGlmICh0aXRsZSA+IGVuZCkge1JlcG9ydCgicGFnZTIiKTsgcmV0dXJuKEZBTFNFKTt9OworCisgIHRpdGxlc2l6ZSA9IEhMUEZJTEVfVW5jb21wcmVzc2VkMl9TaXplKHRpdGxlLCBlbmQpOworICBoUGFnZSA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIHNpemVvZihITFBGSUxFX1BBR0UpICsgdGl0bGVzaXplKTsKKyAgaWYgKCFoUGFnZSkgcmV0dXJuIEZBTFNFOworICBwYWdlID0gKnBhZ2VwdHIgPSBHbG9iYWxMb2NrKGhQYWdlKTsKKyAgcGFnZXB0ciAgICAgICAgICAgICAgID0gJnBhZ2UtPm5leHQ7CisgIHBhZ2UtPmhTZWxmICAgICAgICAgICA9IGhQYWdlOworICBwYWdlLT5maWxlICAgICAgICAgICAgPSBobHBmaWxlOworICBwYWdlLT5uZXh0ICAgICAgICAgICAgPSAwOworICBwYWdlLT5maXJzdF9wYXJhZ3JhcGggPSAwOworCisgIHBhZ2UtPmxwc3pUaXRsZSA9IEdsb2JhbExvY2soaFBhZ2UpOworICBwYWdlLT5scHN6VGl0bGUgKz0gc2l6ZW9mKEhMUEZJTEVfUEFHRSk7CisgIEhMUEZJTEVfVW5jb21wcmVzczIoJnRpdGxlLCBlbmQsIHBhZ2UtPmxwc3pUaXRsZSk7CisKKyAgcGFnZS0+d051bWJlciA9IEdFVF9VSU5UKGJ1ZiwgMHgyMSk7CisKKyAgYXR0cmlidXRlcy5iRGVidWcgICAgICAgID0gMDsKKyAgYXR0cmlidXRlcy53Rm9udCAgICAgICAgID0gMDsKKyAgYXR0cmlidXRlcy53VlNwYWNlICAgICAgID0gMDsKKyAgYXR0cmlidXRlcy53VkJhY2tTcGFjZSAgID0gMDsKKyAgYXR0cmlidXRlcy53SFNwYWNlICAgICAgID0gMDsKKyAgYXR0cmlidXRlcy53SW5kZW50ICAgICAgID0gMDsKKyAgYXR0cmlidXRlcy5saW5rLmxwc3pQYXRoID0gMDsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfQWRkUGFyYWdyYXBoCisgKi8KKworc3RhdGljIEJPT0wgSExQRklMRV9BZGRQYXJhZ3JhcGgoSExQRklMRSAqaGxwZmlsZSwgQllURSAqYnVmLCBCWVRFICplbmQpCit7CisgIEhHTE9CQUwgICAgICAgICAgICBoUGFyYWdyYXBoOworICBITFBGSUxFX1BBR0UgICAgICAqcGFnZTsKKyAgSExQRklMRV9QQVJBR1JBUEggKnBhcmFncmFwaCwgKipwYXJhZ3JhcGhwdHI7CisgIFVJTlQgICAgICAgICAgICAgICB0ZXh0c2l6ZTsKKyAgQllURSAgICAgICAgICAgICAgKmZvcm1hdCwgKnRleHQ7CisgIEJPT0wgICAgICAgICAgICAgICBmb3JtYXRfaGVhZGVyID0gVFJVRTsKKyAgQk9PTCAgICAgICAgICAgICAgIGZvcm1hdF9lbmQgPSBGQUxTRTsKKyAgVUlOVCAgICAgICAgICAgICAgIG1hc2ssIGk7CisKKyAgaWYgKCFobHBmaWxlLT5maXJzdF9wYWdlKSB7UmVwb3J0KCJwYXJhZ3JhcGgxIik7IHJldHVybihGQUxTRSk7fTsKKworICBmb3IgKHBhZ2UgPSBobHBmaWxlLT5maXJzdF9wYWdlOyBwYWdlLT5uZXh0OyBwYWdlID0gcGFnZS0+bmV4dCkgLyogTm90aGluZyAqLzsKKyAgZm9yIChwYXJhZ3JhcGhwdHIgPSAmcGFnZS0+Zmlyc3RfcGFyYWdyYXBoOyAqcGFyYWdyYXBocHRyOworICAgICAgIHBhcmFncmFwaHB0ciA9ICYoKnBhcmFncmFwaHB0ciktPm5leHQpIC8qIE5vdGhpbmcgKi87IAorCisgIGlmIChidWYgKyAweDE5ID4gZW5kKSB7UmVwb3J0KCJwYXJhZ3JhcGgyIik7IHJldHVybihGQUxTRSk7fTsKKworICBpZiAoYnVmWzB4MTRdID09IDB4MDIpIHJldHVybiBUUlVFOworCisgIHRleHQgICA9IGJ1ZiArIEdFVF9VSU5UKGJ1ZiwgMHgxMCk7CisKKyAgc3dpdGNoIChidWZbMHgxNF0pCisgICAgeworICAgIGNhc2UgMHgyMDoKKyAgICAgIGZvcm1hdCA9IGJ1ZiArIDB4MTg7CisgICAgICB3aGlsZSAoKmZvcm1hdCkgZm9ybWF0Kys7CisgICAgICBmb3JtYXQgKz0gNDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAweDIzOgorICAgICAgZm9ybWF0ID0gYnVmICsgMHgyYjsKKyAgICAgIGlmIChidWZbMHgxN10gJiAxKSBmb3JtYXQrKzsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIFJlcG9ydCgicGFyYWdyYXBoMyIpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICB3aGlsZSAodGV4dCA8IGVuZCkKKyAgICB7CisgICAgICBpZiAoZm9ybWF0X2hlYWRlcikKKwl7CisJICBmb3JtYXRfaGVhZGVyID0gRkFMU0U7CisKKwkgIG1hc2sgPSBHRVRfVVNIT1JUKGZvcm1hdCwgMCk7CisJICBtYXNrICY9IDB4M2ZmOworCSAgZm9ybWF0ICs9IDI7CisKKwkgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrLCBtYXNrID0gbWFzayA+PiAxKQorCSAgICB7CisJICAgICAgaWYgKG1hc2sgJiAxKQorCQl7CisJCSAgQk9PTCB0d29hcmdzID0gRkFMU0U7CisJCSAgQ0hBUiBwcmVmaXgwID0gJyAnOworCQkgIENIQVIgcHJlZml4MSA9ICcqJzsKKworCQkgIGlmIChpID09IDkgJiYgIXR3b2FyZ3MpCisJCSAgICB7CisJCSAgICAgIHN3aXRjaCAoKmZvcm1hdCsrKQorCQkJeworCQkJZGVmYXVsdDoKKwkJCSAgcHJlZml4MCA9IHByZWZpeDEgPSAnPyc7CisJCQkgIGJyZWFrOworCisJCQljYXNlIDB4ODI6CisJCQkgIHByZWZpeDAgPSBwcmVmaXgxID0gJ3gnOworCQkJICBicmVhazsKKworCQkJY2FzZSAweDg0OgorCQkJICBwcmVmaXgwID0gcHJlZml4MSA9ICdYJzsKKwkJCSAgdHdvYXJncyA9IFRSVUU7CisJCQl9CisJCSAgICB9CisKKwkJICBpZiAoKmZvcm1hdCAmIDEpCisJCSAgICBzd2l0Y2goKmZvcm1hdCkKKwkJICAgICAgeworCQkgICAgICBkZWZhdWx0OgorCQkJZm9ybWF0ICs9IDI7CisJCQlicmVhazsKKwkJICAgICAgfQorCQkgIGVsc2UKKwkJICAgIHN3aXRjaCgqZm9ybWF0KQorCQkgICAgICB7CisKKwkJICAgICAgZGVmYXVsdDoKKwkJCWZvcm1hdCsrOworCQkJYnJlYWs7CisKKwkJICAgICAgY2FzZSAweDA4OgorCQkJZm9ybWF0ICs9IDM7CisJCQlicmVhazsKKwkJICAgICAgfQorCisJCSAgaWYgKHR3b2FyZ3MpIGZvcm1hdCArPSAoKmZvcm1hdCAmIDEpID8gMiA6IDE7CisJCX0KKwkgICAgfQorCX0KKworICAgICAgZm9yICg7ICFmb3JtYXRfaGVhZGVyICYmIHRleHQgPCBlbmQgJiYgZm9ybWF0IDwgZW5kICYmICEqdGV4dDsgdGV4dCsrKQorCXsKKwkgIHN3aXRjaCgqZm9ybWF0KQorCSAgICB7CisJICAgIGNhc2UgMHg4MDoKKwkgICAgICBhdHRyaWJ1dGVzLndGb250ID0gR0VUX1VTSE9SVChmb3JtYXQsIDEpOworCSAgICAgIGZvcm1hdCArPSAzOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgMHg4MToKKwkgICAgICBhdHRyaWJ1dGVzLndWU3BhY2UrKzsKKwkgICAgICBmb3JtYXQgKz0gMTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4ODI6CisJICAgICAgYXR0cmlidXRlcy53VlNwYWNlICs9IDIgLSBhdHRyaWJ1dGVzLndWQmFja1NwYWNlOworCSAgICAgIGF0dHJpYnV0ZXMud1ZCYWNrU3BhY2UgPSAwOworCSAgICAgIGF0dHJpYnV0ZXMud0luZGVudCA9IDA7CisJICAgICAgZm9ybWF0ICs9IDE7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAweDgzOgorCSAgICAgIGF0dHJpYnV0ZXMud0luZGVudCsrOworCSAgICAgIGZvcm1hdCArPSAxOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgMHg4NDoKKwkgICAgICBmb3JtYXQgKz0gMzsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4ODY6CisJICAgIGNhc2UgMHg4NzoKKwkgICAgY2FzZSAweDg4OgorCSAgICAgIGZvcm1hdCArPSA5OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgMHg4OToKKwkgICAgICBhdHRyaWJ1dGVzLndWQmFja1NwYWNlKys7CisJICAgICAgZm9ybWF0ICs9IDE7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAweGE5OgorCSAgICAgIGZvcm1hdCArPSAyOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgMHhlMjoKKwkgICAgY2FzZSAweGUzOgorCSAgICAgIGF0dHJpYnV0ZXMubGluay5scHN6UGF0aCA9IGhscGZpbGUtPmxwc3pQYXRoOworCSAgICAgIGF0dHJpYnV0ZXMubGluay5sSGFzaCAgICA9IEdFVF9VSU5UKGZvcm1hdCwgMSk7CisJICAgICAgYXR0cmlidXRlcy5saW5rLmJQb3B1cCAgID0gISgqZm9ybWF0ICYgMSk7CisJICAgICAgZm9ybWF0ICs9IDU7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAweGVhOgorCSAgICAgIGF0dHJpYnV0ZXMubGluay5scHN6UGF0aCA9IGZvcm1hdCArIDg7CisJICAgICAgYXR0cmlidXRlcy5saW5rLmxIYXNoICAgID0gR0VUX1VJTlQoZm9ybWF0LCA0KTsKKwkgICAgICBhdHRyaWJ1dGVzLmxpbmsuYlBvcHVwICAgPSAhKCpmb3JtYXQgJiAxKTsKKwkgICAgICBmb3JtYXQgKz0gMyArIEdFVF9VU0hPUlQoZm9ybWF0LCAxKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDB4ZmY6CisJICAgICAgaWYgKGJ1ZlsweDE0XSAhPSAweDIzIHx8IEdFVF9VU0hPUlQoZm9ybWF0LCAxKSA9PSAweGZmZmYpCisJCXsKKwkJICBpZiAoZm9ybWF0X2VuZCkgUmVwb3J0KCJmb3JtYXRfZW5kIik7CisJCSAgZm9ybWF0X2VuZCA9IFRSVUU7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBmb3JtYXRfaGVhZGVyID0gVFJVRTsKKwkJICBmb3JtYXQgKz0gMTA7CisJCSAgYnJlYWs7CisJCX0KKworCSAgICBkZWZhdWx0OgorCSAgICAgIFJlcG9ydCgiZm9ybWF0Iik7CisJICAgICAgZm9ybWF0Kys7CisJICAgIH0KKwl9CisKKyAgICAgIGlmICh0ZXh0ID4gZW5kIHx8IGZvcm1hdCA+IGVuZCkge1JlcG9ydCgicGFyYWdyYXBoX2VuZCIpOyByZXR1cm4oRkFMU0UpO307CisgICAgICBpZiAodGV4dCA9PSBlbmQgJiYgIWZvcm1hdF9lbmQpIFJlcG9ydCgidGV4dF9lbmQiKTsKKworICAgICAgaWYgKHRleHQgPT0gZW5kKSBicmVhazsKKworICAgICAgdGV4dHNpemUgPSBITFBGSUxFX1VuY29tcHJlc3NlZDJfU2l6ZSh0ZXh0LCBlbmQpOworICAgICAgaFBhcmFncmFwaCA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIHNpemVvZihITFBGSUxFX1BBUkFHUkFQSCkgKyB0ZXh0c2l6ZSk7CisgICAgICBpZiAoIWhQYXJhZ3JhcGgpIHJldHVybiBGQUxTRTsKKyAgICAgIHBhcmFncmFwaCA9ICpwYXJhZ3JhcGhwdHIgPSBHbG9iYWxMb2NrKGhQYXJhZ3JhcGgpOworICAgICAgcGFyYWdyYXBocHRyID0gJnBhcmFncmFwaC0+bmV4dDsKKyAgICAgIHBhcmFncmFwaC0+aFNlbGYgICAgPSBoUGFyYWdyYXBoOworICAgICAgcGFyYWdyYXBoLT5uZXh0ICAgICA9IDA7CisgICAgICBwYXJhZ3JhcGgtPmxpbmsgICAgID0gMDsKKworICAgICAgcGFyYWdyYXBoLT5scHN6VGV4dCA9IEdsb2JhbExvY2soaFBhcmFncmFwaCk7CisgICAgICBwYXJhZ3JhcGgtPmxwc3pUZXh0ICs9IHNpemVvZihITFBGSUxFX1BBUkFHUkFQSCk7CisgICAgICBITFBGSUxFX1VuY29tcHJlc3MyKCZ0ZXh0LCBlbmQsIHBhcmFncmFwaC0+bHBzelRleHQpOworCisgICAgICBwYXJhZ3JhcGgtPmJEZWJ1ZyAgICAgID0gYXR0cmlidXRlcy5iRGVidWc7CisgICAgICBwYXJhZ3JhcGgtPndGb250ICAgICAgID0gYXR0cmlidXRlcy53Rm9udDsKKyAgICAgIHBhcmFncmFwaC0+d1ZTcGFjZSAgICAgPSBhdHRyaWJ1dGVzLndWU3BhY2U7CisgICAgICBwYXJhZ3JhcGgtPndIU3BhY2UgICAgID0gYXR0cmlidXRlcy53SFNwYWNlOworICAgICAgcGFyYWdyYXBoLT53SW5kZW50ICAgICA9IGF0dHJpYnV0ZXMud0luZGVudDsKKyAgICAgIGlmIChhdHRyaWJ1dGVzLmxpbmsubHBzelBhdGgpCisJeworCSAgTFBTVFIgcHRyOworCSAgSEdMT0JBTCBoYW5kbGUgPSBHbG9iYWxBbGxvYyhHTUVNX0ZJWEVELCBzaXplb2YoSExQRklMRV9MSU5LKSArCisJCQkJCSAgIHN0cmxlbihhdHRyaWJ1dGVzLmxpbmsubHBzelBhdGgpICsgMSk7CisJICBpZiAoIWhhbmRsZSkgcmV0dXJuIEZBTFNFOworCSAgcGFyYWdyYXBoLT5saW5rID0gR2xvYmFsTG9jayhoYW5kbGUpOworCSAgcGFyYWdyYXBoLT5saW5rLT5oU2VsZiA9IGhhbmRsZTsKKworCSAgcHRyID0gR2xvYmFsTG9jayhoYW5kbGUpOworCSAgcHRyICs9IHNpemVvZihITFBGSUxFX0xJTkspOworCSAgbHN0cmNweShwdHIsIChMUFNUUikgYXR0cmlidXRlcy5saW5rLmxwc3pQYXRoKTsKKworCSAgcGFyYWdyYXBoLT5saW5rLT5scHN6UGF0aCA9IHB0cjsKKwkgIHBhcmFncmFwaC0+bGluay0+bEhhc2ggICAgPSBhdHRyaWJ1dGVzLmxpbmsubEhhc2g7CisJICBwYXJhZ3JhcGgtPmxpbmstPmJQb3B1cCAgID0gYXR0cmlidXRlcy5saW5rLmJQb3B1cDsKKwl9CisKKyAgICAgIGF0dHJpYnV0ZXMuYkRlYnVnICAgICAgICA9IDA7CisgICAgICBhdHRyaWJ1dGVzLndWU3BhY2UgICAgICAgPSAwOworICAgICAgYXR0cmlidXRlcy53SFNwYWNlICAgICAgID0gMDsKKyAgICAgIGF0dHJpYnV0ZXMubGluay5scHN6UGF0aCA9IDA7CisgICAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9SZWFkRmlsZVRvQnVmZmVyCisgKi8KKworc3RhdGljIEJPT0wgSExQRklMRV9SZWFkRmlsZVRvQnVmZmVyKEhGSUxFIGhGaWxlKQoreworICBCWVRFICBoZWFkZXJbMTZdLCBkdW1teVsxXTsKKyAgVUlOVCAgc2l6ZTsKKworICBpZiAoX2hyZWFkKGhGaWxlLCBoZWFkZXIsIDE2KSAhPSAxNikge1JlcG9ydCgiaGVhZGVyIik7IHJldHVybihGQUxTRSk7fTsKKworICBzaXplID0gR0VUX1VJTlQoaGVhZGVyLCAxMik7CisgIGhGaWxlQnVmZmVyID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgc2l6ZSArIDEpOworICBpZiAoIWhGaWxlQnVmZmVyKSByZXR1cm4gRkFMU0U7CisgIGZpbGVfYnVmZmVyID0gR2xvYmFsTG9jayhoRmlsZUJ1ZmZlcik7CisKKyAgbWVtY3B5KGZpbGVfYnVmZmVyLCBoZWFkZXIsIDE2KTsKKyAgaWYgKF9ocmVhZChoRmlsZSwgZmlsZV9idWZmZXIgKyAxNiwgc2l6ZSAtIDE2KSAhPSBzaXplIC0gMTYpCisgICAge1JlcG9ydCgiZmlsZXNpemUxIik7IHJldHVybihGQUxTRSk7fTsKKworICBpZiAoX2hyZWFkKGhGaWxlLCBkdW1teSwgMSkgIT0gMCkgUmVwb3J0KCJmaWxlc2l6ZTIiKTsgCisKKyAgZmlsZV9idWZmZXJbc2l6ZV0gPSAnMCc7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBITFBGSUxFX0ZpbmRTdWJGaWxlCisgKi8KKworc3RhdGljIEJPT0wgSExQRklMRV9GaW5kU3ViRmlsZShMUENTVFIgbmFtZSwgQllURSAqKnN1YmJ1ZiwgQllURSAqKnN1YmVuZCkKK3sKKyAgQllURSAqcm9vdCA9IGZpbGVfYnVmZmVyICsgR0VUX1VJTlQoZmlsZV9idWZmZXIsICA0KTsKKyAgQllURSAqZW5kICA9IGZpbGVfYnVmZmVyICsgR0VUX1VJTlQoZmlsZV9idWZmZXIsIDEyKTsKKyAgQllURSAqcHRyICA9IHJvb3QgKyAweDM3OworCisgIHdoaWxlIChwdHIgPCBlbmQgJiYgcHRyWzBdID09IDB4N2MpCisgICAgeworICAgICAgQllURSAqZm5hbWUgPSBwdHIgKyAxOworICAgICAgcHRyICs9IHN0cmxlbihwdHIpICsgMTsKKyAgICAgIGlmICghbHN0cmNtcGkoZm5hbWUsIG5hbWUpKQorCXsKKwkgICpzdWJidWYgPSBmaWxlX2J1ZmZlciArIEdFVF9VSU5UKHB0ciwgMCk7CisJICAqc3ViZW5kID0gKnN1YmJ1ZiArIEdFVF9VSU5UKCpzdWJidWYsIDApOworCSAgaWYgKGZpbGVfYnVmZmVyID4gKnN1YmJ1ZiB8fCAqc3ViYnVmID4gKnN1YmVuZCB8fCAqc3ViZW5kID49IGVuZCkKKwkgICAgeworCSAgICAgIFJlcG9ydCgic3ViZmlsZSIpOworCSAgICAgIHJldHVybiBGQUxTRTsKKwkgICAgfQorCSAgcmV0dXJuIFRSVUU7CisJfQorICAgICAgZWxzZSBwdHIgKz0gNDsKKyAgICB9CisgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfU3lzdGVtQ29tbWFuZHMKKyAqLworc3RhdGljIFZPSUQgSExQRklMRV9TeXN0ZW1Db21tYW5kcyhITFBGSUxFKiBobHBmaWxlKQoreworICBCWVRFICpidWYsICpwdHIsICplbmQ7CisgIEhHTE9CQUwgaGFuZGxlOworICBITFBGSUxFX01BQ1JPICptYWNybywgKiptOworICBMUFNUUiBwOworCisgIGhscGZpbGUtPmxwc3pUaXRsZSA9ICIiOworCisgIGlmICghSExQRklMRV9GaW5kU3ViRmlsZSgiU1lTVEVNIiwgJmJ1ZiwgJmVuZCkpIHJldHVybjsKKworICBmb3IgKHB0ciA9IGJ1ZiArIDB4MTU7IHB0ciArIDQgPD0gZW5kOyBwdHIgKz0gR0VUX1VTSE9SVChwdHIsIDIpICsgNCkKKyAgICB7CisgICAgICBzd2l0Y2ggKEdFVF9VU0hPUlQocHRyLCAwKSkKKwl7CisJY2FzZSAxOgorCSAgaWYgKGhscGZpbGUtPmhUaXRsZSkge1JlcG9ydCgidGl0bGUiKTsgYnJlYWs7fQorCSAgaGxwZmlsZS0+aFRpdGxlID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgc3RybGVuKHB0ciArIDQpICsgMSk7CisJICBpZiAoIWhscGZpbGUtPmhUaXRsZSkgcmV0dXJuOworCSAgaGxwZmlsZS0+bHBzelRpdGxlID0gR2xvYmFsTG9jayhobHBmaWxlLT5oVGl0bGUpOworCSAgbHN0cmNweShobHBmaWxlLT5scHN6VGl0bGUsIHB0ciArIDQpOworCSAgYnJlYWs7CisKKwljYXNlIDI6CisJICBpZiAoR0VUX1VTSE9SVChwdHIsIDIpICE9IDEgfHwgcHRyWzRdICE9IDApIFJlcG9ydCgic3lzdGVtMiIpOworCSAgYnJlYWs7CisKKwljYXNlIDM6CisJICBpZiAoR0VUX1VTSE9SVChwdHIsIDIpICE9IDQgfHwgR0VUX1VJTlQocHRyLCA0KSAhPSAwKSBSZXBvcnQoInN5c3RlbTMiKTsKKwkgIGJyZWFrOworCisJY2FzZSA0OgorCSAgaGFuZGxlID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgc2l6ZW9mKEhMUEZJTEVfTUFDUk8pICsgbHN0cmxlbihwdHIgKyA0KSArIDEpOworCSAgaWYgKCFoYW5kbGUpIGJyZWFrOworCSAgbWFjcm8gPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisJICBtYWNyby0+aFNlbGYgPSBoYW5kbGU7CisJICBwICA9IEdsb2JhbExvY2soaGFuZGxlKTsKKwkgIHAgKz0gc2l6ZW9mKEhMUEZJTEVfTUFDUk8pOworCSAgbHN0cmNweShwLCAoTFBTVFIpIHB0ciArIDQpOworCSAgbWFjcm8tPmxwc3pNYWNybyA9IHA7CisJICBtYWNyby0+bmV4dCA9IDA7CisJICBmb3IgKG0gPSAmaGxwZmlsZS0+Zmlyc3RfbWFjcm87ICptOyBtID0gJigqbSktPm5leHQpOworCSAgKm0gPSBtYWNybzsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIFJlcG9ydCgic3lzdGVtIik7CisJfQorICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfVW5jb21wcmVzc2VkMV9TaXplCisgKi8KKworc3RhdGljIElOVCBITFBGSUxFX1VuY29tcHJlc3NlZDFfU2l6ZShCWVRFICpwdHIsIEJZVEUgKmVuZCkKK3sKKyAgSU5UICBpLCBuZXdzaXplID0gMDsKKworICB3aGlsZSAocHRyIDwgZW5kKQorICAgIHsKKyAgICAgIElOVCBtYXNrPSpwdHIrKzsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA4ICYmIHB0ciA8IGVuZDsgaSsrLCBtYXNrID0gbWFzayA+PiAxKQorCXsKKwkgIGlmIChtYXNrICYgMSkKKwkgICAgeworCSAgICAgIElOVCBjb2RlID0gR0VUX1VTSE9SVChwdHIsIDApOworCSAgICAgIElOVCBsZW4gID0gMyArIChjb2RlID4+IDEyKTsKKwkgICAgICBuZXdzaXplICs9IGxlbjsKKwkgICAgICBwdHIgICAgICs9IDI7CisJICAgIH0KKwkgIGVsc2UgbmV3c2l6ZSsrLCBwdHIrKzsKKwl9CisgICAgfQorCisgIHJldHVybihuZXdzaXplKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfVW5jb21wcmVzczEKKyAqLworCitzdGF0aWMgQllURSAqSExQRklMRV9VbmNvbXByZXNzMShCWVRFICpwdHIsIEJZVEUgKmVuZCwgQllURSAqbmV3cHRyKQoreworICBJTlQgaTsKKworICB3aGlsZSAocHRyIDwgZW5kKQorICAgIHsKKyAgICAgIElOVCBtYXNrPSpwdHIrKzsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA4ICYmIHB0ciA8IGVuZDsgaSsrLCBtYXNrID0gbWFzayA+PiAxKQorCXsKKwkgIGlmIChtYXNrICYgMSkKKwkgICAgeworCSAgICAgIElOVCBjb2RlICAgPSBHRVRfVVNIT1JUKHB0ciwgMCk7CisJICAgICAgSU5UIGxlbiAgICA9IDMgKyAoY29kZSA+PiAxMik7CisJICAgICAgSU5UIG9mZnNldCA9IGNvZGUgJiAweGZmZjsKKwkgICAgICBobWVtY3B5KG5ld3B0ciwgbmV3cHRyIC0gb2Zmc2V0IC0gMSwgbGVuKTsKKwkgICAgICBuZXdwdHIgKz0gbGVuOworCSAgICAgIHB0ciAgICArPSAyOworCSAgICB9CisJICBlbHNlICpuZXdwdHIrKyA9ICpwdHIrKzsKKwl9CisgICAgfQorCisgIHJldHVybihuZXdwdHIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9VbmNvbXByZXNzMV9QaHJhc2VzCisgKi8KKworc3RhdGljIEJPT0wgSExQRklMRV9VbmNvbXByZXNzMV9QaHJhc2VzKCkKK3sKKyAgVUlOVCBpLCBudW0sIG5ld3NpemU7CisgIEJZVEUgKmJ1ZiwgKmVuZCwgKm5ld2J1ZjsKKworICBpZiAoIUhMUEZJTEVfRmluZFN1YkZpbGUoIlBocmFzZXMiLCAmYnVmLCAmZW5kKSkge1JlcG9ydCgicGhyYXNlczAiKTsgcmV0dXJuIEZBTFNFO30KKworICBudW0gPSBwaHJhc2VzLm51bSA9IEdFVF9VU0hPUlQoYnVmLCA5KTsKKyAgaWYgKGJ1ZiArIDIgKiBudW0gKyAweDEzID49IGVuZCkge1JlcG9ydCgidW5jb21wcmVzczFhIik7IHJldHVybihGQUxTRSk7fTsKKworICBuZXdzaXplICA9IDIgKiBudW0gKyAyOworICBuZXdzaXplICs9IEhMUEZJTEVfVW5jb21wcmVzc2VkMV9TaXplKGJ1ZiArIDB4MTMgKyAyICogbnVtLCBlbmQpOworICBwaHJhc2VzLmhCdWZmZXIgPSBHbG9iYWxBbGxvYyhHTUVNX0ZJWEVELCBuZXdzaXplKTsKKyAgaWYgKCFwaHJhc2VzLmhCdWZmZXIpIHJldHVybiBGQUxTRTsKKyAgbmV3YnVmID0gcGhyYXNlcy5idWYgPSBHbG9iYWxMb2NrKHBocmFzZXMuaEJ1ZmZlcik7CisKKyAgaG1lbWNweShuZXdidWYsIGJ1ZiArIDB4MTEsIDIgKiBudW0gKyAyKTsKKyAgSExQRklMRV9VbmNvbXByZXNzMShidWYgKyAweDEzICsgMiAqIG51bSwgZW5kLCBuZXdidWYgKyAyICogbnVtICsgMik7CisKKyAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorICAgIHsKKyAgICAgIElOVCBpMCA9IEdFVF9VU0hPUlQobmV3YnVmLCAyICogaSk7CisgICAgICBJTlQgaTEgPSBHRVRfVVNIT1JUKG5ld2J1ZiwgMiAqIGkgKyAyKTsKKyAgICAgIGlmIChpMSA8IGkwIHx8IGkxID4gbmV3c2l6ZSkge1JlcG9ydCgidW5jb21wcmVzczFiIik7IHJldHVybihGQUxTRSk7fTsKKyAgICB9CisgIHJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9VbmNvbXByZXNzMV9Ub3BpYworICovCisKK3N0YXRpYyBCT09MIEhMUEZJTEVfVW5jb21wcmVzczFfVG9waWMoKQoreworICBCWVRFICpidWYsICpwdHIsICplbmQsICpuZXdwdHI7CisgIElOVCAgaSwgbmV3c2l6ZSA9IDA7CisKKyAgaWYgKCFITFBGSUxFX0ZpbmRTdWJGaWxlKCJUT1BJQyIsICZidWYsICZlbmQpKSB7UmVwb3J0KCJ0b3BpYzAiKTsgcmV0dXJuIEZBTFNFO30KKworICBidWYgKz0gOTsKKyAgdG9waWMud01hcExlbiA9IChlbmQgLSBidWYgLSAxKSAvIDB4MTAwMCArIDE7CisKKyAgZm9yIChpID0gMDsgaSA8IHRvcGljLndNYXBMZW47IGkrKykKKyAgICB7CisgICAgICBwdHIgPSBidWYgKyBpICogMHgxMDAwOworCisgICAgICAvKiBJIGRvbid0IGtub3cgd2h5LCBpdCdzIG5lY2Vzc2FyeSBmb3IgcHJpbnRtYW4uaGxwICovCisgICAgICBpZiAocHRyICsgMHg0NCA+IGVuZCkgcHRyID0gZW5kIC0gMHg0NDsKKworICAgICAgbmV3c2l6ZSArPSBITFBGSUxFX1VuY29tcHJlc3NlZDFfU2l6ZShwdHIgKyAweGMsIE1JTihlbmQsIHB0ciArIDB4MTAwMCkpOworICAgIH0KKworICB0b3BpYy5oTWFwICAgID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgdG9waWMud01hcExlbiAqIHNpemVvZih0b3BpYy5tYXBbMF0pKTsKKyAgdG9waWMuaEJ1ZmZlciA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIG5ld3NpemUpOworICBpZiAoIXRvcGljLmhNYXAgfHwgIXRvcGljLmhCdWZmZXIpIHJldHVybiBGQUxTRTsKKyAgdG9waWMubWFwID0gR2xvYmFsTG9jayh0b3BpYy5oTWFwKTsKKyAgbmV3cHRyID0gR2xvYmFsTG9jayh0b3BpYy5oQnVmZmVyKTsKKyAgdG9waWMuZW5kID0gbmV3cHRyICsgbmV3c2l6ZTsKKworICBmb3IgKGkgPSAwOyBpIDwgdG9waWMud01hcExlbjsgaSsrKQorICAgIHsKKyAgICAgIHB0ciA9IGJ1ZiArIGkgKiAweDEwMDA7CisgICAgICBpZiAocHRyICsgMHg0NCA+IGVuZCkgcHRyID0gZW5kIC0gMHg0NDsKKworICAgICAgdG9waWMubWFwW2ldID0gbmV3cHRyIC0gMHhjOworICAgICAgbmV3cHRyID0gSExQRklMRV9VbmNvbXByZXNzMShwdHIgKyAweGMsIE1JTihlbmQsIHB0ciArIDB4MTAwMCksIG5ld3B0cik7CisgICAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9VbmNvbXByZXNzZWQyX1NpemUKKyAqLworCitzdGF0aWMgVUlOVCBITFBGSUxFX1VuY29tcHJlc3NlZDJfU2l6ZShCWVRFICpwdHIsIEJZVEUgKmVuZCkKK3sKKyAgVUlOVCB3U2l6ZSAgID0gMDsKKworICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIpCisgICAgeworICAgICAgaWYgKCpwdHIgPj0gMHgyMCkKKwl3U2l6ZSsrLCBwdHIrKzsKKyAgICAgIGVsc2UKKwl7CisJICBCWVRFICpwaHB0ciwgKnBoZW5kOworCSAgVUlOVCBjb2RlICA9IDB4MTAwICogcHRyWzBdICsgcHRyWzFdOworCSAgVUlOVCBpbmRleCA9IChjb2RlIC0gMHgxMDApIC8gMjsKKwkgIEJPT0wgc3BhY2UgPSBjb2RlICYgMTsKKworCSAgaWYgKGluZGV4IDwgcGhyYXNlcy5udW0pCisJICAgIHsKKwkgICAgICBwaHB0ciA9IHBocmFzZXMuYnVmICsgR0VUX1VTSE9SVChwaHJhc2VzLmJ1ZiwgMiAqIGluZGV4KTsKKwkgICAgICBwaGVuZCA9IHBocmFzZXMuYnVmICsgR0VUX1VTSE9SVChwaHJhc2VzLmJ1ZiwgMiAqIGluZGV4ICsgMik7CisKKwkgICAgICBpZiAocGhlbmQgPCBwaHB0cikgUmVwb3J0KCJ1bmNvbXByZXNzMmEiKTsKKworCSAgICAgIHdTaXplICs9IHBoZW5kIC0gcGhwdHI7CisJICAgICAgaWYgKHNwYWNlKSB3U2l6ZSsrOworCSAgICB9CisJICBlbHNlIFJlcG9ydCgidW5jb21wcmVzczJiIik7CisKKwkgIHB0ciArPSAyOworCX0KKyAgICB9CisKKyAgcmV0dXJuKHdTaXplICsgMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBITFBGSUxFX1VuY29tcHJlc3MyCisgKi8KKworc3RhdGljIFZPSUQgSExQRklMRV9VbmNvbXByZXNzMihCWVRFICoqcHB0ciwgQllURSAqZW5kLCBCWVRFICpuZXdwdHIpCit7CisgIEJZVEUgKnB0ciAgICA9ICpwcHRyOworCisgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0cikKKyAgICB7CisgICAgICBpZiAoKnB0ciA+PSAweDIwKQorCSpuZXdwdHIrKyA9ICpwdHIrKzsKKyAgICAgIGVsc2UKKwl7CisJICBCWVRFICpwaHB0ciwgKnBoZW5kOworCSAgVUlOVCBjb2RlICA9IDB4MTAwICogcHRyWzBdICsgcHRyWzFdOworCSAgVUlOVCBpbmRleCA9IChjb2RlIC0gMHgxMDApIC8gMjsKKwkgIEJPT0wgc3BhY2UgPSBjb2RlICYgMTsKKworCSAgcGhwdHIgPSBwaHJhc2VzLmJ1ZiArIEdFVF9VU0hPUlQocGhyYXNlcy5idWYsIDIgKiBpbmRleCk7CisJICBwaGVuZCA9IHBocmFzZXMuYnVmICsgR0VUX1VTSE9SVChwaHJhc2VzLmJ1ZiwgMiAqIGluZGV4ICsgMik7CisKKwkgIGhtZW1jcHkobmV3cHRyLCBwaHB0ciwgcGhlbmQgLSBwaHB0cik7CisJICBuZXdwdHIgKz0gcGhlbmQgLSBwaHB0cjsKKwkgIGlmIChzcGFjZSkgKm5ld3B0cisrID0gJyAnOworCisJICBwdHIgKz0gMjsKKwl9CisgICAgfQorICAqbmV3cHRyICA9ICdcMCc7CisgICpwcHRyICAgID0gcHRyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9HZXRDb250ZXh0CisgKi8KKworc3RhdGljIEJPT0wgSExQRklMRV9HZXRDb250ZXh0KEhMUEZJTEUgKmhscGZpbGUpCit7CisgIFVJTlQgaSwgaiwgY2xlbiwgdGxlbjsKKyAgQllURSAqY2J1ZiwgKmNwdHIsICpjZW5kLCAqdGJ1ZiwgKnRwdHIsICp0ZW5kOworCisgIGlmICghSExQRklMRV9GaW5kU3ViRmlsZSgiQ09OVEVYVCIsICZjYnVmLCAmY2VuZCkpIHtSZXBvcnQoImNvbnRleHQwIik7IHJldHVybiBGQUxTRTt9CisgIGlmIChjYnVmICsgMHgzNyA+IGNlbmQpIHtSZXBvcnQoImNvbnRleHQxIik7IHJldHVybihGQUxTRSk7fTsKKyAgY2xlbiA9IEdFVF9VSU5UKGNidWYsIDB4MmIpOworICBpZiAoY2J1ZiArIDB4MzcgKyA4ICogaGxwZmlsZS0+d0NvbnRleHRMZW4gPiBjZW5kKSB7UmVwb3J0KCJjb250ZXh0MiIpOyByZXR1cm4oRkFMU0UpO307CisKKyAgaWYgKCFITFBGSUxFX0ZpbmRTdWJGaWxlKCJUVExCVFJFRSIsICZ0YnVmLCAmdGVuZCkpIHtSZXBvcnQoInR0bGIwIik7IHJldHVybiBGQUxTRTt9CisgIGlmICh0YnVmICsgMHgzNyA+IHRlbmQpIHtSZXBvcnQoInR0bGIxIik7IHJldHVybihGQUxTRSk7fTsKKyAgdGxlbiA9IEdFVF9VSU5UKHRidWYsIDB4MmIpOworCisgIGhscGZpbGUtPmhDb250ZXh0ID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgY2xlbiAqIHNpemVvZihITFBGSUxFX0NPTlRFWFQpKTsKKyAgaWYgKCFobHBmaWxlLT5oQ29udGV4dCkgcmV0dXJuIEZBTFNFOworICBobHBmaWxlLT5Db250ZXh0ID0gR2xvYmFsTG9jayhobHBmaWxlLT5oQ29udGV4dCk7CisgIGhscGZpbGUtPndDb250ZXh0TGVuID0gY2xlbjsKKworICBjcHRyID0gY2J1ZiArIDB4Mzc7CisgIGZvciAoaSA9IDA7IGkgPCBjbGVuOyBpKyssIGNwdHIgKz0gOCkKKyAgICB7CisgICAgICB0cHRyID0gdGJ1ZiArIDB4Mzc7CisgICAgICBmb3IgKGogPSAwOyBqIDwgdGxlbjsgaisrLCB0cHRyICs9IDUgKyBzdHJsZW4odHB0ciArIDQpKQorCXsKKwkgIGlmICh0cHRyICsgNCA+PSB0ZW5kKSB7UmVwb3J0KCJ0dGxiMiIpOyByZXR1cm4oRkFMU0UpO307CisJICBpZiAoR0VUX1VJTlQodHB0ciwgMCkgPT0gR0VUX1VJTlQoY3B0ciwgNCkpIGJyZWFrOworCX0KKyAgICAgIGlmIChqID49IHRsZW4pCisJeworCSAgUmVwb3J0KCJ0dGxiMyIpOworCSAgaiA9IDA7CisJfQorICAgICAgaGxwZmlsZS0+Q29udGV4dFtpXS5sSGFzaCA9IEdFVF9VSU5UKGNwdHIsIDApOworICAgICAgaGxwZmlsZS0+Q29udGV4dFtpXS53UGFnZSA9IGo7CisgICAgfQorCisgIHJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgSExQRklMRV9EZWxldGVQYXJhZ3JhcGgKKyAqLworCitzdGF0aWMgVk9JRCBITFBGSUxFX0RlbGV0ZVBhcmFncmFwaChITFBGSUxFX1BBUkFHUkFQSCogcGFyYWdyYXBoKQoreworICBpZiAoIXBhcmFncmFwaCkgcmV0dXJuOworCisgIGlmIChwYXJhZ3JhcGgtPmxpbmspIEdsb2JhbEZyZWUocGFyYWdyYXBoLT5saW5rLT5oU2VsZik7CisKKyAgSExQRklMRV9EZWxldGVQYXJhZ3JhcGgocGFyYWdyYXBoLT5uZXh0KTsKKyAgR2xvYmFsRnJlZShwYXJhZ3JhcGgtPmhTZWxmKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIERlbGV0ZVBhZ2UKKyAqLworCitzdGF0aWMgVk9JRCBITFBGSUxFX0RlbGV0ZVBhZ2UoSExQRklMRV9QQUdFKiBwYWdlKQoreworICBpZiAoIXBhZ2UpIHJldHVybjsKKworICBITFBGSUxFX0RlbGV0ZVBhZ2UocGFnZS0+bmV4dCk7CisgIEhMUEZJTEVfRGVsZXRlUGFyYWdyYXBoKHBhZ2UtPmZpcnN0X3BhcmFncmFwaCk7CisgIEdsb2JhbEZyZWUocGFnZS0+aFNlbGYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgRGVsZXRlTWFjcm8KKyAqLworCitzdGF0aWMgVk9JRCBITFBGSUxFX0RlbGV0ZU1hY3JvKEhMUEZJTEVfTUFDUk8qIG1hY3JvKQoreworICBpZiAoIW1hY3JvKSByZXR1cm47CisKKyAgSExQRklMRV9EZWxldGVNYWNybyhtYWNyby0+bmV4dCk7CisgIEdsb2JhbEZyZWUobWFjcm8tPmhTZWxmKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIEhMUEZJTEVfRnJlZUhscEZpbGUKKyAqLworCitWT0lEIEhMUEZJTEVfRnJlZUhscEZpbGUoSExQRklMRSogaGxwZmlsZSkKK3sKKyAgaWYgKCFobHBmaWxlKSByZXR1cm47CisgIGlmICgtLWhscGZpbGUtPndSZWZDb3VudCkgcmV0dXJuOworCisgIGlmIChobHBmaWxlLT5uZXh0KSBobHBmaWxlLT5uZXh0LT5wcmV2ID0gaGxwZmlsZS0+cHJldjsKKyAgaWYgKGhscGZpbGUtPnByZXYpIGhscGZpbGUtPnByZXYtPm5leHQgPSBobHBmaWxlLT5uZXh0OworICBlbHNlIGZpcnN0X2hscGZpbGUgPSAwOworCisgIEhMUEZJTEVfRGVsZXRlUGFnZShobHBmaWxlLT5maXJzdF9wYWdlKTsKKyAgSExQRklMRV9EZWxldGVNYWNybyhobHBmaWxlLT5maXJzdF9tYWNybyk7CisgIEdsb2JhbEZyZWUoaGxwZmlsZS0+aENvbnRleHQpOworICBHbG9iYWxGcmVlKGhscGZpbGUtPmhUaXRsZSk7CisgIEdsb2JhbEZyZWUoaGxwZmlsZS0+aFNlbGYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgRnJlZUhscEZpbGVQYWdlCisgKi8KKworVk9JRCBITFBGSUxFX0ZyZWVIbHBGaWxlUGFnZShITFBGSUxFX1BBR0UqIHBhZ2UpCit7CisgIGlmICghcGFnZSkgcmV0dXJuOworICBITFBGSUxFX0ZyZWVIbHBGaWxlKHBhZ2UtPmZpbGUpOworfQorCisvKiBMb2NhbCBWYXJpYWJsZXM6ICAgICovCisvKiBjLWZpbGUtc3R5bGU6ICJHTlUiICovCisvKiBFbmQ6ICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL2hscGZpbGUuaCBiL3Byb2dyYW1zL3dpbmhlbHAvaGxwZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTI1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL2hscGZpbGUuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogSGVscCBWaWV3ZXIKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCisgKi8KKworc3RydWN0IHRhZ0hlbHBGaWxlOworCit0eXBlZGVmIHN0cnVjdAoreworICBMUENTVFIgIGxwc3pQYXRoOworICBMT05HICAgIGxIYXNoOworICBCT09MICAgIGJQb3B1cDsKKworICBIR0xPQkFMIGhTZWxmOworfSBITFBGSUxFX0xJTks7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0hscEZpbGVQYXJhZ3JhcGgKK3sKKyAgTFBTVFIgIGxwc3pUZXh0OworCisgIFVJTlQgICBiRGVidWc7CisgIFVJTlQgICB3Rm9udDsKKyAgVUlOVCAgIHdJbmRlbnQ7CisgIFVJTlQgICB3SFNwYWNlOworICBVSU5UICAgd1ZTcGFjZTsKKworICBITFBGSUxFX0xJTksgKmxpbms7CisKKyAgc3RydWN0IHRhZ0hscEZpbGVQYXJhZ3JhcGggKm5leHQ7CisKKyAgSEdMT0JBTCBoU2VsZjsKK30gSExQRklMRV9QQVJBR1JBUEg7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0hscEZpbGVQYWdlCit7CisgIExQU1RSICAgICAgICAgIGxwc3pUaXRsZTsKKyAgSExQRklMRV9QQVJBR1JBUEggKmZpcnN0X3BhcmFncmFwaDsKKworICBVSU5UIHdOdW1iZXI7CisKKyAgc3RydWN0IHRhZ0hscEZpbGVQYWdlICpuZXh0OworICBzdHJ1Y3QgdGFnSGxwRmlsZUZpbGUgKmZpbGU7CisKKyAgSEdMT0JBTCBoU2VsZjsKK30gSExQRklMRV9QQUdFOworCit0eXBlZGVmIHN0cnVjdAoreworICBMT05HIGxIYXNoOworICBVSU5UIHdQYWdlOworfSBITFBGSUxFX0NPTlRFWFQ7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0hscEZpbGVNYWNybworeworICBMUENTVFIgbHBzek1hY3JvOworCisgIEhHTE9CQUwgaFNlbGY7CisgIHN0cnVjdCB0YWdIbHBGaWxlTWFjcm8gKm5leHQ7Cit9IEhMUEZJTEVfTUFDUk87CisKK3R5cGVkZWYgc3RydWN0IHRhZ0hscEZpbGVGaWxlCit7CisgIExQU1RSICAgICAgICBscHN6UGF0aDsKKyAgTFBTVFIgICAgICAgIGxwc3pUaXRsZTsKKyAgSExQRklMRV9QQUdFICAgICpmaXJzdF9wYWdlOworICBITFBGSUxFX01BQ1JPICAgKmZpcnN0X21hY3JvOworICBVSU5UICAgICAgICAgd0NvbnRleHRMZW47CisgIEhMUEZJTEVfQ09OVEVYVCAqQ29udGV4dDsKKworICBzdHJ1Y3QgdGFnSGxwRmlsZUZpbGUgKnByZXY7CisgIHN0cnVjdCB0YWdIbHBGaWxlRmlsZSAqbmV4dDsKKworICBVSU5UICAgICAgIHdSZWZDb3VudDsKKworICBIR0xPQkFMICAgIGhUaXRsZTsKKyAgSEdMT0JBTCAgICBoQ29udGV4dDsKKyAgSEdMT0JBTCAgICBoU2VsZjsKK30gSExQRklMRTsKKworSExQRklMRSAgICAgICpITFBGSUxFX1JlYWRIbHBGaWxlKExQQ1NUUiBscHN6UGF0aCk7CitITFBGSUxFX1BBR0UgKkhMUEZJTEVfQ29udGVudHMoTFBDU1RSIGxwc3pQYXRoKTsKK0hMUEZJTEVfUEFHRSAqSExQRklMRV9QYWdlQnlIYXNoKExQQ1NUUiBscHN6UGF0aCwgTE9ORyB3TnVtKTsKK0xPTkcgICAgICAgICAgSExQRklMRV9IYXNoKExQQ1NUUiBscHN6Q29udGV4dCk7CitWT0lEICAgICAgICAgIEhMUEZJTEVfRnJlZUhscEZpbGVQYWdlKEhMUEZJTEVfUEFHRSopOworVk9JRCAgICAgICAgICBITFBGSUxFX0ZyZWVIbHBGaWxlKEhMUEZJTEUqKTsKKworLyogTG9jYWwgVmFyaWFibGVzOiAgICAqLworLyogYy1maWxlLXN0eWxlOiAiR05VIiAqLworLyogRW5kOiAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9tYWNyby5jIGIvcHJvZ3JhbXMvd2luaGVscC9tYWNyby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNTUyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL21hY3JvLmMKQEAgLTAsMCArMSw1NTUgQEAKKy8qCisgKiBIZWxwIFZpZXdlcgorICoKKyAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8Y29tbWRsZy5oPgorI2lmZGVmIFdJTkVMSUIKKyNpbmNsdWRlIDxzaGVsbC5oPgorI2VuZGlmCisjaW5jbHVkZSAid2luaGVscC5oIgorI2luY2x1ZGUgIm1hY3JvLmgiCisKK1ZPSUQgTUFDUk9fQWJvdXQoVk9JRCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJBYm91dCgpXG4iKTsKK30KKworVk9JRCBNQUNST19BZGRBY2NlbGVyYXRvcihMT05HIHUxLCBMT05HIHUyLCBMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkFkZEFjY2VsZXJhdG9yKCVsdSwgJWx1LCBcIiVzXCIpXG4iLCB1MSwgdTIsIHN0cik7Cit9CisKK1ZPSUQgTUFDUk9fQUxpbmsoTFBDU1RSIHN0cjEsIExPTkcgdSwgTFBDU1RSIHN0cjIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiQUxpbmsoXCIlc1wiLCAlbHUsIFwiJXNcIilcbiIsIHN0cjEsIHUsIHN0cjIpOworfQorCitWT0lEIE1BQ1JPX0Fubm90YXRlKFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiQW5ub3RhdGUoKVxuIik7Cit9CisKK1ZPSUQgTUFDUk9fQXBwZW5kSXRlbShMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIsIExQQ1NUUiBzdHIzLCBMUENTVFIgc3RyNCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJBcHBlbmRJdGVtKFwiJXNcIiwgXCIlc1wiLCBcIiVzXCIsIFwiJXNcIilcbiIsIHN0cjEsIHN0cjIsIHN0cjMsIHN0cjQpOworfQorCitWT0lEIE1BQ1JPX0JhY2soVk9JRCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJCYWNrKClcbiIpOworfQorCitWT0lEIE1BQ1JPX0JhY2tGbHVzaChWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkJhY2tGbHVzaCgpXG4iKTsKK30KKworVk9JRCBNQUNST19Cb29rbWFya0RlZmluZShWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkJvb2ttYXJrRGVmaW5lKClcbiIpOworfQorCitWT0lEIE1BQ1JPX0Jvb2ttYXJrTW9yZShWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkJvb2ttYXJrTW9yZSgpXG4iKTsKK30KKworVk9JRCBNQUNST19Ccm93c2VCdXR0b25zKFZPSUQpCit7CisgIE1BQ1JPX0NyZWF0ZUJ1dHRvbigiQlROX1BSRVYiLCAiJjw8IiwgIlByZXYoKSIpOworICBNQUNST19DcmVhdGVCdXR0b24oIkJUTl9ORVhUIiwgIiY+PiIsICJOZXh0KCkiKTsKK30KKworVk9JRCBNQUNST19DaGFuZ2VCdXR0b25CaW5kaW5nKExQQ1NUUiBzdHIxLCBMUENTVFIgc3RyMikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDaGFuZ2VCdXR0b25CaW5kaW5nKFwiJXNcIiwgXCIlc1wiKVxuIiwgc3RyMSwgc3RyMik7Cit9CisKK1ZPSUQgTUFDUk9fQ2hhbmdlRW5hYmxlKExQQ1NUUiBzdHIxLCBMUENTVFIgc3RyMikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDaGFuZ2VFbmFibGUoXCIlc1wiLCBcIiVzXCIpXG4iLCBzdHIxLCBzdHIyKTsKK30KKworVk9JRCBNQUNST19DaGFuZ2VJdGVtQmluZGluZyhMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiQ2hhbmdlSXRlbUJpbmRpbmcoXCIlc1wiLCBcIiVzXCIpXG4iLCBzdHIxLCBzdHIyKTsKK30KKworVk9JRCBNQUNST19DaGVja0l0ZW0oTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDaGVja0l0ZW0oXCIlc1wiKVxuIiwgc3RyKTsKK30KKworVk9JRCBNQUNST19DbG9zZVNlY29uZGFyeXMoVk9JRCkKK3sKKyAgV0lOSEVMUF9XSU5ET1cgKndpbjsKKyAgZm9yICh3aW4gPSBHbG9iYWxzLndpbl9saXN0OyB3aW47IHdpbiA9IHdpbi0+bmV4dCkKKyAgICBpZiAod2luLT5scHN6TmFtZSAmJiBsc3RyY21waSh3aW4tPmxwc3pOYW1lLCAibWFpbiIpKQorICAgICAgRGVzdHJveVdpbmRvdyh3aW4tPmhNYWluV25kKTsKK30KKworVk9JRCBNQUNST19DbG9zZVdpbmRvdyhMUENTVFIgbHBzeldpbmRvdykKK3sKKyAgV0lOSEVMUF9XSU5ET1cgKndpbjsKKyAgaWYgKCFscHN6V2luZG93IHx8ICFscHN6V2luZG93WzBdKSBscHN6V2luZG93ID0gIm1haW4iOworCisgIGZvciAod2luID0gR2xvYmFscy53aW5fbGlzdDsgd2luOyB3aW4gPSB3aW4tPm5leHQpCisgICAgaWYgKHdpbi0+bHBzek5hbWUgJiYgIWxzdHJjbXBpKHdpbi0+bHBzek5hbWUsIGxwc3pXaW5kb3cpKQorICAgICAgRGVzdHJveVdpbmRvdyh3aW4tPmhNYWluV25kKTsKK30KKworVk9JRCBNQUNST19Db21wYXJlKExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiQ29tcGFyZShcIiVzXCIpXG4iLCBzdHIpOworfQorCitWT0lEIE1BQ1JPX0NvbnRlbnRzKFZPSUQpCit7CisgIGlmIChHbG9iYWxzLmFjdGl2ZV93aW4tPnBhZ2UpCisgICAgTUFDUk9fSnVtcENvbnRlbnRzKEdsb2JhbHMuYWN0aXZlX3dpbi0+cGFnZS0+ZmlsZS0+bHBzelBhdGgsIE5VTEwpOworfQorCitWT0lEIE1BQ1JPX0NvbnRyb2xQYW5lbChMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIsIExPTkcgdSkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDb250cm9sUGFuZWwoXCIlc1wiLCBcIiVzXCIsICVsdSlcbiIsIHN0cjEsIHN0cjIsIHUpOworfQorCitWT0lEIE1BQ1JPX0NvcHlEaWFsb2coVk9JRCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDb3B5RGlhbG9nKClcbiIpOworfQorCitWT0lEIE1BQ1JPX0NvcHlUb3BpYyhWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkNvcHlUb3BpYygpXG4iKTsKK30KKworVk9JRCBNQUNST19DcmVhdGVCdXR0b24oTFBDU1RSIGlkLCBMUENTVFIgbmFtZSwgTFBDU1RSIG1hY3JvKQoreworICBXSU5IRUxQX1dJTkRPVyAqd2luID0gR2xvYmFscy5hY3RpdmVfd2luOworICBXSU5IRUxQX0JVVFRPTiAqYnV0dG9uLCAqKmI7CisgIExPTkcgICAgICAgICAgICBzaXplOworICBIR0xPQkFMICAgICAgICAgaGFuZGxlOworICBMUFNUUiAgICAgICAgICAgcHRyOworCisgIHNpemUgPSBzaXplb2YoV0lOSEVMUF9CVVRUT04pICsgbHN0cmxlbihpZCkgKyBsc3RybGVuKG5hbWUpICsgbHN0cmxlbihtYWNybykgKyAzOworICBoYW5kbGUgPSBHbG9iYWxBbGxvYyhHTUVNX0ZJWEVELCBzaXplKTsKKyAgaWYgKCFoYW5kbGUpIHJldHVybjsKKworICBidXR0b24gPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgIGJ1dHRvbi0+aFNlbGYgPSBoYW5kbGU7CisgIGJ1dHRvbi0+bmV4dCAgPSAwOworICBidXR0b24tPmhXbmQgID0gMDsKKworICBwdHIgPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgIHB0ciArPSBzaXplb2YoV0lOSEVMUF9CVVRUT04pOworCisgIGxzdHJjcHkocHRyLCAoTFBTVFIpIGlkKTsKKyAgYnV0dG9uLT5scHN6SUQgPSBwdHI7CisgIHB0ciArPSBsc3RybGVuKGlkKSArIDE7CisKKyAgbHN0cmNweShwdHIsIChMUFNUUikgbmFtZSk7CisgIGJ1dHRvbi0+bHBzek5hbWUgPSBwdHI7CisgIHB0ciArPSBsc3RybGVuKG5hbWUpICsgMTsKKworICBsc3RyY3B5KHB0ciwgKExQU1RSKSBtYWNybyk7CisgIGJ1dHRvbi0+bHBzek1hY3JvID0gcHRyOworCisgIGJ1dHRvbi0+d1BhcmFtID0gV0hfRklSU1RfQlVUVE9OOworICBmb3IgKGIgPSAmd2luLT5maXJzdF9idXR0b247ICpiOyBiID0gJigqYiktPm5leHQpCisgICAgYnV0dG9uLT53UGFyYW0gPSBNQVgoYnV0dG9uLT53UGFyYW0sICgqYiktPndQYXJhbSArIDEpOworICAqYiA9IGJ1dHRvbjsKKworICBTZW5kTWVzc2FnZSh3aW4tPmhNYWluV25kLCBXTV9VU0VSLCAwLCAwKTsKK30KKworVk9JRCBNQUNST19EZWxldGVJdGVtKExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRGVsZXRlSXRlbShcIiVzXCIpXG4iLCBzdHIpOworfQorCitWT0lEIE1BQ1JPX0RlbGV0ZU1hcmsoTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJEZWxldGVNYXJrKFwiJXNcIilcbiIsIHN0cik7Cit9CisKK1ZPSUQgTUFDUk9fRGVzdHJveUJ1dHRvbihMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkRlc3Ryb3lCdXR0b24oXCIlc1wiKVxuIiwgc3RyKTsKK30KKworVk9JRCBNQUNST19EaXNhYmxlQnV0dG9uKExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRGlzYWJsZUJ1dHRvbihcIiVzXCIpXG4iLCBzdHIpOworfQorCitWT0lEIE1BQ1JPX0Rpc2FibGVJdGVtKExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRGlzYWJsZUl0ZW0oXCIlc1wiKVxuIiwgc3RyKTsKK30KKworVk9JRCBNQUNST19FbmFibGVCdXR0b24oTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJFbmFibGVCdXR0b24oXCIlc1wiKVxuIiwgc3RyKTsKK30KKworVk9JRCBNQUNST19FbmFibGVJdGVtKExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRW5hYmxlSXRlbShcIiVzXCIpXG4iLCBzdHIpOworfQorCitWT0lEIE1BQ1JPX0VuZE1QcmludChWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkVuZE1QcmludCgpXG4iKTsKK30KKworVk9JRCBNQUNST19FeGVjRmlsZShMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIsIExPTkcgdSwgTFBDU1RSIHN0cjMpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRXhlY0ZpbGUoXCIlc1wiLCBcIiVzXCIsICVsdSwgXCIlc1wiKVxuIiwgc3RyMSwgc3RyMiwgdSwgc3RyMyk7Cit9CisKK1ZPSUQgTUFDUk9fRXhlY1Byb2dyYW0oTFBDU1RSIHN0ciwgTE9ORyB1KQoreworICBmcHJpbnRmKHN0ZGVyciwgIkV4ZWNQcm9ncmFtKFwiJXNcIiwgJWx1KVxuIiwgc3RyLCB1KTsKK30KKworVk9JRCBNQUNST19FeGl0KFZPSUQpCit7CisgIHdoaWxlKEdsb2JhbHMud2luX2xpc3QpCisgICAgRGVzdHJveVdpbmRvdyhHbG9iYWxzLndpbl9saXN0LT5oTWFpblduZCk7Cit9CisKK1ZPSUQgTUFDUk9fRXh0QWJsZUl0ZW0oTFBDU1RSIHN0ciwgTE9ORyB1KQoreworICBmcHJpbnRmKHN0ZGVyciwgIkV4dEFibGVJdGVtKFwiJXNcIiwgJWx1KVxuIiwgc3RyLCB1KTsKK30KKworVk9JRCBNQUNST19FeHRJbnNlcnRJdGVtKExQQ1NUUiBzdHIxLCBMUENTVFIgc3RyMiwgTFBDU1RSIHN0cjMsIExQQ1NUUiBzdHI0LCBMT05HIHUxLCBMT05HIHUyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkV4dEluc2VydEl0ZW0oXCIlc1wiLCBcIiVzXCIsIFwiJXNcIiwgXCIlc1wiLCAlbHUsICVsdSlcbiIsIHN0cjEsIHN0cjIsIHN0cjMsIHN0cjQsIHUxLCB1Mik7Cit9CisKK1ZPSUQgTUFDUk9fRXh0SW5zZXJ0TWVudShMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIsIExQQ1NUUiBzdHIzLCBMT05HIHUxLCBMT05HIHUyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkV4dEluc2VydE1lbnUoXCIlc1wiLCBcIiVzXCIsIFwiJXNcIiwgJWx1LCAlbHUpXG4iLCBzdHIxLCBzdHIyLCBzdHIzLCB1MSwgdTIpOworfQorCitCT09MIE1BQ1JPX0ZpbGVFeGlzdChMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkZpbGVFeGlzdChcIiVzXCIpXG4iLCBzdHIpOworICByZXR1cm4gVFJVRTsKK30KKworVk9JRCBNQUNST19GaWxlT3BlbihWT0lEKQoreworICBPUEVORklMRU5BTUUgb3BlbmZpbGVuYW1lOworICBDSEFSIHN6UGF0aFtNQVhfUEFUSE5BTUVfTEVOXTsKKyAgQ0hBUiBzekRpcltNQVhfUEFUSE5BTUVfTEVOXTsKKyAgQ0hBUiBzenpGaWx0ZXJbMiAqIE1BWF9TVFJJTkdfTEVOICsgMTAwXTsKKyAgTFBTVFIgcCA9IHN6ekZpbHRlcjsKKworICBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBJRFNfSEVMUF9GSUxFU19ITFAsIHAsIE1BWF9TVFJJTkdfTEVOKTsKKyAgcCArPSBzdHJsZW4ocCkgKyAxOworICBsc3RyY3B5KHAsICIqLmhscCIpOworICBwICs9IHN0cmxlbihwKSArIDE7CisgIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIElEU19BTExfRklMRVMsIHAsIE1BWF9TVFJJTkdfTEVOKTsKKyAgcCArPSBzdHJsZW4ocCkgKyAxOworICBsc3RyY3B5KHAsICIqLioiKTsKKyAgcCArPSBzdHJsZW4ocCkgKyAxOworICAqcCA9ICdcMCc7CisKKyAgR2V0V2luZG93c0RpcmVjdG9yeShzekRpciwgc2l6ZW9mKHN6RGlyKSk7CisKKyAgb3BlbmZpbGVuYW1lLmxTdHJ1Y3RTaXplICAgICAgID0gMDsKKyAgb3BlbmZpbGVuYW1lLmh3bmRPd25lciAgICAgICAgID0gR2xvYmFscy5hY3RpdmVfd2luLT5oTWFpblduZDsKKyAgb3BlbmZpbGVuYW1lLmhJbnN0YW5jZSAgICAgICAgID0gR2xvYmFscy5oSW5zdGFuY2U7CisgIG9wZW5maWxlbmFtZS5scHN0ckZpbHRlciAgICAgICA9IHN6ekZpbHRlcjsKKyAgb3BlbmZpbGVuYW1lLmxwc3RyQ3VzdG9tRmlsdGVyID0gMDsKKyAgb3BlbmZpbGVuYW1lLm5NYXhDdXN0RmlsdGVyICAgID0gMDsKKyAgb3BlbmZpbGVuYW1lLm5GaWx0ZXJJbmRleCAgICAgID0gMDsKKyAgb3BlbmZpbGVuYW1lLmxwc3RyRmlsZSAgICAgICAgID0gc3pQYXRoOworICBvcGVuZmlsZW5hbWUubk1heEZpbGUgICAgICAgICAgPSBzaXplb2Yoc3pQYXRoKTsKKyAgb3BlbmZpbGVuYW1lLmxwc3RyRmlsZVRpdGxlICAgID0gMDsKKyAgb3BlbmZpbGVuYW1lLm5NYXhGaWxlVGl0bGUgICAgID0gMDsKKyAgb3BlbmZpbGVuYW1lLmxwc3RySW5pdGlhbERpciAgID0gc3pEaXI7CisgIG9wZW5maWxlbmFtZS5scHN0clRpdGxlICAgICAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5GbGFncyAgICAgICAgICAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5uRmlsZU9mZnNldCAgICAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5uRmlsZUV4dGVuc2lvbiAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5scHN0ckRlZkV4dCAgICAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5sQ3VzdERhdGEgICAgICAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5scGZuSG9vayAgICAgICAgICA9IDA7CisgIG9wZW5maWxlbmFtZS5scFRlbXBsYXRlTmFtZSAgICA9IDA7CisKKyAgaWYgKEdldE9wZW5GaWxlTmFtZSgmb3BlbmZpbGVuYW1lKSkKKyAgICBXSU5IRUxQX0NyZWF0ZUhlbHBXaW5kb3coc3pQYXRoLCAwLCAibWFpbiIsIEZBTFNFLCBOVUxMLCBOVUxMLCBTV19TSE9XTk9STUFMKTsKK30KKworVk9JRCBNQUNST19GaW5kKFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRmluZCgpXG4iKTsKK30KKworVk9JRCBNQUNST19GaW5kZXIoVk9JRCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJGaW5kZXIoKVxuIik7Cit9CisKK1ZPSUQgTUFDUk9fRmxvYXRpbmdNZW51KFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRmxvYXRpbmdNZW51KClcbiIpOworfQorCitWT0lEIE1BQ1JPX0ZsdXNoKFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiRmx1c2goKVxuIik7Cit9CisKK1ZPSUQgTUFDUk9fRm9jdXNXaW5kb3coTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJGb2N1c1dpbmRvdyhcIiVzXCIpXG4iLCBzdHIpOworfQorCitWT0lEIE1BQ1JPX0dlbmVyYXRlKExQQ1NUUiBzdHIsIFdQQVJBTSB3LCBMUEFSQU0gbCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJHZW5lcmF0ZShcIiVzXCIsICV4LCAlbHgpXG4iLCBzdHIsIHcsIGwpOworfQorCitWT0lEIE1BQ1JPX0dvdG9NYXJrKExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiR290b01hcmsoXCIlc1wiKVxuIiwgc3RyKTsKK30KKworVk9JRCBNQUNST19IZWxwT24oVk9JRCkKK3sKKyAgTUFDUk9fSnVtcENvbnRlbnRzKChHbG9iYWxzLndWZXJzaW9uID4gNCkgPyAid2luaGVscDMyLmhscCIgOiAid2luaGVscC5obHAiLCBOVUxMKTsKK30KKworVk9JRCBNQUNST19IZWxwT25Ub3AoVk9JRCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJIZWxwT25Ub3AoKVxuIik7Cit9CisKK1ZPSUQgTUFDUk9fSGlzdG9yeShWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkhpc3RvcnkoKVxuIik7Cit9CisKK0JPT0wgTUFDUk9fSW5pdE1QcmludChWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkluaXRNUHJpbnQoKVxuIik7CisgIHJldHVybiBGQUxTRTsKK30KKworVk9JRCBNQUNST19JbnNlcnRJdGVtKExQQ1NUUiBzdHIxLCBMUENTVFIgc3RyMiwgTFBDU1RSIHN0cjMsIExQQ1NUUiBzdHI0LCBMT05HIHUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiSW5zZXJ0SXRlbShcIiVzXCIsIFwiJXNcIiwgXCIlc1wiLCBcIiVzXCIsICVsdSlcbiIsIHN0cjEsIHN0cjIsIHN0cjMsIHN0cjQsIHUpOworfQorCitWT0lEIE1BQ1JPX0luc2VydE1lbnUoTFBDU1RSIHN0cjEsIExQQ1NUUiBzdHIyLCBMT05HIHUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiSW5zZXJ0TWVudShcIiVzXCIsIFwiJXNcIiwgJWx1KVxuIiwgc3RyMSwgc3RyMiwgdSk7Cit9CisKK0JPT0wgTUFDUk9fSXNCb29rKFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiSXNCb29rKClcbiIpOworICByZXR1cm4gVFJVRTsKK30KKworQk9PTCBNQUNST19Jc01hcmsoTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJJc01hcmsoXCIlc1wiKVxuIiwgc3RyKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitCT09MIE1BQ1JPX0lzTm90TWFyayhMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIklzTm90TWFyayhcIiVzXCIpXG4iLCBzdHIpOworICByZXR1cm4gVFJVRTsKK30KKworVk9JRCBNQUNST19KdW1wQ29udGVudHMoTFBDU1RSIGxwc3pQYXRoLCBMUENTVFIgbHBzeldpbmRvdykKK3sKKyAgV0lOSEVMUF9DcmVhdGVIZWxwV2luZG93KGxwc3pQYXRoLCAwLCBscHN6V2luZG93LCBGQUxTRSwgTlVMTCwgTlVMTCwgU1dfTk9STUFMKTsKK30KKworVk9JRCBNQUNST19KdW1wQ29udGV4dChMUENTVFIgbHBzelBhdGgsIExQQ1NUUiBscHN6V2luZG93LCBMT05HIGNvbnRleHQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiSnVtcENvbnRleHQoXCIlc1wiLCBcIiVzXCIsICVsdSlcbiIsIGxwc3pQYXRoLCBscHN6V2luZG93LCBjb250ZXh0KTsKK30KKworVk9JRCBNQUNST19KdW1wSGFzaChMUENTVFIgbHBzelBhdGgsIExQQ1NUUiBscHN6V2luZG93LCBMT05HIGxIYXNoKQoreworICBXSU5IRUxQX0NyZWF0ZUhlbHBXaW5kb3cobHBzelBhdGgsIGxIYXNoLCBscHN6V2luZG93LCBGQUxTRSwgTlVMTCwgTlVMTCwgU1dfTk9STUFMKTsKK30KKworVk9JRCBNQUNST19KdW1wSGVscE9uKFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiSnVtcEhlbHBPbigpXG4iKTsKK30KKworVk9JRCBNQUNST19KdW1wSUQoTFBDU1RSIGxwc3pQYXRoLCBMUENTVFIgbHBzeldpbmRvdywgTFBDU1RSIHRvcGljX2lkKQoreworICBNQUNST19KdW1wSGFzaChscHN6UGF0aCwgbHBzeldpbmRvdywgSExQRklMRV9IYXNoKHRvcGljX2lkKSk7Cit9CisKK1ZPSUQgTUFDUk9fSnVtcEtleXdvcmQoTFBDU1RSIGxwc3pQYXRoLCBMUENTVFIgbHBzeldpbmRvdywgTFBDU1RSIGtleXdvcmQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiSnVtcEtleXdvcmQoXCIlc1wiLCBcIiVzXCIsIFwiJXNcIilcbiIsIGxwc3pQYXRoLCBscHN6V2luZG93LCBrZXl3b3JkKTsKK30KKworVk9JRCBNQUNST19LTGluayhMUENTVFIgc3RyMSwgTE9ORyB1LCBMUENTVFIgc3RyMiwgTFBDU1RSIHN0cjMpCit7CisgIGZwcmludGYoc3RkZXJyLCAiS0xpbmsoXCIlc1wiLCAlbHUsIFwiJXNcIiwgXCIlc1wiKVxuIiwgc3RyMSwgdSwgc3RyMiwgc3RyMyk7Cit9CisKK1ZPSUQgTUFDUk9fTWVudShWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIk1lbnUoKVxuIik7Cit9CisKK1ZPSUQgTUFDUk9fTVByaW50SGFzaChMT05HIHUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiTVByaW50SGFzaCglbHUpXG4iLCB1KTsKK30KKworVk9JRCBNQUNST19NUHJpbnRJRChMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIk1QcmludElEKFwiJXNcIilcbiIsIHN0cik7Cit9CisKK1ZPSUQgTUFDUk9fTmV4dChWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIk5leHQoKVxuIik7Cit9CisKK1ZPSUQgTUFDUk9fTm9TaG93KFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiTm9TaG93KClcbiIpOworfQorCitWT0lEIE1BQ1JPX1BvcHVwQ29udGV4dChMUENTVFIgc3RyLCBMT05HIHUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiUG9wdXBDb250ZXh0KFwiJXNcIiwgJWx1KVxuIiwgc3RyLCB1KTsKK30KKworVk9JRCBNQUNST19Qb3B1cEhhc2goTFBDU1RSIHN0ciwgTE9ORyB1KQoreworICBmcHJpbnRmKHN0ZGVyciwgIlBvcHVwSGFzaChcIiVzXCIsICVsdSlcbiIsIHN0ciwgdSk7Cit9CisKK1ZPSUQgTUFDUk9fUG9wdXBJZChMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiUG9wdXBJZChcIiVzXCIsIFwiJXNcIilcbiIsIHN0cjEsIHN0cjIpOworfQorCitWT0lEIE1BQ1JPX1Bvc2l0aW9uV2luZG93KExPTkcgaTEsIExPTkcgaTIsIExPTkcgdTEsIExPTkcgdTIsIExPTkcgdTMsIExQQ1NUUiBzdHIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiUG9zaXRpb25XaW5kb3coJWxpLCAlbGksICVsdSwgJWx1LCAlbHUsIFwiJXNcIilcbiIsIGkxLCBpMiwgdTEsIHUyLCB1Mywgc3RyKTsKK30KKworVk9JRCBNQUNST19QcmV2KFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiUHJldigpXG4iKTsKK30KKworVk9JRCBNQUNST19QcmludChWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIlByaW50KClcbiIpOworfQorCitWT0lEIE1BQ1JPX1ByaW50ZXJTZXR1cChWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIlByaW50ZXJTZXR1cCgpXG4iKTsKK30KKworVk9JRCBNQUNST19SZWdpc3RlclJvdXRpbmUoTFBDU1RSIHN0cjEsIExQQ1NUUiBzdHIyLCBMUENTVFIgc3RyMykKK3sKKyAgZnByaW50ZihzdGRlcnIsICJSZWdpc3RlclJvdXRpbmUoXCIlc1wiLCBcIiVzXCIsIFwiJXNcIilcbiIsIHN0cjEsIHN0cjIsIHN0cjMpOworfQorCitWT0lEIE1BQ1JPX1JlbW92ZUFjY2VsZXJhdG9yKExPTkcgdTEsIExPTkcgdTIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiUmVtb3ZlQWNjZWxlcmF0b3IoJWx1LCAlbHUpXG4iLCB1MSwgdTIpOworfQorCitWT0lEIE1BQ1JPX1Jlc2V0TWVudShWT0lEKQoreworICBmcHJpbnRmKHN0ZGVyciwgIlJlc2V0TWVudSgpXG4iKTsKK30KKworVk9JRCBNQUNST19TYXZlTWFyayhMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIlNhdmVNYXJrKFwiJXNcIilcbiIsIHN0cik7Cit9CisKK1ZPSUQgTUFDUk9fU2VhcmNoKFZPSUQpCit7CisgIGZwcmludGYoc3RkZXJyLCAiU2VhcmNoKClcbiIpOworfQorCitWT0lEIE1BQ1JPX1NldENvbnRlbnRzKExQQ1NUUiBzdHIsIExPTkcgdSkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJTZXRDb250ZW50cyhcIiVzXCIsICVsdSlcbiIsIHN0ciwgdSk7Cit9CisKK1ZPSUQgTUFDUk9fU2V0SGVscE9uRmlsZShMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIlNldEhlbHBPbkZpbGUoXCIlc1wiKVxuIiwgc3RyKTsKK30KKworVk9JRCBNQUNST19TZXRQb3B1cENvbG9yKExPTkcgdTEsIExPTkcgdTIsIExPTkcgdTMpCit7CisgIGZwcmludGYoc3RkZXJyLCAiU2V0UG9wdXBDb2xvciglbHUsICVsdSwgJWx1KVxuIiwgdTEsIHUyLCB1Myk7Cit9CisKK1ZPSUQgTUFDUk9fU2hlbGxFeGVjdXRlKExQQ1NUUiBzdHIxLCBMUENTVFIgc3RyMiwgTE9ORyB1MSwgTE9ORyB1MiwgTFBDU1RSIHN0cjMsIExQQ1NUUiBzdHI0KQoreworICBmcHJpbnRmKHN0ZGVyciwgIlNoZWxsRXhlY3V0ZShcIiVzXCIsIFwiJXNcIiwgJWx1LCAlbHUsIFwiJXNcIiwgXCIlc1wiKVxuIiwgc3RyMSwgc3RyMiwgdTEsIHUyLCBzdHIzLCBzdHI0KTsKK30KKworVk9JRCBNQUNST19TaG9ydEN1dChMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIsIFdQQVJBTSB3LCBMUEFSQU0gbCwgTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJTaG9ydEN1dChcIiVzXCIsIFwiJXNcIiwgJXgsICVseCwgXCIlc1wiKVxuIiwgc3RyMSwgc3RyMiwgdywgbCwgc3RyKTsKK30KKworVk9JRCBNQUNST19UQ2FyZChMT05HIHUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiVENhcmQoJWx1KVxuIiwgdSk7Cit9CisKK1ZPSUQgTUFDUk9fVGVzdChMT05HIHUpCit7CisgIGZwcmludGYoc3RkZXJyLCAiVGVzdCglbHUpXG4iLCB1KTsKK30KKworQk9PTCBNQUNST19UZXN0QUxpbmsoTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJUZXN0QUxpbmsoXCIlc1wiKVxuIiwgc3RyKTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitCT09MIE1BQ1JPX1Rlc3RLTGluayhMUENTVFIgc3RyKQoreworICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RLTGluayhcIiVzXCIpXG4iLCBzdHIpOworICByZXR1cm4gRkFMU0U7Cit9CisKK1ZPSUQgTUFDUk9fVW5jaGVja0l0ZW0oTFBDU1RSIHN0cikKK3sKKyAgZnByaW50ZihzdGRlcnIsICJVbmNoZWNrSXRlbShcIiVzXCIpXG4iLCBzdHIpOworfQorCitWT0lEIE1BQ1JPX1VwZGF0ZVdpbmRvdyhMUENTVFIgc3RyMSwgTFBDU1RSIHN0cjIpCit7CisgIGZwcmludGYoc3RkZXJyLCAiVXBkYXRlV2luZG93KFwiJXNcIiwgXCIlc1wiKVxuIiwgc3RyMSwgc3RyMik7Cit9CisKKy8qIExvY2FsIFZhcmlhYmxlczogICAgKi8KKy8qIGMtZmlsZS1zdHlsZTogIkdOVSIgKi8KKy8qIEVuZDogICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvbWFjcm8uaCBiL3Byb2dyYW1zL3dpbmhlbHAvbWFjcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDllOGRkCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3JhbXMvd2luaGVscC9tYWNyby5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogSGVscCBWaWV3ZXIKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCisgKi8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworVk9JRCBNQUNST19FeGVjdXRlTWFjcm8oTFBDU1RSKTsKKworSU5UICB5eXBhcnNlKFZPSUQpOworSU5UICB5eWxleChWT0lEKTsKK1ZPSUQgeXllcnJvcihMUENTVFIpOworZXh0ZXJuIENIQVIgTUFDUk9fZXh0cmFfc2VwYXJhdG9yOworCitWT0lEIE1BQ1JPX0Fib3V0KFZPSUQpOworVk9JRCBNQUNST19BZGRBY2NlbGVyYXRvcihMT05HLCBMT05HLCBMUENTVFIpOworVk9JRCBNQUNST19BTGluayhMUENTVFIsIExPTkcsIExQQ1NUUik7CitWT0lEIE1BQ1JPX0Fubm90YXRlKFZPSUQpOworVk9JRCBNQUNST19BcHBlbmRJdGVtKExQQ1NUUiwgTFBDU1RSLCBMUENTVFIsIExQQ1NUUik7CitWT0lEIE1BQ1JPX0JhY2soVk9JRCk7CitWT0lEIE1BQ1JPX0JhY2tGbHVzaChWT0lEKTsKK1ZPSUQgTUFDUk9fQm9va21hcmtEZWZpbmUoVk9JRCk7CitWT0lEIE1BQ1JPX0Jvb2ttYXJrTW9yZShWT0lEKTsKK1ZPSUQgTUFDUk9fQnJvd3NlQnV0dG9ucyhWT0lEKTsKK1ZPSUQgTUFDUk9fQ2hhbmdlQnV0dG9uQmluZGluZyhMUENTVFIsIExQQ1NUUik7CitWT0lEIE1BQ1JPX0NoYW5nZUVuYWJsZShMUENTVFIsIExQQ1NUUik7CitWT0lEIE1BQ1JPX0NoYW5nZUl0ZW1CaW5kaW5nKExQQ1NUUiwgTFBDU1RSKTsKK1ZPSUQgTUFDUk9fQ2hlY2tJdGVtKExQQ1NUUik7CitWT0lEIE1BQ1JPX0Nsb3NlU2Vjb25kYXJ5cyhWT0lEKTsKK1ZPSUQgTUFDUk9fQ2xvc2VXaW5kb3coTFBDU1RSKTsKK1ZPSUQgTUFDUk9fQ29tcGFyZShMUENTVFIpOworVk9JRCBNQUNST19Db250ZW50cyhWT0lEKTsKK1ZPSUQgTUFDUk9fQ29udHJvbFBhbmVsKExQQ1NUUiwgTFBDU1RSLCBMT05HKTsKK1ZPSUQgTUFDUk9fQ29weURpYWxvZyhWT0lEKTsKK1ZPSUQgTUFDUk9fQ29weVRvcGljKFZPSUQpOworVk9JRCBNQUNST19DcmVhdGVCdXR0b24oTFBDU1RSLCBMUENTVFIsIExQQ1NUUik7CitWT0lEIE1BQ1JPX0RlbGV0ZUl0ZW0oTFBDU1RSKTsKK1ZPSUQgTUFDUk9fRGVsZXRlTWFyayhMUENTVFIpOworVk9JRCBNQUNST19EZXN0cm95QnV0dG9uKExQQ1NUUik7CitWT0lEIE1BQ1JPX0Rpc2FibGVCdXR0b24oTFBDU1RSKTsKK1ZPSUQgTUFDUk9fRGlzYWJsZUl0ZW0oTFBDU1RSKTsKK1ZPSUQgTUFDUk9fRW5hYmxlQnV0dG9uKExQQ1NUUik7CitWT0lEIE1BQ1JPX0VuYWJsZUl0ZW0oTFBDU1RSKTsKK1ZPSUQgTUFDUk9fRW5kTVByaW50KFZPSUQpOworVk9JRCBNQUNST19FeGVjRmlsZShMUENTVFIsIExQQ1NUUiwgTE9ORywgTFBDU1RSKTsKK1ZPSUQgTUFDUk9fRXhlY1Byb2dyYW0oTFBDU1RSLCBMT05HKTsKK1ZPSUQgTUFDUk9fRXhpdChWT0lEKTsKK1ZPSUQgTUFDUk9fRXh0QWJsZUl0ZW0oTFBDU1RSLCBMT05HKTsKK1ZPSUQgTUFDUk9fRXh0SW5zZXJ0SXRlbShMUENTVFIsIExQQ1NUUiwgTFBDU1RSLCBMUENTVFIsIExPTkcsIExPTkcpOworVk9JRCBNQUNST19FeHRJbnNlcnRNZW51KExQQ1NUUiwgTFBDU1RSLCBMUENTVFIsIExPTkcsIExPTkcpOworQk9PTCBNQUNST19GaWxlRXhpc3QoTFBDU1RSKTsKK1ZPSUQgTUFDUk9fRmlsZU9wZW4oVk9JRCk7CitWT0lEIE1BQ1JPX0ZpbmQoVk9JRCk7CitWT0lEIE1BQ1JPX0ZpbmRlcihWT0lEKTsKK1ZPSUQgTUFDUk9fRmxvYXRpbmdNZW51KFZPSUQpOworVk9JRCBNQUNST19GbHVzaChWT0lEKTsKK1ZPSUQgTUFDUk9fRm9jdXNXaW5kb3coTFBDU1RSKTsKK1ZPSUQgTUFDUk9fR2VuZXJhdGUoTFBDU1RSLCBXUEFSQU0sIExQQVJBTSk7CitWT0lEIE1BQ1JPX0dvdG9NYXJrKExQQ1NUUik7CitWT0lEIE1BQ1JPX0hlbHBPbihWT0lEKTsKK1ZPSUQgTUFDUk9fSGVscE9uVG9wKFZPSUQpOworVk9JRCBNQUNST19IaXN0b3J5KFZPSUQpOworQk9PTCBNQUNST19Jbml0TVByaW50KFZPSUQpOworVk9JRCBNQUNST19JbnNlcnRJdGVtKExQQ1NUUiwgTFBDU1RSLCBMUENTVFIsIExQQ1NUUiwgTE9ORyk7CitWT0lEIE1BQ1JPX0luc2VydE1lbnUoTFBDU1RSLCBMUENTVFIsIExPTkcpOworQk9PTCBNQUNST19Jc0Jvb2soVk9JRCk7CitCT09MIE1BQ1JPX0lzTWFyayhMUENTVFIpOworQk9PTCBNQUNST19Jc05vdE1hcmsoTFBDU1RSKTsKK1ZPSUQgTUFDUk9fSnVtcENvbnRlbnRzKExQQ1NUUiwgTFBDU1RSKTsKK1ZPSUQgTUFDUk9fSnVtcENvbnRleHQoTFBDU1RSLCBMUENTVFIsIExPTkcpOworVk9JRCBNQUNST19KdW1wSGFzaChMUENTVFIsIExQQ1NUUiwgTE9ORyk7CitWT0lEIE1BQ1JPX0p1bXBIZWxwT24oVk9JRCk7CitWT0lEIE1BQ1JPX0p1bXBJRChMUENTVFIsIExQQ1NUUiwgTFBDU1RSKTsKK1ZPSUQgTUFDUk9fSnVtcEtleXdvcmQoTFBDU1RSLCBMUENTVFIsIExQQ1NUUik7CitWT0lEIE1BQ1JPX0tMaW5rKExQQ1NUUiwgTE9ORywgTFBDU1RSLCBMUENTVFIpOworVk9JRCBNQUNST19NZW51KFZPSUQpOworVk9JRCBNQUNST19NUHJpbnRIYXNoKExPTkcpOworVk9JRCBNQUNST19NUHJpbnRJRChMUENTVFIpOworVk9JRCBNQUNST19OZXh0KFZPSUQpOworVk9JRCBNQUNST19Ob1Nob3coVk9JRCk7CitWT0lEIE1BQ1JPX1BvcHVwQ29udGV4dChMUENTVFIsIExPTkcpOworVk9JRCBNQUNST19Qb3B1cEhhc2goTFBDU1RSLCBMT05HKTsKK1ZPSUQgTUFDUk9fUG9wdXBJZChMUENTVFIsIExQQ1NUUik7CitWT0lEIE1BQ1JPX1Bvc2l0aW9uV2luZG93KExPTkcsIExPTkcsIExPTkcsIExPTkcsIExPTkcsIExQQ1NUUik7CitWT0lEIE1BQ1JPX1ByZXYoVk9JRCk7CitWT0lEIE1BQ1JPX1ByaW50KFZPSUQpOworVk9JRCBNQUNST19QcmludGVyU2V0dXAoVk9JRCk7CitWT0lEIE1BQ1JPX1JlZ2lzdGVyUm91dGluZShMUENTVFIsIExQQ1NUUiwgTFBDU1RSKTsKK1ZPSUQgTUFDUk9fUmVtb3ZlQWNjZWxlcmF0b3IoTE9ORywgTE9ORyk7CitWT0lEIE1BQ1JPX1Jlc2V0TWVudShWT0lEKTsKK1ZPSUQgTUFDUk9fU2F2ZU1hcmsoTFBDU1RSKTsKK1ZPSUQgTUFDUk9fU2VhcmNoKFZPSUQpOworVk9JRCBNQUNST19TZXRDb250ZW50cyhMUENTVFIsIExPTkcpOworVk9JRCBNQUNST19TZXRIZWxwT25GaWxlKExQQ1NUUik7CitWT0lEIE1BQ1JPX1NldFBvcHVwQ29sb3IoTE9ORywgTE9ORywgTE9ORyk7CitWT0lEIE1BQ1JPX1NoZWxsRXhlY3V0ZShMUENTVFIsIExQQ1NUUiwgTE9ORywgTE9ORywgTFBDU1RSLCBMUENTVFIpOworVk9JRCBNQUNST19TaG9ydEN1dChMUENTVFIsIExQQ1NUUiwgV1BBUkFNLCBMUEFSQU0sIExQQ1NUUik7CitWT0lEIE1BQ1JPX1RDYXJkKExPTkcpOworVk9JRCBNQUNST19UZXN0KExPTkcpOworQk9PTCBNQUNST19UZXN0QUxpbmsoTFBDU1RSKTsKK0JPT0wgTUFDUk9fVGVzdEtMaW5rKExQQ1NUUik7CitWT0lEIE1BQ1JPX1VuY2hlY2tJdGVtKExQQ1NUUik7CitWT0lEIE1BQ1JPX1VwZGF0ZVdpbmRvdyhMUENTVFIsIExQQ1NUUik7CisKKy8qIExvY2FsIFZhcmlhYmxlczogICAgKi8KKy8qIGMtZmlsZS1zdHlsZTogIkdOVSIgKi8KKy8qIEVuZDogICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvbWFjcm8ubGV4LmwgYi9wcm9ncmFtcy93aW5oZWxwL21hY3JvLmxleC5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NmM4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL21hY3JvLmxleC5sCkBAIC0wLDAgKzEsMjM1IEBACisleworLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAorICovCislfQorJXggcXVvdGUgZHF1b3RlCisleCBudWxsX3N0cmluZworJXsKKyNpbmNsdWRlICJtYWNyby5oIgorI2luY2x1ZGUgInkudGFiLmgiCisKK3N0YXRpYyBMUENTVFIgIG1hY3JvcHRyLCBmaXJzdHRva2VuLCB0aGlzdG9rZW4sIG5leHR0b2tlbiwgY3VycmVudF9zdHJpbmc7CitzdGF0aWMgTFBTVFIgICBzdHJwdHI7CitzdGF0aWMgSEdMT0JBTCBoU3RyaW5nQnVmZmVyID0gMDsKKworQ0hBUiBNQUNST19leHRyYV9zZXBhcmF0b3IgPSAwOworCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpXAorICBpZiAoKHJlc3VsdCA9ICptYWNyb3B0ciA/IDEgOiAwKSkgYnVmWzBdID0gKm1hY3JvcHRyKys7CisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT05cCisgIGlmIChZWV9TVEFSVCA9PSBJTklUSUFMKSB0aGlzdG9rZW4gPSBuZXh0dG9rZW4sIG5leHR0b2tlbiA9IG1hY3JvcHRyOworCisjZGVmaW5lIFlZX05PX1VOUFVUCisjZGVmaW5lIFlZX05PX1RPUF9TVEFURQorJX0KKyUlCitBYm91dAkJCXl5bHZhbCA9IE1BQ1JPX0Fib3V0OwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1ZPSUQ7CitBZGRBY2NlbGVyYXRvcnxBQQl5eWx2YWwgPSBNQUNST19BZGRBY2NlbGVyYXRvcjsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzJVSU5UX1NUUklORzsKK0FMaW5rfEFMCQl5eWx2YWwgPSBNQUNST19BTGluazsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVF9TVFJJTkc7CitBbm5vdGF0ZQkJeXlsdmFsID0gTUFDUk9fQW5ub3RhdGU7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworQXBwZW5kSXRlbQkJeXlsdmFsID0gTUFDUk9fQXBwZW5kSXRlbTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzRTVFJJTkc7CitCYWNrCQkJeXlsdmFsID0gTUFDUk9fQmFjazsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworQmFja0ZsdXNofEJGCQl5eWx2YWwgPSBNQUNST19CYWNrRmx1c2g7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworQm9va21hcmtEZWZpbmUJCXl5bHZhbCA9IE1BQ1JPX0Jvb2ttYXJrRGVmaW5lOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0Jvb2ttYXJrTW9yZQkJeXlsdmFsID0gTUFDUk9fQm9va21hcmtNb3JlOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0Jyb3dzZUJ1dHRvbnMJCXl5bHZhbCA9IE1BQ1JPX0Jyb3dzZUJ1dHRvbnM7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworQ2hhbmdlQnV0dG9uQmluZGluZ3xDQkIJeXlsdmFsID0gTUFDUk9fQ2hhbmdlQnV0dG9uQmluZGluZzsJcmV0dXJuIFZPSURfRlVOQ1RJT05fMlNUUklORzsKK0NoYW5nZUVuYWJsZXxDRQkJeXlsdmFsID0gTUFDUk9fQ2hhbmdlRW5hYmxlOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fMlNUUklORzsKK0NoYW5nZUl0ZW1CaW5kaW5nfENJQgl5eWx2YWwgPSBNQUNST19DaGFuZ2VJdGVtQmluZGluZzsJcmV0dXJuIFZPSURfRlVOQ1RJT05fMlNUUklORzsKK0NoZWNrSXRlbXxDSQkJeXlsdmFsID0gTUFDUk9fQ2hlY2tJdGVtOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HOworQ2xvc2VTZWNvbmRhcnlzfENTCXl5bHZhbCA9IE1BQ1JPX0Nsb3NlU2Vjb25kYXJ5czsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1ZPSUQ7CitDbG9zZVdpbmRvd3xDVwkJeXlsdmFsID0gTUFDUk9fQ2xvc2VXaW5kb3c7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkc7CitDb21wYXJlCQkJeXlsdmFsID0gTUFDUk9fQ29tcGFyZTsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkc7CitDb250ZW50cwkJeXlsdmFsID0gTUFDUk9fQ29udGVudHM7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworQ29udHJvbFBhbmVsCQl5eWx2YWwgPSBNQUNST19Db250cm9sUGFuZWw7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl8yU1RSSU5HX1VJTlQ7CitDb3B5RGlhbG9nCQl5eWx2YWwgPSBNQUNST19Db3B5RGlhbG9nOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0NvcHlUb3BpY3xDVAkJeXlsdmFsID0gTUFDUk9fQ29weVRvcGljOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0NyZWF0ZUJ1dHRvbnxDQgkJeXlsdmFsID0gTUFDUk9fQ3JlYXRlQnV0dG9uOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fM1NUUklORzsKK0RlbGV0ZUl0ZW0JCXl5bHZhbCA9IE1BQ1JPX0RlbGV0ZUl0ZW07CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkc7CitEZWxldGVNYXJrCQl5eWx2YWwgPSBNQUNST19EZWxldGVNYXJrOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HOworRGVzdHJveUJ1dHRvbgkJeXlsdmFsID0gTUFDUk9fRGVzdHJveUJ1dHRvbjsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1NUUklORzsKK0Rpc2FibGVCdXR0b258REIJeXlsdmFsID0gTUFDUk9fRGlzYWJsZUJ1dHRvbjsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1NUUklORzsKK0Rpc2FibGVJdGVtfERJCQl5eWx2YWwgPSBNQUNST19EaXNhYmxlSXRlbTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1NUUklORzsKK0VuYWJsZUJ1dHRvbnxFQgkJeXlsdmFsID0gTUFDUk9fRW5hYmxlQnV0dG9uOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HOworRW5hYmxlSXRlbXxFSQkJeXlsdmFsID0gTUFDUk9fRW5hYmxlSXRlbTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1NUUklORzsKK0VuZE1QcmludAkJeXlsdmFsID0gTUFDUk9fRW5kTVByaW50OwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0V4ZWNGaWxlfEVGCQl5eWx2YWwgPSBNQUNST19FeGVjRmlsZTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzJTVFJJTkdfVUlOVF9TVFJJTkc7CitFeGVjUHJvZ3JhbXxFUAkJeXlsdmFsID0gTUFDUk9fRXhlY1Byb2dyYW07CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVDsKK0V4aXQJCQl5eWx2YWwgPSBNQUNST19FeGl0OwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1ZPSUQ7CitFeHRBYmxlSXRlbQkJeXlsdmFsID0gTUFDUk9fRXh0QWJsZUl0ZW07CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVDsKK0V4dEluc2VydEl0ZW0JCXl5bHZhbCA9IE1BQ1JPX0V4dEluc2VydEl0ZW07CQlyZXR1cm4gVk9JRF9GVU5DVElPTl80U1RSSU5HXzJVSU5UOworRXh0SW5zZXJ0TWVudQkJeXlsdmFsID0gTUFDUk9fRXh0SW5zZXJ0TWVudTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzNTVFJJTkdfMlVJTlQ7CitGaWxlRXhpc3R8RkUJCXl5bHZhbCA9IE1BQ1JPX0ZpbGVFeGlzdDsJCXJldHVybiBCT09MX0ZVTkNUSU9OX1NUUklORzsKK0ZpbGVPcGVufEZPCQl5eWx2YWwgPSBNQUNST19GaWxlT3BlbjsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1ZPSUQ7CitGaW5kCQkJeXlsdmFsID0gTUFDUk9fRmluZDsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworRmluZGVyfEZECQl5eWx2YWwgPSBNQUNST19GaW5kZXI7CQkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0Zsb2F0aW5nTWVudQkJeXlsdmFsID0gTUFDUk9fRmxvYXRpbmdNZW51OwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0ZsdXNofEZICQl5eWx2YWwgPSBNQUNST19GbHVzaDsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworRm9jdXNXaW5kb3cJCXl5bHZhbCA9IE1BQ1JPX0ZvY3VzV2luZG93OwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HOworR2VuZXJhdGUJCXl5bHZhbCA9IE1BQ1JPX0dlbmVyYXRlOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HX1dQQVJBTV9MUEFSQU07CitHb3RvTWFyawkJeXlsdmFsID0gTUFDUk9fR290b01hcms7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkc7CitIZWxwT24JCQl5eWx2YWwgPSBNQUNST19IZWxwT247CQkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0hlbHBPblRvcAkJeXlsdmFsID0gTUFDUk9fSGVscE9uVG9wOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0hpc3RvcnkJCQl5eWx2YWwgPSBNQUNST19IaXN0b3J5OwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1ZPSUQ7CitJZlRoZW58SUYJCQkJCQkJcmV0dXJuIElGX1RIRU47CitJZlRoZW5FbHNlfElFCQkJCQkJCXJldHVybiBJRl9USEVOX0VMU0U7CitJbml0TVByaW50CQl5eWx2YWwgPSBNQUNST19Jbml0TVByaW50OwkJcmV0dXJuIEJPT0xfRlVOQ1RJT05fVk9JRDsKK0luc2VydEl0ZW0JCXl5bHZhbCA9IE1BQ1JPX0luc2VydEl0ZW07CQlyZXR1cm4gVk9JRF9GVU5DVElPTl80U1RSSU5HX1VJTlQ7CitJbnNlcnRNZW51CQl5eWx2YWwgPSBNQUNST19JbnNlcnRNZW51OwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fMlNUUklOR19VSU5UOworSXNCb29rCQkJeXlsdmFsID0gTUFDUk9fSXNCb29rOwkJCXJldHVybiBCT09MX0ZVTkNUSU9OX1ZPSUQ7CitJc01hcmsJCQl5eWx2YWwgPSBNQUNST19Jc01hcms7CQkJcmV0dXJuIEJPT0xfRlVOQ1RJT05fU1RSSU5HOworSXNOb3RNYXJrfE5NCQl5eWx2YWwgPSBNQUNST19Jc05vdE1hcms7CQlyZXR1cm4gQk9PTF9GVU5DVElPTl9TVFJJTkc7CitKdW1wQ29udGVudHMJCXl5bHZhbCA9IE1BQ1JPX0p1bXBDb250ZW50czsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOOworSnVtcENvbnRleHR8SkMJCXl5bHZhbCA9IE1BQ1JPX0p1bXBDb250ZXh0OwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fRklMRV9XSU5fVUlOVDsKK0p1bXBIYXNofEpICQl5eWx2YWwgPSBNQUNST19KdW1wSGFzaDsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOX1VJTlQ7CitKdW1wSGVscE9uCQl5eWx2YWwgPSBNQUNST19KdW1wSGVscE9uOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK0p1bXBJRHxKSQkJeXlsdmFsID0gTUFDUk9fSnVtcElEOwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOX1NUUklORzsKK0p1bXBLZXl3b3JkfEpLCQl5eWx2YWwgPSBNQUNST19KdW1wS2V5d29yZDsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOX1NUUklORzsKK0tMaW5rfEtMCQl5eWx2YWwgPSBNQUNST19LTGluazsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVF8yU1RSSU5HOworTWVudXxNVQkJCXl5bHZhbCA9IE1BQ1JPX01lbnU7CQkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK01QcmludEhhc2gJCXl5bHZhbCA9IE1BQ1JPX01QcmludEhhc2g7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9VSU5UOworTVByaW50SUQJCXl5bHZhbCA9IE1BQ1JPX01QcmludElEOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HOworTmV4dAkJCXl5bHZhbCA9IE1BQ1JPX05leHQ7CQkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK05vU2hvdwkJCXl5bHZhbCA9IE1BQ1JPX05vU2hvdzsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworTm90CQkJCQkJCQlyZXR1cm4gTk9UOworUG9wdXBDb250ZXh0fFBDCQl5eWx2YWwgPSBNQUNST19Qb3B1cENvbnRleHQ7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVDsKK1BvcHVwSGFzaAkJeXlsdmFsID0gTUFDUk9fUG9wdXBIYXNoOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HX1VJTlQ7CitQb3B1cElkfFBJCQl5eWx2YWwgPSBNQUNST19Qb3B1cElkOwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzJTVFJJTkc7CitQb3NpdGlvbldpbmRvd3xQVwl5eWx2YWwgPSBNQUNST19Qb3NpdGlvbldpbmRvdzsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzJJTlRfM1VJTlRfU1RSSU5HOworUHJldgkJCXl5bHZhbCA9IE1BQ1JPX1ByZXY7CQkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK1ByaW50CQkJeXlsdmFsID0gTUFDUk9fUHJpbnQ7CQkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK1ByaW50ZXJTZXR1cAkJeXlsdmFsID0gTUFDUk9fUHJpbnRlclNldHVwOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fVk9JRDsKK1JlZ2lzdGVyUm91dGluZXxSUgl5eWx2YWwgPSBNQUNST19SZWdpc3RlclJvdXRpbmU7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl8zU1RSSU5HOworUmVtb3ZlQWNjZWxlcmF0b3J8UkEJeXlsdmFsID0gTUFDUk9fUmVtb3ZlQWNjZWxlcmF0b3I7CXJldHVybiBWT0lEX0ZVTkNUSU9OXzJVSU5UOworUmVzZXRNZW51CQl5eWx2YWwgPSBNQUNST19SZXNldE1lbnU7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9WT0lEOworU2F2ZU1hcmsJCXl5bHZhbCA9IE1BQ1JPX1NhdmVNYXJrOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fU1RSSU5HOworU2VhcmNoCQkJeXlsdmFsID0gTUFDUk9fU2VhcmNoOwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1ZPSUQ7CitTZXRDb250ZW50cwkJeXlsdmFsID0gTUFDUk9fU2V0Q29udGVudHM7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVDsKK1NldEhlbHBPbkZpbGUJCXl5bHZhbCA9IE1BQ1JPX1NldEhlbHBPbkZpbGU7CQlyZXR1cm4gVk9JRF9GVU5DVElPTl9TVFJJTkc7CitTZXRQb3B1cENvbG9yfFNQQwl5eWx2YWwgPSBNQUNST19TZXRQb3B1cENvbG9yOwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fM1VJTlQ7CitTaGVsbEV4ZWN1dGV8U0UJCXl5bHZhbCA9IE1BQ1JPX1NoZWxsRXhlY3V0ZTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzJTVFJJTkdfMlVJTlRfMlNUUklORzsKK1Nob3J0Q3V0fFNICQl5eWx2YWwgPSBNQUNST19TaG9ydEN1dDsJCXJldHVybiBWT0lEX0ZVTkNUSU9OXzJTVFJJTkdfV1BBUkFNX0xQQVJBTV9TVFJJTkc7CitUQ2FyZAkJCXl5bHZhbCA9IE1BQ1JPX1RDYXJkOwkJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1VJTlQ7CitUZXN0CQkJeXlsdmFsID0gTUFDUk9fVGVzdDsJCQlyZXR1cm4gVk9JRF9GVU5DVElPTl9VSU5UOworVGVzdEFMaW5rCQl5eWx2YWwgPSBNQUNST19UZXN0QUxpbms7CQlyZXR1cm4gQk9PTF9GVU5DVElPTl9TVFJJTkc7CitUZXN0S0xpbmsJCXl5bHZhbCA9IE1BQ1JPX1Rlc3RLTGluazsJCXJldHVybiBCT09MX0ZVTkNUSU9OX1NUUklORzsKK1VuY2hlY2tJdGVtfFVJCQl5eWx2YWwgPSBNQUNST19VbmNoZWNrSXRlbTsJCXJldHVybiBWT0lEX0ZVTkNUSU9OX1NUUklORzsKK1VwZGF0ZVdpbmRvd3xVVwkJeXlsdmFsID0gTUFDUk9fVXBkYXRlV2luZG93OwkJcmV0dXJuIFZPSURfRlVOQ1RJT05fMlNUUklORzsKKworWy0rXT9bMC05XSsJCXl5bHZhbC5pbnRlZ2VyID0gc3RydG9sKHl5dGV4dCwgTlVMTCwgMTApOwlyZXR1cm4gSU5URUdFUjsKK1stK10/MFt4WF1bMC05YS1mXSsJeXlsdmFsLmludGVnZXIgPSBzdHJ0b2woeXl0ZXh0LCBOVUxMLCAxNik7CXJldHVybiBJTlRFR0VSOworCitcYAkJCXwKK1wiCQkJeworICAJCQkgIGlmICghaFN0cmluZ0J1ZmZlcikKKwkJCSAgICB7CisJCQkgICAgICBoU3RyaW5nQnVmZmVyID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgc3RybGVuKG1hY3JvcHRyKSk7CisJCQkgICAgICBzdHJwdHIgPSBHbG9iYWxMb2NrKGhTdHJpbmdCdWZmZXIpOworCQkJICAgIH0KKwkJCSAgY3VycmVudF9zdHJpbmcgPSBzdHJwdHI7CisJCQkgIHl5X3B1c2hfc3RhdGUoeXl0ZXh0WzBdID09ICdgJyA/IHF1b3RlIDogZHF1b3RlKTsKKwkJCX0KKworPHF1b3RlPlxgCQl7CisJCQkgICpzdHJwdHIrKyA9IHl5dGV4dFswXTsKKwkJCSAgeXlfcHVzaF9zdGF0ZShxdW90ZSk7CisJCQl9CisKKzxxdW90ZT5cJwkJfAorPGRxdW90ZT5cIgkJeworCQkJICB5eV9wb3Bfc3RhdGUoKTsKKwkJCSAgaWYgKFlZX1NUQVJUID09IElOSVRJQUwpCisJCQkgICAgeworCQkJICAgICAgKnN0cnB0cisrID0gJ1wwJzsKKwkJCSAgICAgIGlmIChNQUNST19leHRyYV9zZXBhcmF0b3IpCisJCQkJeworCQkJCSAgeXlfcHVzaF9zdGF0ZShudWxsX3N0cmluZyk7CisJCQkJICBNQUNST19leHRyYV9zZXBhcmF0b3IgPSAwOworCQkJCX0KKwkJCSAgICAgIHl5bHZhbCA9IGN1cnJlbnRfc3RyaW5nOworCQkJICAgICAgcmV0dXJuIFNUUklORzsKKwkJCSAgICB9CisJCQkgIGVsc2UgKnN0cnB0cisrID0geXl0ZXh0WzBdOworCQkJfQorCis8cXVvdGUsZHF1b3RlPnsKKworLgkJCXsKKwkJCSAgaWYgKE1BQ1JPX2V4dHJhX3NlcGFyYXRvciA9PSAoQ0hBUikgeXl0ZXh0WzBdKQorCQkJICAgIHsKKwkJCSAgICAgICpzdHJwdHIrKyA9ICdcMCc7CisJCQkgICAgICBNQUNST19leHRyYV9zZXBhcmF0b3IgPSAwOworCQkJICAgICAgeXlsdmFsID0gY3VycmVudF9zdHJpbmc7CisJCQkgICAgICBjdXJyZW50X3N0cmluZyA9IHN0cnB0cjsKKwkJCSAgICAgIHJldHVybiBTVFJJTkc7CisJCQkgICAgfQorCQkJICBlbHNlICpzdHJwdHIrKyA9IHl5dGV4dFswXTsKKwkJCX0KKworXFwuCQkJKnN0cnB0cisrID0geXl0ZXh0WzFdOworCis8PEVPRj4+CQkJcmV0dXJuIDA7Cit9CisKKzxudWxsX3N0cmluZz4iIgkJeworCQkJICB5eV9wb3Bfc3RhdGUoKTsKKwkJCSAgeXlsdmFsID0gKExQQ1NUUikgMDsKKwkJCSAgcmV0dXJuIFNUUklORzsKKwkJCX0KKworIiAiCisKKy4JCQlyZXR1cm4geXl0ZXh0WzBdOworJSUKKyNpbmNsdWRlICJ3aW5oZWxwLmgiCitzdGF0aWMgQ0hBUiBzelRlc3RNYWNyb1syNTZdOworCitzdGF0aWMgTFJFU1VMVCBNQUNST19UZXN0RGlhbG9nUHJvYyhIV05EIGhEbGcsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICBpZiAobXNnID09IFdNX0NPTU1BTkQgJiYgd1BhcmFtID09IElET0spCisgICAgeworICAgICAgR2V0RGxnSXRlbVRleHQoaERsZywgOTksIHN6VGVzdE1hY3JvLCBzaXplb2Yoc3pUZXN0TWFjcm8pKTsKKyAgICAgIEVuZERpYWxvZyhoRGxnLCBJRENBTkNFTCk7CisgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIHJldHVybiBGQUxTRTsKK30KKworVk9JRCBNQUNST19FeGVjdXRlTWFjcm8oTFBDU1RSIG1hY3JvKQoreworICBzdGF0aWMgQk9PTCBpbml0ID0gVFJVRTsKKworICBpZiAoaW5pdCkgaW5pdCA9IEZBTFNFOworICBlbHNlCisgICAgeworICAgICAgWVlfRkxVU0hfQlVGRkVSOworICAgICAgd2hpbGUgKFlZX1NUQVJUICE9IElOSVRJQUwpCisJeXlfcG9wX3N0YXRlKCk7CisgICAgfQorCisgIGlmICghbHN0cmNtcGkobWFjcm8sICJNYWNyb1Rlc3QiKSkKKyAgICB7CisgICAgICBXTkRQUk9DIGxwZm5EbGcgPSBNYWtlUHJvY0luc3RhbmNlKE1BQ1JPX1Rlc3REaWFsb2dQcm9jLCBHbG9iYWxzLmhJbnN0YW5jZSk7CisgICAgICBEaWFsb2dCb3goR2xvYmFscy5oSW5zdGFuY2UsIFNUUklOR19ESUFMT0dfVEVTVCwgR2xvYmFscy5hY3RpdmVfd2luLT5oTWFpblduZCwgbHBmbkRsZyk7CisgICAgICBGcmVlUHJvY0luc3RhbmNlKGxwZm5EbGcpOworICAgICAgbWFjcm8gPSBzelRlc3RNYWNybzsKKyAgICB9CisKKyAgbWFjcm9wdHIgPSBmaXJzdHRva2VuID0gdGhpc3Rva2VuID0gbmV4dHRva2VuID0gbWFjcm87CisKKyAgeXlwYXJzZSgpOworCisgIGlmIChoU3RyaW5nQnVmZmVyKSBHbG9iYWxGcmVlKGhTdHJpbmdCdWZmZXIpOworICBoU3RyaW5nQnVmZmVyID0gMDsKK30KKwordm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzKQoreworICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4lLipzXG4lKnMlc1xuIiwgcywKKwkgIHRoaXN0b2tlbiAtIGZpcnN0dG9rZW4sIGZpcnN0dG9rZW4sCisJICB0aGlzdG9rZW4gLSBmaXJzdHRva2VuLCAiIiwgdGhpc3Rva2VuKTsKK30KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvbWFjcm8ueWFjYy55IGIvcHJvZ3JhbXMvd2luaGVscC9tYWNyby55YWNjLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiY2U2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvbWFjcm8ueWFjYy55CkBAIC0wLDAgKzEsMTcwIEBACisleworLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAorICovCisKKyNpbmNsdWRlICJtYWNyby5oIgorc3RhdGljIGludCBza2lwID0gMDsKKyV9CisldW5pb24KKyAgeworICAgIEJPT0wgICAgYm9vbDsKKyAgICBMUENTVFIgIHN0cmluZzsKKyAgICBMT05HICAgIGludGVnZXI7CisgICAgVk9JRCAgICAoKnZvaWRfZnVuY3Rpb25fdm9pZCkoVk9JRCk7CisgICAgQk9PTCAgICAoKmJvb2xfZnVuY3Rpb25fdm9pZCkoVk9JRCk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVuY3Rpb25fc3RyaW5nKShMUENTVFIpOworICAgIEJPT0wgICAgKCpib29sX2Z1bmN0aW9uX3N0cmluZykoTFBDU1RSKTsKKworICAgIEJPT0wgICAgKCpib29sX2Z1bmt0aW9uX3N0cmluZykoTFBDU1RSKTsKKyAgICBCT09MICAgICgqYm9vbF9mdW5rdGlvbl92b2lkKShWT0lEKTsKKyAgICBWT0lEICAgICgqdm9pZF9mdW5rdGlvbl8yaW50XzN1aW50X3N0cmluZykoTE9ORyxMT05HLExPTkcsTE9ORyxMT05HLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fMnN0cmluZykoTFBDU1RSLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fMnN0cmluZ18ydWludF8yc3RyaW5nKShMUENTVFIsTFBDU1RSLExPTkcsTE9ORyxMUENTVFIsTFBDU1RSKTsKKyAgICBWT0lEICAgICgqdm9pZF9mdW5rdGlvbl8yc3RyaW5nX3VpbnQpKExQQ1NUUixMUENTVFIsTE9ORyk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fMnN0cmluZ191aW50X3N0cmluZykoTFBDU1RSLExQQ1NUUixMT05HLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fMnN0cmluZ193cGFyYW1fbHBhcmFtX3N0cmluZykoTFBDU1RSLExQQ1NUUixXUEFSQU0sTFBBUkFNLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fMnVpbnQpKExPTkcsTE9ORyk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fMnVpbnRfc3RyaW5nKShMT05HLExPTkcsTFBDU1RSKTsKKyAgICBWT0lEICAgICgqdm9pZF9mdW5rdGlvbl8zc3RyaW5nKShMUENTVFIsTFBDU1RSLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fM3N0cmluZ18ydWludCkoTFBDU1RSLExQQ1NUUixMUENTVFIsTE9ORyxMT05HKTsKKyAgICBWT0lEICAgICgqdm9pZF9mdW5rdGlvbl8zdWludCkoTE9ORyxMT05HLExPTkcpOworICAgIFZPSUQgICAgKCp2b2lkX2Z1bmt0aW9uXzRzdHJpbmcpKExQQ1NUUixMUENTVFIsTFBDU1RSLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fNHN0cmluZ18ydWludCkoTFBDU1RSLExQQ1NUUixMUENTVFIsTFBDU1RSLExPTkcsTE9ORyk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fNHN0cmluZ191aW50KShMUENTVFIsTFBDU1RSLExQQ1NUUixMUENTVFIsTE9ORyk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fc3RyaW5nKShMUENTVFIpOworICAgIFZPSUQgICAgKCp2b2lkX2Z1bmt0aW9uX3N0cmluZ191aW50KShMUENTVFIsTE9ORyk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fc3RyaW5nX3VpbnRfMnN0cmluZykoTFBDU1RSLExPTkcsTFBDU1RSLExQQ1NUUik7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fc3RyaW5nX3VpbnRfc3RyaW5nKShMUENTVFIsTE9ORyxMUENTVFIpOworICAgIFZPSUQgICAgKCp2b2lkX2Z1bmt0aW9uX3N0cmluZ193cGFyYW1fbHBhcmFtKShMUENTVFIsV1BBUkFNLExQQVJBTSk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fdWludCkoTE9ORyk7CisgICAgVk9JRCAgICAoKnZvaWRfZnVua3Rpb25fdm9pZCkoVk9JRCk7CisgIH0KKyV0b2tlbgkJCQkJCQlOT1QKKyV0b2tlbiAJCQkJCQkJSUZfVEhFTgorJXRva2VuIAkJCQkJCQlJRl9USEVOX0VMU0UKKyV0b2tlbiA8c3RyaW5nPgkgCQkJCQlTVFJJTkcKKyV0b2tlbiA8aW50ZWdlcj4gCQkJCQlJTlRFR0VSCisldG9rZW4gPGJvb2xfZnVua3Rpb25fc3RyaW5nPgkJCQlCT09MX0ZVTkNUSU9OX1NUUklORworJXRva2VuIDxib29sX2Z1bmt0aW9uX3ZvaWQ+CQkJCUJPT0xfRlVOQ1RJT05fVk9JRAorJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzJpbnRfM3VpbnRfc3RyaW5nPgkJVk9JRF9GVU5DVElPTl8ySU5UXzNVSU5UX1NUUklORworJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzJzdHJpbmc+CQkJCVZPSURfRlVOQ1RJT05fMlNUUklORworJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzJzdHJpbmdfMnVpbnRfMnN0cmluZz4JCVZPSURfRlVOQ1RJT05fMlNUUklOR18yVUlOVF8yU1RSSU5HCisldG9rZW4gPHZvaWRfZnVua3Rpb25fMnN0cmluZ191aW50PgkJCVZPSURfRlVOQ1RJT05fMlNUUklOR19VSU5UCisldG9rZW4gPHZvaWRfZnVua3Rpb25fMnN0cmluZ191aW50X3N0cmluZz4JCVZPSURfRlVOQ1RJT05fMlNUUklOR19VSU5UX1NUUklORworJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzJzdHJpbmdfd3BhcmFtX2xwYXJhbV9zdHJpbmc+CVZPSURfRlVOQ1RJT05fMlNUUklOR19XUEFSQU1fTFBBUkFNX1NUUklORworJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzJ1aW50PgkJCQlWT0lEX0ZVTkNUSU9OXzJVSU5UCisldG9rZW4gPHZvaWRfZnVua3Rpb25fMnVpbnRfc3RyaW5nPgkJCVZPSURfRlVOQ1RJT05fMlVJTlRfU1RSSU5HCisldG9rZW4gPHZvaWRfZnVua3Rpb25fM3N0cmluZz4JCQkJVk9JRF9GVU5DVElPTl8zU1RSSU5HCisldG9rZW4gPHZvaWRfZnVua3Rpb25fM3N0cmluZ18ydWludD4JCQlWT0lEX0ZVTkNUSU9OXzNTVFJJTkdfMlVJTlQKKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl8zdWludD4JCQkJVk9JRF9GVU5DVElPTl8zVUlOVAorJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzRzdHJpbmc+CQkJCVZPSURfRlVOQ1RJT05fNFNUUklORworJXRva2VuIDx2b2lkX2Z1bmt0aW9uXzRzdHJpbmdfMnVpbnQ+CQkJVk9JRF9GVU5DVElPTl80U1RSSU5HXzJVSU5UCisldG9rZW4gPHZvaWRfZnVua3Rpb25fNHN0cmluZ191aW50PgkJCVZPSURfRlVOQ1RJT05fNFNUUklOR19VSU5UCisldG9rZW4gPHZvaWRfZnVua3Rpb25fc3RyaW5nPgkJCQlWT0lEX0ZVTkNUSU9OX1NUUklORworJXRva2VuIDx2b2lkX2Z1bmt0aW9uX3N0cmluZ191aW50PgkJCVZPSURfRlVOQ1RJT05fU1RSSU5HX1VJTlQKKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl9zdHJpbmdfdWludF8yc3RyaW5nPgkJVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVF8yU1RSSU5HCisldG9rZW4gPHZvaWRfZnVua3Rpb25fc3RyaW5nX3VpbnRfc3RyaW5nPgkJVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVF9TVFJJTkcKKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl9zdHJpbmdfd3BhcmFtX2xwYXJhbT4JCVZPSURfRlVOQ1RJT05fU1RSSU5HX1dQQVJBTV9MUEFSQU0KKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl91aW50PgkJCQlWT0lEX0ZVTkNUSU9OX1VJTlQKKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl92b2lkPgkJCQlWT0lEX0ZVTkNUSU9OX1ZPSUQKKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl8yc3RyaW5nPgkJCQlWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOCisldG9rZW4gPHZvaWRfZnVua3Rpb25fM3N0cmluZz4JCQkJVk9JRF9GVU5DVElPTl9GSUxFX1dJTl9TVFJJTkcKKyV0b2tlbiA8dm9pZF9mdW5rdGlvbl8yc3RyaW5nX3VpbnQ+CQkJVk9JRF9GVU5DVElPTl9GSUxFX1dJTl9VSU5UCisldHlwZSAgPGJvb2w+IGJvb2xfbWFjcm8KKyV0eXBlICA8c3RyaW5nPiBmaWxlbmFtZQorJSUKKworbWFjcm9zdHJpbmc6CW1hY3JvIHwKKwkJbWFjcm8gbWFjcm9zZXAgbWFjcm9zdHJpbmcgOworCittYWNyb3NlcDoJJzsnIHwKKwkJJzonIDsKKworbWFjcm86CQkvKiBFbXB0eSAqLyB8CisJCUlGX1RIRU4gICAgICAnKCcgYm9vbF9tYWNybyAnLCcgIHtpZiAoISAkMykgc2tpcCsrO30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY3Jvc3RyaW5nICcpJyB7aWYgKCEgJDMpIHNraXAtLTt9IHwKKwkJSUZfVEhFTl9FTFNFICcoJyBib29sX21hY3JvICcsJyAge2lmICghICQzKSBza2lwKys7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm9zdHJpbmcgJywnIHtpZiAoISAkMykgc2tpcC0tOyBlbHNlIHNraXArKzt9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyb3N0cmluZyAnKScge2lmICggICQzKSBza2lwLS07fSB8CisJCVZPSURfRlVOQ1RJT05fVk9JRAorCQkJJygnICcpJworCQkJe2lmICghIHNraXApICgqJDEpKCk7fSB8CisJCVZPSURfRlVOQ1RJT05fU1RSSU5HCisJCQknKCcgU1RSSU5HICcpJworCQkJe2lmICghIHNraXApICgqJDEpKCQzKTt9IHwKKwkJVk9JRF9GVU5DVElPTl8yU1RSSU5HCisJCQknKCcgU1RSSU5HICcsJyBTVFJJTkcgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1KTt9IHwKKwkJVk9JRF9GVU5DVElPTl8yU1RSSU5HX1VJTlQKKwkJCScoJyBTVFJJTkcgJywnIFNUUklORyAnLCcgSU5URUdFUiAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUsICQ3KTt9IHwKKwkJVk9JRF9GVU5DVElPTl8yU1RSSU5HX1VJTlRfU1RSSU5HCisJCQknKCcgU1RSSU5HICcsJyBTVFJJTkcgJywnIElOVEVHRVIgJywnIFNUUklORyAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUsICQ3LCAkOSk7fSB8CisJCVZPSURfRlVOQ1RJT05fMlNUUklOR18yVUlOVF8yU1RSSU5HCisJCQknKCcgU1RSSU5HICcsJyBTVFJJTkcgJywnIElOVEVHRVIgJywnIElOVEVHRVIgJywnIFNUUklORyAnLCcgU1RSSU5HICcpJworCQkJe2lmICghIHNraXApICgqJDEpKCQzLCAkNSwgJDcsICQ5LCAkMTEsICQxMyk7fSB8CisJCVZPSURfRlVOQ1RJT05fMlNUUklOR19XUEFSQU1fTFBBUkFNX1NUUklORworCQkJJygnIFNUUklORyAnLCcgU1RSSU5HICcsJyBJTlRFR0VSICcsJyBJTlRFR0VSICcsJyBTVFJJTkcgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNywgJDksICQxMSk7fSB8CisJCVZPSURfRlVOQ1RJT05fM1NUUklORworCQkJJygnIFNUUklORyAnLCcgU1RSSU5HICcsJyBTVFJJTkcgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNyk7fSB8CisJCVZPSURfRlVOQ1RJT05fM1NUUklOR18yVUlOVAorCQkJJygnIFNUUklORyAnLCcgU1RSSU5HICcsJyBTVFJJTkcgJywnIElOVEVHRVIgJywnIElOVEVHRVIgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNywgJDksICQxMSk7fSB8CisJCVZPSURfRlVOQ1RJT05fNFNUUklORworCQkJJygnIFNUUklORyAnLCcgU1RSSU5HICcsJyBTVFJJTkcgJywnIFNUUklORyAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUsICQ3LCAkOSk7fSB8CisJCVZPSURfRlVOQ1RJT05fNFNUUklOR19VSU5UCisJCQknKCcgU1RSSU5HICcsJyBTVFJJTkcgJywnIFNUUklORyAnLCcgU1RSSU5HICcsJyBJTlRFR0VSJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNywgJDksICQxMSk7fSB8CisJCVZPSURfRlVOQ1RJT05fNFNUUklOR18yVUlOVAorCQkJJygnIFNUUklORyAnLCcgU1RSSU5HICcsJyBTVFJJTkcgJywnIFNUUklORyAnLCcgSU5URUdFUiAnLCcgSU5URUdFUicpJworCQkJe2lmICghIHNraXApICgqJDEpKCQzLCAkNSwgJDcsICQ5LCAkMTEsICQxMyk7fSB8CisJCVZPSURfRlVOQ1RJT05fU1RSSU5HX1VJTlQKKwkJCScoJyBTVFJJTkcgJywnIElOVEVHRVIgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1KTt9IHwKKwkJVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVF9TVFJJTkcKKwkJCScoJyBTVFJJTkcgJywnIElOVEVHRVIgJywnIFNUUklORyAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUsICQ3KTt9IHwKKwkJVk9JRF9GVU5DVElPTl9TVFJJTkdfVUlOVF8yU1RSSU5HCisJCQknKCcgU1RSSU5HICcsJyBJTlRFR0VSICcsJyBTVFJJTkcgJywnIFNUUklORyAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUsICQ3LCAkOSk7fSB8CisJCVZPSURfRlVOQ1RJT05fU1RSSU5HX1dQQVJBTV9MUEFSQU0KKwkJCScoJyBTVFJJTkcgJywnIElOVEVHRVIgJywnIElOVEVHRVIgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNyk7fSB8CisJCVZPSURfRlVOQ1RJT05fVUlOVAorCQkJJygnIElOVEVHRVIgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMpO30gfAorCQlWT0lEX0ZVTkNUSU9OXzJVSU5UCisJCQknKCcgSU5URUdFUiAnLCcgSU5URUdFUiAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUpO30gfAorCQlWT0lEX0ZVTkNUSU9OXzJVSU5UX1NUUklORworCQkJJygnIElOVEVHRVIgJywnIElOVEVHRVIgJywnIFNUUklORyAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDUsICQ3KTt9IHwKKwkJVk9JRF9GVU5DVElPTl8zVUlOVAorCQkJJygnIElOVEVHRVIgJywnIElOVEVHRVIgJywnIElOVEVHRVIgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNyk7fSB8CisJCVZPSURfRlVOQ1RJT05fMklOVF8zVUlOVF9TVFJJTkcKKwkJCScoJyBJTlRFR0VSICcsJyBJTlRFR0VSICcsJyBJTlRFR0VSICcsJyBJTlRFR0VSICcsJyBJTlRFR0VSICcsJyBTVFJJTkcgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ1LCAkNywgJDksICQxMSwgJDEzKTt9IHwKKwkJVk9JRF9GVU5DVElPTl9GSUxFX1dJTgorCQkJJygnIGZpbGVuYW1lIFNUUklORyAnKScKKwkJCXtpZiAoISBza2lwKSAoKiQxKSgkMywgJDQpO30gfAorCQlWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOX1NUUklORworCQkJJygnIGZpbGVuYW1lIFNUUklORyAnLCcgU1RSSU5HICcpJworCQkJe2lmICghIHNraXApICgqJDEpKCQzLCAkNCwgJDYpO30gfAorCQlWT0lEX0ZVTkNUSU9OX0ZJTEVfV0lOX1VJTlQKKwkJCScoJyBmaWxlbmFtZSBTVFJJTkcgJywnIElOVEVHRVIgJyknCisJCQl7aWYgKCEgc2tpcCkgKCokMSkoJDMsICQ0LCAkNik7fSA7CisKK2ZpbGVuYW1lOgl7TUFDUk9fZXh0cmFfc2VwYXJhdG9yID0gJz4nfSBTVFJJTkcgeyQkID0gJDI7fSA7CisKK2Jvb2xfbWFjcm86ICAgICBOT1QgJygnIGJvb2xfbWFjcm8gJyknIHskJCA9ICEgJDM7fSB8CisJCVNUUklORyB7JCQgPSBNQUNST19Jc01hcmsoJDEpO30gfAorCQlCT09MX0ZVTkNUSU9OX1ZPSUQgJygnICcpJyB7JCQgPSAoKiQxKSgpO30gfAorCQlCT09MX0ZVTkNUSU9OX1NUUklORyAnKCcgU1RSSU5HICcpJyB7JCQgPSAoKiQxKSgkMyk7fSA7CmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL3N0cmluZy5jIGIvcHJvZ3JhbXMvd2luaGVscC9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDdiOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3JhbXMvd2luaGVscC9zdHJpbmcuYwpAQCAtMCwwICsxLDI1IEBACisvKgorICogSGVscCBWaWV3ZXIKKyAqCisgKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCisgKi8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICJ3aW5oZWxwLmgiCisKKy8qIENsYXNzIG5hbWVzICovCisKK0NIQVIgTUFJTl9XSU5fQ0xBU1NfTkFNRVtdICAgICAgID0gIldITWFpbiI7CitDSEFSIEJVVFRPTl9CT1hfV0lOX0NMQVNTX05BTUVbXSA9ICJXSEJ1dHRvbkJveCI7CitDSEFSIFRFWFRfV0lOX0NMQVNTX05BTUVbXSAgICAgICA9ICJXSFRleHQiOworQ0hBUiBTSEFET1dfV0lOX0NMQVNTX05BTUVbXSAgICAgPSAiV0hTaGFkb3ciOworQ0hBUiBTVFJJTkdfQlVUVE9OW10gICAgICAgICAgICAgPSAiQlVUVE9OIjsKKworLyogUmVzb3VyY2UgbmFtZXMgKi8KKy8qIFh4IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBFbiwgLi4uICovCitDSEFSIFNUUklOR19NRU5VX1h4W10gICAgICAgID0gIk1FTlVfWHgiOworQ0hBUiBTVFJJTkdfRElBTE9HX1RFU1RbXSAgICA9ICJESUFMT0dfVEVTVCI7CisKKy8qIExvY2FsIFZhcmlhYmxlczogICAgKi8KKy8qIGMtZmlsZS1zdHlsZTogIkdOVSIgKi8KKy8qIEVuZDogICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvd2luaGVscC5jIGIvcHJvZ3JhbXMvd2luaGVscC93aW5oZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyNDRiMAotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3dpbmhlbHAvd2luaGVscC5jCkBAIC0wLDAgKzEsMTA2OSBAQAorLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZCA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZmRlZiBXSU5FTElCCisjaW5jbHVkZSA8cmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxvcHRpb25zLmg+CisjaW5jbHVkZSA8c2hlbGwuaD4KK2V4dGVybiBjb25zdCBjaGFyIHBlb3BsZVtdOworI2VuZGlmCisjaW5jbHVkZSAid2luaGVscC5oIgorCitWT0lEIExJQldJTkVfUmVnaXN0ZXJfRGUodm9pZCk7CitWT0lEIExJQldJTkVfUmVnaXN0ZXJfRW4odm9pZCk7CisKK3N0YXRpYyBCT09MICAgIFdJTkhFTFBfUmVnaXN0ZXJXaW5DbGFzc2VzKCk7CitzdGF0aWMgTFJFU1VMVCBXSU5IRUxQX01haW5XbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK3N0YXRpYyBMUkVTVUxUIFdJTkhFTFBfVGV4dFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworc3RhdGljIExSRVNVTFQgV0lOSEVMUF9CdXR0b25Cb3hXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK3N0YXRpYyBWT0lEICAgIFdJTkhFTFBfQ2hlY2tQb3B1cChVSU5UKTsKK3N0YXRpYyBCT09MICAgIFdJTkhFTFBfU3BsaXRMaW5lcyhIV05EIGhXbmQsIExQU0laRSk7CitzdGF0aWMgVk9JRCAgICBXSU5IRUxQX0luaXRGb250cyhIV05EIGhXbmQpOworc3RhdGljIFZPSUQgICAgV0lOSEVMUF9EZWxldGVMaW5lcyhXSU5IRUxQX1dJTkRPVyopOworc3RhdGljIFZPSUQgICAgV0lOSEVMUF9EZWxldGVXaW5kb3coV0lOSEVMUF9XSU5ET1cqKTsKK3N0YXRpYyBWT0lEICAgIFdJTkhFTFBfU2V0dXBUZXh0KEhXTkQgaFduZCk7CitzdGF0aWMgQk9PTCAgICBXSU5IRUxQX0FwcGVuZFRleHQoV0lOSEVMUF9MSU5FKioqLCBXSU5IRUxQX0xJTkVfUEFSVCoqKiwKKwkJCQkgIExQU0laRSwgTFBTSVpFLCBJTlQqLCBJTlQsIExQQ1NUUiwgVUlOVCwKKwkJCQkgIEhGT05ULCBDT0xPUlJFRiwgSExQRklMRV9MSU5LKik7CisKK1dJTkhFTFBfR0xPQkFMUyBHbG9iYWxzID0gezMsIDAsIDAsIDAsIDAsIDB9OworCitzdGF0aWMgQk9PTCBNYWNyb1Rlc3QgPSBGQUxTRTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFdpbk1haW4KKyAqLworCitpbnQgUEFTQ0FMIFdpbk1haW4gKEhBTkRMRSBoSW5zdGFuY2UsIEhBTkRMRSBwcmV2LCBMUFNUUiBjbWRsaW5lLCBpbnQgc2hvdykKK3sKKyAgTFBDU1RSIG9wdF9sYW5nID0gIkVuIjsKKyAgQ0hBUiAgIGxhbmdbM107CisgIE1TRyAgICBtc2c7CisgIExPTkcgICBsSGFzaCA9IDA7CisgIElOVCAgICBsYW5nbnVtOworCisjaWYgZGVmaW5lZChXSU5FTElCKSAmJiAhZGVmaW5lZChIQVZFX1dJTkVfQ09OU1RSVUNUT1IpCisgIC8qIFJlZ2lzdGVyIHJlc291cmNlcyAqLworICBMSUJXSU5FX1JlZ2lzdGVyX0RlKCk7CisgIExJQldJTkVfUmVnaXN0ZXJfRW4oKTsKKyNlbmRpZgorCisgIEdsb2JhbHMuaEluc3RhbmNlID0gaEluc3RhbmNlOworCisgIC8qIEdldCBvcHRpb25zICovCisgIHdoaWxlICgqY21kbGluZSAmJiAoKmNtZGxpbmUgPT0gJyAnIHx8ICpjbWRsaW5lID09ICctJykpCisgICAgeworICAgICAgQ0hBUiAgIG9wdGlvbjsKKyAgICAgIExQQ1NUUiB0b3BpY19pZDsKKyAgICAgIGlmICgqY21kbGluZSsrID09ICcgJykgY29udGludWU7CisKKyAgICAgIG9wdGlvbiA9ICpjbWRsaW5lOworICAgICAgaWYgKG9wdGlvbikgY21kbGluZSsrOworICAgICAgd2hpbGUgKCpjbWRsaW5lICYmICpjbWRsaW5lID09ICcgJykgY21kbGluZSsrOworICAgICAgc3dpdGNoKG9wdGlvbikKKwl7CisJY2FzZSAnaSc6CisJY2FzZSAnSSc6CisJICB0b3BpY19pZCA9IGNtZGxpbmU7CisJICB3aGlsZSAoKmNtZGxpbmUgJiYgKmNtZGxpbmUgIT0gJyAnKSBjbWRsaW5lKys7CisJICBpZiAoKmNtZGxpbmUpICpjbWRsaW5lKysgPSAnXDAnOworCSAgbEhhc2ggPSBITFBGSUxFX0hhc2godG9waWNfaWQpOworCSAgYnJlYWs7CisKKwljYXNlICczJzoKKwljYXNlICc0JzoKKwkgIEdsb2JhbHMud1ZlcnNpb24gPSBvcHRpb24gLSAnMCc7CisJICBicmVhazsKKworCWNhc2UgJ3QnOgorCSAgTWFjcm9UZXN0ID0gVFJVRTsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyNpZmRlZiBXSU5FTElCCisgIG9wdF9sYW5nID0gbGFuZ05hbWVzW09wdGlvbnMubGFuZ3VhZ2VdOworI2VuZGlmCisKKyAgLyogRmluZCBsYW5ndWFnZSBzcGVjaWZpYyBzdHJpbmcgdGFibGUgKi8KKyAgZm9yIChsYW5nbnVtID0gMDsgbGFuZ251bSA8PSBNQVhfTEFOR1VBR0VfTlVNQkVSOyBsYW5nbnVtKyspCisgICAgeworICAgICAgR2xvYmFscy53U3RyaW5nVGFibGVPZmZzZXQgPSBsYW5nbnVtICogMHgxMDA7CisgICAgICBpZiAoTG9hZFN0cmluZyhoSW5zdGFuY2UsIElEU19MQU5HVUFHRV9JRCwgbGFuZywgc2l6ZW9mKGxhbmcpKSAmJgorCSAgIWxzdHJjbXAob3B0X2xhbmcsIGxhbmcpKQorCWJyZWFrOworICAgIH0KKyAgaWYgKGxhbmdudW0gPiBNQVhfTEFOR1VBR0VfTlVNQkVSKQorICAgIHsKKyAgICAgIC8qIEZpbmQgZmFsbGJhY2sgbGFuZ3VhZ2UgKi8KKyAgICAgIGZvciAobGFuZ251bSA9IDA7IGxhbmdudW0gPD0gTUFYX0xBTkdVQUdFX05VTUJFUjsgbGFuZ251bSsrKQorCXsKKwkgIEdsb2JhbHMud1N0cmluZ1RhYmxlT2Zmc2V0ID0gbGFuZ251bSAqIDB4MTAwOworCSAgaWYgKExvYWRTdHJpbmcoaEluc3RhbmNlLCBJRFNfTEFOR1VBR0VfSUQsIGxhbmcsIHNpemVvZihsYW5nKSkpCisJICAgIGJyZWFrOworCX0KKyAgICAgIGlmIChsYW5nbnVtID4gTUFYX0xBTkdVQUdFX05VTUJFUikKKwl7CisJTWVzc2FnZUJveCgwLCAiTm8gbGFuZ3VhZ2UgZm91bmQiLCAiRkFUQUwgRVJST1IiLCBNQl9PSyk7CisJcmV0dXJuKDEpOworCX0KKyAgICB9CisKKyAgLyogQ2hhbmdlIFJlc291cmNlIG5hbWVzICovCisgIGxzdHJjcHluKFNUUklOR19NRU5VX1h4ICsgbHN0cmxlbihTVFJJTkdfTUVOVV9YeCkgLSAyLCBsYW5nLCAzKTsKKworICAvKiBDcmVhdGUgcHJpbWFyeSB3aW5kb3cgKi8KKyAgV0lOSEVMUF9SZWdpc3RlcldpbkNsYXNzZXMoKTsKKyAgV0lOSEVMUF9DcmVhdGVIZWxwV2luZG93KGNtZGxpbmUsIGxIYXNoLCAibWFpbiIsIEZBTFNFLCBOVUxMLCBOVUxMLCBzaG93KTsKKworICAvKiBNZXNzYWdlIGxvb3AgKi8KKyAgd2hpbGUgKEdldE1lc3NhZ2UgKCZtc2csIDAsIDAsIDApKQorICAgIHsKKyAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UgKCZtc2cpOworICAgICAgRGlzcGF0Y2hNZXNzYWdlICgmbXNnKTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgUmVnaXN0ZXJXaW5DbGFzc2VzCisgKi8KKworc3RhdGljIEJPT0wgV0lOSEVMUF9SZWdpc3RlcldpbkNsYXNzZXMoKQoreworICBXTkRDTEFTUyBjbGFzc19tYWluLCBjbGFzc19idXR0b25fYm94LCBjbGFzc190ZXh0LCBjbGFzc19zaGFkb3c7CisKKyAgY2xhc3NfbWFpbi5zdHlsZSAgICAgICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7CisgIGNsYXNzX21haW4ubHBmblduZFByb2MgICAgICAgICA9IFdJTkhFTFBfTWFpblduZFByb2M7CisgIGNsYXNzX21haW4uY2JDbHNFeHRyYSAgICAgICAgICA9IDA7CisgIGNsYXNzX21haW4uY2JXbmRFeHRyYSAgICAgICAgICA9IHNpemVvZihMT05HKTsKKyAgY2xhc3NfbWFpbi5oSW5zdGFuY2UgICAgICAgICAgID0gR2xvYmFscy5oSW5zdGFuY2U7CisgIGNsYXNzX21haW4uaEljb24gICAgICAgICAgICAgICA9IExvYWRJY29uICgwLCBJRElfQVBQTElDQVRJT04pOworICBjbGFzc19tYWluLmhDdXJzb3IgICAgICAgICAgICAgPSBMb2FkQ3Vyc29yICgwLCBJRENfQVJST1cpOworICBjbGFzc19tYWluLmhickJhY2tncm91bmQgICAgICAgPSBHZXRTdG9ja09iamVjdCAoV0hJVEVfQlJVU0gpOworICBjbGFzc19tYWluLmxwc3pNZW51TmFtZSAgICAgICAgPSAwOworICBjbGFzc19tYWluLmxwc3pDbGFzc05hbWUgICAgICAgPSBNQUlOX1dJTl9DTEFTU19OQU1FOworCisgIGNsYXNzX2J1dHRvbl9ib3ggICAgICAgICAgICAgICA9IGNsYXNzX21haW47CisgIGNsYXNzX2J1dHRvbl9ib3gubHBmblduZFByb2MgICA9IFdJTkhFTFBfQnV0dG9uQm94V25kUHJvYzsKKyAgY2xhc3NfYnV0dG9uX2JveC5oYnJCYWNrZ3JvdW5kID0gR2V0U3RvY2tPYmplY3QoR1JBWV9CUlVTSCk7CisgIGNsYXNzX2J1dHRvbl9ib3gubHBzekNsYXNzTmFtZSA9IEJVVFRPTl9CT1hfV0lOX0NMQVNTX05BTUU7CisKKyAgY2xhc3NfdGV4dCA9IGNsYXNzX21haW47CisgIGNsYXNzX3RleHQubHBmblduZFByb2MgICAgICAgICA9IFdJTkhFTFBfVGV4dFduZFByb2M7CisgIGNsYXNzX3RleHQubHBzekNsYXNzTmFtZSAgICAgICA9IFRFWFRfV0lOX0NMQVNTX05BTUU7CisKKyAgY2xhc3Nfc2hhZG93ID0gY2xhc3NfbWFpbjsKKyAgY2xhc3Nfc2hhZG93LmxwZm5XbmRQcm9jICAgICAgID0gRGVmV2luZG93UHJvYzsKKyAgY2xhc3Nfc2hhZG93LmhickJhY2tncm91bmQgICAgID0gR2V0U3RvY2tPYmplY3QoR1JBWV9CUlVTSCk7CisgIGNsYXNzX3NoYWRvdy5scHN6Q2xhc3NOYW1lICAgICA9IFNIQURPV19XSU5fQ0xBU1NfTkFNRTsKKworICByZXR1cm4gKFJlZ2lzdGVyQ2xhc3MoJmNsYXNzX21haW4pICYmCisJICBSZWdpc3RlckNsYXNzKCZjbGFzc19idXR0b25fYm94KSAmJgorCSAgUmVnaXN0ZXJDbGFzcygmY2xhc3NfdGV4dCkgJiYKKwkgIFJlZ2lzdGVyQ2xhc3MoJmNsYXNzX3NoYWRvdykpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgV0lOSEVMUF9DcmVhdGVIZWxwV2luZG93CisgKi8KKworVk9JRCBXSU5IRUxQX0NyZWF0ZUhlbHBXaW5kb3coTFBDU1RSIGxwc3pGaWxlLCBMT05HIGxIYXNoLCBMUENTVFIgbHBzeldpbmRvdywKKwkJCSAgICAgIEJPT0wgYlBvcHVwLCBIV05EIGhQYXJlbnRXbmQsIExQUE9JTlQgbW91c2UsIElOVCBuQ21kU2hvdykKK3sKKyAgQ0hBUiAgICBzekNhcHRpb25bTUFYX1NUUklOR19MRU5dOworICBDSEFSICAgIHN6Q29udGVudHNbTUFYX1NUUklOR19MRU5dOworICBDSEFSICAgIHN6U2VhcmNoW01BWF9TVFJJTkdfTEVOXTsKKyAgQ0hBUiAgICBzekJhY2tbTUFYX1NUUklOR19MRU5dOworICBDSEFSICAgIHN6SGlzdG9yeVtNQVhfU1RSSU5HX0xFTl07CisgIFNJWkUgICAgc2l6ZSAgID0ge0NXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFR9OworICBQT0lOVCAgIG9yaWdpbiA9IHsyNDAsIDB9OworICBMUFNUUiAgIHB0cjsKKyAgSEdMT0JBTCBoYW5kbGU7CisgIFdJTkhFTFBfV0lORE9XICp3aW4sICpvbGR3aW47CisgIEhMUEZJTEVfUEFHRSAgICpwYWdlOworICBITFBGSUxFX01BQ1JPICAqbWFjcm87CisgIEhXTkQgaFduZDsKKyAgQk9PTCBiUHJpbWFyeTsKKworICBpZiAoYlBvcHVwKQorICAgIGxwc3pXaW5kb3cgPSBOVUxMOworICBlbHNlIGlmICghbHBzeldpbmRvdykKKyAgICBscHN6V2luZG93ID0gR2xvYmFscy5hY3RpdmVfd2luLT5scHN6TmFtZTsKKyAgYlByaW1hcnkgPSBscHN6V2luZG93ICYmICFsc3RyY21waShscHN6V2luZG93LCAibWFpbiIpOworCisgIC8qIFJlYWQgaGVscCBmaWxlICovCisgIGlmIChscHN6RmlsZVswXSkKKyAgICB7CisgICAgICBwYWdlID0gbEhhc2ggPyBITFBGSUxFX1BhZ2VCeUhhc2gobHBzekZpbGUsIGxIYXNoKSA6IEhMUEZJTEVfQ29udGVudHMobHBzekZpbGUpOworCisgICAgICAvKiBBZGQgU3VmZml4IGAuaGxwJyAqLworICAgICAgaWYgKCFwYWdlICYmIGxzdHJjbXBpKGxwc3pGaWxlICsgc3RybGVuKGxwc3pGaWxlKSAtIDQsICIuaGxwIikpCisJeworCSAgQ0hBUiAgICAgIHN6RmlsZV9obHBbTUFYX1BBVEhOQU1FX0xFTl07CisKKwkgIGxzdHJjcHluKHN6RmlsZV9obHAsIGxwc3pGaWxlLCBzaXplb2Yoc3pGaWxlX2hscCkgLSA0KTsKKwkgIHN6RmlsZV9obHBbc2l6ZW9mKHN6RmlsZV9obHApIC0gNV0gPSAnXDAnOworCSAgbHN0cmNhdChzekZpbGVfaGxwLCAiLmhscCIpOworCisJICBwYWdlID0gbEhhc2ggPyBITFBGSUxFX1BhZ2VCeUhhc2goc3pGaWxlX2hscCwgbEhhc2gpIDogSExQRklMRV9Db250ZW50cyhzekZpbGVfaGxwKTsKKwkgIGlmICghcGFnZSkKKwkgICAgeworCSAgICAgIFdJTkhFTFBfTWVzc2FnZUJveElEU19zKElEU19ITFBGSUxFX0VSUk9SX3MsIGxwc3pGaWxlLCBJRFNfRVJST1IsIE1CX09LKTsKKwkgICAgICBpZiAoR2xvYmFscy53aW5fbGlzdCkgcmV0dXJuOworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZSBwYWdlID0gMDsKKworICAvKiBDYWxjdWxhdGUgaG9yaXpvbnRhbCBzaXplIGFuZCBwb3NpdGlvbiBvZiBhIHBvcHVwIHdpbmRvdyAqLworICBpZiAoYlBvcHVwKQorICAgIHsKKyAgICAgIFJFQ1QgcGFyZW50X3JlY3Q7CisgICAgICBHZXRXaW5kb3dSZWN0KGhQYXJlbnRXbmQsICZwYXJlbnRfcmVjdCk7CisgICAgICBzaXplLmN4ID0gKHBhcmVudF9yZWN0LnJpZ2h0ICAtIHBhcmVudF9yZWN0LmxlZnQpIC8gMjsKKworICAgICAgb3JpZ2luID0gKm1vdXNlOworICAgICAgQ2xpZW50VG9TY3JlZW4oaFBhcmVudFduZCwgJm9yaWdpbik7CisgICAgICBvcmlnaW4ueCAtPSBzaXplLmN4IC8gMjsKKyAgICAgIG9yaWdpbi54ICA9IE1JTihvcmlnaW4ueCwgR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTikgLSBzaXplLmN4KTsKKyAgICAgIG9yaWdpbi54ICA9IE1BWChvcmlnaW4ueCwgMCk7CisgICAgfQorCisgIC8qIEluaXRpYWxpemUgV0lOSEVMUF9XSU5ET1cgc3RydWN0ICovCisgIGhhbmRsZSA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIHNpemVvZihXSU5IRUxQX1dJTkRPVykgKworCQkgICAgICAgKGxwc3pXaW5kb3cgPyBzdHJsZW4obHBzeldpbmRvdykgKyAxIDogMCkpOworICBpZiAoIWhhbmRsZSkgcmV0dXJuOworICB3aW4gPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgIHdpbi0+aFNlbGYgPSBoYW5kbGU7CisgIHdpbi0+bmV4dCAgPSBHbG9iYWxzLndpbl9saXN0OworICBHbG9iYWxzLndpbl9saXN0ID0gd2luOworICBpZiAobHBzeldpbmRvdykKKyAgICB7CisgICAgICBwdHIgPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgICAgICBwdHIgKz0gc2l6ZW9mKFdJTkhFTFBfV0lORE9XKTsKKyAgICAgIGxzdHJjcHkocHRyLCAoTFBTVFIpIGxwc3pXaW5kb3cpOworICAgICAgd2luLT5scHN6TmFtZSA9IHB0cjsKKyAgICB9CisgIGVsc2Ugd2luLT5scHN6TmFtZSA9IE5VTEw7CisgIHdpbi0+cGFnZSA9IHBhZ2U7CisgIHdpbi0+Zmlyc3RfYnV0dG9uID0gMDsKKyAgd2luLT5maXJzdF9saW5lID0gMDsKKyAgd2luLT5oTWFpblduZCA9IDA7CisgIHdpbi0+aEJ1dHRvbkJveFduZCA9IDA7CisgIHdpbi0+aFRleHRXbmQgPSAwOworICB3aW4tPmhTaGFkb3dXbmQgPSAwOworCisgIEdsb2JhbHMuYWN0aXZlX3dpbiA9IHdpbjsKKworICAvKiBJbml0aWFsaXplIGRlZmF1bHQgcHVzaGJ1dHRvbnMgKi8KKyAgaWYgKE1hY3JvVGVzdCAmJiAhYlBvcHVwKQorICAgIE1BQ1JPX0NyZWF0ZUJ1dHRvbigiQlROX1RFU1QiLCAiJlRlc3QiLCAiTWFjcm9UZXN0Iik7CisgIGlmIChiUHJpbWFyeSAmJiBwYWdlKQorICAgIHsKKyAgICAgIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIElEU19DT05URU5UUywgc3pDb250ZW50cywgc2l6ZW9mKHN6Q29udGVudHMpKTsKKyAgICAgIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIElEU19TRUFSQ0gsICAgc3pTZWFyY2gsICAgc2l6ZW9mKHN6U2VhcmNoKSk7CisgICAgICBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBJRFNfQkFDSywgICAgIHN6QmFjaywgICAgIHNpemVvZihzekJhY2spKTsKKyAgICAgIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIElEU19ISVNUT1JZLCAgc3pIaXN0b3J5LCAgc2l6ZW9mKHN6SGlzdG9yeSkpOworICAgICAgTUFDUk9fQ3JlYXRlQnV0dG9uKCJCVE5fQ09OVEVOVFMiLCBzekNvbnRlbnRzLCAiQ29udGVudHMoKSIpOworICAgICAgTUFDUk9fQ3JlYXRlQnV0dG9uKCJCVE5fU0VBUkNIIiwgICBzelNlYXJjaCwgICAiU2VhcmNoKCkiKTsKKyAgICAgIE1BQ1JPX0NyZWF0ZUJ1dHRvbigiQlROX0JBQ0siLCAgICAgc3pCYWNrLCAgICAgIkJhY2soKSIpOworICAgICAgTUFDUk9fQ3JlYXRlQnV0dG9uKCJCVE5fSElTVE9SWSIsICBzekhpc3RvcnksICAiSGlzdG9yeSgpIik7CisgICAgfQorCisgIC8qIEluaXRpYWxpemUgZmlsZSBzcGVjaWZpYyBwdXNoYnV0dG9ucyAqLworICBpZiAoIWJQb3B1cCAmJiBwYWdlKQorICAgIGZvciAobWFjcm8gPSBwYWdlLT5maWxlLT5maXJzdF9tYWNybzsgbWFjcm87IG1hY3JvID0gbWFjcm8tPm5leHQpCisgICAgICBNQUNST19FeGVjdXRlTWFjcm8obWFjcm8tPmxwc3pNYWNybyk7CisKKyAgLyogUmV1c2UgZXhpc3Rpbmcgd2luZG93ICovCisgIGlmIChscHN6V2luZG93KQorICAgIGZvciAob2xkd2luID0gd2luLT5uZXh0OyBvbGR3aW47IG9sZHdpbiA9IG9sZHdpbi0+bmV4dCkKKyAgICAgIGlmIChvbGR3aW4tPmxwc3pOYW1lICYmICFsc3RyY21waShvbGR3aW4tPmxwc3pOYW1lLCBscHN6V2luZG93KSkKKwl7CisJICBXSU5IRUxQX0JVVFRPTiAqYnV0dG9uOworCisJICB3aW4tPmhNYWluV25kICAgICAgPSBvbGR3aW4tPmhNYWluV25kOworCSAgd2luLT5oQnV0dG9uQm94V25kID0gb2xkd2luLT5oQnV0dG9uQm94V25kOworCSAgd2luLT5oVGV4dFduZCAgICAgID0gb2xkd2luLT5oVGV4dFduZDsKKwkgIG9sZHdpbi0+aE1haW5XbmQgPSBvbGR3aW4tPmhCdXR0b25Cb3hXbmQgPSBvbGR3aW4tPmhUZXh0V25kID0gMDsKKworCSAgU2V0V2luZG93TG9uZyh3aW4tPmhNYWluV25kLCAgICAgIDAsIChMT05HKSB3aW4pOworCSAgU2V0V2luZG93TG9uZyh3aW4tPmhCdXR0b25Cb3hXbmQsIDAsIChMT05HKSB3aW4pOworCSAgU2V0V2luZG93TG9uZyh3aW4tPmhUZXh0V25kLCAgICAgIDAsIChMT05HKSB3aW4pOworCisJICBXSU5IRUxQX0luaXRGb250cyh3aW4tPmhNYWluV25kKTsKKworCSAgU2V0V2luZG93VGV4dCh3aW4tPmhNYWluV25kLCBwYWdlLT5maWxlLT5scHN6VGl0bGUpOworCisJICBXSU5IRUxQX1NldHVwVGV4dCh3aW4tPmhUZXh0V25kKTsKKwkgIEludmFsaWRhdGVSZWN0KHdpbi0+aFRleHRXbmQsIE5VTEwsIFRSVUUpOworCSAgU2VuZE1lc3NhZ2Uod2luLT5oTWFpblduZCwgV01fVVNFUiwgMCwgMCk7CisJICBVcGRhdGVXaW5kb3cod2luLT5oVGV4dFduZCk7CisKKworCSAgZm9yIChidXR0b24gPSBvbGR3aW4tPmZpcnN0X2J1dHRvbjsgYnV0dG9uOyBidXR0b24gPSBidXR0b24tPm5leHQpCisJICAgIERlc3Ryb3lXaW5kb3coYnV0dG9uLT5oV25kKTsKKyAgCisJICBXSU5IRUxQX0RlbGV0ZVdpbmRvdyhvbGR3aW4pOworCSAgcmV0dXJuOworCX0KKworICAvKiBDcmVhdGUgbWFpbiBXaW5kb3cgKi8KKyAgaWYgKCFwYWdlKSBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBJRFNfV0lORV9IRUxQLCBzekNhcHRpb24sIHNpemVvZihzekNhcHRpb24pKTsKKyAgaFduZCA9IENyZWF0ZVdpbmRvdyAoYlBvcHVwID8gVEVYVF9XSU5fQ0xBU1NfTkFNRSA6IE1BSU5fV0lOX0NMQVNTX05BTUUsCisJCSAgICAgICBwYWdlID8gKFNFR1BUUikgcGFnZS0+ZmlsZS0+bHBzelRpdGxlIDogKFNFR1BUUikgc3pDYXB0aW9uLAorCQkgICAgICAgYlBvcHVwID8gV1NfUE9QVVBXSU5ET1cgfCBXU19CT1JERVIgOiBXU19PVkVSTEFQUEVEV0lORE9XLAorCQkgICAgICAgb3JpZ2luLngsIG9yaWdpbi55LCBzaXplLmN4LCBzaXplLmN5LAorCQkgICAgICAgMCwgYlByaW1hcnkgPyBMb2FkTWVudShHbG9iYWxzLmhJbnN0YW5jZSwgU1RSSU5HX01FTlVfWHgpIDogMCwKKwkJICAgICAgIEdsb2JhbHMuaEluc3RhbmNlLCAoU0VHUFRSKSB3aW4pOworCisgIFNob3dXaW5kb3cgKGhXbmQsIG5DbWRTaG93KTsKKyAgVXBkYXRlV2luZG93IChoV25kKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFdJTkhFTFBfTWFpblduZFByb2MKKyAqLworCitzdGF0aWMgTFJFU1VMVCBXSU5IRUxQX01haW5XbmRQcm9jIChIV05EIGhXbmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICBXSU5IRUxQX1dJTkRPVyAqd2luOworICBXSU5IRUxQX0JVVFRPTiAqYnV0dG9uOworICBSRUNUIHJlY3QsIGJ1dHRvbl9ib3hfcmVjdDsKKyAgSU5UICB0ZXh0X3RvcDsKKworICBXSU5IRUxQX0NoZWNrUG9wdXAobXNnKTsKKworICBzd2l0Y2ggKG1zZykKKyAgICB7CisgICAgY2FzZSBXTV9OQ0NSRUFURToKKyAgICAgIHdpbiA9IChXSU5IRUxQX1dJTkRPVyopICgoTFBDUkVBVEVTVFJVQ1QpIGxQYXJhbSktPmxwQ3JlYXRlUGFyYW1zOworICAgICAgU2V0V2luZG93TG9uZyhoV25kLCAwLCAoTE9ORykgd2luKTsKKyAgICAgIHdpbi0+aE1haW5XbmQgPSBoV25kOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdNX0NSRUFURToKKyAgICAgIHdpbiA9IChXSU5IRUxQX1dJTkRPVyopIEdldFdpbmRvd0xvbmcoaFduZCwgMCk7CisKKyAgICAgIC8qIENyZWF0ZSBidXR0b24gYm94IGFuZCB0ZXh0IFdpbmRvdyAqLworICAgICAgQ3JlYXRlV2luZG93KEJVVFRPTl9CT1hfV0lOX0NMQVNTX05BTUUsICIiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUsCisJCSAgIDAsIDAsIDAsIDAsIGhXbmQsIDAsIEdsb2JhbHMuaEluc3RhbmNlLCAoU0VHUFRSKSB3aW4pOworCisgICAgICBDcmVhdGVXaW5kb3coVEVYVF9XSU5fQ0xBU1NfTkFNRSwgIiIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSwKKwkJICAgMCwgMCwgMCwgMCwgaFduZCwgMCwgR2xvYmFscy5oSW5zdGFuY2UsIChTRUdQVFIpIHdpbik7CisKKyAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgV01fVVNFUjoKKyAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HRUQ6CisgICAgICB3aW4gPSAoV0lOSEVMUF9XSU5ET1cqKSBHZXRXaW5kb3dMb25nKGhXbmQsIDApOworICAgICAgR2V0Q2xpZW50UmVjdChoV25kLCAmcmVjdCk7CisKKyAgICAgIC8qIFVwZGF0ZSBidXR0b24gYm94IGFuZCB0ZXh0IFdpbmRvdyAqLworICAgICAgU2V0V2luZG93UG9zKHdpbi0+aEJ1dHRvbkJveFduZCwgSFdORF9UT1AsCisJCSAgIHJlY3QubGVmdCwgcmVjdC50b3AsCisJCSAgIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsCisJCSAgIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDApOworCisgICAgICBHZXRXaW5kb3dSZWN0KHdpbi0+aEJ1dHRvbkJveFduZCwgJmJ1dHRvbl9ib3hfcmVjdCk7CisgICAgICB0ZXh0X3RvcCA9IHJlY3QudG9wICsgYnV0dG9uX2JveF9yZWN0LmJvdHRvbSAtIGJ1dHRvbl9ib3hfcmVjdC50b3A7CisKKyAgICAgIFNldFdpbmRvd1Bvcyh3aW4tPmhUZXh0V25kLCBIV05EX1RPUCwKKwkJICAgcmVjdC5sZWZ0LCB0ZXh0X3RvcCwKKwkJICAgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwKKwkJICAgcmVjdC5ib3R0b20gLSB0ZXh0X3RvcCwgMCk7CisKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBXTV9DT01NQU5EOgorICAgICAgR2xvYmFscy5hY3RpdmVfd2luID0gd2luID0gKFdJTkhFTFBfV0lORE9XKikgR2V0V2luZG93TG9uZyhoV25kLCAwKTsKKyAgICAgIHN3aXRjaCAod1BhcmFtKQorCXsKKwkgIC8qIE1lbnUgRklMRSAqLworCWNhc2UgV0hfT1BFTjogICAgICAgICAgICBNQUNST19GaWxlT3BlbigpOyAgICAgICBicmVhazsKKwljYXNlIFdIX1BSSU5UOiAgICAgICAgICAgTUFDUk9fUHJpbnQoKTsgICAgICAgICAgYnJlYWs7CisJY2FzZSBXSF9QUklOVEVSX1NFVFVQOiAgIE1BQ1JPX1ByaW50ZXJTZXR1cCgpOyAgIGJyZWFrOworCWNhc2UgV0hfRVhJVDogICAgICAgICAgICBNQUNST19FeGl0KCk7ICAgICAgICAgICBicmVhazsKKworCSAgLyogTWVudSBFRElUICovCisJY2FzZSBXSF9DT1BZX0RJQUxPRzogICAgIE1BQ1JPX0NvcHlEaWFsb2coKTsgICAgIGJyZWFrOworCWNhc2UgV0hfQU5OT1RBVEU6ICAgICAgICBNQUNST19Bbm5vdGF0ZSgpOyAgICAgICBicmVhazsKKworCSAgLyogTWVudSBCb29rbWFyayAqLworCWNhc2UgV0hfQk9PS01BUktfREVGSU5FOiBNQUNST19Cb29rbWFya0RlZmluZSgpOyBicmVhazsKKworCSAgLyogTWVudSBIZWxwICovCisJY2FzZSBXSF9IRUxQX09OX0hFTFA6ICAgIE1BQ1JPX0hlbHBPbigpOyAgICAgICAgIGJyZWFrOworCWNhc2UgV0hfSEVMUF9PTl9UT1A6ICAgICBNQUNST19IZWxwT25Ub3AoKTsgICAgICBicmVhazsKKworCSAgLyogTWVudSBJbmZvICovCisJY2FzZSBXSF9BQk9VVDogICAgICAgICAgIE1BQ1JPX0Fib3V0KCk7ICAgICAgICAgIGJyZWFrOworI2lmZGVmIFdJTkVMSUIKKwljYXNlIFdIX0FCT1VUX1dJTkU6IAorCSAgU2hlbGxBYm91dChoV25kLCAiV0lORSIsIHBlb3BsZSwgMCk7CisJICBicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkgIC8qIEJ1dHRvbnMgKi8KKwkgIGZvciAoYnV0dG9uID0gd2luLT5maXJzdF9idXR0b247IGJ1dHRvbjsgYnV0dG9uID0gYnV0dG9uLT5uZXh0KQorCSAgICBpZiAod1BhcmFtID09IGJ1dHRvbi0+d1BhcmFtKSBicmVhazsKKwkgIGlmIChidXR0b24pCisJICAgIE1BQ1JPX0V4ZWN1dGVNYWNybyhidXR0b24tPmxwc3pNYWNybyk7CisJICBlbHNlCisJICAgIFdJTkhFTFBfTWVzc2FnZUJveElEUyhJRFNfTk9UX0lNUExFTUVOVEVELCBJRFNfRVJST1IsIE1CX09LKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gRGVmV2luZG93UHJvYyAoaFduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBXSU5IRUxQX0J1dHRvbkJveFduZFByb2MKKyAqLworCitzdGF0aWMgTFJFU1VMVCBXSU5IRUxQX0J1dHRvbkJveFduZFByb2MgKEhXTkQgaFduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgIFdJTkRPV1BPUyAgICAgICp3aW5wb3M7CisgIFdJTkhFTFBfV0lORE9XICp3aW47CisgIFdJTkhFTFBfQlVUVE9OICpidXR0b247CisgIFNJWkUgYnV0dG9uX3NpemU7CisgIElOVCAgeCwgeTsKKworICBXSU5IRUxQX0NoZWNrUG9wdXAobXNnKTsKKworICBzd2l0Y2gobXNnKQorICAgIHsKKyAgICBjYXNlIFdNX05DQ1JFQVRFOgorICAgICAgd2luID0gKFdJTkhFTFBfV0lORE9XKikgKChMUENSRUFURVNUUlVDVCkgbFBhcmFtKS0+bHBDcmVhdGVQYXJhbXM7CisgICAgICBTZXRXaW5kb3dMb25nKGhXbmQsIDAsIChMT05HKSB3aW4pOworICAgICAgd2luLT5oQnV0dG9uQm94V25kID0gaFduZDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzoKKyAgICAgIHdpbnBvcyA9IChXSU5ET1dQT1MqKSBsUGFyYW07CisgICAgICB3aW4gPSAoV0lOSEVMUF9XSU5ET1cqKSBHZXRXaW5kb3dMb25nKGhXbmQsIDApOworCisgICAgICAvKiBVcGRhdGUgYnV0dG9ucyAqLworICAgICAgYnV0dG9uX3NpemUuY3ggPSAwOworICAgICAgYnV0dG9uX3NpemUuY3kgPSAwOworICAgICAgZm9yIChidXR0b24gPSB3aW4tPmZpcnN0X2J1dHRvbjsgYnV0dG9uOyBidXR0b24gPSBidXR0b24tPm5leHQpCisJeworCSAgSERDICBoRGM7CisJICBTSVpFIHRleHRzaXplOworCSAgaWYgKCFidXR0b24tPmhXbmQpCisJICAgIGJ1dHRvbi0+aFduZCA9IENyZWF0ZVdpbmRvdyhTVFJJTkdfQlVUVE9OLCAoTFBTVFIpIGJ1dHRvbi0+bHBzek5hbWUsCisJCQkJCVdTX0NISUxEIHwgV1NfVklTSUJMRSB8IEJTX1BVU0hCVVRUT04sCisJCQkJCTAsIDAsIDAsIDAsCisJCQkJCWhXbmQsIChITUVOVSkgYnV0dG9uLT53UGFyYW0sCisJCQkJCUdsb2JhbHMuaEluc3RhbmNlLCAwKTsKKwkgIGhEYyA9IEdldERDKGJ1dHRvbi0+aFduZCk7CisJICBHZXRUZXh0RXh0ZW50UG9pbnQoaERjLCBidXR0b24tPmxwc3pOYW1lLAorCQkJICAgICBsc3RybGVuKGJ1dHRvbi0+bHBzek5hbWUpLCAmdGV4dHNpemUpOworCSAgUmVsZWFzZURDKGJ1dHRvbi0+aFduZCwgaERjKTsKKworCSAgYnV0dG9uX3NpemUuY3ggPSBNQVgoYnV0dG9uX3NpemUuY3gsIHRleHRzaXplLmN4ICsgQlVUVE9OX0NYKTsKKwkgIGJ1dHRvbl9zaXplLmN5ID0gTUFYKGJ1dHRvbl9zaXplLmN5LCB0ZXh0c2l6ZS5jeSArIEJVVFRPTl9DWSk7CisJfQorCisgICAgICB4ID0gMDsKKyAgICAgIHkgPSAwOworICAgICAgZm9yIChidXR0b24gPSB3aW4tPmZpcnN0X2J1dHRvbjsgYnV0dG9uOyBidXR0b24gPSBidXR0b24tPm5leHQpCisJeworCSAgU2V0V2luZG93UG9zKGJ1dHRvbi0+aFduZCwgSFdORF9UT1AsIHgsIHksIGJ1dHRvbl9zaXplLmN4LCBidXR0b25fc2l6ZS5jeSwgMCk7CisKKwkgIGlmICh4ICsgMiAqIGJ1dHRvbl9zaXplLmN4IDw9IHdpbnBvcy0+Y3gpCisJICAgIHggKz0gYnV0dG9uX3NpemUuY3g7CisJICBlbHNlCisJICAgIHggPSAwLCB5ICs9IGJ1dHRvbl9zaXplLmN5OworCX0KKyAgICAgIHdpbnBvcy0+Y3kgPSB5ICsgKHggPyBidXR0b25fc2l6ZS5jeSA6IDApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdNX0NPTU1BTkQ6CisgICAgICBTZW5kTWVzc2FnZShHZXRQYXJlbnQoaFduZCksIG1zZywgd1BhcmFtLCBsUGFyYW0pOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybihEZWZXaW5kb3dQcm9jKGhXbmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFdJTkhFTFBfVGV4dFduZFByb2MKKyAqLworCitzdGF0aWMgTFJFU1VMVCBXSU5IRUxQX1RleHRXbmRQcm9jIChIV05EIGhXbmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICBXSU5IRUxQX1dJTkRPVyAgICAqd2luOworICBXSU5IRUxQX0xJTkUgICAgICAqbGluZTsKKyAgV0lOSEVMUF9MSU5FX1BBUlQgKnBhcnQ7CisgIFdJTkRPV1BPUyAgICAgICAgICp3aW5wb3M7CisgIFBBSU5UU1RSVUNUICAgICAgICBwczsKKyAgSERDICAgaERjOworICBQT0lOVCBtb3VzZTsKKyAgSU5UICAgc2Nyb2xsX3BvczsKKyAgSFdORCAgaFBvcHVwV25kOworICBCT09MICBiRXhpdDsKKworICBpZiAobXNnICE9IFdNX0xCVVRUT05ET1dOKQorICAgIFdJTkhFTFBfQ2hlY2tQb3B1cChtc2cpOworCisgIHN3aXRjaCAobXNnKQorICAgIHsKKyAgICBjYXNlIFdNX05DQ1JFQVRFOgorICAgICAgd2luID0gKFdJTkhFTFBfV0lORE9XKikgKChMUENSRUFURVNUUlVDVCkgbFBhcmFtKS0+bHBDcmVhdGVQYXJhbXM7CisgICAgICBTZXRXaW5kb3dMb25nKGhXbmQsIDAsIChMT05HKSB3aW4pOworICAgICAgd2luLT5oVGV4dFduZCA9IGhXbmQ7CisgICAgICBpZiAoIXdpbi0+bHBzek5hbWUpIEdsb2JhbHMuaFBvcHVwV25kID0gd2luLT5oTWFpblduZCA9IGhXbmQ7CisgICAgICBXSU5IRUxQX0luaXRGb250cyhoV25kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBXTV9DUkVBVEU6CisgICAgICB3aW4gPSAoV0lOSEVMUF9XSU5ET1cqKSBHZXRXaW5kb3dMb25nKGhXbmQsIDApOworCisgICAgICAvKiBDYWxjdWxhdGUgdmVydGljYWwgc2l6ZSBhbmQgcG9zaXRpb24gb2YgYSBwb3B1cCB3aW5kb3cgKi8KKyAgICAgIGlmICghd2luLT5scHN6TmFtZSkKKwl7CisJICBQT0lOVCBvcmlnaW47CisJICBSRUNUIG9sZF93aW5kb3dfcmVjdDsKKwkgIFJFQ1Qgb2xkX2NsaWVudF9yZWN0OworCSAgU0laRSBvbGRfd2luZG93X3NpemU7CisJICBTSVpFIG9sZF9jbGllbnRfc2l6ZTsKKwkgIFNJWkUgbmV3X2NsaWVudF9zaXplOworCSAgU0laRSBuZXdfd2luZG93X3NpemU7CisKKwkgIEdldFdpbmRvd1JlY3QoaFduZCwgJm9sZF93aW5kb3dfcmVjdCk7CisJICBvcmlnaW4ueCA9IG9sZF93aW5kb3dfcmVjdC5sZWZ0OworCSAgb3JpZ2luLnkgPSBvbGRfd2luZG93X3JlY3QudG9wOworCSAgb2xkX3dpbmRvd19zaXplLmN4ID0gb2xkX3dpbmRvd19yZWN0LnJpZ2h0ICAtIG9sZF93aW5kb3dfcmVjdC5sZWZ0OworCSAgb2xkX3dpbmRvd19zaXplLmN5ID0gb2xkX3dpbmRvd19yZWN0LmJvdHRvbSAtIG9sZF93aW5kb3dfcmVjdC50b3A7CisKKwkgIEdldENsaWVudFJlY3QoaFduZCwgJm9sZF9jbGllbnRfcmVjdCk7CisJICBvbGRfY2xpZW50X3NpemUuY3ggPSBvbGRfY2xpZW50X3JlY3QucmlnaHQgIC0gb2xkX2NsaWVudF9yZWN0LmxlZnQ7CisJICBvbGRfY2xpZW50X3NpemUuY3kgPSBvbGRfY2xpZW50X3JlY3QuYm90dG9tIC0gb2xkX2NsaWVudF9yZWN0LnRvcDsKKworCSAgbmV3X2NsaWVudF9zaXplID0gb2xkX2NsaWVudF9zaXplOworCSAgV0lOSEVMUF9TcGxpdExpbmVzKGhXbmQsICZuZXdfY2xpZW50X3NpemUpOworCisJICBpZiAob3JpZ2luLnkgKyBQT1BVUF9ZRElTVEFOQ0UgKyBuZXdfY2xpZW50X3NpemUuY3kgPD0gR2V0U3lzdGVtTWV0cmljcyhTTV9DWVNDUkVFTikpCisJICAgIG9yaWdpbi55ICs9IFBPUFVQX1lESVNUQU5DRTsKKwkgIGVsc2UKKwkgICAgb3JpZ2luLnkgLT0gUE9QVVBfWURJU1RBTkNFICsgbmV3X2NsaWVudF9zaXplLmN5OworCisJICBuZXdfd2luZG93X3NpemUuY3ggPSBvbGRfd2luZG93X3NpemUuY3ggLSBvbGRfY2xpZW50X3NpemUuY3ggKyBuZXdfY2xpZW50X3NpemUuY3g7CisJICBuZXdfd2luZG93X3NpemUuY3kgPSBvbGRfd2luZG93X3NpemUuY3kgLSBvbGRfY2xpZW50X3NpemUuY3kgKyBuZXdfY2xpZW50X3NpemUuY3k7CisKKwkgIHdpbi0+aFNoYWRvd1duZCA9IAorCSAgICBDcmVhdGVXaW5kb3coU0hBRE9XX1dJTl9DTEFTU19OQU1FLCAiIiwgV1NfUE9QVVAgfCBXU19WSVNJQkxFLAorCQkJIG9yaWdpbi54ICsgU0hBRE9XX0RYLCBvcmlnaW4ueSArIFNIQURPV19EWSwKKwkJCSBuZXdfd2luZG93X3NpemUuY3gsIG5ld193aW5kb3dfc2l6ZS5jeSwKKwkJCSAwLCAwLCBHbG9iYWxzLmhJbnN0YW5jZSwgMCk7CisKKwkgIFNldFdpbmRvd1BvcyhoV25kLCBIV05EX1RPUCwgb3JpZ2luLngsIG9yaWdpbi55LAorCQkgICAgICAgbmV3X3dpbmRvd19zaXplLmN4LCBuZXdfd2luZG93X3NpemUuY3ksCisJCSAgICAgICBTV1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSk7CisJICBTaG93V2luZG93KHdpbi0+aFNoYWRvd1duZCwgU1dfTk9STUFMKTsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdFRDoKKyAgICAgIHdpbnBvcyA9IChXSU5ET1dQT1MqKSBsUGFyYW07CisgICAgICBpZiAoISh3aW5wb3MtPmZsYWdzICYgU1dQX05PU0laRSkpIFdJTkhFTFBfU2V0dXBUZXh0KGhXbmQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdNX1ZTQ1JPTEw6CisgICAgICB7CisJQk9PTCB1cGRhdGUgPSBUUlVFOworCVJFQ1QgcmVjdDsKKwlJTlQgIE1pbiwgTWF4OworCUlOVCAgQ3VyUG9zID0gR2V0U2Nyb2xsUG9zKGhXbmQsIFNCX1ZFUlQpOworCUdldFNjcm9sbFJhbmdlKGhXbmQsIFNCX1ZFUlQsICZNaW4sICZNYXgpOworCUdldENsaWVudFJlY3QoaFduZCwgJnJlY3QpOworCisJc3dpdGNoICh3UGFyYW0gJiAweGZmZmYpCisJICB7CisJICBjYXNlIFNCX1RIVU1CVFJBQ0s6CisJICBjYXNlIFNCX1RIVU1CUE9TSVRJT046IEN1clBvcyAgPSB3UGFyYW0gPj4gMTY7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgY2FzZSBTQl9UT1A6ICAgICAgICAgICBDdXJQb3MgID0gTWluOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgIGNhc2UgU0JfQk9UVE9NOiAgICAgICAgQ3VyUG9zICA9IE1heDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICBjYXNlIFNCX1BBR0VVUDogICAgICAgIEN1clBvcyAtPSAocmVjdC5ib3R0b20gLSByZWN0LnRvcCkgLyAyOyAgIGJyZWFrOworCSAgY2FzZSBTQl9QQUdFRE9XTjogICAgICBDdXJQb3MgKz0gKHJlY3QuYm90dG9tIC0gcmVjdC50b3ApIC8gMjsgICBicmVhazsKKwkgIGNhc2UgU0JfTElORVVQOiAgICAgICAgQ3VyUG9zIC09IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsgYnJlYWs7CisJICBjYXNlIFNCX0xJTkVET1dOOiAgICAgIEN1clBvcyArPSBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7IGJyZWFrOworCSAgZGVmYXVsdDogdXBkYXRlID0gRkFMU0U7CisJICB9CisJaWYgKHVwZGF0ZSkKKwkgIHsKKwkgICAgSU5UIGR5ID0gR2V0U2Nyb2xsUG9zKGhXbmQsIFNCX1ZFUlQpIC0gQ3VyUG9zOworCSAgICBTZXRTY3JvbGxQb3MoaFduZCwgU0JfVkVSVCwgQ3VyUG9zLCBUUlVFKTsKKwkgICAgU2Nyb2xsV2luZG93KGhXbmQsIDAsIGR5LCBOVUxMLCBOVUxMKTsKKwkgICAgVXBkYXRlV2luZG93KGhXbmQpOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdNX1BBSU5UOgorICAgICAgaERjID0gQmVnaW5QYWludCAoaFduZCwgJnBzKTsKKyAgICAgIHdpbiA9IChXSU5IRUxQX1dJTkRPVyopIEdldFdpbmRvd0xvbmcoaFduZCwgMCk7CisgICAgICBzY3JvbGxfcG9zID0gR2V0U2Nyb2xsUG9zKGhXbmQsIFNCX1ZFUlQpOworCisgICAgICBmb3IgKGxpbmUgPSB3aW4tPmZpcnN0X2xpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0KQorCWZvciAocGFydCA9ICZsaW5lLT5maXJzdF9wYXJ0OyBwYXJ0OyBwYXJ0ID0gcGFydC0+bmV4dCkKKwkgIHsKKwkgICAgU2VsZWN0T2JqZWN0KGhEYywgcGFydC0+aEZvbnQpOworCSAgICBTZXRUZXh0Q29sb3IoaERjLCBwYXJ0LT5jb2xvcik7CisJICAgIFRleHRPdXQoaERjLCBwYXJ0LT5yZWN0LmxlZnQsIHBhcnQtPnJlY3QudG9wIC0gc2Nyb2xsX3BvcywKKwkJICAgIChMUFNUUikgcGFydC0+bHBzVGV4dCwgcGFydC0+d1RleHRMZW4pOworCSAgfQorCisgICAgICBFbmRQYWludCAoaFduZCwgJnBzKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICAgIHdpbiA9IChXSU5IRUxQX1dJTkRPVyopIEdldFdpbmRvd0xvbmcoaFduZCwgMCk7CisgICAgICBzY3JvbGxfcG9zID0gR2V0U2Nyb2xsUG9zKGhXbmQsIFNCX1ZFUlQpOworCisgICAgICBoUG9wdXBXbmQgPSBHbG9iYWxzLmhQb3B1cFduZDsKKyAgICAgIEdsb2JhbHMuaFBvcHVwV25kID0gMDsKKworICAgICAgbW91c2UueCA9IExPV09SRChsUGFyYW0pOworICAgICAgbW91c2UueSA9IEhJV09SRChsUGFyYW0pOworICAgICAgZm9yIChsaW5lID0gd2luLT5maXJzdF9saW5lOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dCkKKwlmb3IgKHBhcnQgPSAmbGluZS0+Zmlyc3RfcGFydDsgcGFydDsgcGFydCA9IHBhcnQtPm5leHQpCisJICBpZiAocGFydC0+bGluay5scHN6UGF0aCAmJgorCSAgICAgIHBhcnQtPnJlY3QubGVmdCAgIDw9IG1vdXNlLnggJiYKKwkgICAgICBwYXJ0LT5yZWN0LnJpZ2h0ICA+PSBtb3VzZS54ICYmCisJICAgICAgcGFydC0+cmVjdC50b3AgICAgPD0gbW91c2UueSArIHNjcm9sbF9wb3MgJiYKKwkgICAgICBwYXJ0LT5yZWN0LmJvdHRvbSA+PSBtb3VzZS55ICsgc2Nyb2xsX3BvcykKKwkgICAgV0lOSEVMUF9DcmVhdGVIZWxwV2luZG93KHBhcnQtPmxpbmsubHBzelBhdGgsIHBhcnQtPmxpbmsubEhhc2gsIE5VTEwsCisJCQkJICAgICBwYXJ0LT5saW5rLmJQb3B1cCwgaFduZCwgJm1vdXNlLCAgU1dfTk9STUFMKTsKKyAgICAgIGlmIChoUG9wdXBXbmQpCisJRGVzdHJveVdpbmRvdyhoUG9wdXBXbmQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdNX05DREVTVFJPWToKKyAgICAgIHdpbiA9IChXSU5IRUxQX1dJTkRPVyopIEdldFdpbmRvd0xvbmcoaFduZCwgMCk7CisKKyAgICAgIGlmIChoV25kID09IEdsb2JhbHMuaFBvcHVwV25kKSBHbG9iYWxzLmhQb3B1cFduZCA9IDA7CisKKyAgICAgIGJFeGl0ID0gKEdsb2JhbHMud1ZlcnNpb24gPj0gNCAmJiAhbHN0cmNtcGkod2luLT5scHN6TmFtZSwgIm1haW4iKSk7CisKKyAgICAgIFdJTkhFTFBfRGVsZXRlV2luZG93KHdpbik7CisKKyAgICAgIGlmIChiRXhpdCkgTUFDUk9fRXhpdCgpOworCisgICAgICBpZiAoIUdsb2JhbHMud2luX2xpc3QpCisJUG9zdFF1aXRNZXNzYWdlICgwKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gRGVmV2luZG93UHJvYyAoaFduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBTZXR1cFRleHQKKyAqLworCitzdGF0aWMgVk9JRCBXSU5IRUxQX1NldHVwVGV4dChIV05EIGhXbmQpCit7CisgIEhEQyAgaERjID0gR2V0REMoaFduZCk7CisgIFJFQ1QgcmVjdDsKKyAgU0laRSBuZXdzaXplOworCisgIFNob3dTY3JvbGxCYXIoaFduZCwgU0JfVkVSVCwgRkFMU0UpOworICBpZiAoIVdJTkhFTFBfU3BsaXRMaW5lcyhoV25kLCBOVUxMKSkKKyAgICB7CisgICAgICBTaG93U2Nyb2xsQmFyKGhXbmQsIFNCX1ZFUlQsIFRSVUUpOworICAgICAgR2V0Q2xpZW50UmVjdChoV25kLCAmcmVjdCk7CisKKyAgICAgIFdJTkhFTFBfU3BsaXRMaW5lcyhoV25kLCAmbmV3c2l6ZSk7CisgICAgICBTZXRTY3JvbGxSYW5nZShoV25kLCBTQl9WRVJULCAwLCByZWN0LnRvcCArIG5ld3NpemUuY3kgLSByZWN0LmJvdHRvbSwgVFJVRSk7CisgICAgfQorICBlbHNlIFNldFNjcm9sbFBvcyhoV25kLCBTQl9WRVJULCAwLCBGQUxTRSk7CisKKyAgUmVsZWFzZURDKGhXbmQsIGhEYyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBXSU5IRUxQX1NwbGl0TGluZXMKKyAqLworCitzdGF0aWMgQk9PTCBXSU5IRUxQX1NwbGl0TGluZXMoSFdORCBoV25kLCBMUFNJWkUgbmV3c2l6ZSkKK3sKKyAgV0lOSEVMUF9XSU5ET1cgICAgICp3aW4gPSAoV0lOSEVMUF9XSU5ET1cqKSBHZXRXaW5kb3dMb25nKGhXbmQsIDApOworICBITFBGSUxFX1BBUkFHUkFQSCAgKnA7CisgIFdJTkhFTFBfTElORSAgICAgICoqbGluZSA9ICZ3aW4tPmZpcnN0X2xpbmU7CisgIFdJTkhFTFBfTElORV9QQVJUICoqcGFydCA9IDA7CisgIElOVCAgICAgICAgICAgICAgICAgbGluZV9hc2NlbnQgPSAwOworICBTSVpFICAgICAgICAgICAgICAgIHNwYWNlOworICBSRUNUICAgICAgICAgICAgICAgIHJlY3Q7CisgIEhEQyAgICAgICAgICAgICAgICAgaERjOworCisgIGlmIChuZXdzaXplKSBuZXdzaXplLT5jeCA9IG5ld3NpemUtPmN5ID0gMDsKKworICBpZiAoIXdpbi0+cGFnZSkgcmV0dXJuIFRSVUU7CisKKyAgV0lOSEVMUF9EZWxldGVMaW5lcyh3aW4pOworCisgIEdldENsaWVudFJlY3QoaFduZCwgJnJlY3QpOworCisgIHJlY3QudG9wICAgICs9IElOVEVSTkFMX0JPUkRFUl9XSURUSDsKKyAgcmVjdC5sZWZ0ICAgKz0gSU5URVJOQUxfQk9SREVSX1dJRFRIOworICByZWN0LnJpZ2h0ICAtPSBJTlRFUk5BTF9CT1JERVJfV0lEVEg7CisgIHJlY3QuYm90dG9tIC09IElOVEVSTkFMX0JPUkRFUl9XSURUSDsKKworCisgIHNwYWNlLmN5ID0gcmVjdC50b3A7CisgIHNwYWNlLmN4ID0gcmVjdC5sZWZ0OworCisgIGhEYyA9IEdldERDKGhXbmQpOworCisgIGZvciAocCA9IHdpbi0+cGFnZS0+Zmlyc3RfcGFyYWdyYXBoOyBwOyBwID0gcC0+bmV4dCkKKyAgICB7CisgICAgICBURVhUTUVUUklDIHRtOworICAgICAgU0laRSB0ZXh0c2l6ZSA9IHswLCAwfTsKKyAgICAgIExQQ1NUUiB0ZXh0ICAgID0gcC0+bHBzelRleHQ7CisgICAgICBVSU5UIGxlbiAgICA9IHN0cmxlbih0ZXh0KTsKKyAgICAgIFVJTlQgaW5kZW50ID0gMDsKKworICAgICAgVUlOVCAgd0ZvbnQgICAgICA9IChwLT53Rm9udCA8IHdpbi0+Zm9udHNfbGVuKSA/IHAtPndGb250IDogMDsKKyAgICAgIEJPT0wgIGJVbmRlcmxpbmUgPSBwLT5saW5rICYmICFwLT5saW5rLT5iUG9wdXA7CisgICAgICBIRk9OVCBoRm9udCAgICAgID0gd2luLT5mb250c1t3Rm9udF1bYlVuZGVybGluZSA/IDEgOiAwXTsKKworICAgICAgQ09MT1JSRUYgICAgICAgY29sb3IgPSBSR0IoMCwgMCwgMCk7CisgICAgICBpZiAocC0+bGluaykgICBjb2xvciA9IFJHQigwLCAweDgwLCAwKTsKKyAgICAgIGlmIChwLT5iRGVidWcpIGNvbG9yID0gUkdCKDB4ZmYsIDAsIDApOworCisgICAgICBTZWxlY3RPYmplY3QoaERjLCBoRm9udCk7CisKKyAgICAgIEdldFRleHRNZXRyaWNzIChoRGMsICZ0bSk7CisKKyAgICAgIGlmIChwLT53SW5kZW50KQorCXsKKwkgIGluZGVudCA9IHAtPndJbmRlbnQgKiA1ICogdG0udG1BdmVDaGFyV2lkdGg7CisJICBpZiAoIXBhcnQpCisJICAgIHNwYWNlLmN4ID0gcmVjdC5sZWZ0ICsgaW5kZW50IC0gMiAqIHRtLnRtQXZlQ2hhcldpZHRoOworCX0KKworICAgICAgaWYgKHAtPndWU3BhY2UpCisJeworCSAgcGFydCA9IDA7CisJICBzcGFjZS5jeCA9IHJlY3QubGVmdCArIGluZGVudDsKKwkgIHNwYWNlLmN5ICs9IChwLT53VlNwYWNlIC0gMSkgKiB0bS50bUhlaWdodDsKKwl9CisKKyAgICAgIGlmIChwLT53SFNwYWNlKQorCXsKKwkgIHNwYWNlLmN4ICs9IHAtPndIU3BhY2UgKiAyICogdG0udG1BdmVDaGFyV2lkdGg7CisJfQorCisgICAgICB3aGlsZSAobGVuKQorCXsKKwkgIElOVCBmcmVlX3dpZHRoID0gcmVjdC5yaWdodCAtIChwYXJ0ID8gKCpsaW5lKS0+cmVjdC5yaWdodCA6IHJlY3QubGVmdCkgLSBzcGFjZS5jeDsKKwkgIFVJTlQgbG93ID0gMCwgY3VyciA9IGxlbiwgaGlnaCA9IGxlbiwgdGV4dGxlbjsKKworCSAgaWYgKGZyZWVfd2lkdGggPiAwKQorCSAgICB7CisJICAgICAgd2hpbGUgKDEpCisJCXsKKwkJICBHZXRUZXh0RXh0ZW50UG9pbnQoaERjLCB0ZXh0LCBjdXJyLCAmdGV4dHNpemUpOworCisJCSAgaWYgKHRleHRzaXplLmN4IDw9IGZyZWVfd2lkdGgpIGxvdyA9IGN1cnI7CisJCSAgZWxzZSBoaWdoID0gY3VycjsKKworCQkgIGlmIChoaWdoIDw9IGxvdyArIDEpIGJyZWFrOworCisJCSAgaWYgKHRleHRzaXplLmN4KSBjdXJyID0gKGN1cnIgKiBmcmVlX3dpZHRoKSAvIHRleHRzaXplLmN4OworCQkgIGlmIChjdXJyIDw9IGxvdykgIGN1cnIgPSBsb3cgKyAxOworCQkgIGVsc2UgaWYgKGN1cnIgPj0gaGlnaCkgY3VyciA9IGhpZ2ggLSAxOworCQl9CisJICAgICAgdGV4dGxlbiA9IGxvdzsKKwkgICAgICB3aGlsZSAodGV4dGxlbiAmJiB0ZXh0W3RleHRsZW5dICYmIHRleHRbdGV4dGxlbl0gIT0gJyAnKSB0ZXh0bGVuLS07CisJICAgIH0KKwkgIGlmICghcGFydCAmJiAhdGV4dGxlbikgdGV4dGxlbiA9IE1BWChsb3csIDEpOworCisJICBpZiAoZnJlZV93aWR0aCA8PSAwIHx8ICF0ZXh0bGVuKQorCSAgICB7CisJICAgICAgcGFydCA9IDA7CisJICAgICAgc3BhY2UuY3ggPSByZWN0LmxlZnQgKyBpbmRlbnQ7CisJICAgICAgc3BhY2UuY3ggPSBNSU4oc3BhY2UuY3gsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQgLSAxKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBpZiAoIVdJTkhFTFBfQXBwZW5kVGV4dCgmbGluZSwgJnBhcnQsICZzcGFjZSwgJnRleHRzaXplLAorCQkJCSAgJmxpbmVfYXNjZW50LCB0bS50bUFzY2VudCwKKwkJCQkgIHRleHQsIHRleHRsZW4sIGhGb250LCBjb2xvciwgcC0+bGluaykgfHwKKwkgICAgICAoIW5ld3NpemUgJiYgKCpsaW5lKS0+cmVjdC5ib3R0b20gPiByZWN0LmJvdHRvbSkpCisJICAgIHsKKwkgICAgICBSZWxlYXNlREMoaFduZCwgaERjKTsKKwkgICAgICByZXR1cm4gRkFMU0U7CisJICAgIH0KKworCSAgaWYgKG5ld3NpemUpCisJICAgIG5ld3NpemUtPmN4ID0gTUFYKG5ld3NpemUtPmN4LCAoKmxpbmUpLT5yZWN0LnJpZ2h0ICsgSU5URVJOQUxfQk9SREVSX1dJRFRIKTsKKworCSAgbGVuIC09IHRleHRsZW47CisJICB0ZXh0ICs9IHRleHRsZW47CisJICBpZiAodGV4dFswXSA9PSAnICcpIHRleHQrKywgbGVuLS07CisJfQorICAgIH0KKworICBpZiAobmV3c2l6ZSkKKyAgICBuZXdzaXplLT5jeSA9ICgqbGluZSktPnJlY3QuYm90dG9tICsgSU5URVJOQUxfQk9SREVSX1dJRFRIOworCisgIFJlbGVhc2VEQyhoV25kLCBoRGMpOworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFdJTkhFTFBfQXBwZW5kVGV4dAorICovCisKK3N0YXRpYyBCT09MIFdJTkhFTFBfQXBwZW5kVGV4dChXSU5IRUxQX0xJTkUgKioqbGluZXAsIFdJTkhFTFBfTElORV9QQVJUICoqKnBhcnRwLAorCQkJICAgICAgIExQU0laRSBzcGFjZSwgTFBTSVpFIHRleHRzaXplLAorCQkJICAgICAgIElOVCAqbGluZV9hc2NlbnQsIElOVCBhc2NlbnQsCisJCQkgICAgICAgTFBDU1RSIHRleHQsIFVJTlQgdGV4dGxlbiwKKwkJCSAgICAgICBIRk9OVCBmb250LCBDT0xPUlJFRiBjb2xvciwgSExQRklMRV9MSU5LICpsaW5rKQoreworICBIR0xPQkFMIGhhbmRsZTsKKyAgV0lOSEVMUF9MSU5FICAgICAgKmxpbmU7CisgIFdJTkhFTFBfTElORV9QQVJUICpwYXJ0OworICBMUFNUUiBwdHI7CisKKyAgaWYgKCEqcGFydHApIC8qIE5ldyBsaW5lICovCisgICAgeworICAgICAgKmxpbmVfYXNjZW50ICA9IGFzY2VudDsKKworICAgICAgaGFuZGxlID0gR2xvYmFsQWxsb2MoR01FTV9GSVhFRCwgc2l6ZW9mKFdJTkhFTFBfTElORSkgKyB0ZXh0bGVuICsKKwkJCSAgIChsaW5rID8gbHN0cmxlbihsaW5rLT5scHN6UGF0aCkgKyAxIDogMCkpOworICAgICAgaWYgKCFoYW5kbGUpIHJldHVybiBGQUxTRTsKKyAgICAgIGxpbmUgICAgICAgICAgPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgICAgICBsaW5lLT5uZXh0ICAgID0gMDsKKyAgICAgIHBhcnQgICAgICAgICAgPSAmbGluZS0+Zmlyc3RfcGFydDsKKyAgICAgIHB0ciAgICAgICAgICAgPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgICAgICBwdHIgICAgICAgICAgKz0gc2l6ZW9mKFdJTkhFTFBfTElORSk7CisKKyAgICAgIGxpbmUtPnJlY3QudG9wICAgID0gKCoqbGluZXAgPyAoKipsaW5lcCktPnJlY3QuYm90dG9tIDogMCkgKyBzcGFjZS0+Y3k7CisgICAgICBsaW5lLT5yZWN0LmJvdHRvbSA9IGxpbmUtPnJlY3QudG9wOworICAgICAgbGluZS0+cmVjdC5sZWZ0ICAgPSBzcGFjZS0+Y3g7CisgICAgICBsaW5lLT5yZWN0LnJpZ2h0ICA9IHNwYWNlLT5jeDsKKworICAgICAgaWYgKCoqbGluZXApICpsaW5lcCA9ICYoKipsaW5lcCktPm5leHQ7IAorICAgICAgKipsaW5lcCA9IGxpbmU7CisgICAgICBzcGFjZS0+Y3kgPSAwOworICAgIH0KKyAgZWxzZSAvKiBTYW1lIGxpbmUgKi8KKyAgICB7CisgICAgICBsaW5lID0gKipsaW5lcDsKKworICAgICAgaWYgKCpsaW5lX2FzY2VudCA8IGFzY2VudCkKKwl7CisJICBXSU5IRUxQX0xJTkVfUEFSVCAqcDsKKwkgIGZvciAocCA9ICZsaW5lLT5maXJzdF9wYXJ0OyBwOyBwID0gcC0+bmV4dCkKKwkgICAgeworCSAgICAgIHAtPnJlY3QudG9wICAgICs9IGFzY2VudCAtICpsaW5lX2FzY2VudDsKKwkgICAgICBwLT5yZWN0LmJvdHRvbSArPSBhc2NlbnQgLSAqbGluZV9hc2NlbnQ7CisJICAgIH0KKwkgIGxpbmUtPnJlY3QuYm90dG9tICs9IGFzY2VudCAtICpsaW5lX2FzY2VudDsKKwkgICpsaW5lX2FzY2VudCA9IGFzY2VudDsKKwl9CisKKyAgICAgIGhhbmRsZSA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIHNpemVvZihXSU5IRUxQX0xJTkVfUEFSVCkgKyB0ZXh0bGVuICsKKwkJCSAgIChsaW5rID8gbHN0cmxlbihsaW5rLT5scHN6UGF0aCkgKyAxIDogMCkpOworICAgICAgaWYgKCFoYW5kbGUpIHJldHVybiBGQUxTRTsKKyAgICAgIHBhcnQgICAgPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgICAgICAqKnBhcnRwID0gcGFydDsKKyAgICAgIHB0ciAgICAgPSBHbG9iYWxMb2NrKGhhbmRsZSk7CisgICAgICBwdHIgICAgKz0gc2l6ZW9mKFdJTkhFTFBfTElORV9QQVJUKTsKKyAgICB9CisKKyAgaG1lbWNweShwdHIsIHRleHQsIHRleHRsZW4pOworICBwYXJ0LT5yZWN0LmxlZnQgICAgID0gbGluZS0+cmVjdC5yaWdodCArICgqcGFydHAgPyBzcGFjZS0+Y3ggOiAwKTsKKyAgcGFydC0+cmVjdC5yaWdodCAgICA9IHBhcnQtPnJlY3QubGVmdCArIHRleHRzaXplLT5jeDsKKyAgbGluZS0+cmVjdC5yaWdodCAgICA9IHBhcnQtPnJlY3QucmlnaHQ7CisgIHBhcnQtPnJlY3QudG9wICAgICAgPQorICAgICgoKnBhcnRwKSA/IGxpbmUtPnJlY3QudG9wIDogbGluZS0+cmVjdC5ib3R0b20pICsgKmxpbmVfYXNjZW50IC0gYXNjZW50OworICBwYXJ0LT5yZWN0LmJvdHRvbSAgID0gcGFydC0+cmVjdC50b3AgKyB0ZXh0c2l6ZS0+Y3k7CisgIGxpbmUtPnJlY3QuYm90dG9tICAgPSBNQVgobGluZS0+cmVjdC5ib3R0b20sIHBhcnQtPnJlY3QuYm90dG9tKTsKKyAgcGFydC0+aFNlbGYgICAgICAgICA9IGhhbmRsZTsKKyAgcGFydC0+bHBzVGV4dCAgICAgICA9IHB0cjsKKyAgcGFydC0+d1RleHRMZW4gICAgICA9IHRleHRsZW47CisgIHBhcnQtPmhGb250ICAgICAgICAgPSBmb250OworICBwYXJ0LT5jb2xvciAgICAgICAgID0gY29sb3I7CisgIGlmIChsaW5rKQorICAgIHsKKyAgICAgIHN0cmNweShwdHIgKyB0ZXh0bGVuLCBsaW5rLT5scHN6UGF0aCk7CisgICAgICBwYXJ0LT5saW5rLmxwc3pQYXRoID0gcHRyICsgdGV4dGxlbjsKKyAgICAgIHBhcnQtPmxpbmsubEhhc2ggICAgPSBsaW5rLT5sSGFzaDsKKyAgICAgIHBhcnQtPmxpbmsuYlBvcHVwICAgPSBsaW5rLT5iUG9wdXA7CisgICAgfQorICBlbHNlIHBhcnQtPmxpbmsubHBzelBhdGggPSAwOworCisgIHBhcnQtPm5leHQgICAgICAgICAgPSAwOworICAqcGFydHAgICAgICAgICAgICAgID0gJnBhcnQtPm5leHQ7CisKKyAgc3BhY2UtPmN4ID0gMDsKKworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFdJTkhFTFBfQ2hlY2tQb3B1cAorICovCisKK3N0YXRpYyBWT0lEIFdJTkhFTFBfQ2hlY2tQb3B1cChVSU5UIG1zZykKK3sKKyAgaWYgKCFHbG9iYWxzLmhQb3B1cFduZCkgcmV0dXJuOworCisgIHN3aXRjaCAobXNnKQorICAgIHsKKyAgICBjYXNlIFdNX0NPTU1BTkQ6CisgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX01CVVRUT05ET1dOOgorICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9OQ0xCVVRUT05ET1dOOgorICAgIGNhc2UgV01fTkNNQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX05DUkJVVFRPTkRPV046CisgICAgICBEZXN0cm95V2luZG93KEdsb2JhbHMuaFBvcHVwV25kKTsKKyAgICAgIEdsb2JhbHMuaFBvcHVwV25kID0gMDsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBXSU5IRUxQX0RlbGV0ZUxpbmVzCisgKi8KKworc3RhdGljIFZPSUQgV0lOSEVMUF9EZWxldGVMaW5lcyhXSU5IRUxQX1dJTkRPVyAqd2luKQoreworICBXSU5IRUxQX0xJTkUgICAgICAqbGluZSwgKm5leHRfbGluZTsKKyAgV0lOSEVMUF9MSU5FX1BBUlQgKnBhcnQsICpuZXh0X3BhcnQ7CisgIGZvcihsaW5lID0gd2luLT5maXJzdF9saW5lOyBsaW5lOyBsaW5lID0gbmV4dF9saW5lKQorICAgIHsKKyAgICAgIG5leHRfbGluZSA9IGxpbmUtPm5leHQ7CisgICAgICBmb3IocGFydCA9ICZsaW5lLT5maXJzdF9wYXJ0OyBwYXJ0OyBwYXJ0ID0gbmV4dF9wYXJ0KQorCXsKKwkgIG5leHRfcGFydCA9IHBhcnQtPm5leHQ7CisJICBHbG9iYWxGcmVlKHBhcnQtPmhTZWxmKTsKKwl9CisgICAgfQorICB3aW4tPmZpcnN0X2xpbmUgPSAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgV0lOSEVMUF9EZWxldGVXaW5kb3cKKyAqLworCitzdGF0aWMgVk9JRCBXSU5IRUxQX0RlbGV0ZVdpbmRvdyhXSU5IRUxQX1dJTkRPVyAqd2luKQoreworICBXSU5IRUxQX1dJTkRPVyAqKnc7CisKKyAgZm9yICh3ID0gJkdsb2JhbHMud2luX2xpc3Q7ICp3OyB3ID0gJigqdyktPm5leHQpCisgICAgaWYgKCp3ID09IHdpbikKKyAgICAgIHsKKwkqdyA9IHdpbi0+bmV4dDsKKwlicmVhazsKKyAgICAgIH0KKworICBpZiAod2luLT5oU2hhZG93V25kKSBEZXN0cm95V2luZG93KHdpbi0+aFNoYWRvd1duZCk7CisgIEhMUEZJTEVfRnJlZUhscEZpbGVQYWdlKHdpbi0+cGFnZSk7CisgIFdJTkhFTFBfRGVsZXRlTGluZXMod2luKTsKKyAgR2xvYmFsRnJlZSh3aW4tPmhTZWxmKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgIFdJTkhFTFBfSW5pdEZvbnRzCisgKi8KKworc3RhdGljIFZPSUQgV0lOSEVMUF9Jbml0Rm9udHMoSFdORCBoV25kKQoreworICBXSU5IRUxQX1dJTkRPVyAqd2luID0gKFdJTkhFTFBfV0lORE9XKikgR2V0V2luZG93TG9uZyhoV25kLCAwKTsKKyAgTE9HRk9OVCBsb2dmb250bGlzdFtdID0geworICAgIHstMTAsIDAsIDAsIDAsIDQwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIsICJIZWx2In0sCisgICAgey0xMiwgMCwgMCwgMCwgNzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMiwgIkhlbHYifSwKKyAgICB7LTEyLCAwLCAwLCAwLCA3MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyLCAiSGVsdiJ9LAorICAgIHstMTIsIDAsIDAsIDAsIDQwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIsICJIZWx2In0sCisgICAgey0xMiwgMCwgMCwgMCwgNzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMiwgIkhlbHYifSwKKyAgICB7LTEwLCAwLCAwLCAwLCA3MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyLCAiSGVsdiJ9LAorICAgIHsgLTgsIDAsIDAsIDAsIDQwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIsICJIZWx2In19OworI2RlZmluZSBGT05UU19MRU4gKHNpemVvZihsb2dmb250bGlzdCkvc2l6ZW9mKCpsb2dmb250bGlzdCkpCisKKyAgc3RhdGljIEhGT05UIGZvbnRzW0ZPTlRTX0xFTl1bMl07CisgIHN0YXRpYyBCT09MIGluaXQgPSAwOworCisgIHdpbi0+Zm9udHNfbGVuID0gRk9OVFNfTEVOOworICB3aW4tPmZvbnRzID0gZm9udHM7CisKKyAgaWYgKCFpbml0KQorICAgIHsKKyAgICAgIElOVCBpOworCisgICAgICBmb3IoaSA9IDA7IGkgPCBGT05UU19MRU47IGkrKykKKwl7CisJICBMT0dGT05UIGxvZ2ZvbnQgPSBsb2dmb250bGlzdFtpXTsKKworCSAgZm9udHNbaV1bMF0gPSBDcmVhdGVGb250SW5kaXJlY3QoJmxvZ2ZvbnQpOworCSAgbG9nZm9udC5sZlVuZGVybGluZSA9IDE7CisJICBmb250c1tpXVsxXSA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nZm9udCk7CisJfQorCisgICAgICBpbml0ID0gMTsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICAgICAgICBXSU5IRUxQX01lc3NhZ2VCb3hJRFMKKyAqLworCitJTlQgV0lOSEVMUF9NZXNzYWdlQm94SURTKFVJTlQgaWRzX3RleHQsIFVJTlQgaWRzX3RpdGxlLCBXT1JEIHR5cGUpCit7CisgIENIQVIgdGV4dFtNQVhfU1RSSU5HX0xFTl07CisgIENIQVIgdGl0bGVbTUFYX1NUUklOR19MRU5dOworCisgIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIGlkc190ZXh0LCB0ZXh0LCBzaXplb2YodGV4dCkpOworICBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBpZHNfdGl0bGUsIHRpdGxlLCBzaXplb2YodGl0bGUpKTsKKworICByZXR1cm4oTWVzc2FnZUJveCgwLCB0ZXh0LCB0aXRsZSwgdHlwZSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAgICAgICAgTUFJTl9NZXNzYWdlQm94SURTX3MKKyAqLworCitJTlQgV0lOSEVMUF9NZXNzYWdlQm94SURTX3MoVUlOVCBpZHNfdGV4dCwgTFBDU1RSIHN0ciwgVUlOVCBpZHNfdGl0bGUsIFdPUkQgdHlwZSkKK3sKKyAgQ0hBUiB0ZXh0W01BWF9TVFJJTkdfTEVOXTsKKyAgQ0hBUiB0aXRsZVtNQVhfU1RSSU5HX0xFTl07CisgIENIQVIgbmV3dGV4dFtNQVhfU1RSSU5HX0xFTiArIE1BWF9QQVRITkFNRV9MRU5dOworCisgIExvYWRTdHJpbmcoR2xvYmFscy5oSW5zdGFuY2UsIGlkc190ZXh0LCB0ZXh0LCBzaXplb2YodGV4dCkpOworICBMb2FkU3RyaW5nKEdsb2JhbHMuaEluc3RhbmNlLCBpZHNfdGl0bGUsIHRpdGxlLCBzaXplb2YodGl0bGUpKTsKKyAgd3NwcmludGYobmV3dGV4dCwgdGV4dCwgc3RyKTsKKworICByZXR1cm4oTWVzc2FnZUJveCgwLCBuZXd0ZXh0LCB0aXRsZSwgdHlwZSkpOworfQorCisvKiBMb2NhbCBWYXJpYWJsZXM6ICAgICovCisvKiBjLWZpbGUtc3R5bGU6ICJHTlUiICovCisvKiBFbmQ6ICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9wcm9ncmFtcy93aW5oZWxwL3dpbmhlbHAuaCBiL3Byb2dyYW1zL3dpbmhlbHAvd2luaGVscC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmY2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL3dpbmhlbHAuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIEhlbHAgVmlld2VyCisgKgorICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAorICovCisKKyNkZWZpbmUgTUFYX0xBTkdVQUdFX05VTUJFUiAyNTUKKyNkZWZpbmUgTUFYX1BBVEhOQU1FX0xFTiAgIDEwMjQKKyNkZWZpbmUgTUFYX1NUUklOR19MRU4gICAgICAyNTUKKworI2RlZmluZSBJTlRFUk5BTF9CT1JERVJfV0lEVEggIDUKKyNkZWZpbmUgUE9QVVBfWURJU1RBTkNFICAgICAgIDIwCisjZGVmaW5lIFNIQURPV19EWCAgICAgMjAKKyNkZWZpbmUgU0hBRE9XX0RZICAgICAyMAorI2RlZmluZSBCVVRUT05fQ1ggICAgICA2CisjZGVmaW5lIEJVVFRPTl9DWSAgICAgIDYKKworI2lmbmRlZiBSQ19JTlZPS0VECisKKyNpbmNsdWRlICJobHBmaWxlLmgiCisjaW5jbHVkZSAibWFjcm8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgdGFnSGVscExpbmVQYXJ0Cit7CisgIFJFQ1QgICAgICByZWN0OworICBMUENTVFIgICAgbHBzVGV4dDsKKyAgVUlOVCAgICAgIHdUZXh0TGVuOworICBIRk9OVCAgICAgaEZvbnQ7CisgIENPTE9SUkVGICBjb2xvcjsKKworICBzdHJ1Y3QKKyAgeworICBMUENTVFIgICAgbHBzelBhdGg7CisgIExPTkcgICAgICBsSGFzaDsKKyAgQk9PTCAgICAgIGJQb3B1cDsKKyAgfSAgICAgICAgIGxpbms7CisKKyAgSEdMT0JBTCAgIGhTZWxmOworICBzdHJ1Y3QgdGFnSGVscExpbmVQYXJ0ICpuZXh0OworfSBXSU5IRUxQX0xJTkVfUEFSVDsKKwordHlwZWRlZiBzdHJ1Y3QgdGFnSGVscExpbmUKK3sKKyAgUkVDVCAgICAgICAgICAgICAgcmVjdDsKKyAgV0lOSEVMUF9MSU5FX1BBUlQgZmlyc3RfcGFydDsKKyAgc3RydWN0IHRhZ0hlbHBMaW5lICpuZXh0OworfSBXSU5IRUxQX0xJTkU7CisKK3R5cGVkZWYgc3RydWN0IHRhZ0hlbHBCdXR0b24KK3sKKyAgSFdORCBoV25kOworCisgIExQQ1NUUiBscHN6SUQ7CisgIExQQ1NUUiBscHN6TmFtZTsKKyAgTFBDU1RSIGxwc3pNYWNybzsKKworICBXUEFSQU0gd1BhcmFtOworCisgIFJFQ1QgcmVjdDsKKworICBIR0xPQkFMIGhTZWxmOworICBzdHJ1Y3QgdGFnSGVscEJ1dHRvbiAqbmV4dDsKK30gV0lOSEVMUF9CVVRUT047CisKK3R5cGVkZWYgc3RydWN0IHRhZ1dpbkhlbHAKK3sKKyAgTFBDU1RSIGxwc3pOYW1lOworCisgIFdJTkhFTFBfQlVUVE9OICpmaXJzdF9idXR0b247CisgIEhMUEZJTEVfUEFHRSAgICpwYWdlOworICBXSU5IRUxQX0xJTkUgICAqZmlyc3RfbGluZTsKKworICBIV05EIGhNYWluV25kOworICBIV05EIGhCdXR0b25Cb3hXbmQ7CisgIEhXTkQgaFRleHRXbmQ7CisgIEhXTkQgaFNoYWRvd1duZDsKKworICBIRk9OVCAoKmZvbnRzKVsyXTsKKyAgVUlOVCAgZm9udHNfbGVuOworCisgIEhHTE9CQUwgaFNlbGY7CisgIHN0cnVjdCB0YWdXaW5IZWxwICpuZXh0OworfSBXSU5IRUxQX1dJTkRPVzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgVUlOVCAgIHdWZXJzaW9uOworICBIQU5ETEUgaEluc3RhbmNlOworICBIV05EICAgaFBvcHVwV25kOworICBVSU5UICAgd1N0cmluZ1RhYmxlT2Zmc2V0OworICBXSU5IRUxQX1dJTkRPVyAqYWN0aXZlX3dpbjsKKyAgV0lOSEVMUF9XSU5ET1cgKndpbl9saXN0OworfSBXSU5IRUxQX0dMT0JBTFM7CisKK2V4dGVybiBXSU5IRUxQX0dMT0JBTFMgR2xvYmFsczsKKworVk9JRCBXSU5IRUxQX0NyZWF0ZUhlbHBXaW5kb3coTFBDU1RSLCBMT05HLCBMUENTVFIsIEJPT0wsIEhXTkQsIExQUE9JTlQsIElOVCk7CitJTlQgIFdJTkhFTFBfTWVzc2FnZUJveElEUyhVSU5ULCBVSU5ULCBXT1JEKTsKK0lOVCAgV0lOSEVMUF9NZXNzYWdlQm94SURTX3MoVUlOVCwgTFBDU1RSLCBVSU5ULCBXT1JEKTsKKworZXh0ZXJuIENIQVIgTUFJTl9XSU5fQ0xBU1NfTkFNRVtdOworZXh0ZXJuIENIQVIgQlVUVE9OX0JPWF9XSU5fQ0xBU1NfTkFNRVtdOworZXh0ZXJuIENIQVIgVEVYVF9XSU5fQ0xBU1NfTkFNRVtdOworZXh0ZXJuIENIQVIgU0hBRE9XX1dJTl9DTEFTU19OQU1FW107CitleHRlcm4gQ0hBUiBTVFJJTkdfQlVUVE9OW107CitleHRlcm4gQ0hBUiBTVFJJTkdfTUVOVV9YeFtdOworZXh0ZXJuIENIQVIgU1RSSU5HX0RJQUxPR19URVNUW107CisKKyNkZWZpbmUgU1RSSU5HSUQoaWQpICgweCMjaWQgKyBHbG9iYWxzLndTdHJpbmdUYWJsZU9mZnNldCkKKworI2Vsc2UgLyogUkNfSU5WT0tFRCAqLworCisjZGVmaW5lIFNUUklOR0lEKGlkKSBpZAorCisjZW5kaWYKKworLyogU3RyaW5ndGFibGUgaW5kZXggKi8KKyNkZWZpbmUgSURTX0xBTkdVQUdFX0lEICAgICAgU1RSSU5HSUQoMDApCisjZGVmaW5lIElEU19XSU5FX0hFTFAgICAgICAgIFNUUklOR0lEKDAxKQorI2RlZmluZSBJRFNfRVJST1IgICAgICAgICAgICBTVFJJTkdJRCgwMikKKyNkZWZpbmUgSURTX1dBUk5JTkcgICAgICAgICAgU1RSSU5HSUQoMDMpCisjZGVmaW5lIElEU19JTkZPICAgICAgICAgICAgIFNUUklOR0lEKDA0KQorI2RlZmluZSBJRFNfTk9UX0lNUExFTUVOVEVEICBTVFJJTkdJRCgwNSkKKyNkZWZpbmUgSURTX0hMUEZJTEVfRVJST1JfcyAgU1RSSU5HSUQoMDYpCisjZGVmaW5lIElEU19DT05URU5UUyAgICAgICAgIFNUUklOR0lEKDA3KQorI2RlZmluZSBJRFNfU0VBUkNIICAgICAgICAgICBTVFJJTkdJRCgwOCkKKyNkZWZpbmUgSURTX0JBQ0sgICAgICAgICAgICAgU1RSSU5HSUQoMDkpCisjZGVmaW5lIElEU19ISVNUT1JZICAgICAgICAgIFNUUklOR0lEKDBhKQorI2RlZmluZSBJRFNfQUxMX0ZJTEVTICAgICAgICBTVFJJTkdJRCgwYikKKyNkZWZpbmUgSURTX0hFTFBfRklMRVNfSExQICAgU1RSSU5HSUQoMGMpCisKKy8qIE1lbnUgYEZpbGUnICovCisjZGVmaW5lIFdIX09QRU4gICAgICAgICAgICAgMTEKKyNkZWZpbmUgV0hfUFJJTlQgICAgICAgICAgICAxMgorI2RlZmluZSBXSF9QUklOVEVSX1NFVFVQICAgIDEzCisjZGVmaW5lIFdIX0VYSVQgICAgICAgICAgICAgMTQKKworLyogTWVudSBgRWRpdCcgKi8KKyNkZWZpbmUgV0hfQ09QWV9ESUFMT0cgICAgICAyMQorI2RlZmluZSBXSF9BTk5PVEFURSAgICAgICAgIDIyCisKKy8qIE1lbnUgYEJvb2ttYXJrJyAqLworI2RlZmluZSBXSF9CT09LTUFSS19ERUZJTkUgIDMxCisKKy8qIE1lbnUgYEhlbHAnICovCisjZGVmaW5lIFdIX0hFTFBfT05fSEVMUCAgICAgNDEKKyNkZWZpbmUgV0hfSEVMUF9PTl9UT1AgICAgICA0MgorI2RlZmluZSBXSF9BQk9VVCAgICAgICAgICAgIDQzCisjZGVmaW5lIFdIX0FCT1VUX1dJTkUgICAgICAgNDQKKworLyogQnV0dG9ucyAqLworI2RlZmluZSBXSF9GSVJTVF9CVVRUT04gICAgIDUwMAorCisvKiBMb2NhbCBWYXJpYWJsZXM6ICAgICovCisvKiBjLWZpbGUtc3R5bGU6ICJHTlUiICovCisvKiBFbmQ6ICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9yZXNvdXJjZXMvVE9ETyBiL3Jlc291cmNlcy9UT0RPCmluZGV4IGVmZjg1Y2UuLmRiZDdjMjYgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9UT0RPCisrKyBiL3Jlc291cmNlcy9UT0RPCkBAIC00Niw5ICs0NiwyOSBAQAogKiBFbmdsaXNoIAogKiBHZXJtYW4KICogRnJlbmNoCisqIEl0YWxpYW4KKyogS29yZWFuCiAuLi50byBiZSBjb250aW51ZWQuLi4uLi4KIAogVGhhbmsgeW91LgogCiBBbGJyZWNodCBLbGVpbmUKIGtsZWluZUBhay5zYXguZGUKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKzE5OTYsIE1heSwgMm5kCisKK1N1YmplY3QgQ2hvb3NlRm9udAorCitKdXN0IGxpa2UgQ2hvb3NlQ29sb3IsIHBsZWFzZSBjb3B5IENIT1NFRk9OVCBmcm9tIHN5c3Jlc19FTi5yYywKK2FuZCB0cmFuc2xhdGUgaXQgdG8geW91ciBsYW5ndWFnZS4gSXQncyBva2F5IGZvcjoKKworKiBFbmdsaXNoCisqIEdlcm1hbgorLi4uLi4KKworVGhhbmsgeW91LgorCitBbGJyZWNodCBLbGVpbmUKK2tsZWluZUBhay5zYXguZGUKKwpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19Dei5yYyBiL3Jlc291cmNlcy9zeXNyZXNfQ3oucmMKaW5kZXggZTcxMjlkNi4uOWRkYmMxYyAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19Dei5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0N6LnJjCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICAgICAgUFVTSEJVVFRPTiAiJk5lIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIk8gYXBsaWthY2kgJXMiCiBGT05UIDEwLCAiU3lzdGVtIgogewotIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgOTEsIDE4MCwgNDAsIDE0Ci0gQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDE0MAotIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMTMwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgREVGUFVTSEJVVFRPTiAiT0siLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAyMDAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKICBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKIH0KIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19EYS5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRGEucmMKaW5kZXggOWE3YzcwMC4uOTk0MjVjNSAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19EYS5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0RhLnJjCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICAgICAgUFVTSEJVVFRPTiAiJk5laiIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogRU5ECiAKLVNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjAwCitTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgNTAsIDQ0LCAyMjMsIDI3MAogU1RZTEUgRFNfTE9DQUxFRElUIHwgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJPbSAlcyIKIEZPTlQgMTAsICJTeXN0ZW0iCiB7Ci0gREVGUFVTSEJVVFRPTiAiT2siLCAxLCA5MSwgMTgwLCA0MCwgMTQKLSBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMTQwCi0gTFRFWFQgIlRla3N0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMTMwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgREVGUFVTSEJVVFRPTiAiT2siLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRla3N0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMjAwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCiAgSUNPTiAiIiwgMTA4OCwgMTk1LCAxMCwgMTgsIDIwCiB9CiAKZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9zeXNyZXNfRGUucmMgYi9yZXNvdXJjZXMvc3lzcmVzX0RlLnJjCmluZGV4IGIyMGY2YjguLjEzZTVjMWEgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9zeXNyZXNfRGUucmMKKysrIGIvcmVzb3VyY2VzL3N5c3Jlc19EZS5yYwpAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgICAgIFBVU0hCVVRUT04gIiZOZWluIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkluZm8g/GJlciAlcyIKIEZPTlQgMTAsICJTeXN0ZW0iCiB7Ci0gREVGUFVTSEJVVFRPTiAiT0siLCAxLCA5MSwgMTgwLCA0MCwgMTQKLSBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMTQwCi0gTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAxMzAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDkxLCAyNTAsIDQwLCAxNAorIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAyMTAKKyBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAyMDAsIDIwMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAogIElDT04gIiIsIDEwODgsIDE5NSwgMTAsIDE4LCAyMAogfQogCkBAIC0xMzIsMTUgKzEzMiwzMiBAQAogfQogCiAKLUNIT09TRV9GT05UIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMjY0LCAxMzQKK0NIT09TRV9GT05UIERJQUxPRyBESVNDQVJEQUJMRSAgMTMsIDU0LCAyNjQsIDE0NwogU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkZvbnQiCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICJGb250OiIsIDEwODgsIDYsIDYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkKLSBERUZQVVNIQlVUVE9OICJPayIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQWJicmVjaGVuIiwgMiwgMjA2LCAyNCwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyAgICBMVEVYVCAgICAgICAgICAgIlNjaHJpZnQmYXJ0OiIsMTA4OCAsNiwzLDQwLDkKKyAgICBDT01CT0JPWCAgICAgICAgMTEzNiAsNiwxMyw5NCw1NCwgIENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8CisgICAgICAgICAgICAgICAgICAgIENCU19BVVRPSFNDUk9MTCB8IENCU19TT1JUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfCBDQlNfU0lNUExFCisgICAgTFRFWFQgICAgICAgICAgICJTY2hyaWZ0JnN0aWw6IiwxMDg5ICwxMDgsMyw0NCw5CisgICAgQ09NQk9CT1ggICAgICAgIDExMzcsMTA4LDEzLDY0LDU0LCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfSEFTU1RSSU5HUyB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfAorICAgICAgICAgICAgICAgICAgICBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCB8IENCU19TSU1QTEUKKyAgICBMVEVYVCAgICAgICAgICAgIlNjaHJpZnQmZ3L232U6IiwxMDkwLDE3OSwzLDMwLDkKKyAgICBDT01CT0JPWCAgICAgICAgMTEzOCwxNzksMTMsMzIsNTQsIENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8CisgICAgICAgICAgICAgICAgICAgIFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NJTVBMRSB8IENCU19TT1JUCisgICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywyMTgsNiw0MCwxNCxXU19HUk9VUAorICAgIFBVU0hCVVRUT04gICAgICAiQWJicmVjaGVuIixJRENBTkNFTCwyMTgsMjMsNDAsMTQsV1NfR1JPVVAKKyAgICBQVVNIQlVUVE9OICAgICAgIiZadXdlaXNlbiIsIDEwMjYsMjE4LDQwLDQwLDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICImSGlsZmUiICwgMTAzOCwyMTgsNTcsNDAsMTQsV1NfR1JPVVAKKyAgICBHUk9VUEJPWCAgICAgICAgIkRhcnN0ZWxsdW5nIiwxMDcyLDYsNzIsODQsMzQsV1NfR1JPVVAKKyAgICBDSEVDS0JPWAkgICAgIiZEdXJjaGdlc3RyaWNoZW4iLCAxMDQwLCAxMCw4Miw1MCwxMCwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorICAgIENIRUNLQk9YIAkgICAgIiZVbnRlcnN0cmljaGVuIiwgMTA0MSwgMTAsOTQsNTAsMTAsIEJTX0FVVE9DSEVDS0JPWCAKKyAgICBMVEVYVCAgICAgICAgICAgIiZGYXJiZToiLCAxMDkxICw2LDExMCwzMCw5CisgICAgQ09NQk9CT1ggICAgICAgIDExMzksNiwxMjAsODQsMTAwLENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfSEFTU1RSSU5HUyB8CisJCSAgICBDQlNfQVVUT0hTQ1JPTEwgfCAgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyAgICBHUk9VUEJPWCAgICAgICAgIk11c3RlciIsMTA3Myw5OCw3MiwxNjAsNDksV1NfR1JPVVAKKyAgICBDVEVYVCAgICAgICAgICAgIkFhQmJZeVp6IiwxMDkzLDEwNCw4MSwxNDksMzcsU1NfTk9QUkVGSVggfCBXU19WSVNJQkxFCiB9CiAKIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19Fbi5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRW4ucmMKaW5kZXggYWJhNjc5YS4uZWJlOGRiYSAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19Fbi5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0VuLnJjCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICAgICAgUFVTSEJVVFRPTiAiJk5vIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkFib3V0ICVzIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKLSBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDkxLCAxODAsIDQwLCAxNAotIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAxNDAKLSBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAyMDAsIDEzMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgOTEsIDI1MCwgNDAsIDE0CisgQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDIxMAorIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMjAwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCiAgSUNPTiAiIiwgMTA4OCwgMTk1LCAxMCwgMTgsIDIwCiB9CiAKQEAgLTEzMiwxNSArMTMyLDMyIEBACiB9CiAKIAotQ0hPT1NFX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDEzNAorQ0hPT1NFX0ZPTlQgRElBTE9HIERJU0NBUkRBQkxFICAxMywgNTQsIDI2NCwgMTQ3CiBTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiRm9udCIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIkZvbnQ6IiwgMTA4OCwgNiwgNiwgNDAsIDkKLSBMVEVYVCAiIiwgMTA4OSwgNjAsIDYsIDE1MCwgOQotIERFRlBVU0hCVVRUT04gIk9rIiwgMSwgMjA2LCA2LCA1NiwgMTQsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKLSBQVVNIQlVUVE9OICJDYW5jZWwiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorICAgIExURVhUICAgICAgICAgICAiJkZvbnQ6IiwxMDg4ICw2LDMsNDAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM2ICw2LDEzLDk0LDU0LCAgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwKKyAgICAgICAgICAgICAgICAgICAgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX1NPUlQgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCB8IENCU19TSU1QTEUKKyAgICBMVEVYVCAgICAgICAgICAgIkZvbnQgU3QmeWxlOiIsMTA4OSAsMTA4LDMsNDQsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM3LDEwOCwxMyw2NCw1NCwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwKKyAgICAgICAgICAgICAgICAgICAgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfCBDQlNfU0lNUExFCisgICAgTFRFWFQgICAgICAgICAgICImU2l6ZToiLDEwOTAsMTc5LDMsMzAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM4LDE3OSwxMywzMiw1NCwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwKKyAgICAgICAgICAgICAgICAgICAgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfCBDQlNfU0lNUExFIHwgQ0JTX1NPUlQKKyAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDIxOCw2LDQwLDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICJDYW5jZWwiLElEQ0FOQ0VMLDIxOCwyMyw0MCwxNCxXU19HUk9VUAorICAgIFBVU0hCVVRUT04gICAgICAiJkFwcGx5IiwgMTAyNiwyMTgsNDAsNDAsMTQsV1NfR1JPVVAKKyAgICBQVVNIQlVUVE9OICAgICAgIiZIZWxwIiAsIDEwMzgsMjE4LDU3LDQwLDE0LFdTX0dST1VQCisgICAgR1JPVVBCT1ggICAgICAgICJFZmZlY3RzIiwxMDcyLDYsNzIsODQsMzQsV1NfR1JPVVAKKyAgICBDSEVDS0JPWAkgICAgIlN0cmkma2VvdXQiLCAxMDQwLCAxMCw4Miw1MCwxMCwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorICAgIENIRUNLQk9YIAkgICAgIiZVbmRlcmxpbmUiLCAxMDQxLCAxMCw5NCw1MCwxMCwgQlNfQVVUT0NIRUNLQk9YIAorICAgIExURVhUICAgICAgICAgICAiJkNvbG9yOiIsIDEwOTEgLDYsMTEwLDMwLDkKKyAgICBDT01CT0JPWCAgICAgICAgMTEzOSw2LDEyMCw4NCwxMDAsQ0JTX0RST1BET1dOTElTVCB8IENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTIHwKKwkJICAgIENCU19BVVRPSFNDUk9MTCB8ICBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAorICAgIEdST1VQQk9YICAgICAgICAiU2FtcGxlIiwxMDczLDk4LDcyLDE2MCw0OSxXU19HUk9VUAorICAgIENURVhUICAgICAgICAgICAiQWFCYll5WnoiLDEwOTMsMTA0LDgxLDE0OSwzNyxTU19OT1BSRUZJWCB8IFdTX1ZJU0lCTEUKIH0KIAogCmRpZmYgLS1naXQgYS9yZXNvdXJjZXMvc3lzcmVzX0VvLnJjIGIvcmVzb3VyY2VzL3N5c3Jlc19Fby5yYwppbmRleCBkYTIyM2VlLi5iYjNkN2QwIDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvc3lzcmVzX0VvLnJjCisrKyBiL3Jlc291cmNlcy9zeXNyZXNfRW8ucmMKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgICAgICBQVVNIQlVUVE9OICJOJmUiLCA3LCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKIEVORAogCi1TSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgNTAsIDQ0LCAyMjMsIDIwMAorU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyNzAKIFNUWUxFIERTX0xPQ0FMRURJVCB8IERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQogQ0FQVElPTiAiUHJpICVzIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKLSBERUZQVVNIQlVUVE9OICJFbm9yZGUiLCAxLCA5MSwgMTgwLCA0MCwgMTQKLSBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMTQwCi0gTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAxMzAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBERUZQVVNIQlVUVE9OICJFbm9yZGUiLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAyMDAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKICBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKIH0KIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19Fcy5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRXMucmMKaW5kZXggMjM1ZmRkOS4uNzM4MDg5NCAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19Fcy5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0VzLnJjCkBAIC0yOCwxNCArMjgsMTQgQEAKICAgICAgICAgUFVTSEJVVFRPTiAiJk5vIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkFjZXJjYSBkZSAlcyIKIEZPTlQgMTAsICJTeXN0ZW0iCiB7Ci0gREVGUFVTSEJVVFRPTiAiQWNlcHRhciIsIDEsIDkxLCAxODAsIDQwLCAxNAotIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAxNDAKLSBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAyMDAsIDEzMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIERFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAyMDAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKICBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKIH0KIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19GaS5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRmkucmMKaW5kZXggNDQ3ZjQyNi4uOGI1ZGRjMCAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19GaS5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0ZpLnJjCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICAgICAgUFVTSEJVVFRPTiAiJkVpIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIlRpZXRvamE6ICVzIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKLSBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDkxLCAxODAsIDQwLCAxNAotIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAxNDAKLSBMVEVYVCAiVGVrc3RpIiwgMTAwLCAxMSwgNDAsIDIwMCwgMTMwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgREVGUFVTSEJVVFRPTiAiT0siLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRla3N0aSIsIDEwMCwgMTEsIDQwLCAyMDAsIDIwMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAogIElDT04gIiIsIDEwODgsIDE5NSwgMTAsIDE4LCAyMAogfQogCmRpZmYgLS1naXQgYS9yZXNvdXJjZXMvc3lzcmVzX0ZyLnJjIGIvcmVzb3VyY2VzL3N5c3Jlc19Gci5yYwppbmRleCAzZGY0MjY1Li4xMzg0M2UxIDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvc3lzcmVzX0ZyLnJjCisrKyBiL3Jlc291cmNlcy9zeXNyZXNfRnIucmMKQEAgLTI4LDE0ICsyOCwxNCBAQAogICAgICAgICBQVVNIQlVUVE9OICImTm9uIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjEzLCAxNzkKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIkEgcHJvcG9zIGRlICVzIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKLSBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDg2LCAxNjAsIDQwLCAxNAotIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjA1LCAxMjAKLSBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAxOTAsIDExMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAorIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgOTEsIDI1MCwgNDAsIDE0CisgQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDIxMAorIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMjAwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCiAgSUNPTiAiIiwgMTA4OCwgMTg1LCAxMCwgMTgsIDIwCiB9CiAKZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9zeXNyZXNfSXQucmMgYi9yZXNvdXJjZXMvc3lzcmVzX0l0LnJjCmluZGV4IDVmYWIwMGEuLjM1YTU2MjYgMTAwNjQ0Ci0tLSBhL3Jlc291cmNlcy9zeXNyZXNfSXQucmMKKysrIGIvcmVzb3VyY2VzL3N5c3Jlc19JdC5yYwpAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgICAgIFBVU0hCVVRUT04gIiZObyIsIDcsIDMwNCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogRU5ECiAKLVNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjAwCitTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgNTAsIDQ0LCAyMjMsIDI3MAogU1RZTEUgRFNfTE9DQUxFRElUIHwgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJJbmZvcm1hemlvbmkgc3UgJXMiCiBGT05UIDEwLCAiU3lzdGVtIgogewotIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgOTEsIDE4MCwgNDAsIDE0Ci0gQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDE0MAotIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMTMwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgREVGUFVTSEJVVFRPTiAiT0siLCAxLCA5MSwgMjUwLCA0MCwgMTQKKyBDT05UUk9MICIiLCAtMSwgIlNUQVRJQyIsIFNTX0JMQUNLRlJBTUUgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19ESVNBQkxFRCwgNCwgMzUsIDIxNSwgMjEwCisgTFRFWFQgIlRleHQiLCAxMDAsIDExLCA0MCwgMjAwLCAyMDAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKICBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKIH0KIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19Lby5yYyBiL3Jlc291cmNlcy9zeXNyZXNfS28ucmMKaW5kZXggYjY1ODhhNS4uMjRkZmI0ZSAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19Lby5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0tvLnJjCkBAIC0yNywxNCArMjcsMTQgQEAKIAlQVVNIQlVUVE9OICK+xrTPv8AoJk4pIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIiVzv6EgsPzHz7+pIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKLSBERUZQVVNIQlVUVE9OICK9wsDOIiwgMSwgOTEsIDE4MCwgNDAsIDE0Ci0gQ09OVFJPTCAiIiwgLTEsICJTVEFUSUMiLCBTU19CTEFDS0ZSQU1FIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfRElTQUJMRUQsIDQsIDM1LCAyMTUsIDE0MAotIExURVhUICJUZXh0IiwgMTAwLCAxMSwgNDAsIDIwMCwgMTMwLCBTU19OT1BSRUZJWCB8IFdTX0dST1VQCisgREVGUFVTSEJVVFRPTiAivcLAziIsIDEsIDkxLCAyNTAsIDQwLCAxNAorIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAyMTAKKyBMVEVYVCAiVGV4dCIsIDEwMCwgMTEsIDQwLCAyMDAsIDIwMCwgU1NfTk9QUkVGSVggfCBXU19HUk9VUAogIElDT04gIiIsIDEwODgsIDE5NSwgMTAsIDE4LCAyMAogfQogCmRpZmYgLS1naXQgYS9yZXNvdXJjZXMvc3lzcmVzX05vLnJjIGIvcmVzb3VyY2VzL3N5c3Jlc19Oby5yYwppbmRleCBmMjA4Zjc1Li40MTkyMTQyIDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvc3lzcmVzX05vLnJjCisrKyBiL3Jlc291cmNlcy9zeXNyZXNfTm8ucmMKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgICAgICBQVVNIQlVUVE9OICImTmVpIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiBFTkQKIAotU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDUwLCA0NCwgMjIzLCAyMDAKK1NIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSA1MCwgNDQsIDIyMywgMjcwCiBTVFlMRSBEU19MT0NBTEVESVQgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKIENBUFRJT04gIk9tICVzIgogRk9OVCAxMCwgIlN5c3RlbSIKIHsKLSBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDkxLCAxODAsIDQwLCAxNAotIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAxNDAKLSBMVEVYVCAiVGVrc3QiLCAxMDAsIDExLCA0MCwgMjAwLCAxMzAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKKyBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDkxLCAyNTAsIDQwLCAxNAorIENPTlRST0wgIiIsIC0xLCAiU1RBVElDIiwgU1NfQkxBQ0tGUkFNRSB8IFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0RJU0FCTEVELCA0LCAzNSwgMjE1LCAyMTAKKyBMVEVYVCAiVGVrc3QiLCAxMDAsIDExLCA0MCwgMjAwLCAyMDAsIFNTX05PUFJFRklYIHwgV1NfR1JPVVAKICBJQ09OICIiLCAxMDg4LCAxOTUsIDEwLCAxOCwgMjAKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQuYyBiL3Rvb2xzL2J1aWxkLmMKaW5kZXggYWMyYWYzMi4uOGRlODU0NSAxMDA2NDQKLS0tIGEvdG9vbHMvYnVpbGQuYworKysgYi90b29scy9idWlsZC5jCkBAIC0xMDU3LDExICsxMDU3LDEzIEBACiAgICAgICAgICAgICBwcmludGYoICIvKiAlcy4lZCAqL1xuIiwgRExMTmFtZSwgaSk7CiAgICAgICAgICAgICBwcmludGYoICJcdHB1c2h3ICUlYnBcbiIgKTsKICAgICAgICAgICAgIHByaW50ZiggIlx0cHVzaGwgJCIgUFJFRklYICIlc1xuIiwgZmRwLT5pbnRlcm5hbF9uYW1lICk7Ci0gICAgICAgICAgICBwcmludGYoICJcdGxjYWxsICQweCUwNHgsICQiIFBSRUZJWCAiQ2FsbEZyb20xNl8lc18lc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgV0lORV9DT0RFX1NFTEVDVE9SLAorICAgICAgICAgICAgLyogRnJlZUJTRCBkb2VzIG5vdCB1bmRlcnN0YW5kIGxjYWxsLCBzbyBkbyBpdCB0aGUgaGFyZCB3YXkgKi8KKyAgICAgICAgICAgIHByaW50ZiggIlx0LmJ5dGUgMHg5YSAvKmxjYWxsKi9cbiIgKTsKKyAgICAgICAgICAgIHByaW50ZiggIlx0LmxvbmcgIiBQUkVGSVggIkNhbGxGcm9tMTZfJXNfJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIChvZHAtPnR5cGUgPT0gVFlQRV9SRUdJU1RFUikgPyAicmVncyIgOgogICAgICAgICAgICAgICAgICAgICAob2RwLT50eXBlID09IFRZUEVfUEFTQ0FMKSA/ICJsb25nIiA6ICJ3b3JkIiwKICAgICAgICAgICAgICAgICAgICAgZmRwLT5hcmdfdHlwZXMgKTsKKyAgICAgICAgICAgIHByaW50ZiggIlx0LndvcmQgMHglMDR4XG4iLCBXSU5FX0NPREVfU0VMRUNUT1IgKTsKICAgICAgICAgICAgIHByaW50ZiggIlx0bm9wXG4iICk7CiAgICAgICAgICAgICBwcmludGYoICJcdG5vcFxuXG4iICk7CiAgICAgICAgICAgICBvZHAtPm9mZnNldCA9IGNvZGVfb2Zmc2V0OwpAQCAtMTQxMSw4ICsxNDEzLDExIEBACiAKICAgICAvKiBTYXZlIDE2LWJpdCBkcyBhbmQgZXMgKi8KIAotICAgIHByaW50ZiggIlx0bW92dyAlJWRzLC0xMCglJWVicClcbiIgKTsKLSAgICBwcmludGYoICJcdG1vdncgJSVlcywtNiglJWVicClcbiIgKTsKKyAgICAvKiBTdHVwaWQgRnJlZUJTRCBhc3NlbWJsZXIgZG9lc24ndCBrbm93IHRoZXNlIGVpdGhlciAqLworICAgIC8qIHByaW50ZiggIlx0bW92dyAlJWRzLC0xMCglJWVicClcbiIgKTsgKi8KKyAgICBwcmludGYoICJcdC5ieXRlIDB4NjYsMHg4YywweDVkLDB4ZjZcbiIgKTsKKyAgICAvKiBwcmludGYoICJcdG1vdncgJSVlcywtNiglJWVicClcbiIgKTsgKi8KKyAgICBwcmludGYoICJcdC5ieXRlIDB4NjYsMHg4YywweDQ1LDB4ZmFcbiIgKTsKIAogICAgIC8qIFJlc3RvcmUgMzItYml0IGRzIGFuZCBlcyAqLwogCmRpZmYgLS1naXQgYS93aW4zMi9hZHZhcGkuYyBiL3dpbjMyL2FkdmFwaS5jCmluZGV4IGM2ZmMxMzcuLjRiMzdkNTUgMTAwNjQ0Ci0tLSBhL3dpbjMyL2FkdmFwaS5jCisrKyBiL3dpbjMyL2FkdmFwaS5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiAgICAgICAgICAgR2V0VXNlck5hbWVBICAgW0FEVkFQSTMyLjY3XQogICovCiAKLUJPT0wgV0lOQVBJIEdldFVzZXJOYW1lQShMUFNUUiBscHN6TmFtZSwgTFBEV09SRCBscFNpemUpCitCT09MIEdldFVzZXJOYW1lQShMUFNUUiBscHN6TmFtZSwgTFBEV09SRCBscFNpemUpCiB7CiAgIHNpemVfdCBsZW47CiAgIGNoYXIgKm5hbWU7CmRpZmYgLS1naXQgYS93aW4zMi9jdXJzb3JpY29uMzIuYyBiL3dpbjMyL2N1cnNvcmljb24zMi5jCmluZGV4IGU1YTEwMmQuLmY1ZDgyNjIgMTAwNjQ0Ci0tLSBhL3dpbjMyL2N1cnNvcmljb24zMi5jCisrKyBiL3dpbjMyL2N1cnNvcmljb24zMi5jCkBAIC0zNjgsNyArMzY4LDcgQEAKICAgICBzaXplWG9yID0gYm1wWG9yLT5iaXRtYXAuYm1IZWlnaHQgKiBibXBYb3ItPmJpdG1hcC5ibVdpZHRoQnl0ZXM7CiAgICAgc2l6ZUFuZCA9IGJtcEFuZC0+Yml0bWFwLmJtSGVpZ2h0ICogYm1wQW5kLT5iaXRtYXAuYm1XaWR0aEJ5dGVzOwogCi0gICAgaWYgKCEoaFJlcyA9IEdsb2JhbEFsbG9jKCBHTUVNX01PVkVBQkxFLAorICAgIGlmICghKGhSZXMgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX01PVkVBQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ1VSU09SSUNPTklORk8pICsgc2l6ZVhvciArIHNpemVBbmQpKSkKICAgICB7CiAgICAgICAgIERlbGV0ZU9iamVjdCggaFhvckJpdHMgKTsKQEAgLTM3OSw3ICszNzksNyBAQAogICAgIC8qIE1ha2UgaXQgb3duZWQgYnkgdGhlIG1vZHVsZSAqLwogICAgIGlmIChoSW5zdGFuY2UpIEZhclNldE93bmVyKCBoUmVzLCAoV09SRCkoRFdPUkQpR2V0RXhlUHRyKGhJbnN0YW5jZSkgKTsKIAotICAgIGluZm8gPSAoQ1VSU09SSUNPTklORk8gKilHbG9iYWxMb2NrKCBoUmVzICk7CisgICAgaW5mbyA9IChDVVJTT1JJQ09OSU5GTyAqKUdsb2JhbExvY2sxNiggaFJlcyApOwogICAgIGluZm8tPnB0SG90U3BvdC54ICAgPSBob3RzcG90Lng7CiAgICAgaW5mby0+cHRIb3RTcG90LnkgICA9IGhvdHNwb3QueTsKICAgICBpbmZvLT5uV2lkdGggICAgICAgID0gYm1wWG9yLT5iaXRtYXAuYm1XaWR0aDsKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgIEdldEJpdG1hcEJpdHMoIGhYb3JCaXRzLCBzaXplWG9yLCAoY2hhciAqKShpbmZvICsgMSkgKyBzaXplQW5kICk7CiAgICAgRGVsZXRlT2JqZWN0KCBoWG9yQml0cyApOwogICAgIERlbGV0ZU9iamVjdCggaEFuZEJpdHMgKTsKLSAgICBHbG9iYWxVbmxvY2soIGhSZXMgKTsKKyAgICBHbG9iYWxVbmxvY2sxNiggaFJlcyApOwogICAgIHJldHVybiBoUmVzOwogfQogCmRpZmYgLS1naXQgYS93aW4zMi9lbnZpcm9ubWVudC5jIGIvd2luMzIvZW52aXJvbm1lbnQuYwppbmRleCBlZmY5MDUwLi41N2U2YjAwIDEwMDY0NAotLS0gYS93aW4zMi9lbnZpcm9ubWVudC5jCisrKyBiL3dpbjMyL2Vudmlyb25tZW50LmMKQEAgLTIzLDcgKzIzLDcgQEAKIHsKICAgICBzdGF0aWMgY2hhciBidWZmZXJbMjU2XTsKICAgICBjaGFyICpjcDsKLSAgICBQREIgKnBkYiA9IChQREIgKilHbG9iYWxMb2NrKCBHZXRDdXJyZW50UERCKCkgKTsKKyAgICBQREIgKnBkYiA9IChQREIgKilHbG9iYWxMb2NrMTYoIEdldEN1cnJlbnRQREIoKSApOwogCiAjaWZuZGVmIFdJTkVMSUIKICAgICBzdHJjcHkoYnVmZmVyLCBNT0RVTEVfR2V0TW9kdWxlTmFtZSggR2V0RXhlUHRyKEdldEN1cnJlbnRUYXNrKCkpICkgKTsKZGlmZiAtLWdpdCBhL3dpbjMyL2V4Y2VwdC5jIGIvd2luMzIvZXhjZXB0LmMKaW5kZXggOTNkZTAyZi4uZTk4Y2U0YSAxMDA2NDQKLS0tIGEvd2luMzIvZXhjZXB0LmMKKysrIGIvd2luMzIvZXhjZXB0LmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogICogIGZhbmN5IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gSXQgZG9lcyBub3RoaW5nIG5vdyEKICAqLwogIAotRFdPUkQgV0lOQVBJIFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcihQRVhDRVBUSU9OX1BPSU5URVJTIGVwb2ludGVycykKK0RXT1JEIFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcihQRVhDRVBUSU9OX1BPSU5URVJTIGVwb2ludGVycykKIHsKICAgIFBFWENFUFRJT05fUkVDT1JEIHBSZWNvcmQ7CiAgICBQQ09OVEVYVCAgICAgICAgICBwQ29udGV4dDsKQEAgLTIwNiw3ICsyMDYsNyBAQAogICoKICAqLwogICAKLVdJTkFQSSBMUFRPUF9MRVZFTF9FWENFUFRJT05fRklMVEVSIAorTFBUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUiAKICAgICAgICAgU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKExQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIgZWZpbHRlcikKIHsgIAogICAgcFRvcEV4Y0hhbmRsZXI9ZWZpbHRlcjsKZGlmZiAtLWdpdCBhL3dpbjMyL2ZpbGUuYyBiL3dpbjMyL2ZpbGUuYwppbmRleCBhMTRkNmRiLi5hYjMzODUzIDEwMDY0NAotLS0gYS93aW4zMi9maWxlLmMKKysrIGIvd2luMzIvZmlsZS5jCkBAIC0zOCw3ICszOCw3IEBACiAgKiAgICAgICAgICAgT3BlbkZpbGVNYXBwaW5nQSAgICAgICAgICAgICAoS0VSTkVMMzIuMzk3KQogICoKICAqLwotV0lOQVBJIEhBTkRMRTMyIE9wZW5GaWxlTWFwcGluZyhEV09SRCBhY2Nlc3MsIEJPT0wgaW5oZXJpdCxjb25zdCBjaGFyICpmbmFtZSkKK0hBTkRMRTMyIE9wZW5GaWxlTWFwcGluZyhEV09SRCBhY2Nlc3MsIEJPT0wgaW5oZXJpdCxjb25zdCBjaGFyICpmbmFtZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3LDcgKzQ3LDcgQEAKICAqCiAgKi8KIGludCBUcmFuc2xhdGVQcm90ZWN0aW9uRmxhZ3MoRFdPUkQpOwotV0lOQVBJIEhBTkRMRTMyIENyZWF0ZUZpbGVNYXBwaW5nKEhBTkRMRTMyIGgsU0VDVVJJVFlfQVRUUklCVVRFUyAqYXRzLAorSEFORExFMzIgQ3JlYXRlRmlsZU1hcHBpbmcoSEFORExFMzIgaCxTRUNVUklUWV9BVFRSSUJVVEVTICphdHMsCiAgIERXT1JEIHBvdCwgIERXT1JEIHNoLCAgRFdPUkQgaGxvdywgIGNvbnN0IGNoYXIgKiBscE5hbWUgKQogewogICAgIEZJTEVfT0JKRUNUICpmaWxlX29iajsKQEAgLTk0LDggKzk0LDggQEAKICAqICAgICAgICAgICBNYXBWaWV3T2ZGaWxlRXggICAgICAgICAgICAgICAgICAoS0VSTkVMMzIuMzg2KQogICoKICAqLwotV0lOQVBJIHZvaWQgKk1hcFZpZXdPZkZpbGVFeChIQU5ETEUzMiBoYW5kbGUsIERXT1JEIGFjY2VzcywgRFdPUkQgb2ZmaGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIG9mZmxvLCBEV09SRCBzaXplLCBEV09SRCBzdCkKK3ZvaWQgKk1hcFZpZXdPZkZpbGVFeChIQU5ETEUzMiBoYW5kbGUsIERXT1JEIGFjY2VzcywgRFdPUkQgb2ZmaGksCisgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgb2ZmbG8sIERXT1JEIHNpemUsIERXT1JEIHN0KQogewogICAgIGlmICghc2l6ZSkgc2l6ZSA9ICgoRklMRU1BUF9PQkpFQ1QgKiloYW5kbGUpLT5zaXplOwogICAgIHJldHVybiBtbWFwICgoY2FkZHJfdClzdCwgc2l6ZSwgKChGSUxFTUFQX09CSkVDVCAqKWhhbmRsZSktPnByb3QsIApAQCAtMTA4LDggKzEwOCw4IEBACiAgKiAgICAgICAgICAgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUgICAgICAgKEtFUk5FTDMyLjIxOSkKICAqCiAgKi8KLURXT1JEIFdJTkFQSSBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShGSUxFX09CSkVDVCAqaEZpbGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OICpscGZpKQorRFdPUkQgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoRklMRV9PQkpFQ1QgKmhGaWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OICpscGZpKQogewogICBzdHJ1Y3Qgc3RhdCBmaWxlX3N0YXQ7CiAgICAgaW50IHJjOwpkaWZmIC0tZ2l0IGEvd2luMzIvaW5pdC5jIGIvd2luMzIvaW5pdC5jCmluZGV4IGJmMzhiMWQuLjA5NTc4MjIgMTAwNjQ0Ci0tLSBhL3dpbjMyL2luaXQuYworKysgYi93aW4zMi9pbml0LmMKQEAgLTgwLDcgKzgwLDcgQEAKIC8qIEZyZWVjZWxsIHVzZXMgdGhlIHJlc3VsdCBvZiBHZXRNb2R1bGVIYW5kbGVBKDApIGFzIHRoZSBoSW5zdGFuY2UgaW4KIGFsbCBjYWxscyB0byBlLmcuIENyZWF0ZVdpbmRvd0V4LiAqLwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewotCVREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jayggR2V0Q3VycmVudFRhc2soKSApOworCVREQiAqcFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBHZXRDdXJyZW50VGFzaygpICk7CiAJaE1vZHVsZSA9IHBUYXNrLT5oSW5zdGFuY2U7CiAgICAgfSBlbHNlCiAJaE1vZHVsZSA9IEdldE1vZHVsZUhhbmRsZShtb2R1bGUpOwpkaWZmIC0tZ2l0IGEvd2luMzIvbWVtb3J5LmMgYi93aW4zMi9tZW1vcnkuYwppbmRleCA2NzQ1NWU0Li4zNDlhMzY4IDEwMDY0NAotLS0gYS93aW4zMi9tZW1vcnkuYworKysgYi93aW4zMi9tZW1vcnkuYwpAQCAtMzE2LDMgKzMxNiwxMiBAQAogCS8qIEZJWE1FOiBTaG91bGQgbWFrZSBjaGVjayBiYXNlZCBvbiBhY3R1YWwgbWFwcGluZ3MsIGhlcmUgKi8KIAlyZXR1cm4gRkFMU0U7CiB9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICBJc0JhZFdyaXRlUHRyCisgKi8KK0JPT0wgV0lOMzJfSXNCYWRDb2RlUHRyKHZvaWQqIHB0ciwgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCWRwcmludGZfZ2xvYmFsKHN0ZGRlYiwiSXNCYWRDb2RlUHRyKCV4LCV4KVxuIixwdHIsYnl0ZXMpOworCS8qIEZJWE1FOiBTaG91bGQgbWFrZSBjaGVjayBiYXNlZCBvbiBhY3R1YWwgbWFwcGluZ3MsIGhlcmUgKi8KKwlyZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS93aW4zMi9wYXJhbTMyLmMgYi93aW4zMi9wYXJhbTMyLmMKaW5kZXggYTUzMjNkMi4uYjk2OTY0OCAxMDA2NDQKLS0tIGEvd2luMzIvcGFyYW0zMi5jCisrKyBiL3dpbjMyL3BhcmFtMzIuYwpAQCAtMjgsNyArMjgsNyBAQAogCX0KIH0KIAotQk9PTCBXSU4zMl9HZXRUZXh0RXh0ZW50UG9pbnRBKEhEQyBoZGMsIExQQ1RTVFIgc3RyLCBpbnQgbGVuZ3RoLCBTSVpFMzIqIGxwc2l6ZSkKK0JPT0wgV0lOMzJfR2V0VGV4dEV4dGVudFBvaW50QShIREMgaGRjLCBMUENTVFIgc3RyLCBpbnQgbGVuZ3RoLCBTSVpFMzIqIGxwc2l6ZSkKIAogewogICAgICAgICBTSVpFIHM7CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHJldHVybiByZXR2YWw7CiB9CiAKLUFUT00gV0lOMzJfR2xvYmFsQWRkQXRvbUEoTFBDVFNUUiBzdHIpCitBVE9NIFdJTjMyX0dsb2JhbEFkZEF0b21BKExQQ1NUUiBzdHIpCiB7CiAgICAgY2hhciBidWZmZXJbMjU2XTsgIC8qIDE2LWJpdCBhdG9tcyBhcmUgbGltaXRlZCB0byAyNTUgYW55d2F5ICovCiAgICAgbHN0cmNweW4oIGJ1ZmZlciwgc3RyLCBzaXplb2YoYnVmZmVyKSApOwpkaWZmIC0tZ2l0IGEvd2luMzIvcHJvY2Vzcy5jIGIvd2luMzIvcHJvY2Vzcy5jCmluZGV4IDI5MDE1MjQuLjRlZDRjN2UgMTAwNjQ0Ci0tLSBhL3dpbjMyL3Byb2Nlc3MuYworKysgYi93aW4zMi9wcm9jZXNzLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK3N0YXRpYyBIQU5ETEUzMiBQcm9jZXNzSGVhcCA9IDA7ICAvKiBGSVhNRTogc2hvdWxkIGJlIGluIHByb2Nlc3MgZGF0YWJhc2UgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgRXhpdFByb2Nlc3MgICAoS0VSTkVMMzIuMTAwKQogICovCkBAIC0yNiw3ICsyOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVNdXRleEEgICAgKEtFUk5FTDMyLjUyKQogICovCi1XSU5BUEkgSEFORExFMzIgQ3JlYXRlTXV0ZXhBIChTRUNVUklUWV9BVFRSSUJVVEVTICpzYSwgQk9PTCBvbiwgY29uc3QgY2hhciAqYSkKK0hBTkRMRTMyIENyZWF0ZU11dGV4QSAoU0VDVVJJVFlfQVRUUklCVVRFUyAqc2EsIEJPT0wgb24sIGNvbnN0IGNoYXIgKmEpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNCw3ICszNiw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBSZWxlYXNlTXV0ZXggICAgKEtFUk5FTDMyLjQzNSkKICAqLwotV0lOQVBJIEJPT0wgUmVsZWFzZU11dGV4IChIQU5ETEUzMiBoKQorQk9PTCBSZWxlYXNlTXV0ZXggKEhBTkRMRTMyIGgpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC00Miw3ICs0NCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDcmVhdGVFdmVudEEgICAgKEtFUk5FTDMyLjQzKQogICovCi1XSU5BUEkgSEFORExFMzIgQ3JlYXRlRXZlbnRBIChTRUNVUklUWV9BVFRSSUJVVEVTICpzYSwgQk9PTCBhdSwgQk9PTCBvbiwgY29uc3QgY2hhcgorSEFORExFMzIgQ3JlYXRlRXZlbnRBIChTRUNVUklUWV9BVFRSSUJVVEVTICpzYSwgQk9PTCBhdSwgQk9PTCBvbiwgY29uc3QgY2hhcgogKm5hbWUpCiB7CiAJcmV0dXJuIDA7CkBAIC01MCwyOCArNTIsMjggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFNldEV2ZW50ICAgIChLRVJORUwzMi40ODcpCiAgKi8KLVdJTkFQSSBCT09MIFNldEV2ZW50IChIQU5ETEUzMiBoKQorQk9PTCBTZXRFdmVudCAoSEFORExFMzIgaCkKIHsKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFJlc2V0RXZlbnQgICAgKEtFUk5FTDMyLjQzOSkKICAqLwotV0lOQVBJIEJPT0wgUmVzZXRFdmVudCAoSEFORExFMzIgaCkKK0JPT0wgUmVzZXRFdmVudCAoSEFORExFMzIgaCkKIHsKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3QgICAgKEtFUk5FTDMyLjU2MSkKICAqLwotRFdPUkQgV0lOQVBJIFdhaXRGb3JTaW5nbGVPYmplY3QoSEFORExFMzIgaCwgRFdPUkQgYSkKK0RXT1JEIFdhaXRGb3JTaW5nbGVPYmplY3QoSEFORExFMzIgaCwgRFdPUkQgYSkKIHsKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIER1cGxpY2F0ZUhhbmRsZSAgICAoS0VSTkVMMzIuNzgpCiAgKi8KLUJPT0wgV0lOQVBJIER1cGxpY2F0ZUhhbmRsZShIQU5ETEUzMiBhLCBIQU5ETEUzMiBiLCBIQU5ETEUzMiBjLCBIQU5ETEUzMiAqIGQsIERXT1JEIGUsIEJPT0wgZiwgRFdPUkQgZykKK0JPT0wgRHVwbGljYXRlSGFuZGxlKEhBTkRMRTMyIGEsIEhBTkRMRTMyIGIsIEhBTkRMRTMyIGMsIEhBTkRMRTMyICogZCwgRFdPUkQgZSwgQk9PTCBmLCBEV09SRCBnKQogewogCSpkID0gYjsKIAlyZXR1cm4gMTsKQEAgLTc5LDE3ICs4MSwyNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0Q3VycmVudFByb2Nlc3MgICAgKEtFUk5FTDMyLjE5OCkKICAqLwotSEFORExFMzIgV0lOQVBJIEdldEN1cnJlbnRQcm9jZXNzKHZvaWQpCitIQU5ETEUzMiBHZXRDdXJyZW50UHJvY2Vzcyh2b2lkKQogewogCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRQcm9jZXNzSGVhcCAgICAoS0VSTkVMMzIuMjU5KQorICovCitIQU5ETEUzMiBHZXRQcm9jZXNzSGVhcCh2b2lkKQoreworICAgIGlmICghUHJvY2Vzc0hlYXApIFByb2Nlc3NIZWFwID0gSGVhcENyZWF0ZSggMCwgMHgxMDAwMCwgMCApOworICAgIHJldHVybiBQcm9jZXNzSGVhcDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgTG9hZExpYnJhcnlBICAgICAgICAgKEtFUk5FTDMyLjM2NSkKICAqIGNvcGllZCBmcm9tIExvYWRMaWJyYXJ5CiAgKiBUaGlzIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGJ1aWx0LWluIGxpYnJhcmllcwogICovCi1IQU5ETEUzMiBXSU5BUEkgTG9hZExpYnJhcnlBKGNoYXIgKmxpYm5hbWUpCitIQU5ETEUzMiBMb2FkTGlicmFyeUEoY2hhciAqbGlibmFtZSkKIHsKIAlIQU5ETEUgaGFuZGxlOwogCWRwcmludGZfbW9kdWxlKCBzdGRkZWIsICJMb2FkTGlicmFyeTogKCUwOHgpICVzXG4iLCAoaW50KWxpYm5hbWUsIGxpYm5hbWUpOwpAQCAtMTEzLDcgKzEyNCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgIFdJTjMyX0dldFByb2NBZGRyZXNzCiAgKi8KLXZvaWQqIFdJTkFQSSBXSU4zMl9HZXRQcm9jQWRkcmVzcyhIQU5ETEUzMiBoTW9kdWxlLCBjaGFyKiBmdW5jdGlvbikKK3ZvaWQqIFdJTjMyX0dldFByb2NBZGRyZXNzKEhBTkRMRTMyIGhNb2R1bGUsIGNoYXIqIGZ1bmN0aW9uKQogewogCWRwcmludGZfbW9kdWxlKCBzdGRkZWIsICJXSU4zMl9HZXRQcm9jQWRkcmVzcyglMDh4LCVzKVxuIiwKIAkJaE1vZHVsZSwgZnVuY3Rpb24pOwpkaWZmIC0tZ2l0IGEvd2luMzIvcmVzb3VyY2UuYyBiL3dpbjMyL3Jlc291cmNlLmMKaW5kZXggZGZlNTUzNy4uNzRmZjBhZiAxMDA2NDQKLS0tIGEvd2luMzIvcmVzb3VyY2UuYworKysgYi93aW4zMi9yZXNvdXJjZS5jCkBAIC0yMjEsOSArMjIxLDkgQEAKIAogICAgIGxwID0gKEJZVEUgKilMb2NrUmVzb3VyY2UzMihyc2NfbWVtKTsKICAgICBuID0gU2l6ZW9mUmVzb3VyY2UoIGluc3RhbmNlLCBoUnNyYyApIC8gc2l6ZW9mKEFDQ0VMRU5UUlkpOwotICAgIGhBY2NlbCA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUsIAorICAgIGhBY2NlbCA9IEdsb2JhbEFsbG9jMTYoR01FTV9NT1ZFQUJMRSwgCiAgICAgCXNpemVvZihBQ0NFTEhFQURFUikgKyAobiArIDEpKnNpemVvZihBQ0NFTEVOVFJZKSk7Ci0gICAgbHBBY2NlbFRibCA9IChMUEFDQ0VMSEVBREVSKUdsb2JhbExvY2soaEFjY2VsKTsKKyAgICBscEFjY2VsVGJsID0gKExQQUNDRUxIRUFERVIpR2xvYmFsTG9jazE2KGhBY2NlbCk7CiAgICAgbHBBY2NlbFRibC0+d0NvdW50ID0gMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJbHBBY2NlbFRibC0+dGJsW2ldLnR5cGUgPSAqKGxwKyspOwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJCWxwQWNjZWxUYmwtPnRibFtpXS50eXBlKTsKIAlscEFjY2VsVGJsLT53Q291bnQrKzsKICAJfQotICAgIEdsb2JhbFVubG9jayhoQWNjZWwpOworICAgIEdsb2JhbFVubG9jazE2KGhBY2NlbCk7CiAgICAgRnJlZVJlc291cmNlKCByc2NfbWVtICk7CiAgICAgcmV0dXJuIGhBY2NlbDsKICNlbHNlCkBAIC0yNDksOSArMjQ5LDE1IEBACiAKIEhBTkRMRTMyIFdJTjMyX0xvYWRBY2NlbGVyYXRvcnNBKEhJTlNUQU5DRSBpbnN0YW5jZSwgTFBDU1RSIGxwVGFibGVOYW1lKQogewotCUxQV1NUUiB1bmk9U1RSSU5HMzJfRHVwQW5zaVRvVW5pKGxwVGFibGVOYW1lKTsKLQlIQU5ETEUzMiByZXN1bHQ9V0lOMzJfTG9hZEFjY2VsZXJhdG9yc1coaW5zdGFuY2UsdW5pKTsKLQlmcmVlKHVuaSk7CisJTFBXU1RSCQl1bmk7CisJSEFORExFMzIJcmVzdWx0OworCWlmIChISVdPUkQobHBUYWJsZU5hbWUpKQorCQl1bmk9U1RSSU5HMzJfRHVwQW5zaVRvVW5pKGxwVGFibGVOYW1lKTsKKwllbHNlCisJCXVuaT0oTFBXU1RSKWxwVGFibGVOYW1lOworCXJlc3VsdD1XSU4zMl9Mb2FkQWNjZWxlcmF0b3JzVyhpbnN0YW5jZSx1bmkpOworCWlmIChISVdPUkQodW5pKSkKKwkJZnJlZSh1bmkpOwogCXJldHVybiByZXN1bHQ7CiB9CiAMCkBAIC0zMTcsMTMgKzMyMywxMyBAQAogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLUhJQ09OIExvYWRJY29uVzMyKEhJTlNUQU5DRSBoaXNudCwgTFBDVFNUUiBscHN6SWNvbikKK0hJQ09OIExvYWRJY29uVzMyKEhJTlNUQU5DRSBoaXNudCwgTFBDV1NUUiBscHN6SWNvbikKIAogewogCXJldHVybiBMb2FkSWNvbigwLCBJRElfQVBQTElDQVRJT04pOwogfQogCi1ISUNPTiBMb2FkSWNvbkEzMihISU5TVEFOQ0UgaGluc3QsIExQQ1RTVFIgbHBzekljb24pCitISUNPTiBMb2FkSWNvbkEzMihISU5TVEFOQ0UgaGluc3QsIExQQ1NUUiBscHN6SWNvbikKIAogewogCXJldHVybiBMb2FkSWNvblczMihoaW5zdCwgbHBzekljb24pOwpkaWZmIC0tZ2l0IGEvd2luMzIvdGhyZWFkLmMgYi93aW4zMi90aHJlYWQuYwppbmRleCA1YWEwYWQ1Li5iNTM4MDAyIDEwMDY0NAotLS0gYS93aW4zMi90aHJlYWQuYworKysgYi93aW4zMi90aHJlYWQuYwpAQCAtMzQsNyArMzQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0Q3VycmVudFRocmVhZCAgICAoS0VSTkVMMzIuMjAwKQogICovCi1IQU5ETEUgV0lOQVBJIEdldEN1cnJlbnRUaHJlYWQodm9pZCkKK0hBTkRMRSBHZXRDdXJyZW50VGhyZWFkKHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC00MiwxMiArNDIsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICBDcml0aWNhbCBTZWN0aW9ucyBhcmUgY3VycmVudGx5IGlnbm9yZWQKICAqLwotdm9pZCBXSU5BUEkgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbihDUklUSUNBTF9TRUNUSU9OICpscENyaXQpCit2b2lkIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oQ1JJVElDQUxfU0VDVElPTiAqbHBDcml0KQogewogCW1lbXNldChscENyaXQsMCxzaXplb2YoQ1JJVElDQUxfU0VDVElPTikpOwogfQogCi12b2lkIFdJTkFQSSBFbnRlckNyaXRpY2FsU2VjdGlvbihDUklUSUNBTF9TRUNUSU9OKiBscENyaXQpCit2b2lkIEVudGVyQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04qIGxwQ3JpdCkKIHsKICAgICBpZiAobHBDcml0LT5Mb2NrQ291bnQpCiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkVycm9yOiByZS1lbnRlcmluZyBjcml0aWNhbCBzZWN0aW9uICUwOGx4XG4iLApAQCAtNTUsNyArNTUsNyBAQAogICAgIGxwQ3JpdC0+TG9ja0NvdW50Kys7CiB9CiAKLXZvaWQgV0lOQVBJIExlYXZlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04qIGxwQ3JpdCkKK3ZvaWQgTGVhdmVDcml0aWNhbFNlY3Rpb24oQ1JJVElDQUxfU0VDVElPTiogbHBDcml0KQogewogICAgIGlmICghbHBDcml0LT5Mb2NrQ291bnQpCiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkVycm9yOiBsZWF2aW5nIGNyaXRpY2FsIHNlY3Rpb24gJTA4bHggYWdhaW5cbiIsCkBAIC02Myw3ICs2Myw3IEBACiAgICAgbHBDcml0LT5Mb2NrQ291bnQtLTsKIH0KIAotdm9pZCBXSU5BUEkgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04qIGxwQ3JpdCkKK3ZvaWQgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKENSSVRJQ0FMX1NFQ1RJT04qIGxwQ3JpdCkKIHsKIAlyZXR1cm47CiB9CkBAIC03NCw3ICs3NCw3IEBACiBzdGF0aWMgTFBWT0lEKiBUbHM9MDsKIHN0YXRpYyBpbnQgVGxzQ291bnQ9MDsKIAotRFdPUkQgV0lOQVBJIFRsc0FsbG9jKCkKK0RXT1JEIFRsc0FsbG9jKCkKIHsKIAlpZighVGxzKXsKIAkJVGxzQ291bnQrKzsKZGlmZiAtLWdpdCBhL3dpbjMyL3VzZXIzMi5jIGIvd2luMzIvdXNlcjMyLmMKaW5kZXggYjlhOWRiNS4uMWE2ZmE5MiAxMDA2NDQKLS0tIGEvd2luMzIvdXNlcjMyLmMKKysrIGIvd2luMzIvdXNlcjMyLmMKQEAgLTI2LDUzICsyNiw2IEBACiAjaW5jbHVkZSAic3RkZGVidWcuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUmVnaXN0ZXJDbGFzc0EgICAgICAoVVNFUjMyLjQyNikKLSAqLwotQVRPTSBVU0VSMzJfUmVnaXN0ZXJDbGFzc0EoV05EQ0xBU1NBKiB3bmRjbGFzcykKLXsKLQlXTkRDTEFTUyBjb3B5OwotCUhBTkRMRSBjbGFzc2ggPSAwLCBtZW51aCA9IDA7Ci0JU0VHUFRSIGNsYXNzc2VncCwgbWVudXNlZ3A7Ci0JY2hhciAqY2xhc3NidWYsICptZW51YnVmOwotCi0JQVRPTSByZXR2YWw7Ci0JY29weS5zdHlsZT13bmRjbGFzcy0+c3R5bGU7Ci0JQUxJQVNfUmVnaXN0ZXJBbGlhcygwLDAsKERXT1JEKXduZGNsYXNzLT5scGZuV25kUHJvYyk7Ci0JY29weS5scGZuV25kUHJvYz13bmRjbGFzcy0+bHBmblduZFByb2M7Ci0JY29weS5jYkNsc0V4dHJhPXduZGNsYXNzLT5jYkNsc0V4dHJhOwotCWNvcHkuY2JXbmRFeHRyYT13bmRjbGFzcy0+Y2JXbmRFeHRyYTsKLQljb3B5LmhJbnN0YW5jZT0oSElOU1RBTkNFKXduZGNsYXNzLT5oSW5zdGFuY2U7Ci0JY29weS5oSWNvbj0oSElDT04pd25kY2xhc3MtPmhJY29uOwotCWNvcHkuaEN1cnNvcj0oSENVUlNPUil3bmRjbGFzcy0+aEN1cnNvcjsKLQljb3B5LmhickJhY2tncm91bmQ9KEhCUlVTSCl3bmRjbGFzcy0+aGJyQmFja2dyb3VuZDsKLQotCS8qIEZJWE1FOiBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IG9mIGRvaW5nIHRoaXMgLSBidXQgbmVpdGhlcgotCW1hbGxvYyBub3IgYWxsb2NhIHdpbGwgd29yayAqLwotCi0JaWYod25kY2xhc3MtPmxwc3pNZW51TmFtZSkKLQl7Ci0JCW1lbnVoID0gR2xvYmFsQWxsb2MoMCwgc3RybGVuKHduZGNsYXNzLT5scHN6TWVudU5hbWUpKzEpOwotCQltZW51c2VncCA9IFdJTjE2X0dsb2JhbExvY2sobWVudWgpOwotCQltZW51YnVmID0gUFRSX1NFR19UT19MSU4obWVudXNlZ3ApOwotCQlzdHJjcHkoIG1lbnVidWYsIHduZGNsYXNzLT5scHN6TWVudU5hbWUpOwotCQljb3B5Lmxwc3pNZW51TmFtZT1tZW51c2VncDsKLQl9ZWxzZQotCQljb3B5Lmxwc3pNZW51TmFtZT0wOwotCWlmKHduZGNsYXNzLT5scHN6Q2xhc3NOYW1lKQotCXsKLQkJY2xhc3NoID0gR2xvYmFsQWxsb2MoMCwgc3RybGVuKHduZGNsYXNzLT5scHN6Q2xhc3NOYW1lKSsxKTsKLQkJY2xhc3NzZWdwID0gV0lOMTZfR2xvYmFsTG9jayhjbGFzc2gpOwotCQljbGFzc2J1ZiA9IFBUUl9TRUdfVE9fTElOKGNsYXNzc2VncCk7Ci0JCXN0cmNweSggY2xhc3NidWYsIHduZGNsYXNzLT5scHN6Q2xhc3NOYW1lKTsKLQkJY29weS5scHN6Q2xhc3NOYW1lPWNsYXNzc2VncDsKLQl9Ci0JcmV0dmFsID0gUmVnaXN0ZXJDbGFzcygmY29weSk7Ci0JR2xvYmFsRnJlZShtZW51aCk7Ci0JR2xvYmFsRnJlZShjbGFzc2gpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgR2V0TWVzc2FnZUEgICAgICAgICAgKFVTRVIzMi4yNjkpCiAgKi8KIEJPT0wgVVNFUjMyX0dldE1lc3NhZ2VBKE1TRzMyKiBscG1zZyxEV09SRCBod25kLERXT1JEIG1pbixEV09SRCBtYXgpCkBAIC0xNDUsMjMgKzk4LDI0IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBDcmVhdGVXaW5kb3dFeEEgICAgICAgIChVU0VSMzIuODIpCisgKiAgICAgICAgIENyZWF0ZVdpbmRvd0V4MzJBICAgICAgICAoVVNFUjMyLjgyKQogICovCi1EV09SRCBVU0VSMzJfQ3JlYXRlV2luZG93RXhBKGxvbmcgZmxhZ3MsY2hhciogY2xhc3MsY2hhciAqdGl0bGUsCi0JbG9uZyBzdHlsZSxpbnQgeCxpbnQgeSxpbnQgd2lkdGgsaW50IGhlaWdodCxEV09SRCBwYXJlbnQsRFdPUkQgbWVudSwKLQlEV09SRCBpbnN0YW5jZSxEV09SRCBwYXJhbSkKK0hXTkQzMiBDcmVhdGVXaW5kb3dFeDMyQSggRFdPUkQgZmxhZ3MsIExQQ1NUUiBjbGFzcywgTFBDU1RSIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzdHlsZSwgSU5UMzIgeCwgSU5UMzIgeSwgSU5UMzIgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGhlaWdodCwgSFdORDMyIHBhcmVudCwgSE1FTlUzMiBtZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgICBISU5TVEFOQ0UzMiBpbnN0YW5jZSwgTFBWT0lEIHBhcmFtICkKIHsKLSAgICBEV09SRCByZXR2YWw7CisgICAgSFdORDMyIHJldHZhbDsKICAgICBIQU5ETEUgY2xhc3NoPTAsIHRpdGxlaD0wOwogICAgIFNFR1BUUiBjbGFzc3NlZ3A9MCwgdGl0bGVzZWdwPTA7CiAgICAgY2hhciAqY2xhc3NidWYsICp0aXRsZWJ1ZjsKIAlpbnQgdXNlYyx1c2V0OwogCiAgICAgLypIYXZlIHRvIHRyYW5zbGF0ZSBDV19VU0VERUZBVUxUICovCi0gICAgaWYoeD09Q1dfVVNFREVGQVVMVDMyKXg9Q1dfVVNFREVGQVVMVDsKLSAgICBpZih5PT1DV19VU0VERUZBVUxUMzIpeT1DV19VU0VERUZBVUxUOwotICAgIGlmKHdpZHRoPT1DV19VU0VERUZBVUxUMzIpd2lkdGg9Q1dfVVNFREVGQVVMVDsKLSAgICBpZihoZWlnaHQ9PUNXX1VTRURFRkFVTFQzMiloZWlnaHQ9Q1dfVVNFREVGQVVMVDsKKyAgICBpZih4PT1DV19VU0VERUZBVUxUMzIpeD1DV19VU0VERUZBVUxUMTY7CisgICAgaWYoeT09Q1dfVVNFREVGQVVMVDMyKXk9Q1dfVVNFREVGQVVMVDE2OworICAgIGlmKHdpZHRoPT1DV19VU0VERUZBVUxUMzIpd2lkdGg9Q1dfVVNFREVGQVVMVDE2OworICAgIGlmKGhlaWdodD09Q1dfVVNFREVGQVVMVDMyKWhlaWdodD1DV19VU0VERUZBVUxUMTY7CiAKICAgICAvKiBGSVhNRTogVGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzIC0gYnV0IG5laXRoZXIKICAgICBtYWxsb2Mgbm9yIGFsbG9jYSB3aWxsIHdvcmsgKi8KQEAgLTE2OSwzOSArMTIzLDQwIEBACiAJdXNldCA9IEhJV09SRCh0aXRsZSk7CiAKIAlpZih1c2VjKXsKLSAgICAJY2xhc3NoID0gR2xvYmFsQWxsb2MoMCwgc3RybGVuKGNsYXNzKSsxKTsKLSAgICAJY2xhc3NzZWdwID0gV0lOMTZfR2xvYmFsTG9jayhjbGFzc2gpOworICAgIAljbGFzc2ggPSBHbG9iYWxBbGxvYzE2KDAsIHN0cmxlbihjbGFzcykrMSk7CisgICAgCWNsYXNzc2VncCA9IFdJTjE2X0dsb2JhbExvY2sxNihjbGFzc2gpOwogICAgIAljbGFzc2J1ZiA9IFBUUl9TRUdfVE9fTElOKGNsYXNzc2VncCk7CiAgICAgCXN0cmNweSggY2xhc3NidWYsIGNsYXNzICk7CiAJfQogCWlmKHVzZXQpewotICAgIAl0aXRsZWggPSBHbG9iYWxBbGxvYygwLCBzdHJsZW4odGl0bGUpKzEpOwotICAgIAl0aXRsZXNlZ3AgPSBXSU4xNl9HbG9iYWxMb2NrKHRpdGxlaCk7CisgICAgCXRpdGxlaCA9IEdsb2JhbEFsbG9jMTYoMCwgc3RybGVuKHRpdGxlKSsxKTsKKyAgICAJdGl0bGVzZWdwID0gV0lOMTZfR2xvYmFsTG9jazE2KHRpdGxlaCk7CiAgICAgCXRpdGxlYnVmID0gUFRSX1NFR19UT19MSU4odGl0bGVzZWdwKTsKICAgICAJc3RyY3B5KCB0aXRsZWJ1ZiwgdGl0bGUgKTsKIAl9CiAgICAgCi0gICAgcmV0dmFsID0gKERXT1JEKSBDcmVhdGVXaW5kb3dFeChmbGFncywodXNlYyA/IGNsYXNzc2VncCA6IChTRUdQVFIpY2xhc3MpLAorICAgIHJldHZhbCA9IChIV05EMzIpQ3JlYXRlV2luZG93RXgxNihmbGFncywodXNlYyA/IGNsYXNzc2VncCA6IChTRUdQVFIpY2xhc3MpLAogCQkJCSAgKHVzZXQgPyB0aXRsZXNlZ3AgOiAoU0VHUFRSKXRpdGxlKSxzdHlsZSx4LHksd2lkdGgsaGVpZ2h0LAogCQkJCSAgKEhXTkQpcGFyZW50LChITUVOVSltZW51LChISU5TVEFOQ0UpaW5zdGFuY2UsCiAJCQkJICAoRFdPUkQpcGFyYW0pOwotICAgIGlmKHVzZWMpR2xvYmFsRnJlZShjbGFzc2gpOwotICAgIGlmKHVzZXQpR2xvYmFsRnJlZSh0aXRsZWgpOworICAgIGlmKHVzZWMpR2xvYmFsRnJlZTE2KGNsYXNzaCk7CisgICAgaWYodXNldClHbG9iYWxGcmVlMTYodGl0bGVoKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi1EV09SRCBVU0VSMzJfQ3JlYXRlV2luZG93RXhXKGxvbmcgZmxhZ3MsTFBDV1NUUiBjbGFzcyxMUENXU1RSIHRpdGxlLAotCWxvbmcgc3R5bGUsaW50IHgsaW50IHksaW50IHdpZHRoLGludCBoZWlnaHQsRFdPUkQgcGFyZW50LERXT1JEIG1lbnUsCi0JRFdPUkQgaW5zdGFuY2UsRFdPUkQgcGFyYW0pCitIV05EMzIgQ3JlYXRlV2luZG93RXgzMlcoIERXT1JEIGZsYWdzLCBMUENXU1RSIGNsYXNzLCBMUENXU1RSIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzdHlsZSwgSU5UMzIgeCwgSU5UMzIgeSwgSU5UMzIgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGhlaWdodCwgSFdORDMyIHBhcmVudCwgSE1FTlUzMiBtZW51LAorICAgICAgICAgICAgICAgICAgICAgICAgICBISU5TVEFOQ0UzMiBpbnN0YW5jZSwgTFBWT0lEIHBhcmFtICkKIHsKLQlIV05EIGh3bmQ7CisgICAgICAgIEhXTkQzMiBod25kOwogCUxQU1RSIGMsdDsKIAlpbnQgdXNlYyx1c2V0OwogCXVzZWM9SElXT1JEKGNsYXNzKTsKIAl1c2V0PUhJV09SRCh0aXRsZSk7CiAJYyA9IHVzZWMgPyBTVFJJTkczMl9EdXBVbmlUb0Fuc2koY2xhc3MpIDogKExQU1RSKWNsYXNzOwogCXQgPSB1c2V0ID8gU1RSSU5HMzJfRHVwVW5pVG9BbnNpKHRpdGxlKSA6IChMUFNUUil0aXRsZTsKLQlod25kPVVTRVIzMl9DcmVhdGVXaW5kb3dFeEEoZmxhZ3MsYyx0LHN0eWxlLHgseSx3aWR0aCxoZWlnaHQscGFyZW50LG1lbnUsCisJaHduZD1DcmVhdGVXaW5kb3dFeDMyQShmbGFncyxjLHQsc3R5bGUseCx5LHdpZHRoLGhlaWdodCxwYXJlbnQsbWVudSwKIAkJaW5zdGFuY2UscGFyYW0pOwogCWlmKHVzZWMpZnJlZShjKTsKIAlpZih1c2V0KWZyZWUodCk7CkBAIC0zMjgsOCArMjgzLDggQEAKIAlyZWN0LnJpZ2h0IC09IHJlY3QubGVmdDsKIAlyZWN0LmJvdHRvbSAtPSByZWN0LnRvcDsKIAotCWlmKGRsZ1RlbXBsLT54ID09IENXX1VTRURFRkFVTFQpCi0JCXJlY3QubGVmdCA9IHJlY3QudG9wID0gQ1dfVVNFREVGQVVMVDsKKwlpZihkbGdUZW1wbC0+eCA9PSBDV19VU0VERUZBVUxUMTYpCisJCXJlY3QubGVmdCA9IHJlY3QudG9wID0gQ1dfVVNFREVGQVVMVDE2OwogCWVsc2V7CiAJCXJlY3QubGVmdCArPSBkbGdUZW1wbC0+eCAqIHhVbml0IC8gNDsKIAkJcmVjdC50b3AgKz0gZGxnVGVtcGwtPnkgKiB5VW5pdCAvIDg7CkBAIC0zMzgsNyArMjkzLDcgQEAKIAl9CiAKIAkvKiBGSVhNRTogSGVyZSBpcyB0aGUgcGxhY2UgdG8gY29uc2lkZXIgQSAqLwotCWh3bmQgPSBVU0VSMzJfQ3JlYXRlV2luZG93RXhXKGV4U3R5bGUsIChMUFdTVFIpQ2xhc3NOYW1lLCAoTFBXU1RSKXN6Q2FwdGlvbiwKKwlod25kID0gQ3JlYXRlV2luZG93RXgzMlcoZXhTdHlsZSwgKExQV1NUUilDbGFzc05hbWUsIChMUFdTVFIpc3pDYXB0aW9uLAogCQlkbGdUZW1wbC0+c3R5bGUgJiB+V1NfVklTSUJMRSwgCiAJCXJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLAogCQloV25kUGFyZW50LCBoTWVudSwgaEluc3QsIDApOwpAQCAtNDA3LDcgKzM2Miw3IEBACiAJCQlmcHJpbnRmKHN0ZGVyciwiaGF2aW5nIGRhdGFcbiIpOwogCQl9CiAJCXB0cisrOwotCQlod25kQ3RybCA9IFVTRVIzMl9DcmVhdGVXaW5kb3dFeFcoV1NfRVhfTk9QQVJFTlROT1RJRlksCisJCWh3bmRDdHJsID0gQ3JlYXRlV2luZG93RXgzMlcoV1NfRVhfTk9QQVJFTlROT1RJRlksCiAJCQkoTFBXU1RSKUNsYXNzSWQsIChMUFdTVFIpVGV4dCwKIAkJCWRsZ2l0ZW0tPnN0eWxlIHwgV1NfQ0hJTEQsCiAJCQlkbGdpdGVtLT54ICogeFVuaXQgLyA0LApkaWZmIC0tZ2l0IGEvd2luZG93cy9NYWtlZmlsZS5pbiBiL3dpbmRvd3MvTWFrZWZpbGUuaW4KaW5kZXggMGJiNjc5OS4uMTBkNjIwNiAxMDA2NDQKLS0tIGEvd2luZG93cy9NYWtlZmlsZS5pbgorKysgYi93aW5kb3dzL01ha2VmaWxlLmluCkBAIC0yNiw3ICsyNiw2IEBACiAJc3lzY29sb3IuYyBcCiAJc3lzbWV0cmljcy5jIFwKIAl0aW1lci5jIFwKLQl1dGlsaXR5LmMgXAogCXdpbi5jIFwKIAl3aW5wb3MuYwogCmRpZmYgLS1naXQgYS93aW5kb3dzL2NsYXNzLmMgYi93aW5kb3dzL2NsYXNzLmMKaW5kZXggMWE5NzE0MC4uYzA1ZWIzOSAxMDA2NDQKLS0tIGEvd2luZG93cy9jbGFzcy5jCisrKyBiL3dpbmRvd3MvY2xhc3MuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgImNsYXNzLmgiCisjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ3aW4uaCIKICNpbmNsdWRlICJkY2UuaCIKQEAgLTMxLDggKzMyLDcgQEAKICAgICBjaGFyIGNsYXNzTmFtZVs4MF07CiAgICAgaW50IGk7CiAKLSAgICBpZiAoKChDTEFTUyAqKVVTRVJfSEVBUF9MSU5fQUREUihwdHItPnNlbGYpICE9IHB0cikgfHwKLSAgICAgICAgKHB0ci0+d01hZ2ljICE9IENMQVNTX01BR0lDKSkKKyAgICBpZiAocHRyLT5tYWdpYyAhPSBDTEFTU19NQUdJQykKICAgICB7CiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiVwIGlzIG5vdCBhIGNsYXNzXG4iLCBwdHIgKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDIsMTcgKzQyLDE3IEBACiAKICAgICBmcHJpbnRmKCBzdGRlcnIsICJDbGFzcyAlcDpcbiIsIHB0ciApOwogICAgIGZwcmludGYoIHN0ZGVyciwKLSAgICAgICAgICAgICAibmV4dD0lcCAgbmFtZT0lMDR4ICclcycgIHN0eWxlPSUwNHggIHduZFByb2M9JTA4bHhcbiIKKyAgICAgICAgICAgICAibmV4dD0lcCAgbmFtZT0lMDR4ICclcycgIHN0eWxlPSUwOHggIHduZFByb2M9JTA4bHhcbiIKICAgICAgICAgICAgICAiaW5zdD0lMDR4ICBoZGNlPSUwNHggIGljb249JTA0eCAgY3Vyc29yPSUwNHggIGJrZ25kPSUwNHhcbiIKICAgICAgICAgICAgICAiY2xzRXh0cmE9JWQgIHdpbkV4dHJhPSVkICAjd2luZG93cz0lZFxuIiwKLSAgICAgICAgICAgICBwdHItPm5leHQsIHB0ci0+YXRvbU5hbWUsIGNsYXNzTmFtZSwgcHRyLT53Yy5zdHlsZSwKLSAgICAgICAgICAgICAoRFdPUkQpcHRyLT53Yy5scGZuV25kUHJvYywgcHRyLT53Yy5oSW5zdGFuY2UsIHB0ci0+aGRjZSwKLSAgICAgICAgICAgICBwdHItPndjLmhJY29uLCBwdHItPndjLmhDdXJzb3IsIHB0ci0+d2MuaGJyQmFja2dyb3VuZCwKLSAgICAgICAgICAgICBwdHItPndjLmNiQ2xzRXh0cmEsIHB0ci0+d2MuY2JXbmRFeHRyYSwgcHRyLT5jV2luZG93cyApOwotICAgIGlmIChwdHItPndjLmNiQ2xzRXh0cmEpCisgICAgICAgICAgICAgcHRyLT5uZXh0LCBwdHItPmF0b21OYW1lLCBjbGFzc05hbWUsIHB0ci0+c3R5bGUsCisgICAgICAgICAgICAgKERXT1JEKXB0ci0+bHBmblduZFByb2MsIHB0ci0+aEluc3RhbmNlLCBwdHItPmhkY2UsCisgICAgICAgICAgICAgcHRyLT5oSWNvbiwgcHRyLT5oQ3Vyc29yLCBwdHItPmhickJhY2tncm91bmQsCisgICAgICAgICAgICAgcHRyLT5jYkNsc0V4dHJhLCBwdHItPmNiV25kRXh0cmEsIHB0ci0+Y1dpbmRvd3MgKTsKKyAgICBpZiAocHRyLT5jYkNsc0V4dHJhKQogICAgIHsKICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiZXh0cmEgYnl0ZXM6IiApOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHRyLT53Yy5jYkNsc0V4dHJhOyBpKyspCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwdHItPmNiQ2xzRXh0cmE7IGkrKykKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiAlMDJ4IiwgKigoQllURSAqKXB0ci0+d0V4dHJhK2kpICk7CiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlxuIiApOwogICAgIH0KQEAgLTcwLDEyICs3MCwxMiBAQAogICAgIENMQVNTICpwdHI7CiAgICAgY2hhciBjbGFzc05hbWVbODBdOwogCi0gICAgZnByaW50Ziggc3RkZXJyLCAiIENsYXNzICAgTmFtZSAgICAgICAgICAgICAgICBTdHlsZSBXbmRQcm9jXG4iICk7CisgICAgZnByaW50Ziggc3RkZXJyLCAiIENsYXNzICAgTmFtZSAgICAgICAgICAgICAgICAgU3R5bGUgICBXbmRQcm9jXG4iICk7CiAgICAgZm9yIChwdHIgPSBmaXJzdENsYXNzOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKICAgICB7CiAgICAgICAgIEdsb2JhbEdldEF0b21OYW1lKCBwdHItPmF0b21OYW1lLCBjbGFzc05hbWUsIHNpemVvZihjbGFzc05hbWUpICk7Ci0gICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiUwOGx4ICUtMjAuMjBzICUwNHggJTA4bHhcbiIsIChEV09SRClwdHIsIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgcHRyLT53Yy5zdHlsZSwgKERXT1JEKXB0ci0+d2MubHBmblduZFByb2MgKTsKKyAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiJTA4bHggJS0yMC4yMHMgJTA4eCAlMDhseFxuIiwgKERXT1JEKXB0ciwgY2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICBwdHItPnN0eWxlLCAoRFdPUkQpcHRyLT5scGZuV25kUHJvYyApOwogICAgIH0KICAgICBmcHJpbnRmKCBzdGRlcnIsICJcbiIgKTsKIH0KQEAgLTEwNCwxMSArMTA0LDExIEBACiAgICAgLyogRGVsZXRlIHRoZSBjbGFzcyAqLwogCiAgICAgaWYgKGNsYXNzUHRyLT5oZGNlKSBEQ0VfRnJlZURDRSggY2xhc3NQdHItPmhkY2UgKTsKLSAgICBpZiAoY2xhc3NQdHItPndjLmhickJhY2tncm91bmQpIERlbGV0ZU9iamVjdCggY2xhc3NQdHItPndjLmhickJhY2tncm91bmQgKTsKKyAgICBpZiAoY2xhc3NQdHItPmhickJhY2tncm91bmQpIERlbGV0ZU9iamVjdCggY2xhc3NQdHItPmhickJhY2tncm91bmQgKTsKICAgICBHbG9iYWxEZWxldGVBdG9tKCBjbGFzc1B0ci0+YXRvbU5hbWUgKTsKLSAgICBpZiAoSElXT1JEKGNsYXNzUHRyLT53Yy5scHN6TWVudU5hbWUpKQotCVVTRVJfSEVBUF9GUkVFKCAoSEFORExFKWNsYXNzUHRyLT53Yy5scHN6TWVudU5hbWUgKTsKLSAgICBVU0VSX0hFQVBfRlJFRSggY2xhc3NQdHItPnNlbGYgKTsKKyAgICBpZiAoSElXT1JEKGNsYXNzUHRyLT5scHN6TWVudU5hbWUpKQorCVVTRVJfSEVBUF9GUkVFKCAoSEFORExFKWNsYXNzUHRyLT5scHN6TWVudU5hbWUgKTsKKyAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgY2xhc3NQdHIgKTsKIH0KIAogCkBAIC0xMjIsMTIgKzEyMiw0MyBAQAogICAgIGZvciAocHRyID0gZmlyc3RDbGFzczsgcHRyOyBwdHIgPSBuZXh0KQogICAgIHsKICAgICAgICAgbmV4dCA9IHB0ci0+bmV4dDsKLQlpZiAocHRyLT53Yy5oSW5zdGFuY2UgPT0gaE1vZHVsZSkgQ0xBU1NfRnJlZUNsYXNzKCBwdHIgKTsKKwlpZiAocHRyLT5oSW5zdGFuY2UgPT0gaE1vZHVsZSkgQ0xBU1NfRnJlZUNsYXNzKCBwdHIgKTsKICAgICB9CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ0xBU1NfRmluZENsYXNzQnlBdG9tCisgKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhc3MuCisgKi8KK0NMQVNTICpDTEFTU19GaW5kQ2xhc3NCeUF0b20oIEFUT00gYXRvbSwgSElOU1RBTkNFMTYgaGluc3RhbmNlICkKK3sKKyAgICBDTEFTUyAqIGNsYXNzOworCisgICAgICAvKiBGaXJzdCBzZWFyY2ggdGFzay1zcGVjaWZpYyBjbGFzc2VzICovCisKKyAgICBmb3IgKGNsYXNzID0gZmlyc3RDbGFzczsgKGNsYXNzKTsgY2xhc3MgPSBjbGFzcy0+bmV4dCkKKyAgICB7CisgICAgICAgIGlmIChjbGFzcy0+c3R5bGUgJiBDU19HTE9CQUxDTEFTUykgY29udGludWU7CisgICAgICAgIGlmICgoY2xhc3MtPmF0b21OYW1lID09IGF0b20pICYmIAorICAgICAgICAgICAgKChoaW5zdGFuY2U9PShISU5TVEFOQ0UxNikweGZmZmYpIHx8CisgICAgICAgICAgICAgKGhpbnN0YW5jZSA9PSBjbGFzcy0+aEluc3RhbmNlKSkpIHJldHVybiBjbGFzczsKKyAgICB9CisgICAgCisgICAgICAvKiBUaGVuIHNlYXJjaCBnbG9iYWwgY2xhc3NlcyAqLworCisgICAgZm9yIChjbGFzcyA9IGZpcnN0Q2xhc3M7IChjbGFzcyk7IGNsYXNzID0gY2xhc3MtPm5leHQpCisgICAgeworICAgICAgICBpZiAoIShjbGFzcy0+c3R5bGUgJiBDU19HTE9CQUxDTEFTUykpIGNvbnRpbnVlOworICAgICAgICBpZiAoY2xhc3MtPmF0b21OYW1lID09IGF0b20pIHJldHVybiBjbGFzczsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBDTEFTU19GaW5kQ2xhc3NCeU5hbWUKICAqCiAgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGFzcy4KQEAgLTEzNSw5MyArMTY2LDc2IEBACiBDTEFTUyAqQ0xBU1NfRmluZENsYXNzQnlOYW1lKCBTRUdQVFIgbmFtZSwgSElOU1RBTkNFIGhpbnN0YW5jZSApCiB7CiAgICAgQVRPTSBhdG9tOwotICAgIENMQVNTICogY2xhc3M7CiAKICAgICBpZiAoIShhdG9tID0gR2xvYmFsRmluZEF0b20oIG5hbWUgKSkpIHJldHVybiAwOwotCi0gICAgICAvKiBGaXJzdCBzZWFyY2ggdGFzay1zcGVjaWZpYyBjbGFzc2VzICovCi0KLSAgICBmb3IgKGNsYXNzID0gZmlyc3RDbGFzczsgKGNsYXNzKTsgY2xhc3MgPSBjbGFzcy0+bmV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChjbGFzcy0+d2Muc3R5bGUgJiBDU19HTE9CQUxDTEFTUykgY29udGludWU7Ci0gICAgICAgIGlmICgoY2xhc3MtPmF0b21OYW1lID09IGF0b20pICYmIAotICAgICAgICAgICAgKChoaW5zdGFuY2U9PShISU5TVEFOQ0UpMHhmZmZmKSB8fAotICAgICAgICAgICAgIChoaW5zdGFuY2UgPT0gY2xhc3MtPndjLmhJbnN0YW5jZSkpKSByZXR1cm4gY2xhc3M7Ci0gICAgfQotICAgIAotICAgICAgLyogVGhlbiBzZWFyY2ggZ2xvYmFsIGNsYXNzZXMgKi8KLQotICAgIGZvciAoY2xhc3MgPSBmaXJzdENsYXNzOyAoY2xhc3MpOyBjbGFzcyA9IGNsYXNzLT5uZXh0KQotICAgIHsKLSAgICAgICAgaWYgKCEoY2xhc3MtPndjLnN0eWxlICYgQ1NfR0xPQkFMQ0xBU1MpKSBjb250aW51ZTsKLSAgICAgICAgaWYgKGNsYXNzLT5hdG9tTmFtZSA9PSBhdG9tKSByZXR1cm4gY2xhc3M7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIENMQVNTX0ZpbmRDbGFzc0J5QXRvbSggYXRvbSwgaGluc3RhbmNlICk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgUmVnaXN0ZXJDbGFzcyAgICAoVVNFUi41NykKKyAqICAgICAgICAgICBSZWdpc3RlckNsYXNzMTYgICAgKFVTRVIuNTcpCiAgKi8KLUFUT00gUmVnaXN0ZXJDbGFzcyggTFBXTkRDTEFTUyBjbGFzcyApCitBVE9NIFJlZ2lzdGVyQ2xhc3MxNiggY29uc3QgV05EQ0xBU1MxNiAqd2MgKQogewogICAgIENMQVNTICogbmV3Q2xhc3MsICogcHJldkNsYXNzOwotICAgIEhDTEFTUyBoYW5kbGU7CisgICAgSEFORExFMTYgaEluc3RhbmNlOwogICAgIGludCBjbGFzc0V4dHJhOwogCiAgICAgZHByaW50Zl9jbGFzcyggc3RkZGViLCAiUmVnaXN0ZXJDbGFzczogd25kcHJvYz0lMDhseCBoaW5zdD0lMDR4IG5hbWU9JyVzJyBiYWNrZ3JvdW5kICUwNHhcbiIsCi0gICAgICAgICAgICAgICAgIChEV09SRCljbGFzcy0+bHBmblduZFByb2MsIGNsYXNzLT5oSW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgIEhJV09SRChjbGFzcy0+bHBzekNsYXNzTmFtZSkgPwotICAgICAgICAgICAgICAgICAgKGNoYXIgKilQVFJfU0VHX1RPX0xJTihjbGFzcy0+bHBzekNsYXNzTmFtZSkgOiAiKGludCkiLAotICAgICAgICAgICAgICAgICBjbGFzcy0+aGJyQmFja2dyb3VuZCApOworICAgICAgICAgICAgICAgICAoRFdPUkQpd2MtPmxwZm5XbmRQcm9jLCB3Yy0+aEluc3RhbmNlLAorICAgICAgICAgICAgICAgICBISVdPUkQod2MtPmxwc3pDbGFzc05hbWUpID8KKyAgICAgICAgICAgICAgICAgIChjaGFyICopUFRSX1NFR19UT19MSU4od2MtPmxwc3pDbGFzc05hbWUpIDogIihpbnQpIiwKKyAgICAgICAgICAgICAgICAgd2MtPmhickJhY2tncm91bmQgKTsKICAgICBkcHJpbnRmX2NsYXNzKHN0ZGRlYiwiICAgICAgICAgICAgICAgc3R5bGU9JTA0eCBjbHNFeHRyYT0lZCB3aW5FeHRyYT0lZFxuIiwKLSAgICAgICAgICAgICAgICAgIGNsYXNzLT5zdHlsZSwgY2xhc3MtPmNiQ2xzRXh0cmEsIGNsYXNzLT5jYlduZEV4dHJhICk7CisgICAgICAgICAgICAgICAgICB3Yy0+c3R5bGUsIHdjLT5jYkNsc0V4dHJhLCB3Yy0+Y2JXbmRFeHRyYSApOwogICAgIAogICAgICAgLyogV2luZG93IGNsYXNzZXMgYXJlIG93bmVkIGJ5IG1vZHVsZXMsIG5vdCBpbnN0YW5jZXMgKi8KLSAgICBjbGFzcy0+aEluc3RhbmNlID0gR2V0RXhlUHRyKCBjbGFzcy0+aEluc3RhbmNlICk7CisgICAgaEluc3RhbmNlID0gR2V0RXhlUHRyKCB3Yy0+aEluc3RhbmNlICk7CiAgICAgCiAgICAgICAvKiBDaGVjayBpZiBhIGNsYXNzIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzICovCi0gICAgcHJldkNsYXNzID0gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCBjbGFzcy0+bHBzekNsYXNzTmFtZSwgY2xhc3MtPmhJbnN0YW5jZSk7CisgICAgcHJldkNsYXNzID0gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCB3Yy0+bHBzekNsYXNzTmFtZSwgaEluc3RhbmNlICk7CiAgICAgaWYgKHByZXZDbGFzcykKICAgICB7CiAJICAvKiBDbGFzcyBjYW4gYmUgY3JlYXRlZCBvbmx5IGlmIGl0IGlzIGxvY2FsIGFuZCAqLwogCSAgLyogaWYgdGhlIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBnbG9iYWwuICAgKi8KIAotCWlmIChjbGFzcy0+c3R5bGUgJiBDU19HTE9CQUxDTEFTUykgcmV0dXJuIDA7Ci0JaWYgKCEocHJldkNsYXNzLT53Yy5zdHlsZSAmIENTX0dMT0JBTENMQVNTKSkgcmV0dXJuIDA7CisJaWYgKHdjLT5zdHlsZSAmIENTX0dMT0JBTENMQVNTKSByZXR1cm4gMDsKKwlpZiAoIShwcmV2Q2xhc3MtPnN0eWxlICYgQ1NfR0xPQkFMQ0xBU1MpKSByZXR1cm4gMDsKICAgICB9CiAKICAgICAgIC8qIENyZWF0ZSBjbGFzcyAqLwogCi0gICAgY2xhc3NFeHRyYSA9IChjbGFzcy0+Y2JDbHNFeHRyYSA8IDApID8gMCA6IGNsYXNzLT5jYkNsc0V4dHJhOwotICAgIGhhbmRsZSA9IFVTRVJfSEVBUF9BTExPQyggc2l6ZW9mKENMQVNTKSArIGNsYXNzRXh0cmEgKTsKLSAgICBpZiAoIWhhbmRsZSkgcmV0dXJuIDA7Ci0gICAgbmV3Q2xhc3MgPSAoQ0xBU1MgKikgVVNFUl9IRUFQX0xJTl9BRERSKCBoYW5kbGUgKTsKLSAgICBuZXdDbGFzcy0+c2VsZiAgICAgICAgICA9IGhhbmRsZTsKKyAgICBjbGFzc0V4dHJhID0gKHdjLT5jYkNsc0V4dHJhIDwgMCkgPyAwIDogd2MtPmNiQ2xzRXh0cmE7CisgICAgbmV3Q2xhc3MgPSAoQ0xBU1MgKilIZWFwQWxsb2MoIFN5c3RlbUhlYXAsIDAsIHNpemVvZihDTEFTUykgKyBjbGFzc0V4dHJhICk7CisgICAgaWYgKCFuZXdDbGFzcykgcmV0dXJuIDA7CiAgICAgbmV3Q2xhc3MtPm5leHQgICAgICAgICAgPSBmaXJzdENsYXNzOwotICAgIG5ld0NsYXNzLT53TWFnaWMgICAgICAgID0gQ0xBU1NfTUFHSUM7CisgICAgbmV3Q2xhc3MtPm1hZ2ljICAgICAgICAgPSBDTEFTU19NQUdJQzsKICAgICBuZXdDbGFzcy0+Y1dpbmRvd3MgICAgICA9IDA7ICAKLSAgICBuZXdDbGFzcy0+d2MgICAgICAgICAgICA9ICpjbGFzczsKLSAgICBuZXdDbGFzcy0+d2MuY2JXbmRFeHRyYSA9IChjbGFzcy0+Y2JXbmRFeHRyYSA8IDApID8gMCA6IGNsYXNzLT5jYlduZEV4dHJhOwotICAgIG5ld0NsYXNzLT53Yy5jYkNsc0V4dHJhID0gY2xhc3NFeHRyYTsKKyAgICBuZXdDbGFzcy0+c3R5bGUgICAgICAgICA9IHdjLT5zdHlsZTsKKyAgICBuZXdDbGFzcy0+bHBmblduZFByb2MgICA9IHdjLT5scGZuV25kUHJvYzsKKyAgICBuZXdDbGFzcy0+Y2JXbmRFeHRyYSAgICA9ICh3Yy0+Y2JXbmRFeHRyYSA8IDApID8gMCA6IHdjLT5jYlduZEV4dHJhOworICAgIG5ld0NsYXNzLT5jYkNsc0V4dHJhICAgID0gY2xhc3NFeHRyYTsKKyAgICBuZXdDbGFzcy0+bHBzek1lbnVOYW1lICA9IHdjLT5scHN6TWVudU5hbWU7CisgICAgbmV3Q2xhc3MtPmhJbnN0YW5jZSAgICAgPSBoSW5zdGFuY2U7CisgICAgbmV3Q2xhc3MtPmhJY29uICAgICAgICAgPSB3Yy0+aEljb247CisgICAgbmV3Q2xhc3MtPmhDdXJzb3IgICAgICAgPSB3Yy0+aEN1cnNvcjsKKyAgICBuZXdDbGFzcy0+aGJyQmFja2dyb3VuZCA9IHdjLT5oYnJCYWNrZ3JvdW5kOwogCi0gICAgbmV3Q2xhc3MtPmF0b21OYW1lID0gR2xvYmFsQWRkQXRvbSggY2xhc3MtPmxwc3pDbGFzc05hbWUgKTsKLSAgICBuZXdDbGFzcy0+d2MubHBzekNsYXNzTmFtZSA9IDA7CisgICAgbmV3Q2xhc3MtPmF0b21OYW1lID0gR2xvYmFsQWRkQXRvbSggd2MtPmxwc3pDbGFzc05hbWUgKTsKIAotICAgIGlmIChuZXdDbGFzcy0+d2Muc3R5bGUgJiBDU19DTEFTU0RDKQorICAgIGlmIChuZXdDbGFzcy0+c3R5bGUgJiBDU19DTEFTU0RDKQogCW5ld0NsYXNzLT5oZGNlID0gRENFX0FsbG9jRENFKCBEQ0VfQ0xBU1NfREMgKTsKICAgICBlbHNlIG5ld0NsYXNzLT5oZGNlID0gMDsKIAogICAgICAgLyogTWFrZSBhIGNvcHkgb2YgdGhlIG1lbnUgbmFtZSAob25seSBpZiBpdCBpcyBhIHN0cmluZykgKi8KIAotICAgIGlmIChISVdPUkQoY2xhc3MtPmxwc3pNZW51TmFtZSkpCisgICAgaWYgKEhJV09SRCh3Yy0+bHBzek1lbnVOYW1lKSkKICAgICB7Ci0gICAgICAgIGNoYXIgKm1lbnVuYW1lID0gUFRSX1NFR19UT19MSU4oIGNsYXNzLT5scHN6TWVudU5hbWUgKTsKKyAgICAgICAgY2hhciAqbWVudW5hbWUgPSBQVFJfU0VHX1RPX0xJTiggd2MtPmxwc3pNZW51TmFtZSApOwogCUhBTkRMRSBobmFtZSA9IFVTRVJfSEVBUF9BTExPQyggc3RybGVuKG1lbnVuYW1lKSsxICk7CiAJaWYgKGhuYW1lKQogCXsKLQkgICAgbmV3Q2xhc3MtPndjLmxwc3pNZW51TmFtZSA9IChTRUdQVFIpVVNFUl9IRUFQX1NFR19BRERSKCBobmFtZSApOworCSAgICBuZXdDbGFzcy0+bHBzek1lbnVOYW1lID0gKFNFR1BUUilVU0VSX0hFQVBfU0VHX0FERFIoIGhuYW1lICk7CiAJICAgIHN0cmNweSggVVNFUl9IRUFQX0xJTl9BRERSKCBobmFtZSApLCBtZW51bmFtZSApOwogCX0KICAgICB9CkBAIC0yMzMsOSArMjQ3LDU3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgVW5yZWdpc3RlckNsYXNzICAgIChVU0VSLjQwMykKKyAqICAgICAgICAgICBSZWdpc3RlckNsYXNzMzJBICAgICAgKFVTRVIzMi40MjYpCiAgKi8KLUJPT0wgVW5yZWdpc3RlckNsYXNzKCBTRUdQVFIgY2xhc3NOYW1lLCBIQU5ETEUgaGluc3RhbmNlICkKK0FUT00gUmVnaXN0ZXJDbGFzczMyQSggY29uc3QgV05EQ0xBU1MzMkEqIHdjICkKK3sKKyAgICBXTkRDTEFTUzE2IGNvcHk7CisgICAgSEFORExFIGNsYXNzaCA9IDAsIG1lbnVoID0gMDsKKyAgICBTRUdQVFIgY2xhc3NzZWdwLCBtZW51c2VncDsKKyAgICBjaGFyICpjbGFzc2J1ZiwgKm1lbnVidWY7CisKKyAgICBBVE9NIHJldHZhbDsKKyAgICBjb3B5LnN0eWxlPXdjLT5zdHlsZTsKKyAgICBBTElBU19SZWdpc3RlckFsaWFzKDAsMCwoRFdPUkQpd2MtPmxwZm5XbmRQcm9jKTsKKyAgICBjb3B5LmxwZm5XbmRQcm9jPXdjLT5scGZuV25kUHJvYzsKKyAgICBjb3B5LmNiQ2xzRXh0cmE9d2MtPmNiQ2xzRXh0cmE7CisgICAgY29weS5jYlduZEV4dHJhPXdjLT5jYlduZEV4dHJhOworICAgIGNvcHkuaEluc3RhbmNlPShISU5TVEFOQ0Upd2MtPmhJbnN0YW5jZTsKKyAgICBjb3B5LmhJY29uPShISUNPTil3Yy0+aEljb247CisgICAgY29weS5oQ3Vyc29yPShIQ1VSU09SKXdjLT5oQ3Vyc29yOworICAgIGNvcHkuaGJyQmFja2dyb3VuZD0oSEJSVVNIKXdjLT5oYnJCYWNrZ3JvdW5kOworICAgIAorICAgIC8qIEZJWE1FOiBUaGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IG9mIGRvaW5nIHRoaXMgLSBidXQgbmVpdGhlcgorICAgICAgIG1hbGxvYyBub3IgYWxsb2NhIHdpbGwgd29yayAqLworCisgICAgaWYod2MtPmxwc3pNZW51TmFtZSkKKyAgICB7CisgICAgICAgIG1lbnVoID0gR2xvYmFsQWxsb2MxNigwLCBzdHJsZW4od2MtPmxwc3pNZW51TmFtZSkrMSk7CisgICAgICAgIG1lbnVzZWdwID0gV0lOMTZfR2xvYmFsTG9jazE2KG1lbnVoKTsKKyAgICAgICAgbWVudWJ1ZiA9IFBUUl9TRUdfVE9fTElOKG1lbnVzZWdwKTsKKyAgICAgICAgc3RyY3B5KCBtZW51YnVmLCB3Yy0+bHBzek1lbnVOYW1lKTsKKyAgICAgICAgY29weS5scHN6TWVudU5hbWU9bWVudXNlZ3A7CisgICAgfWVsc2UKKyAgICAgICAgY29weS5scHN6TWVudU5hbWU9MDsKKyAgICBpZih3Yy0+bHBzekNsYXNzTmFtZSkKKyAgICB7CisgICAgICAgIGNsYXNzaCA9IEdsb2JhbEFsbG9jMTYoMCwgc3RybGVuKHdjLT5scHN6Q2xhc3NOYW1lKSsxKTsKKyAgICAgICAgY2xhc3NzZWdwID0gV0lOMTZfR2xvYmFsTG9jazE2KGNsYXNzaCk7CisgICAgICAgIGNsYXNzYnVmID0gUFRSX1NFR19UT19MSU4oY2xhc3NzZWdwKTsKKyAgICAgICAgc3RyY3B5KCBjbGFzc2J1Ziwgd2MtPmxwc3pDbGFzc05hbWUpOworICAgICAgICBjb3B5Lmxwc3pDbGFzc05hbWU9Y2xhc3NzZWdwOworICAgIH0KKyAgICByZXR2YWwgPSBSZWdpc3RlckNsYXNzMTYoJmNvcHkpOworICAgIEdsb2JhbEZyZWUxNihtZW51aCk7CisgICAgR2xvYmFsRnJlZTE2KGNsYXNzaCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBVbnJlZ2lzdGVyQ2xhc3MxNiAgICAoVVNFUi40MDMpCisgKi8KK0JPT0wgVW5yZWdpc3RlckNsYXNzMTYoIFNFR1BUUiBjbGFzc05hbWUsIEhJTlNUQU5DRTE2IGhpbnN0YW5jZSApCiB7CiAgICAgQ0xBU1MgKmNsYXNzUHRyOwogCkBAIC0yNDQsNyArMzA2LDcgQEAKICAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBjbGFzcyAqLwogICAgIGlmICghKGNsYXNzUHRyID0gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCBjbGFzc05hbWUsIGhpbnN0YW5jZSApKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmICgoY2xhc3NQdHItPndjLmhJbnN0YW5jZSAhPSBoaW5zdGFuY2UpIHx8IChjbGFzc1B0ci0+Y1dpbmRvd3MgPiAwKSkKKyAgICBpZiAoKGNsYXNzUHRyLT5oSW5zdGFuY2UgIT0gaGluc3RhbmNlKSB8fCAoY2xhc3NQdHItPmNXaW5kb3dzID4gMCkpCiAJcmV0dXJuIEZBTFNFOwogICAgIENMQVNTX0ZyZWVDbGFzcyggY2xhc3NQdHIgKTsKICAgICByZXR1cm4gVFJVRTsKQEAgLTI2MywxNCArMzI1LDE1IEBACiAgICAgICAgIHJldHVybiAqKFdPUkQgKikoKChjaGFyICopd25kUHRyLT5jbGFzcy0+d0V4dHJhKSArIG9mZnNldCk7CiAgICAgc3dpdGNoKG9mZnNldCkKICAgICB7Ci0gICAgICAgIGNhc2UgR0NXX0hCUkJBQ0tHUk9VTkQ6IHJldHVybiB3bmRQdHItPmNsYXNzLT53Yy5oYnJCYWNrZ3JvdW5kOwotICAgICAgICBjYXNlIEdDV19IQ1VSU09SOiAgICAgICByZXR1cm4gd25kUHRyLT5jbGFzcy0+d2MuaEN1cnNvcjsKLSAgICAgICAgY2FzZSBHQ1dfSElDT046ICAgICAgICAgcmV0dXJuIHduZFB0ci0+Y2xhc3MtPndjLmhJY29uOwotICAgICAgICBjYXNlIEdDV19ITU9EVUxFOiAgICAgICByZXR1cm4gd25kUHRyLT5jbGFzcy0+d2MuaEluc3RhbmNlOwotICAgICAgICBjYXNlIEdDV19DQldOREVYVFJBOiAgICByZXR1cm4gd25kUHRyLT5jbGFzcy0+d2MuY2JXbmRFeHRyYTsKLSAgICAgICAgY2FzZSBHQ1dfQ0JDTFNFWFRSQTogICAgcmV0dXJuIHduZFB0ci0+Y2xhc3MtPndjLmNiQ2xzRXh0cmE7Ci0gICAgICAgIGNhc2UgR0NXX1NUWUxFOiAgICAgICAgIHJldHVybiB3bmRQdHItPmNsYXNzLT53Yy5zdHlsZTsKKyAgICAgICAgY2FzZSBHQ1dfSEJSQkFDS0dST1VORDogcmV0dXJuIHduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQ7CisgICAgICAgIGNhc2UgR0NXX0hDVVJTT1I6ICAgICAgIHJldHVybiB3bmRQdHItPmNsYXNzLT5oQ3Vyc29yOworICAgICAgICBjYXNlIEdDV19ISUNPTjogICAgICAgICByZXR1cm4gd25kUHRyLT5jbGFzcy0+aEljb247CisgICAgICAgIGNhc2UgR0NXX0hNT0RVTEU6ICAgICAgIHJldHVybiB3bmRQdHItPmNsYXNzLT5oSW5zdGFuY2U7CiAgICAgICAgIGNhc2UgR0NXX0FUT006ICAgICAgICAgIHJldHVybiB3bmRQdHItPmNsYXNzLT5hdG9tTmFtZTsKKyAgICAgICAgY2FzZSBHQ1dfU1RZTEU6CisgICAgICAgIGNhc2UgR0NXX0NCV05ERVhUUkE6CisgICAgICAgIGNhc2UgR0NXX0NCQ0xTRVhUUkE6CisgICAgICAgICAgICByZXR1cm4gKFdPUkQpR2V0Q2xhc3NMb25nKCBod25kLCBvZmZzZXQgKTsKICAgICB9CiAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBpbnZhbGlkIG9mZnNldCAlZCBmb3IgR2V0Q2xhc3NXb3JkKClcbiIsIG9mZnNldCk7CiAgICAgcmV0dXJuIDA7CkBAIC0yODksMTQgKzM1MiwxNSBAQAogICAgIGlmIChvZmZzZXQgPj0gMCkgcHRyID0gKFdPUkQgKikoKChjaGFyICopd25kUHRyLT5jbGFzcy0+d0V4dHJhKSArIG9mZnNldCk7CiAgICAgZWxzZSBzd2l0Y2gob2Zmc2V0KQogICAgIHsKLSAgICAgICAgY2FzZSBHQ1dfSEJSQkFDS0dST1VORDogcHRyID0gJnduZFB0ci0+Y2xhc3MtPndjLmhickJhY2tncm91bmQ7IGJyZWFrOwotICAgICAgICBjYXNlIEdDV19IQ1VSU09SOiAgICAgICBwdHIgPSAmd25kUHRyLT5jbGFzcy0+d2MuaEN1cnNvcjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0NXX0hJQ09OOiAgICAgICAgIHB0ciA9ICZ3bmRQdHItPmNsYXNzLT53Yy5oSWNvbjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0NXX0hNT0RVTEU6ICAgICAgIHB0ciA9ICZ3bmRQdHItPmNsYXNzLT53Yy5oSW5zdGFuY2U7IGJyZWFrOwotICAgICAgICBjYXNlIEdDV19DQldOREVYVFJBOiAgICBwdHIgPSAmd25kUHRyLT5jbGFzcy0+d2MuY2JXbmRFeHRyYTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0NXX0NCQ0xTRVhUUkE6ICAgIHB0ciA9ICZ3bmRQdHItPmNsYXNzLT53Yy5jYkNsc0V4dHJhOyBicmVhazsKLSAgICAgICAgY2FzZSBHQ1dfU1RZTEU6ICAgICAgICAgcHRyID0gJnduZFB0ci0+Y2xhc3MtPndjLnN0eWxlOyBicmVhazsKKyAgICAgICAgY2FzZSBHQ1dfSEJSQkFDS0dST1VORDogcHRyID0gJnduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQ7IGJyZWFrOworICAgICAgICBjYXNlIEdDV19IQ1VSU09SOiAgICAgICBwdHIgPSAmd25kUHRyLT5jbGFzcy0+aEN1cnNvcjsgYnJlYWs7CisgICAgICAgIGNhc2UgR0NXX0hJQ09OOiAgICAgICAgIHB0ciA9ICZ3bmRQdHItPmNsYXNzLT5oSWNvbjsgYnJlYWs7CisgICAgICAgIGNhc2UgR0NXX0hNT0RVTEU6ICAgICAgIHB0ciA9ICZ3bmRQdHItPmNsYXNzLT5oSW5zdGFuY2U7IGJyZWFrOwogICAgICAgICBjYXNlIEdDV19BVE9NOiAgICAgICAgICBwdHIgPSAmd25kUHRyLT5jbGFzcy0+YXRvbU5hbWU7IGJyZWFrOworICAgICAgICBjYXNlIEdDV19TVFlMRToKKyAgICAgICAgY2FzZSBHQ1dfQ0JXTkRFWFRSQToKKyAgICAgICAgY2FzZSBHQ1dfQ0JDTFNFWFRSQToKKyAgICAgICAgICAgIHJldHVybiAoV09SRClTZXRDbGFzc0xvbmcoIGh3bmQsIG9mZnNldCwgKExPTkcpbmV3dmFsICk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJXYXJuaW5nOiBpbnZhbGlkIG9mZnNldCAlZCBmb3IgU2V0Q2xhc3NXb3JkKClcbiIsCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQpOwpAQCAtMzIwLDggKzM4NCwxMSBAQAogICAgICAgICByZXR1cm4gKihXT1JEICopKCgoY2hhciAqKXduZFB0ci0+Y2xhc3MtPndFeHRyYSkgKyBvZmZzZXQpOwogICAgIHN3aXRjaChvZmZzZXQpCiAgICAgewotICAgICAgICBjYXNlIEdDTF9NRU5VTkFNRTogcmV0dXJuIChMT05HKXduZFB0ci0+Y2xhc3MtPndjLmxwc3pNZW51TmFtZTsKLSAgICAgICAgY2FzZSBHQ0xfV05EUFJPQzogIHJldHVybiAoTE9ORyl3bmRQdHItPmNsYXNzLT53Yy5scGZuV25kUHJvYzsKKyAgICAgICAgY2FzZSBHQ0xfU1RZTEU6ICAgICAgcmV0dXJuIChMT05HKXduZFB0ci0+Y2xhc3MtPnN0eWxlOworICAgICAgICBjYXNlIEdDTF9DQldOREVYVFJBOiByZXR1cm4gKExPTkcpd25kUHRyLT5jbGFzcy0+Y2JXbmRFeHRyYTsKKyAgICAgICAgY2FzZSBHQ0xfQ0JDTFNFWFRSQTogcmV0dXJuIChMT05HKXduZFB0ci0+Y2xhc3MtPmNiQ2xzRXh0cmE7CisgICAgICAgIGNhc2UgR0NMX01FTlVOQU1FOiAgIHJldHVybiAoTE9ORyl3bmRQdHItPmNsYXNzLT5scHN6TWVudU5hbWU7CisgICAgICAgIGNhc2UgR0NMX1dORFBST0M6ICAgIHJldHVybiAoTE9ORyl3bmRQdHItPmNsYXNzLT5scGZuV25kUHJvYzsKICAgICB9CiAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBpbnZhbGlkIG9mZnNldCAlZCBmb3IgR2V0Q2xhc3NMb25nKClcbiIsIG9mZnNldCk7CiAgICAgcmV0dXJuIDA7CkBAIC0zNDAsOCArNDA3LDExIEBACiAgICAgaWYgKG9mZnNldCA+PSAwKSBwdHIgPSAoTE9ORyAqKSgoKGNoYXIgKil3bmRQdHItPmNsYXNzLT53RXh0cmEpICsgb2Zmc2V0KTsKICAgICBlbHNlIHN3aXRjaChvZmZzZXQpCiAgICAgewotICAgICAgICBjYXNlIEdDTF9NRU5VTkFNRTogcHRyID0gKExPTkcqKSZ3bmRQdHItPmNsYXNzLT53Yy5scHN6TWVudU5hbWU7IGJyZWFrOwotICAgICAgICBjYXNlIEdDTF9XTkRQUk9DOiAgcHRyID0gKExPTkcqKSZ3bmRQdHItPmNsYXNzLT53Yy5scGZuV25kUHJvYzsgYnJlYWs7CisgICAgICAgIGNhc2UgR0NMX1NUWUxFOiAgICAgIHB0ciA9IChMT05HKikmd25kUHRyLT5jbGFzcy0+c3R5bGU7IGJyZWFrOworICAgICAgICBjYXNlIEdDTF9DQldOREVYVFJBOiBwdHIgPSAoTE9ORyopJnduZFB0ci0+Y2xhc3MtPmNiV25kRXh0cmE7IGJyZWFrOworICAgICAgICBjYXNlIEdDTF9DQkNMU0VYVFJBOiBwdHIgPSAoTE9ORyopJnduZFB0ci0+Y2xhc3MtPmNiQ2xzRXh0cmE7IGJyZWFrOworICAgICAgICBjYXNlIEdDTF9NRU5VTkFNRTogICBwdHIgPSAoTE9ORyopJnduZFB0ci0+Y2xhc3MtPmxwc3pNZW51TmFtZTsgYnJlYWs7CisgICAgICAgIGNhc2UgR0NMX1dORFBST0M6ICAgIHB0ciA9IChMT05HKikmd25kUHRyLT5jbGFzcy0+bHBmblduZFByb2M7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiV2FybmluZzogaW52YWxpZCBvZmZzZXQgJWQgZm9yIFNldENsYXNzTG9uZygpXG4iLAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KTsKQEAgLTM3MSw3ICs0NDEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0Q2xhc3NJbmZvICAgICAgKFVTRVIuNDA0KQogICovCi1CT09MIEdldENsYXNzSW5mbyggSEFORExFIGhJbnN0YW5jZSwgU0VHUFRSIG5hbWUsIExQV05EQ0xBU1MgbHBXbmRDbGFzcyApCitCT09MIEdldENsYXNzSW5mbyggSEFORExFIGhJbnN0YW5jZSwgU0VHUFRSIG5hbWUsIFdORENMQVNTMTYgKmxwV25kQ2xhc3MgKQogewogICAgIENMQVNTICpjbGFzc1B0cjsKIApAQCAtMzgyLDkgKzQ1MiwxOSBAQAogICAgIGhJbnN0YW5jZSA9IEdldEV4ZVB0ciggaEluc3RhbmNlICk7CiAgICAgCiAgICAgaWYgKCEoY2xhc3NQdHIgPSBDTEFTU19GaW5kQ2xhc3NCeU5hbWUoIG5hbWUsIGhJbnN0YW5jZSApKSkgcmV0dXJuIEZBTFNFOwotICAgIGlmIChoSW5zdGFuY2UgJiYgKGhJbnN0YW5jZSAhPSBjbGFzc1B0ci0+d2MuaEluc3RhbmNlKSkgcmV0dXJuIEZBTFNFOworICAgIGlmIChoSW5zdGFuY2UgJiYgKGhJbnN0YW5jZSAhPSBjbGFzc1B0ci0+aEluc3RhbmNlKSkgcmV0dXJuIEZBTFNFOwogCi0gICAgbWVtY3B5KGxwV25kQ2xhc3MsICYoY2xhc3NQdHItPndjKSwgc2l6ZW9mKFdORENMQVNTKSk7CisgICAgbHBXbmRDbGFzcy0+c3R5bGUgICAgICAgICA9IChVSU5UMTYpY2xhc3NQdHItPnN0eWxlOworICAgIGxwV25kQ2xhc3MtPmxwZm5XbmRQcm9jICAgPSBjbGFzc1B0ci0+bHBmblduZFByb2M7CisgICAgbHBXbmRDbGFzcy0+Y2JDbHNFeHRyYSAgICA9IChJTlQxNiljbGFzc1B0ci0+Y2JDbHNFeHRyYTsKKyAgICBscFduZENsYXNzLT5jYlduZEV4dHJhICAgID0gKElOVDE2KWNsYXNzUHRyLT5jYlduZEV4dHJhOworICAgIGxwV25kQ2xhc3MtPmhJbnN0YW5jZSAgICAgPSBjbGFzc1B0ci0+aEluc3RhbmNlOworICAgIGxwV25kQ2xhc3MtPmhJY29uICAgICAgICAgPSBjbGFzc1B0ci0+aEljb247CisgICAgbHBXbmRDbGFzcy0+aEN1cnNvciAgICAgICA9IGNsYXNzUHRyLT5oQ3Vyc29yOworICAgIGxwV25kQ2xhc3MtPmhickJhY2tncm91bmQgPSBjbGFzc1B0ci0+aGJyQmFja2dyb3VuZDsKKyAgICBscFduZENsYXNzLT5scHN6TWVudU5hbWUgID0gY2xhc3NQdHItPmxwc3pNZW51TmFtZTsKKyAgICBscFduZENsYXNzLT5scHN6Q2xhc3NOYW1lID0gMDsKKwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC00MTQsNyArNDk0LDcgQEAKICAgICAgICAgcENsYXNzRW50cnktPndOZXh0ID0gMDsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICBwQ2xhc3NFbnRyeS0+aEluc3QgPSBjbGFzcy0+d2MuaEluc3RhbmNlOworICAgIHBDbGFzc0VudHJ5LT5oSW5zdCA9IGNsYXNzLT5oSW5zdGFuY2U7CiAgICAgcENsYXNzRW50cnktPndOZXh0Kys7CiAgICAgR2xvYmFsR2V0QXRvbU5hbWUoIGNsYXNzLT5hdG9tTmFtZSwgcENsYXNzRW50cnktPnN6Q2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocENsYXNzRW50cnktPnN6Q2xhc3NOYW1lKSApOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9kY2UuYyBiL3dpbmRvd3MvZGNlLmMKaW5kZXggYWZkZjMyZS4uMzU5Y2U5YiAxMDA2NDQKLS0tIGEvd2luZG93cy9kY2UuYworKysgYi93aW5kb3dzL2RjZS5jCkBAIC0zMTAsOSArMzEwLDkgQEAKICAgICAgICAgICAgICAgICAgICBEQ1hfQ0xJUFNJQkxJTkdTIHwgRENYX1BBUkVOVENMSVApOwogCWlmICh3bmRQdHIpCiAJewotICAgICAgICAgICAgaWYgKCEod25kUHRyLT5jbGFzcy0+d2Muc3R5bGUgJiAoQ1NfT1dOREMgfCBDU19DTEFTU0RDKSkpCisgICAgICAgICAgICBpZiAoISh3bmRQdHItPmNsYXNzLT5zdHlsZSAmIChDU19PV05EQyB8IENTX0NMQVNTREMpKSkKIAkJZmxhZ3MgfD0gRENYX0NBQ0hFOwotICAgICAgICAgICAgaWYgKHduZFB0ci0+Y2xhc3MtPndjLnN0eWxlICYgQ1NfUEFSRU5UREMpIGZsYWdzIHw9IERDWF9QQVJFTlRDTElQOworICAgICAgICAgICAgaWYgKHduZFB0ci0+Y2xhc3MtPnN0eWxlICYgQ1NfUEFSRU5UREMpIGZsYWdzIHw9IERDWF9QQVJFTlRDTElQOwogCSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQ0xJUENISUxEUkVOKSBmbGFncyB8PSBEQ1hfQ0xJUENISUxEUkVOOwogCSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQ0xJUFNJQkxJTkdTKSBmbGFncyB8PSBEQ1hfQ0xJUFNJQkxJTkdTOwogCX0KZGlmZiAtLWdpdCBhL3dpbmRvd3MvZGVmZGxnLmMgYi93aW5kb3dzL2RlZmRsZy5jCmluZGV4IDkxOTFiYTguLmZhNmYyNzUgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZGVmZGxnLmMKKysrIGIvd2luZG93cy9kZWZkbGcuYwpAQCAtMTQ3LDggKzE0Nyw4IEBACiAJICAgICAgLyogRnJlZSBkaWFsb2cgaGVhcCAoaWYgY3JlYXRlZCkgKi8KIAkgICAgaWYgKGRsZ0luZm8tPmhEaWFsb2dIZWFwKQogCSAgICB7Ci0JCUdsb2JhbFVubG9jayhkbGdJbmZvLT5oRGlhbG9nSGVhcCk7Ci0JCUdsb2JhbEZyZWUoZGxnSW5mby0+aERpYWxvZ0hlYXApOworCQlHbG9iYWxVbmxvY2sxNihkbGdJbmZvLT5oRGlhbG9nSGVhcCk7CisJCUdsb2JhbEZyZWUxNihkbGdJbmZvLT5oRGlhbG9nSGVhcCk7CiAJCWRsZ0luZm8tPmhEaWFsb2dIZWFwID0gMDsKIAkgICAgfQogCmRpZmYgLS1naXQgYS93aW5kb3dzL2RlZnduZC5jIGIvd2luZG93cy9kZWZ3bmQuYwppbmRleCBjY2U3MzExLi5kZmE2NDc4IDEwMDY0NAotLS0gYS93aW5kb3dzL2RlZnduZC5jCisrKyBiL3dpbmRvd3MvZGVmd25kLmMKQEAgLTI4LDYgKzI4LDMwIEBACiBzdGF0aWMgc2hvcnQgaU1lbnVTeXNLZXkgPSAwOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBERUZXTkRfSW5pdFN5c01lbnVQb3B1cAorICoKKyAqIEhhbmRsZSB0aGUgV01fSU5JVE1FTlVQT1BVUCBtZXNzYWdlIG9uIHRoZSBzeXN0ZW0gbWVudS4KKyAqLworc3RhdGljIHZvaWQgREVGV05EX0luaXRTeXNNZW51UG9wdXAoIEhNRU5VIGhtZW51LCBEV09SRCBzdHlsZSwgRFdPUkQgY2xzU3R5bGUgKQoreworICAgIEJPT0wgZ3JheTsKKworICAgIGdyYXkgPSAhKHN0eWxlICYgV1NfVEhJQ0tGUkFNRSkgfHwgKHN0eWxlICYgKFdTX01BWElNSVpFIHwgV1NfTUlOSU1JWkUpKTsKKyAgICBFbmFibGVNZW51SXRlbSggaG1lbnUsIFNDX1NJWkUsIChncmF5ID8gTUZfR1JBWUVEIDogTUZfRU5BQkxFRCkgKTsKKyAgICBncmF5ID0gKChzdHlsZSAmIFdTX01BWElNSVpFKSAhPSAwKTsKKyAgICBFbmFibGVNZW51SXRlbSggaG1lbnUsIFNDX01PVkUsIChncmF5ID8gTUZfR1JBWUVEIDogTUZfRU5BQkxFRCkgKTsKKyAgICBncmF5ID0gIShzdHlsZSAmIFdTX01JTklNSVpFQk9YKSB8fCAoc3R5bGUgJiBXU19NSU5JTUlaRSk7CisgICAgRW5hYmxlTWVudUl0ZW0oIGhtZW51LCBTQ19NSU5JTUlaRSwgKGdyYXkgPyBNRl9HUkFZRUQgOiBNRl9FTkFCTEVEKSApOworICAgIGdyYXkgPSAhKHN0eWxlICYgV1NfTUFYSU1JWkVCT1gpIHx8IChzdHlsZSAmIFdTX01BWElNSVpFKTsKKyAgICBFbmFibGVNZW51SXRlbSggaG1lbnUsIFNDX01BWElNSVpFLCAoZ3JheSA/IE1GX0dSQVlFRCA6IE1GX0VOQUJMRUQpICk7CisgICAgZ3JheSA9ICEoc3R5bGUgJiAoV1NfTUFYSU1JWkUgfCBXU19NSU5JTUlaRSkpOworICAgIEVuYWJsZU1lbnVJdGVtKCBobWVudSwgU0NfUkVTVE9SRSwgKGdyYXkgPyBNRl9HUkFZRUQgOiBNRl9FTkFCTEVEKSApOworICAgIGdyYXkgPSAoY2xzU3R5bGUgJiBDU19OT0NMT1NFKSAhPSAwOworICAgIEVuYWJsZU1lbnVJdGVtKCBobWVudSwgU0NfQ0xPU0UsIChncmF5ID8gTUZfR1JBWUVEIDogTUZfRU5BQkxFRCkgKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBERUZXTkRfU2V0VGV4dAogICoKICAqIFNldCB0aGUgd2luZG93IHRleHQuCkBAIC04Nyw3ICsxMTEsNyBAQAogCiAgICAgY2FzZSBXTV9MQlVUVE9OREJMQ0xLOgogICAgIGNhc2UgV01fTkNMQlVUVE9OREJMQ0xLOgotCXJldHVybiBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoIGh3bmQsIHdQYXJhbSwgbFBhcmFtICk7CisJcmV0dXJuIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsayggd25kUHRyLCB3UGFyYW0sIGxQYXJhbSApOwogCiAgICAgY2FzZSBXTV9OQ0FDVElWQVRFOgogCXJldHVybiBOQ19IYW5kbGVOQ0FjdGl2YXRlKCBod25kLCB3UGFyYW0gKTsKQEAgLTE2MiwxOCArMTg2LDE4IEBACiAgICAgY2FzZSBXTV9FUkFTRUJLR05EOgogICAgIGNhc2UgV01fSUNPTkVSQVNFQktHTkQ6CiAJewotCSAgICBpZiAoIXduZFB0ci0+Y2xhc3MtPndjLmhickJhY2tncm91bmQpIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKHduZFB0ci0+Y2xhc3MtPndjLmhickJhY2tncm91bmQgPD0gKEhCUlVTSCkoQ09MT1JfTUFYKzEpKQorCSAgICBpZiAoIXduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQpIHJldHVybiAwOworICAgICAgICAgICAgaWYgKHduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQgPD0gKEhCUlVTSCkoQ09MT1JfTUFYKzEpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBIQlJVU0ggaGJydXNoOwogICAgICAgICAgICAgICAgICBoYnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoKAotICAgICAgICAgICAgICAgICAgICAgR2V0U3lzQ29sb3IoKChEV09SRCl3bmRQdHItPmNsYXNzLT53Yy5oYnJCYWNrZ3JvdW5kKS0xKSk7CisgICAgICAgICAgICAgICAgICAgICBHZXRTeXNDb2xvcigoKERXT1JEKXduZFB0ci0+Y2xhc3MtPmhickJhY2tncm91bmQpLTEpKTsKICAgICAgICAgICAgICAgICAgRmlsbFdpbmRvdyggR2V0UGFyZW50KGh3bmQpLCBod25kLCAoSERDKXdQYXJhbSwgaGJydXNoKTsKICAgICAgICAgICAgICAgICAgRGVsZXRlT2JqZWN0IChoYnJ1c2gpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogCSAgICAgICAgIEZpbGxXaW5kb3coIEdldFBhcmVudChod25kKSwgaHduZCwgKEhEQyl3UGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHduZFB0ci0+Y2xhc3MtPndjLmhickJhY2tncm91bmQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT5jbGFzcy0+aGJyQmFja2dyb3VuZCApOwogCSAgICByZXR1cm4gMTsKIAl9CiAKQEAgLTMzOCw2ICszNjIsMTMgQEAKIAlTaG93V2luZG93KGh3bmQsKHdQYXJhbSk/IFNXX1NIT1dOT0FDVElWQVRFOiBTV19ISURFKTsKIAlicmVhazsgCiAKKyAgICBjYXNlIFdNX0lOSVRNRU5VUE9QVVA6CisgICAgICAgIC8qIE5vdCBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBiZWxvbmdzIGhlcmUgLS0gQUogKi8KKyAgICAgICAgaWYgKEhJV09SRChsUGFyYW0pKSAgLyogc3lzdGVtIG1lbnUgKi8KKyAgICAgICAgICAgIERFRldORF9Jbml0U3lzTWVudVBvcHVwKCAoSE1FTlUpd1BhcmFtLCB3bmRQdHItPmR3U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT5jbGFzcy0+c3R5bGUgKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFdNX0NBTkNFTE1PREU6CiAKIAkvKiBFbmRNZW51KCkgc2hvdWxkIGJlIGNhbGxlZCBpZiBpbiBtZW51IHN0YXRlIGJ1dCBjdXJyZW50bHkgaXQncwpAQCAtMzc4LDUgKzQwOSwzIEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotCi0KZGlmZiAtLWdpdCBhL3dpbmRvd3MvZGlhbG9nLmMgYi93aW5kb3dzL2RpYWxvZy5jCmluZGV4IGVlM2Y0MDIuLjMzYTkzYjQgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZGlhbG9nLmMKKysrIGIvd2luZG93cy9kaWFsb2cuYwpAQCAtMzExLDggKzMxMSw4IEBACiAgICAgcmVjdC5yaWdodCAtPSByZWN0LmxlZnQ7CiAgICAgcmVjdC5ib3R0b20gLT0gcmVjdC50b3A7CiAKLSAgICBpZiAoKElOVCl0ZW1wbGF0ZS54ID09IENXX1VTRURFRkFVTFQpCi0gICAgICAgIHJlY3QubGVmdCA9IHJlY3QudG9wID0gQ1dfVVNFREVGQVVMVDsKKyAgICBpZiAoKElOVDE2KXRlbXBsYXRlLnggPT0gQ1dfVVNFREVGQVVMVDE2KQorICAgICAgICByZWN0LmxlZnQgPSByZWN0LnRvcCA9IENXX1VTRURFRkFVTFQxNjsKICAgICBlbHNlCiAgICAgewogICAgICAgICByZWN0LmxlZnQgKz0gdGVtcGxhdGUueCAqIHhVbml0IC8gNDsKQEAgLTMyMSw3ICszMjEsNyBAQAogICAgICAgICAgICAgQ2xpZW50VG9TY3JlZW4oIG93bmVyLCAoUE9JTlQgKikmcmVjdCApOwogICAgIH0KIAotICAgIGh3bmQgPSBDcmVhdGVXaW5kb3dFeCggZXhTdHlsZSwgdGVtcGxhdGUuY2xhc3NOYW1lLCB0ZW1wbGF0ZS5jYXB0aW9uLCAKKyAgICBod25kID0gQ3JlYXRlV2luZG93RXgxNiggZXhTdHlsZSwgdGVtcGxhdGUuY2xhc3NOYW1lLCB0ZW1wbGF0ZS5jYXB0aW9uLCAKIAkJCSAgIHRlbXBsYXRlLnN0eWxlICYgfldTX1ZJU0lCTEUsCiAJCQkgICByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSwKIAkJCSAgIG93bmVyLCBoTWVudSwgaEluc3QsIChTRUdQVFIpMCApOwpAQCAtMzMzLDIzICszMzMsNiBAQAogICAgIH0KICAgICB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOwogCi0gICAgICAvKiBQdXJnZSBqdW5rIGZyb20gc3lzdGVtIG1lbnUgKi8KLSAgICAgIC8qIEZJWE1FOiB0aGlzIGRvZXNuJ3QgYmVsb25nIGhlcmUgKi8KLQotICAgIERlbGV0ZU1lbnUod25kUHRyLT5oU3lzTWVudSxTQ19TSVpFLE1GX0JZQ09NTUFORCk7Ci0gICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgV1NfTUFYSU1JWkVCT1gpICkKLSAgICB7Ci0gICAgICAgIERlbGV0ZU1lbnUod25kUHRyLT5oU3lzTWVudSxTQ19NQVhJTUlaRSxNRl9CWUNPTU1BTkQpOwotICAgICAgICBpZiggISh3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRUJPWCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBEZWxldGVNZW51KHduZFB0ci0+aFN5c01lbnUsU0NfTUlOSU1JWkUsTUZfQllDT01NQU5EKTsKLSAgICAgICAgICAgIERlbGV0ZU1lbnUod25kUHRyLT5oU3lzTWVudSxTQ19SRVNUT1JFLE1GX0JZQ09NTUFORCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBpZiAoISh3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRUJPWCkgKQotICAgICAgICAgICAgRGVsZXRlTWVudSh3bmRQdHItPmhTeXNNZW51LFNDX01JTklNSVpFLE1GX0JZQ09NTUFORCk7Ci0KICAgICAgIC8qIENyZWF0ZSBjb250cm9sIHdpbmRvd3MgKi8KIAogICAgIGRwcmludGZfZGlhbG9nKHN0ZGRlYiwgIiBCRUdJTlxuIiApOwpAQCAtNDAwLDcgKzM4Myw3IEBACiAgICAgICAgIHsKIAkgICAgaWYgKCFkbGdJbmZvLT5oRGlhbG9nSGVhcCkKICAgICAgICAgICAgIHsKLQkJZGxnSW5mby0+aERpYWxvZ0hlYXAgPSBHbG9iYWxBbGxvYyhHTUVNX0ZJWEVELCAweDEwMDAwKTsKKwkJZGxnSW5mby0+aERpYWxvZ0hlYXAgPSBHbG9iYWxBbGxvYzE2KEdNRU1fRklYRUQsIDB4MTAwMDApOwogCQlpZiAoIWRsZ0luZm8tPmhEaWFsb2dIZWFwKQogICAgICAgICAgICAgICAgIHsKIAkJICAgIGZwcmludGYoc3RkZXJyLCJDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtOiBJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGNyZWF0ZSBoZWFwIGZvciBlZGl0IGNvbnRyb2xcbiIpOwpAQCAtNDA4LDcgKzM5MSw3IEBACiAJCX0KIAkJTG9jYWxJbml0KGRsZ0luZm8tPmhEaWFsb2dIZWFwLCAwLCAweGZmZmYpOwogCSAgICB9Ci0JICAgIGh3bmRDdHJsID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9QQVJFTlROT1RJRlksIGNsYXNzTmFtZSwgd2luTmFtZSwKKwkgICAgaHduZEN0cmwgPSBDcmVhdGVXaW5kb3dFeDE2KFdTX0VYX05PUEFSRU5UTk9USUZZLCBjbGFzc05hbWUsIHdpbk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5zdHlsZSB8IFdTX0NISUxELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIueCAqIHhVbml0IC8gNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnkgKiB5VW5pdCAvIDgsCkBAIC00MTksMTQgKzQwMiwxNSBAQAogCX0KIAllbHNlCiAgICAgICAgIHsKLQkgICAgaHduZEN0cmwgPSBDcmVhdGVXaW5kb3dFeChXU19FWF9OT1BBUkVOVE5PVElGWSwgY2xhc3NOYW1lLCB3aW5OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuc3R5bGUgfCBXU19DSElMRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnggKiB4VW5pdCAvIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci55ICogeVVuaXQgLyA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuY3ggKiB4VW5pdCAvIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5jeSAqIHlVbml0IC8gOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHduZCwgKEhNRU5VKWhlYWRlci5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaEluc3QsIChTRUdQVFIpMCApOworCSAgICBod25kQ3RybCA9IENyZWF0ZVdpbmRvd0V4MTYoIFdTX0VYX05PUEFSRU5UTk9USUZZLCBjbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5zdHlsZSB8IFdTX0NISUxELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIueCAqIHhVbml0IC8gNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnkgKiB5VW5pdCAvIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5jeCAqIHhVbml0IC8gNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmN5ICogeVVuaXQgLyA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCAoSE1FTlUpaGVhZGVyLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoSW5zdCwgKFNFR1BUUikwICk7CiAJfQogCiAgICAgICAgIC8qIE1ha2UgdGhlIGNvbnRyb2wgbGFzdCBvbmUgaW4gWi1vcmRlciwgc28gdGhhdCBjb250cm9scyByZW1haW4KQEAgLTU1Myw5ICs1MzcsOSBAQAogICAgIEhXTkQgaHduZDsKICAgICBTRUdQVFIgcHRyOwogCi0gICAgaWYgKCEocHRyID0gKFNFR1BUUilXSU4xNl9HbG9iYWxMb2NrKCBkbGdUZW1wbGF0ZSApKSkgcmV0dXJuIC0xOworICAgIGlmICghKHB0ciA9IChTRUdQVFIpV0lOMTZfR2xvYmFsTG9jazE2KCBkbGdUZW1wbGF0ZSApKSkgcmV0dXJuIC0xOwogICAgIGh3bmQgPSBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtKCBoSW5zdCwgcHRyLCBvd25lciwgZGxnUHJvYywgcGFyYW0gKTsKLSAgICBHbG9iYWxVbmxvY2soIGRsZ1RlbXBsYXRlICk7CisgICAgR2xvYmFsVW5sb2NrMTYoIGRsZ1RlbXBsYXRlICk7CiAgICAgaWYgKGh3bmQpIHJldHVybiBESUFMT0dfRG9EaWFsb2dCb3goIGh3bmQsIG93bmVyICk7CiAgICAgcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9ldmVudC5jIGIvd2luZG93cy9ldmVudC5jCmluZGV4IDA5OGQ4NzYuLjI5MjRmZmMgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZXZlbnQuYworKysgYi93aW5kb3dzL2V2ZW50LmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCiAJV0lOUE9TX1NlbmROQ0NhbGNTaXplKCB3aW5wb3MuaHduZCwgVFJVRSwgJm5ld1dpbmRvd1JlY3QsCiAJCQkgICAgICAgJnduZFB0ci0+cmVjdFdpbmRvdywgJnduZFB0ci0+cmVjdENsaWVudCwKLQkJCSAgICAgICAmd2lucG9zLCAmbmV3Q2xpZW50UmVjdCApOworCQkJICAgICAgIE1BS0VfU0VHUFRSKCZ3aW5wb3MpLCAmbmV3Q2xpZW50UmVjdCApOwogCiAJLyogU2V0IG5ldyBzaXplIGFuZCBwb3NpdGlvbiAqLwogCXduZFB0ci0+cmVjdFdpbmRvdyA9IG5ld1dpbmRvd1JlY3Q7CkBAIC01OTMsMTAgKzU5MywxMCBAQAogICAgICAgICAgICAgLyogRG9uJ3Qgd29ycnkgaWYgd2UgY2FuJ3Qgb3BlbiAqLwogCSAgICBCT09MIGNvdWxkT3Blbj1PcGVuQ2xpcGJvYXJkKGh3bmQpOwogCSAgICBoVGV4dD1HZXRDbGlwYm9hcmREYXRhKENGX1RFWFQpOwotCSAgICB0ZXh0PUdsb2JhbExvY2soaFRleHQpOworCSAgICB0ZXh0PUdsb2JhbExvY2sxNihoVGV4dCk7CiAJICAgIFhDaGFuZ2VQcm9wZXJ0eShkaXNwbGF5LHJlcXVlc3QscnByb3AsWEFfU1RSSU5HLAogCQk4LFByb3BNb2RlUmVwbGFjZSx0ZXh0LHN0cmxlbih0ZXh0KSk7Ci0JICAgIEdsb2JhbFVubG9jayhoVGV4dCk7CisJICAgIEdsb2JhbFVubG9jazE2KGhUZXh0KTsKIAkgICAgLyogY2xvc2Ugb25seSBpZiB3ZSBvcGVuZWQgYmVmb3JlICovCiAJICAgIGlmKGNvdWxkT3BlbilDbG9zZUNsaXBib2FyZCgpOwogCX0KZGlmZiAtLWdpdCBhL3dpbmRvd3MvZ3JhcGhpY3MuYyBiL3dpbmRvd3MvZ3JhcGhpY3MuYwppbmRleCAwYTY4NDc5Li5iYjI5MTlhIDEwMDY0NAotLS0gYS93aW5kb3dzL2dyYXBoaWNzLmMKKysrIGIvd2luZG93cy9ncmFwaGljcy5jCkBAIC04MDgsNyArODA4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICBQb2x5UG9seWdvbiAgKEdESS40NTApCiAgKi8KLUJPT0wgUG9seVBvbHlnb24oIEhEQyBoZGMsIExQUE9JTlQgcHQsIExQSU5UIGNvdW50cywgV09SRCBwb2x5Z29ucyApCitCT09MIFBvbHlQb2x5Z29uKCBIREMgaGRjLCBMUFBPSU5UIHB0LCBMUElOVDE2IGNvdW50cywgV09SRCBwb2x5Z29ucyApCiB7CiAgICAgSFJHTiBocmduOwogICAgIERDICogZGMgPSAoREMgKikgR0RJX0dldE9ialB0ciggaGRjLCBEQ19NQUdJQyApOwpAQCAtOTk5LDggKzk5OSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgRHJhd0VkZ2UgIChVU0VSLjY1OSkKICAqLwotQk9PTCBXSU5BUEkgCi1EcmF3RWRnZShIREMgaGRjLCBMUFJFQ1QgcXJjLCBVSU5UIGVkZ2UsIFVJTlQgZmxhZ3MpIHsKK0JPT0wgRHJhd0VkZ2UoSERDIGhkYywgTFBSRUNUIHFyYywgVUlOVCBlZGdlLCBVSU5UIGZsYWdzKQorewogCWZwcmludGYoc3RkbmltcCwiRHJhd0VkZ2UoJXgsJXAsJWQsJXgpLCBlbXB0eSBzdHViIVxuIiwKIAkJaGRjLHFyYyxlZGdlLGZsYWdzCiAJKTsKQEAgLTEwMTAsOCArMTAxMCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgRHJhd0ZyYW1lQ29udHJvbCAgKFVTRVIuNjU2KQogICovCi1CT09MIFdJTkFQSSAKLURyYXdGcmFtZUNvbnRyb2woSERDIGhkYywgTFBSRUNUIHFyYywgVUlOVCBlZGdlLCBVSU5UIGZsYWdzKSB7CitCT09MIERyYXdGcmFtZUNvbnRyb2woSERDIGhkYywgTFBSRUNUIHFyYywgVUlOVCBlZGdlLCBVSU5UIGZsYWdzKQorewogCWZwcmludGYoc3RkbmltcCwiRHJhd0ZyYW1lQ29udHJvbCgleCwlcCwlZCwleCksIGVtcHR5IHN0dWIhXG4iLAogCQloZGMscXJjLGVkZ2UsZmxhZ3MKIAkpOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9ob29rLmMgYi93aW5kb3dzL2hvb2suYwppbmRleCBkNjhlMDM4Li4zYjQ2ZTlmIDEwMDY0NAotLS0gYS93aW5kb3dzL2hvb2suYworKysgYi93aW5kb3dzL2hvb2suYwpAQCAtNTAsNyArNTAsNyBAQAogICAgIE1FU1NBR0VRVUVVRSAqcXVldWU7CiAgICAgSEFORExFIGhvb2sgPSAwOwogCi0gICAgaWYgKChxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrKCBHZXRUYXNrUXVldWUoaFF1ZXVlKSApKSAhPSBOVUxMKQorICAgIGlmICgocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBHZXRUYXNrUXVldWUoaFF1ZXVlKSApKSAhPSBOVUxMKQogICAgICAgICBob29rID0gcXVldWUtPmhvb2tzW2lkIC0gV0hfRklSU1RfSE9PS107CiAgICAgaWYgKCFob29rKSBob29rID0gSE9PS19zeXN0ZW1Ib29rc1tpZCAtIFdIX0ZJUlNUX0hPT0tdOwogICAgIHJldHVybiBob29rOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKICAgICBpZiAoaFF1ZXVlKQogICAgIHsKLSAgICAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrKCBoUXVldWUgKTsKKyAgICAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrMTYoIGhRdWV1ZSApOwogICAgICAgICBkYXRhLT5uZXh0ID0gcXVldWUtPmhvb2tzW2lkIC0gV0hfRklSU1RfSE9PS107CiAgICAgICAgIHF1ZXVlLT5ob29rc1tpZCAtIFdIX0ZJUlNUX0hPT0tdID0gaGFuZGxlOwogICAgIH0KQEAgLTE0MSw3ICsxNDEsNyBAQAogCiAgICAgaWYgKGRhdGEtPm93bmVyUXVldWUpCiAgICAgewotICAgICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIGRhdGEtPm93bmVyUXVldWUgKTsKKyAgICAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrMTYoIGRhdGEtPm93bmVyUXVldWUgKTsKICAgICAgICAgaWYgKCFxdWV1ZSkgcmV0dXJuIEZBTFNFOwogICAgICAgICBwcmV2SG9vayA9ICZxdWV1ZS0+aG9va3NbZGF0YS0+aWQgLSBXSF9GSVJTVF9IT09LXTsKICAgICB9CkBAIC0xODIsNyArMTgyLDcgQEAKIAogICAgIC8qIE5vdyBjYWxsIGl0ICovCiAKLSAgICBpZiAoIShxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrKCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybiAwOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm4gMDsKICAgICBwcmV2SG9vayA9IHF1ZXVlLT5oQ3VySG9vazsKICAgICBxdWV1ZS0+aEN1ckhvb2sgPSBob29rOwogICAgIGRhdGEtPmluSG9va1Byb2MgPSAxOwpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZTsKICAgICBIQU5ETEUgbmV4dDsKIAotICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIEdldFRhc2tRdWV1ZSgwKSApKSkgcmV0dXJuIDA7CisgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybiAwOwogICAgIGlmICghKG5leHQgPSBIT09LX0dldE5leHRIb29rKCBxdWV1ZS0+aEN1ckhvb2sgKSkpIHJldHVybiAwOwogICAgIHJldHVybiBIT09LX0NhbGxIb29rKCBuZXh0LCBjb2RlLCB3UGFyYW0sIGxQYXJhbSApOwogfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9rZXlib2FyZC5jIGIvd2luZG93cy9rZXlib2FyZC5jCmluZGV4IDdkYWU2MzAuLmFjNmNjMGYgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mva2V5Ym9hcmQuYworKysgYi93aW5kb3dzL2tleWJvYXJkLmMKQEAgLTM3LDcgKzM3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJR2V0S2V5Ym9hcmRTdGF0ZQkJCVtVU0VSLjIyMl0KICAqLwotdm9pZCBHZXRLZXlib2FyZFN0YXRlKEJZVEUgRkFSICpscEtleVN0YXRlKQordm9pZCBHZXRLZXlib2FyZFN0YXRlKEJZVEUgKmxwS2V5U3RhdGUpCiB7CiAgICAgaWYgKGxwS2V5U3RhdGUgIT0gTlVMTCkgewogCUtleVN0YXRlVGFibGVbVktfTEJVVFRPTl0gPSBNb3VzZUJ1dHRvbnNTdGF0ZXNbMF0gPj4gODsKQEAgLTUwLDcgKzUwLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgIFNldEtleWJvYXJkU3RhdGUgICAgICAgICAgICBbVVNFUi4yMjNdCiAgKi8KLXZvaWQgU2V0S2V5Ym9hcmRTdGF0ZShCWVRFIEZBUiAqbHBLZXlTdGF0ZSkKK3ZvaWQgU2V0S2V5Ym9hcmRTdGF0ZShCWVRFICpscEtleVN0YXRlKQogewogICAgIGlmIChscEtleVN0YXRlICE9IE5VTEwpIHsKIAltZW1jcHkoS2V5U3RhdGVUYWJsZSwgbHBLZXlTdGF0ZSwgMjU2KTsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvbWRpLmMgYi93aW5kb3dzL21kaS5jCmluZGV4IGVhN2E0NTAuLmE5N2NmY2YgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvbWRpLmMKKysrIGIvd2luZG93cy9tZGkuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAKICAgICBjaS0+bkFjdGl2ZUNoaWxkcmVuKys7CiAgCi0gICAgaHduZCA9IENyZWF0ZVdpbmRvdyggY3MtPnN6Q2xhc3MsIGNzLT5zelRpdGxlLAorICAgIGh3bmQgPSBDcmVhdGVXaW5kb3cxNiggY3MtPnN6Q2xhc3MsIGNzLT5zelRpdGxlLAogCQkJICBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX0NBUFRJT04gfCBXU19DTElQU0lCTElOR1MgfAogCQkJICBXU19NQVhJTUlaRUJPWCB8IFdTX01JTklNSVpFQk9YIHwgV1NfU1lTTUVOVSB8CiAJCQkgIFdTX1RISUNLRlJBTUUgfCBXU19WSVNJQkxFIHwgY3MtPnN0eWxlLApAQCAtMTQzMyw4ICsxNDMzLDggQEAKICBzaG9ydCAJIG5ld1Bvcz0tMTsKICBzaG9ydCAJIGN1clBvczsKICBzaG9ydCAJIGxlbmd0aDsKLSBJTlQgCSBtaW5Qb3M7Ci0gSU5UIAkgbWF4UG9zOworIElOVDE2IAkgbWluUG9zOworIElOVDE2IAkgbWF4UG9zOwogIHNob3J0ICAgc2hpZnQ7CiAKICBpZiggIXduZFB0ciApIHJldHVybjsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvbWVzc2FnZS5jIGIvd2luZG93cy9tZXNzYWdlLmMKaW5kZXggMTIzN2E4ZS4uYzMzYWQxZiAxMDA2NDQKLS0tIGEvd2luZG93cy9tZXNzYWdlLmMKKysrIGIvd2luZG93cy9tZXNzYWdlLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWlmIChkYmxfY2xpY2sgJiYgKGhpdHRlc3QgPT0gSFRDTElFTlQpKQogCXsKIAkgICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgd2FudHMgdGhlIGRvdWJsZSBjbGljayBtZXNzYWdlLiAqLwotICAgICAgICAgICAgZGJsX2NsaWNrID0gKHBXbmQtPmNsYXNzLT53Yy5zdHlsZSAmIENTX0RCTENMS1MpICE9IDA7CisgICAgICAgICAgICBkYmxfY2xpY2sgPSAocFduZC0+Y2xhc3MtPnN0eWxlICYgQ1NfREJMQ0xLUykgIT0gMDsKIAl9CiAKIAlpZiAoZGJsX2NsaWNrKSBzd2l0Y2gobXNnLT5tZXNzYWdlKQpAQCAtNDEwLDcgKzQxMCw3IEBACiAgICAgd2hpbGUoMSkKICAgICB7ICAgIAogCWhRdWV1ZSAgID0gR2V0VGFza1F1ZXVlKDApOwotICAgICAgICBtc2dRdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrKCBoUXVldWUgKTsKKyAgICAgICAgbXNnUXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBoUXVldWUgKTsKICAgICAgICAgaWYgKCFtc2dRdWV1ZSkgcmV0dXJuIEZBTFNFOwogCiAJICAvKiBGaXJzdCBoYW5kbGUgYSBtZXNzYWdlIHB1dCBieSBTZW5kTWVzc2FnZSgpICovCkBAIC03MDYsNyArNzA2LDcgQEAKICAgICBEREVfR2V0UmVtb3RlTWVzc2FnZSgpOwogI2VuZGlmICAvKiBDT05GSUdfSVBDICovCiAgICAgCi0gICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm47CisgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybjsKICAgICBpZiAoKHF1ZXVlLT53UG9zdFFNc2cpIHx8IAogICAgICAgICAocXVldWUtPnN0YXR1cyAmIChRU19TRU5ETUVTU0FHRSB8IFFTX1BBSU5UKSkgfHwKICAgICAgICAgKHF1ZXVlLT5tc2dDb3VudCkgfHwgKFFVRVVFX0dldFN5c1F1ZXVlKCktPm1zZ0NvdW50KSApCmRpZmYgLS1naXQgYS93aW5kb3dzL25vbmNsaWVudC5jIGIvd2luZG93cy9ub25jbGllbnQuYwppbmRleCA1N2JhODkyLi4yNTM4ZWIxIDEwMDY0NAotLS0gYS93aW5kb3dzL25vbmNsaWVudC5jCisrKyBiL3dpbmRvd3Mvbm9uY2xpZW50LmMKQEAgLTY0MywxMCArNjQzLDEwIEBACiAgICAgICovCiAgICAgaWYgKElzSWNvbmljKGh3bmQpKQogICAgIHsKLSAgICAgICAgaWYgKHduZFB0ci0+Y2xhc3MtPndjLmhJY29uKQorICAgICAgICBpZiAod25kUHRyLT5jbGFzcy0+aEljb24pCiAgICAgICAgIHsKICAgICAgICAgICAgIFNlbmRNZXNzYWdlKGh3bmQsIFdNX0lDT05FUkFTRUJLR05ELCAoV1BBUkFNKWhkYywgMCk7Ci0gICAgICAgICAgICBEcmF3SWNvbiggaGRjLCAwLCAwLCB3bmRQdHItPmNsYXNzLT53Yy5oSWNvbiApOworICAgICAgICAgICAgRHJhd0ljb24oIGhkYywgMCwgMCwgd25kUHRyLT5jbGFzcy0+aEljb24gKTsKICAgICAgICAgfQogICAgICAgICBSZWxlYXNlREMoaHduZCwgaGRjKTsKICAgICAgICAgd25kUHRyLT5mbGFncyAmPSB+V0lOX0lOVEVSTkFMX1BBSU5UOwpAQCAtNzgyLDkgKzc4Miw5IEBACiAJewogCSAgICBXTkQgKnduZFB0cjsKIAkgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKSkpIGJyZWFrOwotCSAgICBpZiAod25kUHRyLT5jbGFzcy0+d2MuaEN1cnNvcikKKwkgICAgaWYgKHduZFB0ci0+Y2xhc3MtPmhDdXJzb3IpCiAJICAgIHsKLQkJU2V0Q3Vyc29yKCB3bmRQdHItPmNsYXNzLT53Yy5oQ3Vyc29yICk7CisJCVNldEN1cnNvciggd25kUHRyLT5jbGFzcy0+aEN1cnNvciApOwogCQlyZXR1cm4gVFJVRTsKIAkgICAgfQogCSAgICBlbHNlIHJldHVybiBGQUxTRTsKQEAgLTEyNjEsMzAgKzEyNjEsMzEgQEAKICAqCiAgKiBIYW5kbGUgYSBXTV9OQ0xCVVRUT05EQkxDTEsgbWVzc2FnZS4gQ2FsbGVkIGZyb20gRGVmV2luZG93UHJvYygpLgogICovCi1MT05HIE5DX0hhbmRsZU5DTEJ1dHRvbkRibENsayggSFdORCBod25kLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtICkKK0xPTkcgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrKCBXTkQgKnBXbmQsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQogewogICAgIC8qCiAgICAgICogaWYgdGhpcyBpcyBhbiBpY29uLCBzZW5kIGEgcmVzdG9yZSBzaW5jZSB3ZSBhcmUgaGFuZGxpbmcKICAgICAgKiBhIGRvdWJsZSBjbGljawogICAgICAqLwotICAgIGlmIChJc0ljb25pYyhod25kKSkKKyAgICBpZiAocFduZC0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKQogICAgIHsKLSAgICAgIFNlbmRNZXNzYWdlKGh3bmQsIFdNX1NZU0NPTU1BTkQsIFNDX1JFU1RPUkUsIGxQYXJhbSk7Ci0gICAgICByZXR1cm4gMDsKKyAgICAgICAgU2VuZE1lc3NhZ2UoIHBXbmQtPmh3bmRTZWxmLCBXTV9TWVNDT01NQU5ELCBTQ19SRVNUT1JFLCBsUGFyYW0gKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfSAKIAogICAgIHN3aXRjaCh3UGFyYW0pICAvKiBIaXQgdGVzdCAqLwogICAgIHsKICAgICBjYXNlIEhUQ0FQVElPTjoKICAgICAgICAgLyogc3RvcCBwcm9jZXNzaW5nIGlmIFdTX01BWElNSVpFQk9YIGlzIG1pc3NpbmcgKi8KLQotICAgICAgICBpZiggR2V0V2luZG93TG9uZyggaHduZCAsIEdXTF9TVFlMRSkgJiBXU19NQVhJTUlaRUJPWCApCi0gICAgICAgICAgICBTZW5kTWVzc2FnZSggaHduZCwgV01fU1lTQ09NTUFORCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJc1pvb21lZChod25kKSA/IFNDX1JFU1RPUkUgOiBTQ19NQVhJTUlaRSwgbFBhcmFtICk7CisgICAgICAgIGlmIChwV25kLT5kd1N0eWxlICYgV1NfTUFYSU1JWkVCT1gpCisgICAgICAgICAgICBTZW5kTWVzc2FnZSggcFduZC0+aHduZFNlbGYsIFdNX1NZU0NPTU1BTkQsCisgICAgICAgICAgICAgICAgICAgICAgKHBXbmQtPmR3U3R5bGUgJiBXU19NQVhJTUlaRSkgPyBTQ19SRVNUT1JFIDogU0NfTUFYSU1JWkUsCisgICAgICAgICAgICAgICAgICAgICAgbFBhcmFtICk7CiAJYnJlYWs7CiAKICAgICBjYXNlIEhUU1lTTUVOVToKLQlTZW5kTWVzc2FnZSggaHduZCwgV01fU1lTQ09NTUFORCwgU0NfQ0xPU0UsIGxQYXJhbSApOworICAgICAgICBpZiAoIShwV25kLT5jbGFzcy0+c3R5bGUgJiBDU19OT0NMT1NFKSkKKyAgICAgICAgICAgIFNlbmRNZXNzYWdlKCBwV25kLT5od25kU2VsZiwgV01fU1lTQ09NTUFORCwgU0NfQ0xPU0UsIGxQYXJhbSApOwogCWJyZWFrOwogICAgIH0KICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvcGFpbnRpbmcuYyBiL3dpbmRvd3MvcGFpbnRpbmcuYwppbmRleCBkM2Y3Njk0Li45MzU2NTIzIDEwMDY0NAotLS0gYS93aW5kb3dzL3BhaW50aW5nLmMKKysrIGIvd2luZG93cy9wYWludGluZy5jCkBAIC0zMDMsNyArMzAzLDEwIEBACiAKICAgICAgIC8qIEVyYXNlL3VwZGF0ZSB3aW5kb3cgKi8KIAotICAgIGlmIChmbGFncyAmIFJEV19VUERBVEVOT1cpIFNlbmRNZXNzYWdlKCBod25kLCBXTV9QQUlOVCwgMCwgMCApOworICAgIGlmIChmbGFncyAmIFJEV19VUERBVEVOT1cpCisgICAgeworICAgICAgICBpZiAod25kUHRyLT5ocmduVXBkYXRlKSBTZW5kTWVzc2FnZSggaHduZCwgV01fUEFJTlQsIDAsIDAgKTsKKyAgICB9CiAgICAgZWxzZSBpZiAoZmxhZ3MgJiBSRFdfRVJBU0VOT1cpCiAgICAgewogICAgICAgICBpZiAod25kUHRyLT5mbGFncyAmIFdJTl9ORUVEU19OQ1BBSU5UKQpAQCAtMzE4LDcgKzMyMSw3IEBACiAgICAgICAgICAgICAgIC8qIERvbid0IHNlbmQgV01fRVJBU0VCS0dORCB0byBpY29ucyAqLwogICAgICAgICAgICAgICAvKiAoV01fSUNPTkVSQVNFQktHTkQgaXMgc2VudCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBXTV9OQ1BBSU5UKSAqLwogICAgICAgICAgICAgICAgIGlmICghKHduZFB0ci0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKSB8fAotICAgICAgICAgICAgICAgICAgICAhd25kUHRyLT5jbGFzcy0+d2MuaEljb24pCisgICAgICAgICAgICAgICAgICAgICF3bmRQdHItPmNsYXNzLT5oSWNvbikKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTZW5kTWVzc2FnZSggaHduZCwgV01fRVJBU0VCS0dORCwgKFdQQVJBTSloZGMsIDAgKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHduZFB0ci0+ZmxhZ3MgJj0gfldJTl9ORUVEU19FUkFTRUJLR05EOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9xdWV1ZS5jIGIvd2luZG93cy9xdWV1ZS5jCmluZGV4IDA0ZDgwODEuLmM4NzRmMzkgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvcXVldWUuYworKysgYi93aW5kb3dzL3F1ZXVlLmMKQEAgLTI1LDggKzI1LDggQEAKIHsKICAgICBNRVNTQUdFUVVFVUUgKnBxOyAKIAotICAgIGlmICghKHBxID0gKE1FU1NBR0VRVUVVRSopIEdsb2JhbExvY2soIGhRdWV1ZSApKSB8fAotICAgICAgICBHbG9iYWxTaXplKGhRdWV1ZSkgPCBzaXplb2YoTUVTU0FHRVFVRVVFKSArIHBxLT5xdWV1ZVNpemUqc2l6ZW9mKFFNU0cpKQorICAgIGlmICghKHBxID0gKE1FU1NBR0VRVUVVRSopIEdsb2JhbExvY2sxNiggaFF1ZXVlICkpIHx8CisgICAgICAgIEdsb2JhbFNpemUxNihoUXVldWUpIDwgc2l6ZW9mKE1FU1NBR0VRVUVVRSkrcHEtPnF1ZXVlU2l6ZSpzaXplb2YoUU1TRykpCiAgICAgewogICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICIlMDR4IGlzIG5vdCBhIHF1ZXVlIGhhbmRsZVxuIiwgaFF1ZXVlICk7CiAgICAgICAgIHJldHVybjsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICBmcHJpbnRmKCBzdGRlcnIsICJRdWV1ZSBTaXplIE1zZ3MgVGFza1xuIiApOwogICAgIHdoaWxlIChoUXVldWUpCiAgICAgewotICAgICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIGhRdWV1ZSApOworICAgICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggaFF1ZXVlICk7CiAgICAgICAgIGlmICghcXVldWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIioqKiBCYWQgcXVldWUgaGFuZGxlICUwNHhcbiIsIGhRdWV1ZSApOwpAQCAtOTQsMTMgKzk0LDEzIEBACiAgICAgZHByaW50Zl9tc2coc3RkZGViLCJDcmVhdGluZyBtZXNzYWdlIHF1ZXVlLi4uXG4iKTsKIAogICAgIHF1ZXVlU2l6ZSA9IHNpemVvZihNRVNTQUdFUVVFVUUpICsgc2l6ZSAqIHNpemVvZihRTVNHKTsKLSAgICBpZiAoIShoUXVldWUgPSBHbG9iYWxBbGxvYyggR01FTV9GSVhFRCB8IEdNRU1fWkVST0lOSVQsIHF1ZXVlU2l6ZSApKSkKKyAgICBpZiAoIShoUXVldWUgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX0ZJWEVEIHwgR01FTV9aRVJPSU5JVCwgcXVldWVTaXplICkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtc2dRdWV1ZSA9IChNRVNTQUdFUVVFVUUgKikgR2xvYmFsTG9jayggaFF1ZXVlICk7CisgICAgbXNnUXVldWUgPSAoTUVTU0FHRVFVRVVFICopIEdsb2JhbExvY2sxNiggaFF1ZXVlICk7CiAgICAgbXNnUXVldWUtPm1zZ1NpemUgPSBzaXplb2YoUU1TRyk7CiAgICAgbXNnUXVldWUtPnF1ZXVlU2l6ZSA9IHNpemU7CiAgICAgbXNnUXVldWUtPndXaW5WZXJzaW9uID0gMDsgIC8qIEZJWE1FPyAqLwotICAgIEdsb2JhbFVubG9jayggaFF1ZXVlICk7CisgICAgR2xvYmFsVW5sb2NrMTYoIGhRdWV1ZSApOwogICAgIHJldHVybiBoUXVldWU7CiB9CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogICovCiBCT09MIFFVRVVFX0RlbGV0ZU1zZ1F1ZXVlKCBIUVVFVUUgaFF1ZXVlICkKIHsKLSAgICBNRVNTQUdFUVVFVUUgKiBtc2dRdWV1ZSA9IChNRVNTQUdFUVVFVUUqKUdsb2JhbExvY2soaFF1ZXVlKTsKKyAgICBNRVNTQUdFUVVFVUUgKiBtc2dRdWV1ZSA9IChNRVNTQUdFUVVFVUUqKUdsb2JhbExvY2sxNihoUXVldWUpOwogICAgIEhRVUVVRSAqcFByZXY7CiAKICAgICBkcHJpbnRmX21zZyhzdGRkZWIsIkRlbGV0aW5nIG1lc3NhZ2UgcXVldWUgJTA0eFxuIiwgaFF1ZXVlKTsKQEAgLTEyNiwxMSArMTI2LDExIEBACiAgICAgcFByZXYgPSAmaEZpcnN0UXVldWU7CiAgICAgd2hpbGUgKCpwUHJldiAmJiAoKnBQcmV2ICE9IGhRdWV1ZSkpCiAgICAgewotICAgICAgICBNRVNTQUdFUVVFVUUgKm1zZ1EgPSAoTUVTU0FHRVFVRVVFKilHbG9iYWxMb2NrKCpwUHJldik7CisgICAgICAgIE1FU1NBR0VRVUVVRSAqbXNnUSA9IChNRVNTQUdFUVVFVUUqKUdsb2JhbExvY2sxNigqcFByZXYpOwogICAgICAgICBwUHJldiA9ICZtc2dRLT5uZXh0OwogICAgIH0KICAgICBpZiAoKnBQcmV2KSAqcFByZXYgPSBtc2dRdWV1ZS0+bmV4dDsKLSAgICBHbG9iYWxGcmVlKCBoUXVldWUgKTsKKyAgICBHbG9iYWxGcmVlMTYoIGhRdWV1ZSApOwogICAgIHJldHVybiAxOwogfQogCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgICBpZiAoc2l6ZSA+IE1BWF9RVUVVRV9TSVpFKSBzaXplID0gTUFYX1FVRVVFX1NJWkU7CiAgICAgZWxzZSBpZiAoc2l6ZSA8PSAwKSBzaXplID0gMTsKICAgICBpZiAoIShobWVtU3lzTXNnUXVldWUgPSBRVUVVRV9DcmVhdGVNc2dRdWV1ZSggc2l6ZSApKSkgcmV0dXJuIEZBTFNFOwotICAgIHN5c01zZ1F1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKSBHbG9iYWxMb2NrKCBobWVtU3lzTXNnUXVldWUgKTsKKyAgICBzeXNNc2dRdWV1ZSA9IChNRVNTQUdFUVVFVUUgKikgR2xvYmFsTG9jazE2KCBobWVtU3lzTXNnUXVldWUgKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgaW50IHBvczsKICAgICBNRVNTQUdFUVVFVUUgKm1zZ1F1ZXVlOwogCi0gICAgaWYgKCEobXNnUXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggaFF1ZXVlICkpKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKCEobXNnUXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBoUXVldWUgKSkpIHJldHVybiBGQUxTRTsKICAgICBwb3MgPSBtc2dRdWV1ZS0+bmV4dEZyZWVNZXNzYWdlOwogCiAgICAgICAvKiBDaGVjayBpZiBxdWV1ZSBpcyBmdWxsICovCkBAIC0zMTEsNyArMzExLDcgQEAKICAqLwogSFRBU0sgUVVFVUVfR2V0UXVldWVUYXNrKCBIUVVFVUUgaFF1ZXVlICkKIHsKLSAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlID0gR2xvYmFsTG9jayggaFF1ZXVlICk7CisgICAgTUVTU0FHRVFVRVVFICpxdWV1ZSA9IEdsb2JhbExvY2sxNiggaFF1ZXVlICk7CiAgICAgcmV0dXJuIChxdWV1ZSkgPyBxdWV1ZS0+aFRhc2sgOiAwIDsKIH0KIApAQCAtMzIzLDcgKzMyMyw3IEBACiB7CiAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZTsKIAotICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIGhRdWV1ZSApKSkgcmV0dXJuOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggaFF1ZXVlICkpKSByZXR1cm47CiAgICAgcXVldWUtPndQYWludENvdW50Kys7CiAgICAgcXVldWUtPnN0YXR1cyB8PSBRU19QQUlOVDsKICAgICBxdWV1ZS0+dGVtcFN0YXR1cyB8PSBRU19QQUlOVDsgICAgCkBAIC0zMzcsNyArMzM3LDcgQEAKIHsKICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlOwogCi0gICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggaFF1ZXVlICkpKSByZXR1cm47CisgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBoUXVldWUgKSkpIHJldHVybjsKICAgICBxdWV1ZS0+d1BhaW50Q291bnQtLTsKICAgICBpZiAoIXF1ZXVlLT53UGFpbnRDb3VudCkgcXVldWUtPnN0YXR1cyAmPSB+UVNfUEFJTlQ7CiB9CkBAIC0zNTAsNyArMzUwLDcgQEAKIHsKICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlOwogCi0gICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggaFF1ZXVlICkpKSByZXR1cm47CisgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBoUXVldWUgKSkpIHJldHVybjsKICAgICBxdWV1ZS0+d1RpbWVyQ291bnQrKzsKICAgICBxdWV1ZS0+c3RhdHVzIHw9IFFTX1RJTUVSOwogICAgIHF1ZXVlLT50ZW1wU3RhdHVzIHw9IFFTX1RJTUVSOwpAQCAtMzY0LDcgKzM2NCw3IEBACiB7CiAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZTsKIAotICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIGhRdWV1ZSApKSkgcmV0dXJuOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggaFF1ZXVlICkpKSByZXR1cm47CiAgICAgcXVldWUtPndUaW1lckNvdW50LS07CiAgICAgaWYgKCFxdWV1ZS0+d1RpbWVyQ291bnQpIHF1ZXVlLT5zdGF0dXMgJj0gflFTX1RJTUVSOwogfQpAQCAtMzc3LDcgKzM3Nyw3IEBACiB7CiAgICAgTUVTU0FHRVFVRVVFICpxdWV1ZTsKIAotICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIEdldFRhc2tRdWV1ZSgwKSApKSkgcmV0dXJuOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm47CiAgICAgcXVldWUtPndQb3N0UU1zZyA9IFRSVUU7CiAgICAgcXVldWUtPndFeGl0Q29kZSA9IChXT1JEKWV4aXRDb2RlOwogfQpAQCAtNDE3LDcgKzQxNyw3IEBACiAgICAgaWYgKChoUXVldWUgPSBHZXRUYXNrUXVldWUoMCkpICE9IDApIFFVRVVFX0RlbGV0ZU1zZ1F1ZXVlKCBoUXVldWUgKTsKIAogICAgIC8qIExpbmsgbmV3IHF1ZXVlIGludG8gbGlzdCAqLwotICAgIHF1ZXVlUHRyID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2soIGhOZXdRdWV1ZSApOworICAgIHF1ZXVlUHRyID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggaE5ld1F1ZXVlICk7CiAgICAgcXVldWVQdHItPmhUYXNrID0gR2V0Q3VycmVudFRhc2soKTsKICAgICBxdWV1ZVB0ci0+bmV4dCAgPSBoRmlyc3RRdWV1ZTsKICAgICBoRmlyc3RRdWV1ZSA9IGhOZXdRdWV1ZTsKQEAgLTQzNSw3ICs0MzUsNyBAQAogICAgIE1FU1NBR0VRVUVVRSAqcXVldWU7CiAgICAgRFdPUkQgcmV0OwogCi0gICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrMTYoIEdldFRhc2tRdWV1ZSgwKSApKSkgcmV0dXJuIDA7CiAgICAgcmV0ID0gTUFLRUxPTkcoIHF1ZXVlLT50ZW1wU3RhdHVzLCBxdWV1ZS0+c3RhdHVzICk7CiAgICAgcXVldWUtPnRlbXBTdGF0dXMgPSAwOwogICAgIHJldHVybiByZXQgJiBNQUtFTE9ORyggZmxhZ3MsIGZsYWdzICk7CkBAIC00NDksNyArNDQ5LDcgQEAKIHsKICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlOwogCi0gICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jazE2KCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybiBGQUxTRTsKICAgICByZXR1cm4gcXVldWUtPnN0YXR1cyAmIChRU19LRVkgfCBRU19NT1VTRUJVVFRPTik7CiB9CiAKQEAgLTQ2MSw3ICs0NjEsNyBAQAogewogICAgIE1FU1NBR0VRVUVVRSAqcXVldWU7CiAKLSAgICBpZiAoIShxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrKCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybiAwOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm4gMDsKICAgICByZXR1cm4gcXVldWUtPkdldE1lc3NhZ2VQb3NWYWw7CiB9CiAKQEAgLTQ3Myw3ICs0NzMsNyBAQAogewogICAgIE1FU1NBR0VRVUVVRSAqcXVldWU7CiAKLSAgICBpZiAoIShxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrKCBHZXRUYXNrUXVldWUoMCkgKSkpIHJldHVybiAwOworICAgIGlmICghKHF1ZXVlID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm4gMDsKICAgICByZXR1cm4gcXVldWUtPkdldE1lc3NhZ2VUaW1lVmFsOwogfQogCkBAIC00ODUsNiArNDg1LDYgQEAKIHsKICAgICBNRVNTQUdFUVVFVUUgKnF1ZXVlOwogCi0gICAgaWYgKCEocXVldWUgPSAoTUVTU0FHRVFVRVVFICopR2xvYmFsTG9jayggR2V0VGFza1F1ZXVlKDApICkpKSByZXR1cm4gMDsKKyAgICBpZiAoIShxdWV1ZSA9IChNRVNTQUdFUVVFVUUgKilHbG9iYWxMb2NrMTYoIEdldFRhc2tRdWV1ZSgwKSApKSkgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHF1ZXVlLT5HZXRNZXNzYWdlRXh0cmFJbmZvVmFsOwogfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9zeXNjb2xvci5jIGIvd2luZG93cy9zeXNjb2xvci5jCmluZGV4IDRlNWJjMDcuLjUwZTAzYjggMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvc3lzY29sb3IuYworKysgYi93aW5kb3dzL3N5c2NvbG9yLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogICogICAgICAgICAgICAgU2V0U3lzQ29sb3JzICAgICAgICAgIChVU0VSLjE4MSkKICAqLwogCi12b2lkIFNldFN5c0NvbG9ycyhpbnQgbkNoYW5nZXMsIExQSU5UIGxwU3lzQ29sb3IsIENPTE9SUkVGICpscENvbG9yVmFsdWVzKQordm9pZCBTZXRTeXNDb2xvcnMoaW50IG5DaGFuZ2VzLCBMUElOVDE2IGxwU3lzQ29sb3IsIENPTE9SUkVGICpscENvbG9yVmFsdWVzKQogewogICAgIGludCBpOwogCmRpZmYgLS1naXQgYS93aW5kb3dzL3V0aWxpdHkuYyBiL3dpbmRvd3MvdXRpbGl0eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2UxNzgwLi4wMDAwMDAwCi0tLSBhL3dpbmRvd3MvdXRpbGl0eS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQwICswLDAgQEAKLS8qCXV0aWxpdHkuYwlVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgV2luZQotICoJCQlBdXRob3I6CQlBbmRyZXcgQnVsaGFrCi0gKgkJCUNvbW1lbmNlZDoJMTAtOS0xOTkzCi0gKgotICoJCQlUaGlzIHVuaXQgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9ucyBvZgotICoJCQl2YXJpb3VzIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0KLSAqCQkJdXRpbGl0eSB0YXNrczsgaS5lLiwgdGhhdCBkbyBub3QgZml0IGludG8KLSAqCQkJYW55IG1ham9yIGNhdGVnb3J5IGJ1dCBwZXJmb3JtIHVzZWZ1bCB0YXNrcy4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgIndpbmRvd3MuaCIKLSNpbmNsdWRlICJsZHQuaCIKLSNpbmNsdWRlICJzdGFja2ZyYW1lLmgiCi0jaW5jbHVkZSAic3RkZGVidWcuaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotCi0KLQotLyoJTXVsRGl2IGlzIGEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgbWF5IGFzIHdlbGwgaGF2ZSBiZWVuCi0gKglpbXBsZW1lbnRlZCBhcyBhIG1hY3JvOyBob3dldmVyIE1pY3Jvc29mdCwgaW4gdGhlaXIgaW5maW5pdGUKLSAqCXdpc2RvbSwgaGF2ZSBpbXBsZW1lbnRlZCBpdCBhcyBhIERMTCBmdW5jdGlvbiBhbmQgdGhlcmVmb3JlCi0gKglzbyBzaG91bGQgd2UuIAotICoJQmFzaWNhbGx5LCBpdCB0YWtlcyB0d28gMTYtYml0IGludGVnZXJzLCBtdWx0aXBsaWVzIHRoZW0KLSAqCWFuZCBkaXZpZGVzIGJ5IGEgdGhpcmQgaW50ZWdlci4KLSAqLwotCi0jaWZkZWYgV0lORUxJQjMyCi1JTlQgTXVsRGl2KElOVCBmb28sIElOVCBiYXIsIElOVCBiYXopCi17Ci0jaWZkZWYgX19HTlVDX18KLSAgICBsb25nIGxvbmcgcmV0OwotICAgIGlmICghYmF6KSByZXR1cm4gLTE7Ci0gICAgcmV0ID0gKChsb25nIGxvbmcpZm9vICogYmFyKSAvIGJhejsKLSAgICBpZiAoKHJldCA+IDIxNDc0ODM2NDcpIHx8IChyZXQgPCAtMjE0NzQ4MzY0NykpIHJldHVybiAtMTsKLSAgICByZXR1cm4gcmV0OwotI2Vsc2UKLSAgICBpZiAoIWJheikgcmV0dXJuIC0xOwotICAgIHJldHVybiAoZm9vICogYmFyKSAvIGJhejsKLSNlbmRpZgotfQotI2Vsc2UgIC8qIFdJTkVMSUIzMiAqLwotSU5UIE11bERpdihJTlQgZm9vLCBJTlQgYmFyLCBJTlQgYmF6KQotewotICAgIGludCByZXQ7Ci0gICAgaWYgKCFiYXopIHJldHVybiAtMzI3Njg7Ci0gICAgcmV0ID0gKGZvbyAqIGJhcikgLyBiYXo7Ci0gICAgaWYgKChyZXQgPiAzMjc2NykgfHwgKHJldCA8IC0zMjc2NykpIHJldHVybiAtMzI3Njg7Ci0gICAgcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi0vKglVVElMSVRZX3N0cmlwMDE1KCkgcmVtb3ZlcyBcMDE1ICheTSwgQ1IpIGZyb20gYSBzdHJpbmc7Ci0gKgl0aGlzIGlzIGRvbmUgdG8gY29udmVydCBhIE1TLURPUy1zdHlsZSBzdHJpbmcgdG8gYSBtb3JlCi0gKglVTklYLWZyaWVuZGx5IGZvcm1hdC4gUmVwbGFjZW1lbnQgaXMgZG9uZSBpbi1wbGFjZS4KLSAqLwotCi12b2lkIFVUSUxJVFlfc3RyaXAwMTUoY2hhciAqZGVzdCkgewotCWNoYXIgKnNyYyA9IGRlc3Q7Ci0KLQl3aGlsZSgqc3JjKSB7Ci0JCXdoaWxlKCpzcmMgPT0gJ1wwMTUnKSBzcmMrKzsJLyogU2tpcCBcMDE1cyAqLwotCQl3aGlsZSgoKnNyYykgJiYgKCpzcmMgIT0gJ1wwMTUnKSkgKihkZXN0KyspID0gKihzcmMrKyk7Ci0JfTsKLQkqZGVzdCA9ICdcMCc7CS8qIEFkZCBudWxsIHRlcm1pbmF0b3IgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkJCQkJRGVidWdQcmludFN0cmluZwotICovCi1pbnQKLURlYnVnUHJpbnRTdHJpbmcoY2hhciAqc3RyKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKglPdXRwdXREZWJ1Z1N0cmluZyBzdHJpcHMgQ1JzIGZyb20gaXRzIChzdHJpbmcpIHBhcmFtZXRlciBhbmQKLSAqCWNhbGxzIERlYnVnUHJpbnRTdHJpbmcoKSwgd2hpY2ggd2FzIHdyaXR0ZW4gYnkgc29tZW9uZSBlbHNlLiAKLSAqCVNpbmNlIHRoaXMgaXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgV2luZG93cyBBUEksIGl0IG5lZWRzIG5vIAotICoJcmVmZXJlbmNlcyB0byBub25zdGFuZGFyZCBETExzLgotICovCi0KLXZvaWQgT3V0cHV0RGVidWdTdHJpbmcoTFBTVFIgZm9vKQotewotCVVUSUxJVFlfc3RyaXAwMTUoZm9vKTsKLQlEZWJ1Z1ByaW50U3RyaW5nKGZvbyk7Ci19OwotCi0jaWYgMAotLyoJVVRJTElUWV9xdWFsaWZ5KHNvdXJjZSwgZGVzdCkgdGFrZXMgdGhlIGZvcm1hdCBzdHJpbmcgc291cmNlIGFuZAotICoJY2hhbmdlcyBhbGwgdGhlIHBhcmFtZXRlcnMgdG8gY29ycmVzcG9uZCB0byBMaW51eCBpbnRlZ2VyIHNpemVzCi0gKglyYXRoZXIgdGhhbiBXaW5kb3dzIHNpemVzLiBGb3IgZXhhbXBsZSwgaXQgY29udmVydHMgJWkgdG8gJWhpCi0gKglhbmQgJWx4IHRvICV4LiBObyBhcnJheSBzaXplIGNoZWNraW5nIGlzIGRvbmUgYXQgcHJlc2VudC4KLSAqLwotCi1zdGF0aWMgdm9pZCBVVElMSVRZX3F1YWxpZnkoY29uc3QgY2hhciAqc291cmNlLCBjaGFyICpkZXN0KQotewotCWRwcmludGZfdXRpbGl0eShzdGRkZWIsICJVVElMSVRZX3F1YWxpZnkoXCIlc1wiLCBcIiVzXCIpO1xuIiwgCi0JCQlzb3VyY2UsIGRlc3QpOwotCWlmKCFzb3VyY2UpIHJldHVybjsJLyogRHVtYmFzcyBhdHRhY2shICovCi0Jd2hpbGUoKnNvdXJjZSkgewotCQkvKiBGaW5kIG5leHQgZm9ybWF0IGNvZGUuICovCi0JCXdoaWxlKCgqc291cmNlICE9ICclJykgJiYgKCpzb3VyY2UpKSB7Ci0JCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKLQkJfQotCQkvKiBZZWFoLCBJIGtub3cgSSBzaG91bGRuJ3QgdXNlIGdvdG9zLi4uLiAqLwotCQlpZiAoISgqc291cmNlKSkgZ290byBsb29wX2VuZDsKLQkJLyogc2tpcCB0aGUgJyUnICovCi0JCSooZGVzdCsrKSA9ICooc291cmNlKyspOwotCQkvKiBOb3cgaW5zZXJ0IGEgc2l6ZSBxdWFsaWZpZXIsIGlmIG5lZWRlZC4gKi8KLQkJc3dpdGNoKCpzb3VyY2UpIHsKLQkJCWNhc2UgJ2knOgotCQkJY2FzZSAnZCc6Ci0JCQljYXNlICd4JzoKLQkJCWNhc2UgJ1gnOgotCQkJY2FzZSAndSc6Ci0JCQljYXNlICdvJzoKLQkJCQkvKiBXZSBoYXZlIGEgMTYtYml0IHZhbHVlIGhlcmUuICovCi0JCQkJKihkZXN0KyspID0gJ2gnOwotCQkJCWJyZWFrOwotCQl9OwotCQkvKiBIZXJlIHdlIGdvICdyb3VuZCB0aGUgbXVsYmVycnkgYnVzaC4uLiAqLwotbG9vcF9lbmQ6Ci0JfTsKLQkqZGVzdCA9ICdcMCc7Ci19OwotI2VuZGlmCi0KLS8qCVVUSUxJVFlfYXJnc2l6ZSgpIGV2YWx1YXRlcyB0aGUgc2l6ZSBvZiB0aGUgYXJndW1lbnQgbGlzdCB0aGF0Ci0gKglhY2NvbXBhbmllcyBhIHZzcHJpbnRmKCkgb3Igd3ZzcHJpbnRmKCkgY2FsbC4KLSAqCUFyZ3VtZW50czoKLSAqCQljaGFyICpmb3JtYXQ7CXByaW50Zi1zdHlsZSBmb3JtYXQgc3RyaW5nLgotICoJCUJPT0wgd2luZG93czsJaWYgdGhpcyBpcyBUUlVFLCB3ZSBhc3N1bWUgdGhhdCBpbnRzIGFyZQotICoJCQkJMTYgYml0cyBpbiBzaXplOyBvdGhlcndpc2Ugd2UgZGVhbCB3aXRoCi0gKgkJCQkzMi1iaXQgdmFyaWFibGVzLgotICoJUmV0dXJuczoKLSAqCQlzaXplIChpbiBieXRlcykgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IGZvbGxvdyB0aGUgY2FsbC4KLSAqLwotCi1zaXplX3QgVVRJTElUWV9hcmdzaXplKGNvbnN0IGNoYXIgKmZvcm1hdCwgQk9PTCB3aW5kb3dzKQotewotCXNpemVfdCBzaXplID0gMDsKLQotI2RlZmluZSBJTlRfU0laRSAod2luZG93cyA/IDIgOiA0KQotCi0Jd2hpbGUoKmZvcm1hdCkgewotCQl3aGlsZSgoKmZvcm1hdCkgJiYgKCpmb3JtYXQgIT0gJyUnKSkgZm9ybWF0Kys7CS8qIHNraXAgYWhlYWQgKi8KLQkJaWYoKmZvcm1hdCkgewotCQkJY2hhciBtb2RpZmllciA9ICcgJzsKLQkJCWRwcmludGZfdXRpbGl0eShzdGRkZWIsICJmb3VuZDpcdFwiJSUiKTsKLQkJCWZvcm1hdCsrOwkJLyogc2tpcCBwYXN0ICclJyAqLwotCQkJLyogRmlyc3Qgc2tpcCB0aGUgZmxhZ3MsIGZpZWxkIHdpZHRoLCBldGMuICovCi0JCQkvKiBGaXJzdCB0aGUgZmxhZ3MgKi8KLQkJCWlmICgoKmZvcm1hdCA9PSAnIycpIHx8ICgqZm9ybWF0ID09ICctJykgfHwgKCpmb3JtYXQgPT0gJysnKQotCQkJCXx8ICgqZm9ybWF0ID09ICcgJykpIHsKLQkJCQlkcHJpbnRmX3V0aWxpdHkoc3RkZGViLCAiJWMiLCAqZm9ybWF0KTsKLQkJCQlmb3JtYXQrKzsKLQkJCX0KLQkJCS8qIE5vdyB0aGUgZmllbGQgd2lkdGgsIGV0Yy4gKi8KLQkJCXdoaWxlKGlzZGlnaXQoKmZvcm1hdCkpIHsKLQkJCQlkcHJpbnRmX3V0aWxpdHkoc3RkZGViLCAiJWMiLCAqZm9ybWF0KTsKLQkJCQlmb3JtYXQrKzsKLQkJCX0KLQkJCWlmKCpmb3JtYXQgPT0gJy4nKSB7Ci0JCQkJZHByaW50Zl91dGlsaXR5KHN0ZGRlYiwgIiVjIiwgKmZvcm1hdCk7Ci0JCQkJZm9ybWF0Kys7Ci0JCQl9Ci0JCQl3aGlsZShpc2RpZ2l0KCpmb3JtYXQpKSB7Ci0JCQkJZHByaW50Zl91dGlsaXR5KHN0ZGRlYiwgIiVjIiwgKmZvcm1hdCk7Ci0JCQkJZm9ybWF0Kys7Ci0JCQl9Ci0JCQkvKiBOb3cgd2UgaGFuZGxlIHRoZSByZXN0ICovCi0JCQlpZigoKmZvcm1hdCA9PSAnaCcpIHx8ICgqZm9ybWF0ID09ICdsJykgfHwgKCpmb3JtYXQgPT0gJ0wnKSkgewotCQkJCWRwcmludGZfdXRpbGl0eShzdGRkZWIsICIlYyIsIG1vZGlmaWVyKTsKLQkJCQltb2RpZmllciA9ICooZm9ybWF0KyspOwotCQkJfQotCQkJLyogSGFuZGxlIHRoZSBhY3R1YWwgdHlwZS4gKi8KLQkJCQlkcHJpbnRmX3V0aWxpdHkoc3RkZGViLCAiJWNcIlxuIiwgKmZvcm1hdCk7Ci0JCQlzd2l0Y2goKmZvcm1hdCkgewotCQkJCWNhc2UgJ2QnOgotCQkJCWNhc2UgJ2knOgotCQkJCWNhc2UgJ28nOgotCQkJCWNhc2UgJ3gnOgotCQkJCWNhc2UgJ1gnOgotCQkJCWNhc2UgJ3UnOgotCQkJCWNhc2UgJ2MnOgotCQkJCQlzaXplICs9ICgobW9kaWZpZXIgPT0gJ2wnKSA/IDQgOiBJTlRfU0laRSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ3MnOiBzaXplICs9IHNpemVvZihjaGFyICopOyBicmVhazsKLQkJCQljYXNlICdlJzoKLQkJCQljYXNlICdFJzoKLQkJCQljYXNlICdmJzoKLQkJCQljYXNlICdnJzoKLQkJCQljYXNlICdHJzoKLQkJCQkJLyogSXQgZG9lc24ndCBsb29rIGFzIGlmIFdpbmRvd3MnIHd2c3ByaW50ZigpCi0JCQkJCSAgIHN1cHBvcnRzIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cy4gSG93ZXZlciwKLQkJCQkJICAgSSdsbCBsZWF2ZSB0aGlzIGNvZGUgaGVyZSBqdXN0IGluIGNhc2UuICovCi0JCQkJCXNpemUgKz0gKG1vZGlmaWVyID09ICdMJykgPyBzaXplb2YobG9uZyBkb3VibGUpIDogc2l6ZW9mKGRvdWJsZSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ3AnOiBzaXplICs9IHNpemVvZih2b2lkICopOyBicmVhazsKLQkJCQljYXNlICduJzogc2l6ZSArPSBzaXplb2YoaW50ICopOyBicmVhazsKLQkJCX07Ci0JCX07Ci0JfTsKLSN1bmRlZiBJTlRfU0laRQotCWRwcmludGZfdXRpbGl0eShzdGRkZWIsICJVVElMSVRZX2FyZ3NpemU6IHJldHVybmluZyAlaVxuIiwgc2l6ZSk7Ci0JcmV0dXJuIHNpemU7Ci19OwotCi0vKglVVElMSVRZX2NvbnZlcnRBcmdzKCkgY3JlYXRlcyBhIDMyLWJpdCBhcmd1bWVudCBsaXN0IGZyb20gYSAxNi1iaXQgbGlzdC4KLSAqCVRoaXMgaXMgdXNlZCB0byBhbGxvdyB3dnNwcmludGYoKSBhcmd1bWVudHMgdG8gYmUgZmVkIHRocm91Z2ggCi0gKgl2c3ByaW50ZigpLgotICoKLSAqCUFyZ3VtZW50czoKLSAqCQljaGFyICpmbXQ7CWZvcm1hdCBzdHJpbmcKLSAqCQljaGFyICp3aW5hcmc7CVdpbmRvd3Mtc3R5bGUgYXJndW1lbnRzCi0gKgkKLSAqCVJldHVybnM6Ci0gKgkJbWFsbG9jKCllZCBwb2ludGVyIHRvIG5ldyBhcmd1bWVudCBsaXN0LiBUaGlzIHNob3VsZAotICoJCWJlIGZyZWUoKWQgYXMgc29vbiBhcyBpdCBpcyBmaW5pc2hlZCB3aXRoLgotICovCi0KLWNoYXIgKlVUSUxJVFlfY29udmVydEFyZ3MoY2hhciAqZm9ybWF0LCBjaGFyICp3aW5hcmcpCi17Ci0gICAgY2hhciAqcmVzdWx0ID0gKGNoYXIgKiltYWxsb2MoVVRJTElUWV9hcmdzaXplKGZvcm1hdCwgMCkpOwotICAgIGNoYXIgKnJwdHIgPSByZXN1bHQ7Ci0gICAgc2hvcnQgKndwdHIgPSAoc2hvcnQgKil3aW5hcmc7Ci0gICAgbG9uZyAqZHB0ciA9IChsb25nICopcmVzdWx0OwotICAgIAotICAgIHdoaWxlKCpmb3JtYXQpIHsKLQl3aGlsZSgoKmZvcm1hdCkgJiYgKCpmb3JtYXQgIT0gJyUnKSkgZm9ybWF0Kys7CS8qIHNraXAgYWhlYWQgKi8KLQlpZigqZm9ybWF0KSB7Ci0JICAgIGNoYXIgbW9kaWZpZXIgPSAnICc7Ci0JICAgIGRwcmludGZfdXRpbGl0eShzdGRkZWIsICJmb3VuZDpcdFwiJSUiKTsKLQkgICAgZm9ybWF0Kys7CQkvKiBza2lwIHBhc3QgJyUnICovCi0JICAgIAotCSAgICAvKiBGaXJzdCBza2lwIHRoZSBmbGFncywgZmllbGQgd2lkdGgsIGV0Yy4gKi8KLQkgICAgLyogRmlyc3QgdGhlIGZsYWdzICovCi0JICAgIGlmICgqZm9ybWF0ID09ICcjJyB8fCAqZm9ybWF0ID09ICctJyB8fCAqZm9ybWF0ID09ICcrJwotCQl8fCAqZm9ybWF0ID09ICcgJykgZm9ybWF0Kys7Ci0JICAgIAotCSAgICAvKiBOb3cgdGhlIGZpZWxkIHdpZHRoLCBldGMuICovCi0JICAgIHdoaWxlIChpc2RpZ2l0KCpmb3JtYXQpKSBmb3JtYXQrKzsKLQkgICAgaWYgKCpmb3JtYXQgPT0gJy4nKSBmb3JtYXQrKzsKLQkgICAgd2hpbGUgKGlzZGlnaXQoKmZvcm1hdCkpIGZvcm1hdCsrOwotCSAgICAKLQkgICAgLyogTm93IHdlIGhhbmRsZSB0aGUgcmVzdCAqLwotCSAgICBpZigqZm9ybWF0ID09ICdoJyB8fCAqZm9ybWF0ID09ICdsJyB8fCAqZm9ybWF0ID09ICdMJykKLQkgICAgICAgIG1vZGlmaWVyID0gKmZvcm1hdCsrOwotCSAgICAKLQkgICAgLyogSGFuZGxlIHRoZSBhY3R1YWwgdHlwZS4gKi8KLQkgICAgZHByaW50Zl91dGlsaXR5KHN0ZGRlYiwgIiVjXCJcbiIsICpmb3JtYXQpOwotCSAgICAKLQkgICAgc3dpdGNoKCpmb3JtYXQpIHsKLQkgICAgIGNhc2UgJ2QnOgotCSAgICAgY2FzZSAnaSc6Ci0JCWlmIChtb2RpZmllciA9PSAnbCcpIHsKLQkJICAgICooKGludCAqKXJwdHIpKysgPSAqKChpbnQgKil3aW5hcmcpKys7Ci0JCX0gZWxzZSB7Ci0JCSAgICAqKChpbnQgKilycHRyKSsrID0gKigoc2hvcnQgKil3aW5hcmcpKys7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICBjYXNlICdvJzoKLQkgICAgIGNhc2UgJ3gnOgotCSAgICAgY2FzZSAnWCc6Ci0JICAgICBjYXNlICd1JzoKLQkgICAgIGNhc2UgJ2MnOgotCQlpZiAobW9kaWZpZXIgPT0gJ2wnKSAgewotCQkgICAgKigodW5zaWduZWQgaW50ICopcnB0cikrKyA9ICAqKCh1bnNpZ25lZCBpbnQgKil3aW5hcmcpKys7Ci0JCX0gZWxzZSB7Ci0JCSAgICAqKCh1bnNpZ25lZCBpbnQgKilycHRyKSsrID0gKigodW5zaWduZWQgc2hvcnQgKil3aW5hcmcpKys7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgICBjYXNlICdzJzoKLQkgICAgIGNhc2UgJ3AnOgotCSAgICAgY2FzZSAnbic6CS8qIEEgcG9pbnRlciwgaXMgYSBwb2ludGVyLCBpcyBhIHBvaW50ZXIuLi4gKi8KLQkJKigoY2hhciAqKilycHRyKSsrID0gKGNoYXIgKilQVFJfU0VHX1RPX0xJTigqKFNFR1BUUiAqKXdpbmFyZyk7Ci0JCSgoU0VHUFRSICopd2luYXJnKSsrOwotCQlicmVhazsKLQkgICAgIGNhc2UgJ2UnOgotCSAgICAgY2FzZSAnRSc6Ci0JICAgICBjYXNlICdmJzoKLQkgICAgIGNhc2UgJ2cnOgotCSAgICAgY2FzZSAnRyc6Ci0JCS8qIEl0IGRvZXNuJ3QgbG9vayBhcyBpZiBXaW5kb3dzJyB3dnNwcmludGYoKQotCQkgc3VwcG9ydHMgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLiBIb3dldmVyLAotCQkgSSdsbCBsZWF2ZSB0aGlzIGNvZGUgaGVyZSBqdXN0IGluIGNhc2UuICovCi0JCWlmKG1vZGlmaWVyPT0nTCcpCi0JCSAgICAqKChsb25nIGRvdWJsZSAqKXJwdHIpKysgPSAqKChsb25nIGRvdWJsZSAqKXdpbmFyZykrKzsKLQkJZWxzZQotCQkgICAgKigoZG91YmxlICopcnB0cikrKyA9ICooKGRvdWJsZSAqKXdpbmFyZykrKzsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIGZvcig7IChjaGFyICopZHB0ciA8IHJwdHI7IGRwdHIgKyspCi0gICAgICAgIGRwcmludGZfdXRpbGl0eSggc3RkZGViLCAiJTA4bHggIiwgKmRwdHIgKTsKLSAgICBkcHJpbnRmX3V0aWxpdHkoIHN0ZGRlYiwgIlxuIiApOwotICAgIGZvcig7IChjaGFyICopd3B0ciA8IHdpbmFyZzsgd3B0ciArKykKLSAgICAgICAgZHByaW50Zl91dGlsaXR5KCBzdGRkZWIsICIlMDR4ICIsICp3cHRyICk7Ci0gICAgZHByaW50Zl91dGlsaXR5KCBzdGRkZWIsICJcbiIgKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfTsKLQotI2lmbmRlZiBXSU5FTElCCi1JTlQgd2luZG93c193c3ByaW50Zih2b2lkKQotewotICAgIExQU1RSIGxwT3V0cHV0LCBscEZvcm1hdCwgcHRyOwotICAgIEJZVEUgbmV3X3N0YWNrWzEwMjRdLCAqc3RhY2tfcHRyOwotICAgIEJPT0wgZkxhcmdlOwotCi0gICAgQllURSAqd2luX3N0YWNrID0gKEJZVEUgKilDVVJSRU5UX1NUQUNLMTYtPmFyZ3M7Ci0KLSAgICBscE91dHB1dCA9IChMUFNUUikgUFRSX1NFR19UT19MSU4oKihEV09SRCopd2luX3N0YWNrKTsKLSAgICB3aW5fc3RhY2sgKz0gc2l6ZW9mKERXT1JEKTsKLSAgICBscEZvcm1hdCA9IChMUFNUUikgUFRSX1NFR19UT19MSU4oKihEV09SRCopd2luX3N0YWNrKTsKLSAgICB3aW5fc3RhY2sgKz0gc2l6ZW9mKERXT1JEKTsKLQotICAgICAgLyogY3JlYXRlIDMyLWJpdCBzdGFjayBmb3IgbGliYydzIHZzcHJpbnRmKCkgKi8KLQotICAgIGZvciAocHRyID0gbHBGb3JtYXQsIHN0YWNrX3B0ciA9IG5ld19zdGFjazsgKnB0cjsgcHRyKyspCi0gICAgewotICAgICAgICBpZiAoKnB0ciAhPSAnJScgfHwgKisrcHRyID09ICclJykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIHNraXAgd2lkdGgvcHJlY2lzaW9uICovCi0gICAgICAgIHdoaWxlICgqcHRyID09ICctJyB8fCAqcHRyID09ICcrJyB8fCAqcHRyID09ICcuJyB8fAotICAgICAgICAgICAgICAgKnB0ciA9PSAnICcgfHwgaXNkaWdpdCgqcHRyKSB8fCAqcHRyID09ICcjJykKLSAgICAgICAgICAgIHB0cisrOwotCi0gICAgICAgIC8qIGhhbmRsZSBtb2RpZmllciAqLwotICAgICAgICBmTGFyZ2UgPSAoKCpwdHIgPT0gJ2wnKSB8fCAoKnB0ciA9PSAnTCcpKTsKLSAgICAgICAgaWYgKGZMYXJnZSkgcHRyKys7Ci0KLSAgICAgICAgc3dpdGNoICgqcHRyKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgKihjaGFyKiopc3RhY2tfcHRyID0gKGNoYXIgKilQVFJfU0VHX1RPX0xJTigqKERXT1JEKil3aW5fc3RhY2spOwotICAgICAgICAgICAgc3RhY2tfcHRyICs9IHNpemVvZihjaGFyICopOwotICAgICAgICAgICAgd2luX3N0YWNrICs9IHNpemVvZihEV09SRCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdjJzoKLQkKLS8qIHdpbmRvd3MnIHdzcHJpbnRmKCkgJWMgaWdub3JlcyAwJ3MsIHdlIHJlcGxhY2UgMCB3aXRoIFNQQUNFIHRvIG1ha2Ugc3VyZQotICAgdGhhdCB0aGUgcmVtYWluaW5nIHBhcnQgb2YgdGhlIHN0cmluZyBpc24ndCBpZ25vcmVkIGJ5IHRoZSB3aW5hcHAgKi8KLQkJCQkKLSAgICAgICAgICAgIGlmICgqKFdPUkQqKXdpbl9zdGFjaykKLSAgICAgICAgICAgICAgICAqKERXT1JEKilzdGFja19wdHIgPSAqKFdPUkQqKXdpbl9zdGFjazsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAqKERXT1JEKilzdGFja19wdHIgPSAnICc7Ci0gICAgICAgICAgICBzdGFja19wdHIgKz0gc2l6ZW9mKERXT1JEKTsKLSAgICAgICAgICAgIHdpbl9zdGFjayArPSBzaXplb2YoV09SRCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBpZiAoIWZMYXJnZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqKGludCopc3RhY2tfcHRyID0gKihJTlQqKXdpbl9zdGFjazsKLSAgICAgICAgICAgICAgICBzdGFja19wdHIgKz0gc2l6ZW9mKGludCk7Ci0gICAgICAgICAgICAgICAgd2luX3N0YWNrICs9IHNpemVvZihJTlQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogZWxzZSBmYWxsIHRocm91Z2ggKi8KLSAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgIGNhc2UgJ3gnOgotICAgICAgICBjYXNlICdYJzoKLSAgICAgICAgICAgIGlmIChmTGFyZ2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgKihEV09SRCopc3RhY2tfcHRyID0gKihEV09SRCopd2luX3N0YWNrOwotICAgICAgICAgICAgICAgIHdpbl9zdGFjayArPSBzaXplb2YoRFdPUkQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICooRFdPUkQqKXN0YWNrX3B0ciA9ICooV09SRCopd2luX3N0YWNrOwotICAgICAgICAgICAgICAgIHdpbl9zdGFjayArPSBzaXplb2YoV09SRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFja19wdHIgKz0gc2l6ZW9mKERXT1JEKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAqKERXT1JEKilzdGFja19wdHIgPSAwOwotICAgICAgICAgICAgc3RhY2tfcHRyICs9IHNpemVvZihEV09SRCk7Ci0gICAgICAgICAgICB3aW5fc3RhY2sgKz0gc2l6ZW9mKFdPUkQpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3c3ByaW50Zjogb29wcywgdW5rbm93biBmb3JtYXR0eXBlICVjIHVzZWQhXG4iLCAqcHRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZzcHJpbnRmKGxwT3V0cHV0LCBscEZvcm1hdCwgbmV3X3N0YWNrKTsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgIHdzcHJpbnRmICAgICAgICBbVVNFUi40MjBdIChub3QgdXNlZCBieSByZWxheSkKLSAqLwotaW50IHdzcHJpbnRmKExQU1RSIGxwT3V0cHV0LCBMUFNUUiBscEZvcm1hdCwgLi4uKQotewotCXZhX2xpc3QgdmFsaXN0OwotCWludCBBcmdDbnQ7Ci0KLQl2YV9zdGFydCh2YWxpc3QsIGxwRm9ybWF0KTsKLQlBcmdDbnQgPSB2c3ByaW50ZihscE91dHB1dCwgbHBGb3JtYXQsIHZhbGlzdCk7Ci0JdmFfZW5kKHZhbGlzdCk7Ci0KLQlyZXR1cm4gQXJnQ250OwotfQotCi0KLS8qCXd2c3ByaW50ZigpIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHZzcHJpbnRmKCkuIFRoaXMKLSAqCWltcGxlbWVudGF0aW9uIGNvbnZlcnRzIHRoZSBhcmd1bWVudHMgdG8gMzItYml0IGludGVnZXJzIGFuZAotICoJY2FsbHMgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24gdnNwcmludGYoKS4KLSAqCi0gKglLbm93biBzaG9ydGNvbWluZ3M6Ci0gKgkJd3ZzcHJpbnRmKCkgZG9lc24ndCB5ZXQgY29udmVydCB0aGUgYXJndW1lbnRzIGJhY2sgYWZ0ZXIKLSAqCQljYWxsaW5nIHZzcHJpbnRmKCksIHNvIGlmIFdpbmRvd3MgaW1wbGVtZW50cyAlbiBhbmQgYQotICoJCXByb2dyYW0gZGVwZW5kcyBvbiBpdCwgd2UncmUgaW4gdHJvdWJsZS4KLSAqLwotCi1pbnQgd3ZzcHJpbnRmKExQU1RSIGJ1ZiwgTFBTVFIgZm9ybWF0LCBMUFNUUiBhcmdzKQotewotCWNoYXIgKm5ld2FyZ3M7Ci0JaW50IHJlc3VsdDsKLQotCWlmKCFidWYgfHwgIWZvcm1hdCkgcmV0dXJuIDA7Ci0KLQkvKiBDb252ZXJ0IGFncnVtZW50cyB0byAzMi1iaXQgdmFsdWVzICovCi0JbmV3YXJncyA9IFVUSUxJVFlfY29udmVydEFyZ3MoZm9ybWF0LCBhcmdzKTsKLQlyZXN1bHQgPSB2c3ByaW50ZihidWYsIGZvcm1hdCwgbmV3YXJncyk7Ci0KLQlmcmVlKG5ld2FyZ3MpOwotCXJldHVybiByZXN1bHQ7Ci19OwotCmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbi5jIGIvd2luZG93cy93aW4uYwppbmRleCBjZTJiNzBhLi5lOWZiYWEwIDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbi5jCisrKyBiL3dpbmRvd3Mvd2luLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJzeXNtZXRyaWNzLmgiCiAjaW5jbHVkZSAiY3Vyc29yaWNvbi5oIgogI2luY2x1ZGUgImV2ZW50LmgiCisjaW5jbHVkZSAibWVudS5oIgogI2luY2x1ZGUgIm5vbmNsaWVudC5oIgogI2luY2x1ZGUgInF1ZXVlLmgiCiAjaW5jbHVkZSAid2lucG9zLmgiCkBAIC05NywxMCArOTgsMTAgQEAKICAgICAgICAgICAgICBwdHItPnB0SWNvblBvcy55LCBwdHItPnB0TWF4UG9zLngsIHB0ci0+cHRNYXhQb3MueSwgcHRyLT5oU3lzTWVudSwKICAgICAgICAgICAgICBwdHItPmZsYWdzLCBwdHItPmhQcm9wLCBwdHItPmhWU2Nyb2xsLCBwdHItPmhIU2Nyb2xsICk7CiAKLSAgICBpZiAocHRyLT5jbGFzcy0+d2MuY2JXbmRFeHRyYSkKKyAgICBpZiAocHRyLT5jbGFzcy0+Y2JXbmRFeHRyYSkKICAgICB7CiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgImV4dHJhIGJ5dGVzOiIgKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHB0ci0+Y2xhc3MtPndjLmNiV25kRXh0cmE7IGkrKykKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHB0ci0+Y2xhc3MtPmNiV25kRXh0cmE7IGkrKykKICAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiAlMDJ4IiwgKigoQllURSopcHRyLT53RXh0cmEraSkgKTsKICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiXG4iICk7CiAgICAgfQpAQCAtMzI0LDcgKzMyNSw3IEBACiAgICAgfQogICAgIGlmICh3bmRQdHItPmhTeXNNZW51KSBEZXN0cm95TWVudSggd25kUHRyLT5oU3lzTWVudSApOwogICAgIGlmICh3bmRQdHItPndpbmRvdykgWERlc3Ryb3lXaW5kb3coIGRpc3BsYXksIHduZFB0ci0+d2luZG93ICk7Ci0gICAgaWYgKHduZFB0ci0+Y2xhc3MtPndjLnN0eWxlICYgQ1NfT1dOREMpIERDRV9GcmVlRENFKCB3bmRQdHItPmhkY2UgKTsKKyAgICBpZiAod25kUHRyLT5jbGFzcy0+c3R5bGUgJiBDU19PV05EQykgRENFX0ZyZWVEQ0UoIHduZFB0ci0+aGRjZSApOwogICAgIHduZFB0ci0+Y2xhc3MtPmNXaW5kb3dzLS07CiAgICAgVVNFUl9IRUFQX0ZSRUUoIGh3bmQgKTsKIH0KQEAgLTM2MSw3ICszNjIsNyBAQAogICAgIGlmICghKGNsYXNzID0gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCBERVNLVE9QX0NMQVNTX0FUT00sIDAgKSkpCiAJcmV0dXJuIEZBTFNFOwogCi0gICAgaHduZERlc2t0b3AgPSBVU0VSX0hFQVBfQUxMT0MoIHNpemVvZihXTkQpK2NsYXNzLT53Yy5jYlduZEV4dHJhICk7CisgICAgaHduZERlc2t0b3AgPSBVU0VSX0hFQVBfQUxMT0MoIHNpemVvZihXTkQpK2NsYXNzLT5jYlduZEV4dHJhICk7CiAgICAgaWYgKCFod25kRGVza3RvcCkgcmV0dXJuIEZBTFNFOwogICAgIHBXbmREZXNrdG9wID0gKFdORCAqKSBVU0VSX0hFQVBfTElOX0FERFIoIGh3bmREZXNrdG9wICk7CiAKQEAgLTM4Niw3ICszODcsNyBAQAogICAgIHBXbmREZXNrdG9wLT5obWVtVGFza1EgICAgICAgICA9IDA7IC8qIERlc2t0b3AgZG9lcyBub3QgYmVsb25nIHRvIGEgdGFzayAqLwogICAgIHBXbmREZXNrdG9wLT5ocmduVXBkYXRlICAgICAgICA9IDA7CiAgICAgcFduZERlc2t0b3AtPmh3bmRMYXN0QWN0aXZlICAgID0gaHduZERlc2t0b3A7Ci0gICAgcFduZERlc2t0b3AtPmxwZm5XbmRQcm9jICAgICAgID0gY2xhc3MtPndjLmxwZm5XbmRQcm9jOworICAgIHBXbmREZXNrdG9wLT5scGZuV25kUHJvYyAgICAgICA9IGNsYXNzLT5scGZuV25kUHJvYzsKICAgICBwV25kRGVza3RvcC0+ZHdTdHlsZSAgICAgICAgICAgPSBXU19WSVNJQkxFIHwgV1NfQ0xJUENISUxEUkVOIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU19DTElQU0lCTElOR1M7CiAgICAgcFduZERlc2t0b3AtPmR3RXhTdHlsZSAgICAgICAgID0gMDsKQEAgLTM5OCw3ICszOTksNyBAQAogICAgIHBXbmREZXNrdG9wLT5mbGFncyAgICAgICAgICAgICA9IDA7CiAgICAgcFduZERlc2t0b3AtPndpbmRvdyAgICAgICAgICAgID0gcm9vdFdpbmRvdzsKICAgICBwV25kRGVza3RvcC0+aFN5c01lbnUgICAgICAgICAgPSAwOwotICAgIHBXbmREZXNrdG9wLT5oUHJvcAkgICAgICA9IDA7CisgICAgcFduZERlc2t0b3AtPmhQcm9wICAgICAgICAgICAgID0gMDsKICAgICBFVkVOVF9SZWdpc3RlcldpbmRvdyggcFduZERlc2t0b3AtPndpbmRvdywgaHduZERlc2t0b3AgKTsKICAgICBTZW5kTWVzc2FnZSggaHduZERlc2t0b3AsIFdNX05DQ1JFQVRFLCAwLCAwICk7CiAgICAgaWYgKChoZGMgPSBHZXREQyggaHduZERlc2t0b3AgKSkgIT0gMCkKQEAgLTQxMSwyMyArNDEyLDIzIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgQ3JlYXRlV2luZG93ICAgKFVTRVIuNDEpCisgKiAgICAgICAgICAgQ3JlYXRlV2luZG93MTYgICAoVVNFUi40MSkKICAqLwotSFdORCBDcmVhdGVXaW5kb3coIFNFR1BUUiBjbGFzc05hbWUsIFNFR1BUUiB3aW5kb3dOYW1lLAotCQkgICBEV09SRCBzdHlsZSwgSU5UIHgsIElOVCB5LCBJTlQgd2lkdGgsIElOVCBoZWlnaHQsCi0JCSAgIEhXTkQgcGFyZW50LCBITUVOVSBtZW51LCBIQU5ETEUgaW5zdGFuY2UsIFNFR1BUUiBkYXRhICkgCitIV05EIENyZWF0ZVdpbmRvdzE2KCBTRUdQVFIgY2xhc3NOYW1lLCBTRUdQVFIgd2luZG93TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIERXT1JEIHN0eWxlLCBJTlQxNiB4LCBJTlQxNiB5LCBJTlQxNiB3aWR0aCwgSU5UMTYgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgSFdORCBwYXJlbnQsIEhNRU5VIG1lbnUsIEhBTkRMRSBpbnN0YW5jZSwgU0VHUFRSIGRhdGEgKSAKIHsKLSAgICByZXR1cm4gQ3JlYXRlV2luZG93RXgoIDAsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgc3R5bGUsCisgICAgcmV0dXJuIENyZWF0ZVdpbmRvd0V4MTYoIDAsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgc3R5bGUsCiAJCQkgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwYXJlbnQsIG1lbnUsIGluc3RhbmNlLCBkYXRhICk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgQ3JlYXRlV2luZG93RXggICAoVVNFUi40NTIpCisgKiAgICAgICAgICAgQ3JlYXRlV2luZG93RXgxNiAgIChVU0VSLjQ1MikKICAqLwotSFdORCBDcmVhdGVXaW5kb3dFeCggRFdPUkQgZXhTdHlsZSwgU0VHUFRSIGNsYXNzTmFtZSwgU0VHUFRSIHdpbmRvd05hbWUsCi0JCSAgICAgRFdPUkQgc3R5bGUsIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LAotCQkgICAgIEhXTkQgcGFyZW50LCBITUVOVSBtZW51LCBIQU5ETEUgaW5zdGFuY2UsIFNFR1BUUiBkYXRhICkgCitIV05EIENyZWF0ZVdpbmRvd0V4MTYoRFdPUkQgZXhTdHlsZSwgU0VHUFRSIGNsYXNzTmFtZSwgU0VHUFRSIHdpbmRvd05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3R5bGUsIElOVDE2IHgsIElOVDE2IHksIElOVDE2IHdpZHRoLCBJTlQxNiBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgSFdORCBwYXJlbnQsIEhNRU5VIG1lbnUsIEhBTkRMRSBpbnN0YW5jZSwgU0VHUFRSIGRhdGEgKSAKIHsKICAgICBIQU5ETEUgaHduZDsKICAgICBDTEFTUyAqY2xhc3NQdHI7CkBAIC00NTIsOCArNDUzLDggQEAKIAkJZXhTdHlsZSwgc3R5bGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsCiAJCXBhcmVudCwgbWVudSwgaW5zdGFuY2UsIChEV09SRClkYXRhKTsKIAotICAgIGlmICh4ID09IENXX1VTRURFRkFVTFQpIHggPSB5ID0gMDsKLSAgICBpZiAod2lkdGggPT0gQ1dfVVNFREVGQVVMVCkKKyAgICBpZiAoeCA9PSBDV19VU0VERUZBVUxUMTYpIHggPSB5ID0gMDsKKyAgICBpZiAod2lkdGggPT0gQ1dfVVNFREVGQVVMVDE2KQogICAgIHsKIAl3aWR0aCA9IDYwMDsKIAloZWlnaHQgPSA0MDA7CkBAIC00OTQsNyArNDk1LDcgQEAKIAogICAgICAgLyogQ3JlYXRlIHRoZSB3aW5kb3cgc3RydWN0dXJlICovCiAKLSAgICBod25kID0gVVNFUl9IRUFQX0FMTE9DKCBzaXplb2YoV05EKStjbGFzc1B0ci0+d2MuY2JXbmRFeHRyYSApOworICAgIGh3bmQgPSBVU0VSX0hFQVBfQUxMT0MoIHNpemVvZihXTkQpK2NsYXNzUHRyLT5jYlduZEV4dHJhICk7CiAgICAgaWYgKCFod25kKSB7CiAJZHByaW50Zl93aW4oc3RkZGViLCJDcmVhdGVXaW5kb3dFeDogT3V0IG9mIG1lbW9yeVxuIik7CiAJcmV0dXJuIDA7CkBAIC01MTksNyArNTIwLDcgQEAKICAgICB3bmRQdHItPmhtZW1UYXNrUSAgICAgID0gR2V0VGFza1F1ZXVlKDApOwogICAgIHduZFB0ci0+aHJnblVwZGF0ZSAgICAgPSAwOwogICAgIHduZFB0ci0+aHduZExhc3RBY3RpdmUgPSBod25kOwotICAgIHduZFB0ci0+bHBmblduZFByb2MgICAgPSBjbGFzc1B0ci0+d2MubHBmblduZFByb2M7CisgICAgd25kUHRyLT5scGZuV25kUHJvYyAgICA9IGNsYXNzUHRyLT5scGZuV25kUHJvYzsKICAgICB3bmRQdHItPmR3U3R5bGUgICAgICAgID0gc3R5bGUgJiB+V1NfVklTSUJMRTsKICAgICB3bmRQdHItPmR3RXhTdHlsZSAgICAgID0gZXhTdHlsZTsKICAgICB3bmRQdHItPndJRG1lbnUgICAgICAgID0gMDsKQEAgLTUyNywyMSArNTI4LDE4IEBACiAgICAgd25kUHRyLT5mbGFncyAgICAgICAgICA9IDA7CiAgICAgd25kUHRyLT5oVlNjcm9sbCAgICAgICA9IDA7CiAgICAgd25kUHRyLT5oSFNjcm9sbCAgICAgICA9IDA7Ci0gICAgd25kUHRyLT5oU3lzTWVudSAgICAgICA9IDA7CisgICAgd25kUHRyLT5oU3lzTWVudSAgICAgICA9IE1FTlVfR2V0RGVmU3lzTWVudSgpOwogICAgIHduZFB0ci0+aFByb3AgICAgICAgICAgPSAwOwogCi0gICAgaWYgKGNsYXNzUHRyLT53Yy5jYlduZEV4dHJhKQotCW1lbXNldCggd25kUHRyLT53RXh0cmEsIDAsIGNsYXNzUHRyLT53Yy5jYlduZEV4dHJhICk7CisgICAgaWYgKGNsYXNzUHRyLT5jYlduZEV4dHJhKQorCW1lbXNldCggd25kUHRyLT53RXh0cmEsIDAsIGNsYXNzUHRyLT5jYlduZEV4dHJhICk7CiAgICAgY2xhc3NQdHItPmNXaW5kb3dzKys7CiAKICAgICAgIC8qIEdldCBjbGFzcyBvciB3aW5kb3cgREMgaWYgbmVlZGVkICovCiAKLSAgICBpZiAoY2xhc3NQdHItPndjLnN0eWxlICYgQ1NfT1dOREMpCi0gICAgICAgIHduZFB0ci0+aGRjZSA9IERDRV9BbGxvY0RDRSggRENFX1dJTkRPV19EQyApOwotICAgIGVsc2UgaWYgKGNsYXNzUHRyLT53Yy5zdHlsZSAmIENTX0NMQVNTREMpCi0gICAgICAgIHduZFB0ci0+aGRjZSA9IGNsYXNzUHRyLT5oZGNlOwotICAgIGVsc2UKLSAgICAgICAgd25kUHRyLT5oZGNlID0gMDsKKyAgICBpZiAoY2xhc3NQdHItPnN0eWxlICYgQ1NfT1dOREMpIHduZFB0ci0+aGRjZSA9IERDRV9BbGxvY0RDRShEQ0VfV0lORE9XX0RDKTsKKyAgICBlbHNlIGlmIChjbGFzc1B0ci0+c3R5bGUgJiBDU19DTEFTU0RDKSB3bmRQdHItPmhkY2UgPSBjbGFzc1B0ci0+aGRjZTsKKyAgICBlbHNlIHduZFB0ci0+aGRjZSA9IDA7CiAKICAgICAgIC8qIEluc2VydCB0aGUgd2luZG93IGluIHRoZSBsaW5rZWQgbGlzdCAqLwogCkBAIC01ODgsNyArNTg2LDcgQEAKIAl9CiAgICAgICAgIHdpbl9hdHRyLmNvbG9ybWFwICAgICAgPSBDT0xPUl9XaW5Db2xvcm1hcDsKICAgICAgICAgd2luX2F0dHIuYmFja2luZ19zdG9yZSA9IE9wdGlvbnMuYmFja2luZ3N0b3JlID8gV2hlbk1hcHBlZCA6IE5vdFVzZWZ1bDsKLSAgICAgICAgd2luX2F0dHIuc2F2ZV91bmRlciAgICA9ICgoY2xhc3NQdHItPndjLnN0eWxlICYgQ1NfU0FWRUJJVFMpICE9IDApOworICAgICAgICB3aW5fYXR0ci5zYXZlX3VuZGVyICAgID0gKChjbGFzc1B0ci0+c3R5bGUgJiBDU19TQVZFQklUUykgIT0gMCk7CiAgICAgICAgIHdpbl9hdHRyLmN1cnNvciAgICAgICAgPSBDVVJTT1JJQ09OX1hDdXJzb3I7CiAgICAgICAgIHduZFB0ci0+d2luZG93ID0gWENyZWF0ZVdpbmRvdyggZGlzcGxheSwgcm9vdFdpbmRvdywgeCwgeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCAwLCBDb3B5RnJvbVBhcmVudCwKQEAgLTYxMiwxMyArNjEwLDExIEBACiAgICAgaWYgKChzdHlsZSAmIFdTX0NBUFRJT04pICYmICEoc3R5bGUgJiBXU19DSElMRCkpCiAgICAgewogICAgICAgICBpZiAobWVudSkgU2V0TWVudShod25kLCBtZW51KTsKLSAgICAgICAgZWxzZSBpZiAoY2xhc3NQdHItPndjLmxwc3pNZW51TmFtZSkKLSAgICAgICAgICAgIFNldE1lbnUoIGh3bmQsIExvYWRNZW51KCBpbnN0YW5jZSwgY2xhc3NQdHItPndjLmxwc3pNZW51TmFtZSApICk7CisgICAgICAgIGVsc2UgaWYgKGNsYXNzUHRyLT5scHN6TWVudU5hbWUpCisgICAgICAgICAgICBTZXRNZW51KCBod25kLCBMb2FkTWVudSggaW5zdGFuY2UsIGNsYXNzUHRyLT5scHN6TWVudU5hbWUgKSApOwogICAgIH0KICAgICBlbHNlIHduZFB0ci0+d0lEbWVudSA9IChVSU5UKW1lbnU7CiAKLSAgICBHZXRTeXN0ZW1NZW51KCBod25kLCBUUlVFICk7ICAvKiBDcmVhdGUgYSBjb3B5IG9mIHRoZSBzeXN0ZW0gbWVudSAqLwotCiAgICAgICAvKiBTZW5kIHRoZSBXTV9DUkVBVEUgbWVzc2FnZSAqLwogCiAgICAgY3JlYXRlU3RydWN0LmxwQ3JlYXRlUGFyYW1zID0gKExQU1RSKWRhdGE7CkBAIC02NDMsNyArNjM5LDcgQEAKICAgICBlbHNlCiAgICAgewogCVdJTlBPU19TZW5kTkNDYWxjU2l6ZSggaHduZCwgRkFMU0UsICZ3bmRQdHItPnJlY3RXaW5kb3csCi0JCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgJnduZFB0ci0+cmVjdENsaWVudCApOworCQkJICAgICAgIE5VTEwsIE5VTEwsIDAsICZ3bmRQdHItPnJlY3RDbGllbnQgKTsKIAl3bWNyZWF0ZSA9IFNlbmRNZXNzYWdlKGh3bmQsIFdNX0NSRUFURSwgMCwgKExQQVJBTSlNQUtFX1NFR1BUUigmY3JlYXRlU3RydWN0KSk7CiAgICAgfQogCkBAIC03NTgsNyArNzU0LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBGaW5kV2luZG93ICAgKFVTRVIuNTApCiAgKi8KLUhXTkQgRmluZFdpbmRvdyggU0VHUFRSIENsYXNzTWF0Y2gsIExQU1RSIFRpdGxlTWF0Y2ggKQorSFdORCBGaW5kV2luZG93KCBTRUdQVFIgQ2xhc3NNYXRjaCwgTFBTVFIgVGl0bGVNYXRjaCApIHsKKyAgICByZXR1cm4gRmluZFdpbmRvd0V4KChIV05EKTAsKEhXTkQpMCxDbGFzc01hdGNoLFRpdGxlTWF0Y2gpOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRmluZFdpbmRvd0V4ICAgKFVTRVIuNDI3KQorICovCitIV05EIAorRmluZFdpbmRvd0V4KEhXTkQgcGFyZW50LEhXTkQgY2hpbGRhZnRlcixTRUdQVFIgQ2xhc3NNYXRjaCxMUFNUUiBUaXRsZU1hdGNoICkKIHsKICAgICBXTkQgKnduZFB0cjsKICAgICBDTEFTUyAqY2xhc3MgPSBOVUxMOwpAQCAtNzY5LDcgKzc3MiwyMyBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgd25kUHRyID0gcFduZERlc2t0b3AtPmNoaWxkOworICAgIGlmIChwYXJlbnQpIHsKKyAgICAJd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIocGFyZW50KTsKKyAgICAJaWYgKHduZFB0ciA9PSBOVUxMKQorICAgIAkJd25kUHRyID0gcFduZERlc2t0b3A7CisgICAgCXduZFB0ciA9IHduZFB0ci0+Y2hpbGQ7CisgICAgfSBlbHNlCisJd25kUHRyID0gcFduZERlc2t0b3AtPmNoaWxkOworICAgIGlmIChjaGlsZGFmdGVyKSB7CisJd2hpbGUgKHduZFB0cikKKwl7CisJICAgIGlmIChjaGlsZGFmdGVyID09IHduZFB0ci0+aHduZFNlbGYpIHsKKwkgICAgCXduZFB0ciA9IHduZFB0ci0+bmV4dDsKKwkgICAgCWJyZWFrOworCSAgICB9CisJICAgIHduZFB0ciA9IHduZFB0ci0+bmV4dDsKKwl9CisgICAgfQogICAgIHdoaWxlICh3bmRQdHIpCiAgICAgewogCWlmICghY2xhc3MgfHwgKHduZFB0ci0+Y2xhc3MgPT0gY2xhc3MpKQpAQCAtMTUyNCw3ICsxNTQzLDcgQEAKICBMUERSQUdJTkZPCWxwRHJhZ0luZm87CiAgU0VHUFRSCQlzcERyYWdJbmZvOwogIEhDVVJTT1IgCWhEcmFnQ3Vyc29yPTAsIGhPbGRDdXJzb3I9MCwgaEJ1bW1lcj0wOwotIEhBTkRMRQkJaERyYWdJbmZvICA9IEdsb2JhbEFsbG9jKCBHTUVNX1NIQVJFIHwgR01FTV9aRVJPSU5JVCwgMipzaXplb2YoRFJBR0lORk8pKTsKKyBIQU5ETEUJCWhEcmFnSW5mbyAgPSBHbG9iYWxBbGxvYzE2KCBHTUVNX1NIQVJFIHwgR01FTV9aRVJPSU5JVCwgMipzaXplb2YoRFJBR0lORk8pKTsKICBXTkQgICAgICAgICAgICp3bmRQdHIgPSBXSU5fRmluZFduZFB0cihoV25kKTsKICBEV09SRAkJZHdSZXQgPSAwOwogIHNob3J0CSAJZHJhZ0RvbmUgPSAwOwpAQCAtMTUzMiw4ICsxNTUxLDggQEAKICBIV05ECQloQ3VycmVudFduZCA9IDA7CiAgV09SRAkgICAgICAgIGJ0ZW1wOwogCi0gbHBEcmFnSW5mbyA9IChMUERSQUdJTkZPKSBHbG9iYWxMb2NrKGhEcmFnSW5mbyk7Ci0gc3BEcmFnSW5mbyA9IChTRUdQVFIpIFdJTjE2X0dsb2JhbExvY2soaERyYWdJbmZvKTsKKyBscERyYWdJbmZvID0gKExQRFJBR0lORk8pIEdsb2JhbExvY2sxNihoRHJhZ0luZm8pOworIHNwRHJhZ0luZm8gPSAoU0VHUFRSKSBXSU4xNl9HbG9iYWxMb2NrMTYoaERyYWdJbmZvKTsKIAogIGlmKCAhbHBEcmFnSW5mbyB8fCAhc3BEcmFnSW5mbyApIHJldHVybiAwTDsKIApAQCAtMTU0MSw3ICsxNTYwLDcgQEAKIAogIGlmKCAhaEJ1bW1lciB8fCAhd25kUHRyICkKICAgIHsKLSAgICAgICAgR2xvYmFsRnJlZShoRHJhZ0luZm8pOworICAgICAgICBHbG9iYWxGcmVlMTYoaERyYWdJbmZvKTsKICAgICAgICAgcmV0dXJuIDBMOwogICAgfQogCkBAIC0xNTQ5LDcgKzE1NjgsNyBAQAogICAgewogCWlmKCAhKGhEcmFnQ3Vyc29yID0gQ1VSU09SSUNPTl9JY29uVG9DdXJzb3IoaEN1cnNvcikpICkKIAkgIHsKLQkgICBHbG9iYWxGcmVlKGhEcmFnSW5mbyk7CisJICAgR2xvYmFsRnJlZTE2KGhEcmFnSW5mbyk7CiAJICAgcmV0dXJuIDBMOwogCSAgfQogCkBAIC0xNjMyLDcgKzE2NTEsNyBAQAogIGlmKCBoQ3VycmVudEN1cnNvciAhPSBoQnVtbWVyICkgCiAJZHdSZXQgPSBTZW5kTWVzc2FnZSggbHBEcmFnSW5mby0+aFNjb3BlLCBXTV9EUk9QT0JKRUNULCAKIAkJCSAgICAgKFdQQVJBTSloV25kLCAoTFBBUkFNKXNwRHJhZ0luZm8gKTsKLSBHbG9iYWxGcmVlKGhEcmFnSW5mbyk7CisgR2xvYmFsRnJlZTE2KGhEcmFnSW5mbyk7CiAKICByZXR1cm4gZHdSZXQ7CiB9CmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbnBvcy5jIGIvd2luZG93cy93aW5wb3MuYwppbmRleCA5ZTdmMDczLi5lMDU5ZWYwIDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbnBvcy5jCisrKyBiL3dpbmRvd3Mvd2lucG9zLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogICovCiBMT05HIFdJTlBPU19TZW5kTkNDYWxjU2l6ZSggSFdORCBod25kLCBCT09MIGNhbGNWYWxpZFJlY3QsIFJFQ1QgKm5ld1dpbmRvd1JlY3QsCiAJCQkgICAgUkVDVCAqb2xkV2luZG93UmVjdCwgUkVDVCAqb2xkQ2xpZW50UmVjdCwKLQkJCSAgICBXSU5ET1dQT1MgKndpbnBvcywgUkVDVCAqbmV3Q2xpZW50UmVjdCApCisJCQkgICAgU0VHUFRSIHdpbnBvcywgUkVDVCAqbmV3Q2xpZW50UmVjdCApCiB7CiAgICAgTkNDQUxDU0laRV9QQVJBTVMgcGFyYW1zOwogICAgIExPTkcgcmVzdWx0OwpAQCAtMTMzNyw3ICsxMzM3LDcgQEAKICAgICAgIHsKICAgICAgICAgIHJlc3VsdCA9IFdJTlBPU19TZW5kTkNDYWxjU2l6ZSggd2lucG9zLmh3bmQsIFRSVUUsICZuZXdXaW5kb3dSZWN0LAogCQkJCSAgICAmd25kUHRyLT5yZWN0V2luZG93LCAmd25kUHRyLT5yZWN0Q2xpZW50LAotCQkJCSAgICAmd2lucG9zLCAmbmV3Q2xpZW50UmVjdCApOworCQkJCSAgICBNQUtFX1NFR1BUUigmd2lucG9zKSwgJm5ld0NsaWVudFJlY3QgKTsKIAogICAgICAgICAgLyogRklYTUU6IFdWUl9BTElHTnh4eCAqLwogCg==